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

76 lines
2.1 KiB
C
Raw Permalink Normal View History

2019-08-25 04:46:40 +00:00
// 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;
}
2019-10-05 19:08:05 +00:00
o->oHiddenStarTriggerCounter = 5 - sp36;
2019-08-25 04:46:40 +00:00
}
void bhv_hidden_star_loop(void) {
switch (o->oAction) {
case 0:
2019-10-05 19:08:05 +00:00
if (o->oHiddenStarTriggerCounter == 5)
2019-08-25 04:46:40 +00:00
o->oAction = 1;
break;
case 1:
if (o->oTimer > 2) {
2020-03-02 03:42:52 +00:00
spawn_red_coin_cutscene_star(o->oPosX, o->oPosY, o->oPosZ);
spawn_mist_particles();
2019-08-25 04:46:40 +00:00
o->activeFlags = 0;
}
break;
}
}
/* TODO: this is likely not a checkpoint but a Secret */
void bhv_hidden_star_trigger_loop(void) {
struct Object *hiddenStar;
2020-03-02 03:42:52 +00:00
if (obj_check_if_collided_with_object(o, gMarioObject) == 1) {
hiddenStar = cur_obj_nearest_object_with_behavior(bhvHiddenStar);
2019-08-25 04:46:40 +00:00
if (hiddenStar != NULL) {
2019-10-05 19:08:05 +00:00
hiddenStar->oHiddenStarTriggerCounter++;
if (hiddenStar->oHiddenStarTriggerCounter != 5) {
2019-12-02 02:52:53 +00:00
spawn_orange_number(hiddenStar->oHiddenStarTriggerCounter, 0, 0, 0);
2019-08-25 04:46:40 +00:00
}
#ifdef VERSION_JP
2019-10-05 19:08:05 +00:00
play_sound(SOUND_MENU_STAR_SOUND, gDefaultSoundArgs);
2019-08-25 04:46:40 +00:00
#else
2019-10-05 19:08:05 +00:00
play_sound(SOUND_MENU_COLLECT_SECRET
+ (((u8) hiddenStar->oHiddenStarTriggerCounter - 1) << 16),
2019-08-25 04:46:40 +00:00
gDefaultSoundArgs);
#endif
}
o->activeFlags = 0;
}
}
void bhv_bowser_course_red_coin_star_loop(void) {
2019-10-05 19:08:05 +00:00
gRedCoinsCollected = o->oHiddenStarTriggerCounter;
2019-08-25 04:46:40 +00:00
switch (o->oAction) {
case 0:
2019-10-05 19:08:05 +00:00
if (o->oHiddenStarTriggerCounter == 8)
2019-08-25 04:46:40 +00:00
o->oAction = 1;
break;
case 1:
if (o->oTimer > 2) {
2020-03-02 03:42:52 +00:00
spawn_no_exit_star(o->oPosX, o->oPosY, o->oPosZ);
spawn_mist_particles();
2019-08-25 04:46:40 +00:00
o->activeFlags = 0;
}
break;
}
}