Post mortem – Isles of Solara

Isles of Solara updated

*Isles of Solara is an exploration / RTS style game where you use the fickle wind to sail around a uniquely generated world, fight off pirates and settle your people on a resource rich island.
NB: This is a shot of the updated, post compo version.*

Play and rate the game here!

This was my first Ludum Dare 48 competition and I was actually surprised that I didn’t encounter any major problems. I had read a few survival guides before hand and gained some really good tips, the most important for me was to actually eat regularly and sleep.

I felt clear headed and full of energy on Sunday, thanks to the 7.5 hours of sleep. It is sometimes really tough to walk away from the PC and go to bed when you’re in the zone making things, but it I’ve found through hard experience that it is essential to have that break.

I did go late on Sunday night as the comp starts 1pm Saturday and finishes a 11am Monday local time. So Monday was a write off, but I got everything done during the night/early morning so it wasn’t too bad.

Dev platform

I’m happy with the choice of Java to make the game. The JAR creation process is really quite easy in Eclipse and most people seemed able to play the game ok. Most issues with Java seem to come back to the JRE version on your system (1.7 is required).

Graphics

As usual (for me) the thing that I felt I wasted most time on was coming up with half decent graphics. After deciding on 2D tiles I initially spent too long working out how to avoid having to manually draw all possible 256 transitions for every tile type to every other type.

I eventually decided to bypass this altogether and create slightly over-sized irregular shaped tiles that then overlapped automatically when drawn. Each world tile had it’s own random id which the view used to sort and draw the visible tiles. This gave a good random appearance to tile edges and makes adding new tiles very easy. But sub one tile transitions, like beaches, are not really supported in this approach though (they need to be a whole tile).

Game states

The State machine pattern I used was an absolute life saver. I brought it in from one of my other projects and improved a bit it during the comp.

The reason it was so important is that it allowed me to immediately create the state classes that represent things like Main Menu State, Play Game State, Win State, Lose State.

Firstly, these states are placeholders that I can then focus on filling with actual functionality. Secondly, from a gameplay perspective, I knew that until the player could actually get to both the Win State and Lose State to the user, I didn’t have a playable game, just a demo.

For me this was very important. It made me constantly think “what does the player actually need to do to see the Win/Lose states?”. Getting towards the end of the comp and focusing on this, even at the expense of the many other things I could do, ensured that I didn’t get sidetracked and actually finished the game.

World generation and Wind creation.

Simplex noise is the improved version of Perlin noise that has been used in numerous games (and movies) over the years to create nature/random levels textures and other data. This made the world generation pretty straight forward using my custom Simplex noise library. Generated values above 0.5 are land tiles and below are sea. I spent some time tweaking the noise functions (just a few calls to generate the base noise) to create largish islands as well as plenty of tiny islands that would become rock hazards. Rather than come to a black border at the edge of the world I decided to use tiled noise so that you can sail “around the world” arriving back where you started eventually. I think this works quite well.

Simplex noise is more efficient than the older Perlin noise so I decided to also use it to create an ever changing air pressure grid using low octave noise (ie faster). The noise is cycled in the x and y coordinates to make the “air pressure” values change over time.

The wind at a certain location is then just a single vector that is the sum of 8 neighbouring air pressure values at a set distance (8 tiles) away. I’m really happy with this as it is essential to allowing other objects (such as ships) to use the wind vector to sail around the world. The 2D vector Dot product then allowed me to easily create the sailing with the wind / against the wind mechanic.

Simplex noise was a real time saver as it allowed me to skip the level creation process. However spending time tweaking the results is essential if you want to create levels / worlds that support half decent gameplay.

Other

Things that I didn’t finish to my satisfaction:
– Pirate ship AI is very weak. They shoot at you when near but are brain dead when it comes to avoiding rocks and land. Need to add this urgently if I expand the game.
– More complex settler strategy where settlers have needs that they fulfill as required rather than the current random checking for nearby resources.
– Weather effects such as clouds, storms, rain that affect ship sailing.
– Ship repair and upgrades.
– More collectable items such as treasure and goods.
– No music. Was planning to use Autotracker or cGMusic but ran out of time.

Overall this was a really fun experience and the fact that some people have got some enjoyment even out of this incomplete game is makes it more than worthwhile. I’m adding some small improvements to the game in the updated version (available from the main game page). If I get more inspiration I might even turn this into a real game down the track a bit.

Thanks for reading.

ashen

Source: ludumdare.com archive

Found a bug?
Tell us on Discord