From d2f3c6c4dc0f2a11cc40aa9945d6480d695f44e0 Mon Sep 17 00:00:00 2001 From: Joshua Nierentz Date: Wed, 4 Nov 2026 12:29:08 +0100 Subject: [PATCH 1/2] Match 50 PAL engine and menu functions --- README.md | 8 +- THIRD_PARTY_NOTICES.md | 14 + config/pal/crossgame_parallel01.tsv | 13 + config/pal/map.tsv | 50 + config/us/map.tsv | 50 + progress/pal/report.json | 2332 +++++++++++++++++++++------ src/pal/game/0040BAB8.c | 34 + src/pal/game/0042BA60.c | 33 + src/pal/game/0044B100.c | 32 + src/pal/game/00452F08.c | 32 + src/pal/game/00454C38.c | 42 + src/pal/game/00459FD0.c | 29 + src/pal/game/004644A8.c | 19 + src/pal/game/00466940.c | 31 + src/pal/game/0046BC78.c | 28 + src/pal/game/0046F2C8.c | 33 + src/pal/game/00489550.c | 40 + src/pal/game/0048C5F0.c | 18 + src/pal/game/00493D48.c | 39 + src/pal/game/004A0398.c | 27 + src/pal/game/004A0490.c | 28 + src/pal/game/004A0560.c | 37 + src/pal/game/004A1F78.c | 47 + src/pal/game/004A55F8.c | 29 + src/pal/game/004A66E8.c | 67 + src/pal/game/004A9BF0.c | 58 + src/pal/game/004AAD18.c | 49 + src/pal/game/004AE058.c | 47 + src/pal/game/004AE7A8.c | 39 + src/pal/game/004B64A0.c | 27 + src/pal/game/004B7778.c | 28 + src/pal/game/004BA498.c | 36 + src/pal/game/004C32B8.c | 33 + src/pal/game/004C4D20.c | 36 + src/pal/game/004C7F90.c | 35 + src/pal/game/004C9EB8.c | 40 + src/pal/game/004CD188.c | 40 + src/pal/game/004D07F0.c | 45 + src/pal/game/004D2928.c | 31 + src/pal/game/004D2E08.c | 31 + src/pal/game/004DA960.c | 44 + src/pal/game/004DCAC8.c | 32 + src/pal/game/004DCBE8.c | 29 + src/pal/game/004DFA40.c | 31 + src/pal/game/004E3C48.c | 34 + src/pal/game/004F16C8.c | 42 + src/pal/game/004F2D88.c | 38 + src/pal/game/004FBB28.c | 19 + src/pal/game/004FEB10.c | 30 + src/pal/game/00502E90.c | 39 + src/pal/game/00506978.c | 52 + src/pal/game/0050B488.c | 40 + src/pal/game/0050C250.c | 40 + src/pal/game/0050D040.c | 36 + src/pal/game/0053EA90.c | 30 + src/pal/game/0054B628.c | 23 + 56 files changed, 3726 insertions(+), 520 deletions(-) create mode 100644 config/pal/crossgame_parallel01.tsv create mode 100644 src/pal/game/0040BAB8.c create mode 100644 src/pal/game/0042BA60.c create mode 100644 src/pal/game/0044B100.c create mode 100644 src/pal/game/00452F08.c create mode 100644 src/pal/game/00454C38.c create mode 100644 src/pal/game/00459FD0.c create mode 100644 src/pal/game/004644A8.c create mode 100644 src/pal/game/00466940.c create mode 100644 src/pal/game/0046BC78.c create mode 100644 src/pal/game/0046F2C8.c create mode 100644 src/pal/game/00489550.c create mode 100644 src/pal/game/0048C5F0.c create mode 100644 src/pal/game/00493D48.c create mode 100644 src/pal/game/004A0398.c create mode 100644 src/pal/game/004A0490.c create mode 100644 src/pal/game/004A0560.c create mode 100644 src/pal/game/004A1F78.c create mode 100644 src/pal/game/004A55F8.c create mode 100644 src/pal/game/004A66E8.c create mode 100644 src/pal/game/004A9BF0.c create mode 100644 src/pal/game/004AAD18.c create mode 100644 src/pal/game/004AE058.c create mode 100644 src/pal/game/004AE7A8.c create mode 100644 src/pal/game/004B64A0.c create mode 100644 src/pal/game/004B7778.c create mode 100644 src/pal/game/004BA498.c create mode 100644 src/pal/game/004C32B8.c create mode 100644 src/pal/game/004C4D20.c create mode 100644 src/pal/game/004C7F90.c create mode 100644 src/pal/game/004C9EB8.c create mode 100644 src/pal/game/004CD188.c create mode 100644 src/pal/game/004D07F0.c create mode 100644 src/pal/game/004D2928.c create mode 100644 src/pal/game/004D2E08.c create mode 100644 src/pal/game/004DA960.c create mode 100644 src/pal/game/004DCAC8.c create mode 100644 src/pal/game/004DCBE8.c create mode 100644 src/pal/game/004DFA40.c create mode 100644 src/pal/game/004E3C48.c create mode 100644 src/pal/game/004F16C8.c create mode 100644 src/pal/game/004F2D88.c create mode 100644 src/pal/game/004FBB28.c create mode 100644 src/pal/game/004FEB10.c create mode 100644 src/pal/game/00502E90.c create mode 100644 src/pal/game/00506978.c create mode 100644 src/pal/game/0050B488.c create mode 100644 src/pal/game/0050C250.c create mode 100644 src/pal/game/0050D040.c create mode 100644 src/pal/game/0053EA90.c create mode 100644 src/pal/game/0054B628.c diff --git a/README.md b/README.md index 0bdc14458..2f22f9ffe 100644 --- a/README.md +++ b/README.md @@ -79,11 +79,11 @@ Each distinct function counts once: frontbin's copy of the menus is the main ima | | Functions (exact) | Code (exact) | Fuzzy | | --- | ---: | ---: | ---: | -| **Main program** | 3,295 of 8,945 | 274,528 of 2,202,512 bytes (12.46%) | 12.87% | +| **Main program** | 3,345 of 8,945 | 286,384 of 2,202,512 bytes (13.00%) | 13.41% | | Engine core (core.text) | 772 of 1,668 | 73,404 of 288,232 bytes (25.47%) | 26.03% | | libgcc | 26 of 33 | 6,148 of 10,836 bytes (56.74%) | 56.74% | | Network (net.text) | 494 of 2,441 | 16,240 of 465,620 bytes (3.49%) | 4.50% | -| Resident menus (.text) | 2,000 of 4,786 | 178,156 of 1,422,048 bytes (12.53%) | 12.71% | +| Resident menus (.text) | 2,050 of 4,786 | 190,012 of 1,422,048 bytes (13.36%) | 13.54% | | frontbin's own code | 3 of 17 | 580 of 15,776 bytes (3.68%) | 3.68% | | **Shared level code** | 1,643 of 5,088 | 127,280 of 2,008,520 bytes (6.34%) | 6.99% | | **Level-specific code** | 1,094 of 4,080 | 95,808 of 1,601,892 bytes (5.98%) | 6.39% | @@ -101,9 +101,9 @@ Each distinct function counts once: frontbin's copy of the menus is the main ima | Level 14: Ghost Station (and 34) | 6 of 23 | 444 of 8,884 bytes (5.00%) | 5.00% | | Level 15: Control Level (and 35) | 23 of 134 | 2,540 of 116,624 bytes (2.18%) | 2.18% | | Level 41: Battledome Tower (all 22 multiplayer maps) | 141 of 374 | 14,568 of 140,340 bytes (10.38%) | 12.24% | -| **Total** | 6,032 of 18,113 | 497,616 of 5,812,924 bytes (8.56%) | 9.05% | +| **Total** | 6,082 of 18,113 | 509,472 of 5,812,924 bytes (8.76%) | 9.26% | -Each distinct function counts once: frontbin's copy of the menus is the main image's, and a level function counts once however many of the 47 levels have it. 274,528 bytes (4.72%) are in units with nothing left to decompile. +Each distinct function counts once: frontbin's copy of the menus is the main image's, and a level function counts once however many of the 47 levels have it. 286,384 bytes (4.93%) are in units with nothing left to decompile. diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 9b5ce1dec..a90499665 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -439,3 +439,17 @@ These PAL reconstructions also use the public RAC3 sources pinned below; each ta | `src/pal/overlays/shared/L00_006F2370.c` | `src/levels/shared/L39_00662678.c` | `func_L39_00665CC0` | `cd0e7c20fd8a93116566ba2e024fa2f3536bd30c` | | `src/pal/overlays/l41_battledome_tower/L41_00411F80.c` | `src/levels/shared/L40_00420998.c` | `func_L40_004224F8` | `cd0e7c20fd8a93116566ba2e024fa2f3536bd30c` | | `src/pal/overlays/l41_battledome_tower/L41_00621CE8.c` | `src/levels/shared/L40_005416F0.c` | `func_L40_005416F0` | `cd0e7c20fd8a93116566ba2e024fa2f3536bd30c` | + +## Further PAL engine-family references + +The additional PAL reconstructions listed in +[`config/pal/crossgame_parallel01.tsv`](config/pal/crossgame_parallel01.tsv) +use public RAC3 decompilations as algorithm and interface references, including +the unified OpenRAC checkout. Each row records the repository, immutable commit, +file and reference function; the C sources also carry their credits. + +The RAC3 game-source scope is described in the earlier public-decompilations +notice and the reference project's `LEGAL.md`. Fingerprints identify candidates; +these reconstructions were checked independently against RAC4 PAL instructions, +actual address targets and caller/callee interfaces. No proprietary SDK source, +samples or headers were used. diff --git a/config/pal/crossgame_parallel01.tsv b/config/pal/crossgame_parallel01.tsv new file mode 100644 index 000000000..c44da6824 --- /dev/null +++ b/config/pal/crossgame_parallel01.tsv @@ -0,0 +1,13 @@ +# Public references for independently reconstructed PAL functions. +# Fingerprints are candidate metadata; acceptance requires RAC4 retail audits. +name repository commit path reference_function fingerprint +func_0042BA60 OpenRAC/rac3-decomp cd0e7c20fd8a93116566ba2e024fa2f3536bd30c src/levels/shared/L01_00314158.c func_L01_00315800 1618af86d8d943eb +func_0044B100 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/37E0F0.c func_00387B10 c314de3988bc1f3f +func_00454C38 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/3896E8.c func_003899B8 03eda974ec39dcfc +func_00459FD0 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/3896E8.c func_0038DF10 6e59892a8fe0710a +func_004644A8 OpenRAC/rac3-decomp cd0e7c20fd8a93116566ba2e024fa2f3536bd30c src/levels/shared/L01_0042B4F8.c func_L01_0042C370 17bef0551d1644ad +func_00489550 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/39BC00.c func_0039C028 2ae2ba1adad65e1c +func_00493D48 OpenRAC/rac3-decomp cd0e7c20fd8a93116566ba2e024fa2f3536bd30c src/levels/shared/L01_0046A938.c func_L01_0046ABC0 895824762f6e3406 +func_004E3C48 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/3C9888.c func_003C99D0 e297d0b7984082fb +func_004F16C8 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/3ABA48.c func_003ABA48 4a299efcf138e3d3 +func_004F2D88 OpenRAC/OpenRAC 73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde games/rac3/ntsc/src/frontbin/3ABA48.c func_003AD108 1bc2c8df1ccd99fd diff --git a/config/pal/map.tsv b/config/pal/map.tsv index 70349367e..213032eb2 100644 --- a/config/pal/map.tsv +++ b/config/pal/map.tsv @@ -839,6 +839,7 @@ func_00404C90 src/game/00404C90.c differs - - 0.00 func_00406838 src/game/00406838.c match func_00406838 main:.text:00406838:16,frontbin:.text:004065B8:16 100.00 func_004074E8 src/game/004074E8.c match func_004074E8 main:.text:004074E8:12,frontbin:.text:00407268:12 100.00 func_0040B730 src/pal/game/0040B730.c match func_0040B730 main:.text:0040B730:24 100.00 +func_0040BAB8 src/pal/game/0040BAB8.c match func_0040BAB8 main:.text:0040BAB8:104 100.00 func_00410468 src/game/00410468.c match func_00410468 main:.text:00410468:16,frontbin:.text:004101E8:16 100.00 func_00414EC0 src/pal/game/00414EC0.c match func_00414EC0 main:.text:00414EC0:128 100.00 func_00415E88 src/game/00415E88.c match func_00415E88 main:.text:00415E88:64,frontbin:.text:00415C08:64 100.00 @@ -860,6 +861,7 @@ func_004259B0 src/game/004259B0.c match func_00425BC0 main:.text:00425BC0:24,fro func_004259C8 src/game/004259C8.c match func_00425BD8 main:.text:00425BD8:24,frontbin:.text:00425958:24 100.00 func_004259E0 src/game/004259E0.c match func_00425BF0 main:.text:00425BF0:16,frontbin:.text:00425970:16 100.00 func_00427270 src/game/00427270.c match func_00427488 main:.text:00427488:8,frontbin:.text:00427208:8 100.00 +func_0042BA60 src/pal/game/0042BA60.c match func_0042BA60 main:.text:0042BA60:204 100.00 func_0042ED20 src/game/0042ED20.c match func_0042F150 main:.text:0042F150:12,frontbin:.text:0042EED0:12 100.00 func_00430C10 src/game/00430C10.c match func_00431098 main:.text:00431098:220,frontbin:.text:00430E18:220 100.00 func_004312A8 src/game/004312A8.c match func_00431758 main:.text:00431758:12,frontbin:.text:004314D8:12 100.00 @@ -922,6 +924,7 @@ func_00449298 src/game/00449298.c match func_004498D8 main:.text:004498D8:184,fr func_004493B0 src/game/004493B0.c match func_004499F0 main:.text:004499F0:56,frontbin:.text:00449298:56 100.00 func_004493D8 src/pal/game/004493D8.c match func_004493D8 main:.text:004493D8:264 100.00 func_00449A28 src/pal/game/00449A28.c match func_00449A28 main:.text:00449A28:92 100.00 +func_0044B100 src/pal/game/0044B100.c match func_0044B100 main:.text:0044B100:200 100.00 func_0044B110 src/game/0044B110.c match func_0044B7B8 main:.text:0044B7B8:20,frontbin:.text:0044B060:20 100.00 func_0044B128 src/game/0044B128.c match func_0044B7D0 main:.text:0044B7D0:16,frontbin:.text:0044B078:16 100.00 func_0044B138 src/game/0044B138.c match func_0044B7E0 main:.text:0044B7E0:60,frontbin:.text:0044B088:60 100.00 @@ -939,12 +942,14 @@ func_0044E090 src/pal/game/0044E090.c match func_0044E090 main:.text:0044E090:19 func_0044E158 src/pal/game/0044E158.c match func_0044E158 main:.text:0044E158:148 100.00 func_0044E528 src/pal/game/0044E528.c match func_0044E528 main:.text:0044E528:132 100.00 func_00452698 src/game/00452698.c match func_00452EC0 main:.text:00452EC0:68,frontbin:.text:00452768:68 100.00 +func_00452F08 src/pal/game/00452F08.c match func_00452F08 main:.text:00452F08:172 100.00 func_00454258 src/game/00454258.c match func_00454A70 main:.text:00454A70:60,frontbin:.text:00454318:60 100.00 func_00454338 src/game/00454338.c match func_00454B50 main:.text:00454B50:20,frontbin:.text:004543F8:20 100.00 func_004545F8 src/game/004545F8.c match func_00454E10 main:.text:00454E10:8,frontbin:.text:004546B8:8 100.00 func_00454A60 src/game/00454A60.c match func_00455278 main:.text:00455278:8,frontbin:.text:00454B20:8 100.00 func_00454A68 src/game/00454A68.c match func_00455280 main:.text:00455280:8,frontbin:.text:00454B28:8 100.00 func_00454C18 src/pal/game/00454C18.c match func_00454C18 main:.text:00454C18:28 100.00 +func_00454C38 src/pal/game/00454C38.c match func_00454C38 main:.text:00454C38:468 100.00 func_00454E18 src/pal/game/00454E18.c match func_00454E18 main:.text:00454E18:380 100.00 func_00455E40 src/game/00455E40.c match func_00456658 main:.text:00456658:56,frontbin:.text:00455F00:56 100.00 func_004571C0 src/game/004571C0.c match func_004579D8 main:.text:004579D8:28,frontbin:.text:00457280:28 100.00 @@ -970,6 +975,7 @@ func_00459758 src/game/00459758.c match func_00459F70 main:.text:00459F70:92,fro func_004598E0 src/game/004598E0.c match func_0045A0F8 main:.text:0045A0F8:8,frontbin:.text:004599A0:8 100.00 func_00459978 src/game/00459978.c match func_0045A190 main:.text:0045A190:112,frontbin:.text:00459A38:112 100.00 func_004599E8 src/game/004599E8.c match func_0045A200 main:.text:0045A200:12,frontbin:.text:00459AA8:12 100.00 +func_00459FD0 src/pal/game/00459FD0.c match func_00459FD0 main:.text:00459FD0:284 100.00 func_0045A100 src/pal/game/0045A100.c match func_0045A100 main:.text:0045A100:116 100.00 func_0045C580 src/game/0045C580.c match func_0045CD78 main:.text:0045CD78:12,frontbin:.text:0045C620:12 100.00 func_0045C598 src/game/0045C598.c match func_0045CD90 main:.text:0045CD90:116,frontbin:.text:0045C638:116 100.00 @@ -1049,6 +1055,7 @@ func_00461E90 src/game/00461E90.c match func_004626D0 main:.text:004626D0:16,fro func_004625A0 src/game/004625A0.c match func_00462DE0 main:.text:00462DE0:104,frontbin:.text:00462688:104 100.00 func_004635A8 src/pal/game/004635A8.c match func_004635A8 main:.text:004635A8:276 100.00 func_00464088 src/game/00464088.c match func_004648C8 main:.text:004648C8:8,frontbin:.text:00464170:8 100.00 +func_004644A8 src/pal/game/004644A8.c match func_004644A8 main:.text:004644A8:76 100.00 func_00464878 src/pal/game/00464878.c match func_00464878 main:.text:00464878:80 100.00 func_00464980 src/game/00464980.c match func_004651C0 main:.text:004651C0:252,frontbin:.text:00464A68:252 100.00 func_00464D50 src/game/00464D50.c match func_00465598 main:.text:00465598:72,frontbin:.text:00464E40:72 100.00 @@ -1082,6 +1089,7 @@ func_00465F10 src/game/00465F10.c match func_00466758 main:.text:00466758:8,fron func_00465F18 src/game/00465F18.c match func_00466760 main:.text:00466760:8,frontbin:.text:00466008:8 100.00 func_00466128 src/pal/game/00466128.c match func_00466128 main:.text:00466128:160 100.00 func_00466268 src/pal/game/00466268.c match func_00466268 main:.text:00466268:128 100.00 +func_00466940 src/pal/game/00466940.c match func_00466940 main:.text:00466940:220 100.00 func_00468B20 src/game/00468B20.c match func_004693B0 main:.text:004693B0:28,frontbin:.text:00468C58:28 100.00 func_00468B40 src/game/00468B40.c match func_004693D0 main:.text:004693D0:56,frontbin:.text:00468C78:56 100.00 func_00468B78 src/game/00468B78.c match func_00469408 main:.text:00469408:100,frontbin:.text:00468CB0:100 100.00 @@ -1099,6 +1107,7 @@ func_0046A350 src/game/0046A350.c match func_0046AC10 main:.text:0046AC10:8,fron func_0046A358 src/game/0046A358.c match func_0046AC18 main:.text:0046AC18:8,frontbin:.text:0046A4D8:8 100.00 func_0046B4C0 src/game/0046B4C0.c match func_0046BD80 main:.text:0046BD80:32,frontbin:.text:0046B640:32 100.00 func_0046B8C8 src/game/0046B8C8.c match func_0046C188 main:.text:0046C188:44,frontbin:.text:0046BA48:44 100.00 +func_0046BC78 src/pal/game/0046BC78.c match func_0046BC78 main:.text:0046BC78:240 100.00 func_0046C210 src/game/0046C210.c match func_0046CAF0 main:.text:0046CAF0:12,frontbin:.text:0046C3B0:12 100.00 func_0046C440 src/game/0046C440.c match func_0046CD20 main:.text:0046CD20:8,frontbin:.text:0046C5E0:8 100.00 func_0046CBD8 src/game/0046CBD8.c match func_0046D4B8 main:.text:0046D4B8:216,frontbin:.text:0046CD78:216 100.00 @@ -1123,6 +1132,7 @@ func_0046DD78 src/pal/game/0046DD78.c match func_0046DD78 main:.text:0046DD78:24 func_0046EDD8 src/game/0046EDD8.c match func_0046F6B8 main:.text:0046F6B8:84,frontbin:.text:0046EF78:84 100.00 func_0046F068 src/game/0046F068.c match func_0046F948 main:.text:0046F948:100,frontbin:.text:0046F208:100 100.00 func_0046F0D0 src/game/0046F0D0.c match func_0046F9B0 main:.text:0046F9B0:48,frontbin:.text:0046F270:48 100.00 +func_0046F2C8 src/pal/game/0046F2C8.c match func_0046F2C8 main:.text:0046F2C8:224 100.00 func_0046F448 src/game/0046F448.c match func_0046FD28 main:.text:0046FD28:88,frontbin:.text:0046F5E8:88 100.00 func_0046F4A8 src/game/0046F4A8.c match func_0046FD88 main:.text:0046FD88:68,frontbin:.text:0046F648:68 100.00 func_0046F4F0 src/game/0046F4F0.c match func_0046FDD0 main:.text:0046FDD0:64,frontbin:.text:0046F690:64 100.00 @@ -1240,6 +1250,7 @@ func_00488980 src/game/00488980.c match func_00489438 main:.text:00489438:92,fro func_004889E0 src/game/004889E0.c match func_00489498 main:.text:00489498:120,frontbin:.text:00488D58:120 100.00 func_00488A58 src/game/00488A58.c match func_00489510 main:.text:00489510:64,frontbin:.text:00488DD0:64 100.00 func_00488E80 src/game/00488E80.c match func_00489938 main:.text:00489938:56,frontbin:.text:004891F8:56 100.00 +func_00489550 src/pal/game/00489550.c match func_00489550 main:.text:00489550:304 100.00 func_004897F8 src/pal/game/004897F8.c match func_004897F8 main:.text:004897F8:164 100.00 func_00489970 src/pal/game/00489970.c match func_00489970 main:.text:00489970:112 100.00 func_00489C28 src/game/00489C28.c match func_0048A6E0 main:.text:0048A6E0:92,frontbin:.text:00489FA0:92 100.00 @@ -1275,6 +1286,7 @@ func_0048B4B0 src/pal/game/0048B4B0.c match func_0048B4B0 main:.text:0048B4B0:52 func_0048B720 src/pal/game/0048B720.c match func_0048B720 main:.text:0048B720:88 100.00 func_0048B818 src/game/0048B818.c match func_0048C2D0 main:.text:0048C2D0:36,frontbin:.text:0048BB90:36 100.00 func_0048C420 src/pal/game/0048C420.c match func_0048C420 main:.text:0048C420:228 100.00 +func_0048C5F0 src/pal/game/0048C5F0.c match func_0048C5F0 main:.text:0048C5F0:228 100.00 func_0048D038 src/game/0048D038.c match func_0048DAF0 main:.text:0048DAF0:28,frontbin:.text:0048D3B0:28 100.00 func_0048DEB0 src/game/0048DEB0.c match func_0048E968 main:.text:0048E968:16,frontbin:.text:0048E228:16 100.00 func_0048EA78 src/game/0048EA78.c match func_0048F530 main:.text:0048F530:56,frontbin:.text:0048EDF0:56 100.00 @@ -1296,6 +1308,7 @@ func_00490944 src/game/00490944.c match func_0049142C main:.text:0049142C:8,fron func_0049094C src/game/0049094C.c match func_00491434 main:.text:00491434:8,frontbin:.text:00490CF4:8 100.00 func_004936E0 src/pal/game/004936E0.c match func_004936E0 main:.text:004936E0:488 100.00 func_004938D0 src/pal/game/004938D0.c match func_004938D0 main:.text:004938D0:260 100.00 +func_00493D48 src/pal/game/00493D48.c match func_00493D48 main:.text:00493D48:268 100.00 func_004945C0 src/game/004945C0.c match func_00495140 main:.text:00495140:232,frontbin:.text:00494A00:232 100.00 func_00496118 src/pal/game/00496118.c match func_00496118 main:.text:00496118:84 100.00 func_00496308 src/game/00496308.c match func_00496F60 main:.text:00496F60:8,frontbin:.text:00496820:8 100.00 @@ -1471,6 +1484,9 @@ func_0049FB78 src/game/0049FB78.c match func_004A08B0 main:.text:004A08B0:120,fr func_004A01D8 src/game/004A01D8.c match func_004A0F10 main:.text:004A0F10:24,frontbin:.text:004A07D0:24 100.00 func_004A01F0 src/game/004A01F0.c match func_004A0F28 main:.text:004A0F28:24,frontbin:.text:004A07E8:24 100.00 func_004A0208 src/game/004A0208.c match func_004A0F40 main:.text:004A0F40:24,frontbin:.text:004A0800:24 100.00 +func_004A0398 src/pal/game/004A0398.c match func_004A0398 main:.text:004A0398:244 100.00 +func_004A0490 src/pal/game/004A0490.c match func_004A0490 main:.text:004A0490:204 100.00 +func_004A0560 src/pal/game/004A0560.c match func_004A0560 main:.text:004A0560:252 100.00 func_004A05F0 src/game/004A05F0.c match func_004A1328 main:.text:004A1328:200,frontbin:.text:004A0BE8:200 100.00 func_004A06B8 src/game/004A06B8.c match func_004A13F0 main:.text:004A13F0:60,frontbin:.text:004A0CB0:60 100.00 func_004A0818 src/pal/game/004A0818.c match func_004A0818 main:.text:004A0818:152 100.00 @@ -1496,6 +1512,7 @@ func_004A1D50 src/game/004A1D50.c match func_004A2A88 main:.text:004A2A88:8,fron func_004A1E1C src/game/004A1E1C.c match func_004A3B68 main:.text:004A3B68:8,frontbin:.text:004A3428:8 100.00 func_004A1E28 src/game/004A1E28.c match func_004A2B60 main:.text:004A2B60:52,frontbin:.text:004A2420:52 100.00 func_004A1E60 src/game/004A1E60.c match func_004A2B98 main:.text:004A2B98:12,frontbin:.text:004A2458:12 100.00 +func_004A1F78 src/pal/game/004A1F78.c match func_004A1F78 main:.text:004A1F78:204 100.00 func_004A1F88 src/game/004A1F88.c match func_004A2CC0 main:.text:004A2CC0:60,frontbin:.text:004A2580:60 100.00 func_004A1FC8 src/game/004A1FC8.c match func_004A2D00 main:.text:004A2D00:88,frontbin:.text:004A25C0:88 100.00 func_004A20C8 src/game/004A20C8.c match func_004A2E00 main:.text:004A2E00:60,frontbin:.text:004A26C0:60 100.00 @@ -1569,10 +1586,12 @@ func_004A5458 src/game/004A5458.c match func_004A61C8 main:.text:004A61C8:96,fro func_004A54B8 src/game/004A54B8.c match func_004A6228 main:.text:004A6228:32,frontbin:.text:004A5AE8:32 100.00 func_004A54D8 src/game/004A54D8.c match func_004A6248 main:.text:004A6248:124,frontbin:.text:004A5B08:124 100.00 func_004A5558 src/game/004A5558.c match func_004A62C8 main:.text:004A62C8:48,frontbin:.text:004A5B88:48 100.00 +func_004A55F8 src/pal/game/004A55F8.c match func_004A55F8 main:.text:004A55F8:348 100.00 func_004A6030 src/pal/game/004A6030.c match func_004A6030 main:.text:004A6030:28 100.00 func_004A63F8 src/pal/game/004A63F8.c match func_004A63F8 main:.text:004A63F8:152 100.00 func_004A66B0 src/game/004A66B0.c match func_004A7420 main:.text:004A7420:28,frontbin:.text:004A6CE0:28 100.00 func_004A66E0 src/game/004A66E0.c match func_004A7450 main:.text:004A7450:336,frontbin:.text:004A6D10:336 100.00 +func_004A66E8 src/pal/game/004A66E8.c match func_004A66E8 main:.text:004A66E8:412 100.00 func_004A6830 src/game/004A6830.c match func_004A75A0 main:.text:004A75A0:40,frontbin:.text:004A6E60:40 100.00 func_004A6858 src/game/004A6858.c match func_004A75C8 main:.text:004A75C8:96,frontbin:.text:004A6E88:96 100.00 func_004A68B8 src/game/004A68B8.c match func_004A7628 main:.text:004A7628:32,frontbin:.text:004A6EE8:32 100.00 @@ -1598,6 +1617,7 @@ func_004A9118 src/pal/game/004A9118.c match func_004A9118 main:.text:004A9118:13 func_004A9288 src/pal/game/004A9288.c match func_004A9288 main:.text:004A9288:184 100.00 func_004A99A0 src/pal/game/004A99A0.c match func_004A99A0 main:.text:004A99A0:64 100.00 func_004A99E0 src/pal/game/004A99E0.c match func_004A99E0 main:.text:004A99E0:80 100.00 +func_004A9BF0 src/pal/game/004A9BF0.c match func_004A9BF0 main:.text:004A9BF0:236 100.00 func_004A9C00 src/game/004A9C00.c match func_004AA978 main:.text:004AA978:28,frontbin:.text:004AA238:28 100.00 func_004A9C30 src/game/004A9C30.c match func_004AA9A8 main:.text:004AA9A8:92,frontbin:.text:004AA268:92 100.00 func_004A9C90 src/game/004A9C90.c match func_004AAA08 main:.text:004AAA08:8,frontbin:.text:004AA2C8:8 100.00 @@ -1607,6 +1627,7 @@ func_004AA638 src/pal/game/004AA638.c match func_004AA638 main:.text:004AA638:20 func_004AAA48 src/pal/game/004AAA48.c match func_004AAA48 main:.text:004AAA48:276 100.00 func_004AAC9C src/game/004AAC9C.c match func_004ABA44 main:.text:004ABA44:8,frontbin:.text:004AB304:8 100.00 func_004AACA4 src/game/004AACA4.c match func_004ABA4C main:.text:004ABA4C:8,frontbin:.text:004AB30C:8 100.00 +func_004AAD18 src/pal/game/004AAD18.c match func_004AAD18 main:.text:004AAD18:196 100.00 func_004AB168 src/game/004AB168.c match func_004ABFC0 main:.text:004ABFC0:36,frontbin:.text:004AB880:36 100.00 func_004AB788 src/pal/game/004AB788.c match func_004AB788 main:.text:004AB788:120 100.00 func_004AB8B0 src/game/004AB8B0.c match func_004AC708 main:.text:004AC708:52,frontbin:.text:004ABFC8:52 100.00 @@ -1625,10 +1646,12 @@ func_004AD888 src/game/004AD888.c match func_004AE718 main:.text:004AE718:96,fro func_004AD8E8 src/game/004AD8E8.c match func_004AE778 main:.text:004AE778:48,frontbin:.text:004AE038:48 100.00 func_004AE018 src/game/004AE018.c match func_004AEEA8 main:.text:004AEEA8:28,frontbin:.text:004AE768:28 100.00 func_004AE040 src/game/004AE040.c match func_004AEED0 main:.text:004AEED0:336,frontbin:.text:004AE790:336 100.00 +func_004AE058 src/pal/game/004AE058.c match func_004AE058 main:.text:004AE058:220 100.00 func_004AE220 src/game/004AE220.c match func_004AF0B0 main:.text:004AF0B0:96,frontbin:.text:004AE970:96 100.00 func_004AE260 src/pal/game/004AE260.c match func_004AE260 main:.text:004AE260:116 100.00 func_004AE280 src/game/004AE280.c match func_004AF110 main:.text:004AF110:32,frontbin:.text:004AE9D0:32 100.00 func_004AE6D8 src/game/004AE6D8.c match func_004AF568 main:.text:004AF568:48,frontbin:.text:004AEE28:48 100.00 +func_004AE7A8 src/pal/game/004AE7A8.c match func_004AE7A8 main:.text:004AE7A8:228 100.00 func_004AE890 src/pal/game/004AE890.c match func_004AE890 main:.text:004AE890:132 100.00 func_004AE8A8 src/game/004AE8A8.c match func_004AF738 main:.text:004AF738:100,frontbin:.text:004AEFF8:100 100.00 func_004AF020 src/pal/game/004AF020.c match func_004AF020 main:.text:004AF020:140 100.00 @@ -1704,6 +1727,7 @@ func_004B5DF8 src/game/004B5DF8.c match func_004B6CE8 main:.text:004B6CE8:28,fro func_004B5E18 src/game/004B5E18.c match func_004B6D08 main:.text:004B6D08:88,frontbin:.text:004B65C8:88 100.00 func_004B5F70 src/pal/game/004B5F70.c match func_004B5F70 main:.text:004B5F70:180 100.00 func_004B5F78 src/game/004B5F78.c match func_004B6E68 main:.text:004B6E68:116,frontbin:.text:004B6728:116 100.00 +func_004B64A0 src/pal/game/004B64A0.c match func_004B64A0 main:.text:004B64A0:260 100.00 func_004B65E8 src/pal/game/004B65E8.c match func_004B65E8 main:.text:004B65E8:196 100.00 func_004B6950 src/game/004B6950.c match func_004B7840 main:.text:004B7840:28,frontbin:.text:004B7100:28 100.00 func_004B6970 src/game/004B6970.c match func_004B7860 main:.text:004B7860:28,frontbin:.text:004B7120:28 100.00 @@ -1744,6 +1768,7 @@ func_004B75B8 src/game/004B75B8.c match func_004B84A8 main:.text:004B84A8:84,fro func_004B7610 src/game/004B7610.c match func_004B8500 main:.text:004B8500:84,frontbin:.text:004B7DC0:84 100.00 func_004B7630 src/pal/game/004B7630.c match func_004B7630 main:.text:004B7630:328 100.00 func_004B7668 src/game/004B7668.c match func_004B8558 main:.text:004B8558:84,frontbin:.text:004B7E18:84 100.00 +func_004B7778 src/pal/game/004B7778.c match func_004B7778 main:.text:004B7778:200 100.00 func_004B78A0 src/pal/game/004B78A0.c match func_004B78A0 main:.text:004B78A0:28 100.00 func_004B78C0 src/pal/game/004B78C0.c match func_004B78C0 main:.text:004B78C0:28 100.00 func_004B7B58 src/game/004B7B58.c match func_004B8A48 main:.text:004B8A48:100,frontbin:.text:004B8308:100 100.00 @@ -1773,6 +1798,7 @@ func_004B9DF8 src/game/004B9DF8.c match func_004BACE8 main:.text:004BACE8:180,fr func_004BA0D0 src/game/004BA0D0.c match func_004BAFC0 main:.text:004BAFC0:116,frontbin:.text:004BA880:116 100.00 func_004BA338 src/game/004BA338.c match func_004BB228 main:.text:004BB228:116,frontbin:.text:004BAAE8:116 100.00 func_004BA490 src/game/004BA490.c match func_004BB2A8 main:.text:004BB2A8:116,frontbin:.text:004BAB68:116 100.00 +func_004BA498 src/pal/game/004BA498.c match func_004BA498 main:.text:004BA498:256 100.00 func_004BA600 src/game/004BA600.c match func_004BB418 main:.text:004BB418:28,frontbin:.text:004BACD8:28 100.00 func_004BA7A0 src/game/004BA7A0.c differs - - 0.00 func_004BA928 src/game/004BA928.c match func_004BB740 main:.text:004BB740:48,frontbin:.text:004BB000:48 100.00 @@ -1826,6 +1852,7 @@ func_004C21A0 src/game/004C21A0.c match func_004C2FC8 main:.text:004C2FC8:68,fro func_004C2EE0 src/game/004C2EE0.c match func_004C3D08 main:.text:004C3D08:68,frontbin:.text:004C35C8:68 100.00 func_004C2F28 src/game/004C2F28.c match func_004C3D50 main:.text:004C3D50:76,frontbin:.text:004C3610:76 100.00 func_004C2F78 src/game/004C2F78.c match func_004C3DA0 main:.text:004C3DA0:128,frontbin:.text:004C3660:128 100.00 +func_004C32B8 src/pal/game/004C32B8.c match func_004C32B8 main:.text:004C32B8:196 100.00 func_004C3380 src/pal/game/004C3380.c match func_004C3380 main:.text:004C3380:184 100.00 func_004C37A0 src/game/004C37A0.c match func_004C45C8 main:.text:004C45C8:128,frontbin:.text:004C3E88:128 100.00 func_004C3988 src/game/004C3988.c match func_004C47B0 main:.text:004C47B0:124,frontbin:.text:004C4070:124 100.00 @@ -1843,6 +1870,7 @@ func_004C4490 src/game/004C4490.c match func_004C52B8 main:.text:004C52B8:36,fro func_004C44B8 src/game/004C44B8.c match func_004C52E0 main:.text:004C52E0:48,frontbin:.text:004C4BA0:48 100.00 func_004C4648 src/pal/game/004C4648.c match func_004C4648 main:.text:004C4648:196 100.00 func_004C49B0 src/pal/game/004C49B0.c match func_004C49B0 main:.text:004C49B0:176 100.00 +func_004C4D20 src/pal/game/004C4D20.c match func_004C4D20 main:.text:004C4D20:288 100.00 func_004C5570 src/game/004C5570.c match func_004C6398 main:.text:004C6398:28,frontbin:.text:004C5C58:28 100.00 func_004C5590 src/game/004C5590.c match func_004C63B8 main:.text:004C63B8:40,frontbin:.text:004C5C78:40 100.00 func_004C55B8 src/game/004C55B8.c match func_004C63E0 main:.text:004C63E0:104,frontbin:.text:004C5CA0:104 100.00 @@ -1863,6 +1891,7 @@ func_004C74E0 src/game/004C74E0.c match func_004C8308 main:.text:004C8308:84,fro func_004C7600 src/pal/game/004C7600.c match func_004C7600 main:.text:004C7600:144 100.00 func_004C7670 src/game/004C7670.c match func_004C8498 main:.text:004C8498:56,frontbin:.text:004C7D58:56 100.00 func_004C7EE8 src/pal/game/004C7EE8.c match func_004C7EE8 main:.text:004C7EE8:92 100.00 +func_004C7F90 src/pal/game/004C7F90.c match func_004C7F90 main:.text:004C7F90:212 100.00 func_004C8108 src/pal/game/004C8108.c match func_004C8108 main:.text:004C8108:196 100.00 func_004C8118 src/game/004C8118.c match func_004C8F40 main:.text:004C8F40:112,frontbin:.text:004C8800:112 100.00 func_004C8188 src/game/004C8188.c match func_004C8FB0 main:.text:004C8FB0:40,frontbin:.text:004C8870:40 100.00 @@ -1887,6 +1916,7 @@ func_004C96D8 src/game/004C96D8.c match func_004CA500 main:.text:004CA500:40,fro func_004C9700 src/game/004C9700.c match func_004CA528 main:.text:004CA528:40,frontbin:.text:004C9DE8:40 100.00 func_004C9728 src/game/004C9728.c match func_004CA550 main:.text:004CA550:104,frontbin:.text:004C9E10:104 100.00 func_004C9790 src/game/004C9790.c match func_004CA5B8 main:.text:004CA5B8:40,frontbin:.text:004C9E78:40 100.00 +func_004C9EB8 src/pal/game/004C9EB8.c match func_004C9EB8 main:.text:004C9EB8:216 100.00 func_004C9FC8 src/pal/game/004C9FC8.c match func_004C9FC8 main:.text:004C9FC8:100 100.00 func_004CA770 src/game/004CA770.c match func_004CB608 main:.text:004CB608:40,frontbin:.text:004CAEC8:40 100.00 func_004CA798 src/game/004CA798.c match func_004CB630 main:.text:004CB630:84,frontbin:.text:004CAEF0:84 100.00 @@ -1925,6 +1955,7 @@ func_004CCFD0 src/game/004CCFD0.c match func_004CDE70 main:.text:004CDE70:8,fron func_004CCFE8 src/pal/game/004CCFE8.c match func_004CCFE8 main:.text:004CCFE8:192 100.00 func_004CCFFC src/game/004CCFFC.c match func_0048F648 main:.text:0048F648:8,frontbin:.text:0048EF08:8 100.00 func_004CD008 src/game/004CD008.c match func_004CDEA8 main:.text:004CDEA8:64,frontbin:.text:004CD768:64 100.00 +func_004CD188 src/pal/game/004CD188.c match func_004CD188 main:.text:004CD188:308 100.00 func_004CD5F0 src/game/004CD5F0.c match func_004CE490 main:.text:004CE490:44,frontbin:.text:004CDD50:44 100.00 func_004CD6DC src/game/004CD6DC.c differs - - 0.00 func_004CD700 src/game/004CD700.c match func_004CE5A0 main:.text:004CE5A0:44,frontbin:.text:004CDE60:44 100.00 @@ -1978,6 +2009,7 @@ func_004D05A0 src/game/004D05A0.c match func_004D1440 main:.text:004D1440:28,fro func_004D05C0 src/game/004D05C0.c match func_004D1460 main:.text:004D1460:28,frontbin:.text:004D0D20:28 100.00 func_004D0618 src/pal/game/004D0618.c match func_004D0618 main:.text:004D0618:232 100.00 func_004D0700 src/pal/game/004D0700.c match func_004D0700 main:.text:004D0700:172 100.00 +func_004D07F0 src/pal/game/004D07F0.c match func_004D07F0 main:.text:004D07F0:240 100.00 func_004D0830 src/game/004D0830.c match func_004D16D0 main:.text:004D16D0:28,frontbin:.text:004D0F90:28 100.00 func_004D0850 src/game/004D0850.c match func_004D16F0 main:.text:004D16F0:28,frontbin:.text:004D0FB0:28 100.00 func_004D0870 src/game/004D0870.c match func_004D1710 main:.text:004D1710:28,frontbin:.text:004D0FD0:28 100.00 @@ -2016,6 +2048,7 @@ func_004D2360 src/game/004D2360.c match func_004D3270 main:.text:004D3270:32,fro func_004D26D8 src/game/004D26D8.c match func_004D35E8 main:.text:004D35E8:112,frontbin:.text:004D2EA8:112 100.00 func_004D2748 src/game/004D2748.c match func_004D3658 main:.text:004D3658:176,frontbin:.text:004D2F18:176 100.00 func_004D2898 src/game/004D2898.c match func_004D37A8 main:.text:004D37A8:72,frontbin:.text:004D3068:72 100.00 +func_004D2928 src/pal/game/004D2928.c match func_004D2928 main:.text:004D2928:232 100.00 func_004D2A80 src/game/004D2A80.c match func_004D3990 main:.text:004D3990:60,frontbin:.text:004D3250:60 100.00 func_004D2AC0 src/game/004D2AC0.c match func_004D39D0 main:.text:004D39D0:60,frontbin:.text:004D3290:60 100.00 func_004D2B00 src/game/004D2B00.c match func_004D3A10 main:.text:004D3A10:60,frontbin:.text:004D32D0:60 100.00 @@ -2023,6 +2056,7 @@ func_004D2B40 src/game/004D2B40.c match func_004D3A50 main:.text:004D3A50:60,fro func_004D2B80 src/game/004D2B80.c match func_004D3A90 main:.text:004D3A90:60,frontbin:.text:004D3350:60 100.00 func_004D2C08 src/pal/game/004D2C08.c match func_004D2C08 main:.text:004D2C08:136 100.00 func_004D2CB0 src/pal/game/004D2CB0.c match func_004D2CB0 main:.text:004D2CB0:152 100.00 +func_004D2E08 src/pal/game/004D2E08.c match func_004D2E08 main:.text:004D2E08:320 100.00 func_004D2FF8 src/game/004D2FF8.c match func_004D3F08 main:.text:004D3F08:28,frontbin:.text:004D37C8:28 100.00 func_004D3030 src/game/004D3030.c match func_004D3F40 main:.text:004D3F40:8,frontbin:.text:004D3800:8 100.00 func_004D31A0 src/game/004D31A0.c match func_004D40B0 main:.text:004D40B0:76,frontbin:.text:004D3970:76 100.00 @@ -2132,6 +2166,7 @@ func_004D9E20 src/game/004D9E20.c match func_004DAD38 main:.text:004DAD38:40,fro func_004D9E48 src/game/004D9E48.c match func_004DAD60 main:.text:004DAD60:104,frontbin:.text:004DA620:104 100.00 func_004DA140 src/game/004DA140.c match func_004DB060 main:.text:004DB060:172,frontbin:.text:004DA920:172 100.00 func_004DA8D0 src/pal/game/004DA8D0.c match func_004DA8D0 main:.text:004DA8D0:140 100.00 +func_004DA960 src/pal/game/004DA960.c match func_004DA960 main:.text:004DA960:212 100.00 func_004DACA0 src/game/004DACA0.c match func_004DBBC0 main:.text:004DBBC0:28,frontbin:.text:004DB480:28 100.00 func_004DACC0 src/game/004DACC0.c match func_004DBBE0 main:.text:004DBBE0:108,frontbin:.text:004DB4A0:108 100.00 func_004DAE88 src/game/004DAE88.c match func_004DBDA8 main:.text:004DBDA8:48,frontbin:.text:004DB668:48 100.00 @@ -2151,10 +2186,13 @@ func_004DC178 src/game/004DC178.c match func_004DD0D8 main:.text:004DD0D8:136,fr func_004DC570 src/game/004DC570.c match func_004DD4D0 main:.text:004DD4D0:132,frontbin:.text:004DCD90:132 100.00 func_004DC628 src/pal/game/004DC628.c match func_004DC628 main:.text:004DC628:144 100.00 func_004DC880 src/game/004DC880.c match func_004DD7E0 main:.text:004DD7E0:48,frontbin:.text:004DD0A0:48 100.00 +func_004DCAC8 src/pal/game/004DCAC8.c match func_004DCAC8 main:.text:004DCAC8:200 100.00 func_004DCB80 src/game/004DCB80.c match func_004DDAE0 main:.text:004DDAE0:28,frontbin:.text:004DD3A0:28 100.00 func_004DCBA8 src/game/004DCBA8.c match func_004DDB08 main:.text:004DDB08:140,frontbin:.text:004DD3C8:140 100.00 +func_004DCBE8 src/pal/game/004DCBE8.c match func_004DCBE8 main:.text:004DCBE8:208 100.00 func_004DCC38 src/game/004DCC38.c match func_004DDB98 main:.text:004DDB98:100,frontbin:.text:004DD458:100 100.00 func_004DF098 src/game/004DF098.c match func_004DFFF8 main:.text:004DFFF8:92,frontbin:.text:004DF8B8:92 100.00 +func_004DFA40 src/pal/game/004DFA40.c match func_004DFA40 main:.text:004DFA40:188 100.00 func_004DFED8 src/pal/game/004DFED8.c match func_004DFED8 main:.text:004DFED8:280 100.00 func_004DFF1C src/game/004DFF1C.c match func_004D42A0 main:.text:004D42A0:8,frontbin:.text:004D3B60:8 100.00 func_004DFF28 src/game/004DFF28.c match func_004E0E88 main:.text:004E0E88:120,frontbin:.text:004E0748:120 100.00 @@ -2178,6 +2216,7 @@ func_004E254C src/game/004E254C.c match func_004E34AC main:.text:004E34AC:8,fron func_004E2568 src/game/004E2568.c match func_004E34C8 main:.text:004E34C8:100,frontbin:.text:004E2D88:100 100.00 func_004E2A78 src/pal/game/004E2A78.c match func_004E2A78 main:.text:004E2A78:60 100.00 func_004E2AF8 src/game/004E2AF8.c match func_004E3A20 main:.text:004E3A20:72,frontbin:.text:004E3320:72 100.00 +func_004E3C48 src/pal/game/004E3C48.c match func_004E3C48 main:.text:004E3C48:268 100.00 func_004E3D58 src/pal/game/004E3D58.c match func_004E3D58 main:.text:004E3D58:156 100.00 func_004E4CD8 src/game/004E4CD8.c match func_004E5C00 main:.text:004E5C00:92,frontbin:.text:004E5500:92 100.00 func_004E5590 src/game/004E5590.c match func_004E64B8 main:.text:004E64B8:40,frontbin:.text:004E5DB8:40 100.00 @@ -2271,6 +2310,7 @@ func_004F1618 src/game/004F1618.c match func_004F2680 main:.text:004F2680:88,fro func_004F1670 src/game/004F1670.c match func_004F26D8 main:.text:004F26D8:76,frontbin:.text:004F1FD8:76 100.00 func_004F16B8 src/pal/game/004F16B8.c match func_004F16B8 main:.text:004F16B8:16 100.00 func_004F16C0 src/game/004F16C0.c match func_004F2728 main:.text:004F2728:84,frontbin:.text:004F2028:84 100.00 +func_004F16C8 src/pal/game/004F16C8.c match func_004F16C8 main:.text:004F16C8:276 100.00 func_004F1848 src/game/004F1848.c match func_004F28B0 main:.text:004F28B0:264,frontbin:.text:004F21B0:264 100.00 func_004F1950 src/game/004F1950.c match func_004F29B8 main:.text:004F29B8:404,frontbin:.text:004F22B8:404 100.00 func_004F1AE8 src/game/004F1AE8.c match func_004F2B50 main:.text:004F2B50:256,frontbin:.text:004F2450:256 100.00 @@ -2307,6 +2347,7 @@ func_004F2518 src/game/004F2518.c match func_004F3580 main:.text:004F3580:8,fron func_004F2520 src/game/004F2520.c match func_004F3588 main:.text:004F3588:8,frontbin:.text:004F2E88:8 100.00 func_004F2528 src/game/004F2528.c match func_004F3590 main:.text:004F3590:8,frontbin:.text:004F2E90:8 100.00 func_004F2D20 src/pal/game/004F2D20.c match func_004F2D20 main:.text:004F2D20:64 100.00 +func_004F2D88 src/pal/game/004F2D88.c match func_004F2D88 main:.text:004F2D88:204 100.00 func_004F3440 src/game/004F3440.c match func_004F44A8 main:.text:004F44A8:40,frontbin:.text:004F3DA8:40 100.00 func_004F35B0 src/game/004F35B0.c match func_004F4618 main:.text:004F4618:84,frontbin:.text:004F3F18:84 100.00 func_004F3630 src/pal/game/004F3630.c match func_004F3630 main:.text:004F3630:16 100.00 @@ -2349,6 +2390,7 @@ func_004F8EA0 src/game/004F8EA0.c match func_004F9F20 main:.text:004F9F20:140,fr func_004F9F28 src/game/004F9F28.c match func_004FAFA8 main:.text:004FAFA8:472,frontbin:.text:004FA8A8:472 100.00 func_004FA838 src/game/004FA838.c match func_004FB8B8 main:.text:004FB8B8:152,frontbin:.text:004FB1B8:152 100.00 func_004FAD40 src/pal/game/004FAD40.c match func_004FAD40 main:.text:004FAD40:116 100.00 +func_004FBB28 src/pal/game/004FBB28.c match func_004FBB28 main:.text:004FBB28:212 100.00 func_004FBF78 src/game/004FBF78.c match func_004FCFE8 main:.text:004FCFE8:24,frontbin:.text:004FC8E8:24 100.00 func_004FC298 src/game/004FC298.c match func_004FD308 main:.text:004FD308:36,frontbin:.text:004FCC08:36 100.00 func_004FC2C0 src/game/004FC2C0.c match func_004FD330 main:.text:004FD330:76,frontbin:.text:004FCC30:76 100.00 @@ -2361,6 +2403,7 @@ func_004FDC78 src/game/004FDC78.c match func_004FECE8 main:.text:004FECE8:116,fr func_004FE140 src/game/004FE140.c match func_004FF1B0 main:.text:004FF1B0:8,frontbin:.text:004FEAB0:8 100.00 func_004FE208 src/pal/game/004FE208.c match func_004FE208 main:.text:004FE208:172 100.00 func_004FE948 src/game/004FE948.c match func_004FF9B8 main:.text:004FF9B8:88,frontbin:.text:004FF2B8:88 100.00 +func_004FEB10 src/pal/game/004FEB10.c match func_004FEB10 main:.text:004FEB10:168 100.00 func_004FEC80 src/game/004FEC80.c match func_004FFCF0 main:.text:004FFCF0:12,frontbin:.text:004FF5F0:12 100.00 func_004FECE8 src/game/004FECE8.c match func_004FFD58 main:.text:004FFD58:116,frontbin:.text:004FF658:116 100.00 func_004FED60 src/game/004FED60.c match func_004FFDD0 main:.text:004FFDD0:104,frontbin:.text:004FF6D0:104 100.00 @@ -2463,6 +2506,7 @@ func_005028C0 src/game/005028C0.c match func_00503930 main:.text:00503930:112,fr func_00502940 src/pal/game/00502940.c match func_00502940 main:.text:00502940:108 100.00 func_00502BB8 src/pal/game/00502BB8.c match func_00502BB8 main:.text:00502BB8:88 100.00 func_00502D28 src/pal/game/00502D28.c match func_00502D28 main:.text:00502D28:180 100.00 +func_00502E90 src/pal/game/00502E90.c match func_00502E90 main:.text:00502E90:312 100.00 func_005037A8 src/pal/game/005037A8.c match func_005037A8 main:.text:005037A8:152 100.00 func_00503AE8 src/game/00503AE8.c match func_00504B80 main:.text:00504B80:112,frontbin:.text:00504480:112 100.00 func_00503B58 src/game/00503B58.c match func_00504BF0 main:.text:00504BF0:20,frontbin:.text:005044F0:20 100.00 @@ -2504,6 +2548,7 @@ func_005065D8 src/game/005065D8.c match func_00507670 main:.text:00507670:32,fro func_00506678 src/pal/game/00506678.c match func_00506678 main:.text:00506678:228 100.00 func_00506860 src/game/00506860.c match func_005078F8 main:.text:005078F8:208,frontbin:.text:005071F8:208 100.00 func_00506878 src/pal/game/00506878.c match func_00506878 main:.text:00506878:244 100.00 +func_00506978 src/pal/game/00506978.c match func_00506978 main:.text:00506978:244 100.00 func_00506A70 src/pal/game/00506A70.c match func_00506A70 main:.text:00506A70:228 100.00 func_00506A78 src/game/00506A78.c match func_00507B10 main:.text:00507B10:248,frontbin:.text:00507410:248 100.00 func_00506B70 src/game/00506B70.c match func_00507C08 main:.text:00507C08:28,frontbin:.text:00507508:28 100.00 @@ -2630,6 +2675,7 @@ func_0050B308 src/game/0050B308.c match func_0050C3A0 main:.text:0050C3A0:104,fr func_0050B370 src/game/0050B370.c match func_0050C408 main:.text:0050C408:100,frontbin:.text:0050BD08:100 100.00 func_0050B3D8 src/game/0050B3D8.c match func_0050C470 main:.text:0050C470:104,frontbin:.text:0050BD70:104 100.00 func_0050B440 src/game/0050B440.c match func_0050C4D8 main:.text:0050C4D8:96,frontbin:.text:0050BDD8:96 100.00 +func_0050B488 src/pal/game/0050B488.c match func_0050B488 main:.text:0050B488:232 100.00 func_0050B4A0 src/game/0050B4A0.c match func_0050C538 main:.text:0050C538:112,frontbin:.text:0050BE38:112 100.00 func_0050B510 src/game/0050B510.c match func_0050C5A8 main:.text:0050C5A8:104,frontbin:.text:0050BEA8:104 100.00 func_0050B578 src/game/0050B578.c match func_0050C610 main:.text:0050C610:104,frontbin:.text:0050BF10:104 100.00 @@ -2651,6 +2697,7 @@ func_0050BD98 src/game/0050BD98.c match func_0050CE30 main:.text:0050CE30:104,fr func_0050BEC8 src/pal/game/0050BEC8.c match func_0050BEC8 main:.text:0050BEC8:192 100.00 func_0050C058 src/game/0050C058.c match func_0050D0F0 main:.text:0050D0F0:52,frontbin:.text:0050C9F0:52 100.00 func_0050C090 src/game/0050C090.c match func_0050D128 main:.text:0050D128:108,frontbin:.text:0050CA28:108 100.00 +func_0050C250 src/pal/game/0050C250.c match func_0050C250 main:.text:0050C250:232 100.00 func_0050C368 src/game/0050C368.c match func_0050D400 main:.text:0050D400:8,frontbin:.text:0050CD00:8 100.00 func_0050C4B0 src/game/0050C4B0.c match func_0050D548 main:.text:0050D548:48,frontbin:.text:0050CE48:48 100.00 func_0050C568 src/game/0050C568.c match func_0050D600 main:.text:0050D600:8,frontbin:.text:0050CF00:8 100.00 @@ -2664,6 +2711,7 @@ func_0050CAE8 src/pal/game/0050CAE8.c match func_0050CAE8 main:.text:0050CAE8:19 func_0050CDB0 src/game/0050CDB0.c match func_0050DE48 main:.text:0050DE48:112,frontbin:.text:0050D748:112 100.00 func_0050CE48 src/game/0050CE48.c match func_0050DEE0 main:.text:0050DEE0:16,frontbin:.text:0050D7E0:16 100.00 func_0050CE58 src/game/0050CE58.c match func_0050DEF0 main:.text:0050DEF0:20,frontbin:.text:0050D7F0:20 100.00 +func_0050D040 src/pal/game/0050D040.c match func_0050D040 main:.text:0050D040:172 100.00 func_0050D280 src/game/0050D280.c match func_0050E318 main:.text:0050E318:8,frontbin:.text:0050DC18:8 100.00 func_0050D288 src/game/0050D288.c match func_0050E320 main:.text:0050E320:64,frontbin:.text:0050DC20:64 100.00 func_0050D2C8 src/game/0050D2C8.c match func_0050E360 main:.text:0050E360:28,frontbin:.text:0050DC60:28 100.00 @@ -2808,6 +2856,7 @@ func_0053DDA0 src/pal/game/0053DDA0.c match func_0053DDA0 main:.text:0053DDA0:76 func_0053DF20 src/pal/game/0053DF20.c match func_0053DF20 main:.text:0053DF20:96 100.00 func_0053E0A0 src/pal/game/0053E0A0.c match func_0053E0A0 main:.text:0053E0A0:184 100.00 func_0053E150 src/game/0053E150.c match func_00549F78 main:.text:00549F78:8,frontbin:.text:00549878:8 100.00 +func_0053EA90 src/pal/game/0053EA90.c match func_0053EA90 main:.text:0053EA90:260 100.00 func_0053F4D8 src/pal/game/0053F4D8.c match func_0053F4D8 main:.text:0053F4D8:64 100.00 func_0053F588 src/game/0053F588.c match func_00549F78 main:.text:00549F78:8,frontbin:.text:00549878:8 100.00 func_0053F590 src/game/0053F590.c match func_00540998 main:.text:00540998:60,frontbin:.text:00540298:60 100.00 @@ -2885,6 +2934,7 @@ func_0054B120 src/pal/game/0054B120.c match func_0054B120 main:.text:0054B120:32 func_0054B208 src/pal/game/0054B208.c match func_0054B208 main:.text:0054B208:128 100.00 func_0054B280 src/game/0054B280.c match func_0054C7E8 main:.text:0054C7E8:52,frontbin:.text:0054C0E8:52 100.00 func_0054B5A8 src/game/0054B5A8.c match func_0054CB10 main:.text:0054CB10:28,frontbin:.text:0054C410:28 100.00 +func_0054B628 src/pal/game/0054B628.c match func_0054B628 main:.text:0054B628:204 100.00 func_0054B6F8 src/pal/game/0054B6F8.c match func_0054B6F8 main:.text:0054B6F8:204 100.00 func_0054B968 src/pal/game/0054B968.c match func_0054B968 main:.text:0054B968:160 100.00 func_0054C0A8 src/pal/game/0054C0A8.c match func_0054C0A8 main:.text:0054C0A8:56 100.00 diff --git a/config/us/map.tsv b/config/us/map.tsv index 33771581f..8c40aa610 100644 --- a/config/us/map.tsv +++ b/config/us/map.tsv @@ -839,6 +839,7 @@ func_00404C90 src/game/00404C90.c match func_00404C90 main:.text:00404C90:16,fro func_00406838 src/game/00406838.c match func_00406838 main:.text:00406838:16,frontbin:.text:004065B8:16 100.00 func_004074E8 src/game/004074E8.c match func_004074E8 main:.text:004074E8:12 100.00 func_0040B730 src/pal/game/0040B730.c other - - 0.00 +func_0040BAB8 src/pal/game/0040BAB8.c other - - 0.00 func_00410468 src/game/00410468.c match func_00410468 main:.text:00410468:16 100.00 func_00414EC0 src/pal/game/00414EC0.c other - - 0.00 func_00415E88 src/game/00415E88.c match func_00415E88 main:.text:00415E88:64 100.00 @@ -860,6 +861,7 @@ func_004259B0 src/game/004259B0.c match func_004259B0 main:.text:004259B0:24 100 func_004259C8 src/game/004259C8.c match func_004259C8 main:.text:004259C8:24 100.00 func_004259E0 src/game/004259E0.c match func_004259E0 main:.text:004259E0:16 100.00 func_00427270 src/game/00427270.c match func_00427270 main:.text:00427270:8 100.00 +func_0042BA60 src/pal/game/0042BA60.c other - - 0.00 func_0042ED20 src/game/0042ED20.c match func_0042ED20 main:.text:0042ED20:12 100.00 func_00430C10 src/game/00430C10.c match func_00430C10 main:.text:00430C10:220 100.00 func_004312A8 src/game/004312A8.c match func_004312A8 main:.text:004312A8:12 100.00 @@ -922,6 +924,7 @@ func_00449298 src/game/00449298.c match func_00449298 main:.text:00449298:184 10 func_004493B0 src/game/004493B0.c match func_004493B0 main:.text:004493B0:56 100.00 func_004493D8 src/pal/game/004493D8.c other - - 0.00 func_00449A28 src/pal/game/00449A28.c other - - 0.00 +func_0044B100 src/pal/game/0044B100.c other - - 0.00 func_0044B110 src/game/0044B110.c match func_0044B110 main:.text:0044B110:20 100.00 func_0044B128 src/game/0044B128.c match func_0044B128 main:.text:0044B128:16 100.00 func_0044B138 src/game/0044B138.c match func_0044B138 main:.text:0044B138:60 100.00 @@ -939,12 +942,14 @@ func_0044E090 src/pal/game/0044E090.c other - - 0.00 func_0044E158 src/pal/game/0044E158.c other - - 0.00 func_0044E528 src/pal/game/0044E528.c other - - 0.00 func_00452698 src/game/00452698.c match func_00452698 main:.text:00452698:68 100.00 +func_00452F08 src/pal/game/00452F08.c other - - 0.00 func_00454258 src/game/00454258.c match func_00454258 main:.text:00454258:60 100.00 func_00454338 src/game/00454338.c match func_00454338 main:.text:00454338:20 100.00 func_004545F8 src/game/004545F8.c match func_004545F8 main:.text:004545F8:8 100.00 func_00454A60 src/game/00454A60.c match func_00454A60 main:.text:00454A60:8 100.00 func_00454A68 src/game/00454A68.c match func_00454A68 main:.text:00454A68:8 100.00 func_00454C18 src/pal/game/00454C18.c other - - 0.00 +func_00454C38 src/pal/game/00454C38.c other - - 0.00 func_00454E18 src/pal/game/00454E18.c other - - 0.00 func_00455E40 src/game/00455E40.c match func_00455E40 main:.text:00455E40:56 100.00 func_004571C0 src/game/004571C0.c match func_004571C0 main:.text:004571C0:28 100.00 @@ -970,6 +975,7 @@ func_00459758 src/game/00459758.c match func_00459758 main:.text:00459758:92 100 func_004598E0 src/game/004598E0.c match func_004598E0 main:.text:004598E0:8 100.00 func_00459978 src/game/00459978.c match func_00459978 main:.text:00459978:112 100.00 func_004599E8 src/game/004599E8.c match func_004599E8 main:.text:004599E8:12 100.00 +func_00459FD0 src/pal/game/00459FD0.c other - - 0.00 func_0045A100 src/pal/game/0045A100.c other - - 0.00 func_0045C580 src/game/0045C580.c match func_0045C580 main:.text:0045C580:12 100.00 func_0045C598 src/game/0045C598.c match func_0045C598 main:.text:0045C598:116 100.00 @@ -1049,6 +1055,7 @@ func_00461E90 src/game/00461E90.c match func_00461E90 main:.text:00461E90:16 100 func_004625A0 src/game/004625A0.c match func_004625A0 main:.text:004625A0:104 100.00 func_004635A8 src/pal/game/004635A8.c other - - 0.00 func_00464088 src/game/00464088.c match func_00464088 main:.text:00464088:8 100.00 +func_004644A8 src/pal/game/004644A8.c other - - 0.00 func_00464878 src/pal/game/00464878.c other - - 0.00 func_00464980 src/game/00464980.c match func_00464980 main:.text:00464980:252 100.00 func_00464D50 src/game/00464D50.c match func_00464D50 main:.text:00464D50:72 100.00 @@ -1082,6 +1089,7 @@ func_00465F10 src/game/00465F10.c match func_00465F10 main:.text:00465F10:8 100. func_00465F18 src/game/00465F18.c match func_00465F18 main:.text:00465F18:8 100.00 func_00466128 src/pal/game/00466128.c other - - 0.00 func_00466268 src/pal/game/00466268.c other - - 0.00 +func_00466940 src/pal/game/00466940.c other - - 0.00 func_00468B20 src/game/00468B20.c match func_00468B20 main:.text:00468B20:28 100.00 func_00468B40 src/game/00468B40.c match func_00468B40 main:.text:00468B40:56 100.00 func_00468B78 src/game/00468B78.c match func_00468B78 main:.text:00468B78:100 100.00 @@ -1099,6 +1107,7 @@ func_0046A350 src/game/0046A350.c match func_0046A350 main:.text:0046A350:8,fron func_0046A358 src/game/0046A358.c match func_0046A358 main:.text:0046A358:8,frontbin:.text:00469118:8 100.00 func_0046B4C0 src/game/0046B4C0.c match func_0046B4C0 main:.text:0046B4C0:32,frontbin:.text:0046A280:32 100.00 func_0046B8C8 src/game/0046B8C8.c match func_0046B8C8 main:.text:0046B8C8:44,frontbin:.text:0046A688:44 100.00 +func_0046BC78 src/pal/game/0046BC78.c other - - 0.00 func_0046C210 src/game/0046C210.c match func_0046C210 main:.text:0046C210:12,frontbin:.text:0046AFD0:12 100.00 func_0046C440 src/game/0046C440.c match func_0046C440 main:.text:0046C440:8,frontbin:.text:0046B200:8 100.00 func_0046CBD8 src/game/0046CBD8.c match func_0046CBD8 main:.text:0046CBD8:216,frontbin:.text:0046B998:216 100.00 @@ -1123,6 +1132,7 @@ func_0046DD78 src/pal/game/0046DD78.c other - - 0.00 func_0046EDD8 src/game/0046EDD8.c match func_0046EDD8 main:.text:0046EDD8:84,frontbin:.text:0046DB98:84 100.00 func_0046F068 src/game/0046F068.c match func_0046F068 main:.text:0046F068:100,frontbin:.text:0046DE28:100 100.00 func_0046F0D0 src/game/0046F0D0.c match func_0046F0D0 main:.text:0046F0D0:48,frontbin:.text:0046DE90:48 100.00 +func_0046F2C8 src/pal/game/0046F2C8.c other - - 0.00 func_0046F448 src/game/0046F448.c match func_0046F448 main:.text:0046F448:88,frontbin:.text:0046E208:88 100.00 func_0046F4A8 src/game/0046F4A8.c match func_0046F4A8 main:.text:0046F4A8:68,frontbin:.text:0046E268:68 100.00 func_0046F4F0 src/game/0046F4F0.c match func_0046F4F0 main:.text:0046F4F0:64,frontbin:.text:0046E2B0:64 100.00 @@ -1240,6 +1250,7 @@ func_00488980 src/game/00488980.c match func_00488980 main:.text:00488980:92,fro func_004889E0 src/game/004889E0.c match func_004889E0 main:.text:004889E0:120,frontbin:.text:004877A0:120 100.00 func_00488A58 src/game/00488A58.c match func_00488A58 main:.text:00488A58:64,frontbin:.text:00487818:64 100.00 func_00488E80 src/game/00488E80.c match func_00488E80 main:.text:00488E80:56,frontbin:.text:00487C40:56 100.00 +func_00489550 src/pal/game/00489550.c other - - 0.00 func_004897F8 src/pal/game/004897F8.c other - - 0.00 func_00489970 src/pal/game/00489970.c other - - 0.00 func_00489C28 src/game/00489C28.c match func_00489C28 main:.text:00489C28:92,frontbin:.text:00488978:92 100.00 @@ -1275,6 +1286,7 @@ func_0048B4B0 src/pal/game/0048B4B0.c other - - 0.00 func_0048B720 src/pal/game/0048B720.c other - - 0.00 func_0048B818 src/game/0048B818.c match func_0048B818 main:.text:0048B818:36,frontbin:.text:0048A508:36 100.00 func_0048C420 src/pal/game/0048C420.c other - - 0.00 +func_0048C5F0 src/pal/game/0048C5F0.c other - - 0.00 func_0048D038 src/game/0048D038.c match func_0048D038 main:.text:0048D038:28,frontbin:.text:0048BD28:28 100.00 func_0048DEB0 src/game/0048DEB0.c match func_0048DEB0 main:.text:0048DEB0:16,frontbin:.text:0048CBA0:16 100.00 func_0048EA78 src/game/0048EA78.c match func_0048EA78 main:.text:0048EA78:56,frontbin:.text:0048D768:56 100.00 @@ -1296,6 +1308,7 @@ func_00490944 src/game/00490944.c match func_00490944 main:.text:00490944:8,fron func_0049094C src/game/0049094C.c match func_0049094C main:.text:0049094C:8,frontbin:.text:0048F63C:8 100.00 func_004936E0 src/pal/game/004936E0.c other - - 0.00 func_004938D0 src/pal/game/004938D0.c other - - 0.00 +func_00493D48 src/pal/game/00493D48.c other - - 0.00 func_004945C0 src/game/004945C0.c match func_004945C0 main:.text:004945C0:232,frontbin:.text:004932B0:232 100.00 func_00496118 src/pal/game/00496118.c other - - 0.00 func_00496308 src/game/00496308.c match func_00496308 main:.text:00496308:8,frontbin:.text:00494FF8:8 100.00 @@ -1471,6 +1484,9 @@ func_0049FB78 src/game/0049FB78.c match func_0049FB78 main:.text:0049FB78:120,fr func_004A01D8 src/game/004A01D8.c match func_004A01D8 main:.text:004A01D8:24,frontbin:.text:0049EEC8:24 100.00 func_004A01F0 src/game/004A01F0.c match func_004A01F0 main:.text:004A01F0:24,frontbin:.text:0049EEE0:24 100.00 func_004A0208 src/game/004A0208.c match func_004A0208 main:.text:004A0208:24,frontbin:.text:0049EEF8:24 100.00 +func_004A0398 src/pal/game/004A0398.c other - - 0.00 +func_004A0490 src/pal/game/004A0490.c other - - 0.00 +func_004A0560 src/pal/game/004A0560.c other - - 0.00 func_004A05F0 src/game/004A05F0.c match func_004A05F0 main:.text:004A05F0:200,frontbin:.text:0049F2E0:200 100.00 func_004A06B8 src/game/004A06B8.c match func_004A06B8 main:.text:004A06B8:60,frontbin:.text:0049F3A8:60 100.00 func_004A0818 src/pal/game/004A0818.c other - - 0.00 @@ -1496,6 +1512,7 @@ func_004A1D50 src/game/004A1D50.c match func_004A1D50 main:.text:004A1D50:8,fron func_004A1E1C src/game/004A1E1C.c match func_004A1E1C main:.text:004A1E1C:8,frontbin:.text:004A0B0C:8 100.00 func_004A1E28 src/game/004A1E28.c match func_004A1E28 main:.text:004A1E28:52,frontbin:.text:004A0B18:52 100.00 func_004A1E60 src/game/004A1E60.c match func_004A1E60 main:.text:004A1E60:12,frontbin:.text:004A0B50:12 100.00 +func_004A1F78 src/pal/game/004A1F78.c other - - 0.00 func_004A1F88 src/game/004A1F88.c match func_004A1F88 main:.text:004A1F88:60,frontbin:.text:004A0C78:60 100.00 func_004A1FC8 src/game/004A1FC8.c match func_004A1FC8 main:.text:004A1FC8:88,frontbin:.text:004A0CB8:88 100.00 func_004A20C8 src/game/004A20C8.c match func_004A20C8 main:.text:004A20C8:60,frontbin:.text:004A0DB8:60 100.00 @@ -1569,10 +1586,12 @@ func_004A5458 src/game/004A5458.c match func_004A5458 main:.text:004A5458:96,fro func_004A54B8 src/game/004A54B8.c match func_004A54B8 main:.text:004A54B8:32,frontbin:.text:004A41A8:32 100.00 func_004A54D8 src/game/004A54D8.c match func_004A54D8 main:.text:004A54D8:124,frontbin:.text:004A41C8:124 100.00 func_004A5558 src/game/004A5558.c match func_004A5558 main:.text:004A5558:48,frontbin:.text:004A4248:48 100.00 +func_004A55F8 src/pal/game/004A55F8.c other - - 0.00 func_004A6030 src/pal/game/004A6030.c other - - 0.00 func_004A63F8 src/pal/game/004A63F8.c other - - 0.00 func_004A66B0 src/game/004A66B0.c match func_004A66B0 main:.text:004A66B0:28,frontbin:.text:004A53A0:28 100.00 func_004A66E0 src/game/004A66E0.c match func_004A66E0 main:.text:004A66E0:336,frontbin:.text:004A53D0:336 100.00 +func_004A66E8 src/pal/game/004A66E8.c other - - 0.00 func_004A6830 src/game/004A6830.c match func_004A6830 main:.text:004A6830:40,frontbin:.text:004A5520:40 100.00 func_004A6858 src/game/004A6858.c match func_004A6858 main:.text:004A6858:96,frontbin:.text:004A5548:96 100.00 func_004A68B8 src/game/004A68B8.c match func_004A68B8 main:.text:004A68B8:32,frontbin:.text:004A55A8:32 100.00 @@ -1598,6 +1617,7 @@ func_004A9118 src/pal/game/004A9118.c other - - 0.00 func_004A9288 src/pal/game/004A9288.c other - - 0.00 func_004A99A0 src/pal/game/004A99A0.c other - - 0.00 func_004A99E0 src/pal/game/004A99E0.c other - - 0.00 +func_004A9BF0 src/pal/game/004A9BF0.c other - - 0.00 func_004A9C00 src/game/004A9C00.c match func_004A9C00 main:.text:004A9C00:28,frontbin:.text:004A88F0:28 100.00 func_004A9C30 src/game/004A9C30.c match func_004A9C30 main:.text:004A9C30:92,frontbin:.text:004A8920:92 100.00 func_004A9C90 src/game/004A9C90.c match func_004A9C90 main:.text:004A9C90:8,frontbin:.text:004A8980:8 100.00 @@ -1607,6 +1627,7 @@ func_004AA638 src/pal/game/004AA638.c other - - 0.00 func_004AAA48 src/pal/game/004AAA48.c other - - 0.00 func_004AAC9C src/game/004AAC9C.c match func_004AAC9C main:.text:004AAC9C:8,frontbin:.text:004A998C:8 100.00 func_004AACA4 src/game/004AACA4.c match func_004AACA4 main:.text:004AACA4:8,frontbin:.text:004A9994:8 100.00 +func_004AAD18 src/pal/game/004AAD18.c other - - 0.00 func_004AB168 src/game/004AB168.c match func_004AB168 main:.text:004AB168:36,frontbin:.text:004A9E58:36 100.00 func_004AB788 src/pal/game/004AB788.c other - - 0.00 func_004AB8B0 src/game/004AB8B0.c match func_004AB8B0 main:.text:004AB8B0:52,frontbin:.text:004AA5A0:52 100.00 @@ -1625,10 +1646,12 @@ func_004AD888 src/game/004AD888.c match func_004AD888 main:.text:004AD888:96,fro func_004AD8E8 src/game/004AD8E8.c match func_004AD8E8 main:.text:004AD8E8:48,frontbin:.text:004AC5D8:48 100.00 func_004AE018 src/game/004AE018.c match func_004AE018 main:.text:004AE018:28,frontbin:.text:004ACD08:28 100.00 func_004AE040 src/game/004AE040.c match func_004AE040 main:.text:004AE040:336,frontbin:.text:004ACD30:336 100.00 +func_004AE058 src/pal/game/004AE058.c other - - 0.00 func_004AE220 src/game/004AE220.c match func_004AE220 main:.text:004AE220:96,frontbin:.text:004ACF10:96 100.00 func_004AE260 src/pal/game/004AE260.c other - - 0.00 func_004AE280 src/game/004AE280.c match func_004AE280 main:.text:004AE280:32,frontbin:.text:004ACF70:32 100.00 func_004AE6D8 src/game/004AE6D8.c match func_004AE6D8 main:.text:004AE6D8:48,frontbin:.text:004AD3C8:48 100.00 +func_004AE7A8 src/pal/game/004AE7A8.c other - - 0.00 func_004AE890 src/pal/game/004AE890.c other - - 0.00 func_004AE8A8 src/game/004AE8A8.c match func_004AE8A8 main:.text:004AE8A8:100,frontbin:.text:004AD598:100 100.00 func_004AF020 src/pal/game/004AF020.c other - - 0.00 @@ -1704,6 +1727,7 @@ func_004B5DF8 src/game/004B5DF8.c match func_004B5DF8 main:.text:004B5DF8:28,fro func_004B5E18 src/game/004B5E18.c match func_004B5E18 main:.text:004B5E18:88,frontbin:.text:004B4B08:88 100.00 func_004B5F70 src/pal/game/004B5F70.c other - - 0.00 func_004B5F78 src/game/004B5F78.c match func_004B5F78 main:.text:004B5F78:116,frontbin:.text:004B4C68:116 100.00 +func_004B64A0 src/pal/game/004B64A0.c other - - 0.00 func_004B65E8 src/pal/game/004B65E8.c other - - 0.00 func_004B6950 src/game/004B6950.c match func_004B6950 main:.text:004B6950:28,frontbin:.text:004B5640:28 100.00 func_004B6970 src/game/004B6970.c match func_004B6970 main:.text:004B6970:28,frontbin:.text:004B5660:28 100.00 @@ -1744,6 +1768,7 @@ func_004B75B8 src/game/004B75B8.c match func_004B75B8 main:.text:004B75B8:84,fro func_004B7610 src/game/004B7610.c match func_004B7610 main:.text:004B7610:84,frontbin:.text:004B6300:84 100.00 func_004B7630 src/pal/game/004B7630.c other - - 0.00 func_004B7668 src/game/004B7668.c match func_004B7668 main:.text:004B7668:84,frontbin:.text:004B6358:84 100.00 +func_004B7778 src/pal/game/004B7778.c other - - 0.00 func_004B78A0 src/pal/game/004B78A0.c other - - 0.00 func_004B78C0 src/pal/game/004B78C0.c other - - 0.00 func_004B7B58 src/game/004B7B58.c match func_004B7B58 main:.text:004B7B58:100,frontbin:.text:004B6848:100 100.00 @@ -1773,6 +1798,7 @@ func_004B9DF8 src/game/004B9DF8.c match func_004B9DF8 main:.text:004B9DF8:180,fr func_004BA0D0 src/game/004BA0D0.c match func_004BA0D0 main:.text:004BA0D0:116,frontbin:.text:004B8DC0:116 100.00 func_004BA338 src/game/004BA338.c match func_004BA338 main:.text:004BA338:116,frontbin:.text:004B9028:116 100.00 func_004BA490 src/game/004BA490.c match func_004BA490 main:.text:004BA490:116,frontbin:.text:004B9180:116 100.00 +func_004BA498 src/pal/game/004BA498.c other - - 0.00 func_004BA600 src/game/004BA600.c match func_004BA600 main:.text:004BA600:28,frontbin:.text:004B92F0:28 100.00 func_004BA7A0 src/game/004BA7A0.c match func_004BA7A0 main:.text:004BA7A0:124,frontbin:.text:004B9490:124 100.00 func_004BA928 src/game/004BA928.c match func_004BA928 main:.text:004BA928:48,frontbin:.text:004B9618:48 100.00 @@ -1826,6 +1852,7 @@ func_004C21A0 src/game/004C21A0.c match func_004C21A0 main:.text:004C21A0:68,fro func_004C2EE0 src/game/004C2EE0.c match func_004C2EE0 main:.text:004C2EE0:68,frontbin:.text:004C1BD0:68 100.00 func_004C2F28 src/game/004C2F28.c match func_004C2F28 main:.text:004C2F28:76,frontbin:.text:004C1C18:76 100.00 func_004C2F78 src/game/004C2F78.c match func_004C2F78 main:.text:004C2F78:128,frontbin:.text:004C1C68:128 100.00 +func_004C32B8 src/pal/game/004C32B8.c other - - 0.00 func_004C3380 src/pal/game/004C3380.c other - - 0.00 func_004C37A0 src/game/004C37A0.c match func_004C37A0 main:.text:004C37A0:128,frontbin:.text:004C2490:128 100.00 func_004C3988 src/game/004C3988.c match func_004C3988 main:.text:004C3988:124,frontbin:.text:004C2678:124 100.00 @@ -1843,6 +1870,7 @@ func_004C4490 src/game/004C4490.c match func_004C4490 main:.text:004C4490:36,fro func_004C44B8 src/game/004C44B8.c match func_004C44B8 main:.text:004C44B8:48,frontbin:.text:004C31A8:48 100.00 func_004C4648 src/pal/game/004C4648.c other - - 0.00 func_004C49B0 src/pal/game/004C49B0.c other - - 0.00 +func_004C4D20 src/pal/game/004C4D20.c other - - 0.00 func_004C5570 src/game/004C5570.c match func_004C5570 main:.text:004C5570:28,frontbin:.text:004C4260:28 100.00 func_004C5590 src/game/004C5590.c match func_004C5590 main:.text:004C5590:40,frontbin:.text:004C4280:40 100.00 func_004C55B8 src/game/004C55B8.c match func_004C55B8 main:.text:004C55B8:104,frontbin:.text:004C42A8:104 100.00 @@ -1863,6 +1891,7 @@ func_004C74E0 src/game/004C74E0.c match func_004C74E0 main:.text:004C74E0:84,fro func_004C7600 src/pal/game/004C7600.c other - - 0.00 func_004C7670 src/game/004C7670.c match func_004C7670 main:.text:004C7670:56,frontbin:.text:004C6360:56 100.00 func_004C7EE8 src/pal/game/004C7EE8.c other - - 0.00 +func_004C7F90 src/pal/game/004C7F90.c other - - 0.00 func_004C8108 src/pal/game/004C8108.c other - - 0.00 func_004C8118 src/game/004C8118.c match func_004C8118 main:.text:004C8118:112,frontbin:.text:004C6E08:112 100.00 func_004C8188 src/game/004C8188.c match func_004C8188 main:.text:004C8188:40,frontbin:.text:004C6E78:40 100.00 @@ -1887,6 +1916,7 @@ func_004C96D8 src/game/004C96D8.c match func_004C96D8 main:.text:004C96D8:40,fro func_004C9700 src/game/004C9700.c match func_004C9700 main:.text:004C9700:40,frontbin:.text:004C83F0:40 100.00 func_004C9728 src/game/004C9728.c match func_004C9728 main:.text:004C9728:104,frontbin:.text:004C8418:104 100.00 func_004C9790 src/game/004C9790.c match func_004C9790 main:.text:004C9790:40,frontbin:.text:004C8480:40 100.00 +func_004C9EB8 src/pal/game/004C9EB8.c other - - 0.00 func_004C9FC8 src/pal/game/004C9FC8.c other - - 0.00 func_004CA770 src/game/004CA770.c match func_004CA770 main:.text:004CA770:40,frontbin:.text:004C9460:40 100.00 func_004CA798 src/game/004CA798.c match func_004CA798 main:.text:004CA798:84,frontbin:.text:004C9488:84 100.00 @@ -1925,6 +1955,7 @@ func_004CCFD0 src/game/004CCFD0.c match func_004CCFD0 main:.text:004CCFD0:8,fron func_004CCFE8 src/pal/game/004CCFE8.c other - - 0.00 func_004CCFFC src/game/004CCFFC.c match func_004CCFFC main:.text:004CCFFC:8,frontbin:.text:004CBCEC:8 100.00 func_004CD008 src/game/004CD008.c match func_004CD008 main:.text:004CD008:64,frontbin:.text:004CBCF8:64 100.00 +func_004CD188 src/pal/game/004CD188.c other - - 0.00 func_004CD5F0 src/game/004CD5F0.c match func_004CD5F0 main:.text:004CD5F0:44,frontbin:.text:004CC2E0:44 100.00 func_004CD6DC src/game/004CD6DC.c match func_004CD6DC main:.text:004CD6DC:32,frontbin:.text:004CC3CC:32 100.00 func_004CD700 src/game/004CD700.c match func_004CD700 main:.text:004CD700:44,frontbin:.text:004CC3F0:44 100.00 @@ -1978,6 +2009,7 @@ func_004D05A0 src/game/004D05A0.c match func_004D05A0 main:.text:004D05A0:28,fro func_004D05C0 src/game/004D05C0.c match func_004D05C0 main:.text:004D05C0:28,frontbin:.text:004CF2B0:28 100.00 func_004D0618 src/pal/game/004D0618.c other - - 0.00 func_004D0700 src/pal/game/004D0700.c other - - 0.00 +func_004D07F0 src/pal/game/004D07F0.c other - - 0.00 func_004D0830 src/game/004D0830.c match func_004D0830 main:.text:004D0830:28 100.00 func_004D0850 src/game/004D0850.c match func_004D0850 main:.text:004D0850:28,frontbin:.text:004CF540:28 100.00 func_004D0870 src/game/004D0870.c match func_004D0870 main:.text:004D0870:28,frontbin:.text:004CF560:28 100.00 @@ -2016,6 +2048,7 @@ func_004D2360 src/game/004D2360.c match func_004D2360 main:.text:004D2360:32,fro func_004D26D8 src/game/004D26D8.c match func_004D26D8 main:.text:004D26D8:112,frontbin:.text:004D13C8:112 100.00 func_004D2748 src/game/004D2748.c match func_004D2748 main:.text:004D2748:176,frontbin:.text:004D1438:176 100.00 func_004D2898 src/game/004D2898.c match func_004D2898 main:.text:004D2898:72,frontbin:.text:004D1588:72 100.00 +func_004D2928 src/pal/game/004D2928.c other - - 0.00 func_004D2A80 src/game/004D2A80.c match func_004D2A80 main:.text:004D2A80:60,frontbin:.text:004D1770:60 100.00 func_004D2AC0 src/game/004D2AC0.c match func_004D2AC0 main:.text:004D2AC0:60,frontbin:.text:004D17B0:60 100.00 func_004D2B00 src/game/004D2B00.c match func_004D2B00 main:.text:004D2B00:60,frontbin:.text:004D17F0:60 100.00 @@ -2023,6 +2056,7 @@ func_004D2B40 src/game/004D2B40.c match func_004D2B40 main:.text:004D2B40:60,fro func_004D2B80 src/game/004D2B80.c match func_004D2B80 main:.text:004D2B80:60,frontbin:.text:004D1870:60 100.00 func_004D2C08 src/pal/game/004D2C08.c other - - 0.00 func_004D2CB0 src/pal/game/004D2CB0.c other - - 0.00 +func_004D2E08 src/pal/game/004D2E08.c other - - 0.00 func_004D2FF8 src/game/004D2FF8.c match func_004D2FF8 main:.text:004D2FF8:28,frontbin:.text:004D1CE8:28 100.00 func_004D3030 src/game/004D3030.c match func_004D3030 main:.text:004D3030:8,frontbin:.text:004D1D20:8 100.00 func_004D31A0 src/game/004D31A0.c match func_004D31A0 main:.text:004D31A0:76,frontbin:.text:004D1E90:76 100.00 @@ -2132,6 +2166,7 @@ func_004D9E20 src/game/004D9E20.c match func_004D9E20 main:.text:004D9E20:40,fro func_004D9E48 src/game/004D9E48.c match func_004D9E48 main:.text:004D9E48:104,frontbin:.text:004D8B38:104 100.00 func_004DA140 src/game/004DA140.c match func_004DA140 main:.text:004DA140:172,frontbin:.text:004D8E30:172 100.00 func_004DA8D0 src/pal/game/004DA8D0.c other - - 0.00 +func_004DA960 src/pal/game/004DA960.c other - - 0.00 func_004DACA0 src/game/004DACA0.c match func_004DACA0 main:.text:004DACA0:28,frontbin:.text:004D9990:28 100.00 func_004DACC0 src/game/004DACC0.c match func_004DACC0 main:.text:004DACC0:108,frontbin:.text:004D99B0:108 100.00 func_004DAE88 src/game/004DAE88.c match func_004DAE88 main:.text:004DAE88:48,frontbin:.text:004D9B78:48 100.00 @@ -2151,10 +2186,13 @@ func_004DC178 src/game/004DC178.c match func_004DC178 main:.text:004DC178:136,fr func_004DC570 src/game/004DC570.c match func_004DC570 main:.text:004DC570:132,frontbin:.text:004DB260:132 100.00 func_004DC628 src/pal/game/004DC628.c other - - 0.00 func_004DC880 src/game/004DC880.c match func_004DC880 main:.text:004DC880:48,frontbin:.text:004DB570:48 100.00 +func_004DCAC8 src/pal/game/004DCAC8.c other - - 0.00 func_004DCB80 src/game/004DCB80.c match func_004DCB80 main:.text:004DCB80:28,frontbin:.text:004DB870:28 100.00 func_004DCBA8 src/game/004DCBA8.c match func_004DCBA8 main:.text:004DCBA8:140,frontbin:.text:004DB898:140 100.00 +func_004DCBE8 src/pal/game/004DCBE8.c other - - 0.00 func_004DCC38 src/game/004DCC38.c match func_004DCC38 main:.text:004DCC38:100,frontbin:.text:004DB928:100 100.00 func_004DF098 src/game/004DF098.c match func_004DF098 main:.text:004DF098:92,frontbin:.text:004DDD88:92 100.00 +func_004DFA40 src/pal/game/004DFA40.c other - - 0.00 func_004DFED8 src/pal/game/004DFED8.c other - - 0.00 func_004DFF1C src/game/004DFF1C.c match func_004DFF1C main:.text:004DFF1C:8,frontbin:.text:004DEC0C:8 100.00 func_004DFF28 src/game/004DFF28.c match func_004DFF28 main:.text:004DFF28:120,frontbin:.text:004DEC18:120 100.00 @@ -2178,6 +2216,7 @@ func_004E254C src/game/004E254C.c match func_004E254C main:.text:004E254C:8,fron func_004E2568 src/game/004E2568.c match func_004E2568 main:.text:004E2568:100,frontbin:.text:004E1258:100 100.00 func_004E2A78 src/pal/game/004E2A78.c other - - 0.00 func_004E2AF8 src/game/004E2AF8.c match func_004E2AF8 main:.text:004E2AF8:72,frontbin:.text:004E1788:72 100.00 +func_004E3C48 src/pal/game/004E3C48.c other - - 0.00 func_004E3D58 src/pal/game/004E3D58.c other - - 0.00 func_004E4CD8 src/game/004E4CD8.c match func_004E4CD8 main:.text:004E4CD8:92,frontbin:.text:004E3968:92 100.00 func_004E5590 src/game/004E5590.c match func_004E5590 main:.text:004E5590:40,frontbin:.text:004E4220:40 100.00 @@ -2271,6 +2310,7 @@ func_004F1618 src/game/004F1618.c match func_004F1618 main:.text:004F1618:88,fro func_004F1670 src/game/004F1670.c match func_004F1670 main:.text:004F1670:76,frontbin:.text:004F0300:76 100.00 func_004F16B8 src/pal/game/004F16B8.c other - - 0.00 func_004F16C0 src/game/004F16C0.c match func_004F16C0 main:.text:004F16C0:84,frontbin:.text:004F0350:84 100.00 +func_004F16C8 src/pal/game/004F16C8.c other - - 0.00 func_004F1848 src/game/004F1848.c match func_004F1848 main:.text:004F1848:264,frontbin:.text:004F04D8:264 100.00 func_004F1950 src/game/004F1950.c match func_004F1950 main:.text:004F1950:404,frontbin:.text:004F05E0:404 100.00 func_004F1AE8 src/game/004F1AE8.c match func_004F1AE8 main:.text:004F1AE8:256,frontbin:.text:004F0778:256 100.00 @@ -2307,6 +2347,7 @@ func_004F2518 src/game/004F2518.c match func_004F2518 main:.text:004F2518:8,fron func_004F2520 src/game/004F2520.c match func_004F2520 main:.text:004F2520:8,frontbin:.text:004F11B0:8 100.00 func_004F2528 src/game/004F2528.c match func_004F2528 main:.text:004F2528:8,frontbin:.text:004F11B8:8 100.00 func_004F2D20 src/pal/game/004F2D20.c other - - 0.00 +func_004F2D88 src/pal/game/004F2D88.c other - - 0.00 func_004F3440 src/game/004F3440.c match func_004F3440 main:.text:004F3440:40,frontbin:.text:004F20D0:40 100.00 func_004F35B0 src/game/004F35B0.c match func_004F35B0 main:.text:004F35B0:84,frontbin:.text:004F2240:84 100.00 func_004F3630 src/pal/game/004F3630.c other - - 0.00 @@ -2349,6 +2390,7 @@ func_004F8EA0 src/game/004F8EA0.c match func_004F8EA0 main:.text:004F8EA0:140,fr func_004F9F28 src/game/004F9F28.c match func_004F9F28 main:.text:004F9F28:472,frontbin:.text:004F8BB8:472 100.00 func_004FA838 src/game/004FA838.c match func_004FA838 main:.text:004FA838:152,frontbin:.text:004F94C8:152 100.00 func_004FAD40 src/pal/game/004FAD40.c other - - 0.00 +func_004FBB28 src/pal/game/004FBB28.c other - - 0.00 func_004FBF78 src/game/004FBF78.c match func_004FBF78 main:.text:004FBF78:24,frontbin:.text:004FAC08:24 100.00 func_004FC298 src/game/004FC298.c match func_004FC298 main:.text:004FC298:36,frontbin:.text:004FAF28:36 100.00 func_004FC2C0 src/game/004FC2C0.c match func_004FC2C0 main:.text:004FC2C0:76,frontbin:.text:004FAF50:76 100.00 @@ -2361,6 +2403,7 @@ func_004FDC78 src/game/004FDC78.c match func_004FDC78 main:.text:004FDC78:116,fr func_004FE140 src/game/004FE140.c match func_004FE140 main:.text:004FE140:8,frontbin:.text:004FCDD0:8 100.00 func_004FE208 src/pal/game/004FE208.c other - - 0.00 func_004FE948 src/game/004FE948.c match func_004FE948 main:.text:004FE948:88,frontbin:.text:004FD5D8:88 100.00 +func_004FEB10 src/pal/game/004FEB10.c other - - 0.00 func_004FEC80 src/game/004FEC80.c match func_004FEC80 main:.text:004FEC80:12,frontbin:.text:004FD910:12 100.00 func_004FECE8 src/game/004FECE8.c match func_004FECE8 main:.text:004FECE8:116,frontbin:.text:004FD978:116 100.00 func_004FED60 src/game/004FED60.c match func_004FED60 main:.text:004FED60:104,frontbin:.text:004FD9F0:104 100.00 @@ -2463,6 +2506,7 @@ func_005028C0 src/game/005028C0.c match func_005028C0 main:.text:005028C0:112,fr func_00502940 src/pal/game/00502940.c other - - 0.00 func_00502BB8 src/pal/game/00502BB8.c other - - 0.00 func_00502D28 src/pal/game/00502D28.c other - - 0.00 +func_00502E90 src/pal/game/00502E90.c other - - 0.00 func_005037A8 src/pal/game/005037A8.c other - - 0.00 func_00503AE8 src/game/00503AE8.c match func_00503AE8 main:.text:00503AE8:112,frontbin:.text:00502778:112 100.00 func_00503B58 src/game/00503B58.c match func_00503B58 main:.text:00503B58:20,frontbin:.text:005027E8:20 100.00 @@ -2504,6 +2548,7 @@ func_005065D8 src/game/005065D8.c match func_005065D8 main:.text:005065D8:32,fro func_00506678 src/pal/game/00506678.c other - - 0.00 func_00506860 src/game/00506860.c match func_00506860 main:.text:00506860:208,frontbin:.text:005054F0:208 100.00 func_00506878 src/pal/game/00506878.c other - - 0.00 +func_00506978 src/pal/game/00506978.c other - - 0.00 func_00506A70 src/pal/game/00506A70.c other - - 0.00 func_00506A78 src/game/00506A78.c match func_00506A78 main:.text:00506A78:248,frontbin:.text:00505708:248 100.00 func_00506B70 src/game/00506B70.c match func_00506B70 main:.text:00506B70:28,frontbin:.text:00505800:28 100.00 @@ -2630,6 +2675,7 @@ func_0050B308 src/game/0050B308.c match func_0050B308 main:.text:0050B308:104,fr func_0050B370 src/game/0050B370.c match func_0050B370 main:.text:0050B370:100,frontbin:.text:0050A000:100 100.00 func_0050B3D8 src/game/0050B3D8.c match func_0050B3D8 main:.text:0050B3D8:104,frontbin:.text:0050A068:104 100.00 func_0050B440 src/game/0050B440.c match func_0050B440 main:.text:0050B440:96,frontbin:.text:0050A0D0:96 100.00 +func_0050B488 src/pal/game/0050B488.c other - - 0.00 func_0050B4A0 src/game/0050B4A0.c match func_0050B4A0 main:.text:0050B4A0:112,frontbin:.text:0050A130:112 100.00 func_0050B510 src/game/0050B510.c match func_0050B510 main:.text:0050B510:104,frontbin:.text:0050A1A0:104 100.00 func_0050B578 src/game/0050B578.c match func_0050B578 main:.text:0050B578:104,frontbin:.text:0050A208:104 100.00 @@ -2651,6 +2697,7 @@ func_0050BD98 src/game/0050BD98.c match func_0050BD98 main:.text:0050BD98:104,fr func_0050BEC8 src/pal/game/0050BEC8.c other - - 0.00 func_0050C058 src/game/0050C058.c match func_0050C058 main:.text:0050C058:52,frontbin:.text:0050ACE8:52 100.00 func_0050C090 src/game/0050C090.c match func_0050C090 main:.text:0050C090:108,frontbin:.text:0050AD20:108 100.00 +func_0050C250 src/pal/game/0050C250.c other - - 0.00 func_0050C368 src/game/0050C368.c match func_0050C368 main:.text:0050C368:8,frontbin:.text:0050AFF8:8 100.00 func_0050C4B0 src/game/0050C4B0.c match func_0050C4B0 main:.text:0050C4B0:48,frontbin:.text:0050B140:48 100.00 func_0050C568 src/game/0050C568.c match func_0050C568 main:.text:0050C568:8,frontbin:.text:0050B1F8:8 100.00 @@ -2664,6 +2711,7 @@ func_0050CAE8 src/pal/game/0050CAE8.c other - - 0.00 func_0050CDB0 src/game/0050CDB0.c match func_0050CDB0 main:.text:0050CDB0:112,frontbin:.text:0050BA40:112 100.00 func_0050CE48 src/game/0050CE48.c match func_0050CE48 main:.text:0050CE48:16,frontbin:.text:0050BAD8:16 100.00 func_0050CE58 src/game/0050CE58.c match func_0050CE58 main:.text:0050CE58:20,frontbin:.text:0050BAE8:20 100.00 +func_0050D040 src/pal/game/0050D040.c other - - 0.00 func_0050D280 src/game/0050D280.c match func_0050D280 main:.text:0050D280:8,frontbin:.text:0050BF10:8 100.00 func_0050D288 src/game/0050D288.c match func_0050D288 main:.text:0050D288:64,frontbin:.text:0050BF18:64 100.00 func_0050D2C8 src/game/0050D2C8.c match func_0050D2C8 main:.text:0050D2C8:28,frontbin:.text:0050BF58:28 100.00 @@ -2808,6 +2856,7 @@ func_0053DDA0 src/pal/game/0053DDA0.c other - - 0.00 func_0053DF20 src/pal/game/0053DF20.c other - - 0.00 func_0053E0A0 src/pal/game/0053E0A0.c other - - 0.00 func_0053E150 src/game/0053E150.c match func_0053E150 main:.text:0053E150:8,frontbin:.text:0053CDE0:8 100.00 +func_0053EA90 src/pal/game/0053EA90.c other - - 0.00 func_0053F4D8 src/pal/game/0053F4D8.c other - - 0.00 func_0053F588 src/game/0053F588.c match func_0053F588 main:.text:0053F588:8,frontbin:.text:0053E218:8 100.00 func_0053F590 src/game/0053F590.c match func_0053F590 main:.text:0053F590:60,frontbin:.text:0053E220:60 100.00 @@ -2885,6 +2934,7 @@ func_0054B120 src/pal/game/0054B120.c other - - 0.00 func_0054B208 src/pal/game/0054B208.c other - - 0.00 func_0054B280 src/game/0054B280.c match func_0054B280 main:.text:0054B280:52,frontbin:.text:00549F10:52 100.00 func_0054B5A8 src/game/0054B5A8.c match func_0054B5A8 main:.text:0054B5A8:28,frontbin:.text:0054A238:28 100.00 +func_0054B628 src/pal/game/0054B628.c other - - 0.00 func_0054B6F8 src/pal/game/0054B6F8.c other - - 0.00 func_0054B968 src/pal/game/0054B968.c other - - 0.00 func_0054C0A8 src/pal/game/0054C0A8.c other - - 0.00 diff --git a/progress/pal/report.json b/progress/pal/report.json index 30eac524e..b17ebc7eb 100644 --- a/progress/pal/report.json +++ b/progress/pal/report.json @@ -1,34 +1,34 @@ { "version": 2, "measures": { - "fuzzy_match_percent": 9.053469, + "fuzzy_match_percent": 9.257428, "total_code": "5812924", - "matched_code": "497616", - "matched_code_percent": 8.560511, + "matched_code": "509472", + "matched_code_percent": 8.76447, "total_functions": 18113, - "matched_functions": 6032, - "matched_functions_percent": 33.302048, - "complete_code": "274528", - "complete_code_percent": 4.722718, - "total_units": 3329, - "complete_units": 3270 + "matched_functions": 6082, + "matched_functions_percent": 33.578093, + "complete_code": "286384", + "complete_code_percent": 4.926677, + "total_units": 3379, + "complete_units": 3320 }, "categories": [ { "id": "core", "name": "Main program", "measures": { - "fuzzy_match_percent": 12.868671, + "fuzzy_match_percent": 13.406965, "total_code": "2202512", - "matched_code": "274528", - "matched_code_percent": 12.464313, + "matched_code": "286384", + "matched_code_percent": 13.002608, "total_functions": 8945, - "matched_functions": 3295, - "matched_functions_percent": 36.836221, - "complete_code": "274528", - "complete_code_percent": 12.464313, - "total_units": 3314, - "complete_units": 3270 + "matched_functions": 3345, + "matched_functions_percent": 37.395193, + "complete_code": "286384", + "complete_code_percent": 13.002608, + "total_units": 3364, + "complete_units": 3320 } }, { @@ -86,17 +86,17 @@ "id": "menu_text", "name": "Resident menus (.text)", "measures": { - "fuzzy_match_percent": 12.709067, + "fuzzy_match_percent": 13.542794, "total_code": "1422048", - "matched_code": "178156", - "matched_code_percent": 12.528128, + "matched_code": "190012", + "matched_code_percent": 13.361856, "total_functions": 4786, - "matched_functions": 2000, - "matched_functions_percent": 41.78855, + "matched_functions": 2050, + "matched_functions_percent": 42.833264, "complete_code": "0", "complete_code_percent": 0.0, - "total_units": 2022, - "complete_units": 2000 + "total_units": 2072, + "complete_units": 2050 } }, { @@ -99578,6 +99578,41 @@ ] } }, + { + "name": "pal/game/0040BAB8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "104", + "matched_code": "104", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "104", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0040BAB8", + "size": "104", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4242104" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0040BAB8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00414EC0", "measures": { @@ -99718,6 +99753,41 @@ ] } }, + { + "name": "pal/game/0042BA60", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "204", + "matched_code": "204", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "204", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0042BA60", + "size": "204", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4373088" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0042BA60.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00432630", "measures": { @@ -100313,6 +100383,41 @@ ] } }, + { + "name": "pal/game/0044B100", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "200", + "matched_code": "200", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "200", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0044B100", + "size": "200", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4501760" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0044B100.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0044B268", "measures": { @@ -100558,6 +100663,41 @@ ] } }, + { + "name": "pal/game/00452F08", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "172", + "matched_code": "172", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "172", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00452F08", + "size": "172", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4534024" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00452F08.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00454C18", "measures": { @@ -100593,6 +100733,41 @@ ] } }, + { + "name": "pal/game/00454C38", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "468", + "matched_code": "468", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "468", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00454C38", + "size": "468", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4541496" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00454C38.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00454E18", "measures": { @@ -100978,6 +101153,41 @@ ] } }, + { + "name": "pal/game/00459FD0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "284", + "matched_code": "284", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "284", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00459FD0", + "size": "284", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4562896" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00459FD0.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0045A100", "measures": { @@ -101608,6 +101818,41 @@ ] } }, + { + "name": "pal/game/004644A8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "76", + "matched_code": "76", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "76", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004644A8", + "size": "76", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4605096" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004644A8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00464878", "measures": { @@ -101888,6 +102133,41 @@ ] } }, + { + "name": "pal/game/00466940", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "220", + "matched_code": "220", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "220", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00466940", + "size": "220", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4614464" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00466940.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004694C8", "measures": { @@ -101993,6 +102273,41 @@ ] } }, + { + "name": "pal/game/0046BC78", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "240", + "matched_code": "240", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "240", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0046BC78", + "size": "240", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4635768" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0046BC78.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0046D780", "measures": { @@ -102098,6 +102413,41 @@ ] } }, + { + "name": "pal/game/0046F2C8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "224", + "matched_code": "224", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "224", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0046F2C8", + "size": "224", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4649672" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0046F2C8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0046F8C0", "measures": { @@ -103323,6 +103673,41 @@ ] } }, + { + "name": "pal/game/00489550", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "304", + "matched_code": "304", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "304", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00489550", + "size": "304", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4756816" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00489550.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004897F8", "measures": { @@ -103708,6 +104093,41 @@ ] } }, + { + "name": "pal/game/0048C5F0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "228", + "matched_code": "228", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "228", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0048C5F0", + "size": "228", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4769264" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0048C5F0.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0048F4C0", "measures": { @@ -103953,6 +104373,41 @@ ] } }, + { + "name": "pal/game/00493D48", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "268", + "matched_code": "268", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "268", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00493D48", + "size": "268", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4799816" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00493D48.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00496118", "measures": { @@ -104618,6 +105073,111 @@ ] } }, + { + "name": "pal/game/004A0398", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "244", + "matched_code": "244", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "244", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A0398", + "size": "244", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4850584" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A0398.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, + { + "name": "pal/game/004A0490", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "204", + "matched_code": "204", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "204", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A0490", + "size": "204", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4850832" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A0490.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, + { + "name": "pal/game/004A0560", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "252", + "matched_code": "252", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "252", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A0560", + "size": "252", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4851040" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A0560.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004A0818", "measures": { @@ -104723,6 +105283,41 @@ ] } }, + { + "name": "pal/game/004A1F78", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "204", + "matched_code": "204", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "204", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A1F78", + "size": "204", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4857720" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A1F78.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004A2A90", "measures": { @@ -105003,6 +105598,41 @@ ] } }, + { + "name": "pal/game/004A55F8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "348", + "matched_code": "348", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "348", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A55F8", + "size": "348", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4871672" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A55F8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004A6030", "measures": { @@ -105073,6 +105703,41 @@ ] } }, + { + "name": "pal/game/004A66E8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "412", + "matched_code": "412", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "412", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A66E8", + "size": "412", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4876008" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A66E8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004A8748", "measures": { @@ -105318,6 +105983,41 @@ ] } }, + { + "name": "pal/game/004A9BF0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "236", + "matched_code": "236", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "236", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004A9BF0", + "size": "236", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4889584" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004A9BF0.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004AA638", "measures": { @@ -105388,6 +106088,41 @@ ] } }, + { + "name": "pal/game/004AAD18", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "196", + "matched_code": "196", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "196", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004AAD18", + "size": "196", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4893976" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004AAD18.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004AB788", "measures": { @@ -105493,6 +106228,41 @@ ] } }, + { + "name": "pal/game/004AE058", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "220", + "matched_code": "220", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "220", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004AE058", + "size": "220", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4907096" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004AE058.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004AE260", "measures": { @@ -105528,6 +106298,41 @@ ] } }, + { + "name": "pal/game/004AE7A8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "228", + "matched_code": "228", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "228", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004AE7A8", + "size": "228", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4908968" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004AE7A8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004AE890", "measures": { @@ -105983,6 +106788,41 @@ ] } }, + { + "name": "pal/game/004B64A0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "260", + "matched_code": "260", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "260", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004B64A0", + "size": "260", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4940960" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004B64A0.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004B65E8", "measures": { @@ -106053,6 +106893,41 @@ ] } }, + { + "name": "pal/game/004B7778", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "200", + "matched_code": "200", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "200", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004B7778", + "size": "200", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4945784" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004B7778.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004B78A0", "measures": { @@ -106228,6 +107103,41 @@ ] } }, + { + "name": "pal/game/004BA498", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "256", + "matched_code": "256", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "256", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004BA498", + "size": "256", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4957336" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004BA498.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004BAF40", "measures": { @@ -106578,6 +107488,41 @@ ] } }, + { + "name": "pal/game/004C32B8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "196", + "matched_code": "196", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "196", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004C32B8", + "size": "196", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "4993720" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004C32B8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004C3380", "measures": { @@ -106788,6 +107733,41 @@ ] } }, + { + "name": "pal/game/004C4D20", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "288", + "matched_code": "288", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "288", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004C4D20", + "size": "288", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5000480" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004C4D20.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004C7600", "measures": { @@ -106858,6 +107838,41 @@ ] } }, + { + "name": "pal/game/004C7F90", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "212", + "matched_code": "212", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "212", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004C7F90", + "size": "212", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5013392" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004C7F90.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004C8108", "measures": { @@ -106998,6 +108013,41 @@ ] } }, + { + "name": "pal/game/004C9EB8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "216", + "matched_code": "216", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "216", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004C9EB8", + "size": "216", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5021368" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004C9EB8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004C9FC8", "measures": { @@ -107243,6 +108293,41 @@ ] } }, + { + "name": "pal/game/004CD188", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "308", + "matched_code": "308", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "308", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004CD188", + "size": "308", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5034376" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004CD188.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004CD818", "measures": { @@ -107698,6 +108783,41 @@ ] } }, + { + "name": "pal/game/004D07F0", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "240", + "matched_code": "240", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "240", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004D07F0", + "size": "240", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5048304" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004D07F0.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004D08E0", "measures": { @@ -107803,6 +108923,41 @@ ] } }, + { + "name": "pal/game/004D2928", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "232", + "matched_code": "232", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "232", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004D2928", + "size": "232", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5056808" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004D2928.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004D2C08", "measures": { @@ -107873,6 +109028,41 @@ ] } }, + { + "name": "pal/game/004D2E08", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "320", + "matched_code": "320", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "320", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004D2E08", + "size": "320", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5058056" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004D2E08.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004D3708", "measures": { @@ -108468,6 +109658,41 @@ ] } }, + { + "name": "pal/game/004DA960", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "212", + "matched_code": "212", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "212", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004DA960", + "size": "212", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5089632" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004DA960.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004DB880", "measures": { @@ -108608,6 +109833,111 @@ ] } }, + { + "name": "pal/game/004DCAC8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "200", + "matched_code": "200", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "200", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004DCAC8", + "size": "200", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5098184" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004DCAC8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, + { + "name": "pal/game/004DCBE8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "208", + "matched_code": "208", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "208", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004DCBE8", + "size": "208", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5098472" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004DCBE8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, + { + "name": "pal/game/004DFA40", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "188", + "matched_code": "188", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "188", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004DFA40", + "size": "188", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5110336" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004DFA40.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004DFED8", "measures": { @@ -108678,6 +110008,41 @@ ] } }, + { + "name": "pal/game/004E3C48", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "268", + "matched_code": "268", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "268", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004E3C48", + "size": "268", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5127240" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004E3C48.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004E3D58", "measures": { @@ -109308,6 +110673,41 @@ ] } }, + { + "name": "pal/game/004F16C8", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "276", + "matched_code": "276", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "276", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004F16C8", + "size": "276", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5183176" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004F16C8.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004F1C08", "measures": { @@ -109378,6 +110778,41 @@ ] } }, + { + "name": "pal/game/004F2D88", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "204", + "matched_code": "204", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "204", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004F2D88", + "size": "204", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5189000" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004F2D88.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004F3630", "measures": { @@ -109588,6 +111023,41 @@ ] } }, + { + "name": "pal/game/004FBB28", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "212", + "matched_code": "212", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "212", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004FBB28", + "size": "212", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5225256" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004FBB28.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004FC9B0", "measures": { @@ -109728,6 +111198,41 @@ ] } }, + { + "name": "pal/game/004FEB10", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "168", + "matched_code": "168", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "168", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_004FEB10", + "size": "168", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5237520" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/004FEB10.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/004FFD10", "measures": { @@ -110253,6 +111758,41 @@ ] } }, + { + "name": "pal/game/00502E90", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "312", + "matched_code": "312", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "312", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00502E90", + "size": "312", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5254800" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00502E90.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/005037A8", "measures": { @@ -111128,6 +112668,41 @@ ] } }, + { + "name": "pal/game/00506978", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "244", + "matched_code": "244", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "244", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_00506978", + "size": "244", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5269880" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/00506978.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/00506A70", "measures": { @@ -112528,6 +114103,41 @@ ] } }, + { + "name": "pal/game/0050B488", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "232", + "matched_code": "232", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "232", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0050B488", + "size": "232", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5289096" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0050B488.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0050B5F8", "measures": { @@ -112598,6 +114208,41 @@ ] } }, + { + "name": "pal/game/0050C250", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "232", + "matched_code": "232", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "232", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0050C250", + "size": "232", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5292624" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0050C250.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0050C758", "measures": { @@ -112703,6 +114348,41 @@ ] } }, + { + "name": "pal/game/0050D040", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "172", + "matched_code": "172", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "172", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0050D040", + "size": "172", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5296192" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0050D040.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0050DEB8", "measures": { @@ -113823,6 +115503,41 @@ ] } }, + { + "name": "pal/game/0053EA90", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "260", + "matched_code": "260", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "260", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0053EA90", + "size": "260", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5499536" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0053EA90.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0053F4D8", "measures": { @@ -114173,6 +115888,41 @@ ] } }, + { + "name": "pal/game/0054B628", + "measures": { + "fuzzy_match_percent": 100.0, + "total_code": "204", + "matched_code": "204", + "matched_code_percent": 100.0, + "total_functions": 1, + "matched_functions": 1, + "matched_functions_percent": 100.0, + "complete_code": "204", + "complete_code_percent": 100.0, + "total_units": 1, + "complete_units": 1 + }, + "functions": [ + { + "name": "func_0054B628", + "size": "204", + "fuzzy_match_percent": 100.0, + "address": "0", + "metadata": { + "virtual_address": "5551656" + } + } + ], + "metadata": { + "complete": true, + "source_path": "src/pal/game/0054B628.c", + "progress_categories": [ + "core", + "menu_text" + ] + } + }, { "name": "pal/game/0054B6F8", "measures": { @@ -116437,10 +118187,10 @@ "name": "main/.text/0040xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "61088", + "total_code": "60984", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 126, + "total_functions": 125, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -117286,15 +119036,6 @@ "virtual_address": "4241984" } }, - { - "name": "func_0040BAB8", - "size": "104", - "fuzzy_match_percent": 0.0, - "address": "43620", - "metadata": { - "virtual_address": "4242104" - } - }, { "name": "func_0040BB20", "size": "4636", @@ -118496,10 +120237,10 @@ "name": "main/.text/0042xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "64896", + "total_code": "64692", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 110, + "total_functions": 109, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -119354,15 +121095,6 @@ "virtual_address": "4372560" } }, - { - "name": "func_0042BA60", - "size": "204", - "fuzzy_match_percent": 0.0, - "address": "47712", - "metadata": { - "virtual_address": "4373088" - } - }, { "name": "func_0042BB30", "size": "4", @@ -120744,10 +122476,10 @@ "name": "main/.text/0044xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "61680", + "total_code": "61480", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 106, + "total_functions": 105, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -121296,15 +123028,6 @@ "virtual_address": "4501752" } }, - { - "name": "func_0044B100", - "size": "200", - "fuzzy_match_percent": 0.0, - "address": "44960", - "metadata": { - "virtual_address": "4501760" - } - }, { "name": "func_0044B1C8", "size": "156", @@ -121724,10 +123447,10 @@ "name": "main/.text/0045xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "59580", + "total_code": "58656", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 146, + "total_functions": 143, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -121862,15 +123585,6 @@ "virtual_address": "4533696" } }, - { - "name": "func_00452F08", - "size": "172", - "fuzzy_match_percent": 0.0, - "address": "11800", - "metadata": { - "virtual_address": "4534024" - } - }, { "name": "func_00452FB8", "size": "456", @@ -122321,15 +124035,6 @@ "virtual_address": "4541288" } }, - { - "name": "func_00454C38", - "size": "468", - "fuzzy_match_percent": 0.0, - "address": "19272", - "metadata": { - "virtual_address": "4541496" - } - }, { "name": "func_00454F98", "size": "736", @@ -122555,15 +124260,6 @@ "virtual_address": "4562792" } }, - { - "name": "func_00459FD0", - "size": "284", - "fuzzy_match_percent": 0.0, - "address": "40672", - "metadata": { - "virtual_address": "4562896" - } - }, { "name": "func_0045A0F0", "size": "4", @@ -123064,10 +124760,10 @@ "name": "main/.text/0046xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "55540", + "total_code": "54780", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 185, + "total_functions": 181, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -123463,15 +125159,6 @@ "virtual_address": "4604856" } }, - { - "name": "func_004644A8", - "size": "76", - "fuzzy_match_percent": 0.0, - "address": "17016", - "metadata": { - "virtual_address": "4605096" - } - }, { "name": "func_004644F8", "size": "184", @@ -123715,15 +125402,6 @@ "virtual_address": "4614440" } }, - { - "name": "func_00466940", - "size": "220", - "fuzzy_match_percent": 0.0, - "address": "26384", - "metadata": { - "virtual_address": "4614464" - } - }, { "name": "func_00466A20", "size": "312", @@ -124138,15 +125816,6 @@ "virtual_address": "4635632" } }, - { - "name": "func_0046BC78", - "size": "240", - "fuzzy_match_percent": 0.0, - "address": "47688", - "metadata": { - "virtual_address": "4635768" - } - }, { "name": "func_0046BD68", "size": "20", @@ -124651,15 +126320,6 @@ "virtual_address": "4649352" } }, - { - "name": "func_0046F2C8", - "size": "224", - "fuzzy_match_percent": 0.0, - "address": "61592", - "metadata": { - "virtual_address": "4649672" - } - }, { "name": "func_0046F3A8", "size": "260", @@ -126337,11 +127997,11 @@ { "name": "main/.text/0048xxxx", "measures": { - "fuzzy_match_percent": 0.264818, - "total_code": "60796", + "fuzzy_match_percent": 0.267156, + "total_code": "60264", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 111, + "total_functions": 109, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -126656,15 +128316,6 @@ "virtual_address": "4756376" } }, - { - "name": "func_00489550", - "size": "304", - "fuzzy_match_percent": 0.0, - "address": "38048", - "metadata": { - "virtual_address": "4756816" - } - }, { "name": "func_00489680", "size": "208", @@ -127025,15 +128676,6 @@ "virtual_address": "4769032" } }, - { - "name": "func_0048C5F0", - "size": "228", - "fuzzy_match_percent": 0.0, - "address": "50496", - "metadata": { - "virtual_address": "4769264" - } - }, { "name": "func_0048C6D8", "size": "232", @@ -127362,11 +129004,11 @@ { "name": "main/.text/0049xxxx", "measures": { - "fuzzy_match_percent": 0.388254, - "total_code": "50740", + "fuzzy_match_percent": 0.390315, + "total_code": "50472", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 181, + "total_functions": 180, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -127735,15 +129377,6 @@ "virtual_address": "4799440" } }, - { - "name": "func_00493D48", - "size": "268", - "fuzzy_match_percent": 0.0, - "address": "14992", - "metadata": { - "virtual_address": "4799816" - } - }, { "name": "func_00493E58", "size": "36", @@ -129018,10 +130651,10 @@ "name": "main/.text/004Axxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "51748", + "total_code": "49204", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 124, + "total_functions": 114, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -129048,33 +130681,6 @@ "virtual_address": "4850224" } }, - { - "name": "func_004A0398", - "size": "244", - "fuzzy_match_percent": 0.0, - "address": "880", - "metadata": { - "virtual_address": "4850584" - } - }, - { - "name": "func_004A0490", - "size": "204", - "fuzzy_match_percent": 0.0, - "address": "1128", - "metadata": { - "virtual_address": "4850832" - } - }, - { - "name": "func_004A0560", - "size": "252", - "fuzzy_match_percent": 0.0, - "address": "1336", - "metadata": { - "virtual_address": "4851040" - } - }, { "name": "func_004A0660", "size": "200", @@ -129174,15 +130780,6 @@ "virtual_address": "4857000" } }, - { - "name": "func_004A1F78", - "size": "204", - "fuzzy_match_percent": 0.0, - "address": "8016", - "metadata": { - "virtual_address": "4857720" - } - }, { "name": "func_004A20D8", "size": "160", @@ -129417,15 +131014,6 @@ "virtual_address": "4871448" } }, - { - "name": "func_004A55F8", - "size": "348", - "fuzzy_match_percent": 0.0, - "address": "21968", - "metadata": { - "virtual_address": "4871672" - } - }, { "name": "func_004A5758", "size": "480", @@ -129507,15 +131095,6 @@ "virtual_address": "4875408" } }, - { - "name": "func_004A66E8", - "size": "412", - "fuzzy_match_percent": 0.0, - "address": "26304", - "metadata": { - "virtual_address": "4876008" - } - }, { "name": "func_004A6888", "size": "1008", @@ -129696,15 +131275,6 @@ "virtual_address": "4889408" } }, - { - "name": "func_004A9BF0", - "size": "236", - "fuzzy_match_percent": 0.0, - "address": "39880", - "metadata": { - "virtual_address": "4889584" - } - }, { "name": "func_004A9CE0", "size": "308", @@ -129795,15 +131365,6 @@ "virtual_address": "4893536" } }, - { - "name": "func_004AAD18", - "size": "196", - "fuzzy_match_percent": 0.0, - "address": "44272", - "metadata": { - "virtual_address": "4893976" - } - }, { "name": "func_004AAE28", "size": "2396", @@ -129975,15 +131536,6 @@ "virtual_address": "4905192" } }, - { - "name": "func_004AE058", - "size": "220", - "fuzzy_match_percent": 0.0, - "address": "57392", - "metadata": { - "virtual_address": "4907096" - } - }, { "name": "func_004AE2D8", "size": "572", @@ -130002,15 +131554,6 @@ "virtual_address": "4908312" } }, - { - "name": "func_004AE7A8", - "size": "228", - "fuzzy_match_percent": 0.0, - "address": "59264", - "metadata": { - "virtual_address": "4908968" - } - }, { "name": "func_004AE918", "size": "392", @@ -130159,11 +131702,11 @@ { "name": "main/.text/004Bxxxx", "measures": { - "fuzzy_match_percent": 1.673095, - "total_code": "47696", + "fuzzy_match_percent": 1.698593, + "total_code": "46980", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 130, + "total_functions": 127, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -130577,15 +132120,6 @@ "virtual_address": "4940744" } }, - { - "name": "func_004B64A0", - "size": "260", - "fuzzy_match_percent": 0.0, - "address": "25488", - "metadata": { - "virtual_address": "4940960" - } - }, { "name": "func_004B66B0", "size": "432", @@ -130694,15 +132228,6 @@ "virtual_address": "4945096" } }, - { - "name": "func_004B7778", - "size": "200", - "fuzzy_match_percent": 0.0, - "address": "30312", - "metadata": { - "virtual_address": "4945784" - } - }, { "name": "func_004B7A90", "size": "4", @@ -130928,15 +132453,6 @@ "virtual_address": "4956976" } }, - { - "name": "func_004BA498", - "size": "256", - "fuzzy_match_percent": 0.0, - "address": "41864", - "metadata": { - "virtual_address": "4957336" - } - }, { "name": "func_004BA598", "size": "764", @@ -131355,11 +132871,11 @@ { "name": "main/.text/004Cxxxx", "measures": { - "fuzzy_match_percent": 0.348447, - "total_code": "50224", + "fuzzy_match_percent": 0.357122, + "total_code": "49004", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 124, + "total_functions": 119, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -131584,15 +133100,6 @@ "virtual_address": "4993040" } }, - { - "name": "func_004C32B8", - "size": "196", - "fuzzy_match_percent": 0.0, - "address": "12928", - "metadata": { - "virtual_address": "4993720" - } - }, { "name": "func_004C3438", "size": "320", @@ -131710,15 +133217,6 @@ "virtual_address": "4999944" } }, - { - "name": "func_004C4D20", - "size": "288", - "fuzzy_match_percent": 0.0, - "address": "19688", - "metadata": { - "virtual_address": "5000480" - } - }, { "name": "func_004C5028", "size": "4", @@ -131908,15 +133406,6 @@ "virtual_address": "5013328" } }, - { - "name": "func_004C7F90", - "size": "212", - "fuzzy_match_percent": 0.0, - "address": "32600", - "metadata": { - "virtual_address": "5013392" - } - }, { "name": "func_004C8068", "size": "156", @@ -132052,15 +133541,6 @@ "virtual_address": "5021144" } }, - { - "name": "func_004C9EB8", - "size": "216", - "fuzzy_match_percent": 0.0, - "address": "40576", - "metadata": { - "virtual_address": "5021368" - } - }, { "name": "func_004CA0E8", "size": "124", @@ -132259,15 +133739,6 @@ "virtual_address": "5033552" } }, - { - "name": "func_004CD188", - "size": "308", - "fuzzy_match_percent": 0.0, - "address": "53584", - "metadata": { - "virtual_address": "5034376" - } - }, { "name": "func_004CD2F0", "size": "812", @@ -132497,11 +133968,11 @@ { "name": "main/.text/004Dxxxx", "measures": { - "fuzzy_match_percent": 1.022236, - "total_code": "43044", + "fuzzy_match_percent": 1.061701, + "total_code": "41444", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 135, + "total_functions": 128, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -132528,15 +133999,6 @@ "virtual_address": "5046976" } }, - { - "name": "func_004D07F0", - "size": "240", - "fuzzy_match_percent": 0.0, - "address": "1872", - "metadata": { - "virtual_address": "5048304" - } - }, { "name": "func_004D0978", "size": "336", @@ -132681,15 +134143,6 @@ "virtual_address": "5056024" } }, - { - "name": "func_004D2928", - "size": "232", - "fuzzy_match_percent": 0.0, - "address": "10376", - "metadata": { - "virtual_address": "5056808" - } - }, { "name": "func_004D2B10", "size": "248", @@ -132708,15 +134161,6 @@ "virtual_address": "5057864" } }, - { - "name": "func_004D2E08", - "size": "320", - "fuzzy_match_percent": 0.0, - "address": "11624", - "metadata": { - "virtual_address": "5058056" - } - }, { "name": "func_004D2FB0", "size": "4", @@ -133176,15 +134620,6 @@ "virtual_address": "5088472" } }, - { - "name": "func_004DA960", - "size": "212", - "fuzzy_match_percent": 0.0, - "address": "43200", - "metadata": { - "virtual_address": "5089632" - } - }, { "name": "func_004DAB08", "size": "232", @@ -133338,24 +134773,6 @@ "virtual_address": "5097864" } }, - { - "name": "func_004DCAC8", - "size": "200", - "fuzzy_match_percent": 0.0, - "address": "51752", - "metadata": { - "virtual_address": "5098184" - } - }, - { - "name": "func_004DCBE8", - "size": "208", - "fuzzy_match_percent": 0.0, - "address": "52040", - "metadata": { - "virtual_address": "5098472" - } - }, { "name": "func_004DCCB8", "size": "188", @@ -133680,15 +135097,6 @@ "virtual_address": "5109728" } }, - { - "name": "func_004DFA40", - "size": "188", - "fuzzy_match_percent": 0.0, - "address": "63904", - "metadata": { - "virtual_address": "5110336" - } - }, { "name": "func_004DFB00", "size": "568", @@ -133738,11 +135146,11 @@ { "name": "main/.text/004Exxxx", "measures": { - "fuzzy_match_percent": 0.099694, - "total_code": "58180", + "fuzzy_match_percent": 0.100155, + "total_code": "57912", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 137, + "total_functions": 136, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -134075,15 +135483,6 @@ "virtual_address": "5127088" } }, - { - "name": "func_004E3C48", - "size": "268", - "fuzzy_match_percent": 0.0, - "address": "15344", - "metadata": { - "virtual_address": "5127240" - } - }, { "name": "func_004E3DF8", "size": "332", @@ -134997,11 +136396,11 @@ { "name": "main/.text/004Fxxxx", "measures": { - "fuzzy_match_percent": 0.410897, - "total_code": "54272", + "fuzzy_match_percent": 0.417513, + "total_code": "53412", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 162, + "total_functions": 158, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -135109,15 +136508,6 @@ "virtual_address": "5183080" } }, - { - "name": "func_004F16C8", - "size": "276", - "fuzzy_match_percent": 0.0, - "address": "5608", - "metadata": { - "virtual_address": "5183176" - } - }, { "name": "func_004F1B18", "size": "236", @@ -135181,15 +136571,6 @@ "virtual_address": "5188992" } }, - { - "name": "func_004F2D88", - "size": "204", - "fuzzy_match_percent": 0.0, - "address": "11432", - "metadata": { - "virtual_address": "5189000" - } - }, { "name": "func_004F2EA0", "size": "100", @@ -135955,15 +137336,6 @@ "virtual_address": "5224784" } }, - { - "name": "func_004FBB28", - "size": "212", - "fuzzy_match_percent": 0.0, - "address": "47688", - "metadata": { - "virtual_address": "5225256" - } - }, { "name": "func_004FBC00", "size": "180", @@ -136180,15 +137552,6 @@ "virtual_address": "5235416" } }, - { - "name": "func_004FEB10", - "size": "168", - "fuzzy_match_percent": 0.0, - "address": "59952", - "metadata": { - "virtual_address": "5237520" - } - }, { "name": "func_004FEBB8", "size": "300", @@ -136481,11 +137844,11 @@ { "name": "main/.text/0050xxxx", "measures": { - "fuzzy_match_percent": 0.299755, - "total_code": "31360", + "fuzzy_match_percent": 0.311599, + "total_code": "30168", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 131, + "total_functions": 126, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -136809,15 +138172,6 @@ "virtual_address": "5254200" } }, - { - "name": "func_00502E90", - "size": "312", - "fuzzy_match_percent": 0.0, - "address": "11664", - "metadata": { - "virtual_address": "5254800" - } - }, { "name": "func_00502FC8", "size": "12", @@ -137142,15 +138496,6 @@ "virtual_address": "5269872" } }, - { - "name": "func_00506978", - "size": "244", - "fuzzy_match_percent": 0.0, - "address": "26744", - "metadata": { - "virtual_address": "5269880" - } - }, { "name": "func_00506B58", "size": "20", @@ -137358,15 +138703,6 @@ "virtual_address": "5287256" } }, - { - "name": "func_0050B488", - "size": "232", - "fuzzy_match_percent": 0.0, - "address": "45960", - "metadata": { - "virtual_address": "5289096" - } - }, { "name": "func_0050BB78", "size": "232", @@ -137376,15 +138712,6 @@ "virtual_address": "5290872" } }, - { - "name": "func_0050C250", - "size": "232", - "fuzzy_match_percent": 0.0, - "address": "49488", - "metadata": { - "virtual_address": "5292624" - } - }, { "name": "func_0050CE98", "size": "140", @@ -137403,15 +138730,6 @@ "virtual_address": "5295912" } }, - { - "name": "func_0050D040", - "size": "172", - "fuzzy_match_percent": 0.0, - "address": "53056", - "metadata": { - "virtual_address": "5296192" - } - }, { "name": "func_0050D198", "size": "428", @@ -139647,10 +140965,10 @@ "name": "main/.text/0053xxxx", "measures": { "fuzzy_match_percent": 0.0, - "total_code": "63512", + "total_code": "63252", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 28, + "total_functions": 27, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -139848,15 +141166,6 @@ "virtual_address": "5498880" } }, - { - "name": "func_0053EA90", - "size": "260", - "fuzzy_match_percent": 0.0, - "address": "58416", - "metadata": { - "virtual_address": "5499536" - } - }, { "name": "func_0053EB98", "size": "4", @@ -139924,11 +141233,11 @@ { "name": "main/.text/0054xxxx", "measures": { - "fuzzy_match_percent": 0.383838, - "total_code": "52628", + "fuzzy_match_percent": 0.385331, + "total_code": "52424", "matched_code": "0", "matched_code_percent": 0.0, - "total_functions": 124, + "total_functions": 123, "matched_functions": 0, "matched_functions_percent": 0.0, "complete_code": "0", @@ -140738,15 +142047,6 @@ "virtual_address": "5551512" } }, - { - "name": "func_0054B628", - "size": "204", - "fuzzy_match_percent": 0.0, - "address": "45712", - "metadata": { - "virtual_address": "5551656" - } - }, { "name": "func_0054B7C8", "size": "4", diff --git a/src/pal/game/0040BAB8.c b/src/pal/game/0040BAB8.c new file mode 100644 index 000000000..2ae0442ac --- /dev/null +++ b/src/pal/game/0040BAB8.c @@ -0,0 +1,34 @@ +#include "common.h" +typedef struct { + u8 *data; + u32 remaining; +} Cursor; +typedef struct { + u8 prefix[12]; + Cursor cursor; +} Input; +s32 func_0040BAB8(const Input *input, Cursor *output) +{ + u32 remaining; + u8 *nextData; + *output = input->cursor; + remaining = output->remaining; + if (!remaining || (output->data[0] & 0x80)) + return 0x801; + goto test; +next: + { + u32 nextRemaining = remaining - 1; + output->data = nextData; + output->remaining = nextRemaining; + remaining = nextRemaining; + } +test: + if (remaining) { + u8 *data = output->data; + nextData = data + 1; + if (!*data) + goto next; + } + return 0; +} diff --git a/src/pal/game/0042BA60.c b/src/pal/game/0042BA60.c new file mode 100644 index 000000000..a155469d6 --- /dev/null +++ b/src/pal/game/0042BA60.c @@ -0,0 +1,33 @@ +#include "common.h" + +/* Reference: OpenRAC/rac3-decomp@cd0e7c20fd8a93116566ba2e024fa2f3536bd30c + * rac3-decomp/src/levels/shared/L01_00314158.c func_L01_00315800. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef struct { + u8 *object; + u32 color; + s32 reserved; + f32 fraction; + u8 tail[16]; +} Entry; +extern Entry D_00227A20[]; +extern u8 **func_00476E90(void *); +extern u32 func_00454480(u32, u32, f32); +extern void func_00470990(void *, u32, u32, u32); +void func_0042BA60(s32 index, u32 color) +{ + s32 alpha; + u8 **child; + s32 mixed, red, green, blue; + alpha = (s32)(D_00227A20[index].fraction * 96.0f); + D_00227A20[index].object[35] = alpha; + child = func_00476E90(D_00227A20[index].object); + if (child != 0 && *child != 0) + (*child)[35] = alpha; + mixed = func_00454480(color, D_00227A20[index].color, D_00227A20[index].fraction); + blue = (mixed >> 16) & 0xFF; + green = (mixed >> 8) & 0xFF; + red = mixed & 0xFF; + func_00470990(D_00227A20[index].object, red, green, blue); +} diff --git a/src/pal/game/0044B100.c b/src/pal/game/0044B100.c new file mode 100644 index 000000000..3b197ef5c --- /dev/null +++ b/src/pal/game/0044B100.c @@ -0,0 +1,32 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/37E0F0.c func_00387B10. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef int Quad __attribute__((mode(TI))); +extern u8 *D_00221F20; +extern Quad D_00220000; +void func_0044B100(const u64 *coordinates, const s32 *values) +{ + u8 *first, *next, *cursor; + *(u32 *)(D_00221F20 + 0) = 0x10000005; + *(u32 *)(D_00221F20 + 4) = 0; + *(u32 *)(D_00221F20 + 8) = 0; + *(u32 *)(D_00221F20 + 12) = 0x50000005; + cursor = (u8 *)D_00221F20; + D_00221F20 = cursor + 16; + *(Quad *)(cursor + 16) = D_00220000; + first = (u8 *)D_00221F20; + next = first + 16; + D_00221F20 = next; + *(u64 *)(first + 16) = 0x4C; + *(u64 *)(next + 8) = (s64)values[0]; + *(u64 *)(next + 16) = coordinates[0]; + *(u64 *)(next + 24) = coordinates[2]; + *(u64 *)(next + 32) = (s64)values[1]; + *(u64 *)(next + 40) = coordinates[1]; + *(u64 *)(next + 48) = coordinates[3]; + *(u64 *)(next + 56) = 0; + D_00221F20 += 64; +} diff --git a/src/pal/game/00452F08.c b/src/pal/game/00452F08.c new file mode 100644 index 000000000..48b22d62b --- /dev/null +++ b/src/pal/game/00452F08.c @@ -0,0 +1,32 @@ +#include "common.h" + +typedef struct { + u8 unknown0[0xA4]; + s32 count; +} Collection; + +typedef struct { + u8 unknown0[0x10]; + u8 *entries[0]; +} Entries; + +void func_00452F08(void *unused, Collection *collection, const void *clearFirst, s32 value) +{ + s32 i; + s32 j; + u8 *entry; + + for (i = 0; i < collection->count; i++) { + entry = ((Entries *)collection)->entries[i]; + if (clearFirst != 0) { + for (j = 0; j < entry[0xA]; j++) { + entry[9 + j * 0x40] = 0; + } + } else { + entry[9] = value; + for (j = 1; j < entry[0xA]; j++) { + entry[9 + j * 0x40] = 0; + } + } + } +} diff --git a/src/pal/game/00454C38.c b/src/pal/game/00454C38.c new file mode 100644 index 000000000..d8a495774 --- /dev/null +++ b/src/pal/game/00454C38.c @@ -0,0 +1,42 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/3896E8.c func_003899B8. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef struct { + u32 first; + u32 metrics; +} Glyph; +extern Glyph *D_0021DF14; +extern s32 func_00454C18(void); +s32 func_00454C38(f32 *width, f32 *height, s32 mode) +{ + s32 result; + *width = 0.0f; + *height = 0.0f; + result = 0; + if (D_0021DF14 != 0) { + if (mode != 0) { + *width = (f32)((D_0021DF14[0x41].metrics >> 17) & 0x3F); + *height = (f32)((D_0021DF14[0x41].metrics >> 9) & 0xFF) * 0.25f; + result = 1; + } else { + s32 count = func_00454C18(); + if (count > 0) { + s32 i; + u32 maximum = 0; + for (i = 0; i < count; i++) { + u32 current = (D_0021DF14[i].metrics >> 17) & 0x3F; + if (maximum < current) { + maximum = current; + *height = (f32)((D_0021DF14[i].metrics >> 9) & 0xFF) * 0.25f; + } + } + *width = (f32)maximum; + result = 1; + } + } + } + return result; +} diff --git a/src/pal/game/00459FD0.c b/src/pal/game/00459FD0.c new file mode 100644 index 000000000..4747944a5 --- /dev/null +++ b/src/pal/game/00459FD0.c @@ -0,0 +1,29 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/3896E8.c func_0038DF10. + * Independently reconstructed from RAC4 PAL retail. */ + +extern u32 *D_00221F20; +extern u8 D_003D9FF0[], D_003DA010[], D_0020BF90[], D_003D9F80[]; +void func_00459FD0(s32 alternate) +{ + D_00221F20[0] = 0x30000002; + if (alternate) + D_00221F20[1] = (u32)D_003D9FF0; + else + D_00221F20[1] = (u32)D_003DA010; + D_00221F20[2] = 0; + D_00221F20[3] = 0x50000002; + D_00221F20 += 4; + D_00221F20[0] = 0x30000029; + D_00221F20[1] = (u32)D_0020BF90; + D_00221F20[2] = 0; + D_00221F20[3] = 0x50000029; + D_00221F20 += 4; + D_00221F20[0] = 0x30000003; + D_00221F20[1] = (u32)D_003D9F80; + D_00221F20[2] = 0; + D_00221F20[3] = 0x50000003; + D_00221F20 += 4; +} diff --git a/src/pal/game/004644A8.c b/src/pal/game/004644A8.c new file mode 100644 index 000000000..a3aa81b3a --- /dev/null +++ b/src/pal/game/004644A8.c @@ -0,0 +1,19 @@ +#include "common.h" + +/* Reference: OpenRAC/rac3-decomp@cd0e7c20fd8a93116566ba2e024fa2f3536bd30c + * rac3-decomp/src/levels/shared/L01_0042B4F8.c func_L01_0042C370. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef struct { + u8 prefix[0x8C]; + s16 count; +} State; +extern State D_00237100; +extern void func_00464E28(void); +void func_004644A8(void) +{ + while (D_00237100.count > 0) { + func_00464E28(); + D_00237100.count--; + } +} diff --git a/src/pal/game/00466940.c b/src/pal/game/00466940.c new file mode 100644 index 000000000..41ea58adb --- /dev/null +++ b/src/pal/game/00466940.c @@ -0,0 +1,31 @@ +#include "common.h" + +typedef struct { + s32 type, size, offset, state; +} Descriptor; +extern Descriptor D_003D8130[], D_003D8310[]; +extern s32 func_004693D0(const Descriptor *); +extern s32 func_004696E8(const u8 *, const u8 *, s32, Descriptor *); +extern void func_00469D68(void); +void func_00466940(const u8 *packet) +{ + s32 first = func_004693D0(D_003D8130); + s32 second = func_004693D0(D_003D8310); + s32 index; + const u8 *next; + s32 storedFirst = *(const s32 *)packet; + if (storedFirst == first && *(const s32 *)(packet + 4) == second) { + packet += 8; + next = packet + storedFirst; + func_004696E8(packet, next, 0, D_003D8130); + packet = next; + index = 0; + do { + const u8 *end = packet + second; + func_004696E8(packet, end, index, D_003D8310); + index++; + packet = end; + } while (index < 15); + func_00469D68(); + } +} diff --git a/src/pal/game/0046BC78.c b/src/pal/game/0046BC78.c new file mode 100644 index 000000000..a004804e9 --- /dev/null +++ b/src/pal/game/0046BC78.c @@ -0,0 +1,28 @@ +#include "common.h" + +typedef struct { + u8 prefix[0x20]; + s32 value; +} Config; +extern s32 func_0054C070(s32, s32); +extern Config *func_0054BF00(s32); +extern s32 func_0045D348(void); +extern s32 D_0021DE98; +extern f32 D_003DB0A0[]; +extern u8 D_001F8878[]; +s32 func_0046BC78(s32 world, s32 slot) +{ + s32 value = func_0054BF00(func_0054C070(world, slot))->value; + if (func_0045D348()) { + value = (s32)((f32)value * D_003DB0A0[(D_0021DE98 - 1) % 20]); + value /= 1000; + value *= 1000; + } else { + s32 level = D_001F8878[slot * 12 + ((world - 1) % 20) * 0x304 + 9]; + if (level >= 3) + value = 0; + else if (level) + value >>= level; + } + return value; +} diff --git a/src/pal/game/0046F2C8.c b/src/pal/game/0046F2C8.c new file mode 100644 index 000000000..9f269ab15 --- /dev/null +++ b/src/pal/game/0046F2C8.c @@ -0,0 +1,33 @@ +#include "common.h" +typedef struct { + char pad[0x10]; + u8 frames; + char gap[11]; + u8 *data; +} Object; +extern void func_0046A080(const void *, s32, u32), func_0046A0C0(void), func_0046E560(f32); +void func_0046F2C8(Object *p, f32 frame) +{ + s32 i = (s32)frame, j = i + 1; + f32 frac = frame - i; + u8 *d = p->data; + s32 size = d[2], head = d[1]; + u8 *first, *second; + if (j == p->frames) + j = 0; + i *= size; + j *= size; + first = d + (head + i) * 16; + second = d + (j + head) * 16; + if (head) { + func_0046A080(d, head, 0x2000); + func_0046A0C0(); + } + if (size) { + func_0046A080(first, size, 0x3000); + func_0046A0C0(); + func_0046A080(second, size, 0x3800); + func_0046A0C0(); + } + func_0046E560(frac); +} diff --git a/src/pal/game/00489550.c b/src/pal/game/00489550.c new file mode 100644 index 000000000..723d9019b --- /dev/null +++ b/src/pal/game/00489550.c @@ -0,0 +1,40 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/39BC00.c func_0039C028. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef struct { + u8 prefix[0x74]; + s32 count; +} State; +extern State D_00237100; +extern u32 *D_00221F20; +extern u32 D_0021DAFC; +extern u8 D_0020C220[]; +extern s32 D_0023A900[]; +extern void func_00449D20(void), func_00449E80(void); +void func_00489550(u32 *buffer) +{ + D_00221F20 = buffer; + buffer[0] = 0x30000009; + D_00221F20[1] = (D_0021DAFC + 0xC0) & 0x0FFFFFFF; + D_00221F20[2] = 0; + D_00221F20[3] = 0x50000009; + D_00221F20[4] = 0x30000025; + D_00221F20[5] = (u32)D_0020C220; + D_00221F20[6] = 0; + D_00221F20[7] = 0x50000025; + D_00221F20 += 8; + D_00237100.count++; + if (D_0023A900[0] != 0) { + func_00449D20(); + buffer = D_00221F20; + } else { + func_00449E80(); + buffer = D_00221F20; + } + buffer[0] = 0x70000000; + D_00221F20[1] = 0; + D_00221F20 += 4; +} diff --git a/src/pal/game/0048C5F0.c b/src/pal/game/0048C5F0.c new file mode 100644 index 000000000..646ac9acb --- /dev/null +++ b/src/pal/game/0048C5F0.c @@ -0,0 +1,18 @@ +#include "common.h" +extern u8 *D_002215D8; +extern void func_00453F30(void *, const void *, u32); +extern u8 *func_0048C2D0(u32, u8 **, const u8 *); +s32 func_0048C5F0(const u8 *source, u8 **cursor, const u8 *limit) +{ + s32 i; + func_00453F30(D_002215D8 + 0x3024, source, 4); + source += 4; + *(u8 **)(D_002215D8 + 0x3028) = func_0048C2D0((u32) * (s32 *)(D_002215D8 + 0x3024) << 3, cursor, limit); + if (!*(u8 **)(D_002215D8 + 0x3028)) + return 1; + for (i = 0; i < *(s32 *)(D_002215D8 + 0x3024); i++) { + func_00453F30(*(u8 **)(D_002215D8 + 0x3028) + (i << 3), source, 8); + source += 8; + } + return 0; +} diff --git a/src/pal/game/00493D48.c b/src/pal/game/00493D48.c new file mode 100644 index 000000000..a56a8f537 --- /dev/null +++ b/src/pal/game/00493D48.c @@ -0,0 +1,39 @@ +#include "common.h" + +/* Reference: OpenRAC/rac3-decomp@cd0e7c20fd8a93116566ba2e024fa2f3536bd30c + * rac3-decomp/src/levels/shared/L01_0046A938.c func_L01_0046ABC0. + * Independently reconstructed from RAC4 PAL retail. */ + +typedef int Quad __attribute__((mode(TI))); +typedef struct { + Quad direction; + f32 rotation; + f32 gravity; + s32 lifetime; +} Motion; +extern u8 *func_00491450(s32); +extern s32 func_00472E40(s32); +extern f32 func_00472EB8(f32, f32); +extern u8 *D_00270AD0[]; +u8 *func_00493D48(const Quad *position, const Quad *direction, s32 lifetime, f32 scale, f32 gravity) +{ + u8 *particle = func_00491450(46); + Motion *motion; + if (particle != 0) { + *(Quad *)(particle + 0x10) = *position; + motion = (Motion *)(particle + 0x20); + *(u32 *)(particle + 4) = ((u32)(func_00472E40(10) + 38) << 24) | 0x808080; + particle[9] = 33; + particle[3] = 72; + particle[1] = 1; + particle[2] = *D_00270AD0[0]; + *(s16 *)(particle + 10) = 5; + *(f32 *)(particle + 12) = scale * 210000.0f; + motion->direction = *direction; + motion->rotation = func_00472EB8(0.0f, 256.0f); + particle[8] = (s32)motion->rotation; + motion->gravity = gravity; + motion->lifetime = lifetime; + } + return particle; +} diff --git a/src/pal/game/004A0398.c b/src/pal/game/004A0398.c new file mode 100644 index 000000000..435a11bd3 --- /dev/null +++ b/src/pal/game/004A0398.c @@ -0,0 +1,27 @@ +#include "common.h" +typedef struct { + char pad[0x14]; + f32 x, y, w, h; + u8 active; + char gap[7]; + s32 choice; + char rest[0x1D0]; +} State; +extern State D_00307354[]; +extern void func_004A0928(s32), func_004A0490(s32, f32 *, f32 *, f32 *, f32 *), func_004A0560(s32, s32, f32 *, f32 *, f32 *, f32 *), func_0049DD20(s32, s32, f32, f32, f32, f32), func_0049CCF8(s32, s32, s32, f32, f32, f32, f32); +void func_004A0398(s32 index, f32 x, f32 y, f32 w, f32 h) +{ + f32 c, d; + State *p = D_00307354 + index; + p->x = x; + p->y = y; + p->w = w; + p->h = h; + if (p->active) { + func_004A0928(index); + func_004A0490(index, &x, &y, &c, &d); + func_0049DD20(index, 0, x, y, c, d); + func_004A0560(index, p->choice, &x, &y, &c, &d); + func_0049CCF8(index, 0, 0, x, y, c, d); + } +} diff --git a/src/pal/game/004A0490.c b/src/pal/game/004A0490.c new file mode 100644 index 000000000..be26f4117 --- /dev/null +++ b/src/pal/game/004A0490.c @@ -0,0 +1,28 @@ +#include "common.h" + +typedef struct { + u8 prefix[0x14]; + f32 x, y, width, factor; + u8 gap[0xC]; + s32 frame; + u8 gap34[0x10]; + u8 active; + u8 tail[0x1BB]; +} State; +extern State D_00307354[]; +void func_004A0490(s32 index, f32 *x, f32 *y, f32 *width, f32 *height) +{ + f32 intermediate, spacing; + State *state = &D_00307354[index]; + if (state->active) + spacing = state->width * 0.48582998f; + else + spacing = 0.024038462f; + intermediate = state->factor * (f32)state->frame; + *height = intermediate; + *height = intermediate + (f32)(state->frame + 1) * 0.0072115385f + + (spacing + 0.024038462f) + 0.009615385f; + *x = state->x; + *y = state->y; + *width = state->width + 0.0078125f; +} diff --git a/src/pal/game/004A0560.c b/src/pal/game/004A0560.c new file mode 100644 index 000000000..a02fb2c66 --- /dev/null +++ b/src/pal/game/004A0560.c @@ -0,0 +1,37 @@ +#include "common.h" + +typedef struct { + u8 prefix[0x14]; + f32 x, y, width, factor; + u8 gap[0xC]; + s32 frame; + u8 gap34[0x10]; + u8 active; + u8 tail[0x1BB]; +} State; +extern State D_00307354[]; +void func_004A0560(s32 index, s32 row, f32 *x, f32 *y, f32 *width, f32 *height) +{ + State *state = &D_00307354[index]; + f32 spacing; + f32 value; + + f32 a, b, c; + s32 frame; + if (state->active) + spacing = state->width * 0.48582998f; + else + spacing = 0.024038462f; + frame = state->frame; + a = state->factor * (f32)frame; + b = (f32)(frame + 1) * 0.0072115385f; + c = spacing + 0.024038462f; + *width = state->width; + *height = state->factor; + *x = state->x; + value = (state->y - ((a + b + c) * 0.5f)) + (spacing + 0.0072115385f); + *y = value; + value = value + *height * 0.5f; + *y = value; + *y = value + (*height + 0.0072115385f) * (f32)row; +} diff --git a/src/pal/game/004A1F78.c b/src/pal/game/004A1F78.c new file mode 100644 index 000000000..ac3692e09 --- /dev/null +++ b/src/pal/game/004A1F78.c @@ -0,0 +1,47 @@ +#include "common.h" + +typedef struct { + u8 unknown0[12]; + u8 dirty; + u8 unknownD[11]; +} Row; + +typedef s32 (*Validator)(s32); + +typedef struct { + u8 unknown0[0x34]; + Row *rows; + u8 unknown38[12]; + Validator validate; + u8 unknown48[8]; + s32 count; + s32 selected; + u32 flags; +} List; + +extern void func_004A2048(List *); + +void func_004A1F78(List *list, s32 index) +{ + s32 maximum; + + if (list->count != 0) { + maximum = list->count - 1; + index = index > maximum ? maximum : index; + index = index < 0 ? 0 : index; + if (index != list->selected) { + if (list->selected >= 0) { + list->rows[list->selected].dirty = 1; + } + list->selected = index; + if (index >= 0) { + list->rows[index].dirty = 1; + } + list->flags |= 2; + } + if (list->selected >= 0 && list->validate != 0 && + list->validate(list->selected) == 0) { + func_004A2048(list); + } + } +} diff --git a/src/pal/game/004A55F8.c b/src/pal/game/004A55F8.c new file mode 100644 index 000000000..5d7321ac8 --- /dev/null +++ b/src/pal/game/004A55F8.c @@ -0,0 +1,29 @@ +#include "common.h" +typedef struct { + s32 flags; + char pad[0xD4]; + f32 timer; + char rest[0x10]; +} State; +extern u8 D_00307C58[]; +extern s32 func_00506BB8(void), func_00506000(s32, s32), func_005063C0(s32, u32), func_00505A50(s32, u32); +void func_004A55F8(void) +{ + s32 offset = func_00506BB8() * 0xEC; + u8 *base = D_00307C58; + f32 *first = &((State *)base)->timer; + f32 *timer = (f32 *)((char *)first + offset); + *timer -= 0.05f; + if (*timer <= 0) { + func_00506000(0xE0007, 0); + func_00506000(0xE0008, 0); + ((State *)(offset + base))->flags &= ~4; + } else if (*timer < 1) { + u32 color = (u32)(s32)(*timer * 128.0f) << 24; + u32 shadow = (u32)(s32)(*timer * 64.0f) << 24; + func_005063C0(0xE0007, color | 0xD0D0D0); + func_00505A50(0xE0007, shadow); + func_005063C0(0xE0008, ((u32)(s32)(*timer * 128.0f) << 24) | 0x20F0F0); + func_00505A50(0xE0008, shadow); + } +} diff --git a/src/pal/game/004A66E8.c b/src/pal/game/004A66E8.c new file mode 100644 index 000000000..8778f5b0a --- /dev/null +++ b/src/pal/game/004A66E8.c @@ -0,0 +1,67 @@ +#include "common.h" + +typedef struct { + f32 targetX; + f32 x; + u8 unknown8[4]; + f32 targetY; + f32 y; + u8 unknown14[0xC]; + f32 target20; + f32 current24; + u8 visible; + u8 unknown29[3]; + f32 alpha; + u8 unknown30[8]; + s32 yTimer; + s32 xTimer; + u8 unknown40[4]; + s32 changed; + u8 tail[8]; +} State; + +extern State D_00308068[]; +extern s32 D_0021EE54; +extern s32 func_00506BB8(void); +extern f32 func_004760C0(f32 *, f32, f32, f32); +extern s32 func_00453CE8(s32 *); +extern void func_004A6888(void); + +void func_004A66E8(void) +{ + s32 changed = 0; + State *state = &D_00308068[func_00506BB8()]; + + if (func_004760C0(&state->alpha, (f32)state->visible, 0.0f, 0.05f) != 0.0f) { + changed = 1; + } + if (state->y != state->targetY) { + if (state->visible) { + state->y = state->targetY; + } else if (state->yTimer) { + func_00453CE8(&state->yTimer); + } else { + func_004760C0(&state->y, state->targetY, 0.1f, 0.3f); + } + changed = 1; + } else { + state->yTimer = 30; + } + if (state->x != state->targetX) { + if (!state->visible) { + state->x = state->targetX; + } else if (state->xTimer) { + func_00453CE8(&state->xTimer); + } else { + func_004760C0(&state->x, state->targetX, 0.1f, 0.3f); + } + changed = 1; + } else { + state->xTimer = 30; + } + if (D_0021EE54 != 1 && state->current24 != state->target20) { + state->current24 = state->target20; + } + func_004A6888(); + state->changed = changed; +} diff --git a/src/pal/game/004A9BF0.c b/src/pal/game/004A9BF0.c new file mode 100644 index 000000000..0842c18a1 --- /dev/null +++ b/src/pal/game/004A9BF0.c @@ -0,0 +1,58 @@ +#include "common.h" + +typedef struct { + u8 unknown0[0x70]; + s32 cost; + s32 amount; + s32 displayedAmount; + u8 tail[0x3C]; +} State; +typedef struct { + u8 unknown0[0x26E4]; + void *inventory; +} Hero; +typedef struct { + u8 unknown0[0x20]; + s8 suppressCost; +} Mode; + +extern State D_00308208[]; +extern s32 D_0021EE54; +extern Mode *D_0021E078; +extern s32 func_00506BB8(void); +extern s32 func_004A9450(void); +extern Hero *func_00511CC0(s32); +extern s32 func_00549580(s32); +extern s32 func_00549398(void *, s32); +extern s32 func_00549368(void *, s32); +extern void func_004A94E8(s32, s32); +extern void func_004A9718(s32, s32); + +void func_004A9BF0(void) +{ + s32 index = func_00506BB8(); + s32 item = func_004A9450(); + State *state = &D_00308208[index]; + Hero *hero = func_00511CC0(index); + s32 cost; + s32 amount; + + if (func_00549580(item)) { + cost = 0; + } else { + cost = func_00549398(hero->inventory, item); + } + if (D_0021EE54 == 1 && D_0021E078->suppressCost) { + cost = 0; + } + if (state->cost != cost) { + state->cost = cost; + func_004A94E8(index, cost); + } + amount = func_00549368(hero->inventory, item); + state->amount = amount; + if (state->displayedAmount != amount) { + state->displayedAmount = amount; + func_004A9718(index, amount); + } +} diff --git a/src/pal/game/004AAD18.c b/src/pal/game/004AAD18.c new file mode 100644 index 000000000..36f504003 --- /dev/null +++ b/src/pal/game/004AAD18.c @@ -0,0 +1,49 @@ +#include "common.h" + +typedef struct { + u8 unknown0[0x10]; + s32 pending; + u8 unknown14[0x12C]; + f32 scale; + u8 unknown144[8]; + s32 mask; + u8 unknown150[8]; + s32 selected; + s32 value15C; + s32 value160; + s32 value164; + s32 value168; + u8 tail[4]; +} State; + +typedef struct { + f32 scale; + f32 unknown4; +} Scale; + +extern State D_00308C80[]; +extern const Scale D_003D1A70[]; +extern s32 func_00506BB8(void); +extern void func_004AC740(s32); +extern void func_004AD8E8(void); +extern s32 func_00498468(s32); +extern void func_00498560(s32, s32); +extern void func_00497780(void *, s32); + +void func_004AAD18(void) +{ + s32 index = func_00506BB8(); + + func_004AC740(1); + func_004AD8E8(); + D_00308C80[index].pending = 0; + D_00308C80[index].selected = -1; + D_00308C80[index].value164 = 0; + D_00308C80[index].value168 = 0; + D_00308C80[index].value15C = 0; + D_00308C80[index].value160 = 0; + D_00308C80[index].scale = D_003D1A70[func_00498468(index)].scale; + D_00308C80[index].mask = 0x3F; + func_00498560(index, 0x18); + func_00497780(&D_00308C80[index], 0); +} diff --git a/src/pal/game/004AE058.c b/src/pal/game/004AE058.c new file mode 100644 index 000000000..eadae01e6 --- /dev/null +++ b/src/pal/game/004AE058.c @@ -0,0 +1,47 @@ +#include "common.h" + +typedef struct { + s16 id; + u8 unknown2[0x12]; + u32 value; + u8 tail[4]; +} Record; + +typedef struct { + u8 unknown0[0x158]; + s32 selected; + u8 tail[0x14]; +} State; + +typedef struct { + s32 count; +} Count; + +extern u8 D_00308C60[]; +extern State D_00308C80[]; +extern Record D_00308560[64]; +extern Count *D_0021DE2C; +extern void func_00453E20(void *, s32, u32); +extern void *func_004A37A8(s32); +extern s32 func_004A3AF0(void *, s32, s32); +extern void *func_00497120(void); + +void func_004AE058(void) +{ + Record *record; + s32 i; + + func_00453E20(D_00308C60, 0, 0x20); + func_00453E20(D_00308C80, 0, 0x5C0); + record = D_00308560; + do { + record->id = -1; + record->value = 0; + record++; + } while ((s32)record < (s32)(D_00308560 + 64)); + for (i = 0; i < D_0021DE2C->count; i++) { + D_00308C80[i].selected = -1; + } + func_004A3AF0(func_004A37A8(0), 0, 0); + func_00453E20(func_00497120(), 0, 0x20); +} diff --git a/src/pal/game/004AE7A8.c b/src/pal/game/004AE7A8.c new file mode 100644 index 000000000..eeb3aabce --- /dev/null +++ b/src/pal/game/004AE7A8.c @@ -0,0 +1,39 @@ +#include "common.h" + +typedef struct { + s32 state; + f32 fade; + u8 unknown8[0x48]; +} State; + +extern State D_003092A0[]; +extern s32 func_00506BB8(void); +extern s32 func_0049B418(f32 *, f32); +extern void func_004AE890(void); +extern void func_004AE918(void); +extern void func_004AEAA0(void); +extern void func_00502520(void *); + +void func_004AE7A8(void *object) +{ + State *state = &D_003092A0[func_00506BB8()]; + + switch (state->state) { + case 0: + if (!(u8)func_0049B418(&state->fade, 1.0f)) { + state->state = 1; + } + func_004AE890(); + break; + case 1: + break; + case 2: + if (!(u8)func_0049B418(&state->fade, 0.0f)) { + func_00502520(object); + } + func_004AE890(); + break; + } + func_004AE918(); + func_004AEAA0(); +} diff --git a/src/pal/game/004B64A0.c b/src/pal/game/004B64A0.c new file mode 100644 index 000000000..26d7620c5 --- /dev/null +++ b/src/pal/game/004B64A0.c @@ -0,0 +1,27 @@ +#include "common.h" + +extern u8 D_001CE3E8[]; +extern s32 D_00221868; +extern s32 D_0022186C; +extern u8 D_00171E6B[]; +extern void func_004B66B0(void); +extern s32 func_0049A9D8(const void *, s32); +extern s32 func_004A2798(s32 *, s32); +extern s32 func_00506590(s32, s32); +extern s32 func_005071B8(s32, s32); +extern s32 func_005053D0(s32, f32); +extern s32 func_00505488(s32, f32); + +void func_004B64A0(void) +{ + func_004B66B0(); + D_0022186C = func_0049A9D8(D_001CE3E8, -1); + func_00506590(func_004A2798(&D_00221868, 0x15), 1); + func_005071B8(func_004A2798(&D_00221868, 0x15), D_0022186C); + func_005053D0(func_004A2798(&D_00221868, 1), -0.5f); + func_005053D0(func_004A2798(&D_00221868, 0xB), 1.5f); + if (D_00171E6B[0]) { + func_00505488(func_004A2798(&D_00221868, 1), 0.405f); + func_00505488(func_004A2798(&D_00221868, 0xB), 0.61f); + } +} diff --git a/src/pal/game/004B7778.c b/src/pal/game/004B7778.c new file mode 100644 index 000000000..f1e598060 --- /dev/null +++ b/src/pal/game/004B7778.c @@ -0,0 +1,28 @@ +#include "common.h" + +typedef s32 (*Callback)(s32); + +typedef struct { + u8 unknown0[0x10]; + s32 value; + u8 tail[0x1E4]; +} State; +extern State D_003099F0[]; +extern void func_004A0F28(s32, s32); +extern void func_004B6CE8(s32); +extern char *func_0045E850(s32); +extern void func_004B6D08(s32, const char *, Callback, s32); +extern void func_004B6D60(s32, Callback, const char *); +extern s32 func_004B8128(s32); +extern s32 func_004B8230(s32); +extern s32 func_004B7B98(s32); + +void func_004B7778(s32 index) +{ + func_004A0F28(index, D_003099F0[index].value); + func_004B6CE8(index); + func_004B6D08(index, func_0045E850(0x1CF), func_004B8128, 1); + func_004B6D08(index, func_0045E850(0x2387), func_004B8230, 1); + func_004B6D08(index, func_0045E850(0x362D), func_004B7B98, 1); + func_004B6D60(index, func_004B7B98, func_0045E850(0x106)); +} diff --git a/src/pal/game/004BA498.c b/src/pal/game/004BA498.c new file mode 100644 index 000000000..7b28b0ad9 --- /dev/null +++ b/src/pal/game/004BA498.c @@ -0,0 +1,36 @@ +#include "common.h" + +typedef struct { + f32 x; + f32 y; +} Position; +extern const Position D_003D1E70[]; +extern s32 D_002218B0; +extern s32 func_004A2798(s32 *, s32); +extern s32 func_004A1720(s32); +extern s32 func_005052D0(s32, f32, f32); +extern s32 func_00506978(s32, f32, f32); +extern s32 func_005060D8(s32, s32); +extern s32 func_00506000(s32, s32); +extern s32 func_00505F00(s32, s32, s32); +extern s32 func_005063C0(s32, u32); +extern s32 func_00506E68(s32, s32); + +void func_004BA498(void) +{ + s32 i; + const Position *position = D_003D1E70; + + for (i = 0; i < 13; i++, position++) { + s32 handle = func_004A2798(&D_002218B0, i + 0xB4); + + func_004A1720(handle); + func_005052D0(handle, position->x, position->y); + func_00506978(handle, 0.8f, 0.8f); + func_005060D8(handle, 1); + func_00506000(handle, 1); + func_00505F00(handle, 1 + (i <= 4), 3); + func_005063C0(handle, 0x80D0D0D0); + func_00506E68(D_002218B0, handle); + } +} diff --git a/src/pal/game/004C32B8.c b/src/pal/game/004C32B8.c new file mode 100644 index 000000000..bcba50148 --- /dev/null +++ b/src/pal/game/004C32B8.c @@ -0,0 +1,33 @@ +#include "common.h" +typedef struct { + s32 a, b, flags, selection; + char pad[0x60]; + s32 handle; +} State; +typedef struct { + char pad[0x29]; + u8 label; +} Info; +extern State D_0030B7F8[]; +extern char D_001CDA00[]; +extern s32 D_00221980; +extern s32 func_00506BB8(void), func_00498518(s32), func_0049A9D8(void *, s32), func_004A2798(s32 *, s32), func_005071B8(s32, s32); +extern void *func_00511CC0(s32); +extern Info *func_0054A290(s32, s32); +extern void func_0049AA18(s32); +void func_004C32B8(void) +{ + s32 index = func_00506BB8(); + State *p; + char *text; + func_00511CC0(index); + p = D_0030B7F8 + index; + text = D_001CDA00 + func_0054A290(func_00498518(p->selection), 0)->label * 8; + if (p->handle) { + func_0049AA18(p->handle); + p->handle = 0; + } + p->handle = func_0049A9D8(text, -1); + func_005071B8(func_004A2798(&D_00221980, 0x1D), p->handle); + p->flags &= ~4; +} diff --git a/src/pal/game/004C4D20.c b/src/pal/game/004C4D20.c new file mode 100644 index 000000000..eafe8356c --- /dev/null +++ b/src/pal/game/004C4D20.c @@ -0,0 +1,36 @@ +#include "common.h" +typedef struct { + s32 mode, a, flags, b, selection; + char rest[0x60]; +} State; +extern State D_0030B7F8[]; +extern s32 D_00221988; +extern s32 func_00506BB8(void), func_004A2798(s32 *, s32), func_005062D0(s32, const char *); +extern const char *func_0045E850(s32); +extern void func_0049D060(s32, s32, s32), func_0049CF80(s32, s32), func_004C47B0(void), func_004C41F8(void), func_004985F0(s32); +void func_004C4D20(void) +{ + s32 index = func_00506BB8(); + State *p = D_0030B7F8 + index; + func_0049D060(index, 0, 1); + func_0049D060(index, 1, 1); + func_0049CF80(index, 2); + func_0049CF80(index, 3); + switch (p->selection) { + case 1: { + s32 handle; + func_004C47B0(); + handle = func_004A2798(&D_00221988, 0x51); + func_005062D0(handle, func_0045E850(0x304F)); + } break; + case 2: { + s32 handle; + func_004C41F8(); + handle = func_004A2798(&D_00221988, 0x50); + func_005062D0(handle, func_0045E850(0x304E)); + } break; + } + func_004985F0(8); + p->mode = 1; + p->flags |= 0x80; +} diff --git a/src/pal/game/004C7F90.c b/src/pal/game/004C7F90.c new file mode 100644 index 000000000..891931219 --- /dev/null +++ b/src/pal/game/004C7F90.c @@ -0,0 +1,35 @@ +#include "common.h" + +typedef struct { + u8 prefix[0x50]; + s32 count, index; +} List; +typedef struct { + u8 prefix[0x10]; + u32 flags; + u8 gap[0xAA0]; + List list; + u8 tail[0x24]; +} State; +extern State D_0030B9D8[]; +extern s32 func_00506BB8(void); +extern void func_004A2090(List *); +extern void func_004A2048(List *); +extern void func_004985F0(s32); +void func_004C7F90(s32 direction) +{ + s32 index = func_00506BB8(); + State *state = D_0030B9D8 + index; + List *list = &state->list; + if (list->count >= 2) { + if (direction) + func_004A2090(list); + else + func_004A2048(list); + if (state->list.count >= 2) + func_004985F0(10); + else + func_004985F0(4); + D_0030B9D8[index].flags |= 3; + } +} diff --git a/src/pal/game/004C9EB8.c b/src/pal/game/004C9EB8.c new file mode 100644 index 000000000..52e087aca --- /dev/null +++ b/src/pal/game/004C9EB8.c @@ -0,0 +1,40 @@ +#include "common.h" +typedef struct { + s32 kind, other, count; +} Data; +typedef struct { + s32 a, b; + Data *data; + char tail[12]; +} Item; +typedef struct { + char pad[0x34]; + Item *items; + char gap[0x18]; + s32 count, index; +} List; +extern List D_0030E494; +extern s32 func_004E7EC8(Data *), func_00506BB8(void); +extern const char *func_0045E850(s32); +extern void func_004C9DD8(s32), func_004985F0(s32), func_0049F4C8(s32, const char *, void (*)(s32), s32, s32, s32, s32, f32); +static inline Item *selected(List *l) +{ + if (l->index < 0) + return 0; + return l->items + l->index; +} +void func_004C9EB8(void) +{ + if (D_0030E494.count) { + Data *d = selected(&D_0030E494)->data; + if (func_004E7EC8(d)) { + if (d->count <= 0 || d->kind == 1) + func_004C9DD8(1); + else { + s32 index = func_00506BB8(); + func_0049F4C8(index, func_0045E850(0x8D0), func_004C9DD8, 3, 0, 0, 0, -1.0f); + } + } else + func_004985F0(4); + } +} diff --git a/src/pal/game/004CD188.c b/src/pal/game/004CD188.c new file mode 100644 index 000000000..297ee4398 --- /dev/null +++ b/src/pal/game/004CD188.c @@ -0,0 +1,40 @@ +#include "common.h" +typedef struct { + s32 mode, selection, flags; + char rest[0x58]; +} State; +extern State D_0030EAA0[]; +extern s32 func_00506BB8(void), func_004981D8(s32 *, s32, s32 (*)(s32)), func_00498280(s32 *, s32, s32 (*)(s32)), func_004CCF58(s32); +extern void func_004CCFA0(s32), func_004CCFE8(s32), func_004985F0(s32); +void func_004CD188(s32 mode) +{ + State *p = D_0030EAA0 + func_00506BB8(); + if (p->selection >= 0) { + s32 found; + func_004CCFA0(p->selection); + switch (mode) { + case 0: + p->selection--; + found = func_004981D8(&p->selection, 12, func_004CCF58); + break; + case 1: + p->selection++; + found = func_00498280(&p->selection, 12, func_004CCF58); + break; + case 3: + found = func_00498280(&p->selection, 12, func_004CCF58); + break; + case 2: + found = func_004981D8(&p->selection, 12, func_004CCF58); + break; + default: + found = 0; + break; + } + if (found) { + func_004CCFE8(p->selection); + func_004985F0(15); + p->flags |= 1; + } + } +} diff --git a/src/pal/game/004D07F0.c b/src/pal/game/004D07F0.c new file mode 100644 index 000000000..f304dc2f5 --- /dev/null +++ b/src/pal/game/004D07F0.c @@ -0,0 +1,45 @@ +#include "common.h" +typedef struct { + char pad[0x30]; + s32 label; +} Data; +typedef struct { + s32 a, b; + Data *data; + char tail[12]; +} Item; +typedef struct { + char pad[0x34]; + Item *items; + char gap[0x18]; + s32 count, index; +} List; +typedef struct { + s32 a, b, flags; + char pad[0x968]; + List list; + char tail[0x14]; +} State; +extern State D_00316D00[]; +extern s32 D_00221A80; +extern s32 func_00506BB8(void), func_004A2798(s32 *, s32), func_005062D0(s32, const char *), func_00506000(s32, s32); +extern const char *func_0045E850(s32); +static inline Item *selected(List *l) +{ + if (l->index < 0) + return 0; + return l->items + l->index; +} +void func_004D07F0(void) +{ + State *p = D_00316D00 + func_00506BB8(); + List *l = &p->list; + if (l->count > 0) { + Data *d = selected(l)->data; + s32 handle = func_004A2798(&D_00221A80, 0xD); + func_005062D0(handle, func_0045E850(d->label)); + func_00506000(func_004A2798(&D_00221A80, 0xD), 1); + } else + func_00506000(func_004A2798(&D_00221A80, 0xD), 0); + p->flags &= ~2; +} diff --git a/src/pal/game/004D2928.c b/src/pal/game/004D2928.c new file mode 100644 index 000000000..59f9aeeff --- /dev/null +++ b/src/pal/game/004D2928.c @@ -0,0 +1,31 @@ +#include "common.h" +typedef struct { + s32 mode, a, flags; + char gap[0xE4]; + char list[0x6C]; +} State; +extern State D_0031B050[]; +extern s32 func_00506BB8(void), func_004A2468(void *); +extern void func_004D2D48(void), func_004D2AD0(void), func_004D2B10(void), func_004D2C08(void), func_00502520(void *); +void func_004D2928(void *descriptor) +{ + State *p = D_0031B050 + func_00506BB8(); + switch (p->mode) { + case 1: + p->mode = 0; + break; + case 2: + func_00502520(descriptor); + break; + case 0: + func_004D2D48(); + break; + } + if (p->flags & 1) + func_004D2AD0(); + if (p->flags & 2) + func_004D2B10(); + func_004A2468(p->list); + if (p->flags & 4) + func_004D2C08(); +} diff --git a/src/pal/game/004D2E08.c b/src/pal/game/004D2E08.c new file mode 100644 index 000000000..1c2c60b61 --- /dev/null +++ b/src/pal/game/004D2E08.c @@ -0,0 +1,31 @@ +#include "common.h" + +extern s32 D_00221AC0; +extern s32 func_00506BB8(void); +extern s32 func_005026A8(s32 *, s32, s32); +extern s32 func_00506C08(s32, s32); +extern s32 func_004984A0(s32); +extern void func_005027A0(s32 *, s32, f32); +extern s32 func_004A2798(s32 *, s32); +extern char *func_0045E850(s32); +extern s32 func_005062D0(s32, const char *); +extern s32 func_00507270(s32, s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_005060D8(s32, s32); +extern s32 func_005074A0(s32, s32, s32, f32); + +void func_004D2E08(void) +{ + s32 index = func_00506BB8(); + s32 handle; + + func_005026A8(&D_00221AC0, 0x33, -1); + func_00506C08(0xF, D_00221AC0); + func_005027A0(&D_00221AC0, -1, (f32)func_004984A0(index)); + handle = func_004A2798(&D_00221AC0, 0xE); + func_005062D0(handle, func_0045E850(0x2350)); + handle = func_004A2798(&D_00221AC0, 0xF); + func_005062D0(handle, func_0045E850(0x2387)); + func_00507270(func_004A2798(&D_00221AC0, 0x10), 1, 1, 1, 0, 0, 0, 0, 0); + func_005060D8(func_004A2798(&D_00221AC0, 0x10), 1); + func_005074A0(func_004A2798(&D_00221AC0, 0x10), 0xB4, 10, 0.00031f); +} diff --git a/src/pal/game/004DA960.c b/src/pal/game/004DA960.c new file mode 100644 index 000000000..34644a146 --- /dev/null +++ b/src/pal/game/004DA960.c @@ -0,0 +1,44 @@ +#include "common.h" +typedef struct { + s32 a, b; + void *data; + char tail[12]; +} Item; +typedef struct { + char pad[0x34]; + Item *items; + char gap[0x18]; + s32 count, index; +} List; +typedef struct { + s32 a, b, flags; + char pad[0xA8]; + List list; + char gap[0x14]; + s32 handle; +} State; +extern State D_00321650[]; +extern char D_001CE230[]; +extern s32 D_00221C68; +extern s32 func_00506BB8(void), func_0049A9D8(void *, s32), func_004A2798(s32 *, s32), func_005071B8(s32, s32); +extern void func_0049AA18(s32); +static inline Item *selected(List *l) +{ + if (l->index < 0) + return 0; + return l->items + l->index; +} +void func_004DA960(void) +{ + State *p = D_00321650 + func_00506BB8(); + List *l = &p->list; + if (l->count > 0) { + if (p->handle) { + func_0049AA18(p->handle); + p->handle = 0; + } + p->handle = func_0049A9D8(D_001CE230 + *(s32 *)selected(l)->data * 8, -1); + func_005071B8(func_004A2798(&D_00221C68, 4), p->handle); + } + p->flags &= ~2; +} diff --git a/src/pal/game/004DCAC8.c b/src/pal/game/004DCAC8.c new file mode 100644 index 000000000..bd63a755f --- /dev/null +++ b/src/pal/game/004DCAC8.c @@ -0,0 +1,32 @@ +#include "common.h" +typedef struct { + s32 a, b; + void *data; + char tail[12]; +} Item; +typedef struct { + s32 mode, flags; + char gap[4]; + Item items[9]; + char list[0x7C]; + f32 timer; + char tail[4]; +} State; +extern State D_00322FC8[]; +extern s32 D_00221C88; +extern s32 func_00506BB8(void), func_004A2798(s32 *, s32); +extern void func_004DCDC0(void), func_004A1E78(void *, Item *, s32, void (*)(void *, Item *, s32), s32, s32), func_004A1EA8(void *), func_0049CF80(s32, s32), func_0049DEA8(s32, s32, s32), func_0049DFB8(s32, s32); +void func_004DCAC8(void) +{ + s32 index = func_00506BB8(); + State *p = D_00322FC8 + index; + func_004DCDC0(); + p->mode = 0; + func_004A1E78(p->list, p->items, 9, 0, 0, 0); + p->timer = 0.024543693f; + func_0049CF80(index, 0); + func_0049DEA8(index, 0, func_004A2798(&D_00221C88, 0x12)); + func_0049DFB8(index, 1); + func_004A1EA8(p->list); + p->flags = 7; +} diff --git a/src/pal/game/004DCBE8.c b/src/pal/game/004DCBE8.c new file mode 100644 index 000000000..0af8720fc --- /dev/null +++ b/src/pal/game/004DCBE8.c @@ -0,0 +1,29 @@ +#include "common.h" +typedef struct { + s32 mode, flags; + char rest[0x160]; +} State; +extern State D_00322FC8[]; +extern s32 func_00506BB8(void); +extern void func_004DCCB8(void), func_004DD160(void), func_004DD558(void), func_004DDA40(void), func_004DD810(void), func_00502520(void *); +void func_004DCBE8(void *descriptor) +{ + State *p = D_00322FC8 + func_00506BB8(); + switch (p->mode) { + case 0: + p->mode = 2; + break; + case 2: + func_004DCCB8(); + break; + case 1: + func_00502520(descriptor); + break; + } + if (p->flags & 1) + func_004DD160(); + if (p->flags & 2) + func_004DD558(); + func_004DDA40(); + func_004DD810(); +} diff --git a/src/pal/game/004DFA40.c b/src/pal/game/004DFA40.c new file mode 100644 index 000000000..cdc8e9682 --- /dev/null +++ b/src/pal/game/004DFA40.c @@ -0,0 +1,31 @@ +#include "common.h" +typedef struct { + u8 active; + u8 pad[3]; + u32 color, unused, base; + u8 tail[16]; +} Row; +typedef struct { + u8 pad[8]; + s16 count; + u8 gap[0x12]; + Row *rows; +} Manager; +extern Manager *D_00221DF0; +extern s32 func_001633D8(void); +void func_004DFA40(void) +{ + s32 i; + for (i = 0; i < D_00221DF0->count; i++) { + Row *p = D_00221DF0->rows + i; + if (p->active) { + s32 random = func_001633D8() >> 16; + { + s32 red = ((random & 0x1F00) << 10) - 0x202020; + s32 green = (random & 0x1F0) << 6; + s32 blue = (random & 0x1F) << 2; + p->color = p->base + red + green + blue; + } + } + } +} diff --git a/src/pal/game/004E3C48.c b/src/pal/game/004E3C48.c new file mode 100644 index 000000000..2ca5711b1 --- /dev/null +++ b/src/pal/game/004E3C48.c @@ -0,0 +1,34 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/3C9888.c func_003C99D0. + * Independently reconstructed from RAC4 PAL retail. */ + +extern u32 *D_00221F20, *D_00221E2C; +extern s32 D_0021DAB0, D_00221E34; +extern void func_004E4B68(void), func_004E8AB0(void); +extern s32 func_004E4CD0(s32); +void func_004E3C48(void) +{ + u32 *saved = D_00221F20; + s32 size; + D_00221F20 += 4; + D_00221E2C[0] = 0x20000000; + D_00221E2C[1] = (u32)D_00221F20; + D_00221E2C[2] = 0; + D_00221E2C[3] = 0; + func_004E4B68(); + size = func_004E4CD0(D_0021DAB0); + func_004E8AB0(); + if (D_00221E34 < size) + D_00221E34 = size; + D_00221F20[0] = 0x20000000; + D_00221F20[1] = (u32)(D_00221E2C + 4); + D_00221F20[2] = 0; + D_00221F20[3] = 0; + D_00221F20 += 4; + saved[0] = 0x20000000; + saved[1] = (u32)D_00221F20; + saved[2] = 0; + saved[3] = 0; +} diff --git a/src/pal/game/004F16C8.c b/src/pal/game/004F16C8.c new file mode 100644 index 000000000..dec16665c --- /dev/null +++ b/src/pal/game/004F16C8.c @@ -0,0 +1,42 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/3ABA48.c func_003ABA48. + * Independently reconstructed from RAC4 PAL retail. */ +typedef struct Stream Stream; +typedef struct { + u8 prefix[8]; + u8 *source; + s32 size; + u64 first, second; +} Block; +extern Stream *D_00221FD4; +extern char D_003D3210[]; +extern void func_004F2C78(Stream *, u8 **, s32 *, u8 **, s32 *); +extern s32 func_004F18B0(u8 *, s32, u8 *, s32, const u8 *, s32, const u8 *, s32); +extern s32 func_004F2D20(Stream *, u64, u64, const u8 *, s32); +extern void func_004F0708(const char *); +extern void func_004F2C98(Stream *, s32); +s32 func_004F16C8(s32 unused, Block *block, const u8 *buffer) +{ + u8 *first, *second; + s32 firstSize, secondSize; + s32 offset = *(const s32 *)(buffer + 0x50008); + const u8 *source = block->source; + s32 size = block->size; + s32 count = (s32)((u32)buffer + offset - (u32)source); + s32 remaining; + s32 copied; + if (size < count) + count = size; + remaining = size - count; + func_004F2C78(D_00221FD4, &first, &firstSize, &second, &secondSize); + copied = func_004F18B0((u8 *)(((u32)first & 0x0FFFFFFF) | 0x20000000), firstSize, + (u8 *)(((u32)second & 0x0FFFFFFF) | 0x20000000), secondSize, source, count, buffer, remaining); + if (copied > 0) { + if (!func_004F2D20(D_00221FD4, block->first, block->second, first, copied)) + func_004F0708(D_003D3210); + } + func_004F2C98(D_00221FD4, copied); + return copied > 0; +} diff --git a/src/pal/game/004F2D88.c b/src/pal/game/004F2D88.c new file mode 100644 index 000000000..9b11f775d --- /dev/null +++ b/src/pal/game/004F2D88.c @@ -0,0 +1,38 @@ +#include "common.h" + +/* Reference: OpenRAC/OpenRAC@73f725bf54bb1bf6d8b9bb5b1511ed00d551fbde + * OpenRAC/games/rac3/ntsc/src/frontbin/3ABA48.c func_003AD108. + * Independently reconstructed from RAC4 PAL retail. */ +typedef struct Stream { + u8 prefix[0x48]; + u8 ring[0x60]; + s32 state; +} Stream; +typedef struct { + u8 bytes[4]; +} Command; +extern Command D_002209B8[]; +extern Stream *D_00221FD4; +extern void func_004F2C78(Stream *, u8 **, s32 *, u8 **, s32 *); +extern s32 func_004F31A0(u8 *, s32, u8 *, s32, const void *, s32, const void *, s32); +extern void func_004F2C98(Stream *, s32); +extern void func_004F2728(void *); +s32 func_004F2D88(Stream *stream) +{ + Command command = D_002209B8[0]; + u8 *first; + s32 firstSize; + u8 *second; + s32 secondSize; + s32 copied; + func_004F2C78(stream, &first, &firstSize, &second, &secondSize); + if (firstSize + secondSize < 4) + return 0; + copied = func_004F31A0((u8 *)(((u32)first & 0x0FFFFFFF) | 0x20000000), firstSize, + (u8 *)(((u32)second & 0x0FFFFFFF) | 0x20000000), secondSize, &command, 4, 0, 0); + func_004F2C98(D_00221FD4, copied); + func_004F2728(stream->ring); + if (stream->state == 0) + stream->state = 2; + return 1; +} diff --git a/src/pal/game/004FBB28.c b/src/pal/game/004FBB28.c new file mode 100644 index 000000000..cc093f800 --- /dev/null +++ b/src/pal/game/004FBB28.c @@ -0,0 +1,19 @@ +#include "common.h" +extern s32 D_0021DFB0; +extern u32 *D_00221F20; +extern u8 D_0020F480[]; +extern s32 D_00222070, D_00222080, D_0021DF78; +s32 D_00220A70 = 128; +s32 D_00220A5C = 0; +extern void func_004F97F8(s32, s32, s32, s32, s32, s32, u32, u32); +void func_004FBB28(void) +{ + D_00221F20[0] = (D_0021DFB0 >> 4) | 0x30000000; + D_00221F20[1] = (u32)D_0020F480; + D_00221F20[2] = D_00222070 | 0x03000000; + D_00221F20[3] = 0x02000000; + D_00222070 += D_00222080; + D_00221F20 += 4; + func_004F97F8(D_0021DF78, 256, 256, 1, 0, D_00220A70, 0x00808080, 0x00ffffff); + D_00220A5C = 0; +} diff --git a/src/pal/game/004FEB10.c b/src/pal/game/004FEB10.c new file mode 100644 index 000000000..d6dd24c93 --- /dev/null +++ b/src/pal/game/004FEB10.c @@ -0,0 +1,30 @@ +#include "common.h" +const char *func_004FEB10(const char *input, char *output, u32 capacity) +{ + s32 comment = 0; + s32 quoted = 0; + u32 i = 0; + capacity--; + while (i < capacity) { + u32 c = *(const u8 *)input; + if ((u8)c == '"' && ((const u8 *)input)[-1] != '\\') + quoted = !quoted; + if ((u8)c == '\n' && !quoted) + break; + if (!(u8)c) + break; + if ((u8)c == ';') + comment = !comment; + if ((u8)c != '\r' && !comment) + *output++ = c; + input++; + i++; + } + *output = 0; + { + const char *next = input + 1; + if (!*(const u8 *)input) + next = input; + return next; + } +} diff --git a/src/pal/game/00502E90.c b/src/pal/game/00502E90.c new file mode 100644 index 000000000..8d2679b34 --- /dev/null +++ b/src/pal/game/00502E90.c @@ -0,0 +1,39 @@ +#include "common.h" +typedef struct { + u8 prefix[0x14]; + s32 index; +} Context; +typedef struct { + s32 first; + Context *context; +} Manager; +typedef struct { + f32 x, y, z, w; +} Rect; +extern Manager D_00222138[]; +extern Manager *func_00502150(void); +extern s32 func_004490A8(s32); +extern Rect *func_00449060(s32); +s32 D_00220B9C = 0; +extern f32 D_00220B7C, D_00220B80; +extern Rect D_00335EE0[]; +void func_00502E90(s32 *x1, s32 *x2, s32 *y1, s32 *y2) +{ + Manager *manager; + Rect *view; + Rect *offset; + s32 index; + if (D_00222138[0].context) + manager = D_00222138; + else + manager = func_00502150(); + index = -1; + if (manager->context) + index = manager->context->index; + view = func_00449060(func_004490A8(index)); + offset = &D_00335EE0[D_00220B9C]; + *x1 = (s32)(offset->x * D_00220B7C + view->x * 512.0f); + *x2 = (s32)(offset->z * D_00220B7C + view->x * 512.0f); + *y1 = (s32)(offset->y * D_00220B80 + view->z * 448.0f); + *y2 = (s32)(offset->w * D_00220B80 + view->z * 448.0f); +} diff --git a/src/pal/game/00506978.c b/src/pal/game/00506978.c new file mode 100644 index 000000000..70fc0121b --- /dev/null +++ b/src/pal/game/00506978.c @@ -0,0 +1,52 @@ +#include "common.h" +typedef struct Object Object; +typedef struct Vtable { + void *unused[3]; + u32 (*type)(Object *); + void *f10; + s32 (*supports)(Object *, u32); +} Vtable; +struct Object { + s32 f0, f4; + Vtable *vtable; +}; +typedef struct { + s32 f0; + void *context; +} Manager; +extern Manager D_00222138[]; +extern Manager *func_00502150(void); +extern Object *func_00501658(void *, s32); +extern u32 D_00220B50; +static inline Object *resolve(s32 handle) +{ + Manager *m; + Object *obj; + void *world; + if (D_00222138[0].context) + m = D_00222138; + else + m = func_00502150(); + world = 0; + if (m->context) + world = *(void **)((u32)m->context + ((u32) * (s32 *)((char *)m->context + 0x14) << 2)); + obj = func_00501658(world, handle); + if (obj && obj->vtable->supports(obj, D_00220B50)) + return obj; + return 0; +} +typedef s32 (*Callback)(Object *, f32, f32); +extern char D_00335FF0[]; +extern Callback func_00508A38(void *, u32); +s32 func_00506978(s32 handle, f32 a, f32 b) +{ + s32 result = 0; + Object *obj = resolve(handle); + if (obj) { + u32 type = obj->vtable->type(obj); + Callback callback = func_00508A38(D_00335FF0, type); + if (callback) + result = callback(obj, a, b); + } + return result; +} diff --git a/src/pal/game/0050B488.c b/src/pal/game/0050B488.c new file mode 100644 index 000000000..0b40a5521 --- /dev/null +++ b/src/pal/game/0050B488.c @@ -0,0 +1,40 @@ +#include "common.h" +typedef struct Object Object; +typedef struct { + f32 x, y, w, h, a, b; +} Rect; +typedef struct { + char pad[0x14]; + s32 (*supports)(Object *, u32); + char rest[0x10]; + void (*bounds)(Object *, Rect *, Rect *, s32); +} Vtable; +struct Object { + s32 f0, f4; + Vtable *v; +}; +extern u32 D_00220BF4; +static inline void init(Rect *p) +{ + p->x = 0; + p->y = 0; + p->w = 1; + p->h = 1; + p->a = 0; + p->b = 0; +} +s32 func_0050B488(Object *p, f32 *x, f32 *y, f32 *w, f32 *h) +{ + Rect input, output; + if (p->v->supports(p, D_00220BF4)) { + init(&input); + init(&output); + p->v->bounds(p, &input, &output, 1); + *x = output.x; + *y = output.y; + *w = output.w; + *h = output.h; + return 1; + } + return 0; +} diff --git a/src/pal/game/0050C250.c b/src/pal/game/0050C250.c new file mode 100644 index 000000000..236430c22 --- /dev/null +++ b/src/pal/game/0050C250.c @@ -0,0 +1,40 @@ +#include "common.h" +typedef struct Object Object; +typedef struct { + f32 x, y, w, h, a, b; +} Rect; +typedef struct { + char pad[0x14]; + s32 (*supports)(Object *, u32); + char rest[0x10]; + void (*bounds)(Object *, Rect *, Rect *, s32); +} Vtable; +struct Object { + s32 f0, f4; + Vtable *v; +}; +extern u32 D_00220C04; +static inline void init(Rect *p) +{ + p->x = 0; + p->y = 0; + p->w = 1; + p->h = 1; + p->a = 0; + p->b = 0; +} +s32 func_0050C250(Object *p, f32 *x, f32 *y, f32 *w, f32 *h) +{ + Rect input, output; + if (p->v->supports(p, D_00220C04)) { + init(&input); + init(&output); + p->v->bounds(p, &input, &output, 1); + *x = output.x; + *y = output.y; + *w = output.w; + *h = output.h; + return 1; + } + return 0; +} diff --git a/src/pal/game/0050D040.c b/src/pal/game/0050D040.c new file mode 100644 index 000000000..10a52ca9a --- /dev/null +++ b/src/pal/game/0050D040.c @@ -0,0 +1,36 @@ +#include "common.h" + +typedef struct Object Object; +typedef struct { + u8 prefix[0x14]; + s32 (*supports)(Object *, u32); +} Vtable; +typedef struct { + f32 x, y; +} Pair; +struct Object { + u32 first; + u8 flags; + u8 reserved[3]; + Vtable *vtable; + u32 options; + f32 scale; + Pair position, size, offset; + u32 spare, first_handle, second_handle; +}; +extern s32 func_00502650(Object *, const Object *); +s32 func_0050D040(Object *destination, Object *source) +{ + if (source->vtable->supports(source, 1)) { + func_00502650(destination, source); + destination->options = source->options; + destination->scale = source->scale; + destination->position = source->position; + destination->size = source->size; + destination->offset = source->offset; + destination->first_handle = source->first_handle; + destination->second_handle = source->second_handle; + return 1; + } + return 0; +} diff --git a/src/pal/game/0053EA90.c b/src/pal/game/0053EA90.c new file mode 100644 index 000000000..b3208ab22 --- /dev/null +++ b/src/pal/game/0053EA90.c @@ -0,0 +1,30 @@ +#include "common.h" +typedef struct { + s32 count; +} Manager; +typedef struct { + char pad[0x2EF8]; + s32 *state; + char gap[0x1C]; + s32 owner; +} Object; +extern Manager *D_0021DE2C, *D_0021DE30; +extern Object *func_00511CC0(s32), *func_00511CE8(s32); +void func_0053EA90(s32 owner, s32 id) +{ + s32 i; + for (i = 0; i < D_0021DE2C->count; i++) { + Object *p = func_00511CC0(i); + if (p && p->owner == owner && p->state) { + if (*p->state == id) + p->owner = 0; + } + } + for (i = 0; i < D_0021DE30->count; i++) { + Object *p = func_00511CE8(i); + if (p && p->owner == owner && p->state) { + if (*p->state == id) + p->owner = 0; + } + } +} diff --git a/src/pal/game/0054B628.c b/src/pal/game/0054B628.c new file mode 100644 index 000000000..9f60fb419 --- /dev/null +++ b/src/pal/game/0054B628.c @@ -0,0 +1,23 @@ +#include "common.h" + +typedef struct { + u8 unknown0[0xD]; + u8 allowed[10]; + u8 unknown17[0x21]; +} Definition; + +extern const Definition *func_0054B050(s32); + +s32 func_0054B628(s32 item, s32 mode) +{ + Definition definition; + s32 i; + + definition = *func_0054B050(mode); + for (i = 0; i < 10; i++) { + if (definition.allowed[i] == item) { + return 1; + } + } + return 0; +} From f6be8948db5584bc9881bd12389cfa28e117e31d Mon Sep 17 00:00:00 2001 From: Joshua Nierentz Date: Thu, 5 Nov 2026 11:05:52 +0100 Subject: [PATCH 2/2] Share viewport state across matching PAL helpers --- config/pal/map.tsv | 4 +- config/us/map.tsv | 4 +- progress/pal/report.json | 84 ++++++++-------------------------------- src/pal/game/00502BB8.c | 60 ++++++++++++++++++++++++++++ src/pal/game/00502D28.c | 29 -------------- src/pal/game/00502E90.c | 39 ------------------- 6 files changed, 80 insertions(+), 140 deletions(-) delete mode 100644 src/pal/game/00502D28.c delete mode 100644 src/pal/game/00502E90.c diff --git a/config/pal/map.tsv b/config/pal/map.tsv index 213032eb2..e3dad47c9 100644 --- a/config/pal/map.tsv +++ b/config/pal/map.tsv @@ -2505,8 +2505,8 @@ func_00502848 src/game/00502848.c match func_005038B8 main:.text:005038B8:120,fr func_005028C0 src/game/005028C0.c match func_00503930 main:.text:00503930:112,frontbin:.text:00503230:112 100.00 func_00502940 src/pal/game/00502940.c match func_00502940 main:.text:00502940:108 100.00 func_00502BB8 src/pal/game/00502BB8.c match func_00502BB8 main:.text:00502BB8:88 100.00 -func_00502D28 src/pal/game/00502D28.c match func_00502D28 main:.text:00502D28:180 100.00 -func_00502E90 src/pal/game/00502E90.c match func_00502E90 main:.text:00502E90:312 100.00 +func_00502D28 src/pal/game/00502BB8.c match func_00502D28 main:.text:00502D28:180 100.00 +func_00502E90 src/pal/game/00502BB8.c match func_00502E90 main:.text:00502E90:312 100.00 func_005037A8 src/pal/game/005037A8.c match func_005037A8 main:.text:005037A8:152 100.00 func_00503AE8 src/game/00503AE8.c match func_00504B80 main:.text:00504B80:112,frontbin:.text:00504480:112 100.00 func_00503B58 src/game/00503B58.c match func_00504BF0 main:.text:00504BF0:20,frontbin:.text:005044F0:20 100.00 diff --git a/config/us/map.tsv b/config/us/map.tsv index 8c40aa610..5f2c11d03 100644 --- a/config/us/map.tsv +++ b/config/us/map.tsv @@ -2505,8 +2505,8 @@ func_00502848 src/game/00502848.c match func_00502848 main:.text:00502848:120,fr func_005028C0 src/game/005028C0.c match func_005028C0 main:.text:005028C0:112,frontbin:.text:00501550:112 100.00 func_00502940 src/pal/game/00502940.c other - - 0.00 func_00502BB8 src/pal/game/00502BB8.c other - - 0.00 -func_00502D28 src/pal/game/00502D28.c other - - 0.00 -func_00502E90 src/pal/game/00502E90.c other - - 0.00 +func_00502D28 src/pal/game/00502BB8.c other - - 0.00 +func_00502E90 src/pal/game/00502BB8.c other - - 0.00 func_005037A8 src/pal/game/005037A8.c other - - 0.00 func_00503AE8 src/game/00503AE8.c match func_00503AE8 main:.text:00503AE8:112,frontbin:.text:00502778:112 100.00 func_00503B58 src/game/00503B58.c match func_00503B58 main:.text:00503B58:20,frontbin:.text:005027E8:20 100.00 diff --git a/progress/pal/report.json b/progress/pal/report.json index b17ebc7eb..a0e0e69a8 100644 --- a/progress/pal/report.json +++ b/progress/pal/report.json @@ -10,8 +10,8 @@ "matched_functions_percent": 33.578093, "complete_code": "286384", "complete_code_percent": 4.926677, - "total_units": 3379, - "complete_units": 3320 + "total_units": 3377, + "complete_units": 3318 }, "categories": [ { @@ -27,8 +27,8 @@ "matched_functions_percent": 37.395193, "complete_code": "286384", "complete_code_percent": 13.002608, - "total_units": 3364, - "complete_units": 3320 + "total_units": 3362, + "complete_units": 3318 } }, { @@ -95,8 +95,8 @@ "matched_functions_percent": 42.833264, "complete_code": "0", "complete_code_percent": 0.0, - "total_units": 2072, - "complete_units": 2050 + "total_units": 2070, + "complete_units": 2048 } }, { @@ -111692,13 +111692,13 @@ "name": "pal/game/00502BB8", "measures": { "fuzzy_match_percent": 100.0, - "total_code": "88", - "matched_code": "88", + "total_code": "580", + "matched_code": "580", "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, + "total_functions": 3, + "matched_functions": 3, "matched_functions_percent": 100.0, - "complete_code": "88", + "complete_code": "580", "complete_code_percent": 100.0, "total_units": 1, "complete_units": 1 @@ -111712,73 +111712,21 @@ "metadata": { "virtual_address": "5254072" } - } - ], - "metadata": { - "complete": true, - "source_path": "src/pal/game/00502BB8.c", - "progress_categories": [ - "core", - "menu_text" - ] - } - }, - { - "name": "pal/game/00502D28", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "180", - "matched_code": "180", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "180", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ + }, { "name": "func_00502D28", "size": "180", "fuzzy_match_percent": 100.0, - "address": "0", + "address": "368", "metadata": { "virtual_address": "5254440" } - } - ], - "metadata": { - "complete": true, - "source_path": "src/pal/game/00502D28.c", - "progress_categories": [ - "core", - "menu_text" - ] - } - }, - { - "name": "pal/game/00502E90", - "measures": { - "fuzzy_match_percent": 100.0, - "total_code": "312", - "matched_code": "312", - "matched_code_percent": 100.0, - "total_functions": 1, - "matched_functions": 1, - "matched_functions_percent": 100.0, - "complete_code": "312", - "complete_code_percent": 100.0, - "total_units": 1, - "complete_units": 1 - }, - "functions": [ + }, { "name": "func_00502E90", "size": "312", "fuzzy_match_percent": 100.0, - "address": "0", + "address": "728", "metadata": { "virtual_address": "5254800" } @@ -111786,7 +111734,7 @@ ], "metadata": { "complete": true, - "source_path": "src/pal/game/00502E90.c", + "source_path": "src/pal/game/00502BB8.c", "progress_categories": [ "core", "menu_text" diff --git a/src/pal/game/00502BB8.c b/src/pal/game/00502BB8.c index 31fea30d4..600910b89 100644 --- a/src/pal/game/00502BB8.c +++ b/src/pal/game/00502BB8.c @@ -10,3 +10,63 @@ void func_00502BB8(float *a, float *b, float *c, float *d) { *c = p->c < *c ? p->c : *c; *d = p->d < *d ? p->d : *d; } + +/* These viewport helpers share the GP-resident view index. */ +typedef struct { + u8 prefix[0x14]; + s32 index; +} Context; +typedef struct { + s32 first; + Context *context; +} Manager; +typedef struct { + f32 x, y, z, w; +} Rect; +extern Manager D_00222138[]; +extern Manager *func_00502150(void); +extern s32 func_004490A8(s32); +extern void *func_00449060(s32); +extern f32 D_00220B7C, D_00220B80; +extern Rect D_00335EE0[]; + +extern void func_00502C10(f32, f32, f32, f32), func_00502C38(void); +extern s32 *D_0021DE2C; +extern u8 D_00171E6B[]; +void func_00502D28(void) +{ + Manager *m = D_00222138; + char *state; + char *p; + if (!m->context) + m = func_00502150(); + state = (char *)m->context; + p = func_00449060(func_004490A8(state ? *(s32 *)(state + 0x14) : -1)); + D_00220B9C = 0; + if (*D_0021DE2C && D_00171E6B[0]) + func_00502C10(0.0f, 0.0f, 1.0f, *(f32 *)(p + 0x14)); + else + func_00502C10(0.0f, 0.0f, *(f32 *)(p + 0x10), *(f32 *)(p + 0x14)); + func_00502C38(); +} + +void func_00502E90(s32 *x1, s32 *x2, s32 *y1, s32 *y2) +{ + Manager *manager; + Rect *view; + Rect *offset; + s32 index; + if (D_00222138[0].context) + manager = D_00222138; + else + manager = func_00502150(); + index = -1; + if (manager->context) + index = manager->context->index; + view = func_00449060(func_004490A8(index)); + offset = &D_00335EE0[D_00220B9C]; + *x1 = (s32)(offset->x * D_00220B7C + view->x * 512.0f); + *x2 = (s32)(offset->z * D_00220B7C + view->x * 512.0f); + *y1 = (s32)(offset->y * D_00220B80 + view->z * 448.0f); + *y2 = (s32)(offset->w * D_00220B80 + view->z * 448.0f); +} diff --git a/src/pal/game/00502D28.c b/src/pal/game/00502D28.c deleted file mode 100644 index 633e8137c..000000000 --- a/src/pal/game/00502D28.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "common.h" -typedef struct { - s32 f0; - char *state; -} Manager; -extern Manager D_00222138[]; -extern Manager *func_00502150(void); -extern s32 func_004490A8(s32); -extern char *func_00449060(s32); -extern void func_00502C10(f32, f32, f32, f32), func_00502C38(void); -s32 D_00220B9C = 0; -extern s32 *D_0021DE2C; -extern u8 D_00171E6B[]; -void func_00502D28(void) -{ - Manager *m = D_00222138; - char *state; - char *p; - if (!m->state) - m = func_00502150(); - state = m->state; - p = func_00449060(func_004490A8(state ? *(s32 *)(state + 0x14) : -1)); - D_00220B9C = 0; - if (*D_0021DE2C && D_00171E6B[0]) - func_00502C10(0.0f, 0.0f, 1.0f, *(f32 *)(p + 0x14)); - else - func_00502C10(0.0f, 0.0f, *(f32 *)(p + 0x10), *(f32 *)(p + 0x14)); - func_00502C38(); -} diff --git a/src/pal/game/00502E90.c b/src/pal/game/00502E90.c deleted file mode 100644 index 8d2679b34..000000000 --- a/src/pal/game/00502E90.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "common.h" -typedef struct { - u8 prefix[0x14]; - s32 index; -} Context; -typedef struct { - s32 first; - Context *context; -} Manager; -typedef struct { - f32 x, y, z, w; -} Rect; -extern Manager D_00222138[]; -extern Manager *func_00502150(void); -extern s32 func_004490A8(s32); -extern Rect *func_00449060(s32); -s32 D_00220B9C = 0; -extern f32 D_00220B7C, D_00220B80; -extern Rect D_00335EE0[]; -void func_00502E90(s32 *x1, s32 *x2, s32 *y1, s32 *y2) -{ - Manager *manager; - Rect *view; - Rect *offset; - s32 index; - if (D_00222138[0].context) - manager = D_00222138; - else - manager = func_00502150(); - index = -1; - if (manager->context) - index = manager->context->index; - view = func_00449060(func_004490A8(index)); - offset = &D_00335EE0[D_00220B9C]; - *x1 = (s32)(offset->x * D_00220B7C + view->x * 512.0f); - *x2 = (s32)(offset->z * D_00220B7C + view->x * 512.0f); - *y1 = (s32)(offset->y * D_00220B80 + view->z * 448.0f); - *y2 = (s32)(offset->w * D_00220B80 + view->z * 448.0f); -}