# PRIMAL RAMPAGE — Stone Age Survival A from-scratch, dependency-free clone of the *Unfair Shooter*-style browser wave shooter, re-themed as **prehistoric tribe survival vs dinosaurs**: endless campaign waves (plus an **Endless Mode** past wave 25), alpha-dinosaur bosses every 5th wave with Jurassic-style footstep tremors, roguelite card picks between waves, an ON FIRE heat/combo system, a full meta-progression layer (bestiary, permanent upgrades, daily quests, achievements, pets, hard currency), and an Arena deathmatch vs rival tribesmen bots. Everything is original: code, **procedurally drawn canvas art** (cel-outlined tribal hero with recoil + muzzle flash, raptors with animated tails & jaws, triceratops, dilophosaurus frill-flare spitters, flapping pteranodons, a sail-backed Spinosaurus boss, a T-Rex with hinged jaw…), synthesized WebAudio SFX/music/wind ambience, and a living jungle arena. No assets were taken from any existing game. ## Run ```bash cd jsshooter python3 -m http.server 8899 # open http://127.0.0.1:8899/ ``` No build step — plain script tags. ## Controls | Action | Keyboard / Mouse | Touch | |---|---|---| | Move | WASD / Arrows | left stick | | Aim + fire | mouse (hold LMB or Space; auto-fire on by default) | right stick + 🔥 | | Ultimate | R | ★ | | Bomb | Q | 💣 | | Pause | P / Esc | ⏸ | ## The cast - **Act biomes**: waves 1–9 in **The Green Jungle**, 10–18 descend into **The Murk Swamp** (creeping fog banks, two extra tar pits), 19+ burn across **The Ashlands** (pulsing lava veins that sear anyone standing on them). Ground palette, grass and rim tint all shift per biome. - **Beasts**: Velociraptor, Compys, Dilophosaurus (venom spit — its frill flares before firing!), Triceratops, Stegosaurus (plate rows + thagomizer), Pachycephalosaurus (telegraphed `!` head-butt dash), Pteranodon (splits into chicks), Alpha Raptor. Kills leave blood decals; runners kick dust; the player leaves alternating footprints. - **Alphas (boss waves)**: REX THE ELDER (charges, calls raptors) → SPINO OF THE REEDS (sail, venom barrages) → GIGA BROODMOTHER (splits into two juveniles). Every stride shakes the screen — harder up close — with dust rings and a deep stomp thud. - **Arsenal**: Slingshot → Bone Blowpipe → Spear Burst → Obsidian Lance → Fire Bomb Thrower. - **Heroes**: Raider, Trail Runner, Bear-Clan Brute, Spirit Hunter; war-paint skins incl. premium gem tier (Ashfang Chief, Jade Serpent, Solaris). ## Living arena & atmosphere Campfire hub with flickering light at the world centre · tar pits that slow anything crossing them (55%) · giant buried T-Rex skull + ribcage landmarks · totem stakes · a 60s **day/night cycle** (night floods the valley in darkness, punched through by warm light around every flame; beasts move 8% faster under moonlight) · **tropical rain fronts** with lightning flashes and rolling thunder · **Blood Moon weekend live-op** (real-calendar Sat/Sun: amber ×2, +25% herd budget, red cast + HUD badge) · drifting cloud shadows · circling vulture shadow · floating ash motes · wind ambience with distant beast calls · painted dusk menu scene (volcano, brachiosaurus, raptor silhouettes). Low quality setting disables the air layers for weak devices. ## Meta progression (commercialization layer) - **💪 Permanent upgrades** — six amber-bought nodes applied to every run: Wolf-Heart (+HP), Viper Fangs (+dmg%), Wind Heels (+speed%), Young Sun (+ult rate), Vulture Eye (+amber%), Shaman Pouch (+start bombs). - **📖 Bestiary** — 12 species entries with bilingual lore; completing one pays Ngọn Lửa (🔥 hard currency). - **📜 Daily quests** — 3 of 6 picked deterministically per date, login streak counter, claim rewards (🔥 + $). - **🏆 Achievements** — ten unlock conditions, each grants 🔥. - **🥚 Pet raptor** — bosses may drop an egg; hatch names a companion that follows you and snipes pebbles; persists across runs. - **🔥 Ngọn Lửa economy + rewarded-ad stub** — post-death “watch ad” bonus (5s fake countdown, capped 3/day); swap in a real H5 ads SDK at `setupAdButton()` in `js/ui.js`. Server leaderboards/accounts plug in via `US.net` hooks noted in `js/save.js`. - **🎓 First-run tutorial** — five skippable steps; settings add screen-shake amount slider and effects quality toggle. ## HUD Professional panel layout: vitals card (HP gradient bar + HEAT/ON FIRE + weapon chip + bomb icons), wave banner with pill remaining-count, full-width boss bar with name/percent, economy card (amber + score) with pulsing combo pill, ult dial with % readout and ready flare, danger vignette under 30% HP. ## Layout ``` index.html shell + DOM UI overlays (menus, quests, bestiary, tutorial) style.css stone-age jungle theme + meta UI bits js/i18n.js EN/VI strings js/save.js profile v2: gems/upgrades/bestiary/quests/achievements/pet js/util.js helpers js/audio.js synth SFX + music loop + wind ambience + stomps js/art.js procedural painters: hero, dinos, ground props, sky, menus js/data.js weapons/heroes/skins/beasts/alphas/cards/upgrades/bestiary… js/entities.js player/enemy/bullet/pickup/particles js/game.js engine: campaign+arena+endless, On Fire, HUD, meta hooks js/ui.js menus/shop tabs/cards/overlays/tutorial/ad stub js/main.js input (keyboard/mouse/touch sticks) + bootstrap ``` ## Testing `/tmp/smoke.js` is a headless harness (DOM/canvas stubs incl. gradient factories, pinned-target sims) that boots the real modules and simulates campaign, boss waves, cards, shop, arena, plus the meta layer: ```bash node /tmp/smoke.js # ALL SMOKE TESTS PASSED ``` Publishing: `cloudflared tunnel --url http://127.0.0.1:8899 --no-autoupdate` (quick tunnels are ephemeral — restart to get a fresh URL).