Brink of Extinction updated to version Fire Ant!

Brink of Extinction updated to version Fire Ant!


Version ”Fire Ant” is now live and changes the game in a host of ways. Aside from adding two new levels, the update also rebalances the game in a number of ways. Turrets have been differentiated more, so that they have more distinct usage situations. The enemy stat increases when they level up in the continuous mode have also been changed up, making the challenge more consistent. Lastly, the yield formula has been changed in the continuous mode.

The update also adds in a collectible in the form of mem discs, that can be found in the campaign levels. The mem discs contain brief story elements, that pieced together will give a view of the events leading up to the campaign.

Lastly, the update adds Steam leaderboards, so that your best scores in the continuous mode are saved and can be compared to those of other players around the world. For Game Jolt users, leaderboards were implemented already in the launch version of the game.

Here’s the full list of changes, fixes and additions:



  • Game has been upgraded from Unity 5.5 to Unity 2017.2 which means SSAA (Res scaling),
  • NGSS (shadow system) and post processing effects have been optimized.


Bugs and issues:

  • Level 5 base object (the truck) has been moved to increase visibility.
  • Level 5 some hexes have been moved to allow max range turrets to reach the base object.
  • Fixed issue where base options in the ui would get displaced when switching res.
  • Increased music fadeout speed when switching scenes.
  • Adjusted post proc effects in the achievement display area.
  • Fixed the heatwave effect offsetting.
  • Fixed sound not playing when clicking next/previous button before last achievement in achievement display area.


New features and rebalancing:

  • Two new endless mode levels, the Forest and the Overpass.
  • Objectives for each level have been added to the loading screen.
  • If there’s an object to protect, an indicator shows which one it is.
  • Zooming has been implemented, mapped to the scroll wheel.
  • Collectible story notes added to campaign levels.
  • Story note reading room added in main menu.
  • Song in reading room.
  • Five new achievements, Give ’em hell 7+8, Prime example 7+8 and Librarian.
  • Steam scoreboards implemented for continuous mode levels.
  • Acid turret, Bull turret, Missile turret, Plasma turret, Rail turret, Double turret and Machinegun turret rebalanced.
  • Enemy level up stats (including yields) rebalanced in endless mode.
  • Bug zapper range slightly increased and damage greatly increased.
  • Turrets can be rotated using the arrow keys.


Minor adjustments:

  • Plasma turret smoother textures.
  • Level 5 DoF has been adjusted to avoid the turret at the far right position on the screen blurring.
  • Level C1 DoF has been adjusted to avoid bottom turret position blurring.
  • Level C1 Grass was growing through some cars.
  • Level C1 Lens dirt decreased.
  • Added more songs to the playlists in the continuous mode.
  • Spruced up turret firing effects for plasma, sonic pulse.
  • Added barrel heat on the Double turret.
  • Text on game over in continuous mode adjusted to not line break.
  • Increased Missile turret emission.
Upcoming BoE update

Upcoming BoE update


I’m in the process of working out some changes to the game and figured I would list the upcoming changes here. Most of this info has been published on the steam store front for Brink of Extinction as well, but also on IndieDB.

– I will spruce up some of the weapon firing effects.

– Scoreboards were planned for, but never made it into, the initial release, so these will be added also (for the continuous mode levels).

– Some background story. The game does have a bit of a story, but it is currently not conveyed in-game.

– Turret default rotation will be setable with the scroll wheel, and not only by clicking and dragging.

– Tweaking of turret stats.

– Added upgrade info into the turret showroom.

– Camera pan and/or zoom.

– Objectives listed before level starts.

– Two additional endless mode levels, one with Tesla and one without. This also means four more achievements.

The turret nerfs and buffs are as follows (although they may still be subject to change):

Acid turret: Starting HP from 500 to 450, minus 50. Starting Damage from 35 to 25, minus 10. Speed will be equivalent to that of rail (40). HP upgrade will give 125 instead of 100, damage upgrade till give 25 instead of 20. Splash range will go from 1.25 to 1.3.

Bull turret: 10 less starting damage, from 40 to 30. Damage upgrade will give 20 instead of 16. Starting HP up 50.

Plasma: Starting damage 25 instead of 20, and damage upgrade 8 instead of 10. Splash damage radius from 0.9 to 1.

Missile turret: Increased damage upgrade, from 30 to 35.

Overall, the concept is to differentiate the turrets from each other more. So the Acid turret will be stronger and have better range than rail, but is weaker. Bull turret gets a more emphasized role as high HP and strong, but is slower than machinegun turret and double turret. The double turret will remain a sort of all round turret. The plasma turret and acid turret both get splash range improvements, making them suitable for large hordes of enemies. Plasma is weaker but faster than acid. I’ve yet to decide about the cost of upgrades, and some more minor adjustments may still follow after more extensive testing.

Enemies will also get some stat tweaks, but primarily when it comes to their upgrade values, so this won’t affect the campaign, as all enemies are level 0 in the campaign. I have yet to start tweaking enemies, so a post on this will follow once I have done this.

Lastly, the game has been updated from Unity 5.5 to Unity 2017.2, which means some of the assets I use have also been updated. Since the shadow system and SSAA system were fairly new when I developed the game, these have now been updated and optimized, which means the game should run better in general also (although no complains on performance or bugs have been reported).

I have previously stated the release of this update being around February, but it might be available in January already, but no promises!

Brink of Extinction builds submitted and Twinstack store front submitted

Brink of Extinction builds submitted and Twinstack store front submitted

