diff --git a/assets/xml/objects/object_shn.xml b/assets/xml/objects/object_shn.xml
index c4b256f68f..97d2e4854e 100644
--- a/assets/xml/objects/object_shn.xml
+++ b/assets/xml/objects/object_shn.xml
@@ -79,11 +79,11 @@
-
+
-
-
+
+
diff --git a/include/functions.h b/include/functions.h
index 39cb03363c..52ba8b111c 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -510,7 +510,7 @@ void EffectSsEnIce_Spawn(PlayState* play, Vec3f* pos, f32 scale, Vec3f* velocity
void EffectSsFireTail_SpawnFlameOnPlayer(PlayState* play, f32 scale, s16 bodyPart, f32 colorIntensity);
void EffectSsEnFire_SpawnVec3f(PlayState* play, Actor* actor, Vec3f* pos, s16 scale, s16 params, s16 flags, s16 bodyPart);
// void EffectSsEnFire_SpawnVec3s(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7);
-void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx);
+void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIndex);
void EffectSsDeadDb_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s32 life);
void func_800B3030(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, s32 colorIndex);
void EffectSsDeadDd_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s16 alphaStep, s32 life);
diff --git a/include/z64save.h b/include/z64save.h
index 0c0af023c2..71cb6428b1 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -845,8 +845,8 @@ typedef enum {
#define WEEKEVENTREG_31_80 PACK_WEEKEVENTREG_FLAG(31, 0x80)
#define WEEKEVENTREG_32_01 PACK_WEEKEVENTREG_FLAG(32, 0x01)
-#define WEEKEVENTREG_32_02 PACK_WEEKEVENTREG_FLAG(32, 0x02)
-#define WEEKEVENTREG_32_04 PACK_WEEKEVENTREG_FLAG(32, 0x04)
+#define WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE PACK_WEEKEVENTREG_FLAG(32, 0x02)
+#define WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE PACK_WEEKEVENTREG_FLAG(32, 0x04)
#define WEEKEVENTREG_32_08 PACK_WEEKEVENTREG_FLAG(32, 0x08)
#define WEEKEVENTREG_32_10 PACK_WEEKEVENTREG_FLAG(32, 0x10)
#define WEEKEVENTREG_32_20 PACK_WEEKEVENTREG_FLAG(32, 0x20)
@@ -1042,8 +1042,8 @@ typedef enum {
#define WEEKEVENTREG_59_04 PACK_WEEKEVENTREG_FLAG(59, 0x04)
#define WEEKEVENTREG_59_08 PACK_WEEKEVENTREG_FLAG(59, 0x08)
-#define WEEKEVENTREG_59_10 PACK_WEEKEVENTREG_FLAG(59, 0x10)
-#define WEEKEVENTREG_59_20 PACK_WEEKEVENTREG_FLAG(59, 0x20)
+#define WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE PACK_WEEKEVENTREG_FLAG(59, 0x10)
+#define WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE PACK_WEEKEVENTREG_FLAG(59, 0x20)
#define WEEKEVENTREG_59_40 PACK_WEEKEVENTREG_FLAG(59, 0x40)
#define WEEKEVENTREG_59_80 PACK_WEEKEVENTREG_FLAG(59, 0x80)
#define WEEKEVENTREG_60_01 PACK_WEEKEVENTREG_FLAG(60, 0x01)
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 17852c4c19..63b6861a7a 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -925,14 +925,14 @@ void EffectSsEnFire_SpawnVec3s(PlayState* play, Actor* actor, Vec3s* pos, s16 sc
// EffectSsExtra Spawn Functions
-void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx) {
+void EffectSsExtra_Spawn(PlayState* play, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIndex) {
EffectSsExtraInitParams initParams;
Math_Vec3f_Copy(&initParams.pos, pos);
Math_Vec3f_Copy(&initParams.velocity, velocity);
Math_Vec3f_Copy(&initParams.accel, accel);
initParams.scale = scale;
- initParams.scoreIdx = scoreIdx;
+ initParams.scoreIndex = scoreIndex;
EffectSs_Spawn(play, EFFECT_SS_EXTRA, 100, &initParams);
}
diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c
index f03d38e45b..79f2d7043e 100644
--- a/src/code/z_sram_NES.c
+++ b/src/code/z_sram_NES.c
@@ -112,8 +112,9 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20),
/* 32 */
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04),
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE),
/* 33 */ 0,
/* 34 */ 0,
/* 35 */
@@ -146,7 +147,8 @@ u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEve
/* 58 */ 0,
/* 59 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) |
- PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20),
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE) |
+ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE),
/* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10),
/* 61 */ 0,
/* 62 */ 0,
diff --git a/src/overlays/actors/ovl_En_Shn/z_en_shn.c b/src/overlays/actors/ovl_En_Shn/z_en_shn.c
index 6435095155..f9344ce050 100644
--- a/src/overlays/actors/ovl_En_Shn/z_en_shn.c
+++ b/src/overlays/actors/ovl_En_Shn/z_en_shn.c
@@ -70,10 +70,10 @@ void func_80AE6130(EnShn* this) {
s32 func_80AE615C(EnShn* this, s32 animIndex) {
static AnimationInfoS sAnimationInfo[] = {
- { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, 0 },
- { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, 0, -4 },
- { &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, 0 },
- { &gSwampGuideChinScratchAnim, 1.0f, 0, -1, 0, -4 },
+ { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gBurlyGuyHandsOnTableAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
+ { &gBurlyGuyChinScratchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, 0 },
+ { &gBurlyGuyChinScratchAnim, 1.0f, 0, -1, ANIMMODE_LOOP, -4 },
};
s32 phi_v0 = 0;
s32 phi_v1 = 0;
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
index 7972bed61e..df20a36961 100644
--- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
+++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
@@ -79,11 +79,11 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
s32 i;
path = syatekiMan->path;
- while (path->customValue != SG_PATH_TYPE_CROW) {
+ while (path->customValue != SG_PATH_TYPE_GUAY) {
path = &play->setupPathList[path->additionalPathIndex];
}
- for (i = 0; i < EN_SYATEKI_CROW_GET_INDEX(&this->actor); i++) {
+ for (i = 0; i < SG_GUAY_GET_INDEX(&this->actor); i++) {
path = &play->setupPathList[path->additionalPathIndex];
}
@@ -95,7 +95,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
this->collider.elements[0].dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
ActorShape_Init(&this->actor.shape, 2000.0f, ActorShadow_DrawCircle, 20.0f);
- if ((path == NULL) || (EN_SYATEKI_CROW_GET_INDEX(&this->actor) >= 0x80)) {
+ if ((path == NULL) || (SG_GUAY_GET_INDEX(&this->actor) >= 0x80)) {
Actor_Kill(&this->actor);
return;
}
@@ -133,7 +133,7 @@ void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true) &&
- (syatekiMan->guayFlags & (1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor)))) {
+ (syatekiMan->guayFlags & (1 << SG_GUAY_GET_INDEX(&this->actor)))) {
EnSyatekiCrow_SetupWaitToMove(this);
} else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->isActive = true;
@@ -168,10 +168,10 @@ void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this) {
* How long the Guay should wait is controlled by its params.
*/
void EnSyatekiCrow_WaitToMove(EnSyatekiCrow* this, PlayState* play) {
- if (((EN_SYATEKI_CROW_GET_WAIT_MOD(&this->actor) * 20) + 20) < this->waitTimer) {
+ if (((SG_GUAY_GET_WAIT_MOD(&this->actor) * 20) + 20) < this->waitTimer) {
Actor_PlaySfx(this->actor.parent, NA_SE_EN_KAICHO_CRY);
this->waitTimer = 0;
- this->actor.speed = EN_SYATEKI_CROW_GET_SPEED_MOD(&this->actor) + 6.0f;
+ this->actor.speed = SG_GUAY_GET_SPEED_MOD(&this->actor) + 6.0f;
this->actor.gravity = -0.5f;
this->actionFunc = EnSyatekiCrow_Fly;
} else {
@@ -206,13 +206,13 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
this->currentPointIndex++;
} else {
this->isActive = false;
- syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
+ syatekiMan->guayFlags &= ~(1 << SG_GUAY_GET_INDEX(&this->actor));
EnSyatekiCrow_SetupWaitForSignal(this);
}
SkelAnime_Update(&this->skelAnime);
this->actor.shape.yOffset = (fabsf(this->skelAnime.curFrame - 3.0f) * 150.0f) + 1700.0f;
- if ((syatekiMan->perGameVar1.guaySpawnTimer % 90) == 0) {
+ if ((syatekiMan->guayAppearTimer % 90) == 0) {
Actor_PlaySfx(&this->actor, NA_SE_EN_KAICHO_CRY);
}
}
@@ -220,7 +220,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
void EnSyatekiCrow_SetupDead(EnSyatekiCrow* this) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- syatekiMan->score += 60;
+ syatekiMan->score += SG_POINTS_GUAY;
this->isActive = false;
this->actor.speed *= Math_CosS(this->actor.world.rot.x);
this->actor.velocity.y = 0.0f;
@@ -245,7 +245,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) {
if (this->deathTimer > 20) {
func_800B3030(play, &this->actor.world.pos, &sZeroVec, &sZeroVec, this->actor.scale.x * 10000.0f, 0, 0);
syatekiMan->guayHitCounter++;
- syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
+ syatekiMan->guayFlags &= ~(1 << SG_GUAY_GET_INDEX(&this->actor));
EnSyatekiCrow_SetupWaitForSignal(this);
}
@@ -262,7 +262,7 @@ void EnSyatekiCrow_UpdateDamage(EnSyatekiCrow* this, PlayState* play) {
Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
this->deathTimer = 0;
this->collider.base.acFlags &= ~AC_HIT;
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 1);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_60);
EnSyatekiCrow_SetupDead(this);
} else {
this->collider.elements[0].dim.worldSphere.center.x = this->actor.world.pos.x;
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
index f244b0b60d..71f3466453 100644
--- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
+++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h
@@ -4,10 +4,10 @@
#include "global.h"
#include "objects/object_crow/object_crow.h"
-#define EN_SYATEKI_CROW_GET_WAIT_MOD(thisx) ((thisx)->params & 0xF)
-#define EN_SYATEKI_CROW_GET_SPEED_MOD(thisx) (((thisx)->params & 0xF0) >> 4)
-#define EN_SYATEKI_CROW_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define EN_SYATEKI_CROW_PARAMS(index, speedMod, waitMod) (((index << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF))
+#define SG_GUAY_GET_WAIT_MOD(thisx) ((thisx)->params & 0xF)
+#define SG_GUAY_GET_SPEED_MOD(thisx) (((thisx)->params & 0xF0) >> 4)
+#define SG_GUAY_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define SG_GUAY_PARAMS(index, speedMod, waitMod) (((index << 8) & 0xFF00) | ((speedMod << 4) & 0xF0) | (waitMod & 0xF))
struct EnSyatekiCrow;
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
index ae04a34015..c4d3667183 100644
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
@@ -35,9 +35,9 @@ void EnSyatekiDekunuts_GameEnd(EnSyatekiDekunuts* this, PlayState* play);
void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play);
typedef enum {
- /* 0 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL,
- /* 1 */ EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP
-} EnSyatekiDekunutsHeaddressType;
+ /* 0 */ SG_DEKU_HEADDRESS_TYPE_NORMAL,
+ /* 1 */ SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP
+} ShootingGalleryDekuScrubHeaddressType;
ActorInit En_Syateki_Dekunuts_InitVars = {
ACTOR_EN_SYATEKI_DEKUNUTS,
@@ -74,23 +74,23 @@ static ColliderCylinderInit sCylinderInit = {
static Cylinder16 sBonusDekuScrubColliderDimensions[] = { { 24, 40, 0, { 0, 0, 0 } } };
typedef enum {
- /* 0 */ EN_SYATEKI_DEKUNUTS_ANIM_UP,
- /* 1 */ EN_SYATEKI_DEKUNUTS_ANIM_BURROW,
- /* 2 */ EN_SYATEKI_DEKUNUTS_ANIM_IDLE, // unused
- /* 3 */ EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND,
- /* 4 */ EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE,
- /* 5 */ EN_SYATEKI_DEKUNUTS_ANIM_DIE,
- /* 6 */ EN_SYATEKI_DEKUNUTS_ANIM_UNBURROW // unused
-} EnSyatekiDekunutsAnimation;
+ /* 0 */ SG_DEKU_ANIM_UP,
+ /* 1 */ SG_DEKU_ANIM_BURROW,
+ /* 2 */ SG_DEKU_ANIM_IDLE, // unused
+ /* 3 */ SG_DEKU_ANIM_LOOK_AROUND,
+ /* 4 */ SG_DEKU_ANIM_DAMAGE,
+ /* 5 */ SG_DEKU_ANIM_DIE,
+ /* 6 */ SG_DEKU_ANIM_UNBURROW // unused
+} ShootingGalleryDekuScrubAnimation;
static AnimationInfo sAnimationInfo[] = {
- { &gDekuScrubUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gDekuScrubBurrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gDekuScrubIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gDekuScrubLookAroundAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gDekuScrubDamageAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gDekuScrubDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gDekuScrubUnburrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gDekuScrubUpAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_UP
+ { &gDekuScrubBurrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_BURROW
+ { &gDekuScrubIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_DEKU_ANIM_IDLE
+ { &gDekuScrubLookAroundAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_DEKU_ANIM_LOOK_AROUND
+ { &gDekuScrubDamageAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_DAMAGE
+ { &gDekuScrubDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_DIE
+ { &gDekuScrubUnburrowAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_DEKU_ANIM_UNBURROW
};
static InitChainEntry sInitChain[] = {
@@ -112,20 +112,20 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
+ if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) {
Actor_SetScale(&this->actor, 0.01f);
this->collider.dim = sBonusDekuScrubColliderDimensions[0];
- pathType = SG_PATH_TYPE_SCRUB_BONUS;
+ pathType = SG_PATH_TYPE_DEKU_BONUS;
} else {
Actor_SetScale(&this->actor, 0.02f);
- pathType = SG_PATH_TYPE_SCRUB_NORMAL;
+ pathType = SG_PATH_TYPE_DEKU_NORMAL;
}
while (path->customValue != pathType) {
path = &play->setupPathList[path->additionalPathIndex];
}
- for (i = 0; i < EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(&this->actor); i++) {
+ for (i = 0; i < SG_DEKU_GET_ADDITIONAL_PATH_INDEX_LIMIT(&this->actor); i++) {
path = &play->setupPathList[path->additionalPathIndex];
}
@@ -147,7 +147,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
}
this->flowerPos = Lib_SegmentedToVirtual(path->points);
- this->index = EN_SYATEKI_DEKUNUTS_GET_INDEX(&this->actor);
+ this->index = SG_DEKU_GET_INDEX(&this->actor);
this->flowerCount = path->count;
this->timer = 0;
this->unk_1DC = 0;
@@ -172,7 +172,7 @@ void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this) {
this->timer = 0;
this->unk_1DC = 0;
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
+ if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) {
this->isAlive = true;
}
@@ -193,7 +193,7 @@ void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play) {
}
if (!syatekiMan->dekuScrubFlags && !syatekiMan->guayFlags &&
- (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS)) {
+ (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS)) {
this->isAlive = true;
}
}
@@ -215,10 +215,10 @@ void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this) {
this->timeToBurrow = 140 - (syatekiMan->currentWave * 20);
if ((syatekiMan->currentWave % 2) != 0) {
- this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP;
+ this->headdressType = SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP;
this->headdressRotZ = 0;
} else {
- this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL;
+ this->headdressType = SG_DEKU_HEADDRESS_TYPE_NORMAL;
}
this->actionFunc = EnSyatekiDekunuts_WaitToStart;
@@ -259,7 +259,7 @@ void EnSyatekiDekunuts_WaitToEmerge(EnSyatekiDekunuts* this, PlayState* play) {
void EnSyatekiDekunuts_SetupEmerge(EnSyatekiDekunuts* this) {
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_UP);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_UP);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_UP);
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
this->actionFunc = EnSyatekiDekunuts_Emerge;
@@ -275,7 +275,7 @@ void EnSyatekiDekunuts_Emerge(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiDekunuts_SetupLookAround(this);
}
- if (this->headdressType == EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP) {
+ if (this->headdressType == SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP) {
Math_SmoothStepToS(&this->headdressRotZ, -0x8000, 5, 0x1000, 0x100);
}
@@ -283,8 +283,8 @@ void EnSyatekiDekunuts_Emerge(EnSyatekiDekunuts* this, PlayState* play) {
}
void EnSyatekiDekunuts_SetupLookAround(EnSyatekiDekunuts* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_LOOK_AROUND);
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_LOOK_AROUND);
+ if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) {
this->actionFunc = EnSyatekiDekunuts_LookAround;
} else {
this->actionFunc = EnSyatekiDekunuts_BonusLookAround;
@@ -325,7 +325,7 @@ void EnSyatekiDekunuts_BonusLookAround(EnSyatekiDekunuts* this, PlayState* play)
}
void EnSyatekiDekunuts_SetupBurrow(EnSyatekiDekunuts* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_BURROW);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_BURROW);
this->actionFunc = EnSyatekiDekunuts_Burrow;
}
@@ -369,19 +369,19 @@ void EnSyatekiDekunuts_SetupDead(EnSyatekiDekunuts* this, PlayState* play) {
static Vec3f sAccel = { 0.0f, 0.0f, 0.0f };
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2);
- syatekiMan->score += 100;
- syatekiMan->perGameVar2.bonusDekuScrubHitCounter++;
+ if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) {
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_100);
+ syatekiMan->score += SG_POINTS_DEKU_BONUS;
+ syatekiMan->bonusDekuScrubHitCounter++;
} else {
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 0);
- syatekiMan->score += 30;
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_30);
+ syatekiMan->score += SG_POINTS_DEKU_NORMAL;
syatekiMan->dekuScrubHitCounter++;
}
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DAMAGE);
this->isAlive = false;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DAMAGE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_DAMAGE);
this->timer = 160;
this->actionFunc = EnSyatekiDekunuts_Dead;
}
@@ -393,7 +393,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
if (this->timer == 160) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_DEKUNUTS_ANIM_DIE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_DEKU_ANIM_DIE);
Actor_PlaySfx(&this->actor, NA_SE_EN_NUTS_DEAD);
this->timer--;
} else if (this->timer < 160) {
@@ -407,7 +407,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) {
pos.y = this->actor.world.pos.y + 10.0f;
EffectSsHahen_SpawnBurst(play, &pos, 3.0f, 0, 12, 3, 15, HAHEN_OBJECT_DEFAULT, 10, NULL);
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) != EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
+ if (SG_DEKU_GET_TYPE(&this->actor) != SG_DEKU_TYPE_BONUS) {
syatekiMan->dekuScrubFlags &= ~(1 << this->index);
}
@@ -427,7 +427,7 @@ void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play) {
if ((this->actionFunc != EnSyatekiDekunuts_WaitForSignal) && (this->timer < this->timeToBurrow) &&
(this->timer > 10)) {
if ((this->collider.base.acFlags & AC_HIT) && (this->isAlive == true)) {
- if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
+ if (SG_DEKU_GET_TYPE(&this->actor) == SG_DEKU_TYPE_BONUS) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
} else {
Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
@@ -450,8 +450,7 @@ s32 EnSyatekiDekunuts_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dLi
Actor* thisx) {
EnSyatekiDekunuts* this = THIS;
- if ((limbIndex == DEKU_SCRUB_LIMB_HEADDRESS) &&
- (this->headdressType == EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_FLIPPED_UP)) {
+ if ((limbIndex == DEKU_SCRUB_LIMB_HEADDRESS) && (this->headdressType == SG_DEKU_HEADDRESS_TYPE_FLIPPED_UP)) {
rot->z += this->headdressRotZ;
}
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
index ce3e9ba909..2a103aa988 100644
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
+++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h
@@ -4,15 +4,15 @@
#include "global.h"
#include "objects/object_dekunuts/object_dekunuts.h"
-#define EN_SYATEKI_DEKUNUTS_GET_TYPE(thisx) ((thisx)->params & 0xF)
-#define EN_SYATEKI_DEKUNUTS_GET_INDEX(thisx) (((thisx)->params & 0xF0) >> 4)
-#define EN_SYATEKI_DEKUNUTS_GET_PARAM_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define EN_SYATEKI_DEKUNUTS_PARAMS(unkFF00, index, type) (((unkFF00 << 8) & 0xFF00) | ((index << 4) & 0xF0) | (type & 0xF))
+#define SG_DEKU_GET_TYPE(thisx) ((thisx)->params & 0xF)
+#define SG_DEKU_GET_INDEX(thisx) (((thisx)->params & 0xF0) >> 4)
+#define SG_DEKU_GET_ADDITIONAL_PATH_INDEX_LIMIT(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define SG_DEKU_PARAMS(additionalPathIndexLimit, index, type) (((additionalPathIndexLimit << 8) & 0xFF00) | ((index << 4) & 0xF0) | (type & 0xF))
typedef enum {
- /* 0 */ EN_SYATEKI_DEKUNUTS_TYPE_NORMAL, // Worth 30 points
- /* 1 */ EN_SYATEKI_DEKUNUTS_TYPE_BONUS // Worth 100 points
-} EnSyatekiDekunutsType;
+ /* 0 */ SG_DEKU_TYPE_NORMAL, // Worth 30 points
+ /* 1 */ SG_DEKU_TYPE_BONUS // Worth 100 points
+} ShootingGalleryDekuScrubType;
struct EnSyatekiDekunuts;
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
index 3e9ac9a40f..c9c38a0ecc 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c
@@ -50,11 +50,42 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play);
#define TALK_FLAG_SWAMP_HAS_SPOKEN_WITH_HUMAN (1 << 0)
#define TALK_FLAG_SWAMP_HAS_EXPLAINED_THE_RULES (1 << 1)
+// This defines the configuration of a single wave of Octoroks in the Town Shooting Gallery. These are
+// arranged in the same columns and rows that appear in-game; the player stands in the center column, and
+// the Octorok with an index of 7 appears directly in front of them like so:
+// 0 1 2
+// 3 4 5
+// 6 7 8
+// Player
#define OCTO_FLAGS(type0, type1, type2, type3, type4, type5, type6, type7, type8) \
(SG_OCTO_SET_FLAG(type0, 0) | SG_OCTO_SET_FLAG(type1, 1) | SG_OCTO_SET_FLAG(type2, 2) | \
SG_OCTO_SET_FLAG(type3, 3) | SG_OCTO_SET_FLAG(type4, 4) | SG_OCTO_SET_FLAG(type5, 5) | \
SG_OCTO_SET_FLAG(type6, 6) | SG_OCTO_SET_FLAG(type7, 7) | SG_OCTO_SET_FLAG(type8, 8))
+// These defines assume that sNormalSwampTargetActorList is used to spawn actors and that the logic of
+// EnSyatekiMan_Swamp_RunGame is not modified; in other words, it assumes that each wave consists of five
+// Deku Scrubs that the player must shoot and three Guays that the player can either shoot or let escape.
+// Once all Deku Scrubs and Guays have been shot or escape, the next wave starts.
+#define SG_SWAMP_WAVE_COUNT 4
+#define SG_SWAMP_DEKUS_PER_WAVE 5
+#define SG_SWAMP_GUAYS_PER_WAVE 3
+#define SG_SWAMP_BONUS_DEKU_COUNT 2
+
+// This is the score the player will receive if they hit every single Deku Scrub (both normal and bonus), Guay, and
+// Wolfos. There are two conditions for a Wolfos to appear, hence why their point value appears twice; one Wolfos
+// will appear after shooting two waves of Deku Scrubs, and one Wolfos will appear after shooting one wave of Guays.
+// Assuming the point values, actor list, and shooting game logic are unmodified, this should total to 2120 points.
+#define SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS \
+ (SG_POINTS_DEKU_NORMAL * (SG_SWAMP_DEKUS_PER_WAVE * SG_SWAMP_WAVE_COUNT) + \
+ SG_POINTS_GUAY * (SG_SWAMP_GUAYS_PER_WAVE * SG_SWAMP_WAVE_COUNT) + \
+ SG_POINTS_DEKU_BONUS * SG_SWAMP_BONUS_DEKU_COUNT + SG_POINTS_WOLFOS * SG_SWAMP_WAVE_COUNT + \
+ SG_POINTS_WOLFOS * (SG_SWAMP_WAVE_COUNT / 2))
+
+// To obtain the Heart Piece from the Swamp Shooting Gallery, the player not only needs to achieve a perfect score,
+// but they must also have at least six seconds remaining on the minigame timer. If the player has already obtained
+// the Heart Piece, then this score will be used instead to determine if the player should get a Purple Rupee.
+#define SG_SWAMP_HEART_PIECE_SCORE (SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS + (6 * SG_BONUS_POINTS_PER_SECOND))
+
ActorInit En_Syateki_Man_InitVars = {
ACTOR_EN_SYATEKI_MAN,
ACTORCAT_NPC,
@@ -68,22 +99,23 @@ ActorInit En_Syateki_Man_InitVars = {
};
typedef enum {
- /* 0 */ EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE,
- /* 1 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_LOOP,
- /* 2 */ EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END
-} EnSyatekiManAnimation;
+ /* 0 */ SG_MAN_ANIM_HANDS_ON_TABLE,
+ /* 1 */ SG_MAN_ANIM_HEAD_SCRATCH_LOOP,
+ /* 2 */ SG_MAN_ANIM_HEAD_SCRATCH_END
+} ShootingGalleryManAnimation;
static AnimationInfo sAnimationInfo[] = {
- { &gBurlyGuyHandsOnTableAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &gSwampShootingGalleryManHeadScratchLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &gSwampShootingGalleryManHeadScratchEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gBurlyGuyHandsOnTableAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_MAN_ANIM_HANDS_ON_TABLE
+ { &gBurlyGuyHeadScratchLoopAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_MAN_ANIM_HEAD_SCRATCH_LOOP
+ { &gBurlyGuyHeadScratchEndAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // SG_MAN_ANIM_HEAD_SCRATCH_END
};
/**
* In the Swamp Shooting Gallery, there are four waves of Guays.
* For each wave, these flags are used to control which Guays appear.
+ * The number of flags per wave should be exactly SG_SWAMP_GUAYS_PER_WAVE for all waves.
*/
-static s16 sGuayFlagsPerWave[] = {
+static s16 sGuayFlagsPerWave[SG_SWAMP_WAVE_COUNT] = {
(1 << 7) | (1 << 6) | (1 << 0),
(1 << 9) | (1 << 8) | (1 << 1),
(1 << 4) | (1 << 3) | (1 << 0),
@@ -97,32 +129,25 @@ typedef struct {
} SwampTargetActorEntry; // size = 0x14
static SwampTargetActorEntry sNormalSwampTargetActorList[] = {
- { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(1, 3, 0) },
- { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(0, 2, 0) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 2, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 3, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 4, EN_SYATEKI_DEKUNUTS_TYPE_NORMAL) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(5, 2, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(6, 0, 1) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(7, 0, 2) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(8, 0, 1) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(9, 0, 2) },
+ { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(1, 3, 0) },
+ { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(0, 2, 0) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_NORMAL) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_NORMAL) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 2, SG_DEKU_TYPE_NORMAL) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 3, SG_DEKU_TYPE_NORMAL) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 4, SG_DEKU_TYPE_NORMAL) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_BONUS) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_BONUS) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(5, 2, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(6, 0, 1) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(7, 0, 2) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(8, 0, 1) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(9, 0, 2) },
};
/**
@@ -130,22 +155,20 @@ static SwampTargetActorEntry sNormalSwampTargetActorList[] = {
* Without any "normal" Deku Scrubs, the game will not progress beyond the first wave.
*/
static SwampTargetActorEntry sUnusedSwampTargetActorList[] = {
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 0) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 0) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 0, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
- { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f,
- EN_SYATEKI_DEKUNUTS_PARAMS(0, 1, EN_SYATEKI_DEKUNUTS_TYPE_BONUS) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 2) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 2) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(0, 0, 3) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(1, 0, 3) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 3) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(2, 0, 4) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(3, 0, 4) },
- { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_CROW_PARAMS(4, 2, 4) },
- { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(0, 2, 5) },
- { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, EN_SYATEKI_WF_PARAMS(1, 3, 6) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 0) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 0) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 0, SG_DEKU_TYPE_BONUS) },
+ { ACTOR_EN_SYATEKI_DEKUNUTS, -1000.0f, 200.0f, -700.0f, SG_DEKU_PARAMS(0, 1, SG_DEKU_TYPE_BONUS) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 2) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 2) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(0, 0, 3) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(1, 0, 3) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 3) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(2, 0, 4) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(3, 0, 4) },
+ { ACTOR_EN_SYATEKI_CROW, -1000.0f, 200.0f, -700.0f, SG_GUAY_PARAMS(4, 2, 4) },
+ { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(0, 2, 5) },
+ { ACTOR_EN_SYATEKI_WF, -1000.0f, 200.0f, -700.0f, SG_WOLFOS_PARAMS(1, 3, 6) },
};
static SwampTargetActorEntry* sSwampTargetActorLists[] = {
@@ -179,14 +202,14 @@ void EnSyatekiMan_Swamp_SpawnTargetActors(EnSyatekiMan* this, PlayState* play2,
void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
EnSyatekiMan* this = THIS;
s32 pad;
- Path* path = &play->setupPathList[EN_SYATEKI_MAN_GET_PATH_INDEX(&this->actor)];
+ Path* path = &play->setupPathList[SG_MAN_GET_PATH_INDEX(&this->actor)];
s32 actorListLength = sSwampTargetActorListLengths[this->swampTargetActorListIndex];
this->actor.targetMode = 1;
Actor_SetScale(&this->actor, 0.01f);
if (play->sceneId == SCENE_SYATEKI_MORI) {
- SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gSwampShootingGalleryManHeadScratchLoopAnim,
- this->jointTable, this->morphTable, BURLY_GUY_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHeadScratchLoopAnim, this->jointTable,
+ this->morphTable, BURLY_GUY_LIMB_MAX);
} else {
SkelAnime_InitFlex(play, &this->skelAnime, &gBurlyGuySkel, &gBurlyGuyHandsOnTableAnim, this->jointTable,
this->morphTable, BURLY_GUY_LIMB_MAX);
@@ -197,7 +220,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
this->shootingGameState = SG_GAME_STATE_NONE;
this->talkWaitTimer = 15;
this->flagsIndex = 0;
- this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
+ this->lastHitOctorokType = SG_OCTO_TYPE_NONE;
this->octorokFlags = 0;
this->dekuScrubFlags = 0;
this->guayFlags = 0;
@@ -265,7 +288,7 @@ void EnSyatekiMan_Swamp_Idle(EnSyatekiMan* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, &play->state)) {
u16 faceReactionTextId;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_MAN_ANIM_SWAMP_HEAD_SCRATCH_END);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_MAN_ANIM_HEAD_SCRATCH_END);
faceReactionTextId = Text_GetFaceReaction(play, FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN);
if (faceReactionTextId != 0) {
Message_StartTextbox(play, faceReactionTextId, &this->actor);
@@ -482,9 +505,9 @@ void EnSyatekiMan_Swamp_Talk(EnSyatekiMan* this, PlayState* play) {
break;
}
- if (this->skelAnime.animation == &gSwampShootingGalleryManHeadScratchEndAnim) {
+ if (this->skelAnime.animation == &gBurlyGuyHeadScratchEndAnim) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_MAN_ANIM_HANDS_ON_TABLE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_MAN_ANIM_HANDS_ON_TABLE);
}
}
}
@@ -858,20 +881,22 @@ void EnSyatekiMan_Swamp_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_HasParent(&this->actor, play)) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_59_10);
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02) && (this->score >= 2180)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_32_02);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE);
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE) &&
+ (this->score >= SG_SWAMP_HEART_PIECE_SCORE)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE);
}
this->actor.parent = NULL;
this->actionFunc = EnSyatekiMan_Swamp_GiveReward;
} else {
- if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_10)) {
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
- } else if (this->score < 2180) {
+ } else if (this->score < SG_SWAMP_HEART_PIECE_SCORE) {
Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 500.0f, 100.0f);
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_02)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE)) {
Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
@@ -913,14 +938,14 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
if (this->prevTextId == 0x407) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_59_20);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE);
}
}
if ((this->prevTextId == 0x405) || (this->prevTextId == 0x406)) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) {
- SET_WEEKEVENTREG(WEEKEVENTREG_32_04);
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE)) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE);
}
}
@@ -928,12 +953,13 @@ void EnSyatekiMan_Town_SetupGiveReward(EnSyatekiMan* this, PlayState* play) {
this->actionFunc = EnSyatekiMan_Town_GiveReward;
} else {
if (this->prevTextId == 0x407) {
- if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
+ if ((CUR_UPG_VALUE(UPG_QUIVER) < 3) &&
+ !CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
Actor_OfferGetItem(&this->actor, play, GI_QUIVER_30 + CUR_UPG_VALUE(UPG_QUIVER), 500.0f, 100.0f);
} else {
Actor_OfferGetItem(&this->actor, play, GI_RUPEE_PURPLE, 500.0f, 100.0f);
}
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_32_04)) {
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE)) {
Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 500.0f, 100.0f);
} else {
Actor_OfferGetItem(&this->actor, play, GI_RUPEE_HUGE, 500.0f, 100.0f);
@@ -1012,11 +1038,11 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) {
this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0);
this->guayFlags = 0;
this->wolfosFlags = 0;
- this->perGameVar1.guaySpawnTimer = 0;
+ this->guayAppearTimer = 0;
this->dekuScrubHitCounter = 0;
this->guayHitCounter = 0;
this->currentWave = 0;
- this->perGameVar2.bonusDekuScrubHitCounter = 0;
+ this->bonusDekuScrubHitCounter = 0;
Interface_StartTimer(TIMER_ID_MINIGAME_1, 100);
this->actor.draw = NULL;
this->actionFunc = EnSyatekiMan_Swamp_RunGame;
@@ -1024,72 +1050,80 @@ void EnSyatekiMan_Swamp_StartGame(EnSyatekiMan* this, PlayState* play) {
}
void EnSyatekiMan_Swamp_RunGame(EnSyatekiMan* this, PlayState* play) {
- static s16 sHasSpawnedGuaysForThisWave = false;
+ static s16 sHasSignaledGuaysForThisWave = false;
Player* player = GET_PLAYER(play);
- if (((this->dekuScrubFlags == 0) || (this->perGameVar1.guaySpawnTimer > 140)) && !sHasSpawnedGuaysForThisWave &&
- (this->currentWave < 4)) {
- // Spawn three guays after the player has killed all Deku Scrubs, or after 140 frames.
- sHasSpawnedGuaysForThisWave = true;
- this->perGameVar1.guaySpawnTimer = 0;
+ if (((this->dekuScrubFlags == 0) || (this->guayAppearTimer > 140)) && !sHasSignaledGuaysForThisWave &&
+ (this->currentWave < SG_SWAMP_WAVE_COUNT)) {
+ // Make three Guays appear after the player has killed all Deku Scrubs, or after 140 frames.
+ sHasSignaledGuaysForThisWave = true;
+ this->guayAppearTimer = 0;
Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
this->guayFlags = sGuayFlagsPerWave[this->flagsIndex];
- if (this->flagsIndex == 3) {
+ if (this->flagsIndex == ARRAY_COUNT(sGuayFlagsPerWave) - 1) {
this->flagsIndex = 0;
} else {
this->flagsIndex++;
}
- } else if ((this->guayFlags == 0) && (this->dekuScrubFlags == 0) && (sHasSpawnedGuaysForThisWave == true) &&
- (this->currentWave < 4)) {
+ } else if ((this->guayFlags == 0) && (this->dekuScrubFlags == 0) && (sHasSignaledGuaysForThisWave == true) &&
+ (this->currentWave < SG_SWAMP_WAVE_COUNT)) {
// Once all Deku Scrubs and Guays in this wave have either disappeared or died, move on to the next wave.
- if (this->guayHitCounter < 3) {
+ if (this->guayHitCounter < SG_SWAMP_GUAYS_PER_WAVE) {
this->guayHitCounter = 0;
}
- this->perGameVar1.guaySpawnTimer = 0;
- sHasSpawnedGuaysForThisWave = false;
+ this->guayAppearTimer = 0;
+ sHasSignaledGuaysForThisWave = false;
this->currentWave++;
- if (this->currentWave < 4) {
+ if (this->currentWave < SG_SWAMP_WAVE_COUNT) {
this->dekuScrubFlags = (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0);
}
}
- if (this->guayHitCounter == 3) {
+ // Makes a Wolfos appear after the player has shot all the Guays in the current wave.
+ if (this->guayHitCounter == SG_SWAMP_GUAYS_PER_WAVE) {
this->guayHitCounter = 0;
this->wolfosFlags |= 1;
}
- if (this->dekuScrubHitCounter == 10) {
+ // Makes a Wolfos appear after the player has shot two waves of Deku Scrubs.
+ if (this->dekuScrubHitCounter == SG_SWAMP_DEKUS_PER_WAVE * 2) {
this->dekuScrubHitCounter = 0;
this->wolfosFlags |= 2;
}
- this->perGameVar1.guaySpawnTimer++;
+ this->guayAppearTimer++;
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) {
+ // End the game because the timer ran out.
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
this->actor.draw = EnSyatekiMan_Draw;
this->flagsIndex = 0;
this->currentWave = 0;
player->stateFlags1 |= PLAYER_STATE1_20;
- sHasSpawnedGuaysForThisWave = false;
+ sHasSignaledGuaysForThisWave = false;
Audio_StopSubBgm();
this->actionFunc = EnSyatekiMan_Swamp_EndGame;
- } else if ((this->currentWave == 4) && (this->wolfosFlags == 0) &&
- (this->perGameVar2.bonusDekuScrubHitCounter == 2)) {
+ } else if ((this->currentWave == SG_SWAMP_WAVE_COUNT) && (this->wolfosFlags == 0) &&
+ (this->bonusDekuScrubHitCounter == SG_SWAMP_BONUS_DEKU_COUNT)) {
+ // End the game because the player has nothing left to shoot. This doesn't mean the
+ // player actually hit everything, since Guays and Wolfos can escape.
this->actor.draw = EnSyatekiMan_Draw;
this->flagsIndex = 0;
this->currentWave = 0;
player->stateFlags1 |= PLAYER_STATE1_20;
- sHasSpawnedGuaysForThisWave = false;
+ sHasSignaledGuaysForThisWave = false;
Audio_StopSubBgm();
this->shootingGameState = SG_GAME_STATE_GIVING_BONUS;
- if (this->score == 2120) {
+
+ if (this->score == SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS) {
Interface_SetPerfectLetters(play, PERFECT_LETTERS_TYPE_2);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_6;
this->actionFunc = EnSyatekiMan_Swamp_AddBonusPoints;
} else {
+ // If the player ran out of things to shoot but did *not* get a perfect score, then
+ // they must have missed a Guay or Wolfos at some point; don't award any bonus points.
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
this->actionFunc = EnSyatekiMan_Swamp_EndGame;
}
@@ -1108,7 +1142,7 @@ void EnSyatekiMan_Swamp_EndGame(EnSyatekiMan* this, PlayState* play) {
}
this->talkWaitTimer = 15;
- if (this->score >= 2120) {
+ if (this->score >= SG_SWAMP_PERFECT_SCORE_WITHOUT_BONUS) {
// Perfect! Take this!
Message_StartTextbox(play, 0xA34, &this->actor);
this->prevTextId = 0xA34;
@@ -1162,8 +1196,8 @@ void EnSyatekiMan_Swamp_AddBonusPoints(EnSyatekiMan* this, PlayState* play) {
sBonusTimer = 0;
} else if (sBonusTimer > 10) {
gSaveContext.timerStopTimes[TIMER_ID_MINIGAME_1] += SECONDS_TO_TIMER(1);
- play->interfaceCtx.minigamePoints += 10;
- this->score += 10;
+ play->interfaceCtx.minigamePoints += SG_BONUS_POINTS_PER_SECOND;
+ this->score += SG_BONUS_POINTS_PER_SECOND;
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
sBonusTimer = 0;
} else {
@@ -1222,8 +1256,8 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) {
player->stateFlags1 &= ~PLAYER_STATE1_20;
this->score = 0;
this->flagsIndex = 0;
- this->perGameVar1.octorokState = SG_OCTO_STATE_INITIAL;
- this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
+ this->octorokState = SG_OCTO_STATE_INITIAL;
+ this->lastHitOctorokType = SG_OCTO_TYPE_NONE;
sGameStartTimer = 30;
Interface_StartTimer(TIMER_ID_MINIGAME_1, 75);
this->actor.draw = NULL;
@@ -1321,36 +1355,36 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) {
// Octoroks begin hiding four seconds after a wave begins.
if (waveTimer < 100) {
- this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING;
+ this->octorokState = SG_OCTO_STATE_HIDING;
}
- if (this->perGameVar2.lastHitOctorokType != SG_OCTO_TYPE_NONE) {
- if (this->perGameVar2.lastHitOctorokType == SG_OCTO_TYPE_BLUE) {
+ if (this->lastHitOctorokType != SG_OCTO_TYPE_NONE) {
+ if (this->lastHitOctorokType == SG_OCTO_TYPE_BLUE) {
gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] -= SECONDS_TO_TIMER_PRECISE(2, 50);
sModFromLosingTime = (sModFromLosingTime + 25) % 50;
}
- this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE;
+ this->lastHitOctorokType = SG_OCTO_TYPE_NONE;
}
- if (this->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING) {
- this->perGameVar1.octorokState++;
+ if (this->octorokState == SG_OCTO_STATE_APPEARING) {
+ this->octorokState++;
}
// A new wave of Octoroks should appear every five seconds. However, we need to take into account
// that the player might have lost time from hitting Blue Octoroks, so we do something similar to
// what was done with waveTimer above.
- if ((sModFromLosingTime == (timer % 50)) && (this->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL)) {
+ if ((sModFromLosingTime == (timer % 50)) && (this->octorokState >= SG_OCTO_STATE_INITIAL)) {
if (this->flagsIndex < ARRAY_COUNT(sOctorokFlagsPerWave)) {
this->octorokFlags = sOctorokFlagsPerWave[this->flagsIndex++];
Actor_PlaySfx(&this->actor, NA_SE_SY_FOUND);
- this->perGameVar1.octorokState = SG_OCTO_STATE_APPEARING;
+ this->octorokState = SG_OCTO_STATE_APPEARING;
}
}
if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] == SECONDS_TO_TIMER(0)) {
this->flagsIndex = 0;
- this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING;
+ this->octorokState = SG_OCTO_STATE_HIDING;
gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_1] = SECONDS_TO_TIMER(0);
gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP;
player->stateFlags1 |= PLAYER_STATE1_20;
@@ -1374,7 +1408,7 @@ void EnSyatekiMan_Town_EndGame(EnSyatekiMan* this, PlayState* play) {
this->talkWaitTimer = 15;
if ((GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) || (this->score == 50)) {
if (GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() < this->score) {
- if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_20)) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE)) {
// You got a new record!
Message_StartTextbox(play, 0x407, &this->actor);
this->prevTextId = 0x407;
diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
index 28d19871ba..2f6fe13f51 100644
--- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
+++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.h
@@ -3,12 +3,29 @@
#include "global.h"
#include "objects/object_shn/object_shn.h"
+#include "overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h"
struct EnSyatekiMan;
typedef void (*EnSyatekiManActionFunc)(struct EnSyatekiMan*, PlayState*);
-#define EN_SYATEKI_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define SG_MAN_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
+
+// These values are used to modify the shooting gallery man's internal score. They are
+// defined in terms of the scores used by EffectSsExtra because EffectSsExtra_Update
+// updates the score displayed to the player, and defining them like this will prevent
+// these two different scores from becoming desynchronized. If you intend to modify these
+// values, then you'll also need to make sure that EffectSsExtra_Spawn in the appropriate
+// actor is called with the correct parameter for the index; failing to do this will
+// cause the two different score variables to fall out of sync.
+#define SG_POINTS_DEKU_NORMAL EXTRA_SCORE_30
+#define SG_POINTS_DEKU_BONUS EXTRA_SCORE_100
+#define SG_POINTS_GUAY EXTRA_SCORE_60
+#define SG_POINTS_WOLFOS EXTRA_SCORE_100
+
+// After getting a perfect score in the Swamp Shooting Gallery, the player is rewarded
+// additional points for every second remaining on the minigame timer.
+#define SG_BONUS_POINTS_PER_SECOND 10
typedef enum {
/* 0 */ SG_GAME_STATE_NONE, // None of the states below apply.
@@ -22,17 +39,17 @@ typedef enum {
} ShootingGalleryGameState;
typedef enum {
- /* 0 */ SG_OCTO_STATE_APPEARING,
- /* 1 */ SG_OCTO_STATE_APPEARED,
- /* 70 */ SG_OCTO_STATE_INITIAL = 70,
- /* 80 */ SG_OCTO_STATE_HIDING = 80
+ /* 0 */ SG_OCTO_STATE_APPEARING, // The Octoroks will begin to appear on the next frame.
+ /* 1 */ SG_OCTO_STATE_APPEARED, // The Octoroks are appearing from underwater or have already appeared and are floating.
+ /* 70 */ SG_OCTO_STATE_INITIAL = 70, // The initial state of the game. The Octoroks have not appeared yet.
+ /* 80 */ SG_OCTO_STATE_HIDING = 80 // The Octoroks are in the process of hiding underwater.
} ShootingGalleryOctorokState;
typedef enum {
- /* 0 */ SG_PATH_TYPE_CROW,
- /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL,
+ /* 0 */ SG_PATH_TYPE_GUAY,
+ /* 1 */ SG_PATH_TYPE_DEKU_NORMAL,
/* 2 */ SG_PATH_TYPE_WOLFOS,
- /* 3 */ SG_PATH_TYPE_SCRUB_BONUS
+ /* 3 */ SG_PATH_TYPE_DEKU_BONUS
} ShootingGalleryPathType;
typedef struct EnSyatekiMan {
@@ -41,7 +58,7 @@ typedef struct EnSyatekiMan {
/* 0x188 */ EnSyatekiManActionFunc actionFunc;
/* 0x18C */ Path* path;
/* 0x190 */ s32 octorokFlags;
- /* 0x194 */ s32 swampTargetActorListIndex; // used but never initialized, so the value is implicitly always 0
+ /* 0x194 */ s32 swampTargetActorListIndex;
/* 0x198 */ Vec3s jointTable[BURLY_GUY_LIMB_MAX];
/* 0x1F8 */ Vec3s morphTable[BURLY_GUY_LIMB_MAX];
/* 0x258 */ Vec3s headRot;
@@ -51,13 +68,13 @@ typedef struct EnSyatekiMan {
/* 0x268 */ UNK_TYPE1 unk268[0x2];
/* 0x26A */ s16 shootingGameState;
/* 0x26C */ union {
- s16 guaySpawnTimer;
+ s16 guayAppearTimer;
s16 octorokState;
- } perGameVar1;
+ };
/* 0x26E */ union {
s16 bonusDekuScrubHitCounter;
s16 lastHitOctorokType;
- } perGameVar2;
+ };
/* 0x270 */ s16 talkWaitTimer;
/* 0x272 */ s16 dekuScrubFlags;
/* 0x274 */ s16 guayFlags;
diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
index 5673439cf3..114a5fe22b 100644
--- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
+++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.c
@@ -249,7 +249,7 @@ void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play) {
// In practice, if the Octorok is floating, then the octorokState is either SG_OCTO_STATE_APPEARED or
// SG_OCTO_STATE_HIDING. Only the latter state is greater than SG_OCTO_STATE_INITIAL, so that's what
// this check is looking for.
- if (syatekiMan->perGameVar1.octorokState >= SG_OCTO_STATE_INITIAL) {
+ if (syatekiMan->octorokState >= SG_OCTO_STATE_INITIAL) {
EnSyatekiOkuta_SetupHide(this);
}
}
@@ -405,7 +405,7 @@ void EnSyatekiOkuta_CheckForSignal(EnSyatekiOkuta* this, PlayState* play) {
if ((this->actionFunc != EnSyatekiOkuta_Float) && (this->actionFunc != EnSyatekiOkuta_Appear) &&
(syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) &&
- (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING)) {
+ (syatekiMan->octorokState == SG_OCTO_STATE_APPEARING)) {
type = SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_GET_INDEX(&this->actor));
if (type > SG_OCTO_TYPE_NONE) {
Actor_SetScale(&this->actor, 0.01f);
@@ -434,10 +434,10 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
play->interfaceCtx.minigamePoints++;
syatekiMan->score++;
- syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_RED;
+ syatekiMan->lastHitOctorokType = SG_OCTO_TYPE_RED;
} else {
Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
- syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_BLUE;
+ syatekiMan->lastHitOctorokType = SG_OCTO_TYPE_BLUE;
}
EnSyatekiOkuta_SetupDie(this);
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
index 8a96967678..7f1f3cd4a1 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
@@ -114,23 +114,23 @@ ActorInit En_Syateki_Wf_InitVars = {
};
typedef enum {
- /* 0 */ EN_SYATEKI_WF_ANIM_WAIT, // unused
- /* 1 */ EN_SYATEKI_WF_ANIM_RUN,
- /* 2 */ EN_SYATEKI_WF_ANIM_JUMP,
- /* 3 */ EN_SYATEKI_WF_ANIM_LAND,
- /* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused
- /* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED,
- /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER
-} EnSyatekiWfAnimation;
+ /* 0 */ SG_WOLFOS_ANIM_WAIT, // unused
+ /* 1 */ SG_WOLFOS_ANIM_RUN,
+ /* 2 */ SG_WOLFOS_ANIM_JUMP,
+ /* 3 */ SG_WOLFOS_ANIM_LAND,
+ /* 4 */ SG_WOLFOS_ANIM_BACKFLIP, // unused
+ /* 5 */ SG_WOLFOS_ANIM_DAMAGED,
+ /* 6 */ SG_WOLFOS_ANIM_REAR_UP_FALL_OVER
+} ShootingGalleryWolfosAnimation;
static AnimationInfo sAnimationInfo[] = {
- { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
- { &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f },
- { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_WOLFOS_ANIM_WAIT
+ { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // SG_WOLFOS_ANIM_RUN
+ { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f }, // SG_WOLFOS_ANIM_JUMP
+ { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f }, // SG_WOLFOS_ANIM_LAND
+ { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_WOLFOS_ANIM_BACKFLIP
+ { &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f }, // SG_WOLFOS_ANIM_DAMAGED
+ { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_WOLFOS_ANIM_REAR_UP_FALL_OVER
};
static InitChainEntry sInitChain[] = {
@@ -150,7 +150,7 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
path = &play->setupPathList[path->additionalPathIndex];
}
- for (i = 0; i < EN_SYATEKI_WF_GET_INDEX(&this->actor); i++) {
+ for (i = 0; i < SG_WOLFOS_GET_INDEX(&this->actor); i++) {
path = &play->setupPathList[path->additionalPathIndex];
}
@@ -224,7 +224,7 @@ void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this) {
this->actor.draw = NULL;
this->currentPointIndex = 1;
this->isActive = false;
- syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_INDEX(&this->actor));
+ syatekiMan->wolfosFlags &= ~(1 << SG_WOLFOS_GET_INDEX(&this->actor));
this->actionFunc = EnSyatekiWf_WaitForSignal;
}
@@ -239,7 +239,7 @@ void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play) {
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true)) {
EnSyatekiWf_InitPathStart(this);
EnSyatekiWf_SetupWaitToMove(this);
- } else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_INDEX(&this->actor))) {
+ } else if (syatekiMan->wolfosFlags & (1 << SG_WOLFOS_GET_INDEX(&this->actor))) {
this->isActive = true;
}
}
@@ -263,7 +263,7 @@ void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play) {
}
void EnSyatekiWf_SetupRun(EnSyatekiWf* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_RUN);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_RUN);
this->actor.speed = 10.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.draw = EnSyatekiWf_Draw;
@@ -318,7 +318,7 @@ void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play) {
}
} else {
if (this->currentPointIndex < (this->maxPointIndex - 1)) {
- if (this->currentPointIndex == EN_SYATEKI_WF_GET_POINT_TO_HOWL(&this->actor)) {
+ if (this->currentPointIndex == SG_WOLFOS_GET_POINT_TO_HOWL(&this->actor)) {
EnSyatekiWf_SetupHowl(this);
}
@@ -340,7 +340,7 @@ void EnSyatekiWf_SetupJump(EnSyatekiWf* this) {
Actor_PlaySfx(&this->actor, NA_SE_EN_TEKU_JUMP);
this->actor.velocity.y = 20.0f;
this->actor.speed = 5.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_JUMP);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_JUMP);
this->actionFunc = EnSyatekiWf_Jump;
}
@@ -352,7 +352,7 @@ void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play) {
void EnSyatekiWf_SetupLand(EnSyatekiWf* this) {
this->actor.speed = 0.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_LAND);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_LAND);
this->actionFunc = EnSyatekiWf_Land;
}
@@ -369,7 +369,7 @@ void EnSyatekiWf_SetupHowl(EnSyatekiWf* this) {
this->timer = 40;
this->actor.speed = 0.0f;
Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_DAMAGED);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_DAMAGED);
this->actionFunc = EnSyatekiWf_Howl;
}
@@ -390,10 +390,10 @@ void EnSyatekiWf_SetupDead(EnSyatekiWf* this, PlayState* play) {
this->isActive = false;
this->actor.speed = 0.0f;
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, EXTRA_SCORE_INDEX_100);
Actor_PlaySfx(&this->actor, NA_SE_EN_WOLFOS_DEAD);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER);
- syatekiMan->score += 100;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_WOLFOS_ANIM_REAR_UP_FALL_OVER);
+ syatekiMan->score += SG_POINTS_WOLFOS;
this->actionFunc = EnSyatekiWf_Dead;
}
@@ -441,19 +441,19 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) {
this->tailCollider.base.acFlags &= ~AC_HIT;
this->headCollider.base.acFlags &= ~AC_HIT;
- // The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it;
- // the else-block is never reached in practice. If you *could* damage the Wolfos without killing
- // it, then the number "30" would appear every time you hit it, and the player's displayed score
- // would increase by 30. However, the else-block doesn't increase the shooting gallery man's
- // "score" variable, so it would become desynchronized from the displayed score. This could cause
- // weird behavior, like not getting a free replay after finishing a game with 2000 or more points.
+ //! @bug: The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it;
+ //! the else-block is never reached in practice. If you *could* damage the Wolfos without killing
+ //! it, then the number "30" would appear every time you hit it, and the player's displayed score
+ //! would increase by 30. However, the else-block doesn't increase the shooting gallery man's
+ //! "score" variable, so it would become desynchronized from the displayed score. This could cause
+ //! weird behavior, like not getting a free replay after finishing a game with 2000 or more points.
this->actor.colChkInfo.health -= 2;
if (this->actor.colChkInfo.health == 0) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
EnSyatekiWf_SetupDead(this, play);
} else {
Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, 0);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, EXTRA_SCORE_INDEX_30);
}
}
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
index 4a1fb2f72b..06057d6b41 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
@@ -4,9 +4,9 @@
#include "global.h"
#include "objects/object_wf/object_wf.h"
-#define EN_SYATEKI_WF_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4)
-#define EN_SYATEKI_WF_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define EN_SYATEKI_WF_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF))
+#define SG_WOLFOS_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4)
+#define SG_WOLFOS_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
+#define SG_WOLFOS_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF))
struct EnSyatekiWf;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
index 91b699f5f6..e3daa2530c 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
+++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.c
@@ -14,7 +14,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
void EffectSsExtra_Update(PlayState* play, u32 index, EffectSs* this);
void EffectSsExtra_Draw(PlayState* play, u32 index, EffectSs* this);
-static s16 sScores[] = { 30, 60, 100 };
+static s16 sScores[] = { EXTRA_SCORE_30, EXTRA_SCORE_60, EXTRA_SCORE_100 };
EffectSsInit Effect_Ss_Extra_InitVars = {
EFFECT_SS_EXTRA,
@@ -45,7 +45,7 @@ u32 EffectSsExtra_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
this->draw = EffectSsExtra_Draw;
this->update = EffectSsExtra_Update;
this->life = 50;
- this->rScoreIndex = params->scoreIdx;
+ this->rScoreIndex = params->scoreIndex;
this->rScale = params->scale;
this->rTimer = 5;
this->rObjId = objIndex;
diff --git a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
index 081570f62f..b0e162c12f 100644
--- a/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
+++ b/src/overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h
@@ -3,18 +3,22 @@
#include "global.h"
+#define EXTRA_SCORE_30 30
+#define EXTRA_SCORE_60 60
+#define EXTRA_SCORE_100 100
+
typedef enum {
- /* 0 */ EXTRA_SCORE_30,
- /* 1 */ EXTRA_SCORE_60,
- /* 2 */ EXTRA_SCORE_100
-} ExtraScoreIdx;
+ /* 0 */ EXTRA_SCORE_INDEX_30,
+ /* 1 */ EXTRA_SCORE_INDEX_60,
+ /* 2 */ EXTRA_SCORE_INDEX_100
+} ExtraScoreIndex;
typedef struct {
/* 0x00 */ Vec3f pos;
/* 0x0C */ Vec3f velocity;
/* 0x18 */ Vec3f accel;
/* 0x24 */ s16 scale;
- /* 0x26 */ s16 scoreIdx;
+ /* 0x26 */ s16 scoreIndex;
} EffectSsExtraInitParams; // size = 0x28
#endif
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index f55b89ea0f..b581ef1e6b 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -9817,7 +9817,7 @@
0x809C9480:("sTownFierceDeityPlayerPos","UNK_TYPE4","",0x4),
0x809C948C:("sTownPlayerPos","UNK_TYPE4","",0x4),
0x809C9498:("sGameStartTimer","s16","",0x2),
- 0x809C949C:("sHasSpawnedGuaysForThisWave","UNK_TYPE2","",0x2),
+ 0x809C949C:("sHasSignaledGuaysForThisWave","UNK_TYPE2","",0x2),
0x809C94A0:("sBonusTimer","s32","",0x4),
0x809C94A4:("sGameStartTimer","s16","",0x2),
0x809C94A8:("sModFromLosingTime","s32","",0x4),
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
index 591671ab8f..ceaa72f50a 100755
--- a/tools/weekeventregconvert.py
+++ b/tools/weekeventregconvert.py
@@ -261,8 +261,8 @@ weekEventReg = {
(31 << 8) | 0x40: "WEEKEVENTREG_31_40",
(31 << 8) | 0x80: "WEEKEVENTREG_31_80",
(32 << 8) | 0x01: "WEEKEVENTREG_32_01",
- (32 << 8) | 0x02: "WEEKEVENTREG_32_02",
- (32 << 8) | 0x04: "WEEKEVENTREG_32_04",
+ (32 << 8) | 0x02: "WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_HEART_PIECE",
+ (32 << 8) | 0x04: "WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_HEART_PIECE",
(32 << 8) | 0x08: "WEEKEVENTREG_32_08",
(32 << 8) | 0x10: "WEEKEVENTREG_32_10",
(32 << 8) | 0x20: "WEEKEVENTREG_32_20",
@@ -480,8 +480,8 @@ weekEventReg = {
(59 << 8) | 0x02: "WEEKEVENTREG_59_02",
(59 << 8) | 0x08: "WEEKEVENTREG_59_08",
(59 << 8) | 0x04: "WEEKEVENTREG_59_04",
- (59 << 8) | 0x10: "WEEKEVENTREG_59_10",
- (59 << 8) | 0x20: "WEEKEVENTREG_59_20",
+ (59 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_SWAMP_SHOOTING_GALLERY_QUIVER_UPGRADE",
+ (59 << 8) | 0x20: "WEEKEVENTREG_RECEIVED_TOWN_SHOOTING_GALLERY_QUIVER_UPGRADE",
(59 << 8) | 0x40: "WEEKEVENTREG_59_40",
(59 << 8) | 0x80: "WEEKEVENTREG_59_80",
(60 << 8) | 0x01: "WEEKEVENTREG_60_01",