A turn-based ASCII dungeon crawler hidden inside this portfolio.
You fight the characters locked inside it, one game per room.
I wanted to gamify the portfolio a bit. Reward the people who poke around, hide a few winks for them. It turned into the piece I care about most.
The challenge I set myself was to build a real little game inside the site, not a prototype I would abandon halfway. Progression, balance, a boss fight, and a few things you only catch on a second run.
I hit my own limits in JavaScript and CSS pretty fast, so I used Claude for the programming. I wrote the GDD first: intentions, rough diagrams, the whole gameplay. There was never anything left for it to decide.
Working alone means there is nobody else to blame. If the combat is boring, that one is on me.
It is also for the players who, like me, dig around in the corners of a game looking for whatever the developer left there on purpose. If you got this far, I already want to work with you.
There is no tutorial popup anywhere. Pango, the first enemy, misses half his attacks, which leaves you enough room to try the buttons and see what they do without dying for it. After that, one new thing per room, and nothing in the game that is there just to look clever.
Five verbs drive every combat encounter, and you start with four. The spell stays greyed out until you spend your first SP on the GDD.
SP and the review multiplier. Enemies drop SP when they die, and you spend it between runs: relic levels, or a permanent multiplier on everything you earn after that. Your first run is the hardest one you will ever play. Save a profile and the multiplier is still there a week later. I wanted it to reward coming back, not grinding it out in one sitting.
Gear, or rather the eight relics. Eight slots, eight relics, every one of them picked up somewhere else on the site. None of them can be found in the dungeon.
They are also what opens the door: the key only appears once you are holding all eight, so nobody ever gets in underequipped. Everyone descends with a full loadout. The gear is a receipt more than a reward: it says you went through the site before you got here. What I like is the delay. You hover five project cards on the home page and forget about it, then twenty minutes later a headset is sitting in your inventory.
Saving. A run lives in sessionStorage, so closing the tab wipes it. That one is on purpose: this is an easter egg, and I did not want to write anything permanent into someone's browser just because they clicked a key in a footer. If you want to keep your progress there is an action in the game that creates a real profile.
Infinite mode. Opens after your first clear. The rooms loop with a random enemy pool and difficulty that keeps climbing. Once you have a profile, your best wave is kept between sessions.
Every enemy comes from a project. I ordered the rooms by pacing, and the chronology mostly followed on its own: the run climbs through the years, with two rooms out of order because the pacing wanted them there.
| Room | Enemy | Project | Identity |
|---|---|---|---|
| 01 | Pango | Pango Build Park · 2017 | Implicit tutorial. Misses 50% of turns. Shares a snack at low HP. |
| 02 | The Bot | Magibot · 2017 | Standard combat. No special mechanic. |
| 03 | Chaos Archer | Catch The Dragon · 2019 | Standard combat. No special mechanic. |
| 04 | The A.I | Mission NAR-6 · 2021 | Telegraphs every attack. Announces intent one turn before executing. Can overclock, glitch, or strike 2×. |
| 05 | The Sorcerer | Rune Tales: The Citadel · 2020 | Standard combat. No special mechanic. |
| 06 | Lug | Rune Tales: Underground · 2021 | Standard combat. No special mechanic. |
| 07 | Dummizz | Gang of Dummizz · 2021 | Standard combat. No special mechanic. |
| 08 | TV Head | Darkensum · 2023 | Punishes Inspect. Each use adds +2 to his damage range, and from two stacks on your attacks can freeze outright: 25%, then 40%, then 60%. Defend clears it for one action. |
| 09 | Jolly | Jolly Island · 2022 | Standard combat. No special mechanic. |
| 10 | Abyssa | Naheulbeuk · 2023–2026 | RAGE climbs on her turn, and what she does climbs with it. A sixth verb shows up for her alone: Compliment, which drops RAGE by 3 half the time and raises it by 1 the other half. |
| 11 | Dark [YOU] | Portfolio Dungeon | Boss. Form chosen by the player at the Mirror Room. See below. |
Four of them carry the run. Pango teaches you the buttons without saying so. The A.I starts announcing what it is about to do. TV Head takes Inspect, which had been free until then, and makes it cost. Abyssa needs everything at once. The six rooms in between are there to let the pressure drop before the next one.
Beware the Cube is the only project without an enemy. It got cut during the design pass and never made it back in.
The Mirror Room sits between room 10 and the boss. In the first build the game picked Dark [You]'s form for you, reading how you had been fighting up to then. It looked good written down. In practice nobody understood why they were facing that particular version of themselves.
So I turned it around. You walk in, four forms on a screen, you pick one. The game still reads your combat log and marks one of them as its recommendation, but the choice is yours. Take it and you get a title tied to the form. Ignore it and you get THE CONTRARIAN.
The first fight still asks a lot. Pango missing half the time works for pacing, but you can get through the whole room without realising that was the tutorial. One line of dialogue on the first miss would probably close it, and it would not cost me a tutorial screen.
Damage scaling in infinite mode gets steep past wave five. Fine as a wall for completionists, but there is room to smooth the ramp for everyone else.
And I have no idea how many people who find the dungeon play more than one run. Nothing measures it. That is the number I would want first, because the whole SP economy is built on the assumption that they come back.
None of it blocks anything. The game works and it plays clean. This is just the next pass.