Idea is to make a 2d roguelike roguelite where player fights waves of zombies Zombie Spaceships and can gain perks when leveling up
This readme will be in a form of a diary of sorts where I track the progress I have made in Unity and C#
Note that its a work in progress, things will change😄.
https://www.youtube.com/watch?v=V9ToXcrTs7w
Game has not yet been released in any platform.
Built version of game can be found here:
Moving:
W
ASD
Shooting:
Mouse 2
Toggle automatic shooting:
T
Use rocket boosters:
Spacebar
-
Audio
-
Visuals
-
Controller support
Parts 1-15
Part 1 - Getting started
No idea how to develop games in Unity and only small experience with C# in the form of a couple leetcode problems, however my experience with Java will help.
Part 2 - Basics under control
Continued where I left off, sketched new model prototypes, need to create sprites soon. A lot of tutorials on YouTube which help a lot. Planning to extend player stats building. Need to look into different views (Menu/death screen etc.)
Part 3 - Models and mistakes
Looked into sprites and decided on art direction (was thinking about pixel/cartoon but ended up using free models from Mixamo
Then ended up messing up git version control and had to backtrack quite a lot to redo things :(
Next up need to look into level creation, probably in blender
Part 4 - Rusting off blender
Did some fine tuning with collision detection, now player can be confined within a play area, affects mobs also. Started doing some rough mocks for some models what I could include in the world, also created some guns for the player.
Part 5 - Massive art overhaul and new direction
After sleeping on the modeling and how the animations turned out I was extremely disappointed and thought what could I do... A thought came into mind, what if I change the gameplay from a "soldier" to a space rocket....
This way I was able to create easy pixelated sprites and animating sprites was much easier as well since they require only few keyframes.
After thinking about it for a while I did my testrun with the rocket and was extremely happy how it turned out so I decided to "full send" and I could not be more pleased...
Luckily all mechanics are applicable here as well
Part 6 - New Mob type
Created new class selection screen, no longer weapon switching, you choose before game and play with the choice.
Feeling encouranged with the new art direction and progress I made I decided to push on. Making different type of enemies was the goal from beginnign and I decided to tackle the new ranged attacking mob now.
Ended up being easier than I though since I could just make a new collision detector for the mobs to decide if they are close enough to start shooting towards player
Part 7 - Post Holiday and Covid:( (Level up rewards.)
Took a big break to enjoy Holidays with family and wasnt able to get back to business untill couple weeks after new years because I ended up getting Covid from somewhere.
Anyways back to business as usual. Fixed all stats not being applied so that player can increase them when leveling up, currently 6 different stats to upgrade, when leveling up random selection of 3 appears where player chooses 1 to buff.
Mobs drop health pickups on death
More Upgradable stats (Bullet penetration etc.)
Automatic Health Regen (and stats for it)
Part 8 - Polishing basic mechanics
Did a small change around how collision works so bullet penetration can work properly. Speaking of which player can now have bullet penetration stat (10% penetration = every 10th bullet penetrates once extra).
Also worked on some fine tuning and made it easier to tweak certain stats (Mob xp rewards, player hp gains, leveling up...).
Player can now also regenerate health by mob drops, 10% chance to drop hp capsule that can be picked up to heal a lot and player also has passive but very slow health regen which ticks every 4 seconds. Taking damage should not be ideal so
passive regen is very slow.
Part 9 - Interfaces and damage numbers
There is nothing more satisfying than seeing the BIG damage you do to the enemies and displaying that with numbers is an easy and classic way to make players feel more powerful the more powerups they gain.
Also noticed a bug after implementing damage numbers where ranged mobs were taking damage even when bullet enters their range finder trigger, this was not intended...
Fixing this bug meant I needed to find a new way to recognice hit and make mobs take damage. By making a simple interface to mobs I was able to achieve this surprisingly easy.
Part 10 - More foes!
To increase variety in mob types implemented 2 more mobs from the readme plans, quick melee mob with low hp "Glass cannon" of sorts and a frontal caster.
Fast melee mob was as easy as just making a new sprite and animations and then copying 1st melee mob prefab and just tuning the numbers on it (luckily made it semi easy the first time, now even more easier in the future)
Frontal caster reaches x distance and initiates cast, cast is 1.5sec duration after which if player is in contact with the frontal trigger player takes massive damage. Indicator was quite repetitive to paint in Gimp 😿
Part 11 - Boosters and Powerups
Decided to implement a temporary rocket boost. Idea of the boost is the make the gameplay more deep allowing for more decision making in the heat of the action. Slow recharge and small delay between boosts. Booster bar can be seen in the bottom center of the screen, animations for boosters not yet implemented.
Finally embarked on the powerup journey, roguelikes need to have an rng based systems making different rounds feel different from each other (random levelup rewards part of this). Currently started on implementing how powerups can be picked up and how they affect gameplay, wrote some ideas on them in the todoAndNotes.txt. Right now implemented first powerup, spinning lightning beam that spawns every X seconds, spins 360 damaging everything the beam crosses. Need to implement better UI design for powerups in the future, right now hard coded position (Wont be good if player has multiple powerups on random basis).
Also noted how much simpler some mechanics are to create if I were to use static variables and methods, need to look into these in the future.
More powerups
Powerups can be upgraded using level up system?
Fix UI for powerups
Figure out how player can get powerups (Mob drop/static spawn etc..?)
Part 12 - Polishing basic mechanics 2
Noticed a major issue with static variables such as newly adapted kill count. Stats do not reset between runs which is an issue I had to fix, in the future I should switch over to static methods instead so I dont have to reset every static variable every time new game starts.
After testing different roguelike games to harness ideas and gain inspiration (Don't want to directly copy ideas though 😙) made some notes and followed trough with some of them.
Today I made a lot of changes that are not as concrete (visually) as I'd hoped but will have a major effect on future development. Also finally understood how 'Color' class works so was able to edit some colors (crit damage).
More powerups
Fix UI for powerups
Main menu long term stat upgrades, with currency?
Boss mobs and mechanics
Part 13 - Long term roguelite mechanics and new talent
The difference between roguelike and roguelite is in the long term gain area. In traditional roguelikes player always starts the game with 0 powers and cant affect the base level of the characther at all. In roguelites players usually have a long term gain which helps the player to progress further everytime they unlock new perks.
Created a long term buff section which can be accessed trough main menu between runs, there player can increase basic stats (damage, health, speed, exp gain etc...). Currently stats are always reset on game launch and need to be implemented using a database in the future (SQLite and EF Core). Upgrades can be purchased with a currency (Currently capped to 9999 for testing) and for now cannot be earned. Every level of upgrade increases to cost of the next upgrade. TODO regarding currency: Decide how it is gained. Also added a purchase option for extra life which has not yet been implemented.
Integrating permanent buffs were in the end quite simple trough static variables however creating them was quite tedious. Also got a great chance to learn how to dynamically render items to player UI in the form of the upgrade stats/buttons.
Also added a new powerup "Mine". Spawns a mine after a small delay, mine is "thrown" and travels for couple seconds before stopping and activating. Mobs crossing over mine will explode taking heavy damage. Mine radius has AOE. Also added mine to the levelup buffs.
Part 14 - New Mob and talent + development QoL
To reduce duplicate code I created a base class for all mobs which handles damage intake, xp gains etc. Now when creating a new mob I only need to implement how it moves and attacks. Also made a bunch of small changes that will hopefully help out in the future.
Created a new mob "Ufo" to add more variety however it is only a basic melee mob. Nevertheless the game has now 5 different mobs that can attack the player. Im hoping to add few more this time with some unique mechanic/ability.
Also while I was at it I created a new talent "Multishot". It shoots 3 bullets in a random direction (bullets are in a pattern). Bullet count/damage/firerate can be increased trough leveling up.
Part 15 - Boss Time.
Finally started to tackle the difficulty that is bossfights. Design of mechanics is not very hard with my extensive background of mmorpgs and raiding. However how to implement X mechanic and how does the boss rotate between different mechanics is the hard part.
Did my best to reuse MobBaseline class but had to make some changes to it.
Boss mechanics and features:
TODO:
Parts 16-
Part 16 - Finalize bossfight
Up until this point my workflow in creating sprites has been to use 32x32 or 64x64 canvas to keep creations simple, however when I was scaling the boss the sprite became very bad quality because of the large scaling. I found a website that upscales pixel art and redid all boss sprites and animations with high resolution sprites. Im happy with outcome and will probably use the website more in the future.
Also finalized the last bossmechanic "frontal" randomly chooses 2-4 frontals that spawn on fixed locations (Gun barrels). Player has always room to dodge but needs to be fast to find cover before beams explode.
And to top things off, created a system for spawning mobs in waves and the match now consists of 8 minutes of increasing mob waves and a boss is waiting at the end.
At the end of all this I built the project and did a proper playtrough which I recorded for playback and debugging purposes.
Part 17 - Some big not so visible tasks
Finally decided to tackle the issue of confined play area. Ended up being more simple and easy as I had feared. Play area consists of 4 tiles (could be all unique but for now they are identical). Player starts at the center of 1 tile and the rest of the tiles are moved to the edges (and corner) closest where the player is in regards to the currently active tile.
Player starts at the center of the red 🔴 tile:
🟩 🟥
🟦 🟨
Moving right (player is still in red 🔴 square but close to the right edge):
🟥 🟩
🟨 🟦
Then moving up (player is still in red 🔴 square but now closer to the top than bottom)
🟨 🟦
🟥 🟩
Now that the play area is "infinite" also tackled the way players can collect powerups, awarding is not yet decided but for now powerups are scattered quite far from each other. To be able to find the powerups I created indicators showing where the player should move to reach the powerup. Would be nice in the future if the arrows always hugged the edge of the canvas but after a very long debugging session I couldnt come up with a proper solution so sticking with the current implementation for now.
While implementing arrows I was happy 😃 to notice how easily I came up with the initial solution and how I quickly realised to create a new interface for pickups to allow for easy scalability.
To top things off I downloaded some free to use fonts and imported them into the project to make it look more futuristic.
Part 18 - Game Audio, Navigation, Tuning
No screenshots today. Created a level end screen after player successfully defeats a boss. This allows for multiply playtroughs in row.
Also started finally looking into game audio and how its played. Added initial sounds to basic mechanics (shooting/taking damage, talent mechanics etc.). Not quite happy with allthe effects but will have to do for now (I used free sound packages from Unity store).
Also did some small color changes to Main menu etc.
Part 19 - Its 2 am... (At least it's Saturday😄)
I need sleep. Did a lot of things over the day...
Part 20 - Big UI changes, playtest tuning.
I think I can finally say that first level is "done", and will not need changes maybe other than mob tuning and if I add more talents.
Did some more playtesting, this time I had some others testing as well giving good feedback on what to change.
Started changing the ui to be more user friendly, changed the menu to "float in space". Changed the upgrade shop to have a scrollable list of buffs with visual indicators for amount of upgrades aivailable instead of numbers.
Fixed some bugs as well.
New Playtest aivailable as well https://www.youtube.com/watch?v=V9ToXcrTs7w