Developer Log – Blocks of Nibiru

After five years and sixteen consecutive Ludum Dare entries, I don’t know if there’s much for me to say in a post mortem anymore.  Honestly, I don’t feel like my game development skills have gotten that much better.  However, I feel like what I have previously done can be done in a much shorter period of time.  What used to take me the full 48 hours to accomplish, can now be done in the first day.  That leaves me a lot more time to test and tweak gameplay difficulty.

The idea for this game came from the story about a hidden planet called Nibiru, which is supposed to cause the end of the Earth.  I had originally envisioned a fully functional falling blocks game like Tetris with AI, but I settled for just getting the block stacking working.  The objective is to prevent the blocks from getting to the top like in Tetris, but you have to shoot them instead like in a space shoot em up.

In most of my previous Ludum Dare entries, I only had one or maybe two gameplay mechanics.  I believe Blocks of Nibiru had the most of any of my previous entries.  Below are most of the mechanics I was able to implement for this game.

  1. Multiple ships
  2. Upgradable cannons
  3. Gun heat / Overheat cooldown
  4. Speed upgrade
  5. Orbital movement
  6. Block stacking
  7. Bombs to clear blocks
  8. Collectible powerups

I really started learning how to place objects in polar coordinates when I made my Easter Egg Hunt game last month.  In that game I laid out the eggs in a circular fashion, using the angle as the interval and the radius as the random value.  Using the angle and radius mapped really well to the horizontal and vertical Input Axes in Unity.  I was amazed at how well it controlled in my game.  Then I remember this had been done before.  It was a game called Gyruss that I played on the Nintendo Entertainment system as a kid.  However, Gyruss did not have the ability to pull in and out like my game.  It may not seem like a big difference at first, but moving along the radius does really help when you’re trying to track down a powerup or trying to spread out a multi-cannon shot.

Since my ship object was a prefab, it was not difficult to make multiple instances of the ship.  Placing the second ship was easy, because I just added 180 degrees to its angle.  The third ship was a little more difficult.  I could not keep the ships evenly spaced (120 degrees apart) without moving them around, which would be awkward.  Therefore, I just added the third ship to be 90 degrees between the first two ships.  Then the fourth ship would just be 270 degrees away from the first ship.

For the cannons, I just modeled three red cylinders and placed them at angles at the front of the ship.  I tried not to make the spread two wide, but not to narrow as well.  The first cannon shoots directly forward.  To keep symmetry, I decided that when the first upgrade is applied, the two angled cannons would be enabled.  Then on the second upgrade, all three cannons would be enabled.  Again, since the ships were instanced, it made it so that the cannon upgrades would be unique for each ship.

As I was playtesting the game, I noticed that an overheat / cooldown system was needed.  I didn’t want players to keep mashing the shoot button forever with no penalty.  I wanted players to feel like there was importance for when they take a shot.  Therefore, I added the heat percentage to the ship instance.  When it reaches 100% (it’s actually stored as a float value), then the player is locked out from shooting with that ship for a period of time.  I used my harmonica to make the beeping sound when the ship overheats, so that there is audio feedback.  I probably should have added a smoke effect or something when the ship is overheated.  The heat reduction powerups were made to allow more shots before the ship overheats.  Looking back, I would have made fewer levels of heat reduction, like just two so that when the powerup is collected it feels like it makes more of a difference.

The speed upgrade was not difficult to implement.  I just increased the speed instance variable for the ship.  However, it was not possible for each ship to have a unique speed, because that would eventually result in ships overlapping and give it just general janky feeling.  So I decided to have the speed upgrade applied to all ships, which kept the symmetric spacing between all of the ships.

The bomb upgrade was fairly simple to implement.  If the bomb counter is greater than one, then decrease it and delete all block instances currently in the game.  I used a pizza pan and lid of a pot to make the sound effect, sort of like clashing two cymbals together.

The powerups were made with a six sided circle in blender extruded out to make a 3D shape.  Then I duplicated and made a longer and smaller one to cut out the center using the Boolean modifier (I always forget if it’s difference or intersect).  The voice that plays when a powerup is collected is just my voice with Audacity’s vocoder applied.

