Skip to content

Commit 9879422

Browse files
committed
Match func_8005CC74, func_8005CDFC
1 parent 98cae5d commit 9879422

File tree

2 files changed

+68
-48
lines changed

2 files changed

+68
-48
lines changed

include/sys/gfx/gx.h

+24-23
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ typedef struct _UnkHeapVidStruct {
4949
f32 unk0x5c;
5050
} UnkHeapVidStruct;
5151

52-
#define UNKNOWN_VIDEO_STRUCT_2_SIZE 0x14
53-
52+
// size: 0x14
5453
typedef struct _UnkVidStruct2 {
5554
/*0000*/ f32 unk0x0;
5655
/*0004*/ f32 unk0x4;
@@ -60,28 +59,33 @@ typedef struct _UnkVidStruct2 {
6059
/*0010*/ f32 *unk0x10;
6160
} UnkVidStruct2;
6261

63-
#define UNKNOWN_VIDEO_STRUCT_SIZE 0x90
62+
typedef struct {
63+
s16 x;
64+
s16 y;
65+
s16 z;
66+
s16 unk6;
67+
s16 unk8;
68+
s16 unka;
69+
s8 unkc;
70+
s8 unkd;
71+
s8 unke;
72+
s8 unkf;
73+
} UnkVidStruct_0x18;
74+
75+
typedef struct {
76+
u8 _unk0x0[0x46];
77+
s16 unk0x46;
78+
} UnkVidStruct4;
6479

80+
// size: 0x90
6581
typedef struct _UnkVidStruct {
6682
Gfx dl;
6783
u8 unk0x8_pad[16];
68-
s16 unk0x18;
69-
s16 unk0x1a;
70-
s16 unk0x1c;
71-
u8 unk0x1e_pad[10];
72-
s16 unk0x28;
73-
s16 unk0x2a;
74-
s16 unk0x2c;
75-
u8 unk0x2e_pad[10];
76-
s16 unk0x38;
77-
s16 unk0x3a;
78-
s16 unk0x3c;
79-
u8 unk0x3e_pad[10];
80-
s16 unk0x48[4];
81-
u8 unk0x4c_pad[40];
84+
UnkVidStruct_0x18 unk0x18[4];
85+
u8 unk0x58_pad[0x20];
8286
f32 unk0x78;
8387
f32 unk0x7c;
84-
void *unk0x80;
88+
UnkVidStruct4 *unk0x80;
8589
OSViMode *viMode;
8690
s16 unk0x88;
8791
u8 unk0x8a_padd[6];
@@ -92,11 +96,6 @@ typedef struct _UnkVidStruct3 {
9296
s32 unk0x4;
9397
} UnkVidStruct3;
9498

95-
typedef struct {
96-
u8 _unk0x0[0x46];
97-
s16 unk0x46;
98-
} UnkVidStruct4;
99-
10099
// Length of gUnknownVideoStructs
101100
#define UNKNOWN_VIDEO_STRUCTS_COUNT 40
102101

@@ -125,6 +124,8 @@ extern s32 D_800BCC68;
125124
extern s32 D_800BCC6C;
126125
extern u32 D_800BCC70;
127126
extern u8 D_800BCC78;
127+
extern f32 D_800BCC80;
128+
extern f32 D_800BCC84;
128129

129130
extern OSViMode gOSViModeCustom;
130131

src/video.c

+44-25
Original file line numberDiff line numberDiff line change
@@ -177,42 +177,61 @@ void func_8005CB10(Gfx **gdl, UnkVidStruct4 *param2) {
177177
static s32 D_80092FFC = 1;
178178
static s32 D_80093000 = 0;
179179
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CC74.s")
180-
180+
#if 0
181181
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CD80.s")
182+
#else
183+
void func_8005CD80() {
184+
s32 i;
185+
s32 k;
186+
UnkVidStruct_0x18 *ptr;
182187

183-
#if 1
188+
for (i = 0; i < UNKNOWN_VIDEO_STRUCTS_COUNT; i++) {
189+
ptr = &gUnknownVideoStructs[i].unk0x18[0];
190+
191+
if (gUnknownVideoStructs[i].viMode != NULL) {
192+
gUnknownVideoStructs[i].unk0x88 -= 5;
193+
194+
if (gUnknownVideoStructs[i].unk0x88 < 0) {
195+
gUnknownVideoStructs[i].unk0x88 = 0;
196+
}
197+
198+
for (k = 0; k < 4; k++) {
199+
(ptr++)->unkf = gUnknownVideoStructs[i].unk0x88;
200+
}
201+
}
202+
}
203+
}
204+
#endif
205+
206+
#if 0
184207
#pragma GLOBAL_ASM("asm/nonmatchings/video/func_8005CDFC.s")
185208
#else
186-
// Functionally equivalent, mainly regalloc, see TODO
187209
void func_8005CDFC(int _) {
188210
float var1;
189211
float var2;
190-
s16 *var3;
191212
s32 i;
213+
s32 k;
214+
UnkVidStruct_0x18 *ptr;
215+
216+
var1 = 0;
217+
var2 = 0;
192218

193219
for (i = 0; i < UNKNOWN_VIDEO_STRUCTS_COUNT; i++) {
194-
if (gUnknownVideoStructs[i].viMode == NULL) {
195-
continue;
220+
if (gUnknownVideoStructs[i].viMode != NULL) {
221+
ptr = &gUnknownVideoStructs[i].unk0x18[0];
222+
223+
var1 = gWorldX - gUnknownVideoStructs[i].unk0x78;
224+
var2 = gWorldZ - gUnknownVideoStructs[i].unk0x7c;
225+
226+
gUnknownVideoStructs[i].unk0x78 += var1;
227+
gUnknownVideoStructs[i].unk0x7c += var2;
228+
229+
for (k = 0; k < 4; k++) {
230+
ptr->x -= var1;
231+
ptr->z -= var2;
232+
ptr++;
233+
}
196234
}
197-
198-
// TODO: The order of loads and stores here are slightly out of order
199-
var1 = gWorldX - gUnknownVideoStructs[i].unk0x78;
200-
var2 = gWorldZ - gUnknownVideoStructs[i].unk0x7c;
201-
202-
var3 = &gUnknownVideoStructs[i].unk0x48[0];
203-
204-
gUnknownVideoStructs[i].unk0x78 += var1;
205-
gUnknownVideoStructs[i].unk0x7c += var2;
206-
207-
gUnknownVideoStructs[i].unk0x18 -= var1;
208-
gUnknownVideoStructs[i].unk0x1c -= var2;
209-
gUnknownVideoStructs[i].unk0x28 -= var1;
210-
gUnknownVideoStructs[i].unk0x2c -= var2;
211-
gUnknownVideoStructs[i].unk0x38 -= var1;
212-
gUnknownVideoStructs[i].unk0x3c -= var2;
213-
214-
var3[2] = var3[2] - var2;
215-
var3[0] = var3[0] - var1;
216235
}
217236
}
218237
#endif

0 commit comments

Comments
 (0)