3.1 KiB
Project Sacrifice — Android vertical slice
An original landscape puzzle-platformer prototype inspired by the broad “death changes the puzzle” genre formula. It does not reuse the title, art, audio, text, characters, or level layouts of any commercial game.
Project documents:
docs/DEVELOPMENT_PLAN.md— approved GDD + TDD + production roadmap;docs/CURRENT_ROADMAP.md— execution roadmap for the existing vertical slice;docs/LEVEL_SOLUTION_GRAPHS.md— source-backed intended solution graph for every current level;docs/BEADS_WORKFLOW.md— local backlog structure and daily Beads commands.
Playable content
The APK contains ten sequential levels:
- movement and jumping;
- bodies covering a spike lane;
- a corpse holding a pressure plate and door;
- a toggle-controlled moving lift;
- a saw launching a corpse onto a remote plate;
- a frozen corpse becoming a stable step;
- an electrified corpse completing a relay;
- a timed switch and moving platform;
- a two-signal door requiring weight and electricity;
- a mastery level combining saw, freeze, electricity, pressure plate, pit, moving lift, and final gate.
Death does not reset the level. A new volunteer respawns after a short delay while retained bodies stay in the simulation. The restart button deliberately clears the puzzle state. Progress, best time, and lowest volunteer count are stored locally.
Controls
- Hold the left/right arrows to move.
- Hold a direction and tap jump simultaneously; multitouch is supported.
Restartrestores the current level.IIpauses the game and exposes level selection.Settingson the level-select screen cycles three control sizes, three opacity presets, and vibration on/off. Changes persist across app restarts.
The movement constants include 130 ms coyote time and 140 ms input buffering.
Build
Requirements: JDK 17 and Android SDK Platform/Build Tools 34.
./gradlew testDebugUnitTest assembleDebug
All ten levels have device-level acceptance bots. They drive the production
GameView through the same movement and jump inputs as the touch controls and
run each intended solution three times. Level 8 also has a dedicated recovery
scenario for an expired timer on the far side of the pit. Stage 2 additionally
checks clean restart and long-term stability of the saw-delivered body on the
level 10 lift plate. The final Stage 2 build passed all 16 instrumentation
methods (36 gameplay executions plus lifecycle and restart) on Android 16 in a
single unfiltered run. With an emulator or phone connected, run the complete
matrix with:
./gradlew connectedDebugAndroidTest
The debug APK is written to app/build/outputs/apk/debug/app-debug.apk. It is signed with Android's standard debug key and can be installed with:
adb install -r app/build/outputs/apk/debug/app-debug.apk
Scope
This is a dependency-free vertical slice rendered through a custom Android Canvas view. It is intended for gameplay evaluation on phones and tablets, not as a content-complete commercial release.