/*!!!DONE!!!*/ #include #include "functions.h" #include "variables.h" #include "prop.h" /* extern function declarations */ void func_802C8F70(f32); void func_802C4218(s32, s32, s32, s32); /* public function declarations */ Actor *chhut_draw(ActorMarker *, Gfx **, Mtx**, Vtx **); void chhut_update(Actor *); /* .bss */ extern s32 D_8037DCB0; //mm_hut_smash_count /* .data */ ActorAnimationInfo chhutAnimations[3] = { {0, 0.0f}, {0x4E, 0.25f}, {0x4E, 1000000.0f} }; s32 D_803898D8[6] = { 0, 1, 2, 3, 6, 4}; ActorInfo chhutInfo = { MARKER_51_MM_HUT, ACTOR_9_MM_HUT, ASSET_7D7_MODEL_MM_HUT, 0, chhutAnimations, chhut_update, func_80326224, chhut_draw, 0, 0x100, 0.0f, 0 }; /* .code */ Actor *chhut_draw(ActorMarker *this, Gfx **arg1, Mtx **arg2, Vtx **arg3){ Actor *actorPtr; s32 temp_a1; s32 temp_a2; actorPtr = marker_getActor(this); temp_a1 = actorPtr->state != 2; temp_a2 = actorPtr->state == 0 || actorPtr->state == 2; this->propPtr->unk8_3 = temp_a2; func_8033A45C(1, temp_a1, temp_a2); return func_80325888(this, arg1, arg2, arg3); } void func_803869EC(ActorMarker *this){ Actor * actorPtr; f32 *pos; actorPtr = marker_getActor(this); actorPtr = func_8032813C(0x4B, actorPtr->position, 0); func_8032813C(ACTOR_4D_STEAM_2, actorPtr->position, 0); if(this); } void chhut_update(Actor *this){ f32 sp3C[3]; f32 sp30[3]; if(func_80334904() != 2) return; if(!this->initialized){ this->marker->collidable = 0; this->initialized = 1; } switch(this->state){ case 0: //L80386AA4 player_getPosition(sp30); sp3C[0] = sp30[0] - this->position_x; sp3C[1] = sp30[1] - this->position_y; sp3C[2] = sp30[2] - this->position_z; if(150.0f < sp3C[1] && player_getActiveHitbox(this->marker) == HITBOX_1_BEAK_BUSTER && func_8028F20C() && gu_sqrtf(sp3C[0]*sp3C[0] + sp3C[1]*sp3C[1] + sp3C[2]*sp3C[2]) < 350.0f ){ sp3C[0] = this->position_x; sp3C[1] = this->position_y; sp3C[2] = this->position_z; sp3C[1] += 125.0; func_8030E484(SFX_5B_HEAVY_STUFF_FALLING); func_80328A84(this, 1); actor_playAnimationOnce(this); func_802C3C88((GenMethod_1)func_803869EC, (s32)this->marker); func_802C8F70(this->yaw); if(D_8037DCB0 < 5){ func_802C3F04(func_802C4218, D_803898D8[D_8037DCB0], *(s32*)(&sp3C[0]),*(s32*)(&sp3C[1]),*(s32*)(&sp3C[2])); } else{ jiggySpawn(JIGGY_5_MM_HUTS, sp3C); } D_8037DCB0 = ( D_8037DCB0 + 1 ) % 6; } break; case 1: //L80386C2C if(animctrl_getAnimTimer(this->animctrl) > 0.99){ animctrl_setTransitionDuration(this->animctrl, 0.0f); func_80328A84(this, 2); this->position_y -= 160.0f; } break; case 2: //L80386C80 break; } } void func_80386C90(void){ D_8037DCB0 = 0; }