Files
banjo-kazooie/src/core2/code_935F0.c
2024-06-16 22:36:36 -05:00

196 lines
5.9 KiB
C

#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern void func_8028F918(s32);
void chMinigame_update(Actor *this);
enum minigame_e {
MINIGAME_0_BOSS_BOOM_BOX,
MINIGAME_1_VILE,
MINIGAME_2_GV_MATCHING,
MINIGAME_3_ZUBBAS,
MINIGAME_4_TIPTUP,
MINIGAME_5_SANDCASTLE,
MINIGAME_F_INVALID = 0xF
};
enum chminigame_state_e {
MINIGAME_STATE_1_INTRODUCE_GAME = 1,
MINIGAME_STATE_2_IN_PROGESS,
MINIGAME_STATE_3_RETURN_TO_FF,
};
/* .data */
ActorInfo chMinigame = {
MARKER_1E1_FF_MINIGAME, ACTOR_376_FF_MINIGAME, 0x0,
MINIGAME_STATE_1_INTRODUCE_GAME, NULL,
chMinigame_update, func_80326224, func_80325340,
0, 0, 0.0f, 0
};
/* .code */
enum minigame_e __chminigame_getCurrentMapId(void){
switch(map_get()){
case MAP_3A_RBB_BOSS_BOOM_BOX:
return MINIGAME_0_BOSS_BOOM_BOX;
case MAP_10_BGS_MR_VILE:
return MINIGAME_1_VILE;
case MAP_13_GV_MEMORY_GAME:
return MINIGAME_2_GV_MATCHING;
case MAP_5A_CCW_SUMMER_ZUBBA_HIVE:
case MAP_5B_CCW_SPRING_ZUBBA_HIVE:
case MAP_5C_CCW_AUTUMN_ZUBBA_HIVE:
return MINIGAME_3_ZUBBAS;
case MAP_11_BGS_TIPTUP:
return MINIGAME_4_TIPTUP;
case MAP_A_TTC_SANDCASTLE:
return MINIGAME_5_SANDCASTLE;
}
return MINIGAME_F_INVALID;
}
void __chMinigame_hideSandcastleJiggy(Actor *this) {
Actor *jiggy;
if (this->unk10_12 == MINIGAME_5_SANDCASTLE) {
jiggy = actorArray_findActorFromActorId(ACTOR_46_JIGGY);
if (jiggy != NULL) {
actor_collisionOff(jiggy);
jiggy->position[1] -= 1000.0f;
}
}
}
void func_8031A678(Actor *this){
Struct6Ds *sp2C;
f32 sp20[3];
sp2C = func_8034C528(0x190);
switch (this->unk10_12) {
case MINIGAME_0_BOSS_BOOM_BOX:
sp20[0] = -2000.0f;
sp20[1] = 0.0f;
sp20[2] = 0.0f;
func_8034DDF0(sp2C, sp20, sp20, 0.0f, 1);
return;
case MINIGAME_3_ZUBBAS:
if (map_get() != MAP_5B_CCW_SPRING_ZUBBA_HIVE) {
sp20[0] = 0.0f;
sp20[1] = 0.0f;
sp20[2] = -1000.0f;
func_8034DDF0(sp2C, sp20, sp20, 0.0f, 1);
}
break;
case MINIGAME_5_SANDCASTLE:
sp2C = func_8034C528(0x191); //lower water
func_8034DEB4(sp2C, -1000.0f);
break;
case MINIGAME_2_GV_MATCHING:
sp2C = func_8034C528(0x1E7);
func_8034DEB4(sp2C, -1000.0f);
break;
case MINIGAME_1_VILE:
case MINIGAME_4_TIPTUP:
func_8034DEB4(sp2C, -1000.0f);
break;
}
}
void __chMinigame_textCallback1(ActorMarker *marker, enum asset_e text_id, s32 arg2){
Actor *this = marker_getActor(marker);
this->unk138_24 = TRUE;
}
void __chMinigame_transformToCroc(ActorMarker *marker, enum asset_e text_id, s32 arg2){
if(arg2 == 1){
func_8028FB88(TRANSFORM_5_CROC);
}
}
void __chMinigame_setState(Actor *this, u32 arg1) {
switch (arg1) {
case MINIGAME_STATE_1_INTRODUCE_GAME:
func_8028F918(2);
if (this->unk10_12 == MINIGAME_1_VILE) {
func_80347A14(0);
}
if (func_803203FC(this->unk10_12 + 6) == 0) {
func_80324DBC(2.0f, this->unk10_12 + 0x1026, 0xA2, NULL, this->marker, __chMinigame_textCallback1, __chMinigame_transformToCroc);
func_803204E4(this->unk10_12 + 6, 1);
this->unk138_23 = TRUE;
} else {
func_80324DBC(2.0f, 0xD38, 0x20, NULL, this->marker, __chMinigame_textCallback1, NULL);
}
break;
case MINIGAME_STATE_2_IN_PROGESS:
func_8028F918(0);
func_803204E4(3, 1);
break;
case MINIGAME_STATE_3_RETURN_TO_FF:
func_803204E4(4, 1);
func_8028F918(2);
func_8025AB00();
func_8025A70C((func_803203FC(5)) ? COMUSIC_3B_MINIGAME_VICTORY : COMUSIC_3C_MINIGAME_LOSS);
func_802E4A70();
func_803204E4(0x21, TRUE);
timedFunc_set_3(2.0f, (GenFunction_3)func_802E4078, MAP_8E_GL_FURNACE_FUN, 1, 1);
break;
}
subaddie_set_state(this, arg1);
}
void __chMinigame_free(Actor *this){
func_803204E4(3, 0);
}
void chMinigame_update(Actor *this){
if(!this->unk16C_4){
this->unk16C_4 = 1;
this->unk10_12 = __chminigame_getCurrentMapId();
actor_collisionOff(this);
if(!func_803203FC(2)){
func_8031A678(this);
return;
}
__chMinigame_hideSandcastleJiggy(this);
marker_setFreeMethod(this->marker, __chMinigame_free);
func_8028FAB0(this->position);
this->unk1C[0] = 0.0f; this->unk1C[1] = this->yaw; this->unk1C[2] = 0.0f;
func_8028FAEC(this->unk1C);
this->unk138_24 = 0;
if(this->unk10_12 >= 7){
marker_despawn(this->marker);
return;
}
func_803204E4(5, 0);
func_803204E4(3, 0);
__chMinigame_setState(this, MINIGAME_STATE_1_INTRODUCE_GAME);
gcpausemenu_80314AC8(0);
}
if(func_803203FC(2)){
switch(this->state){
case MINIGAME_STATE_1_INTRODUCE_GAME://L8031AB2C
if(this->unk138_24)
__chMinigame_setState(this, MINIGAME_STATE_2_IN_PROGESS);
break;
case MINIGAME_STATE_2_IN_PROGESS://L8031AB50
func_8028FA14(MAP_8E_GL_FURNACE_FUN, 2);
if(item_getCount(ITEM_14_HEALTH) == 0)
item_set(ITEM_6_HOURGLASS, 0);
if(!func_803203FC(3)){
__chMinigame_setState(this, MINIGAME_STATE_3_RETURN_TO_FF);
}
break;
case MINIGAME_STATE_3_RETURN_TO_FF:
break;
}
}//L8031AB8C
}