Files
banjo-kazooie/src/core2/code_63410.c
2022-07-15 17:09:41 -05:00

102 lines
2.8 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
typedef struct{
s16 unk0[3];
} Struct_core2_63410_2;
typedef struct {
Struct_core2_63410_2 *unk0;
f32 unk4[3];
f32 unk10[3];
} Struct_core2_63410_1;
typedef struct {
Struct_core2_63410_1 *unk0;
Struct_core2_63410_1 *unk4;
Struct_core2_63410_1 *unk8;
} Struct_core2_63410_0;
/* .code */
void func_802EA3A0(Struct_core2_63410_0 *arg0){
//clears vec
arg0->unk4 = arg0->unk0;
}
s32 func_802EA3AC(Struct_core2_63410_0 *arg0, s32 indx, f32 arg2[3], f32 arg3[3]){
//get elem at indx
Struct_core2_63410_1 *phi_v1;
phi_v1 = &arg0->unk0[indx];
arg2[0] = phi_v1->unk4[0];
arg2[1] = phi_v1->unk4[1];
arg2[2] = phi_v1->unk4[2];
arg3[0] = phi_v1->unk10[0];
arg3[1] = phi_v1->unk10[1];
arg3[2] = phi_v1->unk10[2];
return phi_v1->unk0;
}
s32 func_802EA3F8(Struct_core2_63410_0 *arg0){
//return size of vector
return arg0->unk4 - arg0->unk0;
}
void func_802EA418(Struct_core2_63410_0 **arg0, Struct_core2_63410_2 *arg1, f32 arg2[3], f32 arg3[3]) {
/* adds elem (arg1) to vec (arg0), resize if end_ptr == capacity_ptr */
Struct_core2_63410_1 *phi_v1;
Struct_core2_63410_0 *phi_s1;
s32 sp34;
s32 sp20;
//check is elem already exists in vec
phi_s1 = *arg0;
for(phi_v1 = phi_s1->unk0; phi_v1 < phi_s1->unk4; phi_v1++){
if ( (phi_v1->unk0->unk0[0] == arg1->unk0[0])
&& (phi_v1->unk0->unk0[1] == arg1->unk0[1])
&& (phi_v1->unk0->unk0[2] == arg1->unk0[2])
){
return;
}
}
//check if vector capacity needs to increas
if (phi_s1->unk4 == phi_s1->unk8) {
sp34 = (phi_s1->unk8 - phi_s1->unk0);
sp20 = sp34 * 2;
phi_s1 = (Struct_core2_63410_0 *)realloc(phi_s1, sizeof(Struct_core2_63410_0) + (sizeof(Struct_core2_63410_1)*sp20));
phi_s1->unk0 = (Struct_core2_63410_1 *)(phi_s1 + 1);
phi_s1->unk4 = phi_s1->unk0 + sp34;
phi_s1->unk8 = phi_s1->unk0 + sp20;
(*arg0) = phi_s1;
}
//copy arg1, arg2, arg3 over;
phi_s1->unk4->unk0 = arg1;
phi_s1->unk4->unk4[0] = arg2[0];
phi_s1->unk4->unk4[1] = arg2[1];
phi_s1->unk4->unk4[2] = arg2[2];
phi_s1->unk4->unk10[0] = arg3[0];
phi_s1->unk4->unk10[1] = arg3[1];
phi_s1->unk4->unk10[2] = arg3[2];
phi_s1->unk4++;
}
void func_802EA5C4(Struct_core2_63410_0 *arg0){
//free vec
free(arg0);
}
Struct_core2_63410_0 *func_802EA5E4(void){
//new
Struct_core2_63410_0 *phi_v0;
phi_v0 = (Struct_core2_63410_0 *)malloc(sizeof(Struct_core2_63410_0) + 2 * sizeof(Struct_core2_63410_1));
phi_v0->unk0 = (Struct_core2_63410_1 *)(phi_v0 + 1);
phi_v0->unk4 = phi_v0->unk0;
phi_v0->unk8 = phi_v0->unk0 + 2;
return phi_v0;
}