Files
banjo-kazooie/src/core2/code_C4F40.c
2022-12-08 17:17:59 -06:00

159 lines
6.0 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_8034CB64(Struct70s *, s32, BKModel *, s32);
extern void func_8034CD30(Struct70s *, s32, BKModel *, s32);
extern void func_8034CF74(Struct70s *, s32, BKModel *, s32);
extern void func_8034D170(Struct70s *, s32, BKModel *, s32);
extern void func_8034DD74(Struct70s *, s32, BKModel *, s32);
extern void func_8034E6A8(Struct70s *, s32, BKModel *, s32);
extern void func_8034EE2C(Struct70s *, s32, BKModel *, s32);
extern void func_8034F570(Struct70s *, s32, BKModel *, s32);
extern void func_8034CB9C(Struct70s *, BKModel *, s32);
extern void func_8034CF90(Struct70s *, BKModel *, s32);
extern void func_8034CD8C(Struct70s *, BKModel *, s32);
extern void func_8034D048(Struct70s *, BKModel *, s32);
extern void func_8034D194(Struct70s *, BKModel *, s32);
extern void func_8034E26C(Struct70s *, BKModel *, s32);
extern void func_8034E8E4(Struct70s *, BKModel *, s32);
extern void func_8034EF60(Struct70s *, BKModel *, s32);
extern void func_8034F5B0(Struct70s *, BKModel *, s32);
extern void func_8034CB5C(Struct70s *);
extern void func_8034CD28(Struct70s *);
extern void func_8034CF6C(Struct70s *);
extern void func_8034D168(Struct70s *);
extern void func_8034DD48(Struct70s *);
extern void func_8034E6A0(Struct70s *);
extern void func_8034EE24(Struct70s *);
extern void func_8034F568(Struct70s *);
typedef struct{
void (*unk0)(Struct70s *, s32, BKModel *, s32);
void (*unk4)(Struct70s *, BKModel *, s32);
void (*unk8)(Struct70s *); //free function
}Struct_core2_C4F40_1;
/* .data */
Struct_core2_C4F40_1 D_80371FC0[] = {
{func_8034CF74, func_8034CF90, func_8034CF6C},
{func_8034CF74, func_8034D048, func_8034CF6C},
{func_8034D170, func_8034D194, func_8034D168},
{func_8034DD74, func_8034E26C, func_8034DD48},
{func_8034E6A8, func_8034E8E4, func_8034E6A0},
{func_8034CB64, func_8034CB9C, func_8034CB5C},
{func_8034EE2C, func_8034EF60, func_8034EE24},
{func_8034CD30, func_8034CD8C, func_8034CD28},
{func_8034F570, func_8034F5B0, func_8034F568}
};
/* .bss */
vector(Struct6Es) *D_80386130;
/* .code */
Struct6Es *func_8034BED0(ActorMarker *marker, s32 arg1, s32 arg2, s32 arg3) {
Struct6Es *sp1C;
s32 temp_a2;
sp1C = (Struct6Es *)vector_pushBackNew(&marker->unk4C);
sp1C->unk0 = arg2;
sp1C->unk4 = marker->unk48;
sp1C->unk8 = arg1;
D_80371FC0[sp1C->unk0].unk0(&sp1C->unkC, arg3, sp1C->unk4, sp1C->unk8);
return sp1C;
}
void func_8034BF54(ActorMarker *marker) {
Struct6Es *begin_ptr;
Struct6Es *end_ptr;
Struct6Es *i_ptr;
end_ptr = (Struct6Es *)vector_getEnd(marker->unk4C);
begin_ptr = (Struct6Es *)vector_getBegin(marker->unk4C);
for(i_ptr = begin_ptr; i_ptr < end_ptr; i_ptr++){
D_80371FC0[i_ptr->unk0].unk8(&i_ptr->unkC);
}
vector_free(marker->unk4C);
}
void func_8034BFF8(ActorMarker *marker) {
BKMeshList *sp2C;
BKMesh *phi_s1;
s32 phi_s2;
if (marker->unk48 != NULL) {
marker->unk4C = vector_new(sizeof(Struct6Es), 0);
sp2C = BKModel_getMeshList(marker->unk48);
phi_s1 = (BKMesh *)(sp2C + 1);
for(phi_s2 = 0; phi_s2 < sp2C->meshCount_0; phi_s2++){
if ((phi_s1->uid_0 >= 0x65) && (phi_s1->uid_0 < 0xC8)) {
func_8034BED0(marker, phi_s1->uid_0, 2, phi_s1->uid_0 - 0x64);
} else if ((phi_s1->uid_0 >= 0xC8) && (phi_s1->uid_0 < 0x12C)) {
if (func_802E4A08()) {
func_8034BED0(marker, phi_s1->uid_0, 1, phi_s1->uid_0 - 0xC8);
} else {
func_8034BED0(marker, phi_s1->uid_0, 0, phi_s1->uid_0 - 0xC8);
}
} else if ((phi_s1->uid_0 >= 0x12C) && (phi_s1->uid_0 < 0x190)) {
func_8034BED0(marker, phi_s1->uid_0, 4, phi_s1->uid_0 - 0x12C);
} else if ((phi_s1->uid_0 >= 0x190) && (phi_s1->uid_0 < 0x1F4)) {
func_8034BED0(marker, phi_s1->uid_0, 3, phi_s1->uid_0 - 0x190);
} else if ((phi_s1->uid_0 >= 0x1F4) && (phi_s1->uid_0 < 0x258)) {
func_8034BED0(marker, phi_s1->uid_0, 5, phi_s1->uid_0 - 0x1F4);
} else if ((phi_s1->uid_0 >= 0x258) && (phi_s1->uid_0 < 0x2BC)) {
func_8034BED0(marker, phi_s1->uid_0, 3, phi_s1->uid_0 - 0x258);
} else if ((phi_s1->uid_0 >= 0x2BC) && (phi_s1->uid_0 < 0x320)) {
func_8034BED0(marker, phi_s1->uid_0, 6, phi_s1->uid_0 - 0x2BC);
} else if ((phi_s1->uid_0 >= 0x320) && (phi_s1->uid_0 < 0x384)) {
func_8034BED0(marker, phi_s1->uid_0, 7, phi_s1->uid_0 - 0x320);
} else if ((phi_s1->uid_0 >= 0x384) && (phi_s1->uid_0 < 0x3E8)) {
func_8034BED0(marker, phi_s1->uid_0, 8, phi_s1->uid_0 - 0x384);
}
phi_s1 = (BKMesh *)((s32)phi_s1 + phi_s1->vtxCount_2*sizeof(s16) + sizeof(BKMesh));
}
}
}
void func_8034C21C(ActorMarker *marker) {
Struct6Es *i_ptr;
Struct6Es *end_ptr;
Struct6Es *begin_ptr;
end_ptr = (Struct6Es *)vector_getEnd(marker->unk4C);
D_80386130 = marker->unk4C;
begin_ptr = (Struct6Es *)vector_getBegin(marker->unk4C);
for(i_ptr = begin_ptr; i_ptr < end_ptr; i_ptr++){
D_80371FC0[i_ptr->unk0].unk4(&i_ptr->unkC, i_ptr->unk4, i_ptr->unk8);
}
}
Struct70s *func_8034C2C4(ActorMarker *marker, s32 arg1) {
Struct6Es *i_ptr;
Struct6Es *end_ptr;
Struct6Es *begin_ptr;
end_ptr = (Struct6Es *)vector_getEnd(marker->unk4C);
begin_ptr = (Struct6Es *)vector_getBegin(marker->unk4C);
for(i_ptr = begin_ptr; i_ptr < end_ptr; i_ptr++){
if ((i_ptr->unk0 == 3) && (arg1 == i_ptr->unk8)) {
return &i_ptr->unkC;
}
}
return NULL;
}
Struct70s *func_8034C344(s32 arg0) {
Struct6Es *i_ptr;
Struct6Es *end_ptr;
Struct6Es *begin_ptr;
end_ptr = (Struct6Es *)vector_getEnd(D_80386130);
begin_ptr = (Struct6Es *)vector_getBegin(D_80386130);
for(i_ptr = begin_ptr; i_ptr < end_ptr; i_ptr++){
if ((i_ptr->unk0 == 8) && (arg0 == i_ptr->unk8)) {
return &i_ptr->unkC;
}
}
return NULL;
}