Decomp updates

This commit is contained in:
MaddoScientisto 2026-03-30 00:19:01 +02:00
commit c4fa8a6b05
62 changed files with 9413 additions and 20 deletions

View file

@ -199,6 +199,56 @@ So the `-warp mission` path also uses code/data embedded in the executable, not
`-mapoff` therefore matters only inside the manual/debug warp path. It does not affect the ordinary fresh-game selector when no `-warp` argument is present.
### 3a. No Regret cross-check: the live `REGRET.EXE` table is the same 17-word sequence at `1480:075c`
The currently opened `REGRET.EXE` session now closes the missing cross-check directly.
In `Game_RunNewGameFlow`, the debug/manual warp lane computes:
```c
mapno = *(int *)(g_warpToLevelNoArg * 2 + 0x75c) + DAT_1480_0ad0;
```
So the live No Regret table base is:
- `1480:075c`
The retail bytes at that address are:
```text
1480:075c: 00 00 01 00 03 00 05 00 07 00 09 00 0b 00 0d 00
1480:076c: 0f 00 11 00 13 00 15 00 17 00 19 00 1b 00 1d 00
1480:077c: 28 00
```
Interpreted as little-endian words, that is the same 17-entry base-map sequence already recovered in No Remorse:
- `0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 40`
The next two words after the last entry are `0x0000, 0x0000`, so the retail table also has a clean double-zero terminator immediately after the `40` entry.
Current best cross-game read is therefore tighter than the earlier one-sided Remorse note:
- No Remorse and No Regret both keep the debug `-warp mission` base-map table in executable data
- the two currently checked retail tables carry the same 17-word payload
- the practical game-to-game difference in this startup area is not the mission table itself, but the surrounding startup control flow and data addresses
### 3b. Renderer-side extracted JSON now records both retail tables
The public renderer project now has a dedicated extractor for this table instead of keeping the mission mapping only in prose notes.
Current generator and output:
- script: `Crusader_Decomp_Public/map_renderer/src/generate-mission-map-data.js`
- generated cache file: `Crusader_Decomp_Public/map_renderer/.cache/mission-map-data.generated.json`
That JSON captures both retail tables, their data-segment addresses, the per-mission base-map entries, and the reverse `map -> missions` lookup used by the renderer metadata.
The renderer's scene metadata builder now consumes that generated table so usage notes can distinguish:
- maps that are real base mission entries in the executable `-warp` table
- maps that are only reachable through `-mapoff` or some other non-table selector path
Practical implication for the earlier patch question:
- if the goal was `start a normal new game on a different first map`, the executable patch was still required
@ -207,7 +257,7 @@ Practical implication for the earlier patch question:
The No Remorse cross-check now makes that last point stronger: this eggless-map workaround is not just a Regret quirk. `CRUSADER.EXE` uses the same parser shape and the same consumer-side precedence.
### 3a. Why `-warp 0 28670 30718 0 -mapoff 246` likely lands in a bad spot in No Remorse
### 3c. Why `-warp 0 28670 30718 0 -mapoff 246` likely lands in a bad spot in No Remorse
The current cached scene data from `Crusader_Decomp_Public/map_renderer/.cache/scene-cache/remorse/map-246/bb7e36195d39ac72/scene.json` confirms that map `246` is real and nonempty:
@ -366,4 +416,75 @@ For No Regret, the patcher now updates both hardcoded selectors so the later mis
- No Regret hardcodes the same values twice: once in `Game_Start`, and again in the later `FUN_1030_032d` mission-start path that actually controls a real new game.
- The debug `-warp mission` path uses an executable-embedded mission-to-map word table at `1478:0488`, plus `-mapoff`.
- External files such as `FIXED.DAT` hold the actual map contents.
- `CRUSADER.CFG` does not control which map a new game starts on.
- `CRUSADER.CFG` does not control which map a new game starts on.
# Maps mapping by Candy
These entries might be shifted by 1
28: Rebel base
29: destroyed Rebel base
Mission 1:
0: level 1, looks complete
34: level 1, most complete
56: level 1
Mission 2:
2: mission 2
3: mission 2 incomplete
Mission 3:
4: thermatron manufacturing plant
38: thermatron manufacturing plant
43: thermatron manuf plant
45: thermatron manuf plant
5: thermatron plant broken
Mission 4:
6: blow up comms
44: incomplete mission 5
Mission 5:
8: first half
9: second half
Mission 6:
10:
Mission 7:
11: Blow up nerve gas stockpile
12: Blow up nerve gas stockpile
Mission 8: Save prof Willmar who dies on telepad
13,14: first mission with extra protection stuff, 5?
Mission 9:
15:
36:
Mission 10:
16: mission 10
Mission 11: Download plans for platform
17: first half
35: no idea, looks mostly complete level
37: incomplete cipher chip level
31: incomplete mission 6
20: Looks like part of a mission but incomplete. Has that big computer thing
Mission 12:
19: ????? Third done mission. Start matches.
Mission 13:
21: mission 13
22: incomplete mission 13
39: mission 13 incomplete
40: mission 13 very incomplete
Mission 14:
23: mission 14
24: mission 14 with cheese fart
Mission 15:
25: mission 15