banjo-kazooie/src/core2/code_50490.c

106 lines
2.7 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802EE6CC(f32[3], f32[3], s32[4], s32, f32, f32, s32, s32, s32);
extern void func_802EE5E8(void *);
typedef struct{
s32 unk0;
}ActorLocal_core2_50490;
Actor *func_802D745C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
void func_802D766C(Actor *this);
/* .data */
f32 D_80367A80 = 0.5f;
f32 D_80367A84 = 30.0f;
f32 D_80367A88 = 150.0f;
f32 D_80367A8C = 25.0f;
s32 D_80367A90[4] = {250, 250, 250, 120};
s32 D_80367AA0 = 0;
f32 D_80367AA4[3] = {0.0f, 0.0f, 0.0f};
ActorInfo D_80367AB0 = {
0x57, 0x4C, 0x0,
0, NULL,
func_802D766C, func_80326224, func_802D745C,
0, 0, 0.0f, 0
};
ActorInfo D_80367AD4 = {
0x57, 0x4D, 0x0,
0, NULL,
func_802D766C, func_80326224, func_802D745C,
0, 0, 0.0f, 0
};
ActorInfo D_80367AF8 = {
0x57, 0x58, 0x0,
0, NULL,
func_802D766C, func_80326224, func_802D745C,
0, 0, 0.0f, 0
};
/* .code */
void func_802D7420(Actor *this){
ActorLocal_core2_50490 * local = (ActorLocal_core2_50490 *)&this->local;
if(local->unk0 != NULL){
func_802EE5E8(local->unk0);
}
local->unk0 = NULL;
}
Actor *func_802D745C(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
return marker_getActor(marker);
}
Actor *func_802D7484(s32 position[3], s32 yaw, ActorInfo *arg2, u32 arg3) {
s32 sp3C;
ActorLocal_core2_50490 * local;
Actor *sp34;
sp3C = func_802EE5E0(D_80367AA0);
sp34 = actor_new(position, yaw, arg2, arg3);
func_802EE6CC(sp34->position, D_80367AA4, D_80367A90, 0, D_80367A80, D_80367A84, D_80367A88, D_80367A8C, D_80367AA0);
local = (ActorLocal_core2_50490 *)&sp34->local;
local->unk0 = sp3C;
sp34->marker->collidable = FALSE;
return sp34;
}
Actor * func_802D7558(s32 *arg0, s32 arg1, ActorInfo *arg2, u32 arg3) {
D_80367A80 = 1.2f;
D_80367A84 = 30.0f;
D_80367A88 = 800.0f;
D_80367A8C = 200.0f;
return func_802D7484(arg0, arg1, arg2, arg3);
}
Actor * func_802D75B4(s32 *arg0, s32 arg1, ActorInfo *arg2, u32 arg3) {
D_80367A80 = 1.2f;
D_80367A84 = 30.0f;
D_80367A88 = 800.0f;
D_80367A8C = 200.0f;
return func_802D7484(arg0, arg1, arg2, arg3);
}
Actor * func_802D7610(s32 *arg0, s32 arg1, ActorInfo *arg2, u32 arg3) {
D_80367A80 = 0.75f;
D_80367A84 = 30.0f;
D_80367A88 = 600.0f;
D_80367A8C = 200.0f;
return func_802D7484(arg0, arg1, arg2, arg3);
}
void func_802D766C(Actor *this) {
ActorLocal_core2_50490 * local = (ActorLocal_core2_50490 *)&this->local;
if (!this->initialized) {
marker_setFreeMethod(this->marker, func_802D7420);
this->initialized = TRUE;
}
if (func_802EE5F0(local->unk0) == 0) {
func_802D7420(this);
marker_despawn(this->marker);
}
}