#include #include "functions.h" #include "variables.h" /* extern functions */ int func_80353064(f32*, f32); void func_802BB3DC(s32, f32, f32); typedef struct{ s32 unk0; s32 unk4; TUPLE(f32, unk8); f32 unk14; s32 unk18; }ActorLocal_Juju_2; /* public functions */ void func_80389598(Actor *this); Actor* func_80389014(ActorMarker *, Gfx **, Mtx**, Vtx** ); /* .bss */ u8 MM_pad_80389C80[0x10]; s32 MM_D_80389C90; /* .data */ ActorInfo chjujuInfo = { MARKER_67_JUJU, ACTOR_59_JUJU, ASSET_2E6_MODEL_JUJU, 0, NULL, func_80389598, func_80326224, func_80389014, 0, 0, 0.0f, 0 }; void func_80388FD0(Actor *this, f32 *arg1, f32 *arg2, s32 arg3){ ActorLocal_Juju_2 *local; local = (ActorLocal_Juju_2 *)&this->local; local->unk0 = arg3; local->unk14 = 1.0f; this->position_x = arg1[0]; this->position_y = arg1[1]; this->position_z = arg1[2]; local->unk8_x = arg2[0]; local->unk8_y = arg2[1]; local->unk8_z = arg2[2]; } Actor* func_80389014(ActorMarker *this, Gfx **dl, Mtx **mPtr, Vtx **arg2){ f32 sp34[3]; Actor * actorPtr; ActorLocal_Juju_2 *jujuPtr; actorPtr = marker_getActorAndRotation(this, sp34); jujuPtr = (ActorLocal_Juju_2 *)&actorPtr->local; if(jujuPtr->unk0 != 2){ modelRender_setDepthMode(MODEL_RENDER_DEPTH_FULL); modelRender_draw(dl, mPtr, actorPtr->position, sp34, jujuPtr->unk14, NULL, func_80330B1C(this)); } return actorPtr; } void func_803890A0(ActorMarker *arg0, s32 arg1){ int s1; Actor* actorPtr = marker_getActor(arg0); f32 sp5C[3]; s32 i; Actor* jujuPtr; sp5C[0] = actorPtr->position_x; sp5C[1] = actorPtr->position_y; sp5C[2] = actorPtr->position_z; for(i = 0; i < 4; i++){ jujuPtr = func_8032813C(ACTOR_59_JUJU, actorPtr->position, actorPtr->yaw); jujuPtr->marker->collidable = 0; actorPtr = marker_getActor(arg0); func_80388DE8(actorPtr, i, jujuPtr); s1 = (i >= arg1); func_80388FD0(jujuPtr, sp5C, actorPtr->position, (s1)? 1 : 2); if(s1){ sp5C[1] += 250.0f; } if(i == arg1){ ((ActorLocal_Juju_2 *)&jujuPtr->local)->unk18 = 1; } } } void func_803891E8(s32 x, s32 y, s32 z, s32 yaw){ f32 sp1C[3]; sp1C[0] = x; sp1C[1] = y + 0x14; sp1C[2] = z; jiggy_spawn(JIGGY_4_MM_JUJU, sp1C); } void func_80389244(s32 x, s32 y, s32 z, s32 yaw){ __spawnQueue_add_4((GenFunction_4)func_803891E8, x, y, z, yaw); func_802BB3DC(0, 10.0f, 0.8f); gcpausemenu_80314AC8(1); } void func_803892A8(ActorMarker **ptr){ s32 i; s32 j; s32 s2; s32 s6; Actor *actorPtr; ActorLocal_Juju_2 *jujuPtr; for(i = 0; i < 4; i++){ actorPtr = marker_getActor(ptr[i]); jujuPtr = (ActorLocal_Juju_2 *)&actorPtr->local; if(jujuPtr->unk0 != 2){ jujuPtr->unk0 = 5; jujuPtr->unk4 = 0xC; func_8030E484(0x3f6); if(i == 3){ gcpausemenu_80314AC8(0); timedFunc_set_4(1.25f, func_80389244, jujuPtr->unk8_x, jujuPtr->unk8_y, jujuPtr->unk8_z, actorPtr->yaw); func_8025A6EC(COMUSIC_2D_PUZZLE_SOLVED_FANFARE, 0x6d60); } else{//L80389384 func_8025A6EC(COMUSIC_2B_DING_B, 0x7fff); } for(s2 = 3, j = i + 1; j < 4; s2+=5, j++){ actorPtr = marker_getActor(ptr[j]); jujuPtr = (ActorLocal_Juju_2 *)&actorPtr->local; if(j == i+1){ jujuPtr->unk18 = 1; } jujuPtr->unk4 = s2; jujuPtr->unk0 = 3; } return; } } } int func_8038941C(ActorMarker **ptr){ s32 i; ActorLocal_Juju_2 *jujuPtr; for(i = 0; i < 4; i++){ jujuPtr = (ActorLocal_Juju_2 *)&marker_getActor(ptr[i])->local; if(jujuPtr->unk0 != 2) return 0; } return 1; } int func_8038948C(ActorMarker **ptr){ s32 i; ActorLocal_Juju_2 *jujuPtr; for(i = 0; i < 4; i++){ jujuPtr = (ActorLocal_Juju_2 *)&marker_getActor(ptr[i])->local; if(jujuPtr->unk0 != 1 && jujuPtr->unk0 != 2) return 0; } return 1; } void func_80389514(ActorMarker **ptr){ s32 i; MM_D_80389C90 = 0; for(i = 0; i < 4; i++){ if(((ActorLocal_Juju_2 *)&marker_getActor(ptr[i])->local)->unk0 != 2){ MM_D_80389C90++; }; } } void func_80389598(Actor *this){ ActorLocal_Juju_2 *jujuPtr = (ActorLocal_Juju_2 *)&this->local; s32 sp38 = 0; f32 sp34; f32 sp28[3]; this->marker->propPtr->unk8_3 = (jujuPtr->unk0 != 2) && (jujuPtr->unk0 != 5); switch(jujuPtr->unk0){ case 1: //L80389624 sp34 = this->yaw; this->yaw += ((0xb - MM_D_80389C90*2)*time_getDelta()*60.0f)/2; if(360.0f < this->yaw){ sp38 = 1; this->yaw -= 360.0f; }//L803896B4 if(jujuPtr->unk18){ if(sp38 || (sp34 < 180.0f && 180.0f <= this->yaw)){ mapSpecificFlags_set(9,1); } } break; case 3: //L80389700 if(--jujuPtr->unk4 == 0){ jujuPtr->unk0 = 4; jujuPtr->unk8_y = this->position_y - 250.0f; } break; case 5: //L80389738 jujuPtr->unk4--; jujuPtr->unk14 *= 0.85; {sp28[0] = 100.0f; sp28[1] = 0.0f; sp28[2] = 0.0f;} ml_vec3f_yaw_rotate_copy(sp28, sp28, this->yaw + 90.0); this->position_x += sp28[0]; this->position_y += sp28[1]; this->position_z += sp28[2]; if(!jujuPtr->unk4){ jujuPtr->unk0 = 2; } break; case 4: //L803897F8 this->position_y -= 25.0; if(jujuPtr->unk8_y == this->position_y){ jujuPtr->unk0 = 1; func_8030E484(SFX_3_DULL_CANNON_SHOT); func_802BB3DC(0, 10.0f, 0.8f); if(jujuPtr->unk18) func_80353064(this->position, 24.0f); } break; }//L8038987C }