Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Among Demons: The Hollow

A playable, desktop-first, 12-minute browser prototype. You control The Hollow, a procedural creature that inherits the powers of demons it consumes. The world is the upgrade system: move to a habitat, hunt its demons, collect their essence. There are no level-up choices or permanent progression.

Run locally

Requires Node.js 20 or newer. There are no dependencies to install.

npm start

Open http://localhost:5173 and select Awaken the Hollow. The server only serves static files on localhost. Gameplay runs entirely in the browser.

Control Action
WASD / arrow keys Move; diagonal speed is normalized
Automatic Lashes target nearby demons; a periodic pulse creates breathing room
Walk over essence Consume it and automatically inherit threshold traits
Click minimap Mark a hunting ground; a direction and distance appear
B / Demon codex Pause to inspect all 11 types, 66 forms, and 33 inherited powers; mark a hunting ground
Inheritance arrows Browse the three pages of bloodline progress
Esc Pause / resume
M Toggle synthesized sound
Enter / Space Start, resume, or restart when the run is stopped

Losing focus automatically pauses. There are no saves. Restart begins a fresh run.

The world is your build

The 6,200 × 6,200 world scrolls seamlessly. Broken paths connect the central Fallen Court to eleven habitats. Terrain provides cover and movement obstacles; tree canopies fade near The Hollow. The minimap shows habitats, the camera, your marker, and approaching elites. A spawn's location determines its demon population, so borders naturally mix. Inside a habitat, roughly 90% of rolls select its bloodline.

Demon / role / artwork Enemy ability Hunting ground Inherited powers at 5 → 15 → 30 essence
Boof Nitza · Melee · 1–6 Quick repeated melee strikes The Ashen March Heavy hands → Double strike → Relentless
Gon G'ah · Sniper · 7–12 Retreats and aims a dodgeable line shot Hollow Watch Soul snipe → Piercing soul → Deadeye
Ma'Zga · Poison · 13–18 Pools apply lingering, stacking venom The Venom Mire Venom → Contagion → Miasma
Tor Tza · Fire / area damage · 19–24 Marks an area before an eruption Cinder Wastes Ember touch → Wildfire → Pyre bloom
Vi'Zel · Bruiser · 25–30 Armored hide and committed charge The Ossuary Steadfast → Brace → Bulwark
Goh Loomb · Assassin · 31–36 Locked dash, bonus damage against wounded prey Wraithwood Fell stride → Frenzy → Death wish
Baobaw · Striker · 37–42 A wide claw sweep with a fixed aim The Claw Scar Reaping arc → Follow through → Rending wave
Ko Pak · Counter tank · 43–48 Direct hits trigger delayed thorns; no proactive attack Briar Hollow Ironbark → Spite → Dread shell
Chu Perk · Juggernaut · 49–54 A slow ground slam with heavy knockback The Spore Basin Crushing blow → Concussion → Cataclysm
Ba Be'aga · Healer · 55–60 Retreats and heals the ally missing the most HP; no attack Pale Sanctuary Mending → Siphon → Soul feast
Vee Scol · Chaotic · 61–66 Scattered rifts with random damage rolls The Violet Fracture Chaos bolt → Unstable arc → Aftershock

Roles and targeting are adapted from the main game's public/api/data/demon-types.json: Goh Loomb is the assassin, Baobaw the cleaving striker, Vi'Zel the bruiser, and Ko Pak the retaliating tank. Its turn-based abilities become readable real-time attacks here; Boof Nitza and Vi'Zel's basic attacks get distinct tempo and armor identities. The Hollow's three-step inheritance chains are prototype adaptations.

Further hunting gives smaller, capped stat gains. Hover a bloodline row for all three trait descriptions. The HUD pages through four bloodlines at a time and shows every inherited trait. The codex includes enemy abilities, trait descriptions, six rarity sprites per species, and a button to mark each habitat. Closing it restores the previous playing or paused state. Shields and venom appear under vitality.

Demons leave one essence pickup. Advanced demons provide two family essence; elites provide eight. Demons consumed counts creatures, while the eleven bloodline meters count essence. Pickups remain in the world until consumed.

Threat rises from consumption, unlocked traits, and elite kills. Thresholds at 14%, 30%, 50%, 75%, and 100% introduce successive artwork stages and higher spawn rates. Every rarity has its species ability; evolved forms gain durability, damage, speed, and stronger area coverage where applicable. Elites retain their species behavior, including ranged and support tactics. Shots lock their aim; sweeps mark an arc; ground attacks display a warning and countdown ring. Poison and burn bypass Ko Pak's reprisal and Vi'Zel's direct-hit armor. Chaos aftershocks deal their own damage without applying venom.

Survive 12 minutes to complete the awakening. Death or completion offers a restart.

Static build and verification

npm run build
npm test
node scripts/playtest.mjs mixed 720

dist/ contains a self-contained static build and all 66 required existing WebP sprites. Serve it with node scripts/serve.mjs --dist, or place it on any static host. No external fonts, asset services, backend, database, or authentication are used. The original artwork remains unchanged.

tests/browser.html is a development-only browser harness, excluded from the build. It checks the real start/input/pause/audio/map interface and desktop layouts. Its separate synthetic stress scene loads all six forms and eleven bloodlines with up to 260 demons. Only that explicitly labeled stress scene uses invulnerability. The ordinary game and headless pilot never do.

For optional automated browser QA, install Playwright and run node scripts/browser-check.mjs (Microsoft Edge), or pass the absolute path to a bundled Playwright index.mjs. Start the local server and build first. Results and screenshots go to docs/verification/.

The deterministic pilot in scripts/playtest.mjs seeks essence and steers around danger with regular movement inputs. It helps catch pacing and stability problems; it does not substitute for human fun and difficulty feedback.

Code map

  • src/config.js: families, approved sprite IDs, thresholds, regions, shared constants.
  • src/world.js: region lookup, deterministic terrain, and collision.
  • src/engine.js: browser-independent combat, spawning, essence, traits, and Threat.
  • src/renderer.js: procedural world and Hollow, existing demon sprites, effects, minimap.
  • src/main.js: keyboard input, HUD, start/restart/pause, and read-only run diagnostics.
  • src/audio.js: small synthesized combat and progression cues.
  • scripts/: dependency-free static server, build, and deterministic playtest pilot.

window.hollow.snapshot() exposes read-only run diagnostics. Where supported, the page also registers the read-only read_hollow_run WebMCP tool. Neither interface grants powers or changes gameplay.

Out of scope: inventories, quests, dialogue, crafting, shops, multiplayer, saves, accounts, and any permanent progression.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages