MAD: Game DevLog #5: Game Over

Image by Steve Buissinne from Pixabay

Hello,

I don’t think I’d like to invest time and resources in this project anymore, I had fun programming it and learning about different aspects of game development and the Unity game engine.

Making games involves a lot of hard work and I initially started this in order to escape from my ordinary programming activities, to do something different.

Next, I think I’m going to shift my focus to some areas that will benefit the development of my career, like, trying to learn more about computer security and getting better at solving problems.

If you wanna checkout the game you can do on itch.io

I’d like to thank Andrei, Maxi and everyone who supported this project!

Before ending this article, here’s some Unity tips we’ve found useful while working on this game:

Make an atlas for prefabs to instantiate

Instead of setting prefabs to game objects manually in the editor, which is prone to error, you can make a static class to hold each prefab, this way can Instantiate all your prefabs programmatically.

    public static class PrefabAtlas
    {   
        /* Snow Walls */
        public static readonly GameObject DestructibleHighSnow =
            Resources.Load<GameObject>("Walls/destructible_high_snow");
        public static readonly GameObject DestructibleSnow = 
            Resources.Load<GameObject>("Walls/destructible_snow");
        public static readonly GameObject IndestructibleWoodCrate =
            Resources.Load<GameObject>("Walls/indestructible_crate");
    }

Instantiate(PrefabAtlas.DestructibleSnow)

Avoid classic singletons.

If you want to use classic singletons for your game logic or state then you may get things messy, depending on your specific use case, because Unity manages the lifecycle of MonoBehaviour classes.

To create a singleton in Unity you can inherit from Singleton:

public class MySingleton : Singleton<MySingleton>
{
    // (Optional) Prevent non-singleton constructor use.
    protected MySingleton() { }

    // Then add whatever code to the class you need as you normally would.
    public string MyTestString = "Hello world!";
}

Thank you!

References:

MAD: Game DevLog #4, Main Menu, Camera Shake and Enemies

Hello everyone!

Here’s what we did for our 4th devlog:


We’ve added a game menu to the game it is interactive and it’s working without any code at all. Thanks to Brackeys for making awesome tutorials, here’s the one we used for the menu: https://www.youtube.com/watch?v=zc8ac_qUXQY


After creating the main menu, we wanted to juice up the game a little and we’ve researched a ways to shake the camera when a bomb explodes.

The fist approach was naive and it didn’t work. I was taking the camera’s position and moving it randomly, which felt robotic. Luckily for us, Unity has a built in perlin noise generator for Cinemachine, the package we use for managing cameras.

The Perlin noise was developed by Ken Perlin and it is:

a technique used to produce natural appearing textures on computer generated surfaces for motion picture visual effects.

Unity also lets us tune the generator by modifying its amplitude and frequency parameters, which makes it very convenient to use.


Last but not least we weren’t satisfied with the enemies, we still have some bugs with their behavior but Andrei was there to fix them.

What I did instead was to try to make some decent enemy sprites in Aseprite, Cosmigo Pro Motion doesn’t work on my Mac :(.

Snow Enemy v1

Since I don’t have enough practice my sprites don’t look that good, I tried to keep them as simple as possible and I’ve only used two key frames when animating them.

If you want to start making Pixel Art there are lot of free tutorials on the internet. Here’s some to get you started:


Thanks for reading and have a nice day!

MAD: Game DevLog #3

Hello everyone!

I don’t have much to tell so I’m going to make it quick.

We’ve added Android build support and we’re working on setting up an internal test app on Google Play.

In order for the game to be playable on Android we’ve also added mobile controls and I got the chance to make them.

Here’s the button for placing the bomb:

To simplify our life we’ve used the CrossPlatformInput module from Unity’s standard assets package, this allows us to support PC, consoles and mobile devices with minimal code and configuration.

The current state of the game has some minor bugs with the enemies, explosions and UI, which we hope to fix soon.


I would like to thank Jan from Cosmigo for his amazing customer support he has given me while I was purchasing Cosmigo Pro Motion.

MAD: Game DevLog #2

Hello everyone! Time for devlog number #2!

In the last week, we’ve implemented transparent walls and the player animation state machine. Max continued designing sprites for the game and Andrei implemented the bomb animations and it is working on some enemies. The next week I will try to implement and finish the UpgradeManager, a Singleton class that shall handle the dispatch player powerups.

The transparent walls were implemented using Raycasts the wall will cast a ray in the up direction and if it detects the Player collider it will reduce it’s alpha value to 50%, when the ray doesn’t collide with anything the alpha values goes up to 100%. In the following picture the raycast is drawn with a red line:

When I first attempted to do the player animation state machine I got lost very quickly and I quickly abandoned the idea. I tried implementing it with a blending tree, hoping that it would work that way but it didn’t.

Blend Trees are used to blend multiple animations smoothly, when you have a walking/running animation in 2D you’d like to play the “WalkLeft” animation when X is -1 and Y is Don’tCare. To achieve this Unity gives us blend trees:

The problem with this approach is that it doesn’t work when you have idleLeft and runLeft, because the blend tree doesn’t know what idle to pick when both X and Y are 0. After taking a break the solution just popped into my head: Use a state machine instead of a blend tree. From any state you can go into the RunX state but after you’re done with the RunX state you’ll transition to IdleX.

This works as expected but with a tradeoff, you can’t move in diagonals. Each transition has a rule for AnimationX or AnimationY attached to it, and if you change both X and Y at the same time you randomly jump to RunX and RunY animations, making it look like a glitch.

In Unity X and Y are custom parameters for the state machine, it doesn’t necessarily need to be the X and Y position of the game object. You can tweak your movement handling code to set AnimationX and AnimationY to prefer the max of those two and set the other to 0.

To work collaboratively on this project we use Github for code and Google Drive for assets sharing.

If you want to use Github for your Unity project I’ll recommend that you generate a proper .gitignore file.

Thanks for reading!

In case you’re wondering from where the title MAD comes it just comes from our names: Maxi, Andrei and Denis. Since this is our first game and out first attempt in doing something together I had no idea what name to chose.

If you wanna start developing your first game with Unity, we’ve found the following video lectures to be quite motivational and helpful: https://learn.unity.com/tutorial/your-first-game