I’ve gotten the BoE builds submitted to Steam. If all goes as planned, the game will release on the 30th of November on Steam and GameJolt (although a bit of work remains on the GJ builds) for windows.

I’ve also gotten the store front for Twinstack in order and submitted for approval. This means it should be up soon. The game itself is planned to release on the 20th of December, for Windows, Mac and Linux.

On a different note, the Retro 2D Tile Set Dark now has a Light edition, available on the Asset Store.

There are some other things planned for the near future. These things will be announced pretty soon. 🙂

Steam store page submitted for review

Steam store page submitted for review

The Brink of Extinction store page on Steam has been submitted for review. In the meantime work will continue on some Steam achievement implementation and setting up GameJolt for achievements as well. The game looks as if it’s still on for a Nov 30th release. 🙂

Site updated

Site updated


Been busy recently with setting up the company and also moving to a new place. Setting up the company formally has meant that I’ve needed to change the name (too similar to other brands… sigh).

All sites, aside from the unity asset store, have been updated with the new name. Unity asset store will be updated soon!

Other than that, there will be some new updates on my current projects around this weekend 🙂

Procedural level generation

Procedural level generation

In this post I aim to describe in relative detail one of the fundamental systems of my new game that currently goes under the working title ”miniTD”. The procedural level generation.



There are 6 main components of the procedural level generation in miniTD:

Generate terrain

Generate grid

Generate paths and buildable locales

Find path solution

Create level

Merge layers


The terrain generation is a straight-forward process of generating black and white noise into a 16×16 color array. This array is stored away until the paths and buildable locales have been generated.

So next up, a grid pattern is created by placing 3 to 6 lines across the X and Y axis respectively. This is not an actual grid written to a texture, but rather a logic grid saved into a List<int>. The only rule that applies to placement here is that two vertical/horizontal lines may not run next to each other and they may not be placed so that they run along the edges of the map. As already mentioned, this grid only exists as a list of sorted integers and are not drawn on a texture. Instead, the two lists of integers (for x and y axes) are used to calculate possible intersections (where the lines across X and Y cross paths). These intersections, in turn, are used as a basis for the path solver.

The image is an illustration of the grid where red signifies excluded areas, blue is a placed line and green is a calculated intersection.

Onto the next step – the path solver decides a starting location on either the left or right side of the map (along X), and an ending point at the lower or upper part of the map (along Y). After this, the sorted list of intersections (List<Vector2>) is loaded into the solver and an iterative process of decisions on whether to move along X or Y is performed. For each move, an intersection is moved out of the list of loaded intersections, into a list of selected intersections. The primary rules for moving is that only nearby intersections are viable and thus an intersection may not be crossed. If there are no viable nearby intersections, the current index of the list of selected intersections gets removed, essentially moving the path solver backwards one step. This means that the solver has “lost” a move and needs to re-evaluate the previous step. This process will be ongoing up until the point where there are enough viable moves to get to the end of the level. The basic thinking behind this process is that the solver needs to be able to avoid “locking itself in” when it cannot make any moves that gets it closer to the end of the level. A slowed down solving process can be seen here:

The video illustrated the solver making a wrong decision, then backtracking to find a viable way towards the end of the level.

Once the solver has completed its work, the list of selected intersections gets returned and the path can now be finished. The path, just like the terrain, is just an array of colors (green in this case). This array is used to determine where to place buildable locales. The buildable locales can only be placed directly next to a path or diagonally from a path, because the turrets have only 1 unit of range (at least until the level up). The locales are randomly placed in conjunction with the path. Locales are marked with red on the same map along with the path in green.

After this, the terrain array is merged with the path and locales, essentially just if red or green color is detected, then terrain map gets marked with red/green. The final map is pushed through a blurring process to allow the terrain to “sink in” around the paths, to avoid extreme cliffs.

The image shows what a map would look like made into a texture.

Up until this point, no objects have been created, so the greyscales of the map are used as an indicator of what is referred to as “stack height”, the number of tiles to stack for height. This value ranges from 0 to 20, where black means no tiles are placed, and white means 20 tiles are placed. This is done for each pixel of the map, except for pixels where the colors red or green are detected. Instead, these are given fixed height values, ensuring that the enemy path and locales are always on same height, so that they can be easily recognized by the player going into a new level.

To make the levels more interesting and allow for further random variation, the stacking of tiles based on the greyscale parts of the map always end with a random chance of “gibberish” placement. Gibberish is the in-code term for non-gameplay vital objects such as trees, rocks, bushes or whatever the selected game world theme the player has selected come with. All the actual object creation is done off screen, so as to avoid visible lag from spawning multitudes of objects.

Lastly, as a method optimize the scene and avoid excessive shadow casters, while also making it easier to manage all the terrain layers when displaying the level construction to the player, all terrain layers are merged into one new mesh object before the level is displayed to the player. The same merging process occurs to the trees and rocks placed into the level, once they have fallen into place, and before the level’s spawn point is activated. Merging the rocks and trees is also a way to cut down on the number of shadow casters in the scene.

Video showing several random levels being made.


I hope this write-up has been enjoyable, comments and questions are always welcome. 🙂

Level deconstruct sequence

Level deconstruct sequence

Been putting a lot of effort into Brink of Extinction recently while also starting up some new prototypes (more on this at another time). Of course, “MiniTD” will be getting more attention from now on, since BoE is getting closer to being released.

Mostly I’ve been working on underlying systems, so in terms of turret and enemy upgrades and functions, it’s pretty much done. What needs to be worked on from now on is the UI (yay…). Hopefully this process will be a smooth one. 🙂 Look forward to more updates on this topic and others in the near future! 🙂