- PGR: four cars per class (12), three more code-spline city circuits (6), six more career events (18) with unlock/reward graph integrity tests; menu event count is dynamic now. - Echoes: 24 authored arenas (was 12), all corridor/crystal-validated for the radius-21 puck; existing indices unchanged. - Bowling: 8 lanes/balls/rivals at the existing 1:1:1 proportion with a setup layout that fits; per-lane determinism tested. - Labyrinth verified at device parity (112+4 mazes); documented. - Echoes and PGR entry goldens re-recorded for the new counts; specs updated. - Suite 1,598/0.
6.6 KiB
Labyrinth
- Official package:
Labyrinth.exe(labyrinth) - Corpus:
Zune HD Apps (Decompiled)/labyrinth(external, untracked) - Wave: W6 · Category: games
- Status:
todo· Complexity: TBD - Dorado-HD id: —
Synthesized from the decompiled reference. No Microsoft code, strings, or assets are copied; behavior is re-derived and all content is re-authored.
1. Device behavior (mined)
| Assembly | Types | Methods | Source lines |
|---|---|---|---|
Labyrinth.exe |
75 | 291 | 9880 |
Labyrinth.Levels.dll |
0 | — | 15 |
Microsoft.Xna.Zune.dll |
111 | 827 | 15830 |
ZuneCoreLib.dll |
66 | 275 | 5853 |
ZuneGamesLib.dll |
26 | 134 | 2730 |
2. Screens & navigation
LoadingScreen→MainMenuScreen(illustrated menu mirroring the Zune home layout: Play / Options / About, with an ILLO sign and story art) →LevelSelectScreen, a vertical curtain-and-rope stage: act dividers with story illustrations and a 4-column grid of level buttons, plus four bonus buttons at the bottom.GameScreenhosts the maze with a small pause button;PauseScreeninterposes (resume, restart, options, back) andLevelEndConfirmScreenconfirms abandoning a level.LevelCompleteScreen/LevelCompleteSignshow time, best time and par stars;EndSceneScreenhandles the story ending;ClearDataConfirmScreen/ClearDataPromptclear save data.OptionsScreenincludes the tilt calibration slider (TiltSlider) and volume;AboutScreencarries credits.
3. Rules, scoring & progression + simulation model
- Roll a marble from spawn to the open goal through a themed maze. A level
is loaded from the current act's content (
Level.LoadCurrentScene); reaching the goal completes it. Holes and spikes consume the marble ("MarbleKilled"), respawning it at the last checkpoint; the timer rewinds to the checkpoint time on death. - Pickups: every scene contains collectible
PickupType.Pickupsprites (apple, axe, flower, heart, key art). Collecting all of them opens the goal (Goal.AnimateOpen);PickupType.Switch/checkpoint objects set the respawn point and can toggle layers. Goal closed/opened state and pickup-driven visibility are part of the scene data. - Physics: the marble is a radius-13, mass-1 disc with restitution 0.5 and
a per-step velocity multiplier of 0.97 (friction), speed capped at
750 px/s. Walls are rectangle/ellipse/polygon collision shapes (level
data) resolved by shape-specific collision helpers; the marble steps by
pos += velocity * dtthen damps. - Tilt gravity: acceleration =
(-accel.Y, -accel.X) * tiltSettingat 1950 px/s², negated in landscape-left; when the tilt opposes the current velocity the input is multiplied by 1.05 (braking assist). The tilt slider maps 0.5–1.5 with default 1.0. - Scoring/progression: per-scene
ParTimeandRecordTime; beating par returns true fromLevelCompleteSign.SetTime, which spawns the star confetti. First completion unlocks the next scene and advances the story (LastCompletedSceneIndex,QuitMidLevel); save data is written toNewSaveData.xmlby theLevelIndexsingleton. The content ships 112 scenes across 5 acts plus 4 bonus levels: BB 24, HG 24, JBS 24, RRH 16, SW 24; the in-game about text advertises "more than 110 levels".
4. Controls
- Steering is purely tilt: the accelerometer vector drives gravity; there
are no touch-steer controls in play.
TiltSlidercalibrates sensitivity (0.5–1.5) and is saved in settings. - The pause button is a large invisible hit rect across the upper screen (50, 50, 380x172); orientation detection is disabled while a level is active and re-armed to landscape on exit. Device deactivation auto-pauses.
- Menus use fling scrolling (the level select is a
ScrollableViewwith a rope indicator) and standard button taps.
5. Content inventory (must be re-authored)
369 files: 220 PNG, 138 XNB, 6 XML, 5 TXT. In-game art 35 PNG: marble.png
28x28, marble_gold.png 28x28, shadow/lighting sheets, hole.png 36x36,
goal base/cover/top, spawn base/top, 5 pickups (~23x36), particles and 8
spike sprites. UI 23 PNG (480x272 level-select background, boxes, rope
36x272, tilt slider 162x42, Stars 49x16, LevelEndStars 76x141). Buttons 22
(150–327 px wide). Curtain 8 (480x272). Story ILLO 17 at 290x95. Levels:
Levels/Index.xml plus 224 level assets (map XNB + 480x272 bg.png) in
packs BB/HG/JBS/RRH/SW/Bonus. Sounds 22 (ball roll/hit, inhole, collect,
key, switch, wood, wind, marble killed, level complete, pause). Re-author:
procedural marble/particle art, our own 116 original mazes and backdrops,
synthesized SFX.
6. Implementation plan
- Rendering: Compose canvas 2D with a textured marble, shadow and hole layers (engine3d is unnecessary). Backdrops are our own generated gradients/patterns; pickups and switches are simple vector sprites.
- Logic:
ui/apps/games/LabyrinthEngine.kt— deterministic 60 Hz step, circle-vs-rect/ellipse/polygon collision, checkpoint/respawn, pickup counters, par/best times and act unlock state; levels authored as our own compact text/JSON data (collision shapes + layers). - UI: act/story level select with rope scroll, pause/options (including a
sensitivity slider), level-complete sign with par stars;
SfxBankfor roll/hit/collect/goal/fanfare. Marble roll volume scales with speed. - Tests (
app/src/test/java/com/heretek/dorado_hd/): collision response and tunneling guards at max speed, checkpoint rewind, pickup-open-goal rule, par-star math, act unlock, save/restore, tilt-to-acceleration mapping incl. landscape flip and 1.05 assist. - Fidelity target: full-parity mechanics; the Dorado-HD roster ships five acts of original mazes — 116 levels (112 scenes + 4 bonus), at parity with the device counts. Risks: collision robustness at 750 px/s, tilt feel/calibration across devices, and maze authoring volume.
7. Citation log
Labyrinth.exe!GameScreen.Update(tilt vector, 1950 px/s², 1.05 assist, 750 cap),.OnPushedToScreenStack,.OnPoppedFromScreenStack,.level_ReachedGoal,.Hole_BallConsumed,.Respawn,.Reset,.Retry,.pauseLabyrinth.exe!Marbleconstants,.Step,.HandlePickupCollisionPointLabyrinth.exe!Level.Respawn,.Update(pickup count opens goal),Goal.AnimateOpenLabyrinth.exe!LevelCompleteSign.SetTime,LevelCompleteScreen.SetTimeLabyrinth.exe!LevelSelectScreen.GenerateScrollViewLabyrinth.exe!TiltSlider(0.5–1.5),Labyrinth.exe!LevelIndex(NewSaveData.xml, acts/scenes/bonus),Labyrinth.exe!PickupType- Content tree
Levels/{BB,HG,JBS,RRH,SW,Bonus}(112 scenes + 4 bonus, counted; no layouts copied)