Global highscores are in, the build is optimized and, so far, the bugs have been fixed!
There’s still time to partake in the Elympics.
The prior two LD jams in the past year I worked in a duo; but this time, once again, I went in solo. It turned out pretty well, even though I only managed to squeeze 30 effective work hours into the time frame due to a hectic upcoming week. That week is now long gone so it is time for some reflection.
The day before the jam I got an idea based on a vision I had quite some time ago. Basically tactical squad management with robots that fall from the skies. The mechanical inspiration came from Atom Zombie Smasher (an old favorite) and the thematic inspiration from MGS5, which I’ve been playing for the last two months at this point (it is quite good, even if Kojima constantly tries to foil it with inane supernatural elements!)
I knew that I couldn’t spend as much time on the project as usual so I laid down a simple, yet effective plan: programming first, critical graphics next, level design/tutorial third, and nice to have features if there’s any time left. Well, there wasn’t so audio among other things was cut.
Surprisingly smooth going overall. More work on graphical assets would have been nice as the levels are just made out of simple shapes, but at least they are functional. Coming up with the name was about the toughest job in all and even then the outcome exceeded my expectations (51 letter is pretty good right?)
Fun jam! With more time the outcome could have been even better, but that happens. I did release two bug fix versions and I’d like to release a proper post-jam version after the holidays are over.
Have a restful rest of the year.
This is pretty much it. Even the humans got themselves a model, albeit sans animations.
There’s a lot more I’d like to add, but unfortunately it is going to be a busy next week for me. If only I could take Monday off, but alas.
Surely a few more hours won’t hurt too much, right?
Tacticool sheep extraction team?
Hmm, I’ll continue working on the name.
I’ve kept my priorities in check. Simulation first, then critical graphics assets and thirdly all the levels. Now it is time for polish and nice to have features!
Jumped on the graphics implementation already. Some of you might spot the inspiration.
Requires texturing, but otherwise I’m quite happy with it. I might even reuse it for the enemies, if I don’t feel like modeling a human tomorrow.
Enough for the day.
All the systems are more or less done (according to plan). Tweaking and polish are of course needed.
Plenty of time for graphics tomorrow, it seems.
My tactical extraction action simulation is coming along nicely (I’ll need to think of a snappier name at some point!).
The red cube obviously represents a human guard with a gun, while the green cube is a player controlled robot. The plan is to have three different kinds of robots who have to work together to extract resources and people from the level. Lots of features to implement.
Flying solo again so we’ll see if there’s any time for graphics.
Took a while (too many projects at the moment; loving it!), but here it is: Part 2. The basis of the system is still a reactive AI using heuristics. It doesn’t plan ahead at all, which is good enough even if it does show every once in a while.
The full AI code can be found here, if you care for that sort of thing!
Heatmap, the main technique utilized, simply stores values in an extra tilemap (int array!) for spatial information evaluation. In this case the heatmap stores threat and support values used in choosing the AI attack target and movement path.
The recursive heatmap function is called for each enemy and ally on the map
Calculating the threat (and support) values is a cinch: Add up the probable averages of all usable weapon types of your allies and enemies. There is a bit of quess work involved if the enemy ammo counts are not known already.
Nothing out of ordinary here I’d hope
New feature alert! Taken that we already have threat values for each group and location data about safe areas, we might as well have a bit of fun with them! Every time a group gets into a fight its support value is compared to the threat level around it. A high enough difference will send the group in panic, running away from enemies and finally fleeing if reaching the level border. Now you can bully your enemies to submission!
Panic also ensues if the total enemy force is overwhelming, but that is checked elsewhere
Simple and seems to work alright. In the next project I’ll be using Monte Carlo Tree Search, no doubt about that. It is much less work with potentially more intelligent results. Working on a generic version at the moment.
seththefirst suggested taking a look into AI utility functions in part 1 . The threat level comparison turned out to be sufficient so I didn’t implement anything like it, but maybe you (yes, you!) will find it useful.
Missed the voting period slightly. Not that it matters much, deadlines were made to be broken.
Bug fixes, AI improvements and usability tweaks ahoy! Also added in a new feature: morale. Troops in a tough stop will panic and scatter for that extra layer of reelism!
Will do an extended AI write up soon’ish.
Quite the shocker that!
Had some spare time to sink into the post jam version this past week. Implementing the battle visuals was a blast! Got animation assets from a mysterious fellow member of the secret society! The less said about that the better.
Part 2 will be about AI improvements and more tweaks (I forgot a few!).
The Post-Jam version is still far away (I’ve hardly had any time to work on it yet) so I might as well talk about the AI of the Jam version and the plan for the Post-Jam AI.
The first version of the AI was finished in the morning of the second day. It had one goal and one goal only, EXTERMINATE! In simple terms each unit finds the closest enemy and moves towards it. They also check that the path to the enemy is not blocked, by simply finding a path to it. This could cause slowdown with bigger maps and larger unit counts, but here it is just fine and dandy.
So far the AI doesn’t take into consideration the main mechanic: scavenging technology. Implementing such behaviour, the quick and easy way, requires nothing more than adding technology distance checking into the previous code. If there’s technology closer to the unit than enemies, then that is what the unit will go for. On top of this the unit won’t move until it has completely excavated the technology.
I could have stopped here, but there was an annoying deficiency in the artificial thought process. The units don’t prioritize actions; In other words, an attacking unit is sometimes blocked by a scavenging unit.
The fix is slightly more elaborate than the previous step, but by no means complicated: tally up the best actions from all units and choose the most important one based on the target type and distance. Here’s the final AI in action.
There are still a few things I’d like to implement in the AI, namely threat assessment and intelligent positioning. As luck would have it, there’s a single technique which can be used to achieve both of these goals: heatmaps! A heatmap is simply an extra tilemap which contains values based on unit proximity and threat level (if you are lazy you can even reuse the world tilemap objects for this purpose). Heatmaps can be used in selecting the target (lower threat value is preferred) and in pathfinding to choose the safest route to the target.
Keep it simple and you’ll go surprisingly far.
One more jam, one more post-mortem. Such is the way of life (for me at least!)
Checked out the theme as it was announced (4.00 am around here). I knew what was coming based on the previous voting rounds, but no idea sprang up immediately (which is usually the case to be honest).
The brainstorming began officially in the next morning. Ranquil joined the storm later at which point all I had was a vague strategy game concept about scavenging and stealing technology. Movement of armies would have taken place on a world map and the action on a separate battle map. In the next few hours I managed to simplify the idea down to a single map close to the style of Advance Wars. Nine hours had already passed since the start of the jam so we set out to work with minimal fuss.
Light turn-based strategy isn’t the most demanding of genres and I had in fact created a similar prototype some 4 years ago. Unfortunately, the half-life of a codebase is way less than that and after 5 minutes of perusing I decided to rewrite the whole thing from scratch. That was a good call. The only system I reused was an A* pathfinding system, which I’ve been using for years in other projects including the last few jams.
No severe problems on this front, just a lot of work.
All the problems piled on the graphics artist this time. First off, Ranquil had been working for the whole summer on other projects, didn’t really like the genre and lastly the drawing table broke when only one asset, the character sprite and walking animation, had been finished.
Due to this calamity all non-essential assets were cut, among these battle animations (and any possibility of a separate battle screen). Ranquil shifted focus to other tasks, like audio research (and found a great song right away!). Luckily the drawing board issue was resolved by Monday and the last essential assets, like the desert ground tile and the main menu background image, were made and implemented. Despite the last day push some programmer art slipped in. (I take what I can get!)
With the game itself feature complete and playable only minor tasks remained: Audio implementation, main menu and tutorial. Once again, nothing I hadn’t done before, although for a jam tutorial this one takes the cake! The whole thing was completed with 2 hours to spare, a new record that. The building and uploading process took about an hour more for the tired mind.
Never have had this grave a production setback before, yet thanks to the small asset requirements of the genre the end product didn’t suffer significantly. The 72-hour jam is much more relaxed than the 48 hour counterpart with time for sleeping and breaks. I like that.
Had a good time and, once again, felt genuinely happy about the accomplishment. Now that is a feeling like no other.
And have a nice, relaxing post-jam life!
Windows, Mac and Linux builds are in.
Here’s a GIF for good measure:
As promised here’s a new GIF from the release version!
One of my programmer art assets slipped in, can you spot it?
The title says it all. Time for celebrations! Play it here!
Too tired to make a new GIF, this one is current enough…
Time to get some Z’s. Gotta catch a train tomorrow!
Feature complete! After trials and tribulations we managed to create and implement all required visuals and even audio. What a craft!
Take a gander. It is a long one this.
Stay tuned for the real deal. Only main menu and tutorial to go. Never had time for a tutorial before; exciting, right!