Tuesday, December 15, 2009

Wormies is released :)

Wormies is now available in the app store, ready to accept your money :) . I forgot to post about it here when it first came out, so better late than never. Here is the iTunes link:


Thanks for supporting my tedious, time-consuming hobby. I'm now starting to plan out another iPhone project... hopefully a fantasy action-adventure game of some sort.

Saturday, August 29, 2009

Hooray, Wormies has been submitted!

I finally submitted Wormies to the App Store yesterday. It's been a long development process... I hope it fares well in the vast competition. The ~5000 apps and updates submitted per week will dwarf it pretty quickly I imagine, but oh well. Here is the large App Store icon:

Sunday, August 9, 2009

Moving Along to the Finish Line

I've been finalizing some little details in the game before release. The title menu now has proper buttons, with a copyright message, and no more FPS display:

I've also made a nice help menu slideshow explaining how the game works. Predator attacking now works pretty nicely, with predators moving along a curved path and a health bar at the top:

Really all that's left is testing and tweaking the game to be a bit more balanced. I've recruited my friend Paul as a beta tester, and the game seems to run properly on his iPhone 3G. Almost there :) .

Tuesday, July 21, 2009

Awesome Title Screen

I finished making the game title out of moving, randomly sized and tinted worm sprites. It looks pretty sweet:

Now I need to improve the other main menu "buttons" (aka, make actual buttons instead of boring text). As for the actual gameplay, I need to finish making the curved paths for predators, and make sequences for winning and losing the game. Progress is happening, though slowly :) .

Sunday, July 12, 2009

Worm Movement

I've been working on making the worms follow your finger as it drags along the screen. This will be used in predator mode to attack or retreat. So far, I've used the vector angle of the normalized touch point (assuming each worm is the origin) to rotate worms, then moved them in a straight line to the destination. This works, but it seems a bit choppy. I need to come up with a way for them to smoothly follow paths.

I've also made some tweaks to improve collision detection efficiency. This helps a lot with large worm counts.

This game is sure taking me a while to finish. Hopefully I'm getting close by now.

Wednesday, June 24, 2009

Predator Paths

I'm trying to determine a good way for predators to move along a non-linear path. So far, I've tried making a custom action in coocs2d to traverse an array of points, which can be set up to follow curves. It works, but this is a bit clunky and requires a large point resolution. Maybe I'll play with some splines / bezier curves later (making use of my Numerical Analysis skills from college).

Better Gameplay Video

Here is a (somewhat) better gameplay video:


The predator system still needs work. I want to have better battles involved.

Friday, June 12, 2009

Gameplay Video

I used a screen video capturing utility to make a gameplay video (with the iPhone simulator):

It's really just a run-through of the available tools to mess with the worms. The starfish predator also makes an appearance. I still need to work on the menus and create the help option.

Monday, June 8, 2009

Sound Approval, Pixel Formats, About Menu, and Loading Indicator

I've managed to get approval to use a few sounds from http://www.freesound.org/ in Wormies, which is awesome (thanks to Jan 'fresco' Ripper, Ben Hillyard, and 'junggle'). Still waiting on responses from two other sound creators. If I don't hear back, I'll have to record the sounds myself. I'm doing all this because the license for using sound files from Freesound is a bit odd with commercial products. It seems to be okay if I "sample, mash-up, or otherwise creatively transform" sounds, but not if I use them in their original state (unless I get permission from the creators). The wording is a bit ambiguous, so I'm taking the safe route.

I messed around a bit with pixel formats for my sprites. It's much more memory efficient (and a bit faster) to use 16-bit textures instead of 32-bit for sprites, but they tend to look bad with gradients and details. I ended up keeping 32-bit depth for everything but the game icons (such as food items, predator warning graphics, etc), which are generic enough to look about the same either way. Hopefully this will be a good reduction in memory use.

Since I'm trying to round things out nicely, I created an about menu option. It brings up a sprite (with pre-rendered text/graphics) with information about the author (me), sound attribution, image credits, and the cocos2d logo.

Finally, I added a nice loading icon using Apple's standard UIActivityIndicatorView (the awesome swirling wait cursor thing). I think this is a nice touch, since the CocosDenshion sound library added a bit of time to the loading (which was near-instantaneous before). Not bad for a day's work.

Wednesday, June 3, 2009

Sound Ahoy

I finally managed to compile and integrate Steve Oldmeadow's great CocosDenshion sound library into Wormies, with some help from the man himself for getting around linker bugs. Right now it just plays a splashing sound whenever the screen is touched, but it's awesome to see it working. After adding some sounds and a bit of polish, I'll finally be able to release the game.

Friday, May 22, 2009

iPhone OS 3.0

I just tested Wormies on the iPhone OS 3.0 beta 5. Everything seems to work great, both on the simulator and my iPod Touch (2nd gen, 16 GB). Kudos to the cocos2d developers who released version 0.7.3 just for OS 3.0 compatibility. Aside from this, in the last week of development I have also implemented basic predators. It's pretty sweet... random sea creatures come and try to devour your worms. Right now, you can only run away from then and hope to survive. I need to make the option to attack, using the strength attribute of each worm. I also need to add some warning that they are approaching, as it kinda happens out of the blue right now. Screenshot:

Sunday, May 10, 2009

Some Changes

I implemented a few odd features this week. The radiation tool now works. While shortening each worm's lifespan, it randomly increases or decreases points in strength, speed, and charm (with a bias towards decreasing points). I also made the food tool. If worms get too hungry (currently set to half their lifetime), they'll start eating each other instead of mating. To prevent this, you need to feed them occasionally with this tool (or just kill them off quickly enough for the next generation to take over). It places a food item on the screen, which worms eventually swarm around and devour, reducing their hunger.

