88 lines
2.2 KiB
C
88 lines
2.2 KiB
C
#include <ultra64.h>
|
|
#include "functions.h"
|
|
#include "variables.h"
|
|
|
|
extern ActorInfo D_80390FD0;
|
|
|
|
typedef struct {
|
|
s16 unk0;
|
|
s16 unk2;
|
|
u8 *unk4;
|
|
}ActorLocal_RBB_5060;
|
|
|
|
void chWhistleCtrl_update(Actor * this);
|
|
|
|
/* .data */
|
|
ActorInfo D_80390A50 = {
|
|
0x2D, 0x1C5, 0x0, 0x0, NULL,
|
|
chWhistleCtrl_update, NULL, func_80325340,
|
|
0, 0, 0.0f, 0
|
|
};
|
|
|
|
f32 D_80390A74[3] = {-3820.0f, 850.0f, 0.0f}; //whistle jiggy spawn position
|
|
|
|
/* .code */
|
|
void __chWhistleCtrl_setState(Actor *actor, s32 arg1){
|
|
actor->state = arg1;
|
|
}
|
|
|
|
void __chWhistleCtrl_soundWhistle(void){
|
|
func_802C8F70(225.0f);
|
|
jiggySpawn(JIGGY_54_RBB_WHISTLE, D_80390A74);
|
|
}
|
|
|
|
void __chWhistleCtrl_correct(void){
|
|
func_8025A6EC(COMUSIC_2B_DING_B, 28000);
|
|
}
|
|
|
|
void __chWhistleCtrl_wrong(ActorMarker *marker){
|
|
func_8025A6EC(COMUSIC_2C_BUZZER, 28000);
|
|
func_8028F530(0xD);
|
|
}
|
|
|
|
void __chWhistleCtrl_complete(void){
|
|
func_8025A6EC(COMUSIC_2D_PUZZLE_SOLVED_FANFARE, 28000);
|
|
func_80324E38(1.0f, 3);
|
|
timed_setStaticCameraToNode(2.0f, 10);
|
|
timedFunc_set_0(2.2f, __chWhistleCtrl_soundWhistle);
|
|
timed_exitStaticCamera(5.0f);
|
|
func_80324E38(5.0f, 0);
|
|
}
|
|
|
|
s32 chWhistleCtrl_newEvent(Actor *this, s32 whistle_id, Actor *other){
|
|
ActorLocal_RBB_5060 *local = (ActorLocal_RBB_5060 *)&this->local;
|
|
|
|
if(this->state != 1)
|
|
return 0;
|
|
|
|
if(whistle_id + 0x30 == local->unk4[local->unk0]){ //correct
|
|
if(local->unk4[++local->unk0] == 0){ //end of string
|
|
timedFunc_set_0(0.6f, __chWhistleCtrl_complete); //spawn jiggy
|
|
__chWhistleCtrl_setState(this, 2);
|
|
return 3;
|
|
}else{
|
|
timedFunc_set_0(0.6f, __chWhistleCtrl_correct);
|
|
return 1;
|
|
}
|
|
}
|
|
else{ //wrong
|
|
timedFunc_set_1(1.0f, __chWhistleCtrl_wrong, other->marker);
|
|
local->unk0 = 0;
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
void chWhistleCtrl_update(Actor *this){
|
|
ActorLocal_RBB_5060 *local = (ActorLocal_RBB_5060 *)&this->local;
|
|
|
|
if(!this->unk16C_4){
|
|
this->unk16C_4 = 1;
|
|
local->unk2 = 1;
|
|
local->unk4 = "312111";
|
|
if(jiggyscore_isSpawned(JIGGY_54_RBB_WHISTLE))
|
|
__chWhistleCtrl_setState(this, 2);
|
|
else
|
|
__chWhistleCtrl_setState(this, 1);
|
|
}
|
|
}
|