developer mode mod: game's developer switch on (warp with a+s, river log cheat), keys for the hidden aux inputs (fly, heart and fruit, idols, coins) on both exe versions

This commit is contained in:
MineTec committed 2026-11-08 18:09:03 +01:00
1 parent e36ff2d2c2
commit ec2876d9c8
14 files changed
+525 -13

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

+1 -1
View File
@@ -166,7 +166,7 @@ layout or low-memory mode), not a debug flag. Other constant getter cases: 0x5E/
0x98, 0x9E, 0xC1, 0xD8, 0xED, 0xEE, 0x102 = 0; of the zero ids only 0 and 0x102 are read by any strat.
No exe code writes padAux, and no other dev key handler was found beyond the table above (F4, F6, F7).
Suggested "Developer mode" option for the cheats mod (not implemented): patch byte 0x552320 to 1
Implemented as the separate mod `devmode` (see `mod-devmode.md`); original suggestion: patch byte 0x552320 to 1
(or point jump-table entry 0x552A8C at a cave that pushes 0x1000, leaving the shared handler alone),
and map keys to padAux in the pad poll: at the end of FUN_004256C0 (0x425B88, where padAux is only
cleared when >1 pad) jump to a cave that builds padAux from the DIK state array 0x58226C + 4·DIK,
+57
View File
@@ -0,0 +1,57 @@
# Developer mode (`devmode`, CHEATS)
`mods/devmode/DevModeMod` + `DevModePatch` – two groove.exe patches, no data changes. Background and
the full list of what the switch unlocks: `mod-cheats.md`, "Developer switch (property 258)".
## Options
| Key | Default | padAux bit | Effect |
|---|---|---|---|
| `flyKey` | F1 | 0x800 held | Llama (also from standing), LlamaChase, bunny rise while held; frog after a jump |
| `heartKey` | F2 | 0x400 (pressed edge) | +1 heart, +5 purple fruit |
| `idolKey` | F3 | 0x200 held | pink idols +1 per frame, max 99 |
| `coinKey` | F11 | 0x100 held | coins +1 per frame |
| `flyToggle` | off | – | fly key toggles bit 0x800 instead of hold |
Keys are `Hotkeys.option` choices (cross-mod conflict check); defaults avoid practice F5/F8, freecam
F7/F9 and the game's F4/F6/F10. The developer switch itself has no option (always on with the mod).
Two equal keys → apply fails with a message.
## Patches (German / English addresses, all via `Site`)
1. **Property 258 = 1.0.** `PROP_GET` (0x550E60 / 0x550B80) is the strat property getter; its
`jmp [eax*4 + table]` has the table address at +21 (0x552684 / 0x552390, in .text). Entry
0x102 (0x552A8C / 0x552798) pointed at the shared `push 0` handler (0x55231B / 0x55198F; the
patch checks its bytes) and now points at a cave: `mov eax,[esp+14h]; push 0x1000; push eax;
call <push result>; add esp,8; add esp,10h; ret`. The other ids of the shared handler
(de: 0x75, 0x9E, 0xC1, 0xEE; en: 0xC1, 0xEE) stay 0. The table entry has a .reloc entry; the
exe always loads at its image base, so the absolute cave address is fine.
2. **padAux from keys.** `PAD_POLL_END` (0x425B88 / 0x425A08, tail of the pad poll FUN_004256c0:
`mov eax,[padCount]; pop ebx; cmp eax,1; jbe; mov [padAux],0; add esp,8; ret`, 25 bytes) →
`jmp` cave + NOPs. Cave: `pop ebx`, ecx = OR of the bits whose DIK slot in `KEY_STATE`
(0x58226C / 0x5818FC, s32[256] frames held, all 0 while Alt is held) is > 0, 0 while `DEMO`;
`mov [PAD_AUX],ecx` (0x5FCF58 / 0x5FC5E8); `mov eax,[padCount]` (keeps the old return value);
`add esp,8; ret`. The edge detection padAuxPressed (FUN_00425c00, start of each tick) is
untouched and works as before. Toggle mode: 8 data bytes (previous key state, on flag).
Hotkey names → DirectInput scan codes in `DevModePatch.DIK` (test: covers every `Hotkeys.VK` key).
## Verified in game (apptest `devmode-a`, :25, German exe, village 1-1, defaults)
* A+S three times: three different warp points (`img/mods/devmode_teleport.jpg`).
* F2 twice: fruit 0 → 5 → 10, energy bar refilled.
* F1 held 2.5 s: the llama rises above the village, falls back after release.
* F3 held 1.5 s: idols 46; F11 held 1 s: coins 1 → 32 (`img/mods/devmode_keys.jpg`).
* No crash; game starts normally with the mod (one crash in a Wine DLL at 68E9306B on the very
first start of a fresh session prefix, not reproducible in 3 later starts with the mod).
Not checked in game: English exe (unit tests only), toggle mode, river log Space, 8-6 Space+Z,
frog/bunny, LlamaChase.
## Limits
* Level-skip/music debug menu needs property 0 ≠ 0 as well (also hard-wired 0, used by 131 strat
reads incl. cameras) – deliberately not touched.
* Toggle state survives level changes (flying continues in the next level until pressed again).
* With the switch on, CheatTeleport stays alive in 22 levels; A+S (camera left+right together) is
the warp combo, so pressing both camera keys at once now teleports.