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

348 lines
8.8 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_802BB360(s32, f32);
extern void func_802BB3AC(s32, f32);
typedef struct {
f32 unk0;
u8 unk4;
f32 unk8;
f32 unkC;
}Struct_Core2_400F0_0;
typedef struct {
f32 unk0[2];
f32 unk8[2];
}ActorLocal_Core2_400F0;
void func_802C75A0(Actor *actor, s32 arg1);
/* .data */
Struct_Core2_400F0_0 D_803660F0[] = {
{2.0f, 1, 1.0f, 0.1f},
{0.034f, 0, 1.0f, 0.1f},
{0.1f, 1, 0.0f, 0.1f},
{0.034f, 0, 0.0f, 0.1f},
{5.0f, 1, 1.0f, 0.06f},
{0.034f, 0, 1.0f, 0.06f},
{0.06f, 1, 0.0f, 0.06f},
{0.034f, 0, 0.0f, 0.06f},
{0.2f, 1, 1.0f, 0.09f},
{0.034f, 0, 1.0f, 0.09f},
{0.09f, 1, 0.0f, 0.09f},
{0.034f, 0, 0.0f, 0.09f},
{1.0f, 1, 1.0f, 0.1f},
{0.034f, 0, 1.0f, 0.1f},
{0.1f, 1, 0.0f, 0.1f},
{0.034f, 0, 0.0f, 0.1f},
{5.0f, 1, 1.0f, 0.1f},
{0.034f, 0, 1.0f, 0.1f},
{0.1f, 1, 0.0f, 0.1f},
{0.034f, 0, 0.0f, 0.1f},
{0.0f, 2, 0.0f, 0.0f}
};
Struct_Core2_400F0_0 D_80366240[] ={
{0.0f, 01, 1.0f, 0.1f},
{0.034f, 00, 1.0f, 0.1f},
{0.1f, 01, 0.0f, 0.1f},
{0.034f, 00, 0.0f, 0.1f},
{0.0f, 02, 0.0f, 0.0f}
};
/* .code */
void func_802C7080(Actor *actor, s32 arg1, f32 arg2, f32 arg3){
ActorLocal_Core2_400F0 *local = (ActorLocal_Core2_400F0 *) &actor->local;
local->unk8[arg1] = arg2;
if(arg3 != 0.0f){
actor->unk1C[arg1] = (local->unk8[arg1] - local->unk0[arg1])/arg3;
}
else{
local->unk0[arg1] = local->unk8[arg1];
}
}
void func_802C70DC(Actor *actor, Struct_Core2_400F0_0 * arg1, s32 arg2){
f32 tmp_f20;
Struct_Core2_400F0_0 *s0;
tmp_f20 = time_getDelta();
while(0.0f < tmp_f20){
actor->unk60 -= tmp_f20;
if(0.0f < actor->unk60)
break;
tmp_f20 = mlAbsF(actor->unk60);
s0 = &arg1[actor->unk154];
func_802C7080(actor, s0->unk4, s0->unk8, s0->unkC);
s0++;
if(s0->unk4 == 2){
s0 = arg1;
if(!arg2){
func_802C75A0(actor, 1);
return;
}
else{//L802C71A4
actor->unk154 = 0;
}
}
else {//L802C71B0
actor->unk154++;
}
//L802C71B8
actor->unk60 = s0->unk0;
}//L802C71CC
}
void func_802C71F0(Actor *actor){
ActorLocal_Core2_400F0 *local = (ActorLocal_Core2_400F0 *) &actor->local;
switch(actor->modelCacheIndex){
case 0x8E:
case 0xAC:
case 0xB8://L802C7254
func_8033A45C(0x1, (s32)func_80257C48(local->unk0[0], 1.0f, 6.0f));
func_8033A45C(0x2, (s32)func_80257C48(local->unk0[1], 1.0f, 6.0f));
break;
case 0x195:
case 0x196:
case 0x197://L802C72B0
case 0x2FB://L802C72B4
func_8033A45C(0x1C, (s32)func_80257C48(local->unk0[0], 1.0f, 8.0f));
func_8033A45C(0x1D, (s32)func_80257C48(local->unk0[1], 1.0f, 8.0f));
break;
}
}
void func_802C7318(Actor *actor){
ActorLocal_Core2_400F0 *local = (ActorLocal_Core2_400F0 *) &actor->local;
int i;
for(i = 0; i < 2; i++){
actor->unk1C[i] = 0.0f;
local->unk0[i] = 0.0f;
local->unk8[i] = 0.0f;
}
actor->unk60 = 0.0f;
actor->unk154 = 0;
actor->unk124_5 = 0;
reinterpret_cast(s32, actor->unkBC) = 1;
switch(actor->modelCacheIndex){
case 0x195:
case 0x196:
case 0x197:
func_802C75A0(actor, 2);
break;
}
}
void func_802C73B0(Actor *actor, ActorLocal_Core2_400F0 *local){
f32 tmp_f0 = time_getDelta();
int i;
for(i = 0; i < 2; i++){
if(local->unk8[i] != local->unk0[i]){
local->unk0[i] += actor->unk1C[i]*tmp_f0;
if( ((0.0f < actor->unk1C[i]) && (local->unk8[i] < local->unk0[i]))
|| ((actor->unk1C[i] < 0.0f) && (local->unk0[i] < local->unk8[i]))
){
local->unk0[i] = local->unk8[i];
}
}//L802C7460
}
}
void func_802C7478(Actor *actor){
func_802C73B0(actor, &actor->local);
switch(actor->unk124_5){
case 2://L802C74C4
func_802C70DC(actor, &D_803660F0, 1);
break;
case 3://L802C74D8
func_802C70DC(actor, &D_80366240, 0);
break;
case 1://L802C74E4
break;
}
}
void func_802C74F4(Actor *actor, s32 arg1, f32 arg2){
f32 tmp_f0;
switch(reinterpret_cast(s32, actor->unkBC)){
case 0:
tmp_f0 = 0.35f;
break;
case 2:
tmp_f0 = 0.09f;
break;
case 1:
default:
tmp_f0 = 0.2f;
break;
}
func_802C7080(actor, arg1, arg2, tmp_f0);
}
void func_802C7568(enum actor_e actor_id, s32 arg1, f32 arg2){
Actor *actor = func_80326EEC(actor_id);
if(actor)
func_802C74F4(actor, arg1, arg2);
}
void func_802C75A0(Actor *actor, s32 arg1){
actor->unk124_5 = arg1;
actor->unk154 = 0;
actor->unk60 = 0.0f;
}
void func_802C75C8(enum actor_e actor_id, s32 arg1){
Actor *actor = func_80326EEC(actor_id);
if(actor)
func_802C75A0(actor, arg1);
}
void func_802C75F8(Actor *actor, s32 arg1){
reinterpret_cast(s32, actor->unkBC) = arg1;
}
void func_802C7600(enum actor_e actor_id, s32 arg1){
Actor *actor = func_80326EEC(actor_id);
if(actor)
func_802C75F8(actor, arg1);
}
void func_802C7630(enum actor_e actor_id){
func_802C7600(actor_id, 0);
}
void func_802C7650(enum actor_e actor_id){
func_802C7600(actor_id, 1);
}
void func_802C7670(enum actor_e actor_id){
func_802C7600(actor_id, 2);
}
void func_802C7690(enum actor_e actor_id){
func_802C75C8(actor_id, 1);
func_802C7568(actor_id, 0, 1.0f);
func_802C7568(actor_id, 1, 1.0f);
}
void func_802C76D4(enum actor_e actor_id){
func_802C75C8(actor_id, 1);
func_802C7568(actor_id, 0, 0.0f);
func_802C7568(actor_id, 1, 0.0f);
}
void func_802C7718(enum actor_e actor_id){
func_802C75C8(actor_id, 1);
func_802C7568(actor_id, 0, 0.5f);
func_802C7568(actor_id, 1, 0.5f);
}
void func_802C775C(enum actor_e actor_id){
func_802C75C8(actor_id, 3);
}
void func_802C777C(enum actor_e actor_id){
func_802C75C8(actor_id, 2);
}
int func_802C779C(s32 arg0){
switch(arg0){
case 0x10: // 802C77C8
func_802C7630(0x8E);
func_802C7630(0xB8);
func_802C7630(0x2FB);
return TRUE;
case 0x11: // 802C77E8
func_802C7650(0x8E);
func_802C7650(0xB8);
func_802C7650(0x2FB);
return TRUE;
case 0x12: // 802C7808
func_802C7670(0x8E);
func_802C7670(0xB8);
func_802C7670(0x2FB);
return TRUE;
case 0x13: // 802C7828
func_802C7690(0x8E);
func_802C7690(0xB8);
func_802C7690(0x2FB);
return TRUE;
case 0x14: // 802C7848
func_802C76D4(0x8E);
func_802C76D4(0xB8);
func_802C76D4(0x2FB);
return TRUE;
case 0x15: // 802C7868
func_802C7718(0x8E);
func_802C7718(0xB8);
func_802C7718(0x2FB);
return TRUE;
case 0x16: // 802C7888
func_802C775C(0x8E);
func_802C775C(0xB8);
func_802C775C(0x2FB);
return TRUE;
case 0x17: // 802C78A8
func_802C777C(0x8E);
func_802C777C(0xB8);
func_802C777C(0x2FB);
return TRUE;
case 0x18: // 802C78C8
func_802C7630(0xAC);
return TRUE;
case 0x19: // 802C78D8
func_802C7650(0xAC);
return TRUE;
case 0x1A: // 802C78E8
func_802C7670(0xAC);
return TRUE;
case 0x1B: // 802C78F8
func_802C7690(0xAC);
return TRUE;
case 0x1C: // 802C7908
func_802C76D4(0xAC);
return TRUE;
case 0x1D: // 802C7918
func_802C7718(0xAC);
return TRUE;
case 0x1E: // 802C7928
func_802C775C(0xAC);
return TRUE;
case 0x1F: // 802C7938
func_802C777C(0xAC);
return TRUE;
case 0xD: // 802C7948
func_802BB360(0, 10.0f);
func_802BB3AC(0, 1.0f);
func_802BB3C4(0);
return TRUE;
case 0xE: // 802C7970
func_802BB360(0, 35.0f);
func_802BB3AC(0, 1.0f);
func_802BB3C4(0);
return TRUE;
case 0xF: // 802C7998
func_802BB3AC(0, 0.8f);
return TRUE;
break;
}
return FALSE;
}
void func_802C79C4(void){
int i;
for(i = 0; i < 0x20; i++){
if(mapSpecificFlags_get(i) && func_802C779C(i)){
mapSpecificFlags_set(i, FALSE);
}
}
}