What is DinosWars?
DinosWars is a 2D single player turn-based tactical strategy role-playing game implemented in Unity. The game consists of a series of levels in which each level consists of a grid-based map, a group of friendly units, and a group of enemy units. The player will have control over an army of units that can be used complete the objective of each level. Each unit will have a set of actions it can take, be it moving within a limited range on square-based tiles, attacking an enemy within range, using an item within their inventory, or just passing its turn. After every deployed unit has taken its turn, each unit within the AI controlled enemy army will do the same. The player must make carefully planned decisions to beat each level while minimizing casualties to their own army.
The game is set in fictional fantasy historical world. Humans live along side the dinosaurs and tribes of shapeshifters that can transform into a single species of dinosaur depending on their bloodline. The humans can use magic to bring their otherwise fragile selves to be on par with their dinosaur neighbors. They lived in peace and harmony until a certain group of humans decided a new apex predator was necessary in their lands.
DinosWars is a game meant to display the bonds and loss of friendship. Every unit will become stronger in battle when surrounded by their allies. But both the gain and loss of relationships is always permanent and the damage shall remain. Through our protagonists, we wish to show that despite the differences between the two, understanding and a life-long bond can be born.
Figure 1: World Map featuring the Map nodes starting with the left node, the player has too clear each level to unlock the next level.
Features and Design
DinosWars is a game about weighing the pros and cons of each decision made. One decision may lead to the death of many enemy units but may also lead to the death of a player’s unit. In order to ensure that the player is careful in their decision-making, a permanent death mechanic has been implemented into the game. If a player’s unit dies, the unit will disappear from the player’s army for the rest of the game including future levels. This places weight on the player to avoid reckless decisions and plan each move carefully.
Each unit has a stamina gauge to represent the energy levels for a more realistic approach. This stamina gauge replenishes to its maximum at the start of every player turn, representing a well-rested soldier after a night’s rest. Every action requires a certain amount of stamina. Moving within the unit’s usual movement range will cost a constant amount of stamina per tile while moving the unit outside the unit’s movement range will take up an exponentially increased amount of stamina per tile. This is shown by the blue highlighted tiles which are in movement range vs yellow highlighted tiles which are not in figure 2. Attacking other units and casting magic will also require a certain amount of stamina with some attacks and spells requiring more stamina than others. Of course, like a soldier on the battlefield, the unit can also suffer from fatigue. As the unit’s stamina does not replenish until the start of the player’s next turn, the unit will have to deal with their current stamina during the enemy’s turn. If a unit is attacked while they are fatigued, or having less than or equal to zero stamina, that fatigue will affect their combat as well. Every attack will drop the unit’s stamina, so even if the unit ended on positive stamina, the unit can become fatigued during the enemy’s turn.
Figure 2: Unit movement range display, blue highlighted tiles require a constant amount of stamina to move through while yellow require exponentially more stamina depending on distance.
Every unit comes with a determined statistic value line that will affect certain percentages in the combat algorithm that has been implemented into the game. These values are the unit’s total health points (HP), strength value, skill value, speed value, luck value, defense value, and magic resistance value. The strength value affects the amount of damage the unit can deal to the enemy while defense and magic resistance serves as a negative value to deter the amount of incoming damage from the enemy unit. The speed and skill value plays into the calculation of the unit’s attack speed, which is the value that determines if the unit can attack twice in one turn. If the attacking unit has an attack speed of greater than five than the enemy’s attack speed, the attacking unit can attack twice, dealing double the amount of damage.
The calculation of damage dealt and the units’ attack speeds are static values through out that single attack phase. However the combat phase within DinosWars is reliant on chance. The statistical values will increase or decrease that percentage in combat. For example, the unit’s speed value will increase the unit’s accuracy, or chance of hitting the enemy unit and in return the enemy’s speed value will lower the attacking unit’s accuracy. The attacking unit shown in figure 3 has a 72% chance to hit their target. From there, a random number from 1 to 100 is selected. If that number is less that 72, the attacking unit will deal damage to the target but will otherwise miss if that random number is lower. These random numbers are scattered through out the combat phase. There is a critical hit chance as well shown in figure 3 of 4%, where if the unit hits the enemy and rolls a separate random number that is within the critical hit percentage, the attacking unit will deal three times the calculated amount of damage dealt.
Figure 3: Combat Forecast UI showing stats for HP, damage, hit percent chance, and critical strike percent chance
The random numbers are not only within the combat algorithms. After attacking the enemy, the unit will gain experience points depending on the amount of damage dealt to the enemy and will gain extra experience points if the unit killed the enemy. After reaching 100 experience points, the unit will level up. When leveling up, the unit will have a chance to have an increase in their statistic value line. Within each character lies a constant growth percentage associated to each statistical value. If a unit has a 60% growth statistic in their HP statistic, then after leveling up, the unit will have a 60% chance to increase their maximum HP value by 1. This extra bit of randomness provides the player with variation within their playthroughs of the game and another variable to think about if a certain unit has very good statistic values or very bad statistic values.
In the planning stages of development, we decided to create a strategy role-playing game similar to that of the Fire Emblem series. We admired that the grid-based movement with the seemingly simple core gameplay loop and sometimes frustrating randomness within its combat had a lot of variety and depth to its gameplay. Every playthrough of every game was entirely different from each other with the usage of a myriad of different units each time. We wanted to create a game that gave the same variety that the Fire Emblem series had to offer, but with our own twist. So after brainstorming different ideas to add to our game, we decided to use a limited stamina gauge system and the skill tree system that is seen in many role-playing games to enhance the gameplay of our game.
For our setting, we wished to tackle a setting that had not been overused. As most games in the tactical strategy genre utilized a medieval fantasy or futuristic sci-fi setting. We wanted to keep the fantasy aspect and after much deliberation, we settled with the Stone Age while dinosaurs were alive similar to that of The Flintstones.
During our planning stages and at the beginning of development, we wanted to use Godot version 3.2.3 to program our game as Godot is a rising game making software. However, during the earliest development stages, we decided to make a change to make our game in the Unity Engine instead. This change was made due to convenience as one of us had prior experience in developing games using Unity and the other developed a game using Unity during the time period of our early development stages. As such, we made the switch to Unity 2019.4.18f1 to develop our game.
Unity uses the programming language C# and is a popular game making engine that comes with a robust animation system as well as a sound system. The art assets implemented into the game were created entirely by hand by one of our members.
Although our game with all its currently implemented mechanics, there are still other features we wished to implement within the game. A day-night cycle would give more variance through each level, providing certain perks to each unit depending on the time of day as well as a more robust stamina recovery system that played within the day-night cycle such that units would recover stamina depending on if they were nocturnal or not. Further improvements can also be made such as fleshing out the full narrative of our game and adding a more variety of skills that the units can use, such as action skills that can trigger depending on certain events that occur during the gameplay of each level. A more organized, cleaner user interface can also be implemented to give the player more information that may be needed for planning.
We would like to thank our dear advisor, Eric Kaltman, for helping us develop our game as well as our fellow classmates who gave feedback and helped us playtest our game.