Files
llamamod/notes/mod-introskip.md
T

57 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Intro skip (`intro-skip`, GAMEPLAY)
`mods/introskip/IntroSkipMod` – groove.exe patches only, no data changes.
| Option | Default | Patch |
|---|---|---|
| `logos` – skip startup logos | on | 0x41D56E `68 28 25` → `53 EB 62` |
| `demo` – disable attract demo | on | 0x549DC0 `76 41` → `EB 41` |
| `story` – skip story movies | off | 0x54AEC9 / 0x54B138 / 0x54B26F `E8 …` (call FUN_0041f630) → 5×`90` |
## Startup sequence (WinMain FUN_0041d350)
After DirectDraw/DirectInput/sound init and the (empty) `In` slide show (FUN_0043cb40(1)):
```
FUN_0041f630("disneylogompeg.dat") ; movies/, DirectShow; any key skips
if DAT_005865e4 (movie failed): ; set to 1 at playback start, 0 on end/skip
show disney.cor 3 s, arglogo.cor 3 s, movinfo.cor 8 s ; FUN_0041d2c0(name, ms), key skips
else
FUN_0041f630("argologompeg.dat")
show Englogo.cor 3 s ; title screen "Ein Königreich für ein Lama"
call FUN_00545030 ... ; 0x41D5D3, game init continues -> main menu
```
The logo patch replaces `push offset "disneylogompeg.dat"` by `push ebx; jmp 0x41D5D3`. The extra
`push ebx` is needed: the skipped block leaves one dword (`push ebx` at 0x41D554) and the englogo
call's two arguments are cleaned together with a later `push 2Ch` by `add esp,0Ch` at 0x41D5E4.
## Attract demo
Main menu frame function 0x549C50 (state 2, table 0x578F28): if
`frame(0x584650) − lastInput(0x5863F4) > 0x708` (1800 frames) it sets the next mode 0x584700 = 4;
0x549E66 then switches to game state 4 and loads one of three demos round robin from table
0x578EF8 (16 bytes each: map, tribe, world, chapter; index 0x6D9BF8). Demo input files are
`wads/*.DEM` (u32 frames + 8 bytes per frame, FUN_004255b0). This is the only place that starts
a demo, so turning the `jbe` into `jmp` disables it completely.
## Story movies
`movies/%d%d%dINTRO.DAT` before a chapter (FUN_0054ae20, not in demo mode), `EULOGY.DAT`
(0x54B138) and `%d%d%dOUTRO.DAT` after a world (0x54B26F) all go through FUN_0041f630; the callers
clean the stack, so NOPing the call is safe. `CREDITS.dat` (0x54A5F1) is left alone.
## Level fly-by – not implemented
The letterbox fly-over at level start is driven by camera strats (strat VM), not by engine code;
the engine has no "skip cut scene" flag to set. Return skips it in game. Left out on purpose.
## Measured (Wine 6, llvmpipe, Xvfb, loaded machine)
| | main menu after launch | attract demo |
|---|---|---|
| original | 31.5 s (title screen 23.4–31.5 s) | starts after ~34 s idle |
| logos + demo | 22.3 s | none within 110 s |
Under Wine the MPEG logo movies render black, so most of the saving is the title screen and the
movie attempts. Screenshot: `img/mods/introskip_menu.jpg`.