Onmyodoom
Game DirectorLead Game DesignerAssistant ProgrammerNo video here
The Game
You're an Onmyōji and your job is to explore different procedurally generated temples, slaying yōkai and evolving your spiritual energy in order to get stronger.
Onmyodoom is a game I'm developing with Noodle Gang where you use your elemental powers to exorcize wandering spirits and purify corrupted sanctuaries. Absorb the essence of the fallen yōkai to grow stronger, and restore balance to the spirit realm before darkness consumes it entirely.
The game comes from an university project that expanded to be developed with the scope of two semesters, functioning as our way to learn how to develop our first 3D game.
Inspirations
Onmyodoom borrows from a few games we love, each one shaping a different part of it.

A cast of playable characters split by element, each with their own weapon and fighting style, where elements matter when choosing who and what to hit.

Fast and fluid combat, dashing in and out of fights while the movement stays responsive, which guided how our characters move and dash.

Japanese folklore told through a painted, ink-like art style: yōkai, shrines and spirits drawn as illustrations.
Contribution
- Game Direction:
- Vision, scope and priorities of the project;
- Keeping the team aligned;
- Changes from a Doom-like prototype into a roguelite.
- Lead Game Design:
- Elemental system;
- Player fluid movements;
- Playable characters and their weapons;
- Enemies;
- Boss battle;
- Level-up and upgrades;
- Room generation;
- Treasures;
- Meta progression;
- Skill trees;
- Game balancing.
- Assistant Programming:
- Support on room generation implementation in Godot.
- Other prototyping related things.
From Doom-like to roguelite
Onmyodoom started as a Doom-like prototype: a first-person shooter with procedurally generated rooms where all enemies and absorbable objects were billboards, flat sprites that always face the camera. It all started with a single playable character, Kiyome, a fire kitsune who fights by shooting elemental spells with her fan weapon.
Later, every enemy and absorbable object got a 3D model, and the game grew into a roguelite with four playable characters and progression between runs.
Elemental Affinities
Every character, enemy and projectile belongs to one of four elements, or is neutral. The elements form a cycle: fire → earth → wind → water → fire. Attacking things you have an advantage on deals ×1.5 damage; attacking against it, or hitting something of the same element, deals nothing. Opposite elements (fire and wind, earth and water) and anything neutral deal normal damage.
While some of these affinity choices are not readable at a glance for a beginner player, we've designed the enemies as things that can be coherent, for example the Tsuchigumo enemy being an earth spider that can be burned.
There is also a fifth element that does not appear as an enemy type but as a healing item, the void element. It's a ramen item that heals the HP of the player and can be dropped by enemies on kill.

Fire 火
×1.5 vs earth

Earth 土
×1.5 vs wind

Wind 風
×1.5 vs water

Water 水
×1.5 vs fire

Playable characters
As Kiyome was the first character designed for the game demo, one character for each of the other elements was added later, each based on a yōkai from Japanese folklore. I wanted to keep a fair balance between two that fight at range and two that fight in melee.
Each of the characters have their own personallity lore-wise while trying to get a different gameplay vibe for each one of them. While Kiyome uses a fan as a weapon, Kotaro uses a naginata, Hayato uses shurikens and Mizuki uses a katana. These characters can feel distinguishable during the gameplay by a number of factors, for example base attack speed and range, skill tree possibilities and abilities.

Kiyome
Fire · Ranged
A kitsune (fox spirit) and the original protagonist.

Kotaro
Earth · Melee
An inugami (dog spirit) who fights up close.

Hayato
Wind · Ranged
A tengu (bird spirit) who attacks from a distance.

Mizuki
Water · Melee
A nekomata (two-tailed cat spirit) who fights up close.
Yōkai roster
In the first version, each element has its own yōkai: Oni (fire), Kappa (water), Kasa-obake (wind) and Tsuchigumo (earth). They started as billboards; later the billboards were replaced by 3D models (that have yet to be painted), together with the addition of a boss, the Daruma.
These enemies are designed to have their own ability systems, different behaviours and unique traits.

The first enemies, drawn as billboards.

