Skip to content

Repository files navigation

✦ Ascend

An authentic ASCII fantasy roguelike in the spirit of NetHack. Descend the dungeon, recover the Amulet of Yendor from the depths, and climb back to the surface to ascend. Provisions are bought with gold, and the fallen leave bones that surface in later runs.

Status: Phase 3 — mythology & a winnable endgame. Everything from Phases 1–2 plus a goal: descend through realms (the old depths → the Dungeon Reaches → the the Deep Caverns) toward the Amulet of Yendor (this world's Amulet of Yendor), then climb back to the surface (<) to ASCEND and win. Plus Marduk's altars (P to pray → be made whole), the Gray Paper intro, and a theming pass.

The Invocation (Phase 12a). The road to the Amulet of Yendor is now gated by a ritual. Three relics await on the descent — the Bell of Opening (d5), the Genesis Candelabrum (d6), and the Gray Paper (d7). At depth 8, the Foot of the Dungeon, the stairs give way to the vibrating square (≈) under THE WARDEN's guard. Stand on it with all three relics and I invoke: the square shatters and Gehennom, the Dark Forest (d9–11) opens below. At the bottom — Moloch's Sanctum (d12) — the Amulet of Yendor rests in the grip of MOLOCH, the Tyrant.

The Planes (Phase 12b). Taking the Amulet of Yendor no longer wins by itself. Climb back to the surface and a stair opens beyond the world: the Plane of Accord, the Plane of Fire, the Plane of Light Clients — each a guardian gauntlet — and at last the Genesis Plane, which bears three altars, one per ethos. Step onto one to sense its alignment; O offer the Amulet of Yendor on the altar matching your ethos to truly ASCEND and win (the wrong altar blasts you and spits out a demon). Gehennom and the Planes crawl with demons of tyranny — jailer fiends, prying wraiths, permission daemons, shackle demons.

The Warden's hunt (Phase 12d). The instant you take the Amulet of Yendor, THE WARDEN resurrects and won't stop — every ~45–75 turns (and on every new level) it rises near you, a relentless 48-HP pursuer. Let it reach you and it may snatch the Amulet of Yendor and blink away; the only way back is to hunt it down and kill it.

The maze of Hell (Phase 12e). Gehennom (d9–11) is no longer ordinary rooms — it generates as a claustrophobic perfect maze of narrow, lightless corridors, stripped of all shops, faucets, thrones and altars. Only demons, traps, and the hunting Warden await in the dark.

Conducts (Phase 13a). Five self-imposed vows track themselves from turn one — Pacifist (never kill by your own hand), Illiterate (read/engrave nothing), Self-jailer (pray/sit/sacrifice never), Vegetarian (eat no corpse), and Bankless (buy/forge nothing). The character sheet (@) shows which you still hold; the death/ascension screen reports every vow kept. A challenge layer for the bold.

Your Quest (Phase 13c). On depth 4 a homeland portal (Ω) keyed to your archetype opens — enter it (>) to face your nemesis guarding your signature artifact: the Knight's Block Sceptre, the hound's Bonded Aegis, the Cypherpunk's Null Cipher (perfect stealth), or the Builder's Staff of Creation (a wand of raw genesis). Claim it to fulfil the Quest; flee home anytime with <. Persistence & social. When a run ends (death or ASCENSION) it's recorded to a local Hall of the Fallen (H to view), and fallen heroes leave bones (‡ graves) that surface in later descents.

Phase 5 (toward parity) is underway: hidden traps (^ — gas / / reorg), a bigger bestiary including self-replicating phantom and the deadlier the Deep Caverns swarm, scrolls of enchantment, a speed system (fast/slow monsters act more/less often), natural HP regeneration, and rings — resilience (+max HP), regeneration, and stealth (a cloak of invisibility: monsters can't track you), and charged wands (z to zap in a direction — a bolt of restoration, banishment, slowness, or digging to tunnel through walls), plus a scroll of cleansing (cure status). Status effects add bite: gas wraiths poison (damage over time), warden imps and marauder confuse (you stagger), and oracles (o) zap you from afar with line-of-sight — cured by prayer or a healing potion. cutpurse (r) live up to the name: get adjacent and one will snatch an item from your pack and bolt — chase it down and kill it to reclaim your loot, or it escapes and you're rugged. Not all loot is loot: honeypots (m) are mimics that sit disguised as an item — a sword, a potion, a ring — and lunge the moment you reach for them. And you start with a hound (d) — a loyal pet that follows you and savages adjacent foes. You can throw (t) too: hurl a dagger down a corridor as a ranged strike (it lands where it falls, ready to retrieve), or lob a potion of reorg like a grenade to burst it on a foe. Ready a missile in your quiver (Q) and then just fire (f) it down a direction — the slot reloads from the next of its kind, so you can plink an advancing foe shot after shot. Cornered? Engrave (E) a clause of the Gray Paper in the dust (§): ordinary foes shrink from the warded tile and won't attack while you stand on it — a breather that scuffs away with time and faster if you fight on it. Bosses and THE WARDEN fear no scripture. Mid-depth floors hold the planar gate portals (Ω): call out (>) to a dungeon branch — the Wildlands, the Moonlit Keep, the Star Vault, the Shrouded Vale, the Coinbridge, Bifrost, the Drowned Marsh, the Haven — each with its own difficulty × loot multipliers (some up, some down from the dungeon). Climb back (<) to the dungeon.

The bazaar has a keeper. Each shop is tended by the Shopkeeper ($) — peaceful while you pay (stand on a ware, p to buy it with gold), but shoplift an unpaid ware (or strike it) and it turns lethal and hunts you down. It fears no Gray-Paper ward. Kill it and the stall is yours — but it hits like a boss.

Realm mini-bosses guard the run: the Shapeshifter (depth 3) and the the Master Key (depth 6) each drop a guaranteed prize when slain, before THE WARDEN and the Amulet of Yendor at depth 8.

Sanctity (BUC): every item is secretly blessed, uncursed, or cursed. Blessed gear hits / guards / heals harder; cursed gear is a trap — wield or wear it and it welds on (you can't unequip or drop it until it's cleansed), a cursed ring betrays you, and a cursed scroll of enchantment corrodes your blade. You don't know an item's sanctity until you learn it: set it on Marduk's altar (_) to read the glow, identify it, or just risk equipping it. To break a curse, pray at an altar (P) or read a scroll of formal verification (audit) — relics and shop wares come pre-blessed.

Co-op (P2P, experimental): a serverless WebRTC lobby links two players directly browser-to-browser (paste an offer code, get an answer code back — no matchmaking server). Pick a mode and Host/Join, and you drop into one shared, live dungeon: host-authoritative (the host runs the sim and streams frames; the guest is a thin terminal), interleave-by-speed turns (each acts on their own ticks; the world briefly pauses if one opens a menu), union FOV, and per-mode interaction — co-op (no friendly fire), co-op + friendly fire, or race to the Amulet of Yendor. You see each other on the map (host = cream @, guest = teal @); monsters target the nearest of you; a fallen partner is down but the survivor fights on. (v1: shops and pets are solo-only; restart is host-driven.)

Mobile: on touch / narrow screens an on-screen control deck appears — a D-pad (move + wait), quick actions (pick / buy / stairs / pack), and a ⌨ more drawer with the item verbs and an a–t letter strip for inventory selections. The canvas scales to fit.

Play it

npm install
npm run dev # http://localhost:5180

Character (Phase 6): pick an archetype (Knight / hound / Cypherpunk / Builder) in the top bar, each with its own six attributes (STR/DEX/CON/INT/WIS/CHA) and starting kit. Kills grant XP → level (levels) that raise max HP; combat now rolls a d20 to-hit (your level + DEX + weapon enchant vs the foe's dodge — misses happen), and STR adds to your melee damage. Press @ for your character sheet.

Corpses & afflictions (Phase 7a): slain monsters leave corpses (%) — stand on one and press e to eat for nutrition, and maybe an intrinsic (poison resistance, intrinsic speed). But eat with care: a freezer (c) corpse petrifies you (Ston — a deadly countdown), and rotten corpses make you ill (Ill). Race the clock: pray or read a scroll of cleansing to cure before it kills you.

Armor & erosion (Phase 7b): there are now seven armor slots — shirt, body, cloak, helm, gloves, boots, shield — wear one of each (W) and remove a chosen piece with T. AC is evasion now (more armor = harder to hit, not less damage taken). Watch out for rust bugs (x): their touch corrodes a worn piece (rusty → badly corroded), dropping its AC — pray to repair it, or read a blessed scroll of remove curse to repair and rust-proof ("audit") your gear.

Wands & the ray engine (Phase 7d): beyond restoration/banish/slow/dig, find a wand of immolation (a fire ray that bounces off walls and burns everything in line — including you if it caroms back), stasis (sleep a foe), forking (polymorph a monster into a random other one), nullification (strip a foe's special powers), and state-read (probe a monster's HP + traits). Zap with z.

Tools (Phase 7c): apply (a) a tool (() — an excavator (reusable pick-axe; dig walls in a direction), an unicorn horn (cure poison / confusion / stoning / illness + a small mend — your lifeline against eating the wrong corpse), a rune-scribe's kit (write a chosen scroll, spending its gas), or a stethoscope (probe an adjacent foe's HP + traits). A bag of holding (Phase 11d — a bag of holding) opens a loot menu on apply: stash items in (i) or pull them out (o), holding up to 12 beyond your 20-slot pack — set it down and the stash spills out intact.

Blindness & telepathy (Phase 7e): a potion of obfuscation blinds you — your sight shrinks to arm's reach (Blind) and you swing less accurately; throw it to blind a monster so it can't find you. Eat a warden imp corpse for telepathy, which lets you sense every monster's mind while blind. Cure blindness with prayer, the unicorn horn, a scroll of cleansing, or just wait it out.

Spellcasting (Phase 8a): you have energy (Pw, from INT + level — it regenerates). Find a tome (spellbook +) and read (r) it to study the spell (INT-gated — retry if it eludes you), then cast (Z) it for energy: force bolt (a directional blast), self-mend (heal), a scrying (map the level), sense minds (reveal monsters), the planar gate jump (teleport), or quicken (haste). Builders and Cypherpunks start knowing one; higher Throughput (INT) means fewer fizzles.

Faith & Fortune (Phase 8c): you have a Fortune stat (Luck, −13..+13) that sways every to-hit and dodge. Raise it by offering (O) a corpse on (or beside) a Marduk altar — burn it for the Architect's favor (a rare blessed gift, or a mend; rotten offerings displease him). A luckstone is a gamble: blessed it's a luckstone (+Fortune), cursed it's a loadstone you can't drop — and you won't know which until you check it on an altar. Prayer also steadies bad Fortune.

Polymorph / "fork" (Phase 8b): read a scroll of hard fork (or step on a fork trap) to transform into a monster — you take its glyph, attacks, speed, and HP pool for a couple dozen turns, then snap back. Become a whale to tank a hard fight, a fork daemon to blur past foes — and don't panic if the form's HP hits zero: you collapse back to your true form and may well survive.

Faith & crowning (Phase 8d): your archetype has an ethos — Order, Balance, or Chaos. Prayer and altar offerings build favor with Marduk; earn enough and he may induct you into the Technical Fellowship (as an Architect / Fellow / Adept, by ethos), granting a rank/title, a Fortune boost, an intrinsic, and a blessed gift. But don't pray too often — praying before the cooldown lapses now brings his wrath (a smite, a cursed item, or soured Fortune), so save it for when you truly need it.

Faucets & thrones (Phase 9a): the dungeon now holds ** faucets** ({) — stand on one and quaff (q) for a gamble: refreshing water (heal), a luckstone, a faucet bot, tainted (poison), or it runs dry. And the throne (\) — sit (s) on it for raw privilege: a full heal + Fortune, an instant level or pack-identify… or a curse, a teleport, a guardian, or the throne crumbling.

Chests (Phase 9b): chests (() appear in rooms — stand on one and open (o) it (locked ones take a few tries to force); the loot spills onto the floor to pick up. And you can now walk past the Shopkeeper — stepping into a peaceful NPC (or your hound) swaps places instead of attacking, so no more accidental shop brawls; you only fight the keeper once you've provoked it by shoplifting.

Doors (Phase 9c): doorways are now open ('), closed (+ — blocks line of sight; walk into it to push it open and reveal the room), or locked (orange + — walk into it to kick it open; your Brawn (STR) decides how easily it bursts, and you might stub your foot). Closed doors keep monsters out of a room until you open them — useful for picking your fights.

The Great Hall & searching (Phase 9d/9f): depth 5 is now a special level — THE GREAT HALL, one vast open chamber teeming with a swarm and strewn with loot (NetHack's Big Room). And search with s: your Insight (WIS) reveals hidden traps and hidden doors (which look just like walls), and you disarm (DEX) any revealed trap next to you. So a reorg trap blocking a corridor is no longer a dead end — step up beside it, press s to disarm it, and walk on.

Boulders (Phase 9g): boulders (0) sit in some rooms — walk into one to shove it a tile (if the space beyond is clear). They block you, bolts, and monsters, so you can push one into a doorway to wall off pursuers; a wand of immolation (fire ray) shatters a stuck one. (They only spawn in open rooms, so they can never seal your only path — the groundwork for a future Sokoban puzzle.)

Deeper foes (Phase 10a): the bestiary grows — a restoration dragon (D) breathes a ray that bounces down a line and sears everything it touches, an arch-conjurer (&) summons reinforcements, a fast storm sprite (b) blurs in, and a ** daemon** (S) hits like a truck. Their AI deepens too: a panic seller (p) flees once you've hurt it, and a dungeon medic (h) heals its wounded allies instead of fighting — so take the medic out first. And dust gremlins (g) breed — let a pair of them sit together and they'll multiply into a swarm, so don't ignore a cluster.

Controls: move arrows/hjkl/yubn · pick up , · inventory i · sheet @ · wield w · wear W · take off T · quaff q · read/study r · eat e · drop d · zap z · cast Z · throw t · quiver Q · fire f · chat c · look ; · what-is / · enhance skills x · discoveries \ · open/force o · close C · kick K · dip D · name N · trap-ID ^ · two-weapon X · ride M · invoke I · audit A · apply tool a · engrave E · pray P · offer O · descend > · ascend/up < · wait . · restart R.

Audio: a ♪ Music toggle and a soundtrack picker sit in the header. The music is fully procedural (Web Audio — no asset files): ten area themes (old depths → dungeon Reaches → the Deep Caverns → the Great Hall → the Foot of the Dungeon → Gehennom → Moloch's Sanctum → the Planes → the Genesis Plane → Elsewhere), each with five textural variants that share one signature melody (a per-area leitmotif), picked at random when you enter the area — so the place stays recognisable while repeat visits and runs sound fresh. Auto (by area) follows where you are; Shuffle all rotates every couple of minutes; or pin one theme. A tension layer swells in over the ambience when foes close, a boss looms, or the Warden hunts — and death and ascension each get a short musical stinger (a sinking knell / a rising luminous chord). The score is alive: the leitmotif never loops verbatim (each restatement mutates — transposed, fragmented, re-registered — interleaved with ambient drifts), a slow ebb-and-flow envelope swells and recedes, the music grows more distressed the deeper and more imperilled you are (the bed sours and murks, notes sag flat, timing falters — and the ascent stays uneasy until you truly win), and it's context-aware — a soft chime by an altar, water drips at a faucet, a low rumble when a boss/dragon/Warden is in view, a deep ominous pulse when the Amulet of Yendor is on the level.

npm run build → typecheck + production bundle in dist/.

Stack

TypeScript + Vite + rot-js (MIT) for the roguelike engine (display, dungeon generation, FOV, pathfinding, turn scheduling). No framework — a pure client-side game.

Roadmap (abridged)

  1. Foundation — dungeon, FOV, monsters, combat, permadeath.
  2. Core systems — inventory, items, hunger, identification, depth.
  3. Economy — a gold-priced bazaar, earn↔spend.
  4. Mythology & endgame — full theming, the Amulet of Yendor, altars (Marduk), the Warden, ascension.
  5. Persistence & social — a local Hall of the Fallen, bones.
  6. Toward parity — spells, traps, pets, alignment, special levels.

Full design + theming bible in DESIGN.md. The complete NetHack ↔ Ascend parity map + Phase 6–13 roadmap tracks every canonical NetHack subsystem against Ascend's status and plans the missing ones in Yendor flavor.

License

GPL-3.0-or-later.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages