Meteoric Wars
On Meteoric Wars, I designed and developed all the gameplay features and systems. I also did all the art, created a custom font, created the sound effects,
and all the shaders in the game.
Meteoric Wars was my first attempt to work on a rogue-like game. The idea was inspired by Sonic
Wings (a game I played a lot when I was young) mixed with my love for pixel art and rogue-like games.
Role: Gameplay Engineer, Game Designer, Systems Designer, Tech artist
Game Engine: Unity
Programming Language: C#
Technologies: Adobe Photoshop, GitHub, Visual Studio
Platform: PC, Mobile
Date: 2022 - 2023
Concept
Meteoric Wars is a vertical scrolling shoot ‘em up rogue-like video game that takes place in a galaxy that's been taken over by mutated machinery and aliens. The player has to stop the mutation by destroying the black hole generators that cause it. The player can choose from 5 different unique heroes, each equipped with a special ship and unique skills. The enemies are procedurally generated from run to run in every aspect. So the player has to rely on skill, rather than memory.
Show more details
Game Systems
Here's a list of some the systems implemented for the game that I'd like to highlight:
Procedural spaceships generation
All the enemies in the game are procedurally generated except for bosses and the shop (which you can optionally fight.) This feature came to life due to my lack of artistic skills. I wrote a simple algorithm that takes predefined spaceship body parts (body, wings, and tail) randomizes their dimensions, colors and numbers, and mashes it all together to create (mostly) good-looking spaceships that fit the game style.
Procedural enemy spaceship behaviour and waves generation
On top of randomly setting the spaceship's visuals, the game also procedurally generates values and sets for their behaviours. Things like shooting, movement, and abilities. These values are saved in CSV files read in Unity. This system takes in a difficulty value from 0 to 1 where zero being the easiest the enemy can be and one being the hardest. The system also controls the stats of the ship like HP, damage, movement speed, etc. Additionally, the waves in which the enemies show up are also procedurally generated. The system ensures the types of enemy ships are varied and well distributed across the waves. It also slowly ramps up the difficulty as the player progresses.
Local multiplayer
The game can be played by one or even better, two players locally on the same device. The game will dynamically increase in difficulty depending on the number of players.
Natural hazards
As the player progresses, natural hazards have a likelihood of taking place at any time. I didn't get the chance to implement a lot of these, only two as I haven't settled down on the levels yet. The first one is the meteor shower in which meteors of different shapes and sizes randomly fall, destroying everything in their paths, enemies and players alike. The player can shoot and destroy those and can get rewards by destroying bigger ones. The second one is the gravity shift where the camera basically rotates so that players have to continue their fights with new inputs.
Enemy drops
Upon enemies' death, they have a chance of dropping items that the player can collect. So far, there are only three collectables in the game: coins, experience points, and health packs. The values and the drop rates of these drops are dynamic and situational. For example, stronger enemies drop bigger amounts of these collectables and this is signified by the size of the collectable and the rate at which it pulses. Another example is that health packs have an extremely low likelihood of dropping if the player's health is full and drop more often when they're low.
Abilities shop
As the players progress, they'll need to step up their game. The best way to do this is with some abilities which they can purchase from the shop. The shop shows up in between waves now and then and offers a selection of abilities some of which are unique to each player character while others are common and mutual between all (even sometimes enemies.) The player can approach the shop, interact with it, and purchase the skills using the coins they collected.
The player can attack the shop. When the shop's HP go down, it enters its aggressive state.
The shop upgrades its aggressive state every time the player destroys it. The stronger the shop gets, the more rewards it drops when destroyed.
Abilities
The abilities purchased from the shop can either be consumable, reusable, or a relic. The player can have up to four of these at a time, otherwise, they'll have to remove what they don't need anymore. The abilities can temporarily or permanently buff, heal, add defensive properties, increase mobility, or transform the player, summon companions, launch powerful attacks, and more.
Player level up
When the player collects enough experience points, they can level up which enhances their weapon damage, rate, coverage area, and sometimes adds effects to them.
Editor Tools
I'm a big fan of Unity Editor scripts and I often get carried away during the development time making tools that make it enhance the management of the project and its features. The following are the tools I want to highlight:
Game Editor Window
To streamline testing and debugging, I developed a custom Editor Window that facilitates quick access to various classes, assets, and scenes. This tool significantly reduced the time required to locate and modify these components. The Game Editor tool has definitely sped up my development workflow.

Game Manager Components Cacher
One of the more tedious aspects of Unity development has been managing component references. To address this, I developed the Game Manager Cacher, a tool designed to streamline and optimize how components are accessed and managed within the Unity Editor. This tool organizes all component references into dynamically collapsible sections within the inspector depending on the headers added in the properties declaration, which enhances clarity and ease of use. An editor button does all this (except for project file references.)

Shader Graphs
It is no secret that I'm not an artist. But a game need some hue in it, so I had to create
shaders
that can
do the job for me.
Here are the top shaders used in the game:
Procedural Planets Shader
The planets were the last feature I worked on in the game; therefore, I didn't have the chance to fully integrate them. This shader utilizes a noise texture, which it scales using customizable values, combines into a single texture, and then colors to produce aesthetically nice looking planets.

Nebula shader
The nebula (or clouds) background of the game consists of 2-3 overlaid sprites with different opacity values, each rendered using this shader.



Stars shader
The stars were the first visual element I added to the game. Initially, they were created using a particle system, but I found this approach difficult to manage. As a solution, I developed a shader graph to handle the star animations more efficiently.


Other Responsibilities
Here's a list of other tasks that I was responsible for in the project:
- UI Programming: Developed scalable UI interaction systems compatible with both keyboard and controllers.
- Assets creation: Created all the assets used in the game, which includes ships art assets, visual effects, background images and shaders, UI elements, sound effects, and a custom font that I made specifically for the game.