initial commit: llamamod 0.2.0 – reverse-engineered level formats (wad, map, trak, text, stpc), python tools and notes, java mod manager (iso install, mod pipeline with exe patching, save editor, wine/windows launcher) with mods (test world, debug wireframe, mirror, randomizer, fog, cheats, intro skip, practice, free camera, boot to level, level projects) and the 3d level editor (geometry, objects, cross-world import, environment, textures, play-test, manual)
This commit is contained in:
commit
b36a366240
826 files changed
+105304
No files matched your search
@@ -0,0 +1,56 @@
|
||||
# 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`.
|
||||
Reference in new issue
Block a user