fertig-classic-games/tools
Brian Fertig 10165547ae Add tunnels to Zuma: editor, engine, art, and audio
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.
2026-07-28 17:20:11 -06:00
..
lib
bloxorzMap.js feat: overhaul Bloxorz rendering, mechanics, and level design; update Total Annihilation visuals 2026-07-25 14:50:23 -06:00
buildCommonWords.js
fetchStarControlAssets.js
genBloxorz.js feat: overhaul Bloxorz rendering, mechanics, and level design; update Total Annihilation visuals 2026-07-25 14:50:23 -06:00
genDotLink.js
genGooTower.js Goo Tower Levels 2026-07-26 15:23:18 -06:00
genJumble.js
genKatamino.js
genMiniCrossword.js
genPeggleLevels.js
genPuddingMonsters.js feat: pudding monsters waves 1-3, mahjong match FX, background art 2026-07-26 01:27:36 -06:00
genRushHour.js
genSpireClimbCreatures.js
genSuperKartTracks.js
genTACampaign.js
genTetrisAttackPuzzles.js
genZuma.js Add tunnels to Zuma: editor, engine, art, and audio 2026-07-28 17:20:11 -06:00
verifyAdvanceWars.js
verifyBalatro.js
verifyBejeweled.js
verifyBlockFighter.js
verifyBloxorz.js feat: overhaul Bloxorz rendering, mechanics, and level design; update Total Annihilation visuals 2026-07-25 14:50:23 -06:00
verifyBookwork.js
verifyCanasta.js
verifyCivilization.js
verifyColoradoDefense.js
verifyCribbage.js
verifyDotLink.js
verifyDungeonBoss.js
verifyGinRummy.js
verifyGooTower.js Goo Tower Levels 2026-07-26 15:23:18 -06:00
verifyJewelQuest.js
verifyJumble.js
verifyMahjong.js
verifyMahjongMatch.js
verifyMiniMotorways.js
verifyPaiGowPoker.js
verifyPeggle.js
verifyPuddingMonsters.js feat: pudding monsters waves 1-3, mahjong match FX, background art 2026-07-26 01:27:36 -06:00
verifyRisk.js
verifyRummikub.js
verifySWDBG.js
verifySlots.js
verifySpireClimb.js
verifyStarControl.js
verifySuperKart.js
verifyTempest.js
verifyTetrisAttack.js
verifyTotalAnnihilation.js feat(totalannihilation): add auto-heal for idle builders 2026-07-25 20:36:50 -06:00
verifyZuma.js Add tunnels to Zuma: editor, engine, art, and audio 2026-07-28 17:20:11 -06:00