First Update: Improve My Game Jam 31


Almost all of the advice about gamedev I read online and all the videos I saw on youtube about gamedev always recommended to finish at least one game. I had used Unity before and had made a few game prototypes, but having never finished one I decided to give it a go. Since I have a day job and can't really give 100% of my time towards this hobby, I decided to start with a simple idea and then finish and polish the game to gain experience. For this project I decided to go with a a gameplay idea that I had seen implemented in many games and most recently in a mobile game. Although this is a pretty old concept for a game, I decided to spice it up by adding different types of units and thus the idea of my game "Baseic Battle" was born. The initial prototype development took me around 3 weeks and helped me learn a lot of things that I had not considered important. I had thought that the project was over and I will never touch it again, but then in Mid January 2024 I noticed the game jam Improve My Game Jam 31. This game jam promotes working on improving an existing game and it encouraged me to find ways to improve my game. I am listing a few of the things that I had done during the period of the game jam to improve the game in this post.

Gameplay Changes

Unit Navigation

The initial gameplay had the units move toward their targets in a straight line. However, it felt like the game could be much more compelling if the units could navigate the level and reach their goals. This would also mean that I could add elevation to the levels to make the levels look more striking and the gameplay more interesting. It was fairly easy to add Unity’s built-in NavMesh System. I had to add a NavMeshSurface to the level GameObject, add NavMesh agents to each of the unit prefabs and convert the unit base class logic to use NavMesh code instead. With the NavMesh the units were navigating the levels fairly decently and I could even add towers and walls that the units could climb. NavMesh is not perfect, but for the purposes of this game it was more than adequate.

Unity NavMeshSurface

This screenshot shows the use of Unity NavMesh, the blue surfaces indicate walkable surfaces by the agents

Perk System

Being a fan of rougelite and rougelike games, I decided to implement some elements of rougelite games. Namely, I decided to add a perk system to the game to add replayability and to help out players who were having trouble with the difficulty curve of the game. Unity’s ScriptableObjects was perfect for the perk system as I could create a basic skeleton of the perks and then create a ScriptableObject from the editor for each of the perks.

Using ScriptableObject for Perks

Creating new perks became easy and streamlined by first taking the time of setup a ScriptableObject based system

Perk Chooser from 3 random options

Giving player the option to pick a perk out of 3 random options

I also created a map system that gives the players to either skip levels or play every single level to unlock all the perks. Hard core players can still attempt to complete the levels without replaying older levels and collecting all the perks as fast as possible. A turn countdown system prevents players from playing the same level over and over again to grind and unlock all the perks. For the actual implementation of the perks, I created a system that keeps track of the unlocked perks and at the beginning of each level gives the option to choose one of three randomly chosen perks. The equipped perks persist throughout the run until the player has beaten the last level or has failed and the run is over. 

Game map

The map allows the player to choose a level based on which level is already beaten

Difficulty Tuning

A couple of playtesters had commented that the game was too difficult, so the difficulty was tuned down significantly by making the AI move rate slower.

Visual Improvements 

Updated Models

While I loved the skills I gained while designing the 3D models of the bases, I decided that the game would look better by using more detailed models. Since there won’t be too many bases per level I decided that it would be ok to have relatively detailed models. I found the user,  Quaternius on PolyPizza, and they had made a lot of RTS game buildings of different ages and levels. This was perfect for my project since the art style went well with the vision of the game and because all of these were made by the same creator, it meant the art style was consistent across all types of bases.

Models before and after

The base models in the old game vs using the assets in the new game

Toon Shading

Next improvement I decided to make was new material and shaders. Since I won’t have the experience nor the resources to make anything close to realistic, I decided to implement something like a toon shader. The shader is built on top of URP’s Unlit shader. It then takes the directional light to alter the color and quantized it. 

Cel Shading

Toon shading part of the material shader graph

Finally I sample the shadow map to get the shadow attenuation from the main light, and use the step function to make sure the material can receive shadow and it looks dark and shaded. 

Toon-like Shadow shading

Using shadow attenuation from a custom script to create dark cartoon like shadows

To make the grass ground look a little more interesting, I also added some logic to show random black dots on the grass.

Random dots for grass fields

Using random noise to sprinkle some dots to make the grass field look less boring

Before and after all visual improvements

All visual improvements before/after

Color Pallet

According to color theory some colors go well together and a lot of smarter people have figured out the details of that. Although I am not skilled enough to design a pallet myself, I can, however, use a web app. So, I forwent my initial colors and textures and used colors from the pallet generator to create a few different materials and forced myself to stick to only those colors for almost all of the items in-game. After applying the toon shader and the pallet the game started looking pretty neat.

Color Pallet

The color pallet that is used for most of the things in the game

Outline Shader

The flat colors look really nice but it makes some details harder to distinguish. Outline shading is an option to give the scene a little more detail. I created this shader to apply as a material to an URP custom render feature. Looks pretty good to me. The cubes with vertices that have normals towards one of the faces look weird, but I plan to apply a little bit of bevel to all of the models in the future, so this outline shader will work for my scenario.

Other Visual Improvements

I also added a water shader and created a few more levels in Blender. I changed the looks of the menu to match the pallet and the fonts to go with the medieval theme. I also changed the travel path indicator to show the path the units will take through the navmesh. For this I added a dummy agent with each travel path game object that calculates the path to the destination. I had to make sure that the dummy agent remained disabled always, enable it, get the calculated path and then disable it within the same frame so that the travel path itself doesn’t move.

Final Thoughts

I think overall I am glad I decided to take part in the game jam and improve my game. It started out as something like an ugly prototype, but now with these updates I am definitely happier with the game I ended up with. Doing some things a second time also helped me fine tune my workflow.

Old game random level screenshot

Old game - random level screenshot

New game screenshot 1

Updated game: a level with raised platform and bridges

New game screenshot 2

Update game: a level with tower and bridges

New game screenshot 3

Updated game - a level with gate like structure with archers to top shooting down on enemies

Files

BaseicBattleWeb.zip Play in browser
Jan 31, 2024

Leave a comment

Log in with itch.io to leave a comment.