233 lines
7.3 KiB
C
233 lines
7.3 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
extern void func_80328748(ActorAnimCtrl *, f32, f32);
|
|
extern void func_8028F94C(s32, f32[3]);
|
|
extern void func_80324CFC(f32, enum comusic_e, s32);
|
|
extern void func_803289EC(Actor *, f32, s32);
|
|
extern void func_80326310(Actor *);
|
|
extern void actor_setOpacity(Actor *, s32);
|
|
extern void func_802C3D3C(void (*)(s32, s32), s32, s32);
|
|
extern void func_802BAFE4(s32 arg0);
|
|
|
|
|
|
|
|
void func_80387D18(ActorMarker *, u32);
|
|
Actor *func_8038860C(ActorMarker *, Gfx**, Mtx **, Vtx**);
|
|
void func_80387FD4(Actor *this);
|
|
|
|
/* .data */
|
|
s16 D_803907B0[4] = {0x15, 0x16, 0x17, 0x18};
|
|
ActorMarker *bgs_D_803907B8[5] = {NULL};
|
|
ActorAnimationInfo D_803907CC[] = {
|
|
{0x000, 0.0f},
|
|
{0x14B, 3.3e+7f},
|
|
{0x14B, 1.4f},
|
|
{0x14B, 3.3e+7f},
|
|
{0x14B, 1.4f},
|
|
{0x14B, 2.0f},
|
|
{0x14B, 2.0f}
|
|
};
|
|
ActorInfo D_80390804 ={MARKER_FC_CROCTUS, ACTOR_1FA_CROCTUS, ASSET_425_MODEL_CROCTUS,
|
|
1, D_803907CC,
|
|
func_80387FD4, func_80326224, func_8038860C,
|
|
0, 0, 0.0f, 0
|
|
};
|
|
|
|
/* .code */
|
|
void func_80387C90(Actor *arg0){
|
|
animctrl_setDuration(arg0->animctrl, 0.4 + 0.9999999999999999 * ((f32)(5 - arg0->unkF4_8) * 0.25));
|
|
}
|
|
|
|
void func_80387D18(ActorMarker * arg0, u32 arg1){
|
|
Actor* this;
|
|
Actor* nextActPtr;
|
|
|
|
this = marker_getActor(arg0);
|
|
nextActPtr = spawn_child_actor(0x6A, &this);
|
|
nextActPtr->state = 2;
|
|
nextActPtr->unkF4_8 = 0x8C;
|
|
nextActPtr->unk60 = 3.0f;
|
|
nextActPtr->unk38_31 = arg1;
|
|
if(arg0);
|
|
}
|
|
|
|
void *func_80387D90(ActorMarker * arg0){
|
|
ActorMarker *marker;
|
|
Actor* this;
|
|
f32 spawnPos[3];
|
|
|
|
marker = reinterpret_cast(ActorMarker *, arg0);
|
|
this = marker_getActor(marker);
|
|
spawnPos[0] = this->position_x;
|
|
spawnPos[1] = this->position_y;
|
|
spawnPos[2] = this->position_z;
|
|
marker->propPtr->unk8_3 = 0;
|
|
func_802BAFE4(0x19);
|
|
jiggySpawn(JIGGY_22_CROCTUS, spawnPos);
|
|
func_8025A6EC(COMUSIC_2D_PUZZLE_SOLVED_FANFARE, 0x7FFF);
|
|
}
|
|
|
|
void func_80387E00(s32 arg0){
|
|
ActorMarker *marker = reinterpret_cast(ActorMarker *, arg0);
|
|
Actor * this = marker_getActor(marker);
|
|
|
|
func_803262E4(this);
|
|
func_802C3D3C(func_80387D18, reinterpret_cast(s32, marker), 0x1E);
|
|
}
|
|
|
|
void func_80387E40(ActorMarker * arg0){
|
|
Actor *thisActor = marker_getActor(arg0);
|
|
func_80326310(thisActor);
|
|
if(arg0);
|
|
}
|
|
|
|
void func_80387E68(ActorMarker *caller, enum asset_e text_id, s32 arg2){
|
|
Actor *this;
|
|
|
|
if(text_id == 0xC86){
|
|
this = marker_getActor(caller);
|
|
timed_playSfx(0.4f, SFX_C9_PAUSEMENU_ENTER, 1.0f, 32000);
|
|
timed_playSfx(1.4f, SFX_C9_PAUSEMENU_ENTER, 1.0f, 32000);
|
|
func_80324CFC(0.4f, COMUSIC_43_ENTER_LEVEL_GLITTER, 22000);
|
|
func_80324D2C(4.5f, COMUSIC_43_ENTER_LEVEL_GLITTER);
|
|
func_80328B8C(this, 5, 0.79f, 1);
|
|
func_80326310(this);
|
|
bgs_D_803907B8[this->unkF4_8]->propPtr->unk8_4 = TRUE;
|
|
timedFunc_set_1(1.1f, func_80387E00, bgs_D_803907B8[this->unkF4_8]);
|
|
timed_setCameraToNode(0.8f, 9);
|
|
func_80324DBC(3.4f, 0xC87, 0xE, NULL, NULL, func_80387E68, NULL);
|
|
func_802C3D3C(&func_80387D18, this->marker, 0x46);
|
|
}
|
|
else{
|
|
func_80324E88(0.0f);
|
|
func_8028F918(0);
|
|
}
|
|
}
|
|
|
|
void func_80387FD4(Actor *this){
|
|
int j;
|
|
|
|
if(!this->unk16C_4){
|
|
if(jiggyscore_isCollected(JIGGY_22_CROCTUS)){
|
|
marker_despawn(this->marker);
|
|
return;
|
|
}
|
|
this->unk16C_4 = TRUE;
|
|
if(bgs_D_803907B8[this->unkF4_8 - 1] == 0){
|
|
bgs_D_803907B8[this->unkF4_8 - 1] = this->marker;
|
|
for(j = this->unkF4_8; j < 6; j++){
|
|
if(bgs_D_803907B8[j] != NULL){
|
|
bgs_D_803907B8[j]->propPtr->unk8_4 = FALSE;
|
|
actor_setOpacity(marker_getActor(bgs_D_803907B8[j]), 0);
|
|
}
|
|
}//L803880C8
|
|
|
|
for( j = this->unkF4_8 - 2; j >= 0 && bgs_D_803907B8[j] == NULL; j--);
|
|
|
|
|
|
if(j >= 0){
|
|
this->marker->propPtr->unk8_4 = FALSE;
|
|
actor_setOpacity(this, 0);
|
|
}
|
|
this->marker->propPtr->unk8_3 = TRUE;
|
|
}//L80388144
|
|
func_803289EC(this, 0.0f, 1);
|
|
this->unk60 = 0.0f;
|
|
return;
|
|
}//L80388160
|
|
|
|
if(this->unk38_31){
|
|
if ((this->state != 5) && (this->state != 6)) {
|
|
func_8025A6EC(COMUSIC_2B_DING_B, 28000); //TODO ISSUE HERE
|
|
if (this->unkF4_8 == 1) {
|
|
func_8028F94C(2, this->position);
|
|
func_80311480(0xC86, 0xE, this->position, this->marker, func_80387E68, NULL);
|
|
func_80328B8C(this, 6, 0.79f, 1);
|
|
} else {
|
|
timed_playSfx(0.4f, SFX_C9_PAUSEMENU_ENTER, 1.0f, 32000); //0.4f
|
|
timed_playSfx(1.4f, SFX_C9_PAUSEMENU_ENTER, 1.0f, 32000); //1.4f
|
|
func_80324CFC(0.4f, COMUSIC_43_ENTER_LEVEL_GLITTER, 22000);
|
|
func_80324D2C(4.5f, COMUSIC_43_ENTER_LEVEL_GLITTER);
|
|
func_80328B8C(this, 5, 0.79f, 1);
|
|
if (this->unkF4_8 == 5) {
|
|
timedFunc_set_1(0.9f, (GenMethod_1) func_80387E40, (s32) this->marker);
|
|
} else {
|
|
func_80326310(this);
|
|
}
|
|
if (this->unkF4_8 < 5) {
|
|
bgs_D_803907B8[this->unkF4_8]->propPtr->unk8_4 = TRUE;
|
|
timedFunc_set_1(1.1f, (GenMethod_1)func_80387E00, bgs_D_803907B8[this->unkF4_8]);
|
|
func_802BAFE4(D_803907B0[this->unkF4_8-1]);
|
|
} else {
|
|
timedFunc_set_1(0.8f, (GenMethod_1)func_80387D90, (s32) this->marker);
|
|
}
|
|
func_802C3D3C(&func_80387D18, this->marker, 0x46);
|
|
}
|
|
}
|
|
}//L80388348
|
|
|
|
switch(this->state){
|
|
case 1:// L80388370
|
|
this->unk60 += time_getDelta();
|
|
if(0.7 <= this->unk60){
|
|
func_80328B8C(this, 2, 0.0f, 1);
|
|
func_80387C90(this);
|
|
this->unk60 = 0.0f;
|
|
func_80324D54(0.1f, SFX_D0_GRIMLET_SQUEAK, 1.0f, 0x7530, this->position, 0.0f, 1800.0f);
|
|
}
|
|
break;
|
|
|
|
case 2:// L80388400
|
|
if(actor_animationIsAt(this, 0.62f)){
|
|
func_80328B8C(this, 3, 0.62f, 1);
|
|
}
|
|
break;
|
|
|
|
case 3:// L80388434
|
|
this->unk60 += time_getDelta();
|
|
if( this->unk60 >= 0.13 + 0.7/4 * (5 - this->unkF4_8)){
|
|
func_80328B8C(this, 4, 0.62f, 1);
|
|
func_80387C90(this);
|
|
this->unk60 = 0.0f;
|
|
func_80324D54(0.3f, 0x406, 1.0f, 0x55f0, this->position, 0.0f, 1800.0f);
|
|
}
|
|
break;
|
|
|
|
case 4:// L8038850C
|
|
if(actor_animationIsAt(this, 0.0f)){
|
|
func_80328B8C(this, 1, 0.0f, 1);
|
|
}
|
|
break;
|
|
|
|
case 5:// L80388538
|
|
func_80328748(this->animctrl, 0.79f, 0.97f);
|
|
if( actor_animationIsAt(this, 0.84f)
|
|
&& !animctrl_isPlayedForwards(this->animctrl)
|
|
&& func_802BB270()
|
|
){
|
|
func_8030E6A4(SFX_C8_CRUNCH, randf2(0.93f, 1.07f), 22000);
|
|
}
|
|
break;
|
|
|
|
case 6:// L803885B0
|
|
func_80328748(this->animctrl, 0.79f, 0.97f);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
void BGS_func_803885DC(void){
|
|
s32 i;
|
|
for(i = 0; i<5; i++)
|
|
bgs_D_803907B8[i] = 0;
|
|
}
|
|
|
|
Actor *func_8038860C(ActorMarker *this, Gfx** gdl, Mtx ** mptr, Vtx **vtx){
|
|
Actor *thisActor;
|
|
thisActor = marker_getActor(this);
|
|
func_8033A45C(1, thisActor->unkF4_8);
|
|
return func_80325888(this, gdl, mptr, vtx);
|
|
}
|