#include #include "functions.h" #include "variables.h" extern void func_80324E88(f32); /* typedefs and declarations */ typedef struct { s32 unk0; s32 unk4; s32 unk8; s32 unkC; }ActorLocal_RBB_0; typedef struct { u8 unk0; u8 unk1; u8 unk2; //u8 pad3[1]; f32 unk4; s16 unk8; s16 unkA; s16 unkC; //u8 padE[2]; }Struct_RBB_0_1; void func_803866F4(Actor *this, s32 arg1); void func_803868F0(Actor* this); /* .data */ ActorInfo D_80390050 = { MARKER_182_RBB_EGG_TOLL, ACTOR_172_RBB_EGG_TOLL, ASSET_402_MODEL_EGG_TOLL, 0x0, NULL, func_803868F0, NULL, func_80325340, 0, 0, 0.0f, 0 }; Struct_RBB_0_1 D_80390074[4] = { {0x0, 0x2, 0x4, 3.0f, 550, 200, -300}, {0x1, 0x4, 0x0, 4.0f, -600, 0, 0}, {0x2, 0x6, 0x0, 4.0f, -700, 0, 0}, {0x3, 0x8, 0x0, 4.0f, -1010, 0, 0} }; /* .code */ void RBB_func_803863F0(Actor *actor, s32 arg1){ ActorLocal_RBB_0 * local = (ActorLocal_RBB_0 *) &actor->local; void *temp_a0; f32 sp3C[3]; f32 sp30[3]; temp_a0 = func_8034C528(local->unk4 + 0x190); if(temp_a0){ if(local->unk8 == 0){ sp3C[2] = 0.0f; sp30[0] = 0.0f; sp30[1] = 0.0f; sp3C[0] = sp3C[1] = sp3C[2]; sp30[2] = (f32) D_80390074[local->unk4].unk8; } else if(local->unk8 == 1){ sp3C[0] = 0.0f; sp3C[1] = 0.0f; sp3C[2] = (f32) D_80390074[local->unk4].unk8; sp30[1] = 0.0f; sp30[0] = 0.0f; sp30[2] = (f32) D_80390074[local->unk4].unkA; } else{ sp3C[0] = 0.0f; sp3C[1] = 0.0f; sp3C[2] = (f32) D_80390074[local->unk4].unkA; sp30[1] = 0.0f; sp30[0] = 0.0f; sp30[2] = (f32) D_80390074[local->unk4].unkC; } if(arg1){ func_8034DDF0(temp_a0, &sp3C, &sp30, D_80390074[local->unk4].unk4, 1); func_8034E174(temp_a0); } else{ func_8034DDF0(temp_a0, &sp3C, &sp30, 0.0f, 1); } } } void func_803865A4(ActorMarker *marker, s32 arg1){ func_803866F4(marker_getActor(marker), arg1); } void func_803865D0(ActorMarker *marker){ Actor* actor = marker_getActor(marker); ActorLocal_RBB_0 * local = (ActorLocal_RBB_0 *) &actor->local; RBB_func_803863F0(actor, 1); timed_setCameraToNode(0.0f, D_80390074[local->unk4].unk0); timedFunc_set_2(0.75*D_80390074[local->unk4].unk4, (TFQM2) func_803865A4, actor->marker, 4); func_80324E88(0.75*D_80390074[local->unk4].unk4); func_80324E38(0.75*D_80390074[local->unk4].unk4, 0); timed_playSfx(D_80390074[local->unk4].unk4, SFX_7F_HEAVYDOOR_SLAM, 0.8f, 0x7fd0); } void func_803866F4(Actor *this, s32 arg1){ ActorLocal_RBB_0 *local = (ActorLocal_RBB_0 *) &this->local; if(arg1 == 2){ func_8025A6EC(COMUSIC_2B_DING_B, 28000); local = (ActorLocal_RBB_0 *) &this->local; local->unkC = 3; } if(arg1 == 3){ local->unk8++; func_8025A6EC(COMUSIC_2B_DING_B, 28000); func_80324E38(0.0f, 3); timedFunc_set_2(0.5f, (TFQM2) func_8025A6EC, COMUSIC_2D_PUZZLE_SOLVED_FANFARE, 28000); timedFunc_set_1(1.0f, (GenMethod_1) func_803865D0, this->marker); }//L803867D4 if(arg1 == 4){ if(local->unk8 == 1 && D_80390074[local->unk4].unk2 > 0){ func_803866F4(this, 1); return; } } this->state = arg1; } void func_8038685C(ActorMarker *marker){ Actor *actor = marker_getActor(marker); ActorLocal_RBB_0 *local = (ActorLocal_RBB_0 *) &actor->local; if(actor->state == 1){ local->unk0++; if( D_80390074[local->unk4].unk1 == local->unk0 || D_80390074[local->unk4].unk1 + D_80390074[local->unk4].unk2 == local->unk0 ){ func_803866F4(actor, 3); }else{ func_803866F4(actor, 2); } } } void func_803868F0(Actor *this){ ActorLocal_RBB_0 *local = (ActorLocal_RBB_0 *) &this->local; if(!this->unk16C_4){ this->unk16C_4 = 1; if(this->state == 0){ local->unk0 = 0; local->unk4 = 0; local->unk8 = 0; local->unkC = 0; local->unk4 = (this->unk78_13 == 0x15)? 0: local->unk4; local->unk4 = (this->unk78_13 == 0x13)? 1: local->unk4; local->unk4 = (this->unk78_13 == 0x14)? 2: local->unk4; local->unk4 = (this->unk78_13 == 0xB)? 3: local->unk4; func_803866F4(this, 1); } RBB_func_803863F0(this, 0); }//L803869F4 if(this->state == 2){ if(--local->unkC <= 0){ func_803866F4(this, 1); } } }