A Year of Failed Prototypes

It’s been over six months since I released my last game, and almost that long since I’ve updated this blog.

I’ve been busy with non-gamedev stuff, but I’ve also been hacking away in my spare time. Unfortunately, most of these projects haven’t really gone anywhere. So I decided to go through the ones that had some promise, record a brief demo video, and upload the code to GitHub.

One of the hardest things for anyone who does creative work as a hobby is finding the balance between quality and getting stuff done. For most of these prototypes, I didn’t they were good enough to keep working on them. So I let them digitally rot in some deep folder of my hard drive. Thing is – there’s some good stuff buried in there. By going through and at least getting the projects into a shape to share the code, maybe someone else can take away something useful. Plus – it makes me feel slightly more productive.

And who knows – sharing these prototypes may kickstart enough motivation to turn them into full-fledged games.

Open Ocean Test

**Source**: [https://github.com/tdonlan/OpenOceanTest](https://github.com/tdonlan/OpenOceanTest "https://github.com/tdonlan/OpenOceanTest")

This is a prototype built in XNA to simulate an open world ocean. You swim a submarine through the ocean, underwater passages and lots of different fish. The terrain is generated using similar algorithms used to generate the Platform Hack tile maps. Some of the fish (flocking) move with similar algorithms to some of the germs in NanoDoc. I also put together some code for skeletal-based movement, and was going to have the larger fish (whales, sharks, big squids, seaweed) move that way instead of sprite sheet animation.

Challenges:

  • How the divide the sea from the air? I could never find a surface that looked good. Right now I’m just using a fat line tracing an oscillating sine curve. But if I ever used any sort of texturing on for the waves, it looked pretty bad.
  • How to handle all the fish + terrain? Running collision on all the fish would have been too slow. And I was just spawning various fish at different depths, not checking if they were in water or in rock first. One solution was to just have fish get repelled by the thickest rocks until they were in the ocean, but this led to strange bugs. The other issue was when to save the state of the world? If the world gets large enough, you can’t store it in memory effectively, so you have to come up with some sort of “chunking” algorithm for the world, which can be a lot of overhead to program.
  • How to make a game out of it? I thought the game would be mostly a sandbox with some loose missions and some upgrade trees for various tools on the subs: harpoon guns, engines, fishing rods, manipulator arm. Maybe even a flashlight. Missions could be something like: find this exotic fish in this section of the map. Catch a 500 lb marlin! Pull up the treasure from the sunken Pirate ship! Fun stuff, but a good bit of overhead to implement (questing system, mini-map, etc)

Fishing Test

Source: https://github.com/tdonlan/FishingTest

This prototype was partially inspired by a tweet for a fishing game jam, playing Ridiculous Fishing, and also fond memories of fishing minigames in videogames of yore (Ocarina of Time). I wanted to find a gameplay mechanic that mimicked the gentle tug and pull of real fishing – finding a balance between reeling in a fish and having the line break.

Anyway, the core mechanic is basic math, but the most technical part of the demo is the physics of the fishing line. This was actually done using Farseer Physics rope joints.

Challenges:

  • Getting the mechanics to feel just right. The fishing line feels a bit too floaty. And the fishing minigame feels a bit too random – like the player doesn’t have enough control reeling it in. Once both of those variables are adjusted, I think it could be a pretty fun prototype.

JSRPG

Source: https://github.com/tdonlan/JSRPG

This is a rough RPG built in JavaScript. It was actually created to try to build a RPG plugin for Twine games. I wanted to create a nice framework for building gamebooks (like Lone Wolf), where you could read through a choose-your-own-adventure style text game, but also handle battles and inventory. The pure RPG battle stuff ended up working ok in JavaScript, but the Twine integration was a nightmare (worthy of a separate post).

This demo is just the standalone JavaScript RPG functionality. Most everything is data-driven, so you can customize the game however you like, using JSON and CSV files.

Challenges:

  • Building complex logic with JavaScript: Things like – I want an item to grant an ability – which would be trivial in a strongly-typed compiled language, are pretty frustrating to build in JavaScript. Since there are no real enums, you have a ton of code to check for different strings, which can get cumbersome.
  • Display Loop: Right now the battle loop does the logic, then just recalculates all the HTML and updates the div. Ideally, there would be a way to separate it into some sort of MVC pattern, where the logic and data of the RPG was broken up a bit better from the display. Right now it’s a tightly coupled mess.
  • Everything in the browser: all the problems with doing stuff in the browser – how to save state (to disk or server), how to prevent cheating (you can’t). At the very least, I think I proved to myself that using Twine + JavaScript to make a Lone Wolf gamebook system isn’t really feasible (at least for someone with my level of skill + patience). I’m thinking Client + Server or iOS App would work much better.

SpaceTest Asteroid Clone

Source: https://github.com/tdonlan/SpaceGameTest

This is an iOS game built using Cocos2D. I had this idea to do an asteroids game where you could destroy asteroids and enemy ships, collect minerals, level up your ship, etc. Right now the prototype has the flying around part working pretty well – it feels a lot like the classic game of asteroids. It’s using touch screen controls to steer and shoot.

Challenges:

  • Does this game belong on iOS? I think my original intentions were larger than the limited screen real estate of an iPhone. The touch controls felt a little sluggish, especially the precision required for shooting and flying a spaceship through asteroid belts.
  • Parallax backgrounds in Cocos2d – there’s a built-in parallax functionality, but it’s not infinitely scrolling in 2 directions. I ended up hacking together a system to draw a background starfield and have it scroll as a function of the player’s movement. But it never felt very smooth. One of the biggest frustrations I’ve had with Cocos2D is finding a middle ground between using CCSprite to draw a static sprite object, and using low level OpenGL calls to draw lines and other primitives. Makes me miss XNA Spritebatch…
  • Realistically, I could grind on this game for a few months, find some decent art, and have something publishable on the App Store. Unfortunatly, my ADD kicked in and I was off to the races on something else. We’ll see if I pick it up again.