81 lines
2.3 KiB
C
81 lines
2.3 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
typedef struct{
|
|
f32 unk0;
|
|
s32 unk4;
|
|
}ActorLocal_GV_9860;
|
|
|
|
void func_8038FD8C(Actor *this);
|
|
Actor *func_8038FCF4(ActorMarker *this_marker, Gfx **gfx, Mtx **mtx, Vtx **vtx);
|
|
|
|
/* .data */
|
|
ActorInfo D_80391620 = { MARKER_1D4_SANDYBUTT_PYRAMID, ACTOR_31D_SANDYBUTT_PYRAMID, ASSET_56B_MODEL_SANDYBUTT_PYRAMID,
|
|
0, NULL,
|
|
func_8038FD8C, NULL, func_8038FCF4,
|
|
0, 0, 0.0f, 0
|
|
};
|
|
|
|
/* .code */
|
|
void func_8038FC50(Actor *this, s32 next_state){
|
|
s32 sp1C;
|
|
|
|
if(next_state == 2){
|
|
sp1C = func_802F9AA8(SFX_3EC_CCW_DOOR_OPENING);
|
|
func_802F9DB8(sp1C, 0.7f, 0.9f, 0.03f);
|
|
func_802F9F80(sp1C, 0.3f, 2.4f, 0.3f);
|
|
func_802FA060(sp1C, 32000, 32000, 0.0f);
|
|
}
|
|
this->state = next_state;
|
|
}
|
|
|
|
Actor *func_8038FCF4(ActorMarker *this_marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){
|
|
Actor *this = marker_getActor(this_marker);
|
|
ActorLocal_GV_9860 *local = (ActorLocal_GV_9860 *)&this->local;
|
|
|
|
if(local->unk4 == 0){
|
|
return func_80325340(this_marker, gfx, mtx, vtx);
|
|
}
|
|
else{
|
|
return func_80325888(this_marker, gfx, mtx, vtx);
|
|
}
|
|
}
|
|
|
|
void func_8038FD50(ActorMarker *this_marker, s32 arg1){
|
|
Actor *this = marker_getActor(this_marker);
|
|
ActorLocal_GV_9860 *local = (ActorLocal_GV_9860 *)&this->local;
|
|
|
|
local->unk0 = 0.0f;
|
|
local->unk4 = arg1;
|
|
func_8038FC50(this, 2);
|
|
}
|
|
|
|
void func_8038FD8C(Actor *this){
|
|
ActorLocal_GV_9860 *local = (ActorLocal_GV_9860 *)&this->local;
|
|
f32 tmp_f2;
|
|
f32 tmp_f0;
|
|
|
|
if(!this->unk16C_4){
|
|
this->unk16C_4 = TRUE;
|
|
this->marker->propPtr->unk8_3 = TRUE;
|
|
local->unk4 = func_8031FF44(BKPROG_F8_KING_SANDYBUTT_PYRAMID_STATE, 2);
|
|
this->position_x = 67.0f;
|
|
this->position_y = (local->unk4/3.0)*1050.0 + 1375.0;
|
|
this->position_z = 400.0f;
|
|
func_8038FC50(this, 1);
|
|
}//L8038FE48
|
|
|
|
if(this->state == 2){
|
|
local->unk0 += time_getDelta()/3.0f;
|
|
if(1.0f < local->unk0)
|
|
local->unk0 = 1.0f;
|
|
|
|
tmp_f0 = ((local->unk4 - 1)/3.0)*1050.0 + 1375.0;
|
|
tmp_f2 = (local->unk4/3.0)*1050.0 + 1375.0;
|
|
this->position_y = local->unk0*(tmp_f2 - tmp_f0) + tmp_f0;
|
|
if(1.0f == local->unk0)
|
|
func_8038FC50(this, 1);
|
|
}//L8038FF48
|
|
}
|