sotn-decomp/config/splat.us.stsel.yaml
Luciano Ciccariello f86e111fc5
Extract cutscene scripts, portraits and normalize code (#1686)
More research on how cutscenes work.

I normalized all the various C files as `cutscene.c`, marked all the
isolated function as `static` and renamed the main entity as
`{STAGE}_CutsceneExec` (e.g. `CEN_CutsceneExec`). I am using the
`OVL_EXPORT` to automate the names.

TO-DO:

- [x] Rename entity as `{STAGE}_EntityCutscene` for consistency
- [x] CEN
- [x] DRE
- [x] NO3
- [x] NZ0
- [x] ST0
- [x] MAR
~~SEL~~

The offset of the portrait data seems to be hardcoded. I have no idea
how to resolve these offsets at compilation time. The entire cutscene
script thing is very sketchy and horribly designed by the original
developers. What a nightmare to integrate into our project.

This is how a cutscene script gets decompiled:

```
LOAD_PORTRAIT(0x80188D8C, 0),
SET_PORTRAIT(1, 0),
SCRIPT_UNKNOWN_11(),
PLAY_SOUND(0x37B),
WAIT_FOR_SOUND(),
SET_SPEED(4),
'T','h','a','t',' ','v','o','i','c','e','!',' ',
SET_WAIT(16),
SET_SPEED(3),
'A','l','u','c','a','r','d',',',
LINE_BREAK(),
SET_WAIT(16),
SET_FLAG(2),
'i','t','\'','s',' ','y','o','u','!',
SET_WAIT(48),
NEXT_DIALOG(),
```
2024-09-28 19:56:35 -07:00

134 lines
4.8 KiB
YAML

options:
platform: psx
basename: stsel
base_path: ..
build_path: build/us
target_path: disks/us/ST/SEL/SEL.BIN
asm_path: asm/us/st/sel
asset_path: assets/st/sel
src_path: src/st/sel
ld_script_path: build/us/stsel.ld
compiler: GCC
symbol_addrs_path:
- config/symbols.us.txt
- config/symbols.us.stsel.txt
undefined_funcs_auto_path: config/undefined_funcs_auto.us.stsel.txt
undefined_syms_auto_path: config/undefined_syms_auto.us.stsel.txt
find_file_boundaries: yes
use_legacy_include_asm: no
migrate_rodata_to_functions: no
asm_jtbl_label_macro: jlabel
extensions_path: tools/splat_ext
disassemble_all: True
section_order:
- ".data"
- ".rodata"
- ".text"
- ".bss"
- ".sbss"
sha1: a919a53a760107972049bfdeadde33376428eace
segments:
- name: stsel
type: code
start: 0x00000000
vram: 0x80180000
align: 4
subalign: 4
subsegments:
- [0x0, .data, 2C048]
- [0x3A8, .data, 2C048]
- [0x454, .data, 2C048]
- [0x46C, .data, 2C048]
- [0x4D0, .data, 3410C]
- [0x4E0, .data, banks]
- [0x728, data]
- [0x824, .data, cutscene]
- [0x8DC, .data, save_mgr_pre]
- [0x8E4, palette, memcard_0]
- [0x904, palette, memcard_1]
- [0x924, palette, memcard_2]
- [0x944, palette, memcard_3]
- [0x964, palette, memcard_4]
- [0x984, palette, memcard_5]
- [0x9A4, palette, memcard_6]
- [0x9C4, palette, memcard_7]
- [0x9E4, palette, memcard_8]
- [0xA04, palette, memcard_9]
- [0xA24, palette, memcard_10]
- [0xA44, palette, memcard_11]
- [0xA64, palette, memcard_12]
- [0xA84, palette, memcard_13]
- [0xAA4, palette, memcard_14]
- [0xAC4, palette, memcard_15]
- [0xAE4, ci4, memcard_0, 16, 48]
- [0xC64, ci4, memcard_1, 16, 48]
- [0xDE4, ci4, memcard_2, 16, 48]
- [0xF64, ci4, memcard_3, 16, 48]
- [0x10E4, ci4, memcard_4, 16, 48]
- [0x1264, ci4, memcard_5, 16, 48]
- [0x13E4, ci4, memcard_6, 16, 48]
- [0x1564, ci4, memcard_7, 16, 48]
- [0x16E4, ci4, memcard_8, 16, 48]
- [0x1864, ci4, memcard_9, 16, 48]
- [0x19E4, ci4, memcard_10, 16, 48]
- [0x1B64, ci4, memcard_11, 16, 48]
- [0x1CE4, ci4, memcard_12, 16, 48]
- [0x1E64, ci4, memcard_13, 16, 48]
- [0x1FE4, ci4, memcard_14, 16, 48]
- [0x2164, ci4, memcard_15, 16, 48]
- [0x22E4, .data, save_mgr]
- [0x2584, data]
- [0x25FC, .data, config_us] # subweapons
- [0x2700, .data, config_us] # equip
- [0x5314, .data, config_us] # accessories
- [0x5E54, .data, config_us] # menu
- [0x600C, .data, config_us] # spells
- [0x631C, .data, config_us] # relics
- [0x64FC, .data, config_us] # enemies
- [0xA37C, .data, config_us] # exp table
- [0xA50C, .data, lba_stage]
- [0xB2CC, .data, stream_info]
- [0xB304, data]
- [0xCD54, .data, CD54]
- [0xDBD4, data]
- [0x176C0, rodata]
- [0x27438, .rodata, 2C048] # strings in D_80180128
- [0x27620, .rodata, 2C048] # strings in D_801803D0
- [0x276A4, .rodata, 2C048] # strings func_801ACFBC
- [0x276C0, .rodata, 2C048] # DrawNavigationTips jtbl
- [0x276D8, .rodata, 2C048] # strings in func_801AD490
- [0x276F0, .rodata, 2C048] # strings in D_80180454
- [0x27748, .rodata, 2C048] # strings in func_801AD66C
- [0x27760, .rodata, 2C048] # strings in func_801AD78C
- [0x277A0, .rodata, 2C048] # strings in func_801ADF94
- [0x277C8, .rodata, 2C048] # Update strings and jtbl
- [0x27AE4, .rodata, 2C048] # "BASLUS-00067DRAX00"
- [0x27AF8, .rodata, 2C048] # FntPrint strings
- [0x27B14, .rodata, 33164] # func_801B3164
- [0x27B60, .rodata, 3410C] # E3 selection strings
- [0x27B98, .rodata, 3410C] # TestCollision
- [0x27BD8, .rodata, 3410C] # func_801B55C8
- [0x27BF8, .rodata, 3585C]
- [0x27CD4, .rodata, cutscene] # g_DiagActors strings
- [0x27CF4, .rodata, cutscene] # SEL_EntityCutscene jtbl
- [0x27D78, .rodata, save_mgr]
- [0x28040, .rodata, config_us] # equip strings
- [0x29B18, .rodata, config_us] # accessories strings
- [0x2A8B4, .rodata, config_us] # menu strings
- [0x2AE08, .rodata, config_us] # spells strings
- [0x2AFA0, .rodata, config_us] # relics strings
- [0x2B490, .rodata, config_us] # enemies strings
- [0x2BBF0, .rodata, lba_stage]
- [0x2BF9C, .rodata, stream]
- [0x2C048, c, 2C048]
- [0x33164, c, 33164]
- [0x3410C, c, 3410C]
- [0x3585C, c, 3585C]
- [0x3642C, c, cutscene]
- [0x380F0, c, save_mgr]
- [0x39744, c, stream]
- [0x3AB70, asm, handwritten/func_801BAB70]
- [0x3ABA4, asm, handwritten/DecDCTvlc]
- [0x3AEE4, .bss, bss]
- [0x56B28]