I guess the one thing I did learn from this game was how to rotate a skybox in Unity.  I took a walk at the local park early Sunday morning, and took a picture of the sky.  Unity now has an option to make a skybox out of a panorama picture, instead of having to put together six sides of a cube.  The important thing is to make sure that the picture is seamless.  I was able to do that in Unity using the Make Seamless Advanced plugin.  I also took pictures of some rocks around the house that I used for the block texture, and the side of a tree that I used for the background board plane.  The ship was textured with a picture I took of the metal on the side of my air conditioner.

I used the Blender cell fracture plugin again, for making the blocks explode into multiple pieces.  I had to turn the fragment number down.  I think the default was something like 100, so I turned it down to 20.  The one issue was that I had to remember to set the animation to legacy for the explosion effect to apply.  As usual, I put the explosion into a separate prefab that gets instantiated when the block is destroyed, so that the block is immediately removed from the game logic.  It also allows me to put the destroy sound effect (which was just me clapping my hands in front of the microphone) in the explosion prefab, so that continues to play after the original block is destroyed.

The music was composed in GarageBand again.  This time I used my new MacBook laptop, which is much more speedy than the one I previously used which was about six years old.  I really didn’t do anything out of the ordinary for the music this time.  I just made a couple of melodies and switched them between instruments, and used one of the standard generated beats.  I did increase the pitch of the music as the block stack gets higher, which makes it feel like a greater sense of urgency, similar to how the old Tetris for GameBoy did the music.

Looking back, I think there were a few things that could have made this game better.  I wish I had put tail renders on the bullets.  The explosions could have also had lighting effects.  However, having too many point lights on at the same time can cause problems.  I think after eight or so point lights, they just start getting ignored.  I could have at least put a point light on the ships, or a flash of light when the cannon is fired.

I also wanted to have the skybox change color as the player progressed through the game.  I couldn’t figure out how to get a handle on the color of the skybox.  Overall the game just like it has too much orange.  I probably should have made the score text, level text, and bomb display be larger and a different color.  The 3D text model on the title screen could have been a different color as well, because it’s really hard to read especially in thumbnails.

I guess that’s it.  I used to say that the day when I didn’t learn anything new, I would stop making games.  There are some new things that I do want to learn in Unity, like the new shader interface.  I just feel like I’ve moved out of the learning phase and into the making things more efficiently phase.

Five Years of Ludum Dare

Updated April 13, 2018

This is a compilation video of all of the Ludum Dare games that I’ve created over the past five years. I started with Ludum Dare 26 in April 2013, and I’ve completed 15 straight compo entries since. The video shows gameplay highlights (post-compo version in some cases) along with a portion of the time lapse development.

My thoughts on each of the games.

Amish Brothers – This was my first Unity game and first Ludum Dare.  I made the game about the Amish after hearing about their minimalist lifestyle.

Bomb Squad – This was a more action packed game.  I was able to experiment with the Unity physics engine.  Exploding bombs seemed to go well with the 10 seconds theme.

Tex Oneman (One Gunman) – I wanted to make an educational game.  The gameplay was inspired by the old Number Munchers game.

Archaeology – I wanted to have a game which used heat maps, but it really didn’t turn out how I wanted.  I also experimented with modifying terrains in real time.  The idea for appraising treasure found came from the Pawn Stars show.

Dream World – This was my attempt at making a spooky game.  It was inspired by Little Nemo the Dream Master for the NES, which is where the idea of making it to the bed originated.  It was my first game to use Taron Verve Painter, and my first Stencyl Ludum Dare game.

TV World – A side scrolling shooter inspired by games like R-Type.  The objective was to fight your way through each of the television channels.

Expand-O-Ray – The idea for this game came from the Revenge from Mars pinball machine that had the Big-O-Beam ray that made chickens grow huge.  The game had many references to Georgia Tech, such as the SkilesBot and 1885.  I eventually got the gun attached to the robot’s hand in a post-compo version.

Monster Hotel – A game inspired by the gameplay of Lemmings, but with a monster theme.  Using a minor scale for the music gave it a more creepy feeling.

Mutant Veggie Arena – A first person shooter with a sci-fi theme using mutant vegetables.  This was my first 3D game that used 2D billboarded sprites for the characters.

ShapeQuest – This game started as a Godot engine game, but switched to GameMaker after things weren’t working correctly.  The enemy shape faces were inspired by the profiles in Punch-Out!!.  Some of the enemy movements and attacks were inspired by the Legend of Zelda.

