Skip to content

Commit 7d6801c

Browse files
committed
set up recomp_printf for recomp patches, apply to some funcs as a test
1 parent fe83f61 commit 7d6801c

8 files changed

Lines changed: 995 additions & 4 deletions

File tree

patches/main.c

Lines changed: 174 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,176 @@
11
#include "patches.h"
2-
// #include "PR/os_message.h"
2+
#ifndef RECOMP
3+
#define RECOMP
4+
#endif
5+
#include "common.h"
36

4-
int dummyData = 1;
5-
int dummyBss;
7+
typedef struct unkProcessStruct {
8+
s16 stat;
9+
s16 unk2;
10+
Process* processInstance;
11+
void (*destructor)();
12+
} unkProcessStruct;
13+
14+
extern s16 D_800A1774_A2374;
15+
extern s16 D_800A1776_A2376;
16+
extern s16 D_800A1778_A2378;
17+
extern unkProcessStruct* D_800A177C_A237C;
18+
extern s16 D_800A1780_A2380;
19+
extern s8 D_800D1710_D2310;
20+
21+
void omDestroyPrcObj(void);
22+
void func_8000BA00_C600(void);
23+
void func_8000BBFC_C7FC(s32, s16);
24+
void func_800166D0_172D0(void);
25+
void func_8001AFE4_1BBE4(void);
26+
void func_80021AF4_226F4(void);
27+
void omInsertObj(omObjData * obj);
28+
void omAddMember(u16 group, omObjData * obj);
29+
void func_8004A354_4AF54(omObjData*);
30+
void func_8004A444_4B044(s32);
31+
void func_8004A468_4B068(u16, u16, u16);
32+
void func_8004CEA4_4DAA4();
33+
extern u8 D_800A16B0_A22B0[][2];
34+
extern u8 D_800A1740_A2340[][2];
35+
extern u16 D_800A1756_A2356;
36+
extern s32 omprevovl;
37+
extern u16 omovlstat;
38+
extern s8 D_800A176C_A236C;
39+
extern omObjData* omobjall;
40+
extern u8 D_800A1784_A2384;
41+
extern s16 D_800A18A8_A24A8[][2];
42+
extern u8 D_800A18B7_A24B7[];
43+
extern s16 D_800A1908_A2508;
44+
extern s16 D_800A190C_A250C;
45+
extern u16 D_800B23C2_B2FC2;
46+
extern u16 D_800B23C4_B2FC4;
47+
extern s16 D_800B23C6_B2FC6;
48+
extern s16 D_800B23C8_B2FC8;
49+
extern u16 D_800D1100_D1D00;
50+
51+
typedef struct UnkomOvl {
52+
u16 unk_00;
53+
u16 unk_02;
54+
u16 unk_04;
55+
char unk_06[2]; //unused pad?
56+
} UnkomOvl;
57+
58+
typedef struct {
59+
u16 next_idx;
60+
u16 max_objs;
61+
u16 num_objs;
62+
u16* next;
63+
omObjData** objs;
64+
} omObjGroup;
65+
66+
extern UnkomOvl D_800A1920_A2520[];
67+
68+
extern f32 D_800CB890_CC490;
69+
extern s16 omobjlast;
70+
extern s16 ommaxobjs;
71+
extern u8 D_800CCF52_CDB52;
72+
extern s16 omnumobjs;
73+
extern f32 D_800CCF98_CDB98[];
74+
extern omObjGroup omgroup[];
75+
extern u16 D_800CD2F4_CDEF4;
76+
extern s32 omovl;
77+
extern u16 D_800CE202_CEE02;
78+
extern s16 D_800D0A3A_D163A;
79+
extern s32 D_800D2118_D2D18;
80+
extern u16 D_800D4082_D4C82;
81+
extern f32 D_800D4198_D4D98[];
82+
extern f32 D_800D5210_D5E10;
83+
extern u16 D_800D530C_D5F0C;
84+
extern s16 omobjfirst;
85+
extern s32 D_800D6A40_D7640;
86+
extern u16 D_800D6A56_D7656;
87+
extern s8 D_800D6A90_D7690;
88+
extern s16 omnextidx;
89+
extern s8 D_800A1762_A2362;
90+
extern u16 D_800B23C0_B2FC0;
91+
extern u16 D_800CD050_CDC50;
92+
extern s16 omovlhisidx;
93+
extern omOvlHisData omovlhis[12];
94+
extern omOvlHisData D_800D20F0_D2CF0[5];
95+
96+
RECOMP_PATCH s32 omOvlCallEx(s32 ovlID, s16 event, u16 stat) {
97+
recomp_printf("omOvlCallEx called\n");
98+
omOvlHisData* history;
99+
100+
// history is full, cannot call overlay
101+
if (omovlhisidx >= ARRAY_COUNT(omovlhis)) {
102+
return FALSE;
103+
}
104+
105+
history = &omovlhis[++omovlhisidx];
106+
history->overlayID = ovlID;
107+
history->event = event;
108+
history->stat = stat;
109+
omOvlGotoEx(ovlID, event, stat);
110+
return TRUE;
111+
}
112+
113+
RECOMP_PATCH void omOvlGotoEx(s32 ovlID, s16 event, u16 stat) {
114+
u8 var_a0_2;
115+
u8 var_v1;
116+
117+
recomp_printf("omOvlGotoEx called\n");
118+
119+
if (omovl != selmenu && omovl != selmenu2) {
120+
omprevovl = omovl;
121+
D_800A1756_A2356 = D_800CE202_CEE02;
122+
}
123+
124+
D_800A176C_A236C = 1;
125+
omovl = ovlID;
126+
omovlevtno = event;
127+
omovlstat = stat;
128+
D_800D0A3A_D163A = 0;
129+
130+
if (stat & 0x40 && D_800CCF52_CDB52 != 2) {
131+
func_8004A444_4B044(2);
132+
} else if (stat & 0x80 && (D_800CCF52_CDB52 != 3)) {
133+
func_8004A444_4B044(3);
134+
}
135+
136+
if ((D_800D4082_D4C82 != D_800A1920_A2520[ovlID].unk_00) || (D_800CD2F4_CDEF4 != D_800A1920_A2520[ovlID].unk_02) || (D_800D6A56_D7656 != D_800A1920_A2520[ovlID].unk_04)) {
137+
func_8004A468_4B068(D_800A1920_A2520[ovlID].unk_00, D_800A1920_A2520[ovlID].unk_02, D_800A1920_A2520[ovlID].unk_04);
138+
}
139+
140+
if (!(stat & 0x2000)) {
141+
if (stat & 2) {
142+
var_a0_2 = D_800A1740_A2340[GwSystem.current_board_index][0];
143+
var_v1 = D_800A1740_A2340[GwSystem.current_board_index][1];
144+
} else if (stat & 4) {
145+
var_a0_2 = D_800A16B0_A22B0[GwSystem.minigame_index - 1][0];
146+
var_v1 = D_800A16B0_A22B0[GwSystem.minigame_index - 1][1];
147+
} else {
148+
var_a0_2 = 1;
149+
var_v1 = 20;
150+
}
151+
152+
if (stat & 0x100) {
153+
var_a0_2 = 1;
154+
var_v1 = 20;
155+
} else if (stat & 0x200) {
156+
var_a0_2 = 2;
157+
var_v1 = 20;
158+
} else if (stat & 0x400) {
159+
var_a0_2 = 3;
160+
var_v1 = 20;
161+
} else if (stat & 0x800) {
162+
var_a0_2 = 4;
163+
var_v1 = 20;
164+
} else if (stat & 0x1000) {
165+
var_a0_2 = 5;
166+
var_v1 = 20;
167+
}
168+
169+
D_800A1784_A2384 = var_v1;
170+
D_800A1908_A2508 = var_a0_2;
171+
}
172+
D_800A190C_A250C = 0;
173+
}
174+
175+
int dummyData1 = 1;
176+
int dummyBss1;

