1
1
#include "common.h"
2
2
3
+ UnkHeapVidStruct * D_800BCC10 ;
4
+ UnkVidStruct2 D_800BCC18 [4 ]; // size:0x50
5
+
3
6
// func_8005BC38 is from segment_5C470
4
7
/**
5
8
* If param1 isn't null, sets it to gPossiblyScreenWidthOrHeight.
@@ -13,39 +16,32 @@ void initialize_framebuffers(int someBool, s32 width, s32 height);
13
16
void swap_framebuffer_pointers ();
14
17
void set_custom_vi_mode ();
15
18
16
- #if 1
19
+ #if 0
17
20
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005C780.s")
18
21
#else
19
- // Functionally equivalent, see TODOs
20
22
void func_8005C780 () {
21
- UnkVidStruct2 * vidStruct2 ;
22
- UnkVidStruct * vidStruct ;
23
- UnkHeapVidStruct * vidHeapStruct ;
24
23
s32 i ;
25
24
26
- vidHeapStruct = D_800BCC10 ;
27
-
28
- if (vidHeapStruct != NULL ) {
29
- free (vidHeapStruct );
25
+ if (D_800BCC10 != NULL ) {
26
+ free (D_800BCC10 );
30
27
}
31
28
32
29
D_800BCC10 = malloc (UNKNOWN_HEAP_VIDEO_STRUCT_SIZE , 0x13 , 0 );
33
30
34
31
for (i = 0 ; i < UNKNOWN_VIDEO_STRUCTS_COUNT ; i ++ )
35
32
{
36
- gUnknownVideoStructs [i ].ptrToUnknown1 = (UnkHeapVidStruct * )0xdf000000 ;
37
- gUnknownVideoStructs [i ].ptrToUnknown2 = NULL ;
33
+ gSPEndDisplayList (& gUnknownVideoStructs [i ].dl );
38
34
gUnknownVideoStructs [i ].viMode = NULL ;
39
35
gUnknownVideoStructs [i ].unk0x88 = 0 ;
40
36
}
41
37
42
38
for (i = 0 ; i < 4 ; i ++ )
43
39
{
44
40
D_800BCC18 [i ].unk0x10 = NULL ;
45
- D_800BCC18 [i ].unk0x0 = 0.0f ;
46
- D_800BCC18 [i ].unk0x4 = 0.0f ;
41
+ D_800BCC18 [i ].unk0x0 = 0 ;
42
+ D_800BCC18 [i ].unk0x4 = 0 ;
43
+ D_800BCC18 [i ].unk0x8 = 0 ;
47
44
D_800BCC18 [i ].unk0xc = 0 ;
48
- D_800BCC18 [i ].unk0x8 = 0.0f ;
49
45
}
50
46
51
47
D_800BCC10 -> unk0x0 = -3.0f ;
@@ -54,18 +50,21 @@ void func_8005C780() {
54
50
D_800BCC10 -> unk0xc = -3.0f ;
55
51
D_800BCC10 -> unk0x10 = 0.0f ;
56
52
D_800BCC10 -> unk0x14 = 3.0f ;
53
+
57
54
D_800BCC10 -> unk0x18 = 3.0f ;
58
55
D_800BCC10 -> unk0x1c = 0.0f ;
59
56
D_800BCC10 -> unk0x20 = 3.0f ;
60
57
D_800BCC10 -> unk0x24 = 3.0f ;
61
58
D_800BCC10 -> unk0x28 = 0.0f ;
62
59
D_800BCC10 -> unk0x2c = -3.0f ;
60
+
63
61
D_800BCC10 -> unk0x30 = -3.0f ;
64
62
D_800BCC10 -> unk0x34 = 0.0f ;
65
63
D_800BCC10 -> unk0x38 = -3.0f ;
66
64
D_800BCC10 -> unk0x3c = -3.0f ;
67
65
D_800BCC10 -> unk0x40 = 0.0f ;
68
66
D_800BCC10 -> unk0x44 = 3.0f ;
67
+
69
68
D_800BCC10 -> unk0x48 = 3.0f ;
70
69
D_800BCC10 -> unk0x4c = 0.0f ;
71
70
D_800BCC10 -> unk0x50 = 3.0f ;
@@ -81,61 +80,26 @@ void func_8005C780() {
81
80
}
82
81
#endif
83
82
84
- #if 1
83
+ #if 0
85
84
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005C998.s")
86
85
void func_8005C998 ();
87
86
#else
88
- // Functionally equivalent, see TODOs
89
- void _func_8005C998 () {
90
- UnkVidStruct2 * vidStruct2 ;
91
- UnkVidStruct * vidStruct = & gUnknownVideoStructs [0 ];
92
-
93
- do {
94
- vidStruct -> ptrToUnknown1 = (UnkHeapVidStruct * )0xdf000000 ;
95
- vidStruct -> ptrToUnknown2 = NULL ;
96
- goto label_1 ; label_1 : // TODO: This probably shouldn't be necessary
97
- vidStruct -> viMode = NULL ;
98
- vidStruct -> unk0x88 = 0 ;
99
- } while (++ vidStruct < & gUnknownVideoStructs [UNKNOWN_VIDEO_STRUCTS_COUNT ]);
100
-
101
- // TODO: Figure out how to get this to match in a way that it weaves in `lui at,0x800c`
102
- vidStruct2 = & D_800BCC18 [0 ];
103
- vidStruct2 -> unk0x10 = 0 ;
104
- // lui at,0x800c
105
- vidStruct2 -> unk0x0 = 0.0f ;
106
- vidStruct2 -> unk0x4 = 0.0f ;
107
- // lui at,0x800c
108
- vidStruct2 -> unk0xc = (u8 )0 ;
109
- vidStruct2 -> unk0x8 = 0.0f ;
110
- // lui at,0x800c
111
- vidStruct2 = & D_800BCC18 [1 ];
112
- vidStruct2 -> unk0x10 = 0 ;
113
- // lui at,0x800c
114
- vidStruct2 -> unk0x0 = 0.0f ;
115
- // lui at,0x800c
116
- vidStruct2 -> unk0x4 = 0.0f ;
117
- vidStruct2 -> unk0x8 = 0.0f ;
118
- // lui at,0x800c
119
- vidStruct2 -> unk0xc = (u8 )0 ;
120
- // lui at,0x800c
121
- vidStruct2 = & D_800BCC18 [2 ];
122
- vidStruct2 -> unk0x10 = 0 ;
123
- // lui at,0x800c
124
- vidStruct2 -> unk0x0 = 0.0f ;
125
- vidStruct2 -> unk0x4 = 0.0f ;
126
- // lui at,0x800c
127
- vidStruct2 -> unk0xc = (u8 )0 ;
128
- vidStruct2 -> unk0x8 = 0.0f ;
129
- // lui at,0x800c
130
- vidStruct2 = & D_800BCC18 [3 ];
131
- vidStruct2 -> unk0x10 = 0 ;
132
- // lui at,0x800c
133
- vidStruct2 -> unk0x0 = 0.0f ;
134
- // lui at,0x800c
135
- vidStruct2 -> unk0x4 = 0.0f ;
136
- vidStruct2 -> unk0x8 = 0.0f ;
137
- // lui at,0x800c
138
- vidStruct2 -> unk0xc = (u8 )0 ;
87
+ void func_8005C998 () {
88
+ s32 i ;
89
+
90
+ for (i = 0 ; i < UNKNOWN_VIDEO_STRUCTS_COUNT ; i ++ ) {
91
+ gSPEndDisplayList (& gUnknownVideoStructs [i ].dl );
92
+ gUnknownVideoStructs [i ].viMode = NULL ;
93
+ gUnknownVideoStructs [i ].unk0x88 = 0 ;
94
+ }
95
+
96
+ for (i = 0 ; i < 4 ; i ++ ) {
97
+ D_800BCC18 [i ].unk0x10 = 0 ;
98
+ D_800BCC18 [i ].unk0x0 = 0.0f ;
99
+ D_800BCC18 [i ].unk0x4 = 0.0f ;
100
+ D_800BCC18 [i ].unk0x8 = 0.0f ;
101
+ D_800BCC18 [i ].unk0xc = 0 ;
102
+ }
139
103
}
140
104
#endif
141
105
@@ -151,41 +115,62 @@ void func_8005CA5C(u32 param1) {
151
115
}
152
116
#endif
153
117
154
- #if 1
118
+ #if 0
155
119
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CA88.s")
156
120
#else
157
- // Functionally equivalent, not quite regalloc only but extremely close
158
- void func_8005CA88 (f32 * a0 , f32 * a1 , u8 a2 )
159
- {
160
- s32 temp1 ;
161
- s32 temp2 ;
162
-
163
- if (D_800BCC78 != 0 )
164
- {
165
- temp1 = D_80092FF8 ;
166
-
167
- D_800BCC18 [temp1 ].unk0x10 = a0 ;
168
- D_800BCC18 [temp1 ].unk0x0 = a1 [0 ];
121
+ void func_8005CA88 (f32 * a0 , f32 * a1 , u8 a2 ) {
122
+ static s32 D_80092FF8 = 0 ;
169
123
170
- temp2 = temp1 + 1 ;
171
- if (1 ); // TODO: skeptical about this
124
+ if (D_800BCC78 != 0 ) {
125
+ D_800BCC18 [D_80092FF8 ].unk0x10 = a0 ;
126
+ D_800BCC18 [D_80092FF8 ].unk0x0 = a1 [0 ];
127
+ D_800BCC18 [D_80092FF8 ].unk0x4 = a0 [4 ] + a1 [1 ];
128
+ D_800BCC18 [D_80092FF8 ].unk0x8 = a1 [2 ];
129
+ D_800BCC18 [D_80092FF8 ].unk0xc = a2 ;
172
130
173
- D_800BCC18 [temp1 ].unk0x4 = a0 [4 ] + a1 [1 ];
174
- D_800BCC18 [temp1 ].unk0x8 = a1 [2 ];
175
- D_800BCC18 [temp1 ].unk0xc = a2 ;
131
+ D_80092FF8 = D_80092FF8 + 1 ;
176
132
177
- D_80092FF8 = temp2 ;
178
-
179
- if (D_80092FF8 == 4 )
180
- {
133
+ if (D_80092FF8 == 4 ) {
181
134
D_80092FF8 = 0 ;
182
135
}
183
136
}
184
137
}
185
138
#endif
186
139
140
+ #if 0
187
141
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CB10.s")
142
+ #else
143
+ void func_8005CB10 (Gfx * * gdl , UnkVidStruct4 * param2 ) {
144
+ s32 i ;
145
+ Texture * tex ;
146
+
147
+ switch (param2 -> unk0x46 ) {
148
+ case 0 :
149
+ tex = D_800BCC68 ;
150
+ break ;
151
+ case 0x1f :
152
+ tex = D_800BCC6C ;
153
+ break ;
154
+ default :
155
+ tex = D_800BCC68 ;
156
+ break ;
157
+ }
188
158
159
+ set_textures_on_gdl (gdl , tex , NULL , 0x1a , 0 , 0 , 1 );
160
+
161
+ i = 0 ;
162
+
163
+ while (i < UNKNOWN_VIDEO_STRUCTS_COUNT ) {
164
+ if (param2 == gUnknownVideoStructs [i ].unk0x80 ) {
165
+ gSPDisplayList ((* gdl )++ , & gUnknownVideoStructs [i ].dl );
166
+ }
167
+
168
+ i ++ ;
169
+ }
170
+ }
171
+ #endif
172
+
173
+ static s32 D_80092FFC = 1 ;
189
174
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CC74.s")
190
175
191
176
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CD80.s")
@@ -195,37 +180,35 @@ void func_8005CA88(f32 *a0, f32 *a1, u8 a2)
195
180
#else
196
181
// Functionally equivalent, mainly regalloc, see TODO
197
182
void func_8005CDFC (int _ ) {
198
- UnkVidStruct * vidStruct ;
199
183
float var1 ;
200
184
float var2 ;
201
185
s16 * var3 ;
186
+ s32 i ;
202
187
203
- vidStruct = & gUnknownVideoStructs [0 ];
204
-
205
- do {
206
- if (vidStruct -> viMode == NULL ) {
188
+ for (i = 0 ; i < UNKNOWN_VIDEO_STRUCTS_COUNT ; i ++ ) {
189
+ if (gUnknownVideoStructs [i ].viMode == NULL ) {
207
190
continue ;
208
191
}
209
192
210
193
// TODO: The order of loads and stores here are slightly out of order
211
- var1 = gWorldX - vidStruct -> unk0x78 ;
212
- var2 = gWorldZ - vidStruct -> unk0x7c ;
194
+ var1 = gWorldX - gUnknownVideoStructs [ i ]. unk0x78 ;
195
+ var2 = gWorldZ - gUnknownVideoStructs [ i ]. unk0x7c ;
213
196
214
- var3 = & vidStruct -> unk0x48 [0 ];
197
+ var3 = & gUnknownVideoStructs [ i ]. unk0x48 [0 ];
215
198
216
- vidStruct -> unk0x78 = vidStruct -> unk0x78 + var1 ;
217
- vidStruct -> unk0x7c = vidStruct -> unk0x7c + var2 ;
218
-
219
- vidStruct -> unk0x18 = vidStruct -> unk0x18 - var1 ;
220
- vidStruct -> unk0x1c = vidStruct -> unk0x1c - var2 ;
221
- vidStruct -> unk0x28 = vidStruct -> unk0x28 - var1 ;
222
- vidStruct -> unk0x2c = vidStruct -> unk0x2c - var2 ;
223
- vidStruct -> unk0x38 = vidStruct -> unk0x38 - var1 ;
224
- vidStruct -> unk0x3c = vidStruct -> unk0x3c - var2 ;
199
+ gUnknownVideoStructs [ i ]. unk0x78 += var1 ;
200
+ gUnknownVideoStructs [ i ]. unk0x7c += var2 ;
201
+
202
+ gUnknownVideoStructs [ i ]. unk0x18 -= var1 ;
203
+ gUnknownVideoStructs [ i ]. unk0x1c -= var2 ;
204
+ gUnknownVideoStructs [ i ]. unk0x28 -= var1 ;
205
+ gUnknownVideoStructs [ i ]. unk0x2c -= var2 ;
206
+ gUnknownVideoStructs [ i ]. unk0x38 -= var1 ;
207
+ gUnknownVideoStructs [ i ]. unk0x3c -= var2 ;
225
208
226
209
var3 [2 ] = var3 [2 ] - var2 ;
227
210
var3 [0 ] = var3 [0 ] - var1 ;
228
- } while ( ++ vidStruct != & gUnknownVideoStructs [ UNKNOWN_VIDEO_STRUCTS_COUNT ]);
211
+ }
229
212
}
230
213
#endif
231
214
0 commit comments