#include #include "functions.h" #include "variables.h" Actor *FP_func_80386E30(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx); void chXmasTree_update(Actor *this); /* .data */ ActorInfo D_80391B50 = { MARKER_BA_XMAS_TREE, ACTOR_15F_XMAS_TREE, ASSET_488_MODEL_XMAS_TREE, 0x1, NULL, chXmasTree_update, func_80326224, FP_func_80386E30, 0, 0, 0.0f, 0 }; s32 chXmasTree_switch_spawn_position[3] = {-0x1220, 0x6A, 0x1945}; /* .code */ Actor *FP_func_80386E30(ActorMarker *marker, Gfx **gfx, Mtx **mtx, Vtx **vtx){ Actor *this = marker_getActor(marker); func_8033A45C(5, this->unk38_31); func_8033A45C(6, func_8031FF1C(0x13) && !func_8033A0F0(5)); return func_80325888(marker, gfx, mtx, vtx); } void func_80386EAC(Actor *this){ u8 tmp_a0; item_set(ITEM_6_HOURGLASS, FALSE); tmp_a0 = this->unk44_31; if(tmp_a0){ func_8030DA44(tmp_a0); this->unk44_31 = 0; } } void FP_func_80386EF4(Actor *this, int arg1){ this->unk38_31 = arg1; mapSpecificFlags_set(0, this->unk38_31); } void func_80386F3C(void){ levelSpecificFlags_set(0x29, TRUE); func_803228D8(); func_803204E4(0xe, 1); func_802E4078(MAP_53_FP_CHRISTMAS_TREE, 1, 0); } void func_80386F84(Actor * this){ func_80328A84(this, 2); FP_func_80386EF4(this, 0); } void func_80386FB4(void){ func_8032811C(ACTOR_338_XMAS_TREE_SWITCH, chXmasTree_switch_spawn_position, 350); } void FP_func_80386FE0(void *marker){ Actor *this = marker_getActor(reinterpret_cast(ActorMarker *, marker)); Actor *child = spawn_child_actor(0x339, &this); s32 pad; child->position_x += 20.0f; child->position_z += 25.0f; } void func_80387038(Actor *this){ if(func_8030E3FC(this->unk44_31)) func_8030E394(this->unk44_31); func_8030DBB4(this->unk44_31, randf2(0.9f, 1.1f)); func_8030E2C4(this->unk44_31); } void func_8038709C(Actor *this){ if(this->state == 5){ if(!mapSpecificFlags_get(0)) func_80387038(this); return; } if(mapSpecificFlags_get(0) && !func_8030E3FC(this->unk44_31)) func_80387038(this); } void chXmasTree_update(Actor *this){ f32 sp2C = time_getDelta(); u8 tmp_a0; if(!this->unk16C_4){ this->unk16C_4 = TRUE; this->marker->propPtr->unk8_3 = TRUE; this->marker->collidable = FALSE; func_803300D8(this->marker, func_80386EAC); if(this->unk44_31 == 0){ this->unk44_31 = func_8030D90C(); sfxsource_setSfxId(this->unk44_31, SFX_415_UNKNOWN); func_8030DD14(this->unk44_31, 3); sfxsource_setSampleRate(this->unk44_31, 28000); } __spawnQueue_add_0(func_80386FB4); __spawnQueue_add_1((GenMethod_1)FP_func_80386FE0, reinterpret_cast(s32, this->marker)); if(func_8031FF1C(0x13)){ func_80386F84(this); mapSpecificFlags_set(2, FALSE); } } this->depth_mode = 1; if(jiggyscore_isCollected(JIGGY_2F_FP_XMAS_TREE) || levelSpecificFlags_get(0x29)){ FP_func_80386EF4(this, 1); return; } switch(this->state){ case 1: // L80387268 FP_func_80386EF4(this, 0); if(func_8031FF1C(0x13)){ func_80386F84(this); } break; case 2: // L80387294 if(!mapSpecificFlags_get(2)) break; func_80328A84(this, 3); this->unk60 = 2.0f; func_8025A6EC(COMUSIC_61_XMAS_TREE_LIGHTS_UP, 28000); func_802BAFE4(0x1A); func_80311480(0xC14, 0, NULL, NULL, NULL, NULL); break; case 3: // L803872F0 if(0.0 <= this->unk60){ if( 1.8 < this->unk60){ FP_func_80386EF4(this, 0); } else if(this->unk60 < 0.2){//L80387340 FP_func_80386EF4(this, 1); } else{ if(randf() < 0.2){ FP_func_80386EF4(this, this->unk38_31 ^ 1); func_8038709C(this); } }//L803873AC this->unk60 -= sp2C; } else{//L803873BC if(func_802BB270()){ func_80328A84(this, 4); FP_func_80386EF4(this, 1); item_set(ITEM_0_HOURGLASS_TIMER, 3600 - 1); item_set(ITEM_6_HOURGLASS, TRUE); } } break; case 4: // L80387400 if(mapSpecificFlags_get(3)){ func_80328A84(this, 6); FP_func_80386EF4(this, 1); item_set(ITEM_6_HOURGLASS, FALSE); tmp_a0 = this->unk44_31; if(tmp_a0){ func_8030DA44(tmp_a0); this->unk44_31 = 0; } func_80324E38(0.0f, 3); timedFunc_set_0(0.5f, func_80386F3C); } else{//L80387470 if(item_empty(ITEM_6_HOURGLASS)){ func_80328A84(this, 5); mapSpecificFlags_set(2, FALSE); this->unk60 = 0.1f; if(!func_8038BFA0()){ if(!mapSpecificFlags_get(9) || mapSpecificFlags_get(1)){ func_8025A6EC(COMUSIC_3C_MINIGAME_LOSS, 28000); func_802BAFE4(0x1a); this->unk60 = 2.0f; } } } } break; case 5: // L803874EC if(0.0 <= this->unk60){ if( 1.8 < this->unk60){ FP_func_80386EF4(this, 1); } else if(this->unk60 < 0.2){ FP_func_80386EF4(this, 0); } else{ if(randf() < 0.2){ FP_func_80386EF4(this, this->unk38_31 ^ 1); func_8038709C(this); } } this->unk60 -= sp2C; } else{ func_80386F84(this); } break; } }