I created become a game developer in 60 seconds for the Ludum Dare compo this weekend. There were two themes, "growing," and "two button controls." I focused on "two button controls" and figured that making a game was sort of like growing a game. It became very meta.
I think the game speaks pretty well for itself.
I somehow already got a lot of awesome comments.
My changelog was pretty tame:
2015-12-12 10:26:27 Initial commit. Here we go. 2015-12-12 10:53:06 Image editor? 2015-12-12 11:13:34 A primitive menu. 2015-12-12 11:21:59 What am I doing? 2015-12-12 12:17:19 Added game.js, so it's like it's done. 2015-12-12 12:35:54 Some input changes and image editor suggestions. 2015-12-12 13:03:54 Almost a game. 2015-12-12 13:35:44 Shooting. 2015-12-12 13:46:41 Some endgame business. 2015-12-12 14:05:14 We're going to make some sounds. 2015-12-12 14:54:51 Sound editor. 2015-12-12 15:23:44 This is almost really a game. 2015-12-12 15:35:27 Fix fix fix. 2015-12-12 16:15:06 I'm now in the 'what have I done' phase of the day. 2015-12-12 16:29:56 All of the parts are there. 2015-12-12 16:45:33 Added a timer. 2015-12-12 17:23:38 Got rid of the collectible editor. Made sharing work. 2015-12-12 17:29:09 Title screen. 2015-12-12 17:40:18 Last minute thought. 2015-12-13 10:15:27 Added random bleeps and bloops all the time. Toned down the volume. Added a tiny bit more helper text. Changed the +1 now that it's configurable. 2015-12-13 10:16:52 Oops, you should always be able to get points. 2015-12-13 10:23:12 Even quieter, just because.
Thanks to the Tech Valley Game Space for giving me a place to hang out while doing this, and the Tech Valley Center of Gravity for being that space and being located in a great place for post-jam food, the center of downtown Troy, NY.
I entered Crab Boss in the Ludum Dare 33 Compo this weekend. The theme was, "you are the monster."
The idea I first started to pursue was basically to make a QWOP-style game where you control a giant crab in a boss fight.
By the time I had a reasonably interesting crab to control, I ended up simplifying the controls a bit and making it a simple action game.
The crab is made using a toy animation system I built as I went. There are no textures in the game. Everything is drawn using combinations of triangles and squares and circles made out of triangles. It probably cost me as much as four hours getting all of that working, but that was all time I did not have to spend drawing, and it lent itself to a unique visual and animation style, so I was happy to do it.
Audio was a huge hassle. For some reason, Audacity would only play back my recordings at the correct speed one in ten times. The result is that levels are all terrible, half of the sounds are made with bfxr while the other half are recorded, and some of the sounds I intended to make are just not there. This probably cost me an hour or two, and since the first two comments I have gotten complained about the volume, I think it is going to hurt my overall score.
But it was fun, and I have yet another little game to show off. I wish any of my coworkers would participate.
Recently I took the opportunity to participate in the Ludum Dare 48-hour Game Jam Compo #30.
I wanted to explore multiple worlds connected in multiple ways. In the end this meant two worlds which you could take rockets between that needed some sort of network connection between then uncovered and repaired. I had meant to build up the dungeon, which is what I called the area starting with the rats, into its own world, and I meant to have one or two Mario-style warp pipes as another means of connecting areas, but I ran out of steam to set up all of that.
Play my entry here.
My changelog this time was only slightly less distraught than last time:
2014-08-23 08:08:09 Connected worlds. 2014-08-23 10:50:46 What am I doing? 2014-08-23 11:30:02 Hrm. Tiles? 2014-08-23 12:42:41 I am the worst at collision. 2014-08-23 12:43:13 Forgotten file. 2014-08-23 14:10:51 Bah, collision.h 2014-08-23 16:14:52 This is...something? 2014-08-23 16:19:49 Fix the end of the line. 2014-08-23 17:24:26 Augh, doors. 2014-08-23 18:37:19 Something about rockets? 2014-08-23 19:21:48 Stubs for lots of levels. 2014-08-23 21:03:13 Fonts and shovels? 2014-08-23 22:10:12 Push the push blocks. 2014-08-24 07:49:19 Minor fixes. 2014-08-24 09:04:29 Rats. 2014-08-24 09:30:28 Yeah, cats. 2014-08-24 09:44:12 It's almost like a puzzle. 2014-08-24 09:57:19 More puzzly. What's up with the wire now? 2014-08-24 10:22:44 Fixes. 2014-08-24 10:57:59 More bombs. 2014-08-24 11:28:55 Something about blcoks. Restarting levels. 2014-08-24 11:29:04 Forgotten file. 2014-08-24 11:29:16 Forgotten files. 2014-08-24 12:02:56 I think everything is wired up? 2014-08-24 12:56:26 More rocket. 2014-08-24 13:28:03 This is really something. 2014-08-24 13:58:28 Finally, the worlds are different. 2014-08-24 14:24:19 Ugg, digg animation. 2014-08-24 14:28:52 Oh man oh man. 2014-08-24 15:32:33 Content content content. Fix fix fix. 2014-08-24 16:00:29 Cats... 2014-08-24 16:20:36 WWW HTTP WWW HTTP 2014-08-24 16:25:57 Faster digging. Wire fix. 2014-08-24 17:28:19 What have I done? 2014-08-24 17:42:30 Some fixes. 2014-08-24 18:05:56 I'm some kind of monster. 2014-08-25 20:49:46 Ported to my arcade cabinet? 2014-08-26 18:40:39 Hide cursor for the arcade cabinet. 2014-08-29 09:11:29 Some optimizations so that I can run this thing on the arcade cabinet better. 2014-08-29 09:38:37 Faster still.
The "some kind of monster" comment referred to adding in title music.
Overall I was pretty pleased with how things turned out. I stopped a few hours early, just because I was tired of staring at it, and I didn't think there was anything dramatic I could change at that point without breaking something.
Things that Made Me Happy
- Music and sound
- I set out to use a ukulele to make all of the sound effects and music for the game. As anticipated, this was one of the last things I did, but I felt like I had enough time to give it an acceptable treatment. I ended up having to tap on my desk for more effect than I expected.
- It takes me about ten minutes to play through the game. It's admittedly rather tedious, and it won't help me with ratings among the 2500+ other entries, but I'm happy that I made something big enough that it can't be fully understood in 15 seconds.
- Base code
- This time I reused some of the base code from my last entry. This might have easily saved me half a day.
Things that Made Me Sad
- Collision response
- I have written collision response code many times and have reasonable awareness of the problems that come up, but it always trips me up. Every time. This time I went down a path that wasn't working and pretty quickly switched to something naive enough to work. I could use an existing solution next time, but I'd like to come to terms with this, so I will probably continue to try doing it myself.
- I knew the scope of work for this project was going to be significant, but I naively left "making it fun" and "making interesting puzzles" to near the very end (or never). I'm glad I challenged myself the way I did, but it didn't work out like I had hoped it would.
- At the end of the first night, I found myself implementing textured font rendering. This seemed like a mistake. It cost me a fair amount of time getting the math right, and I could have spent that time making something else better if I had just use HTML to display text.
- I said I would pay more attention to balance this time, but one of the last things I did was adjust digging speed, and I think this made the game way more tedious than I intended.
10/10 would participate again.
In the mosaics, my title screen appears in the middle of the parrot's tail and somewhere around Turkey.
I took the opportunity to participate in the Ludum Dare 48-hour Game Jam competition #29 over the weekend. I have participated in a small handful of game jams previously, but this one was special to me for several reasons:
- I had permission from my employer to release what I created under reasonable conditions. Most things I work on, including game jams projects, have had to stay inside work.
- This was a solo competition. I typically would work with a team.
- I do not actually remember the last time I made a game. It has been too long.
Play my entry here.
I was honestly planning on following the lead set by notch during the last Ludum Dare and was going to use Dart to make my entry. I toyed around with it on the plane ride back from GDC and decided to give it a pass based on the fact that I could not disable bracket auto-completion in the editor.
One final constraint I had given myself was to make something that would be suitable for my arcade cabinet.
How it Went Down
I do not know how better to describe how the process went than my commit messages, reproduced below.
I did make it a point to eat and sleep well. Saturday afternoon there is a big gap in productivity where I ran to the grocery store so that I could make a pizza. The pizza came out worse than the game. I used some sausage that did not turn out as good as I had hoped.
I have made several games before that used the same general approach for building the level out of triangles. It is of course directly inspired by Soldat. The good thing is that I can get something pretty convincing together pretty quickly, with only brief excursions to references on Wolfram Mathworld and Wikipedia. The bad thing about it is that it took me a fair amount of time to get an editor together, and it was pretty clunky even in the end. And then throughout the entire weekend I found myself falling through the world in different places and attempting fixes to the collision code to prevent that from happening. Some pre-made physics code would have saved me a lot of time and trouble here, but where is the fun in that? In the end, I think it is pretty difficult to find holes in the collision, if there exist any. I would have built the levels somewhat differently if I trusted the collision more. Ceiling especially would have made the underground feeling much better, as well as encouraging flying around the levels using weapon kickback. Enemies are mostly relegated to flat terrain to avoid collision problems. I never properly sorted out the math for going up hills, but it is fun to fly off them so quickly, so I did not see that as an issue.
The heart/meat/weapon pickups are inspired by health/armor/weapon upgrades in Earth Defense Force 2017. Except that instead of individually creating over a hundred weapons, I rigged things so that each weapon is generally better than the last with variations on a several basic properties. I think the main failure here was that I should have given the weapons corny names instead of explicitly listing out all of their properties, and I also did not spend enough time balancing the game.
As far as balance goes, it has some big problems. I changed some things and fixed some bugs shortly before submitting which changed how the game played significantly. I should have spent more time playing toward the end. Creating the levels from first to last also left me bored toward levels three and four. The intent was to make the game go on forever with each replay becoming successively harder, but I either forgot or became so lazy and concerned with bigger issues that I did not bother to implement that.
For a weekend, from scratch, I am pretty pleased with what I ended up with.
2014-04-26 09:42:50 First. 2014-04-26 10:12:01 Shaderssss. 2014-04-26 10:35:20 First triangle. 2014-04-26 10:40:28 First texture. 2014-04-26 11:06:46 Ehh. 2014-04-26 11:35:34 Moving...something. Augh. 2014-04-26 13:08:51 Augh, collision detection. 2014-04-26 14:47:24 More collision. I'm not going to be fiddling with this forever. Nope. 2014-04-26 15:09:09 Yup. 2014-04-26 16:31:42 Sigh. 2014-04-26 17:03:27 Smooth movement, but...I don't know. 2014-04-26 20:16:25 Adding triangles. 2014-04-26 20:26:47 Moving camera. 2014-04-26 20:46:30 Edit more. Adding triangles. 2014-04-26 20:59:21 Moving verts. 2014-04-26 21:21:13 Level editor persistence...eyyy. 2014-04-26 21:54:10 Finally, shooting. 2014-04-26 22:09:27 Fix triangle winding. Snap triangles to grid. 2014-04-26 22:13:52 Some friction and slip. 2014-04-26 22:22:48 First thing killed. Murder blood veins in my teeth. 2014-04-26 22:30:28 Breakable -> Goomba. 2014-04-26 22:42:24 omfg. An ant. 2014-04-26 22:52:12 This is basically done. 2014-04-26 23:04:10 Ant hill. 2014-04-26 23:23:45 Forgetten images. Dealing with death. 2014-04-26 23:57:45 I wanted to mess with a weird vertex shader instead of sleeping? 2014-04-27 08:36:06 Finally, a thing beneath another thing. 2014-04-27 08:42:11 Made it easier to save/load multiple levels. 2014-04-27 08:53:33 Panning. Ant hill texture. 2014-04-27 10:13:28 Projectile stuff. 2014-04-27 10:57:43 Entity placement editing. Whew. 2014-04-27 11:14:40 Um, there's a groundhog? 2014-04-27 11:46:25 Player warping between levels. Also made stubs for all levels. 2014-04-27 12:10:41 Some textures. 2014-04-27 13:00:31 More textures and something about health and armor. 2014-04-27 13:08:09 Drops. 2014-04-27 13:11:48 Made some more things fall to the ground. 2014-04-27 13:14:11 Loop levels forever. 2014-04-27 13:53:09 More bricky bricks. Actually lob projectiles. 2014-04-27 14:19:00 Working on second level. 2014-04-27 14:23:32 More level2. 2014-04-27 14:25:57 Tweak some damage. 2014-04-27 14:44:05 Projectiles oh my. 2014-04-27 15:07:23 Augh, fighting with collision response. 2014-04-27 15:20:20 Fix death. Yep. 2014-04-27 15:58:03 It's a last level. 2014-04-27 16:13:28 What I don't even. 2014-04-27 16:18:01 Well it is a title. 2014-04-27 16:33:08 Fixed next level and cleaned up things that fell through the world? :/ 2014-04-27 16:40:18 Fix texture wrap modes and black boxes. 2014-04-27 16:55:32 Weapons stats and tweaked weapons. 2014-04-27 17:17:24 Gibs. 2014-04-27 17:22:39 Kickback. 2014-04-27 17:35:26 Ehhh. It's a background. 2014-04-27 17:43:50 Different dude. 2014-04-27 18:03:25 Sounds! 2014-04-27 18:06:58 Removed debug stuff. 2014-04-27 18:32:59 Added debug settings for starting level and weapon. Fixed reload times for enemies. 2014-04-27 18:44:56 Last minute collision tweak. Why not? 2014-04-27 18:45:13 Oops, debug. 2014-04-27 18:53:37 Reeled in kickback a little bit. 2014-04-27 19:01:38 Eh? 2014-04-27 19:10:16 Added directions.
Oh, and there is already a YouTube video of somebody playing it, so it was a great success, no matter how I get ranked.
Late last year I decided I wanted to make an arcade cabinet.
Phase 1: Evaluation
I decided that the first step of the process was to determine if this was just a passing whim or I would actually want a cabinet occupying living space. Cardboard seemed as good a place to start as any to test my actual interest before investing anything other than time.
It took several hours to gather, clean up, patch, and cut up enough cardboard to make the rough cabinet shape I wanted.
I ordered controls, and quickly got a few old games of mine (mostly projects from college) running on it when they arrived.
Phase 2: Wood Construction
The cardboard was not meant to be permanent, and it basically collapsed after a few weeks under the weight of the monitor.
I picked up three 4'x8' sheets of 3/4" plywood from a hardware store, cut to 2'x8'. It took some time to settle on a shape for the cabinet, but once I did, measuring and cutting the side panels went fairly quickly. Lots of sanding ensured that the sides generally matched.
Content with the sides, I started cutting pieces of wood for the top and bottom of the cabinet. Everything except the back is fastened with lots of screws through 1"x2" strips into the plywood from the inside. Piece by piece, I closed in the box.
In retrospect, the construction would have gone much faster if I had planned measurements for everything up front, so that I could assembly-line each step: measuring, cutting, sanding, drilling, and screwing. I figure I could make a second one off of the measurements of this in a day or two that way.
I painted everything, added wheels, mounted the controls, and added some outlets for power and a network cable. The C14 power connector was impossible to find in stores. I was able to scavenge one from a burnt-out PC power supply.
I was quite pleased with how it looked solid black, but the red plastic T-molding really made it seem more legitimate to me.
The Finished Product
With some help, I managed to get it upstairs.
I still have plenty to do, but it is finally playable.
- I would like to add a proper coin door.
- I want to fit it with a bigger monitor. I mean to make a frame to cover everything except the monitors display and then cover the whole thing with an acrylic sheet.
- And once I make a proper game or two for it, I intend to pick a name for the thing and add a marquee and some graphics.
The current game list so far is just the set of games I have made that were easy enough to bring over to it as well as arcade games suggested by friends.
I was observing someone make a tiled terrain system earlier in the week, and I was reminded of an old project of mine: Tank Xing.
Much to my shock, I didn't have a build of it handy, and I couldn't so much as find any screenshots. I remedied this today.
A brief write-up as well as binaries are available here.
The relevant part to my original recollection is the function Terrain::generateTexture, which takes a height map and picks textures for each tile, inserting a border of hand-crafted transition textures between particular different heights.
The result looks something like this. Uh, disregard the texture sampling issues in between tiles.
It doesn't look like much. I never made any better art than some colored checkerboard textures to test it. It was nifty, to me, at the time.
As I previously mentioned, I have been dusting off some of my old projects, making them build again, and organizing the source code and executables I've packaged for different platforms.
The ultimate result is this list of links for a pile of my projects. I don't expect anyone cares about these things but me, but I am making it as easy as I can for people to try them.
In addition, I made a list of projects in which I've been involved in any capacity at work. It's more than I remember. Even still, I'm not sure it's complete, yet. I hope 2011 and the future bring good things.
So that's me talking about my code.
At work, we had our first ever game jam last Saturday.
It's hard to share my team's resulting game, so here's a video:
After the 14 hours, I was exhausted, and it seemed like everything we had worked so hard on had fallen apart. Minutes before the judging we were able to quickly fix some bugs, and I'm pretty happy with the results. It may not look it, but it was a substantial effort to arrive at this from what we started with (not much).
The lesson I took away from this is that the ideal length of time for making a game is less than a year and more than a day. I propose game jams of every length in between to find the sweet spot.
I've been playing Minecraft. I can't rave enough about it, so I won't. But here's a little scenario I set up for a coworker on our survival mode multiplayer server. It was actually the second of two sets of puzzles I set up. I think this one worked out better, and it was easier to go back and get screenshots of each part.
It begins at the top of the observatorium tower. The giant flammable wood tower, that's part of the observatorium. The glass surface up there, Anton built that for everyone to be able to appreciate the view, supposedly. The two signs up on the glass surface, those are the first clue for Anton.
The first clue originally read something like this:
You lost your clay, but don't be sour. See what you can find at the base of the tower.
But due to circumstances beyond my control, they became damaged and were later some reason replaced by these:
Sobered up, you'll have the power... ...to find the treasure at the base of the tower.
Anton dug around the base of the tower. I basically had to force him to look behind the stairs at the base of the tower.
Eventually he arrived at the signs and discovered the next clue:
I don't know where yours went, Anton. ...but you'll find clay behind the 'o' in Jon.
The background here is that Anton had found some clay but lost it. It vanished from a chest or something. I suspect it was a bug in the game, as we've all mysteriously lost rare items on the server, but it may have been a thief. I found more than I needed and left a gift with this puzzle.
But what's this about the 'o' in 'Jon'?
That of course referred to this name emblazoned in the side of our biggest mine entrance. Getting behind the 'o' requires some acrobatics or scaffolding. Anton chose acrobatics.
Your recessed lights are nice, it's true. Behind the odd one is a message for you.
Back to the lower building of the observatorium are found several sets of stairs with torches in small holes in the wall. Anton is proud of these.
One of them isn't the same as the rest.
It's this one, with a redstone torch in it instead of a normal torch.
Clay I found on distant beaches... Lies under the shed, within your reaches.
We only have one shed. It's getting easy.
Under the shed is a hidden room. I think I picked up the signs, so here's a picture of where the message isn't but once was.
The message read:
You almost got it, you Canuck. It's further down with any luck.
The prize was a chest containing some clay, with this (finally) non-rhyming sign:
Congrats. You found some fucking clay.