label RBB files

This commit is contained in:
Banjo Kazooie
2023-01-31 14:43:12 -06:00
parent e05358d82f
commit 2f858b790b
28 changed files with 244 additions and 243 deletions

178
src/RBB/ch/engineparts.c Normal file
View File

@@ -0,0 +1,178 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#ifndef ABS
#define ABS(d) ((d) >= 0) ? (d) : -(d)
#endif
/* typedefs and declarations */
typedef struct {
f32 unk0[3];
f32 unkC[3];
s16 unk18;
s16 unk1A;
}Struct_RBB_40F0;
typedef struct {
s32 unk0;
f32 unk4[3];
f32 unk10[3];
f32 unk1C;
}ActorLocal_RBB_40F0;
void func_8038A724(Actor *this);
/* .data */
Struct_RBB_40F0 D_80390760[4] = {
{{ 1600.0f, 641.5f, -2700.0f}, {0.0f, 0.0f, 500.0f}, 0x27, 0},
{{-1600.0f, 641.5f, -2700.0f}, {0.0f, 0.0f, 500.0f}, 0x28, 0},
{{ 300.0f, 641.5f, -400.0f}, {-500.0f, 0.0f, 0.0f}, 0x27, 1},
{{ -300.0f, 641.5f, -400.0f}, {-500.0f, 0.0f, 0.0f}, 0x28, 1},
};
ActorInfo D_803907D0 = {
0x187, 0x177, 0x406, 0x0, NULL,
func_8038A724, NULL, func_80325888,
0, 0, 0.0f, 0
};
ActorInfo D_803907F4 = {
0x18E, 0x17E, 0x406, 0x0, NULL,
func_8038A724, NULL, func_80325888,
0, 0, 0.0f, 0
};
ActorInfo D_80390818 = {
0x18F, 0x17F, 0x407, 0x0, NULL,
func_8038A724, NULL, func_80325888,
0, 0, 0.0f, 0
};
ActorInfo D_8039083C = {
0x190, 0x180, 0x408, 0x0, NULL,
func_8038A724, NULL, func_80325888,
0, 0, 0.0f, 0
};
f32 D_80390860[3] = {1.0f, 0.5f, 0.5f};
/* .code */
f32 func_8038A4E0(void){
return D_80390860[2*levelSpecificFlags_get(0x27) + levelSpecificFlags_get(0x28)];
}
void func_8038A524(Actor *this, s32 arg1){
ActorLocal_RBB_40F0 *local = (ActorLocal_RBB_40F0 *)&this->local;
local->unk1C = 0.0f;
if(arg1 == 1){
if(D_80390760[local->unk0].unk1A){
func_8038A524(this, 2);
return;
}
local->unk10[0] = D_80390760[local->unk0].unkC[0]*func_8038A4E0();
local->unk10[1] = D_80390760[local->unk0].unkC[1]*func_8038A4E0();
local->unk10[2] = D_80390760[local->unk0].unkC[2]*func_8038A4E0();
}
if(arg1 == 2){
local->unk10[0] = D_80390760[local->unk0].unkC[0]*func_8038A4E0();
local->unk10[1] = D_80390760[local->unk0].unkC[1]*func_8038A4E0();
local->unk10[2] = D_80390760[local->unk0].unkC[2]*func_8038A4E0();
}
if(arg1 == 3){
local->unk10[2] = 0.0f;
local->unk10[1] = 0.0f;
local->unk10[0] = 0.0f;
}
this->state = arg1;
}
f32 func_8038A6B8(ActorMarker *marker){
Actor *actor = marker_getActor(marker);
ActorLocal_RBB_40F0 *local = (ActorLocal_RBB_40F0 *)&actor->local;
int i;
f32 f12 = 0;
for(i = 0; i < 3; i++){
f12 += ABS(local->unk4[i]);
}
return f12/500.0f;
}
void func_8038A724(Actor *this){
ActorLocal_RBB_40F0 *local = (ActorLocal_RBB_40F0 *)&this->local;
int i;
f32 sp1C = time_getDelta();
if(!this->unk16C_4){
this->marker->propPtr->unk8_3 = 1;
this->unk16C_4 = 1;
actor_collisionOff(this);
local->unk0 = 0;
local->unk0 = (this->modelCacheIndex == 0x17E) ? 1: local->unk0;
local->unk0 = (this->modelCacheIndex == 0x17F) ? 2: local->unk0;
local->unk0 = (this->modelCacheIndex == 0x180) ? 3: local->unk0;
this->position_x = D_80390760[local->unk0].unk0[0];
this->position_y = D_80390760[local->unk0].unk0[1];
this->position_z = D_80390760[local->unk0].unk0[2];
func_8038A524(this, 1);
}//L8038A884
this->pitch += local->unk4[0]*sp1C;
this->yaw += local->unk4[1]*sp1C;
this->roll += local->unk4[2]*sp1C;
for(i = 0; i < 3; i++){//L8038A8D4
if(local->unk10[i] < local->unk4[i]){
local->unk4[i] -= 75.0f*sp1C;
local->unk4[i] = MAX(local->unk10[i], local->unk4[i]);
}//L8038A924
else if(local->unk4[i] < local->unk10[i]){
local->unk4[i] += 75.0f*sp1C;
local->unk4[i] = MIN(local->unk10[i], local->unk4[i]);
}
}
if(this->state == 1){
local->unk10[0] = D_80390760[local->unk0].unkC[0]*func_8038A4E0();
local->unk10[1] = D_80390760[local->unk0].unkC[1]*func_8038A4E0();
local->unk10[2] = D_80390760[local->unk0].unkC[2]*func_8038A4E0();
}
if(this->state == 2){
if(0.0f < local->unk1C){
if(ml_timer_update(&local->unk1C, sp1C)){
func_8038A524(this, 3);
}//L8038AA8C
}else{
if( local->unk4[0] == local->unk10[0]
&& local->unk4[1] == local->unk10[1]
&& local->unk4[2] == local->unk10[2]
){
local->unk1C = 1.0f;
}
}
}//L8038AB04
if(this->state == 3){
if(0.0f < local->unk1C){
if(ml_timer_update(&local->unk1C, sp1C)){
func_8038A524(this, 2);
}//L8038AA8C
}else{
if( local->unk4[0] == local->unk10[0]
&& local->unk4[1] == local->unk10[1]
&& local->unk4[2] == local->unk10[2]
){
local->unk1C = 1.0f;
}
}
}
}