Spectre Shock

Been a while since I posted anything here, but I’ve been maintaining a devlog for a new game over at the TIGForums. As described in the thread, the game is a “procedurally-generated first-person action-RPG, incorporating whatever elements of rogue-likes and ‘Shock-likes’ (System Shock, Bioshock, etc.) make sense.”

I recently adding support for patching to my engine, which has allowed me to keep a playable development version up to date without the need to publish a full installer for each iteration.

So far, this plan has worked out well. The immediacy of being able to push out updates coupled with the accountability of having a publicly visible devlog have kept me motivated so far. Outside of a few TIGS compo games, most of the projects I’ve taken on since Arc Aether Anomalies (back in mid-2008) have been abandoned for one reason or another (mostly overscoped design and art requirements). Hopefully I can actually stick with this one.

TIGForums: Spectre Shock

Spectre Shock

Simplex noise

Man, it would’ve been awesome if I had heard of simplex noise before I started trying to implement what I was calling “triangular Perlin noise.” Turns out this problem has already been solved…by Ken Perlin, no less. Hurr durr.

On the other hand, I feel pretty good about having come up with essentially the same solution, even if my implementation was specific to 2D noise.

I’m a little curious as to why I haven’t heard more about simplex noise, seeing as it’s been around for almost a decade, and I researched noise functions pretty intensively back in 2006 when I was working on my Master’s project. I just now discovered Stefan Gustavson’s 2005 paper “Simplex noise demystified” (http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf), which provides a nice, clean, legible explanation of how it works and how it differs from classic Perlin noise, with pictures and everything.

I think I’ll take another look at my own implementation tonight and see what I can do to improve it. I know for sure my conversion to simplex coordinates worked differently (I staggered each row in opposite directions, as opposed to skewing all coordinates uniformly), and I recall having some trouble finding a suitable function for summing the contributions of the three nearest gradients, though I may have ended up with the same one used here. My initial approach involved interpolating over barycentric coordinates, which produced obvious visual artifacts; I believe I did eventually land on the radial falloff solution, though I couldn’t say off the top of my head what sort of falloff function I used.

Way-too-late edit: I would be remiss not to include a link to Ken Perlin’s original paper: http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf

P.S. It’s just pronounced like “ether”

Two years after its release, Arc Aether Anomalies still accounts for about 95% of the traffic I get to my web site (at least in terms of bandwidth…maybe next time I shouldn’t host a moderately large installer on my own space, hurr). But what’s really interesting to me is that people are actually searching for it. And after seeing some of these search phrases, I’m wondering if maybe I should’ve chosen a less unusual title.

arc aether anomalies
arc aether anomolies
arc aether an-
aether anomalies
arc aether anomalie
arc ether anomalies
arc nether anomalies

So…”Arc Aether Alacrity”…is that still on the table for threequel titles?

SomeApp!

I’ve started working on a web app. The prototype is available at http://www.j-kyle.com/testbed/someapp/. There’s no real functionality yet, but eventually it will be an issue management system.

The motivation for this project was my inability to find a web-based issue tracking app that met my needs. Most issue tracking services provide software that is intended to be installed on a server; I wanted something already set up and accessible to anyone with a browser, and with the ability to allow users to collaborate on issues as opposed to strictly a personal to-do list sort of thing.

PHP and MySQL is turning out to be a breeze. I already have registration, email verification, and login/logout working. My implementation could probably be better, but hey, it’s my first try.

Polydrome Horizon

Set up a new project last night based on PinkBunny. Gonna do another retro/CRT game, but this one won’t be for a competition, so with no time limit (but still a relatively small scope), hopefully I can make this one a little more complete. Details and screenshots of tech to come as they are available.

Another itch to scratch

Learning PHP, MySQL, and CSS. Gonna make a new site and do it right this time. My testbed is available here if you want to watch my (lack of) progress in real time: http://www.j-kyle.com/testbed. The goal is to have a dynamically populated list of all my ongoing projects, with a dynamically generated details page for each one, and links to all relevant external sites (LinkedIn, Twitter, WordPress, Toodledo, and so on). Also I’m shooting for XHTML 1.0 Strict compliance, ’cause why not? Gonna work on getting the content available first, then I can spend some time worrying about the presentation. Besides just learning CSS, I also need to read up on good site design and maybe just good design in general. I know I have a copy of the Non-Designer’s Design Book somewhere; probably time to break that out again.

Hooray for inconvenience!

So it looks like Baywords is back up, which means all my old blog entries are viewable again, but now I gotta decide which blog to continue using. Unfortunately, Baywords doesn’t support importing or exporting blog entries, so I can’t merge them into one either way. Lame. Thanks for nothing, Baywords.

I guess I could manually copy each entry over since there were only a handful of them, anyway, but then they’d be all out of order and stuff and I’d have to manually update their timestamps. Rarghrarghrargh.

EDIT! I copied all my old entries over by hand. The image refs still all point to Baywords, which is sketch, but whatevs.

I have done a maths

I posted this over on the TIGForums, but I thought it might be worth posting here, too. And if not, well at least I updated my devblog ever.

Ever have a time when a problem that you’ve assumed is difficult turns out to be so simple you feel stupid for not attempting to solve it sooner?

The problem was this: Given a constant gravity speed and a desired jump height (and assuming standard parabolic jump physics), compute an initial jump speed that will reach the desired height. For some reason this always seemed scary and I just never bothered to solve it. Instead, I’d just screw around with jump speeds until I got something that was close enough.

Turns out it’s actually pretty simple to solve (and if I had looked, it’s all over the internets, too). Set up the equation for the parabola, take its derivative to find the velocity over time, find the time where the velocity is zero (since this will be the peak of the jump), plug this back into the parabolic equation, and solve for the velocity. If anyone’s curious about the solution, it’s just:

// In arbitrary units, and assuming Gravity is a positive value
JumpSpeed = sqrt(2.0f * Gravity * JumpHeight);

Heh.

Ignorance is bliss

So a couple months ago, I thought it’d be a cool idea to add crash dump support to my engine so that any time one of my games crashed, it would save out the callstack to a minidump file and upload it to my web site. The good news is, it works as intended. The bad news is, I now have about four or five known bugs that I can’t repro and therefore can’t fix. I kind of wish I didn’t know that.