Ancient Adventure – Another game inspired by the Legend of Zelda, but created in 3D with an overhead view.  A lot of issues with the original version were fixed in the post-compo version.

Free the Frog – This was my attempt at making a game with Frogger gameplay in 3D.  The controls differed from my other games, since when a move button was pressed it would set the target square and then pull the player’s character to the destination.  This was also my first time using Blender’s cell fracture plugin.

World Fighter, the Cosmic Warrior – A game inspired by the gameplay of Final Fight.  The movement of the planet and moons were inspired by an enemy in an old RPG, but I can’t remember which one.

Slowbot – I really wanted to give a feeling of running out of power, which was the theme for that Ludum Dare.  The speed, headlight, and motor sound were all affected by how much power the robot has.

Irwin McSpenders – I had the idea for a tax accountant game for years, but I just never made it.  The player’s score would be based on the amount of money and dependents the player collected.  I used real deductible and tax bracket values, which took a considerable amount of time.

 

Easter Egg Hunt – Carrot Powerups Added

I added the first powerup to the game, which is the carrot.  By default, the player runs with a velocity of 4f.  When a rabbit picks up a carrot, the speed is doubled to 8f for 5 seconds.  When the speed powerup is enabled, it will display the new particle system that I created around the rabbit.  I made a simple star in Gimp, and then created a particle system with it in Unity with color over time (yellow to blue) and random particle sizes.  This is a nice new mechanic, but it appears to have rendered the timer for the stage pointless, since all of the eggs will now be collected before it ever expires.  The levels seem to go by too fast now, so I may add some obstacles like snakes which bite you or bombs that make you dizzy.  It would also be neat to have a bomb make you drop all of your eggs (I’m thinking like Sonic dropping rings when hit) so it will give the other players a chance to steal eggs away.

I added a title screen, which is nothing out of the ordinary.  I still need to figure out a way to make the copyright text only instantiate on the first time the title screen is loaded, because it has DontDestroyOnLoad, so a new one gets created every time the title screen is loaded.  It isn’t a huge problem, but it becomes more opaque as more copyright texts are overlapped.

I created another overlay, which just outlines the four bunny cameras.  I created this with gimp, by just making a 256×256 image, and selecting all and shrinking by 8 pixels and filled with white.  Then I used the bevel decor filter, to make it look a little 3D.  The I used the Color option to make it blue, red, yellow, and purple for each of the rabbits.  Then I pasted those frames into the main overlay.  I used the grid tool in Gimp to position the squares, but I had to manually fix the y position of the bottom two frames.

After doing some testing, I’ve found that if an egg has a 5x modifier, then whoever picks it up will inevitably win (unless a human player throws the game on purpose after picking it up).  There are a few of things I could do to resolve this.  I could make more than 5x powerup (one for each side so all players have an opportunity to pick it up).  The other option is lower the multiplier.  Another idea is to put carrots on the side that doesn’t have the 5x egg.  However, if I had bombs and other obstacles as I previously mention, then there could be a chance of the rabbit who got the 5x egg to drop it, thus giving the other players a chance to win.  As it is right now, it needs to be fixed, because there really isn’t any point to continue playing after someone picks up the 5x egg.

I added sound effects for the egg pickups and carrot bonus pickup.  The bonus egg sounds just slightly different than the regular egg.  I’ve tweaked it a few times, but I think I need to change it again once more so it does sound more distinct than the regular egg.

Giving the human player the ability to select their rabbit color needs to be added.  I would also like to have multiplayer controls for multiple human players.  I don’t think it should be too hard to add that, because the human flag is just a bool in the Player class.  I just need to modify it so that it handles multiple control mechanisms.

Another thing on my to-do list to dynamically moving the camera so that it zooms in as close a possible, while ensuring that all four rabbits are in the frame.  I’m thinking this will be similar to how the camera in Smash Brothers works.  When the rabbits are spread far apart, then the camera will be zoomed out.  When the rabbits are close together, the camera will be moved in closer.  I also want to have a way for the eggs to stand out more, since they are still a little hard to see when the camera is zoomed all the way out.  I was thinking about adding a light source for each egg, but that will be a serious load for 10 eggs at the same time.  I’m thinking it could work if I set the lighting settings to the lowest possible quality for the light surrounding the eggs.  Alternatively, I could do some sort of particle system, which I think would definitely be appropriate for the bonus eggs to make them stand out.