patches/print.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include "patches.h"
2+
#include "misc_funcs.h"
3+
4+
#define va_list __builtin_va_list
5+
#define va_start __builtin_va_start
6+
#define va_arg __builtin_va_arg
7+
#define va_end __builtin_va_end
8+
9+
int dummyData2 = 1;
10+
int dummyBss2;
11+
12+
void dummyFunc(void)
13+
{
14+
return;
15+
}
16+
17+
typedef unsigned int size_t;
18+
typedef char *outfun(char*,const char*,size_t);
19+
20+
int _Printf(outfun prout, char *arg, const char *fmt, va_list args);
21+
22+
char* proutPrintf(char* dst, const char* fmt, size_t size) {
23+
recomp_puts(fmt, size);
24+
return (void*)1;
25+
}
26+
27+
int recomp_printf(const char* fmt, ...) {
28+
va_list args;
29+
va_start(args, fmt);
30+
31+
int ret = _Printf(&proutPrintf, NULL, fmt, args);
32+
33+
va_end(args);
34+
35+
return ret;
36+
}

patches/syms.ld

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@ recomp_puts = 0x8F000000;
55
recomp_exit = 0x8F000004;
66
osPiReadIo_recomp = 0x8F000008;
77
setjmp_recomp = 0x8F00000C;
8-
longjmp_recomp = 0x8F000010;
8+
longjmp_recomp = 0x8F000010;
9+
__divdi3_recomp = 0x8F000014;
10+
__umoddi3_recomp = 0x8F000018;
11+
__udivdi3_recomp = 0x8F00001C;

0 commit comments

Comments
 (0)