A web-based reimagining of the classic 1989 tile-based RPG by Rick Saada. Built from the ground up in TypeScript with Vite, playable on desktop and mobile browsers.
Play now: dev.jdayers.com/rd
The Runed Deep is a turn-based dungeon crawler set in Norse mythology. You descend 30 floors through mines, lairs, crypts, frozen caverns, and ancient fortresses to defeat the fire lord Surtur and avenge your destroyed village.
This project is a full rewrite — not a port. The original game ran on Windows 3.1. This version runs entirely in the browser and works on phones.
- 30-floor dungeon with 6 themes (Mine, Lair, Crypt, Fortress, Ice, Castle) and 6 hand-designed boss floors
- Procedural generation — 5 room shapes, locked/secret doors, water terrain, decorative objects
- 10 trap types — physical (pit, arrow, dart), elemental (fire, acid, lightning, wind, rune), special (portal, cobweb)
- Tab auto-explore — walks to nearest unexplored area, stops at monsters/doors/traps/items, navigates to stairs when fully explored
- 159 monster types across 6 AI behaviors (melee, ranged, caster, thief, summoner, stationary)
- Elemental attacks — monsters deal cold, fire, acid, or drain damage reduced by your resistances
- Giants throw projectiles — boulder and ice attacks at range
- Flee mechanic — monsters flee at low HP once, then fight to the death
- Elemental resistances — cold, fire, lightning, acid, drain — checked on spells, monster abilities, and traps
- Evasion — dodge chance from gear affixes
- 31 spells split into two learning paths:
- 15 auto-learned on level-up (levels 2–16): healing, light, shield, detection, basic attacks, clairvoyance
- 15 spellbook-only (found as loot): teleport, fire ball, ball lightning, resist spells, transmogrify, warcry, and more
- Time Stop (NG+ only): freeze all monsters for 10 turns
- INT-based scaling — spell damage and healing scale with effective Intelligence (base + gear bonuses)
- Spell hotkeys — up to 5 spells bound to number keys
- Resist spells — temporarily add +50 elemental resistance
- 100+ item templates — weapons, armor, potions, spellbooks
- 3 material tiers — regular, elven, and meteoric steel with progressively better stats and enchantment ranges
- Color-coded rarity — white (normal), blue (enchanted), purple (blessed), orange (unique), red (cursed)
- No identification system — all items show full stats immediately
- 16 runes across 3 rarities (common, uncommon, rare) — socketed into equipment at the Rune Forge
- Each rune grants a unique passive effect that scales with the item
- 25 scaled affixes — each has a base value that scales with the item's enchantment level
- Offensive: Sharpness, Might, Vampiric, Spell Power, Thorns, Fire/Frost/Storm Touched
- Defensive: Hardened, Fortitude, Magic Resistance, Evasion, Vitality, Regeneration
- Utility: Grace, Brilliance, Swiftness, Arcane Well, Arcane Mastery, Fortune
- Cursed-only: Blood Price, Soul Drain, Dark Pact, Berserk Fury, Leech — powerful drawbacks that persist when blessed
- Named items — items with affixes get suffixes: "of Power", "of the Ancients", "of Legends", "of the Gods", "of Valor"
- 19 unique items — named legendaries with special abilities not found on normal gear
- Includes resist amulets, detection helms, levitation boots, damage-reflection shields, and late-game world-altering items
- Boss kills guarantee a unique drop
- Cursed items — negative enchantments, freely unequipped, can roll powerful cursed-only affixes
- Blessed items — remove curse at the Temple (25g): enchantment flips positive, cursed-only affixes persist as a bonus
- Blacksmith — add or reroll affixes, pick from weighted options
- Random challenge dungeons — 5–10 floor mini-dungeons with themed modifiers, launched from the Rift Stone in town
- Unique rewards including rune shards
- Wave-based arena combat — fight escalating waves of enemies triggered from a stone in town
- Rewards gold and runes on completion
- Essence-powered upgrades — sacrifice unwanted gear to earn essence, then spend it to enhance your equipment
- Completing the game unlocks a harder NG+ cycle with tougher enemies and better loot
- Affix counts, enchantment ceilings, unique drop rates, and critical affix chances all scale up with each cycle
- The item stash at The Resting Stag carries over between cycles
- Cross-device sync — enable cloud saves per slot with a 5-character code
- Auto-sync — every save pushes to server; splash screen auto-pulls latest on load
- Load by code — enter a code on any device to download a save
- 12 service buildings — Inn (Item Stash), Armor Shop, General Store, Weapon Shop, Enchanter, Magic Shop, Rift Stone, Temple, Blacksmith, Rune Forge, Crucible, Statue of Fortune
- Personal Item Stash — store items at The Resting Stag; free, unlimited in/out, persists through NG+
- Shops restock on floor clear and on death
- Mark for sale — tag items in inventory, bulk sell at matching shops
- Rich item tooltips — effective damage/accuracy/AC with enchantment breakdown, scaled affix values, unique abilities
- Tab-compare tooltips — hold Tab while hovering an equippable to compare with your equipped item
- Character sheet — attributes with equipment bonus breakdown, all active affix totals, combat stats (melee damage, spell power, dodge, swiftness, MP cost, regen, gold/XP bonus, life steal, thorns)
- Character creation — name, gender, 4 attributes, difficulty, starting spell
- 5 difficulty levels — Normal, Intermediate, Hard, Nightmare, Impossible
- 29 achievements
- 19 synthesized sound effects via Web Audio API
- Visible gear — equipped items render as layered overlays on the player sprite
- NPC shopkeepers — each town building has a named NPC with a unique sprite
- Death respawn — no game over; die → death summary → Continue → respawn in town
- Click-to-move with pathfinding
- Touch controls — SVG icon buttons, repositionable D-pad + action bar, resize S/M/L
- Adjust Controls — move, resize, show/hide D-pad and action buttons from the Commands menu
- Landscape mode — full-screen map with overlay HUD, compact controls
- Mobile spell picker — alphabetized list, hotkey management, D-pad targeting for directional spells
- Auto-target — directional spells auto-fire when only one visible monster is in range
- Inventory tabs — Equipment and Inventory tabs, item drawer with actions on mobile and desktop
- Save/load — 3 slots + auto-save on stairs/death + cloud sync
| Key | Action |
|---|---|
| WASD / Arrows / Numpad | Move (8 directions) |
| E | Context action (pickup, stairs, enter, search) |
| G | Pick up item |
| Q | Wait / rest |
| I | Inventory |
| C | Character info |
| Z | Spell hotkey management |
| M | Minimap |
| 1–5 | Quick-cast spell |
| Tab | Auto-explore |
| Tab (hold) | Compare hovered item with equipped |
| F1 | Help |
| F2 | Achievements |
| F3 | Save game |
| F4 | Toggle sound |
| Esc | Close screen |
- TypeScript + Vite
- DOM-based rendering with CSS sprite sheets (canvas only for the minimap)
- 3-layer tile system: floor → ground → entity
- DCSS tileset (CC0 licensed) with custom recolors for material tiers
- Single global
GameStatewith pure functional reducers - Web Audio API for sound synthesis
- localStorage for saves; PHP cloud save backend
- No frameworks; no runtime dependencies in the shipped game bundle
npm install
npm run dev # Start dev server
npm run build # Build for production (outputs to dist/)src/
core/ Game state, actions, game loop, save/load, cloud sync
data/ Item templates, monster data, spells, affixes, traps
systems/
character/ Derived stats, leveling
combat/ Melee combat, damage, vampiric, thorns, evasion
crucible/ Wave-based arena combat
dungeon/ Procedural generation, 6 themes, boss floors
inventory/ Equip, pickup, drop, use items
items/ Loot generation — affixes, scaling, unique items
monsters/ AI (6 types), spawning
rift/ Fractured Rift generation and modifiers
spells/ All 31 spell implementations
town/ Town map, shops, NPC services
ui/ All screens — splash, creation, inventory, shop, spells, services, etc.
rendering/ Map renderer, HUD, spell animations
input/ Keyboard + touch input, auto-explore, spell targeting
utils/ FOV, pathfinding, affix helpers
public/
api/ Cloud save PHP endpoint
assets/ Sprite sheets (PNG) — tiles, items, monsters, buildings, spells
css/sprites/ CSS classes for all sprites
- Original game concept by Rick Saada (Castle of the Winds, 1989)
- Dungeon tileset from DCSS (CC0)
- Built with Claude Code
