sm64pc/src/game/behaviors/hidden_star.inc.c

76 lines
2.1 KiB
C

// hidden_star.c.inc
void bhv_hidden_star_init(void) {
s16 sp36;
struct Object *sp30;
sp36 = count_objects_with_behavior(bhvHiddenStarTrigger);
if (sp36 == 0) {
sp30 =
spawn_object_abs_with_rot(o, 0, MODEL_STAR, bhvStar, o->oPosX, o->oPosY, o->oPosZ, 0, 0, 0);
sp30->oBehParams = o->oBehParams;
o->activeFlags = 0;
}
o->oHiddenStarTriggerCounter = 5 - sp36;
}
void bhv_hidden_star_loop(void) {
switch (o->oAction) {
case 0:
if (o->oHiddenStarTriggerCounter == 5)
o->oAction = 1;
break;
case 1:
if (o->oTimer > 2) {
spawn_red_coin_cutscene_star(o->oPosX, o->oPosY, o->oPosZ);
spawn_mist_particles();
o->activeFlags = 0;
}
break;
}
}
/* TODO: this is likely not a checkpoint but a Secret */
void bhv_hidden_star_trigger_loop(void) {
struct Object *hiddenStar;
if (obj_check_if_collided_with_object(o, gMarioObject) == 1) {
hiddenStar = cur_obj_nearest_object_with_behavior(bhvHiddenStar);
if (hiddenStar != NULL) {
hiddenStar->oHiddenStarTriggerCounter++;
if (hiddenStar->oHiddenStarTriggerCounter != 5) {
spawn_orange_number(hiddenStar->oHiddenStarTriggerCounter, 0, 0, 0);
}
#ifdef VERSION_JP
play_sound(SOUND_MENU_STAR_SOUND, gDefaultSoundArgs);
#else
play_sound(SOUND_MENU_COLLECT_SECRET
+ (((u8) hiddenStar->oHiddenStarTriggerCounter - 1) << 16),
gDefaultSoundArgs);
#endif
}
o->activeFlags = 0;
}
}
void bhv_bowser_course_red_coin_star_loop(void) {
gRedCoinsCollected = o->oHiddenStarTriggerCounter;
switch (o->oAction) {
case 0:
if (o->oHiddenStarTriggerCounter == 8)
o->oAction = 1;
break;
case 1:
if (o->oTimer > 2) {
spawn_no_exit_star(o->oPosX, o->oPosY, o->oPosZ);
spawn_mist_particles();
o->activeFlags = 0;
}
break;
}
}