#include #include "functions.h" #include "variables.h" extern void func_802EE6CC(f32[3], s32[4], s32[4], s32, f32, f32, s32, s32, s32); void chSarcophagus_update(Actor *this); void chSarcophagus_updateSNS(Actor *this); /* .data */ ActorAnimationInfo chSarcophagusAnimations[] = { {0x00, 0.0f}, {ASSET_CD_ANIM_SARCOPHAGUS_OPEN, 8000000.0f}, {ASSET_CD_ANIM_SARCOPHAGUS_OPEN, 2.5f}, {ASSET_CD_ANIM_SARCOPHAGUS_OPEN, 8000000.0f}, {ASSET_CD_ANIM_SARCOPHAGUS_OPEN, 1.6f}, {ASSET_CD_ANIM_SARCOPHAGUS_OPEN, 4.5f}, }; ActorInfo chSarcophagus = { MARKER_A8_GV_MAZE_SARCOPHAGUS, ACTOR_11A_GV_MAZE_SARCOPHAGUS, ASSET_33D_MODEL_SARCOPHAGUS, 0x1, chSarcophagusAnimations, chSarcophagus_update, func_80326224, actor_draw, 2500, 0, 0.0f, 0 }; ActorInfo chSNSSarcophagus = { MARKER_23B_GV_SNS_SARCOPHAGUS, ACTOR_244_GV_SNS_SARCOPHAGUS, ASSET_33D_MODEL_SARCOPHAGUS, 0x1, chSarcophagusAnimations, chSarcophagus_updateSNS, func_80326224, actor_draw, 0, 0, 0.0f, 0 }; s32 D_80390E78[4] = {0xff, 0xd0, 0x5d, 0xb4}; s32 D_80390E88[4] = {0, 0, 0, 0}; /* .code */ void GV_func_803894B0(Actor *this){ this->marker->propPtr->unk8_3 = TRUE; actor_collisionOff(this); func_80328B8C(this, 1, 0.01f, 1); this->unk38_31 = 0; this->initialized = TRUE; } void func_80389518(Actor *this){ func_802EE6CC(this->unk1C, D_80390E88, D_80390E78, 0, 0.55f, 50.0f, 0xDC, 0x168, 0 ); } int func_8038957C(Actor *this){ f32 f0; f0 = this->yaw - func_80329784(this); if(180.0f <= f0) f0 -= 360; else if(f0 < -180.0f) f0 += 360; if(f0 <= 0.0f && -180.0f <= f0){ return 1; } return 0; } void chSarcophagus_update(Actor *this){ int i; switch(this->state){ case 1: //L80389680 if(!this->initialized){ GV_func_803894B0(this); } if(func_80329530(this, 500) && func_8038957C(this)){ func_80328B8C(this, 2, 0.01f, 1); FUNC_8030E8B4(SFX_6B_LOCKUP_OPENING, 1.0f, 32000, this->position, 1250, 2500); FUNC_8030E8B4(SFX_3F6_UNKNOWN, 1.0f, 32000, this->position, 1250, 2500); } break; case 2: //L8038970C if( this->unk38_31 == 0 && actor_animationIsAt(this, 0.1f) && !jiggyscore_isCollected(JIGGY_41_GV_MAZE) ){ func_8025A6EC(COMUSIC_3D_JIGGY_SPAWN, 0x7fff); this->unk38_31 = 1; } if(actor_animationIsAt(this, 0.5f)){ func_80328B8C(this, 3, 0.5f, 1); } break; case 3: //L80389788 if(!func_80329530(this, 700)){ func_80328B8C(this, 4, 0.5f, 1); FUNC_8030E8B4(SFX_6B_LOCKUP_OPENING, 1.0f, 32000, this->position, 1250, 2500); FUNC_8030E8B4(SFX_3F6_UNKNOWN, 1.0f, 32000, this->position, 1250, 2500); } break; case 4: //L803897E4 if(actor_animationIsAt(this, 0.9f) && this->marker->unk14_21){ i = 6; do{ func_8034A174((struct5Bs*)this->marker->unk44, i, this->unk1C); func_80389518(this); i++; }while(i < 17); } if(actor_animationIsAt(this, 0.99f)){ func_80328B8C(this, 1, 0.01f, 1); } else if(actor_animationIsAt(this, 0.9f)){ FUNC_8030E8B4(SFX_7F_HEAVYDOOR_SLAM, 1.0f, 32000, this->position, 1250, 2500); } break; }//L803898A8 } void chSarcophagus_updateSNS(Actor *this){ if(!this->initialized){ GV_func_803894B0(this); if(fileProgressFlag_get(FILEPROG_A4_GV_SNS_SARCOPHAGUS_OPEN)) func_80328B8C(this, 3, 0.5f, 1); this->unk1C[0] = 0.0f; } switch(this->state){ case 1://L80389934 if(this->unk1C[0] != 0.0f){ this->unk1C[0] -= 1.0f; if(this->unk1C[0] == 0.0f){ func_80328B8C(this, 5, 0.01f, 1); FUNC_8030E8B4(SFX_6B_LOCKUP_OPENING, 0.5f, 32000, this->position, 1250, 2500); FUNC_8030E8B4(SFX_3F6_UNKNOWN, 0.5f, 32000, this->position, 1250, 2500); } } else{//L803899C0 if(fileProgressFlag_get(FILEPROG_A3_GV_SNS_SWITCH_PRESSED)){ this->unk1C[0] = 33.0f; } } break; case 5://L803899DC if(actor_animationIsAt(this, 0.5f)){ func_80328B8C(this, 3, 0.5f, 1); FUNC_8030E624(SFX_7F_HEAVYDOOR_SLAM, 1.0f, 25000); } break; }//L80389A0C }