2.7 KiB
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.