Introduce underground tunnel sections to Zuma levels, letting the chain roll out of sight and back in. Tunnels are arc-length intervals on the path; while a ball is submerged it is inert — ignored by shots, the laser sight, and explosions — and the path itself is drawn as a faint buried trace beneath any live section that crosses it. Engine (ZumaLogic.js): TUNNEL constants, normalizeTunnels, isHidden, visibilityAt, pathSpans, sampleRange, nearestS; createLevel, syncPositions, applyPower, stepFlights, and rayHit all honour submersion. validateLevel lints mouth placement, spacing, and the 40% max-hidden fraction. Game (ZumaGame.js): depth layer reorg so a live path always wins an overlap with a tunnel stone; addPortal draws the two-layer maw (stone below the chain, mouth above it); drawPit replaces the old skull with a broken-stone collar and vapour swirl; startPitFall rolls the lost chain over the lip in order, shrinking marbles into the dark; the level-start fanfare ducks the soundtrack via MusicPlayer pause/resume. Editor (ZumaEditor.js): new Tunnels tool with click-to-place, drag-to-slide, right-click-to-remove, ESC-to-cancel; three graphics layers (buried path, live path, handles) matching the game's stacking; queueGameAssets so editor Test Play has the lazy art ready. Art: ZumaPortal.js (carved serpent-head maw, symmetric so one texture serves both ends) and ZumaPit.js (shaft of darkening discs read as depth, not a painted circle). Audio: four Zuma SFX (shoot, hit, start, explode) and a three-track soundtrack wired through data/zuma-music.json and the asset manifest; genZuma.js gains a tunnels column (fractions of path length) and verifyZuma.js gains a tunnel test suite. |
||
|---|---|---|
| .. | ||
| tetrisattack | ||
| 8bit-action.mp3 | ||
| 8bit-activate.mp3 | ||
| 8bit-card.mp3 | ||
| 8bit-count.mp3 | ||
| 8bit-explode.mp3 | ||
| 8bit-explode2.mp3 | ||
| 8bit-jump.mp3 | ||
| 8bit-lose.mp3 | ||
| 8bit-move.mp3 | ||
| 8bit-select.mp3 | ||
| 8bit-win.mp3 | ||
| battle-arrows.mp3 | ||
| battle-cannon.mp3 | ||
| battle-catapult.mp3 | ||
| battle-gunfire-classic.mp3 | ||
| battle-gunfire-modern.mp3 | ||
| battle-helicopter.mp3 | ||
| battle-missle.mp3 | ||
| battle-submarine.mp3 | ||
| battle-sword.mp3 | ||
| battle-tank.mp3 | ||
| battleship-hit.mp3 | ||
| battleship-launch.mp3 | ||
| battleship-miss.mp3 | ||
| bingo-balls.mp3 | ||
| card-deal.mp3 | ||
| card-place.mp3 | ||
| card-show.mp3 | ||
| card-shuffle.mp3 | ||
| casino-blackjack.mp3 | ||
| casino-lose.mp3 | ||
| casino-win.mp3 | ||
| chip-bet.mp3 | ||
| click.mp3 | ||
| coins.mp3 | ||
| countdown-01.mp3 | ||
| countdown-02.mp3 | ||
| dice-roll.mp3 | ||
| energy-hum.mp3 | ||
| engine-fast.mp3 | ||
| engine-heavy.mp3 | ||
| engine-medium.mp3 | ||
| engine-rev.mp3 | ||
| engine-start.mp3 | ||
| firework.mp3 | ||
| gem-01.mp3 | ||
| gem-02.mp3 | ||
| gem-04.mp3 | ||
| gem-05.mp3 | ||
| gem-big-drop.mp3 | ||
| gem-chain.mp3 | ||
| gem-drop.mp3 | ||
| jello-monsters.mp3 | ||
| kart-coin.mp3 | ||
| kart-flatten.mp3 | ||
| kart-hit.mp3 | ||
| kart-shell.mp3 | ||
| kart-shrink.mp3 | ||
| kart-spin.mp3 | ||
| kart-spinner.mp3 | ||
| kart-star.mp3 | ||
| kart-thump.mp3 | ||
| laser-zap.mp3 | ||
| march.mp3 | ||
| mastermind-access-denied.mp3 | ||
| mastermind-access-granted.mp3 | ||
| mastermind-calculate.mp3 | ||
| mastermind-color.mp3 | ||
| mastermind-glitch-01.mp3 | ||
| mastermind-glitch-02.mp3 | ||
| mastermind-match.mp3 | ||
| mastermind-place.mp3 | ||
| monopoly-expense.mp3 | ||
| monopoly-paid.mp3 | ||
| monopoly-pay.mp3 | ||
| monopoly-purchase.mp3 | ||
| pencil-write.mp3 | ||
| piece-click.mp3 | ||
| purchase.mp3 | ||
| rewind.mp3 | ||
| roulette.mp3 | ||
| scifi-explode.mp3 | ||
| scifi-launch.mp3 | ||
| scifi-plink.mp3 | ||
| scifi-plonk.mp3 | ||
| scifi-reveal.mp3 | ||
| scifi-riser.mp3 | ||
| scifi-woosh.mp3 | ||
| squash.mp3 | ||
| squish.mp3 | ||
| sw-dark-1.mp3 | ||
| sw-dark-2.mp3 | ||
| sw-dark-3.mp3 | ||
| sw-light-1.mp3 | ||
| sw-light-2.mp3 | ||
| sw-light-3.mp3 | ||
| sword-hit.mp3 | ||
| sword-slice.mp3 | ||
| ta-50cal.mp3 | ||
| ta-machinegun.mp3 | ||
| ta-nuclear.mp3 | ||
| ta-rocket-1.mp3 | ||
| ta-rocket-2.mp3 | ||
| ta-unit-loss.mp3 | ||
| ta-vehicle-loss.mp3 | ||
| ui-activate.mp3 | ||
| ui-attach.mp3 | ||
| ui-chime.mp3 | ||
| ui-flip.mp3 | ||
| ui-pick.mp3 | ||
| ui-place.mp3 | ||
| victory-short.mp3 | ||
| water-dry.mp3 | ||
| water-raise.mp3 | ||
| water-sink.mp3 | ||
| water-splash.mp3 | ||
| woosh.mp3 | ||
| zuma-explode.mp3 | ||
| zuma-hit.mp3 | ||
| zuma-shoot.mp3 | ||
| zuma-start.mp3 | ||
| zuma-win.mp3 | ||