Added data
This commit is contained in:
parent
b96aaf48c2
commit
2e6a19d294
36 changed files with 129 additions and 8 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -1,13 +1,10 @@
|
||||||
# Ghidra project files
|
|
||||||
/.ghidra/
|
|
||||||
*.rep/
|
|
||||||
*.gpr
|
|
||||||
|
|
||||||
# Ghidra caches and temporary files
|
# Ghidra caches and temporary files
|
||||||
ghidra_*
|
ghidra_*
|
||||||
*.bak
|
*.bak
|
||||||
*.tmp
|
*.tmp
|
||||||
*.swp
|
*.swp
|
||||||
|
*.lock
|
||||||
|
*.lock~
|
||||||
|
|
||||||
# IDE and OS files
|
# IDE and OS files
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
|
||||||
0
Crusader.gpr
Normal file
0
Crusader.gpr
Normal file
11
Crusader.rep/idata/00/00000000.prp
Normal file
11
Crusader.rep/idata/00/00000000.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bf0178892741854800" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER.EXE" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000001.prp
Normal file
11
Crusader.rep/idata/00/00000001.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647beb3812826386895600" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER_NE_WRAPPED.EXE" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000002.prp
Normal file
11
Crusader.rep/idata/00/00000002.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bf4b212984786819600" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="seg001_code_off_37600_len_8400.bin" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000003.prp
Normal file
11
Crusader.rep/idata/00/00000003.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bd82013090643707800" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="seg021_code_off_50200_len_4486.bin" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000004.prp
Normal file
11
Crusader.rep/idata/00/00000004.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bfe7615910786193500" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="seg030_code_off_5E000_len_5071.bin" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000005.prp
Normal file
11
Crusader.rep/idata/00/00000005.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bdaf715949048416300" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="seg059_code_off_86A00_len_4288.bin" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
11
Crusader.rep/idata/00/00000006.prp
Normal file
11
Crusader.rep/idata/00/00000006.prp
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="CONTENT_TYPE" TYPE="string" VALUE="Program" />
|
||||||
|
<STATE NAME="PARENT" TYPE="string" VALUE="/" />
|
||||||
|
<STATE NAME="FILE_ID" TYPE="string" VALUE="c0a8647bdba516037949612600" />
|
||||||
|
<STATE NAME="FILE_TYPE" TYPE="int" VALUE="0" />
|
||||||
|
<STATE NAME="READ_ONLY" TYPE="boolean" VALUE="false" />
|
||||||
|
<STATE NAME="NAME" TYPE="string" VALUE="CRUSADER-RAW.EXE" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
BIN
Crusader.rep/idata/00/~00000000.db/db.3.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000000.db/db.3.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000000.db/db.4.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000000.db/db.4.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000000.db/tmp9285499915757176405.ps
Normal file
BIN
Crusader.rep/idata/00/~00000000.db/tmp9285499915757176405.ps
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000001.db/db.1.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000001.db/db.1.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000001.db/db.2.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000001.db/db.2.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000002.db/db.3.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000002.db/db.3.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000002.db/db.4.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000002.db/db.4.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000002.db/tmp4806045532435408105.ps
Normal file
BIN
Crusader.rep/idata/00/~00000002.db/tmp4806045532435408105.ps
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000003.db/db.2.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000003.db/db.2.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000003.db/db.3.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000003.db/db.3.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000003.db/tmp10014618038985014557.ps
Normal file
BIN
Crusader.rep/idata/00/~00000003.db/tmp10014618038985014557.ps
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000004.db/db.1.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000004.db/db.1.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000004.db/db.2.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000004.db/db.2.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000004.db/tmp1857712473912079246.ps
Normal file
BIN
Crusader.rep/idata/00/~00000004.db/tmp1857712473912079246.ps
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000005.db/db.1.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000005.db/db.1.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000005.db/db.2.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000005.db/db.2.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000005.db/tmp9749653166654237275.ps
Normal file
BIN
Crusader.rep/idata/00/~00000005.db/tmp9749653166654237275.ps
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000006.db/changeB.grf
Normal file
BIN
Crusader.rep/idata/00/~00000006.db/changeB.grf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000006.db/db.10.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000006.db/db.10.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000006.db/db.11.gbf
Normal file
BIN
Crusader.rep/idata/00/~00000006.db/db.11.gbf
Normal file
Binary file not shown.
BIN
Crusader.rep/idata/00/~00000006.db/snapshotB.grf
Normal file
BIN
Crusader.rep/idata/00/~00000006.db/snapshotB.grf
Normal file
Binary file not shown.
11
Crusader.rep/idata/~index.dat
Normal file
11
Crusader.rep/idata/~index.dat
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
VERSION=1
|
||||||
|
/
|
||||||
|
00000006:CRUSADER-RAW.EXE:c0a8647bdba516037949612600
|
||||||
|
00000000:CRUSADER.EXE:c0a8647bf0178892741854800
|
||||||
|
00000001:CRUSADER_NE_WRAPPED.EXE:c0a8647beb3812826386895600
|
||||||
|
00000002:seg001_code_off_37600_len_8400.bin:c0a8647bf4b212984786819600
|
||||||
|
00000003:seg021_code_off_50200_len_4486.bin:c0a8647bd82013090643707800
|
||||||
|
00000004:seg030_code_off_5E000_len_5071.bin:c0a8647bfe7615910786193500
|
||||||
|
00000005:seg059_code_off_86A00_len_4288.bin:c0a8647bdaf715949048416300
|
||||||
|
NEXT-ID:7
|
||||||
|
MD5:d41d8cd98f00b204e9800998ecf8427e
|
||||||
6
Crusader.rep/project.prp
Normal file
6
Crusader.rep/project.prp
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<FILE_INFO>
|
||||||
|
<BASIC_INFO>
|
||||||
|
<STATE NAME="OWNER" TYPE="string" VALUE="Maddo" />
|
||||||
|
</BASIC_INFO>
|
||||||
|
</FILE_INFO>
|
||||||
4
Crusader.rep/user/~index.dat
Normal file
4
Crusader.rep/user/~index.dat
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
VERSION=1
|
||||||
|
/
|
||||||
|
NEXT-ID:0
|
||||||
|
MD5:d41d8cd98f00b204e9800998ecf8427e
|
||||||
4
Crusader.rep/versioned/~index.dat
Normal file
4
Crusader.rep/versioned/~index.dat
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
VERSION=1
|
||||||
|
/
|
||||||
|
NEXT-ID:0
|
||||||
|
MD5:d41d8cd98f00b204e9800998ecf8427e
|
||||||
|
|
@ -48,6 +48,26 @@
|
||||||
- `entity_fire_weapon` currently decompiles as a thin wrapper that calls `projectile_init_vector`.
|
- `entity_fire_weapon` currently decompiles as a thin wrapper that calls `projectile_init_vector`.
|
||||||
- `fire_weapon_from_cursor` still decompiles poorly in the raw import, but disassembly shows it begins by pushing cursor sprite/state data from the `0x27d6` area, consistent with the existing seg001 notes.
|
- `fire_weapon_from_cursor` still decompiles poorly in the raw import, but disassembly shows it begins by pushing cursor sprite/state data from the `0x27d6` area, consistent with the existing seg001 notes.
|
||||||
|
|
||||||
|
### Raw 0007 Gameplay Helper Batch (entity/tile aux state)
|
||||||
|
|
||||||
|
- New conservative gameplay-side helper renames (direct analysis from field writes and call structure):
|
||||||
|
- `0007:85f6` = `entity_sync_tile_aux_state`
|
||||||
|
- `0007:8865` = `entity_sync_tile_aux_if_linked`
|
||||||
|
- `0007:8709` = `entity_mark_dirty_and_sync_tile_aux`
|
||||||
|
- Current verified behavior:
|
||||||
|
- `entity_sync_tile_aux_state` reads entity tile index at `+0x4`, toggles bit `0x04` in tile record `+0x59` based on entity byte `+0x54`, and copies entity word `+0x55` into tile record `+0x0d`.
|
||||||
|
- `entity_sync_tile_aux_if_linked` only performs the sync when entity link/pointer `+0x50/+0x52` is non-null.
|
||||||
|
- `entity_mark_dirty_and_sync_tile_aux` calls the linked-sync helper, sets entity flag bit `0x04` at `+0x42`, then enters the existing unresolved thunk path (`0000:ffff`).
|
||||||
|
|
||||||
|
### Raw 0007 Gameplay Helper Batch (facing/direction)
|
||||||
|
|
||||||
|
- New gameplay helper rename (direct analysis):
|
||||||
|
- `0007:8bd9` = `entity_set_facing_direction`
|
||||||
|
- Current verified behavior:
|
||||||
|
- Updates entity facing byte `+0x38` using incoming direction/event code values (notably `0x10/0x11/0x12`) with parity-aware adjustment.
|
||||||
|
- Uses entity flags at `+0x4d` to select increment/decrement behavior for clockwise/counterclockwise facing updates.
|
||||||
|
- Called from the large gameplay update state machine at `0007:5b9a` inside `FUN_0007_5b6f`.
|
||||||
|
|
||||||
### Raw 000e Parser Helper Cluster
|
### Raw 000e Parser Helper Cluster
|
||||||
|
|
||||||
- A small helper cluster in the raw `000e:` area now appears to implement a fixed-size CRLF record parser/table builder, likely used by startup/config or script-ish text data.
|
- A small helper cluster in the raw `000e:` area now appears to implement a fixed-size CRLF record parser/table builder, likely used by startup/config or script-ish text data.
|
||||||
|
|
@ -59,12 +79,13 @@
|
||||||
- `000e:3639` = `record_table_parse_buffer`
|
- `000e:3639` = `record_table_parse_buffer`
|
||||||
- `000e:3798` = `record_parser_read_line`
|
- `000e:3798` = `record_parser_read_line`
|
||||||
- `000e:38f8` = `record_parser_find_marker`
|
- `000e:38f8` = `record_parser_find_marker`
|
||||||
|
- `000e:39cc` = `record_parser_dispatch_at_directive`
|
||||||
- Current behavior read from raw-import decompilation/disassembly:
|
- Current behavior read from raw-import decompilation/disassembly:
|
||||||
- `record_table_init` clears the table header and zeroes 300 words of inline storage.
|
- `record_table_init` clears the table header and zeroes 300 words of inline storage.
|
||||||
- `record_table_parse_buffer` walks a CRLF-separated text buffer, captures each line, splits around a marker helper path, and stores parsed entry state into 0x0c-byte records.
|
- `record_table_parse_buffer` walks a CRLF-separated text buffer, captures each line, splits around a marker helper path, and stores parsed entry state into 0x0c-byte records.
|
||||||
- `record_parser_read_line` advances to the next CRLF-delimited line, rejects lines that start with `@` or with non-identifier punctuation, and terminates the line in-place with `0`.
|
- `record_parser_read_line` advances to the next CRLF-delimited line, rejects lines that start with `@` or with non-identifier punctuation, and terminates the line in-place with `0`.
|
||||||
- `record_parser_find_marker` scans forward until an `@` marker or end-of-data; optionally consumes the remaining length from the parser state.
|
- `record_parser_find_marker` scans forward until an `@` marker or end-of-data; optionally consumes the remaining length from the parser state.
|
||||||
- Helper at `000e:39cc` remains intentionally unnamed for now; disassembly shows it only activates when the current substring begins with `@`, then skips 7 bytes and dispatches through a thunk.
|
- `record_parser_dispatch_at_directive` returns `0` unless the current substring begins with `@`; in the `@` case, it advances by 7 bytes and dispatches through a FAR thunk (`0000:ffff`).
|
||||||
|
|
||||||
### Raw 000e RIFF/Animation Cluster
|
### Raw 000e RIFF/Animation Cluster
|
||||||
|
|
||||||
|
|
@ -99,9 +120,10 @@ The `000e:` segment contains a RIFF/AVI streaming animation subsystem. Animation
|
||||||
| `000e:12f4` | `animation_advance_frame` | Fixed-point `0x1000` timer arithmetic; checks `+0xe4` (paused), advances ring buffer `+0x11b`/`+0x11f`/`+0x117`/`+0x123`; calls advance thunk |
|
| `000e:12f4` | `animation_advance_frame` | Fixed-point `0x1000` timer arithmetic; checks `+0xe4` (paused), advances ring buffer `+0x11b`/`+0x11f`/`+0x117`/`+0x123`; calls advance thunk |
|
||||||
| `000e:103f` | `animation_tick` | Guard wrapper: checks `param_1+0xd4 != -1`, then calls `animation_advance_frame(param_1, 0)` |
|
| `000e:103f` | `animation_tick` | Guard wrapper: checks `param_1+0xd4 != -1`, then calls `animation_advance_frame(param_1, 0)` |
|
||||||
| `000e:06f7` | `anim_load_audio_frame` | Checks chunk tag == `0x62773130` (`"01wb"` = audio stream 1); computes ring buffer free space; copies chunk payload via `0x0000:ffff` thunk; increments subframe index at `+0xeef`; resets at subframe count `+0x1b3` |
|
| `000e:06f7` | `anim_load_audio_frame` | Checks chunk tag == `0x62773130` (`"01wb"` = audio stream 1); computes ring buffer free space; copies chunk payload via `0x0000:ffff` thunk; increments subframe index at `+0xeef`; resets at subframe count `+0x1b3` |
|
||||||
|
| `000e:053d` | `anim_load_video_frame_wrapper` | Called once per subframe in `animation_start` immediately after `anim_load_audio_frame`; thin wrapper that forwards to `000e:ffb0` |
|
||||||
|
|
||||||
**Unresolved callee:**
|
**Unresolved callee:**
|
||||||
- `000e:053d` → `000e:ffb0` (thin wrapper, ffb0 decompiles garbled due to overlapping instructions at `000f:0085`/`000f:0086`). Likely handles video frame loading to pair with `anim_load_audio_frame`. Not renamed.
|
- `000e:ffb0` remains unresolved (decompiles garbled due to overlapping instructions at `000f:0085`/`000f:0086`). Current evidence from `animation_start` loop suggests this path is the video-side subframe loader paired with `anim_load_audio_frame`.
|
||||||
|
|
||||||
**Constructor pattern (`000e:2777`, `000e:2860`, `000e:2969`):**
|
**Constructor pattern (`000e:2777`, `000e:2860`, `000e:2969`):**
|
||||||
All three follow the same layout:
|
All three follow the same layout:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue