Vanilla JS + Canvas 2D, zero dependencies. Gameplay: campaign waves vs 12 dino species + 3 bosses, arena mode, 7 weapons, hero talents, pets, ult/bombs, card roguelite picks. World: day/night cycle, weather fronts (rain+lightning), Blood Moon weekends, 3 act biomes (jungle -> swamp -> ashlands with lava veins). Meta: gems economy, upgrade tree, quests, bestiary, achievements, shop (weapons/heroes/skins incl. premium), revive, ad-cap system, endless scaling past wave 25, live-painted shop/bestiary icons, pro main menu, auto-aim toggle (F). Headless smoke suite included.
5.8 KiB
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
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()injs/ui.js. Server leaderboards/accounts plug in viaUS.nethooks noted injs/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:
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).