Design Notes

Removing Bloops In the original online game, popped bloons dispense a random number of bloops, which slowly descend off screen. The player collects them by moving the avatar close to them. They can be spent on powerups. As patterns of bloons become more complex, player weaponry becomes more powerful, making it easier to pop bloons. There are no powerups for collecting bloops. The player is always frantically focused on collecting the bloops before they disappear. This moves player intention and focus too much on collecting bloops, and the focus should be on the fun, ie. destroying bloons. I decided to remove collecting bloops. Player XP will come directly from popping the bloons and they can better focus on just that task. Darts A single dart can destroy a single bloon layer. Armored bloons begin with 25 health. They show cracks at 15 health. They lose the armor at 5 health. The final dart powerup allows a single dart to destroy 5 layers of bloons. This is not clearly communicated in the game, but I feel that is unnecessary. The player will be at the final stage of the game and be too busy to care. The front two darts are spaced to clearly kill two adjacent columns of bloons. The two diagonal streams of darts are designed to catch a lot of additional bloons just sort of 'as you play'. The best strategy is keep a bunch of bloons within the area covered by the darts and shrink the area over time. The bloon pop sound is also very satisfying, so I tried to make a lot of pops. Missiles Missiles fly straight forward. In the online game, missiles would seek bloons, but this made them harder to control and harder to strategize. Once a missile finds a bloon in range it will explode. During the explosion time, there are 4 separate points at which the health of any bloon in range is decreased. Explosions are more effective against armored bloons. Obviously, the most effective strategy is to target large groups of bloons, especially armored. Missiles despawn when they leave the screen. They fly fairly slow, so I found an extra effective strategy for some waves is to stay near the bottom and spawn as many missiles as possible, which hit the bloons as they enter. Lasers A laser will target the bloon closest to the player, and after a set time, will cause it to pop. If a targeted bloon is popped, or exits the screen, then the laser will target a new bloon and the timer will restart. I took great care in making sure that multiple lasers (and multiple weapons in fact) do not destroy the same bloon, wasting time and effort. Each weapon will only attack a bloon with available health. Unfortunately, lasers do not contribute a lot to the overall score and strategy. At full power, they can pop a lot, but they will never be as powerful as darts or missiles. They only contribute a little for high scores, and the most effective strategy is to keep the player near the point that a bloon will spawn. Avoid the point where bloons exit the screen. Overall Strategy These rules lead to some very nice, emergent, varying strategies for dealing with waves of bloons. The main strategy is focus your missiles on choke points in patterns or large patches of pink/yellow bloons. Also, memorize where bloons will spawn. Balancing XP First level xp is tuned to give the player some time with each weapon in an effective calm environment. The player can ignore a powerup and store xp for a later powerup. To communicate this: 1. Some powerups require the same amount of xp. The player must choose. 2. The final dart powerup requires a lot of xp. Tutorial Any tutorial is very minimal. A single line of text describes the powerups. I tried to make the UI give very clear feedback on spending xp or not having enough xp. I did not explain that the player movement is controlled with the mouse, which may be a mistake... I'm not sure. All players tested the mouse really quickly, so I decided to leave out any mouse tutorial.


Bloons Super Monkey ( is a game I really enjoy and return to a lot. My main goal in remaking the game was to eliminate the technical issues in the online version: framerate, input lag, and loss of input focus. I wanted to push myself a little with the size of the scope of the project. Other goals included writing an audio mixer, and researching bezier curves. The project, in total, took six weeks to complete. It honestly felt like a lot longer, but I'm happy with that amount of time, considering the amount of features in this game. The code does not contain any SIMD or multi-threading. I fully expected to have to optimize SOME parts of the code, but neither were required. The game runs at a solid 60 fps, despite all the particle-like drawing updates. It would be fun to improve this in the future. One major area I would like to improve would be the creation of the game content, in this case the waves of bloons. Throughout the project, the math and memory operations were written inline. The wave code was fairly repetitive, and writing it inline for each instance turned out to be slow and somewhat error-prone. You can also see in some places I am using different variable names or techniques to do the exact same thing. It would have been much better to write a series of helper functions for these repeated operations: move bloons along a line, form into a circle, etc. This would make the code more consistent, less errors, and lead to faster content. Small note: This was the first project in which I forced myself to cut content. One example, I wanted the background to contain more art, and to transition cleanly between levels without fading to black. I created some art splats to appear randomly as the background scrolled past. Unfortunately, I'm not a very good artist. The random art distracted the player from tracking the bloons. It would have required much more work for a small payoff, so the feature was cut.