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 ;
0 commit comments