The 3D roster. Tsuchigumo and the Daruma are still in progress.
I The Oni
The oni is designed to be one of the current slowest yōkai, moving around with its kanabō and slamming enemies with it when there's an opportunity. It is fairly vulnerable when hit at its small head, taking bigger damage when it happens.
I The Kappa
It's an immobile enemy that shoots water projectiles at the player's direction. It can be shot with charged wind attacks to take it out of its hiding place.
I The Kasa-obake
It roams around the rooms with its tongue out, and can start flying and shooting wind projectiles if running after the player isn't working.
I The Tsuchigumo
A huge spider that doesn't attack the player at first, spawning its babies to slow you down so it can reach and attack you.
The boss: Daruma
The Daruma waits at the end of every run, in the boss room. It has three attacks, and the third one only appears in its second phase, once it drops below 50% HP.

- Dash: charges straight at the player, with a long, readable wind-up.
- Jump: leaps to where the player is standing, and the landing makes rocks and pillars fall from the ceiling.
- Tremors (second phase): moves to the middle of the room and pounds the floor, sending out expanding rings of tremors that the player has to jump over.
Slaying the Daruma opens a portal that ends the run and leads to the results screen, where the numbers go up.
This is only the first boss planned for the game, therefore it's planned to have even more unique giants to be slain.
Leveling up
Slain enemies give experience for the run, and every level up offers a choice from four upgrades that buff your character during the run. Upgrades are scrolls that come in five different rarities: the higher the rarity, the stronger the buff.
These buffs were heavily balanced and still are being fixed during the development of the game and by studying and understanding how similar games do it.

Increases fire affinity, raising damage and defense. Common 6% · Uncommon 12% · Rare 15% · Epic 18% · Legendary 20%
The scroll selection rolls for its effects and rarity in two major steps, done for each of the scrolls shown when leveling up:
- First, the game selects one of the entire list of effects that can be buffed by scrolls;
- Second, the game rolls the rarity with a simple 0 to 1 random number, the result being according to this table.
| Tier | Chance |
|---|---|
| Common | 60% |
| Uncommon | 15% |
| Rare | 10% |
| Epic | 9% |
| Legendary | 6% |
Room generation
Each floor is built around a critical path: a line of rooms that may not ever be straight, with a configurable length, that goes from the starter room to the boss room. Branches grow out of the critical path, and the end of a branch is where treasure rooms can appear. The boss room is only ever generated at the end of the critical path.
The generation is designed so that branches are only optional to get to the boss, but may have treasures at the end to make the run easier (with the cost of time spent on it).
Room types
Every floor is made of four types of rooms, each with its own role in the run:
Starter room
Start of the run
Where the run begins, with no enemies, no danger.
Combat rooms
Critical path & branches
Has enemies to fight and objects to absorb.
Treasure rooms
End of a branch
A chest sits in the middle. The room locks as soon as the player walks in and only opens again once every enemy that spawned there is slain.
Boss room
Final fight
The Daruma fight, at the end of the critical path.
Once a treasure room is cleared, its chest can be opened for a treasure upgrade, a unique version of a level-up upgrade, working as a solution for things the player shouldn't stack too much of, like extra jumps (double, triple, quadruple) and skill upgrades.
Skill trees and character mastery
Each character has their own skill tree, whose nodes buff the next runs. Nodes are unlocked with character mastery, and playing as a character levels up their mastery, so each tree grows with the time spent on that character.
There are some important buffs in the skill tree aside from the basic ones (like more attack speed, more dashes). These unlock special features like the character's pet, a run revive if your character dies, a minimap, and more.
These trees are heavily balanced to only have a total of 220 mastery points spent to unlock the entire thing. The player is supposed to be able to get everything at the end, not locking them from 100%ing the game with a good amount of time spent playing.

Meta aspects
Finishing runs also gives a meta-currency that is kept between runs and spent at the shopkeeper in the metahub. The shopkeeper sells things that buff the next run, like magic items that raise attributes and extra abilities.
These points are calculated by a number of factors, for example:
- How much time the player has spent on the run;
- How many enemies they have killed;
- If the run is indeed finished (by killing the boss and entering the portal);
- And more.
The metahub also is supposed to have other things, such as achievement trophies, tutorials and more that have yet to be developed.




