# Dino Land No-build browser game using plain **HTML/CSS/JS/PHP**. ## Run locally ```bash cd "/Users/lawsonawhittington/.openclaw/workspace/Dino Land" php -S 0.0.0.0:8000 ``` Open on the same machine: http://localhost:8000 LAN test URL (from another device on your network): 1. Find your LAN IP: `python3 -c "import socket;s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM);s.connect(('8.8.8.8',80));print(s.getsockname()[0]);s.close()"` 2. Open: `http://:8000` (example: `http://192.168.1.25:8000`) ## Controls - **Up Arrow**: jump - **Down Arrow**: duck - **Left Arrow**: walk backward - **Right Arrow**: walk forward ## Gameplay Rules - TRex starts with **5 hearts** (or **10 hearts** in VIP mode). - Easy and Medium end with a portal that advances to the next difficulty while preserving score. - Moving forward earns score (**+1 per forward step unit**). - Water gaps cause instant death if landed in. - Ant collision costs 1 heart; jumping on ants crushes them. - Pterodactyls unlock after score > 100 (duck to avoid). - Meteors unlock after score > 250. - On death: top-10 leaderboard is shown; top-10 runs can be saved. ## Leaderboard persistence - Backend endpoint: `api/scores.php` - Data file: `data/scores.json` ## Audio / music toggle behavior - Music defaults to **OFF** when no preference exists in localStorage. - Toggle preference key: `dinoLand.musicEnabled` (`'1'` on, `'0'` off). - First user click on the music toggle resumes/unlocks Web Audio and starts procedural music when turned ON. - Music state is context-aware: - **Title/start screen** uses title music profile. - **Gameplay** switches profile by biome (Plains, Desert, Jungle, Snow, and Lava mapped to the Volcano profile). - **Death screen** switches to death music profile. - **Restart/respawn to start screen** returns to title profile. - Turning music OFF performs a short fade to mute; turning back ON fades in the current state profile. ## Quick verification checklist 1. Start server and open game. 2. Confirm score increases while moving right. 3. Confirm hearts drop on ant / pterodactyl / meteor collisions. 4. Confirm water causes immediate game over. 5. Confirm leaderboard loads and score save works. 6. With a fresh browser profile, confirm music button starts as `🔇 Music: Off`. 7. Click toggle to ON and confirm audible looping background music starts. 8. Click toggle to OFF and confirm music fades/mutes. 9. Reload page and confirm toggle state persists.