I also stopped an annoying bug that created zombie worms, unable to breed or be killed, just swimming around on their own out of the game's control. It seemed to be an issue with scheduling a selector call with CallFuncND before completion of a previous selector call. It would delete worms from the storage array, but the sprite would still remain in memory (and keep the random movement cycle going). Fixed it by stopping all worm actions before calling a new function (kind of an ugly fix, but it works).

Now I will be working on:
  1. Adding predators which worms can attack or flee from
  2. Improving the starting menu
  3. Preventing the heart tool from being used with the population completely full (this can kill off all worms since breeding is stopped)
  4. Making a few more sprites for various icons and interactions
  5. Implement a sound system (I still need to decide on a good library for this) and come up with sound effects
  6. Test the game with iPhone OS 3.0

Thursday, April 30, 2009

Movement on Touch and Status Bar Removal

I implemented most of the finger/touch tool that moves worms to the tapped location. It starts with a short random delay on each worm before moving to the destination point within a random tolerance using the usual swimming circular motion. The overall effect is pretty realistic, though it gets slightly jumpy with the max number of worms on screen. I also removed the menu bar using the Info.plist file, which happens much faster than removing it through code (which I was doing before).

Tuesday, April 28, 2009

Fancy Backgrounds and Mating Probabilities

Through the magic of public domain images, I've found a few good background photos for the game (better than my horrible programmer art). It seems like a small change, but it makes the game look much nicer. I've also been improving the mating probability calculations. Each worm has a mating delay, set after birth or mating, that needs to count down to zero before another mating chance is available. Tuning the probability of mating to be balanced for small populations of ugly worms and large populations of charming worms is difficult. Here is a screenshot with a fancy background image (credit: National Oceanic and Atmospheric Administration/Department of Commerce):

Saturday, April 25, 2009

Worm Sizes and Colors

I made it so worm children take on attributes at least as strong as the weakest parent (plus some random chance at becoming stronger). Size increases as worms get larger, and the color tints greener as they get speedier. Once 75 or more worms exist (I might change this count later), an overpopulation situation occurs and no more mating happens until the death tool is used to weed out the gene pool. Screenshot:

Hot Wormy Love

I now have basic mating implemented in the game. Whenever there is a collision, there is a chance for two worms to mate (which will eventually be based on their "fitness" through strength, speed, and charm). A mating dance occurs (a 720 degree spin of each worm), then offspring are produced. Pretty neat to watch the worms populate the screen. Next step is to implement a few more things with mating probability, and using parent information for children genetic attributes.

Neat HUD Movement

I worked on the HUD a bit, creating a fancy way of selecting tool icons. Initially only one icon is in the lower right corner of the screen. When it is clicked, all the icons expand out horizontally, awaiting user selection. When one is selected, other icons are hidden, and the selected icon rotates while moving back to the lower right corner. Spiffy.

Friday, April 24, 2009

Basic Circle Movement

I've finally finished the algorithm for basic circle movement. A worm starts out at a random position and orientation, then "swims" to a random point using this algorithm, at which point it swims to another random point, etc. This took me far too long, and I'm sure there was an easier way, but at least it's usable. I tried spawning lots of worms and watching them swim around... it's pretty neat overall. Here is a screenshot of the current version (with some much-improved icons I created):

Thursday, April 23, 2009


Trying to get my worms to turn on a circular path has been quite frustrating. I want them to traverse a circle of given radius until pointing at the destination, at which time they just move straight there. I ended up creating an equation with variables for an angle, the radius, and the destination x and y, then solved for the angle in Mathematica. This seems to work, but produces odd singularities around x=0, and is generally being a pain in the ass. Now it's about time for sleep... it's hard programming all day at work then doing this all evening.

Sunday, April 19, 2009

Some Awful-Looking Buttons and More Worms

Now the game has a few horribly-drawn buttons for selecting various user interaction tools. I'll make some better-looking icons later. There are also some more worms (which are actually animated now). I've implemented the leftmost button that scatters worms away when the screen is pressed (eventually useful for dodging predators). Through the magic of congruent triangles, worms move to a set radius away from the tap location, without any trig calculations involved. It even uses the cool 3D ripple effect in cocos2D. Screenshot:

Nil Terminate Your Sequences

I had forgotten to put a final nil object on a sequence of actions. Bad, unpredictable crashes happened until I found this one. One more retarded mistake corrected.


Just had a hell of a time getting subversion working with Xcode. It ends up that I had accidentally imported my build directory, which was throwing off the whole process. After sorting this out, I finally have a nice repository with directories for trunk, tags, and branches, and a local checkout of the trunk.

Saturday, April 18, 2009

Bug Hunting

I just spent about 30 minutes trying to find out why touch events were not being handled properly in my main game layer. It ends up that I was just retarded and forgot to add the statement: "isTouchEnabled = YES;" to my layer initialization. Now onwards to moving worms and HUD icons.

Wormies Project Setup, Initial Screenshot

Following the fantastic guide from Monocle Studios, I created the initial Wormies project in Xcode. It has a basic menu and a test worm sprite:

And so it begins.

Initial Game Premise

Wormies will be a game involving lots of worm sprites, with the ability to grow, breed, and evolve based on user input. The worms will start out small and bland, then gradually change colors and shape based on evolutionary traits. I will use the great cocos2d iPhone library to manage graphics and hopefully sound.

Created Wormies Blog

I created this blog to document my work on the Wormies iPhone / iPod Touch game. I'll try to keep it up to date with my progress.