Starting a devlog for my development of Terraformer, mostly to keep myself on top of it a little bit. I might no update this everyday as I do have other work to be working on, but I hope to have several updates a week.
The idea of Terraformer is that you are changing a planet’s surface to make it appropriate for an alien species to live there. It takes the form of a puzzle game where are you are changing the terrain on a tile of the planet that can then cascade changes into other tiles.
I already have basic level generation taken care of, I generate a valid surface to start with. Each terrain tile can change into specific other terrains and must be surrounded by those types of terrains, so there has to be some consistency in the planet surface.
Today I worked on the code to change tiles, I have the buttons and simple changing in place, but I still have work on the cascading changes to do. I’ve gone through several different ideas for algorithms for this but they weren’t quite what I wanted. I think I’m on the right track now so I hope to have that in place soon.
There is still a lot of work to be done on this game and I’ve been lazy about working on it so I hope to get back in the swing of regularly sitting down with it. One of the biggest things is going to be graphics, which I’m usually not great with but I hope to do something nice here.
I got a lot done today in my work to update Orbital Defense.
My goal was to get player units working today. For the basic functionality I really only need one unit in place so I just updated the basic attack unit.
First up I added in the graphics for it. In the original I wanted the satellites to rotate or at least have some bit of animation. With LibGDX it’s pretty simple to handle animation so I now have them rotating, which is nice.
One thing I had to fix in the conversion was the placement of satellites. The coordinate system is different between the standard android canvas and LibGDX. Basically the Y axis is reversed in Canvas 0 is at the top, in LibGDX 0 is at the bottom. I knew this was something to keep an eye out for so as soon as I tested it and saw the results I knew the change I had to make.
Now that I had satellites placed on the screen I need to get them to move. Moving something smoothly around a circle takes a bit more code then one might imagine but luckily all the code I had written still worked perfectly. I needed to make some adjustments based on changes I’ve made to where variables and methods are coming from, but nothing about the calculations needed to change which is always handy.
Since satellites could orbit I figured they should next be able to attack. Since I have meteors already in place, we have targets for the satellites. This was code that once I took a look at it I was able to reduce it down to far fewer lines. The general logic is still the same, i just get where I need to be a lot quicker and removed some of the redundant branches. Basically it checks to see if it still has a valid target, and if not finds one. Once a target is found it fires on it if the satellite is ready to fire. My original code for this logic took up about 50 lines, my new code for it takes up 20 and performs the same job in a more efficient way.
Part of attacking is that you want to see it on the screen, so I had to work out some better code for that. Previously I only had the attacks on screen for a frame or two, but with faster running frames this doesn’t really work so it’s all time based now. It is still only on the screen for 0.15 seconds but it is enough that you see it happening. I will probably adjust that number further as I work on things more.
Once I had code for satellites attacking in place I could just copy the same code for enemy attacks. Even though I don’t have any enemies that shoot in place yet, the logic stays essentially the same.
I do have meteors though, and the way that those attack is by hitting things, so I needed to put collision detection in place. One thing that is nice for simple collision detection in this game is that everything is more or less bounded by a circle. What makes that simple is that all you need to do to check for a collision is find out the distance between the center of the two objects and see if it is smaller than the radius of the two objects added together. Everything in the game has an impact damage assigned to it so I just subtract from the health of both objects. Of course I couldn’t leave things that simple though and I currently have two special types of satellites that don’t obey the same collision rules. The easy one is the Bulldozer satellite, specifically designed to take out meteors and other objects. It takes no damage from impact. The more difficult one is the Bouncer satellite. Bouncer satellites deflect meteors and neither takes damage. Handling these requires figuring out tangents and reflecting angles and all that jazz, which I had figured out previously and have code for. Right now I’m hoping my old code will work fine, as soon as Bouncers are added back in I specifically need to test them.
After all this added code I can then just simply check the health of all allied and enemy units and destroy the ones below 0, with a little quick explosion that I think I want to expand later on.
Basic game play is more or less in place with all these additions. What I really need to do next is add information to the screen. You currently do not know planet health or current resources, vitally important data to actually know how the game is going and what actions you can take in the game. I think I will work on those tomorrow as well as start working on the main menu screen and other non-game screens, which will all be new with the change to LibGDX.
In completely unrelated news, my Flynt Flossy shirt came in yesterday which is awesome. Here is Turquoise Jeep’s latest video:
So I kind of started One Game a Month last month, though my first game didn’t really fully come together what with being sick and having a prototype to build for actual work. For February I’ve decided to update an old game of mine, Orbital Defense and making Orbital Defense II.
The first order of business for the update is that I’m converting it over to use LibGDX. This is the framework I’ve used for my later games. I think it will help it run better and just look nicer overall. I’m still in this stage of the process, to the right is a screenshot of the current progress. The star field is twinkling, the Earth and the orbital zone are there and meteors are being created and run across the screen.
I still have a long ways to go, I need to add in all the other units, take care of unit collision and attacks, add the info bar and unit selection bar, etc. There is plenty to do here to have it converted and ready for the next step.
The next step will be updates. Since this is a tower defense type of game one big one I want in there are upgrades for satellites. This is really something I should have had in the first version but I just didn’t have a good plan in mind for how to go about it. I feel like I do now and it will work out nicely. I also want to add more satellites for the player to use, and perhaps a selection screen to decide which satellites you use. I want it to also have levels and more wave style gameplay for enemies instead of the random enemies it currently throws at you based on difficulty level. I’d like to do something more with the graphics as well, at least update how it looks so units are quite so cheap looking. Overall I just want to make it a better game that continues to be fun.
That is a lot to do, and the way I work I’m not sure it will be done this month so this might be an entry for another month. Either way, this is something I’ve decided to do so hopefully I end up with something interesting.
Well I’ve mostly been tweaking Speeder and levels for the last week and I’m pretty sure I’m ready for a testing release. I’ve posted on Facebook but I’ll post here as well: If you are interested in testing Speeder please let me know, I can always use more points of view. It is definitely not complete but I have most things in and two levels for each difficulty. There are no instructions in game yet and you need Android 2.0 or higher to run it.
I always feel like I need a better way to get feedback, I don’t always get as much as I’d like, but we’ll see how it goes.
No updates last week, I was out of town at the beginning of the week and working on a separate project the rest of the week, but I’m back at it today.
Today was mostly about rewriting how level selection and such works. Now you select a difficulty, then select the level in that difficulty you want to play. I have switched to only tracking a single high score for these individual levels which I think should be fine. I might add in the ability to add a name, but right now it’s just a score for each individual level. I’ll probably do something similar for continuous mode. Making all the lists interact with each other the way I wanted was a pain, but it worked out in the end after a bit of research and now it is a smooth experience.
With that put together I really need to make more levels for testing and get it out in front of some people. That will be my goal for the next few days, put together several interesting levels for testing.
No screenshot today, instead a Kids in the Hall sketch that is rad, like all of them.
The last two days have mostly been graphic work for me. I have the launcher icon finished and button graphics done, for now at least, I might go back and do something different with the buttons. I also added in the Level Complete state and the dialog to go along with it. It displays your score for the level, your bonus for remaining health, and then your total score. I updated the Game Over screen to display your total score as well. I set everything up to return the score and difficulty when you finish a game as well so that I can use it for high scores, but I need to do some work on that end before I actually save anything. I’m inching ever closer to a testing release. I still mostly need to finish high scores and a starter level for Medium and Hard difficulty.
Screenshot for today is the level complete screen on my test Hard level
I put together a list of things I need to finish for Speeder before I can send it out to people to test, so I started work on those today. Some of them are game features, others are just general features for the look and feel and such.
Today I started with game features. First I changed how speed and crashes work a bit. When you crash into the back of a car you will take damage and your overall speed will slow down. The change is now that while still behind the car you will slow down even further until you get out from behind the car at which time you speed back up to your base starting speed. While fully slowed down behind a car you do not get points so you want to avoid this situation.
Second I added in taking damage for going off-road. If you have more then half your car off-road for several seconds you will start taking damage to the car. The idea here is that on 4 and 5 lane levels you could in theory just drive off the road the entire time and never have to worry about hitting cars. I’m thinking about suspending scoring during that time as well, to further encourage staying on the road.
Lastly, I put in a finish line mechanism so that I can write full levels with an ending and track scoring on those individual levels. I still need to put in a level complete dialog, right now I just show the game over dialog, but it is working as intended.
Still to be added this week, a proper main screen which just consists of a play button right now, high score saving, and putting together at least one proper level for each difficulty.
So I was distracted for a few days last week working on other things. For a few days I put together a dissociated press program, to see how it works and play around with it. I didn’t get anything that interesting out of it to be honest. Then I spent a few days writing an Android Game of Life program. It looks pretty good and works well, I might turn it into a live wallpaper as I think that’s where it would do well. Either way it was an interesting thing to implement and can be amusing to watch for a while. The patterns you get can be really neat.
Today I got back to working on Speeder though and did some important work. I created the Object Pattern Handler that will make it so I can define patterns of cars, obstacles, and powerups to show up in the game and let me design more closely how levels will play out. Previously I was just randomly adding objects to lanes with the only prerequisite being they didn’t overlap when placed. With this added I now place objects based on predesigned patterns. This makes it much easier to define how a level will play out, and allow me to change how difficult a certain part of the game is. There will still be some dynamic things added, specifically nitros to speed you up because you can slow down so easily right now, but cars and other obstacles will all be defined patterns to drive though.
I now need to design a bunch of good patterns, I’ve made sure this new part of the game works by testing it out on some simple patterns and letting it randomly choose other patterns when the first one is done. Everything looks great so far. I even defined one slightly more complex and longer pattern and works perfectly.
For screenshots today, here are two that show several of the simple patterns I defined.
Some more work today, fully implemented pausing, which doesn’t seem like much but is handy. Also returning to the main screen after game over is in. I’ve put a background on the health meter so it’s not just white when you lose health, it looks better that way. I’ve also fixed the grass texture so it doesn’t have an annoying white line at the bottom.
I need to start working on how the game will actually play when I’m done with some of this engine stuff. I have some ideas of how I want it to go but I need them better defined.
Here is a screenshot of the game paused, the button to pause it is in the bottom right corner