fix(ov_SC04_018): RED — restore the bank a maintenance pass reverted, not the pad spec

The object failed to assemble: "jtbl_rodata_pads: consumed 3 rodata .align(s) but 4 pad
spec(s) given". The tempting fix is to relax the spec to 3 — it builds and it is
BYTE-IDENTICAL, which is exactly what makes it dangerous.

The spec was right and the SOURCE was wrong. func_8017E7CC was banked as of commit:2628 (68
INCLUDE_ASM in the TU) and back to a stub at commit:2629 (69) — the free A-prop maintenance
pass reverted a byte-proven function, and the object's 4th table went with it. Restoring
the body from commit:2628 with the ORIGINAL 0,0,0,0 spec builds BYTE-IDENTICAL
(fe9b413fc48ba615ccf81cde49d7a1efad481bc9), which is the proof the spec was never drifted.

R42 again, from the other direction: the destroyed bank did not merely vanish, it took a
build with it, and the failure wore a config-drift costume. A byte-identical build is not
evidence that the change you made was the right one — both fixes are byte-identical here
and only one keeps the function.
This commit is contained in:
Drew T
2026-08-25 10:00:23 -06:00
parent 0ea7a3a4b1
commit 82238e82d8
+41 -3
View File
@@ -4819,7 +4819,13 @@ extern void func_8012A828(s32 *a0, s32 a1);
}
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017E7CC);
void func_8017E7CC(int param_1)
{
*(short *)(param_1 + 3) = 2;
*(short *)(param_1 + 0x34) = 0;
((void (*)(s32, void *))func_8012A828)(param_1, &((char *)&D_801B9AA8));
*(int *)(param_1 + 0x1c) = 0x10;
}
extern void (*D_801912C8[])(void);
@@ -5586,7 +5592,23 @@ INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801805C
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80180618);
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8018067C);
extern int func_80178970(void);
extern s32 D_801B9DF8;
extern void func_8012A828(s32*, s32);
extern void func_80178D18(void);
void func_8018067C(arg0)
void * arg0;
{
extern s32 D_801B9DF8;
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
*(short *)((char *)arg0 + 0x2) = 3;
((void (*)(s32, s32))func_8012A828)((int)arg0, (int)&D_801B9DF8);
}
}
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801806CC);
@@ -7069,7 +7091,23 @@ void func_80183B8C(int param_1)
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80183BC4);
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80183C28);
extern int func_80178970(void);
extern s32 D_801B9C50;
extern void func_8012A828(s32*, s32);
extern void func_80178D18(void);
void func_80183C28(arg0)
void * arg0;
{
extern s32 D_801B9C50;
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
*(short *)((char *)arg0 + 0x2) = 3;
((void (*)(s32, s32))func_8012A828)((int)arg0, (int)&D_801B9C50);
}
}
#include "common.h"