You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
added support for up to 99 red coins in an area
This commit is contained in:
@@ -4581,6 +4581,7 @@ const BehaviorScript bhvRedCoin[] = {
|
||||
const BehaviorScript bhvBowserCourseRedCoinStar[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||
CALL_NATIVE(bhv_bowser_course_red_coin_star_init),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_bowser_course_red_coin_star_loop),
|
||||
END_LOOP(),
|
||||
|
||||
@@ -797,6 +797,9 @@
|
||||
#define /*0x0F8*/ oRespawnerMinSpawnDist OBJECT_FIELD_F32(0x1C)
|
||||
#define /*0x0FC*/ oRespawnerBehaviorToRespawn OBJECT_FIELD_CVPTR(0x1D)
|
||||
|
||||
/* Orange Number */
|
||||
#define /*0x110*/ oOrangeNumberOffset OBJECT_FIELD_S32(0x22)
|
||||
|
||||
/* Openable Grill */
|
||||
#define /*0x088*/ oOpenableGrillIsOpen OBJECT_FIELD_S32(0x00)
|
||||
#define /*0x0F4*/ oOpenableGrillFloorSwitchObj OBJECT_FIELD_OBJ(0x1B)
|
||||
@@ -998,6 +1001,7 @@
|
||||
/* Hidden Star */
|
||||
// Secrets/Red Coins
|
||||
#define /*0x0F4*/ oHiddenStarTriggerCounter OBJECT_FIELD_S32(0x1B)
|
||||
#define /*0x0F8*/ oHiddenStarTriggerTotal OBJECT_FIELD_S32(0x1C)
|
||||
|
||||
/* Sealed Door Star */
|
||||
#define /*0x108*/ oUnlockDoorStarState OBJECT_FIELD_U32(0x20)
|
||||
|
||||
@@ -380,6 +380,7 @@ void bhv_hidden_red_coin_star_init(void);
|
||||
void bhv_hidden_red_coin_star_loop(void);
|
||||
void bhv_red_coin_init(void);
|
||||
void bhv_red_coin_loop(void);
|
||||
void bhv_bowser_course_red_coin_star_init(void);
|
||||
void bhv_bowser_course_red_coin_star_loop(void);
|
||||
void bhv_hidden_star_init(void);
|
||||
void bhv_hidden_star_loop(void);
|
||||
|
||||
@@ -47,12 +47,19 @@ void bhv_hidden_star_trigger_loop(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void bhv_bowser_course_red_coin_star_init(void) {
|
||||
s16 numRedCoinsRemaining = count_objects_with_behavior(bhvRedCoin);
|
||||
|
||||
o->oHiddenStarTriggerTotal = numRedCoinsRemaining + gRedCoinsCollected;
|
||||
o->oHiddenStarTriggerCounter = o->oHiddenStarTriggerTotal - numRedCoinsRemaining;
|
||||
}
|
||||
|
||||
void bhv_bowser_course_red_coin_star_loop(void) {
|
||||
gRedCoinsCollected = o->oHiddenStarTriggerCounter;
|
||||
|
||||
switch (o->oAction) {
|
||||
case 0:
|
||||
if (o->oHiddenStarTriggerCounter == 8) {
|
||||
if (o->oHiddenStarTriggerCounter == o->oHiddenStarTriggerTotal) {
|
||||
o->oAction = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
void bhv_orange_number_init(void) {
|
||||
o->oAnimState = o->oBehParams2ndByte;
|
||||
o->oVelY = 26.0f;
|
||||
o->oHomeY = o->oPosY;
|
||||
}
|
||||
|
||||
void bhv_orange_number_loop(void) {
|
||||
@@ -16,6 +17,13 @@ void bhv_orange_number_loop(void) {
|
||||
o->oVelY = 14.0f;
|
||||
}
|
||||
|
||||
s32 offsetX, offsetZ;
|
||||
offsetX = o->oOrangeNumberOffset * sins(gLakituState.nextYaw + 0x4000);
|
||||
offsetZ = o->oOrangeNumberOffset * coss(gLakituState.nextYaw + 0x4000);
|
||||
|
||||
o->oPosX = o->oHomeX + offsetX;
|
||||
o->oPosZ = o->oHomeZ + offsetZ;
|
||||
|
||||
if (o->oTimer == 35) {
|
||||
struct Object *sparkleObj = spawn_object(o, MODEL_SPARKLES, bhvCoinSparklesSpawner);
|
||||
sparkleObj->oPosY -= 30.0f;
|
||||
|
||||
@@ -50,18 +50,34 @@ void bhv_red_coin_loop(void) {
|
||||
o->parentObj->oHiddenStarTriggerCounter++;
|
||||
|
||||
// Spawn the orange number counter, as long as it isn't the last coin.
|
||||
if (o->parentObj->oHiddenStarTriggerCounter != 8) {
|
||||
spawn_orange_number(o->parentObj->oHiddenStarTriggerCounter, 0, 0, 0);
|
||||
if (o->parentObj->oHiddenStarTriggerCounter != o->parentObj->oHiddenStarTriggerTotal) {
|
||||
if (o->parentObj->oHiddenStarTriggerCounter >= 99) {
|
||||
spawn_orange_number(9, 14, 0, 0);
|
||||
spawn_orange_number(9, -14, 0, 0);
|
||||
}
|
||||
else if (o->parentObj->oHiddenStarTriggerCounter >= 10) {
|
||||
spawn_orange_number(o->parentObj->oHiddenStarTriggerCounter % 10, 14, 0, 0);
|
||||
spawn_orange_number(o->parentObj->oHiddenStarTriggerCounter / 10, -14, 0, 0);
|
||||
}
|
||||
else {
|
||||
spawn_orange_number(o->parentObj->oHiddenStarTriggerCounter, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef JP_RED_COIN_SOUND
|
||||
// For JP version, play an identical sound for all coins.
|
||||
create_sound_spawner(SOUND_GENERAL_RED_COIN);
|
||||
#else
|
||||
// On all versions but the JP version, each coin collected plays a higher noise.
|
||||
play_sound(SOUND_MENU_COLLECT_RED_COIN
|
||||
+ (((u8) o->parentObj->oHiddenStarTriggerCounter - 1) << 16),
|
||||
gGlobalSoundSource);
|
||||
if (o->parentObj->oHiddenStarTriggerTotal - o->parentObj->oHiddenStarTriggerCounter > 7) {
|
||||
// Play the first red coin sound until it gets to the final 8
|
||||
play_sound(SOUND_MENU_COLLECT_RED_COIN, gGlobalSoundSource);
|
||||
}
|
||||
else {
|
||||
// On all versions but the JP version, each coin collected plays a higher noise.
|
||||
play_sound(SOUND_MENU_COLLECT_RED_COIN
|
||||
+ (((u8) 7 - (o->parentObj->oHiddenStarTriggerTotal - o->parentObj->oHiddenStarTriggerCounter)) << 16),
|
||||
gGlobalSoundSource);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,8 @@ void bhv_hidden_red_coin_star_init(void) {
|
||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
||||
}
|
||||
|
||||
o->oHiddenStarTriggerCounter = 8 - numRedCoinsRemaining;
|
||||
o->oHiddenStarTriggerTotal = numRedCoinsRemaining + gRedCoinsCollected;
|
||||
o->oHiddenStarTriggerCounter = o->oHiddenStarTriggerTotal - numRedCoinsRemaining;
|
||||
}
|
||||
|
||||
void bhv_hidden_red_coin_star_loop(void) {
|
||||
@@ -172,7 +173,7 @@ void bhv_hidden_red_coin_star_loop(void) {
|
||||
|
||||
switch (o->oAction) {
|
||||
case HIDDEN_STAR_ACT_INACTIVE:
|
||||
if (o->oHiddenStarTriggerCounter == 8) {
|
||||
if (o->oHiddenStarTriggerCounter == o->oHiddenStarTriggerTotal) {
|
||||
o->oAction = HIDDEN_STAR_ACT_ACTIVE;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -691,6 +691,9 @@ void spawn_orange_number(s8 behParam, s16 relX, s16 relY, s16 relZ) {
|
||||
|
||||
struct Object *orangeNumber = spawn_object_relative(behParam, relX, relY, relZ, o, MODEL_NUMBER, bhvOrangeNumber);
|
||||
orangeNumber->oPosY += 25.0f;
|
||||
orangeNumber->oOrangeNumberOffset = relX;
|
||||
orangeNumber->oHomeX = o->oPosX;
|
||||
orangeNumber->oHomeZ = o->oPosZ;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user