343 lines
9.7 KiB
C
343 lines
9.7 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
#include "code_B6EA0.h"
|
|
|
|
extern s32 func_8033FA84(void);
|
|
extern s32 func_8035287C(void);
|
|
extern s32 func_80344CDC(void);
|
|
extern void func_8032FFEC(s32, s32);
|
|
extern void func_80352A38(s32, u32);
|
|
extern void func_8033FFB8(s32 , s32);
|
|
extern void projectile_getPosition(s32 , f32[3]);
|
|
extern void func_8032F64C(f32[3] , ActorMarker *);
|
|
extern void func_8033FB64(s32);
|
|
extern void func_80287D60(s32);
|
|
extern void func_803529DC(s32);
|
|
extern void func_80344D70(s32);
|
|
extern void func_80352B20(s32);
|
|
extern ActorMarker * func_8032FBE4(f32 *pos, MarkerDrawFunc arg1, int arg2, enum asset_e model_id);
|
|
|
|
extern void (*func_80352614)(void);
|
|
extern void (*func_8035261C)(void);
|
|
extern void (*func_803526DC)(void);
|
|
extern void (*func_80355D58)(void);
|
|
extern void (*func_80355E80)(void);
|
|
extern void (*func_80355D50)(void);
|
|
extern void (*fxegg_head_spawn)(void);
|
|
extern void (*fxegg_head_update)(void);
|
|
extern void (*fxegg_head_destroy)(void);
|
|
extern void (*func_803546E8)(void);
|
|
extern void (*func_8035489C)(void);
|
|
extern void (*func_80354990)(void);
|
|
extern void (*fxegg_ass_spawn)(void);
|
|
extern void (*fxegg_ass_update)(void);
|
|
extern void (*fxegg_ass_destroy)(void);
|
|
extern void (*func_8035611C)(void);
|
|
extern void (*func_803562E8)(void);
|
|
extern void (*func_80356364)(void);
|
|
extern void (*func_80352DE4)(void);
|
|
extern void (*func_80352F58)(void);
|
|
extern void (*func_80352FF4)(void);
|
|
extern void (*func_80354998)(void);
|
|
extern void (*func_80354C18)(void);
|
|
extern void (*func_80354DC8)(void);
|
|
extern void (*func_80354DD0)(void);
|
|
extern void (*func_80354EEC)(void);
|
|
extern void (*func_80355004)(void);
|
|
extern void (*func_8035500C)(void);
|
|
extern void (*func_80355134)(void);
|
|
extern void (*func_80355294)(void);
|
|
extern void (*func_803540B4)(void);
|
|
extern void (*func_803541D8)(void);
|
|
extern void (*func_803540AC)(void);
|
|
extern void (*func_8035529C)(void);
|
|
extern void (*func_803553E8)(void);
|
|
extern void (*func_80355548)(void);
|
|
extern void (*func_80355550)(void);
|
|
extern void (*func_8035570C)(void);
|
|
extern void (*func_8035585C)(void);
|
|
extern void (*func_803543FC)(void);
|
|
extern void (*func_8035451C)(void);
|
|
extern void (*func_803543F4)(void);
|
|
extern void (*func_80355864)(void);
|
|
extern void (*func_80355B00)(void);
|
|
extern void (*func_80355C4C)(void);
|
|
|
|
typedef struct {
|
|
u8 unk0;
|
|
u8 unk1;
|
|
//u8 pad2[0x2];
|
|
f32 unk4;
|
|
}Struct_Core2_B6CE0_1;
|
|
|
|
void func_8033E6D4(s32 arg0);
|
|
|
|
/* .data */
|
|
Struct_Core2_B6CE0_1 D_80371E30[] ={
|
|
{0, 0, 0.0f},
|
|
{1, 0, 0.07f},
|
|
{2, 1, 0.29f},
|
|
{3, 2, 0.15f},
|
|
{4, 1, 0.05f}
|
|
};
|
|
|
|
/* .bss */
|
|
extern ParticleStruct0s D_80384490[];
|
|
extern s32 D_80384FD0;
|
|
extern struct {
|
|
s32 unk0;
|
|
s32 unk4;
|
|
} D_80384FD8;
|
|
extern u8 D_80384FE0;
|
|
|
|
/* .code */
|
|
f32 func_8033DE30(s32 arg0){
|
|
return D_80371E30[arg0].unk4;
|
|
}
|
|
|
|
s32 func_8033DE44(s32 arg0){
|
|
return D_80371E30[arg0].unk1 & 1;
|
|
}
|
|
|
|
Actor *func_8033DE60(ActorMarker *marker){
|
|
int indx = marker->unk28;
|
|
func_8033F7F0(D_80384490[indx].unk45);
|
|
if(marker);
|
|
return 0;
|
|
}
|
|
|
|
void func_8033DEA0(void){
|
|
int i;
|
|
for(i = 0; i < 40 ;i++){
|
|
D_80384490[i].unk44 = 0;
|
|
}
|
|
D_80384FD8.unk0 = D_80384FD8.unk4 = 0;
|
|
commonParticleType_set(COMMON_PARTICLE_1_EGG_HEAD, &fxegg_head_spawn, &fxegg_head_update, &fxegg_head_destroy, 0, 1); //bsbEggAss
|
|
commonParticleType_set(0x2, &func_803546E8, &func_8035489C, &func_80354990, 0, 8); //bsbWhirl //aka wonderwing
|
|
commonParticleType_set(COMMON_PARTICLE_4_EGG_ASS, &fxegg_ass_spawn, &fxegg_ass_update, &fxegg_ass_destroy, 0, 1);
|
|
commonParticleType_set(0x6, &func_8035611C, &func_803562E8, &func_80356364, 0, 8);
|
|
commonParticleType_set(0x7, &func_80352DE4, &func_80352F58, &func_80352FF4, 0, 8);
|
|
commonParticleType_set(0x8, &func_80354998, &func_80354C18, &func_80354DC8, 0, 8);
|
|
commonParticleType_set(0x9, &func_80354DD0, &func_80354EEC, &func_80355004, 0, 8); //orange_pad?
|
|
commonParticleType_set(0xa, &func_8035500C, &func_80355134, &func_80355294, 0, 8);
|
|
commonParticleType_set(0xb, &func_803540B4, &func_803541D8, &func_803540AC, 0, 8);
|
|
commonParticleType_set(0xc, &func_8035529C, &func_803553E8, &func_80355548, 0, 8);
|
|
commonParticleType_set(0xd, &func_80355550, &func_8035570C, &func_8035585C, 0, 8);
|
|
commonParticleType_set(0xe, &func_803543FC, &func_8035451C, &func_803543F4, 0, 8);
|
|
commonParticleType_set(0xf, &func_80355864, &func_80355B00, &func_80355C4C, 0, 8);
|
|
commonParticleType_set(0x10, &func_80355D58, &func_80355E80, &func_80355D50, 0, 8);
|
|
commonParticleType_set(0x11, &func_8035261C, &func_803526DC, &func_80352614, 0, 8); //mumbotoken sparkle
|
|
}
|
|
|
|
void func_8033E184(void){
|
|
int i;
|
|
for(i = 0; i < 40; i++){
|
|
if(D_80384490[i].unk44){
|
|
func_8033E6D4(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
//commonParticle_update
|
|
void func_8033E1E0(void){
|
|
f32 sp4C[3];
|
|
int i;
|
|
if(D_80384FE0){
|
|
for(i = 0; i < 40; i++){
|
|
if(D_80384490[i].unk44){
|
|
D_80384FD0 = i;
|
|
func_80352B20(D_80384490[D_80384FD0].unk46);
|
|
if(D_80384490[D_80384FD0].unk44){
|
|
projectile_getPosition(D_80384490[D_80384FD0].unk45, sp4C);
|
|
func_803451B0(D_80384490[D_80384FD0].unk47, sp4C);
|
|
projectile_setPosition(D_80384490[D_80384FD0].unk45, sp4C);
|
|
func_80287DC8(D_80384490[D_80384FD0].unk34);
|
|
func_8033FFB8(D_80384490[D_80384FD0].unk45, func_80287FFC(D_80384490[D_80384FD0].unk34));
|
|
func_8032F64C(sp4C, D_80384490[D_80384FD0].marker_30);
|
|
}
|
|
else{
|
|
func_8033E6D4(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//commonParticle_findFree
|
|
s32 func_8033E368(void){
|
|
int i;
|
|
for(i = 0; i < 40; i++){
|
|
if(D_80384490[i].unk44 == 0){
|
|
D_80384490[i].unk44++;
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
//commonParticle_new
|
|
int func_8033E3F0(enum common_particle_e particle_id, int arg1){
|
|
f32 sp34[3];
|
|
s32 a0;
|
|
|
|
if(arg1 == 0)
|
|
return -1;
|
|
|
|
ml_vec3f_clear(sp34);
|
|
D_80384FD0 = func_8033E368();
|
|
if(D_80384FD0 < 0)
|
|
return -1;
|
|
|
|
|
|
D_80384490[D_80384FD0].unk45 = func_8033FA84();
|
|
D_80384490[D_80384FD0].unk34 = func_80287CA8();
|
|
D_80384490[D_80384FD0].unk46 = func_8035287C();
|
|
D_80384490[D_80384FD0].unk47 = func_80344CDC();
|
|
|
|
if( ( !(a0 = D_80384490[D_80384FD0].unk45)
|
|
|| !D_80384490[D_80384FD0].unk34
|
|
|| !D_80384490[D_80384FD0].unk46
|
|
|| !D_80384490[D_80384FD0].unk47
|
|
)
|
|
){//L8033E4DC
|
|
if(a0){
|
|
func_8033FB64(a0);
|
|
}
|
|
a0 = D_80384490[D_80384FD0].unk34;
|
|
if(a0){
|
|
func_80287D60(a0);
|
|
}
|
|
a0 = D_80384490[D_80384FD0].unk46;
|
|
if(a0){
|
|
func_803529DC(a0);
|
|
}
|
|
a0 = D_80384490[D_80384FD0].unk47;
|
|
if(a0){
|
|
func_80344D70(a0);
|
|
}
|
|
D_80384490[D_80384FD0].unk44 = 0;
|
|
return -1;
|
|
}
|
|
|
|
//L8033E5B4
|
|
D_80384490[D_80384FD0].marker_30 = func_8032FBE4(sp34, func_8033DE60, 1, commonParticleType_80352C7C(particle_id));
|
|
D_80384490[D_80384FD0].marker_30->unk40_22 = 1;
|
|
func_8032FFEC(D_80384490[D_80384FD0].marker_30, (u32)D_80384FD0);
|
|
D_80384490[D_80384FD0].marker_30->collidable = FALSE;
|
|
func_80352A38(D_80384490[D_80384FD0].unk46, particle_id);
|
|
func_8033FFB8(D_80384490[D_80384FD0].unk45, func_80287FFC(D_80384490[D_80384FD0].unk34));
|
|
projectile_getPosition(D_80384490[D_80384FD0].unk45, sp34);
|
|
func_8032F64C(sp34, D_80384490[D_80384FD0].marker_30);
|
|
return D_80384FD0;
|
|
|
|
}
|
|
|
|
void func_8033E6D4(s32 arg0){
|
|
func_803529DC(D_80384490[arg0].unk46);
|
|
func_80344D70(D_80384490[arg0].unk47);
|
|
func_8033FB64(D_80384490[arg0].unk45);
|
|
func_80287D60(D_80384490[arg0].unk34);
|
|
marker_free(D_80384490[arg0].marker_30);
|
|
D_80384490[arg0].marker_30 = NULL;
|
|
D_80384490[arg0].unk38 = 0;
|
|
D_80384490[arg0].unk44 = 0;
|
|
}
|
|
|
|
void func_8033E73C(s32 arg0, s32 arg1, FuncUnk40 arg2){
|
|
s32 tmp_v0 = func_8033E368();
|
|
D_80384490[tmp_v0].unk44--;
|
|
D_80384490[tmp_v0].unk38 = arg0;
|
|
D_80384490[tmp_v0].unk3C = arg1;
|
|
D_80384490[tmp_v0].unk40 = arg2;
|
|
}
|
|
|
|
void func_8033E79C(s32 arg0, s32 arg1, FuncUnk40 arg2){
|
|
D_80384490[D_80384FD0].unk38 = arg0;
|
|
D_80384490[D_80384FD0].unk3C = arg1;
|
|
D_80384490[D_80384FD0].unk40 = arg2;
|
|
}
|
|
|
|
void func_8033E7CC(s32 arg0){
|
|
int i;
|
|
for(i = 0; i < 40; i++){
|
|
if(D_80384490[i].unk44 && arg0 == (s32)D_80384490[i].unk38){
|
|
func_8033E6D4(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
ActorMarker *func_8033E840(void){
|
|
return D_80384490[D_80384FD0].marker_30;
|
|
}
|
|
|
|
ActorMarker *func_8033E864(void){
|
|
return D_80384490[D_80384FD0].unk38;
|
|
}
|
|
|
|
FuncUnk40 func_8033E888(void){
|
|
return D_80384490[D_80384FD0].unk40;
|
|
}
|
|
|
|
s32 func_8033E8AC(void){
|
|
return D_80384490[D_80384FD0].unk3C;
|
|
}
|
|
|
|
u8 func_8033E8D0(void){
|
|
return D_80384490[D_80384FD0].unk45;
|
|
}
|
|
|
|
struct54s * func_8033E8F4(void){
|
|
return D_80384490[D_80384FD0].unk34;
|
|
}
|
|
|
|
u8 func_8033E918(void){
|
|
return D_80384490[D_80384FD0].unk46;
|
|
}
|
|
|
|
u8 func_8033E93C(void){
|
|
return D_80384490[D_80384FD0].unk47;
|
|
}
|
|
|
|
ParticleStruct0s *func_8033E960(void){
|
|
return &D_80384490[D_80384FD0];
|
|
}
|
|
|
|
void func_8033E984(void){
|
|
D_80384490[D_80384FD0].unk44 = 0;
|
|
}
|
|
|
|
void func_8033E9A8(s32 arg0){
|
|
func_8033E6D4(arg0);
|
|
}
|
|
|
|
void func_8033E9C8(s32 arg0){
|
|
D_80384FD0 = arg0;
|
|
}
|
|
|
|
void func_8033E9D4(void){
|
|
D_80384FD8.unk4 = D_80384FD8.unk0;
|
|
D_80384FD8.unk0 = D_80384FD0;
|
|
}
|
|
|
|
void func_8033E9F4(void){
|
|
D_80384FD0 = D_80384FD8.unk0;
|
|
D_80384FD8.unk0 = D_80384FD8.unk4;
|
|
}
|
|
|
|
f32 func_8033EA14(s32 arg0){
|
|
return *((f32 *)func_8033E960() + arg0);
|
|
}
|
|
|
|
void func_8033EA40(s32 arg0, f32 arg1){
|
|
*((f32 *)func_8033E960() + arg0) = arg1;
|
|
}
|
|
|
|
void func_8033EA78(s32 arg0, s32 arg1){
|
|
if(arg1 == 2)
|
|
D_80384FE0 = 1;
|
|
else
|
|
D_80384FE0 = 0;
|
|
}
|