summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Longstaff <JordanLongstaff@users.noreply.github.com>2026-04-08 07:34:59 -0400
committerGitHub <noreply@github.com>2026-04-08 07:34:59 -0400
commit33f8d3c62b483c05e5d1bc9ccbc3f862141a2a00 (patch)
tree194e6e02e5c7d9e8cca546241aeecb11984e1e48
parent2121d62a6f99a2a93be73c6364f4daa70bec3850 (diff)
Document `EnKendoJs` (#1838)
* Document `EnKendoJs` * Fix typedefs * Fix isSlashingLog reference * Found out what that unused animation was * Rename animation constants * Rename WEEKEVENTREG flag * Remove trailing whitespaces * Fix uses of isSlashingLog * Rename Skel object * Deciphered FF part of params * Dismantle message enum * Remove mask message macro * Refactor message start macro * Rename text ID arrays * Use boolean values for isRetracting * Remove statement added by faulty merge * Rename message handler functions * Minigame round union for clarity
-rw-r--r--assets/xml/objects/object_js.xml12
-rw-r--r--include/z64player.h4
-rw-r--r--include/z64save.h3
-rw-r--r--src/code/z_parameter.c4
-rw-r--r--src/code/z_player_lib.c4
-rw-r--r--src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c548
-rw-r--r--src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h23
-rw-r--r--src/overlays/actors/ovl_En_Maruta/z_en_maruta.c8
-rw-r--r--tools/disasm/n64-us/functions.txt8
-rw-r--r--tools/overlayhelpers/mscriptdis.py2
-rw-r--r--tools/sizes/code_functions.csv4
-rwxr-xr-xtools/weekeventregconvert.py2
12 files changed, 314 insertions, 308 deletions
diff --git a/assets/xml/objects/object_js.xml b/assets/xml/objects/object_js.xml
index 6d93f7ac2..e8d34729f 100644
--- a/assets/xml/objects/object_js.xml
+++ b/assets/xml/objects/object_js.xml
@@ -1,10 +1,10 @@
<Root>
<File Name="object_js" Segment="6">
- <Animation Name="object_js_Anim_00016C" Offset="0x16C" /> <!-- Original name is "js_chigau" -->
- <Animation Name="object_js_Anim_0003DC" Offset="0x3DC" /> <!-- Original name is "js_chigau2wait" -->
- <Animation Name="object_js_Anim_000AD4" Offset="0xAD4" /> <!-- Original name is "js_furueru" -->
- <Animation Name="object_js_Anim_000C7C" Offset="0xC7C" /> <!-- Original name is "js_maido" -->
- <Animation Name="object_js_Anim_000F4C" Offset="0xF4C" /> <!-- Original name is "js_matsu" -->
+ <Animation Name="gSwordmasterFlailingAnim" Offset="0x16C" /> <!-- Original name is "js_chigau" -->
+ <Animation Name="gSwordmasterStopFlailingAnim" Offset="0x3DC" /> <!-- Original name is "js_chigau2wait" -->
+ <Animation Name="gSwordmasterCoweringAnim" Offset="0xAD4" /> <!-- Original name is "js_furueru" -->
+ <Animation Name="gSwordmasterSlappingKneeAnim" Offset="0xC7C" /> <!-- Original name is "js_maido" -->
+ <Animation Name="gSwordmasterDefaultAnim" Offset="0xF4C" /> <!-- Original name is "js_matsu" -->
<DList Name="object_js_DL_003F30" Offset="0x3F30" />
<DList Name="object_js_DL_004510" Offset="0x4510" />
<DList Name="object_js_DL_004688" Offset="0x4688" />
@@ -39,7 +39,7 @@
<Limb Name="object_js_Standardlimb_00693C" Type="Standard" EnumName="OBJECT_JS_LIMB_0A" Offset="0x693C" />
<Limb Name="object_js_Standardlimb_006948" Type="Standard" EnumName="OBJECT_JS_LIMB_0B" Offset="0x6948" />
<Limb Name="object_js_Standardlimb_006954" Type="Standard" EnumName="OBJECT_JS_LIMB_0C" Offset="0x6954" />
- <Skeleton Name="object_js_Skel_006990" Type="Flex" LimbType="Standard" LimbNone="OBJECT_JS_LIMB_NONE" LimbMax="OBJECT_JS_LIMB_MAX" EnumName="ObjectJsLimb" Offset="0x6990" />
+ <Skeleton Name="gSwordmasterSkel" Type="Flex" LimbType="Standard" LimbNone="OBJECT_JS_LIMB_NONE" LimbMax="OBJECT_JS_LIMB_MAX" EnumName="ObjectJsLimb" Offset="0x6990" />
<Collision Name="object_js_Colheader_0069E8" Offset="0x69E8" /> <!-- Original name is "test_floor_bgdatainfo" -->
</File>
</Root>
diff --git a/include/z64player.h b/include/z64player.h
index eb6c89ec4..d0bd2b83c 100644
--- a/include/z64player.h
+++ b/include/z64player.h
@@ -1402,8 +1402,8 @@ void func_80122D44(struct PlayState* play, struct_80122D44_arg1* arg1);
u8 Player_MaskIdToItemId(s32 maskIdMinusOne);
s32 Player_GetCurMaskItemId(struct PlayState* play);
void func_80122F28(Player* player);
-bool func_80122F9C(struct PlayState* play);
-bool func_80122FCC(struct PlayState* play);
+bool Player_IsBackJumping(struct PlayState* play);
+bool Player_IsSideJumping(struct PlayState* play);
void func_8012300C(struct PlayState* play, s32 arg1);
void func_8012301C(Actor* thisx, struct PlayState* play2);
void func_80123140(struct PlayState* play, Player* player);
diff --git a/include/z64save.h b/include/z64save.h
index 36bbaf8af..ecbe36d9b 100644
--- a/include/z64save.h
+++ b/include/z64save.h
@@ -1404,8 +1404,7 @@ typedef enum {
// check if already healed Kamaro the Dancing Ghost
#define WEEKEVENTREG_82_04 PACK_WEEKEVENTREG_FLAG(82, 0x04)
-// Related to Swordsman's log minigame
-#define WEEKEVENTREG_82_08 PACK_WEEKEVENTREG_FLAG(82, 0x08)
+#define WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME PACK_WEEKEVENTREG_FLAG(82, 0x08)
#define WEEKEVENTREG_RECEIVED_FISHERMANS_JUMPING_GAME_HEART_PIECE PACK_WEEKEVENTREG_FLAG(82, 0x10)
#define WEEKEVENTREG_82_20 PACK_WEEKEVENTREG_FLAG(82, 0x20)
#define WEEKEVENTREG_82_40 PACK_WEEKEVENTREG_FLAG(82, 0x40)
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index 5a96c8a72..7760378d8 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -1761,7 +1761,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
Interface_SetHudVisibility(HUD_VISIBILITY_B);
- } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08)) {
+ } else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME)) {
// Swordsman's log minigame
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
@@ -2282,7 +2282,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if ((gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE) && CHECK_EVENTINF(EVENTINF_35)) {
Interface_SetHudVisibility(HUD_VISIBILITY_B_MINIMAP);
- } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08) &&
+ } else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME) &&
(gSaveContext.minigameStatus == MINIGAME_STATUS_ACTIVE)) {
Interface_SetHudVisibility(HUD_VISIBILITY_B);
} else if (play->bButtonAmmoPlusOne >= 2) {
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 85d224010..4a2889831 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -363,13 +363,13 @@ void func_80122F28(Player* player) {
}
}
-bool func_80122F9C(PlayState* play) {
+bool Player_IsBackJumping(PlayState* play) {
Player* player = GET_PLAYER(play);
return (player->stateFlags2 & PLAYER_STATE2_80000) && (player->av1.actionVar1 == 2);
}
-bool func_80122FCC(PlayState* play) {
+bool Player_IsSideJumping(PlayState* play) {
Player* player = GET_PLAYER(play);
return (player->stateFlags2 & PLAYER_STATE2_80000) &&
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
index 5ee87258b..6ac6f35ba 100644
--- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
+++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c
@@ -16,25 +16,25 @@ void EnKendoJs_Destroy(Actor* thisx, PlayState* play);
void EnKendoJs_Update(Actor* thisx, PlayState* play);
void EnKendoJs_Draw(Actor* thisx, PlayState* play);
-void func_80B26538(EnKendoJs* this);
-void func_80B2654C(EnKendoJs* this, PlayState* play);
-void func_80B26AE8(EnKendoJs* this);
-void func_80B26AFC(EnKendoJs* this, PlayState* play);
-void func_80B2701C(EnKendoJs* this);
-void func_80B27030(EnKendoJs* this, PlayState* play);
-void func_80B2714C(EnKendoJs* this);
-void func_80B27188(EnKendoJs* this, PlayState* play);
-void func_80B273D0(EnKendoJs* this);
-void func_80B2740C(EnKendoJs* this, PlayState* play);
-void func_80B274BC(EnKendoJs* this, PlayState* play);
-void func_80B276C4(EnKendoJs* this);
-void func_80B276D8(EnKendoJs* this, PlayState* play);
-void func_80B27760(EnKendoJs* this);
-void func_80B27774(EnKendoJs* this, PlayState* play);
-void func_80B2783C(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetupAwaitingTalk(EnKendoJs* this);
+void EnKendoJs_AwaitTalk(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetupMessageStateHandler(EnKendoJs* this);
+void EnKendoJs_HandleMessageState(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetupNoviceCourse(EnKendoJs* this);
+void EnKendoJs_MovePlayerToStartNoviceCourse(EnKendoJs* this, PlayState* play);
+void EnKendoJs_StartNoviceCourse(EnKendoJs* this);
+void EnKendoJs_NoviceCourse(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetupExpertCourse(EnKendoJs* this);
+void EnKendoJs_MovePlayerToStartExpertCourse(EnKendoJs* this, PlayState* play);
+void EnKendoJs_ExpertCourse(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetupPrize(EnKendoJs* this);
+void EnKendoJs_AwardPrize(EnKendoJs* this, PlayState* play);
+void EnKendoJs_AfterPrizeAccepted(EnKendoJs* this);
+void EnKendoJs_AwaitFinalMessage(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SetExpertCourseCamera(EnKendoJs* this, PlayState* play);
s32 EnKendoJs_MovePlayerToPos(PlayState* play, Vec3f targetPos);
-void func_80B279F0(EnKendoJs* this, PlayState* play, s32 arg2);
-void func_80B27A90(EnKendoJs* this, PlayState* play);
+void EnKendoJs_SpawnLog(EnKendoJs* this, PlayState* play, s32 position);
+void EnKendoJs_RetractLogs(EnKendoJs* this, PlayState* play);
ActorProfile En_Kendo_Js_Profile = {
/**/ ACTOR_EN_KENDO_JS,
@@ -71,41 +71,68 @@ static ColliderCylinderInit sCylinderInit = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 0, 0, 0, 0, MASS_IMMOVABLE };
typedef enum EnKendoJsAnimation {
- /* 0 */ ENKENDOJS_ANIM_0,
- /* 1 */ ENKENDOJS_ANIM_1,
- /* 2 */ ENKENDOJS_ANIM_2,
- /* 3 */ ENKENDOJS_ANIM_3,
- /* 4 */ ENKENDOJS_ANIM_4,
+ /* 0 */ ENKENDOJS_ANIM_SLAPPING_KNEE, // unused
+ /* 1 */ ENKENDOJS_ANIM_DEFAULT,
+ /* 2 */ ENKENDOJS_ANIM_FLAILING,
+ /* 3 */ ENKENDOJS_ANIM_STOP_FLAILING,
+ /* 4 */ ENKENDOJS_ANIM_COWERING,
/* 5 */ ENKENDOJS_ANIM_MAX
} EnKendoJsAnimation;
static AnimationInfo sAnimationInfo[ENKENDOJS_ANIM_MAX] = {
- { &object_js_Anim_000C7C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_0
- { &object_js_Anim_000F4C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_1
- { &object_js_Anim_00016C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_2
- { &object_js_Anim_0003DC, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f }, // ENKENDOJS_ANIM_3
- { &object_js_Anim_000AD4, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // ENKENDOJS_ANIM_4
+ { &gSwordmasterSlappingKneeAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f }, // unused
+ { &gSwordmasterDefaultAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+ { &gSwordmasterFlailingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+ { &gSwordmasterStopFlailingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -8.0f },
+ { &gSwordmasterCoweringAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
};
-s16 D_80B27CE0[][3] = {
+#define ENKENDOJS_START_MSG(this, play, textId) \
+ Message_StartTextbox(play, textId, &this->actor); \
+ this->curTextId = textId;
+
+s16 sNonHumanTextIds[][3] = {
{ 0x2731, 0x2732, 0x2733 },
{ 0x2734, 0x2735, 0x2736 },
{ 0x2737, 0x2738, 0x2739 },
};
-s16 D_80B27CF4[][3] = {
+s16 sHumanTextIds[][3] = {
{ 0x2710, 0x2712, 0x2714 },
{ 0x2711, 0x2713, 0x2715 },
};
-s16 D_80B27D00[] = {
+s16 sNoviceCourseProgressTextIds[] = {
0x271C, 0x271E, 0x2720, 0x2722, 0x2724, 0x2726, 0x2728,
};
-s16 D_80B27D10[] = {
+s16 sNoviceCourseTryAgainTextIds[] = {
0x271B, 0x271D, 0x271F, 0x2721, 0x2723, 0x2725, 0x2727,
};
+typedef enum EnKendoJsCourseState {
+ /* 0 */ ENKENDOJS_COURSE_PAUSED,
+ /* 1 */ ENKENDOJS_COURSE_ACTIVE,
+ /* 2 */ ENKENDOJS_COURSE_RETRY,
+} EnKendoJsCourseState;
+
+typedef enum EnKendoJsNoviceCourseLesson {
+ /* 0 */ ENKENDOJS_NOVICE_SIDE_JUMP,
+ /* 1 */ ENKENDOJS_NOVICE_ROLL,
+ /* 2 */ ENKENDOJS_NOVICE_BACKFLIP,
+ /* 3 */ ENKENDOJS_NOVICE_SWORD_ATTACK,
+ /* 4 */ ENKENDOJS_NOVICE_SWORD_TARGET,
+ /* 5 */ ENKENDOJS_NOVICE_SWORD_THRUST,
+ /* 6 */ ENKENDOJS_NOVICE_JUMP_ATTACK,
+ /* 7 */ ENKENDOJS_NOVICE_FINISHED,
+} EnKendoJsNoviceCourseLesson;
+
+typedef enum EnKendoJsNoviceCourseActionResult {
+ /* 0 */ ENKENDOJS_RESULT_CORRECT,
+ /* 1 */ ENKENDOJS_RESULT_INCORRECT,
+ /* 2 */ ENKENDOJS_RESULT_PENDING,
+} EnKendoJsNoviceCourseActionResult;
+
void EnKendoJs_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnKendoJs* this = (EnKendoJs*)thisx;
@@ -116,25 +143,25 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) {
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_js_Skel_006990, &object_js_Anim_000F4C, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gSwordmasterSkel, &gSwordmasterDefaultAnim, this->jointTable,
this->morphTable, OBJECT_JS_LIMB_MAX);
if ((CURRENT_DAY == 3) && ((CURRENT_TIME > CLOCK_TIME(23, 0)) || (CURRENT_TIME < CLOCK_TIME(6, 0)))) {
- if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) {
+ if (ENKENDOJS_GET_LOCATION(&this->actor) != ENKENDOJS_IN_BACK_ROOM) {
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_KANBAN, this->actor.home.pos.x, this->actor.home.pos.y,
this->actor.home.pos.z - 10.0f, this->actor.home.rot.x, this->actor.home.rot.y,
this->actor.home.rot.z, 0x10);
Actor_Kill(&this->actor);
} else {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_4);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_COWERING);
}
- } else if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
+ } else if (ENKENDOJS_GET_LOCATION(&this->actor) == ENKENDOJS_IN_BACK_ROOM) {
Actor_Kill(&this->actor);
}
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4);
- if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) {
+ if (ENKENDOJS_GET_LOCATION(&this->actor) != ENKENDOJS_IN_BACK_ROOM) {
Path* path = &play->setupPathList[ENKENDOJS_GET_PATH_INDEX(&this->actor)];
this->pathPoints = Lib_SegmentedToVirtual(path->points);
@@ -144,127 +171,116 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) {
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 30.0f;
this->actor.child = NULL;
- this->unk_28A = false;
- this->unk_28C = 0;
- this->unk_28E = 0;
- this->unk_286 = 0;
- func_80B26538(this);
+ this->hasSpoken = false;
+ this->numLogs = 0;
+ this->isSlashingLog = false;
+ this->courseState = ENKENDOJS_COURSE_PAUSED;
+ EnKendoJs_SetupAwaitingTalk(this);
}
void EnKendoJs_Destroy(Actor* thisx, PlayState* play) {
EnKendoJs* this = (EnKendoJs*)thisx;
Collider_DestroyCylinder(play, &this->collider);
- CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME);
}
-void func_80B26538(EnKendoJs* this) {
- this->actionFunc = func_80B2654C;
+void EnKendoJs_SetupAwaitingTalk(EnKendoJs* this) {
+ this->actionFunc = EnKendoJs_AwaitTalk;
}
-void func_80B2654C(EnKendoJs* this, PlayState* play) {
- s32 phi_v0;
- s32 sp30;
+void EnKendoJs_AwaitTalk(EnKendoJs* this, PlayState* play) {
+ s32 mainIndex;
+ s32 dayIndex;
if (Actor_TalkOfferAccepted(&this->actor, &play->state)) {
if (CURRENT_DAY != 0) {
- sp30 = CURRENT_DAY - 1;
+ dayIndex = CURRENT_DAY - 1;
} else {
- sp30 = 0;
+ dayIndex = 0;
}
- if (ENKENDOJS_GET_FF(&this->actor) == ENKENDOJS_FF_1) {
- Message_StartTextbox(play, 0x273C, &this->actor);
- this->unk_288 = 0x273C;
+ if (ENKENDOJS_GET_LOCATION(&this->actor) == ENKENDOJS_IN_BACK_ROOM) {
+ ENKENDOJS_START_MSG(this, play, 0x273C);
} else if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) {
switch (GET_PLAYER_FORM) {
case PLAYER_FORM_DEKU:
- phi_v0 = 0;
+ mainIndex = 0;
break;
case PLAYER_FORM_GORON:
- phi_v0 = 1;
+ mainIndex = 1;
break;
case PLAYER_FORM_ZORA:
- phi_v0 = 2;
+ mainIndex = 2;
break;
default:
- phi_v0 = 0;
+ mainIndex = 0;
break;
}
- Message_StartTextbox(play, D_80B27CE0[phi_v0][sp30], &this->actor);
- this->unk_288 = D_80B27CE0[phi_v0][sp30];
+ ENKENDOJS_START_MSG(this, play, sNonHumanTextIds[mainIndex][dayIndex]);
} else if ((Player_GetMask(play) != PLAYER_MASK_NONE) && (Player_GetMask(play) < PLAYER_MASK_GIANT)) {
- u16 sp2E = Player_GetMask(play) + 0x273C;
+ u16 maskMessage = Player_GetMask(play) + 0x273C;
//! FAKE:
if (1) {}
- Message_StartTextbox(play, sp2E, &this->actor);
- this->unk_288 = sp2E;
+ ENKENDOJS_START_MSG(this, play, maskMessage);
} else {
- if (!this->unk_28A) {
- this->unk_28A = true;
- phi_v0 = 0;
+ if (!this->hasSpoken) {
+ this->hasSpoken = true;
+ mainIndex = 0;
} else {
- phi_v0 = 1;
+ mainIndex = 1;
}
- Message_StartTextbox(play, D_80B27CF4[phi_v0][sp30], &this->actor);
- this->unk_288 = D_80B27CF4[phi_v0][sp30];
+ ENKENDOJS_START_MSG(this, play, sHumanTextIds[mainIndex][dayIndex]);
}
- func_80B26AE8(this);
+ EnKendoJs_SetupMessageStateHandler(this);
} else {
Actor_OfferTalk(&this->actor, play, 100.0f);
}
}
-void func_80B26758(EnKendoJs* this, PlayState* play) {
- if (Message_ShouldAdvance(play) && (this->unk_288 == 0x2716)) {
+void EnKendoJs_HandleMessageChoices(EnKendoJs* this, PlayState* play) {
+ if (Message_ShouldAdvance(play) && (this->curTextId == 0x2716)) {
switch (play->msgCtx.choiceIndex) {
case 0:
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
Audio_PlaySfx(NA_SE_SY_ERROR);
- Message_StartTextbox(play, 0x272C, &this->actor);
- this->unk_288 = 0x272C;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
+ ENKENDOJS_START_MSG(this, play, 0x272C);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_FLAILING);
} else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.firstChoicePrice) {
Audio_PlaySfx(NA_SE_SY_ERROR);
- Message_StartTextbox(play, 0x2718, &this->actor);
- this->unk_288 = 0x2718;
+ ENKENDOJS_START_MSG(this, play, 0x2718);
} else {
Audio_PlaySfx_MessageDecide();
Rupees_ChangeBy(-play->msgCtx.firstChoicePrice);
- Message_StartTextbox(play, 0x2719, &this->actor);
- this->unk_288 = 0x2719;
+ ENKENDOJS_START_MSG(this, play, 0x2719);
}
break;
case 1:
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
Audio_PlaySfx(NA_SE_SY_ERROR);
- Message_StartTextbox(play, 0x272C, &this->actor);
- this->unk_288 = 0x272C;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
+ ENKENDOJS_START_MSG(this, play, 0x272C);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_FLAILING);
} else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.secondChoicePrice) {
Audio_PlaySfx(NA_SE_SY_ERROR);
- Message_StartTextbox(play, 0x2718, &this->actor);
- this->unk_288 = 0x2718;
+ ENKENDOJS_START_MSG(this, play, 0x2718);
} else {
Audio_PlaySfx_MessageDecide();
Rupees_ChangeBy(-play->msgCtx.secondChoicePrice);
- Message_StartTextbox(play, 0x273A, &this->actor);
- this->unk_288 = 0x273A;
+ ENKENDOJS_START_MSG(this, play, 0x273A);
}
break;
case 2:
Audio_PlaySfx_MessageCancel();
- Message_StartTextbox(play, 0x2717, &this->actor);
- this->unk_288 = 0x2717;
+ ENKENDOJS_START_MSG(this, play, 0x2717);
break;
default:
@@ -273,52 +289,50 @@ void func_80B26758(EnKendoJs* this, PlayState* play) {
}
}
-void func_80B269A4(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_HandleMessageEvents(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (!Message_ShouldAdvance(play)) {
return;
}
- switch (this->unk_288) {
+ switch (this->curTextId) {
case 0x2710:
case 0x2711:
case 0x2712:
case 0x2713:
case 0x2714:
case 0x2715:
- Message_StartTextbox(play, 0x2716, &this->actor);
- this->unk_288 = 0x2716;
+ ENKENDOJS_START_MSG(this, play, 0x2716);
break;
case 0x2719:
Message_CloseTextbox(play);
player->stateFlags1 |= PLAYER_STATE1_20;
- func_80B2701C(this);
+ EnKendoJs_SetupNoviceCourse(this);
break;
case 0x271A:
Message_CloseTextbox(play);
- func_80B2714C(this);
+ EnKendoJs_StartNoviceCourse(this);
break;
case 0x273A:
- Message_StartTextbox(play, 0x273B, &this->actor);
- this->unk_288 = 0x273B;
+ ENKENDOJS_START_MSG(this, play, 0x273B);
break;
case 0x273B:
Message_CloseTextbox(play);
Interface_InitMinigame(play);
player->stateFlags1 |= PLAYER_STATE1_20;
- func_80B273D0(this);
+ EnKendoJs_SetupExpertCourse(this);
break;
case 0x272D:
Message_CloseTextbox(play);
gSaveContext.minigameStatus = MINIGAME_STATUS_END;
- func_80B276C4(this);
- func_80B276D8(this, play);
+ EnKendoJs_SetupPrize(this);
+ EnKendoJs_AwardPrize(this, play);
break;
default:
@@ -326,34 +340,34 @@ void func_80B269A4(EnKendoJs* this, PlayState* play) {
}
}
-void func_80B26AE8(EnKendoJs* this) {
- this->actionFunc = func_80B26AFC;
+void EnKendoJs_SetupMessageStateHandler(EnKendoJs* this) {
+ this->actionFunc = EnKendoJs_HandleMessageState;
}
-void func_80B26AFC(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_HandleMessageState(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_CHOICE:
- func_80B26758(this, play);
+ EnKendoJs_HandleMessageChoices(this, play);
break;
case TEXT_STATE_EVENT:
- func_80B269A4(this, play);
+ EnKendoJs_HandleMessageEvents(this, play);
break;
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
- if (this->unk_288 == 0x272C) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3);
+ if (this->curTextId == 0x272C) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_STOP_FLAILING);
}
- if ((this->unk_288 == 0x272E) || (this->unk_288 == 0x272F) || (this->unk_288 == 0x2730)) {
+ if ((this->curTextId == 0x272E) || (this->curTextId == 0x272F) || (this->curTextId == 0x2730)) {
gSaveContext.minigameStatus = MINIGAME_STATUS_END;
}
player->stateFlags1 &= ~PLAYER_STATE1_20;
- func_80B26538(this);
+ EnKendoJs_SetupAwaitingTalk(this);
}
break;
@@ -366,132 +380,128 @@ void func_80B26AFC(EnKendoJs* this, PlayState* play) {
}
}
-s32 func_80B26BF8(EnKendoJs* this, PlayState* play) {
+s32 EnKendoJs_GetNoviceCourseActionResult(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- switch (this->unk_284) {
- case 0:
- if (func_80122FCC(play)) {
- return 0;
+ switch (this->minigameRound.noviceRound) {
+ case ENKENDOJS_NOVICE_SIDE_JUMP:
+ if (Player_IsSideJumping(play)) {
+ return ENKENDOJS_RESULT_CORRECT;
}
if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
(player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
- return 1;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
- case 1:
+ case ENKENDOJS_NOVICE_ROLL:
if ((player->stateFlags3 & PLAYER_STATE3_8000000)) {
- return 0;
+ return ENKENDOJS_RESULT_CORRECT;
}
if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
(player->stateFlags2 & PLAYER_STATE2_80000)) {
- return 1;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
- case 2:
- if (func_80122F9C(play)) {
- return 0;
+ case ENKENDOJS_NOVICE_BACKFLIP:
+ if (Player_IsBackJumping(play)) {
+ return ENKENDOJS_RESULT_CORRECT;
}
if ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) ||
(player->stateFlags3 & PLAYER_STATE3_8000000) || (player->stateFlags2 & PLAYER_STATE2_80000)) {
- return 1;
+ return ENKENDOJS_RESULT_INCORRECT;
}
- this->unk_28E = 0;
+ this->isSlashingLog = false;
break;
- case 3:
- if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H))) {
- this->unk_28E = 0;
- return 0;
+ case ENKENDOJS_NOVICE_SWORD_ATTACK:
+ if ((this->isSlashingLog == true) && ((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H))) {
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_CORRECT;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ if ((this->isSlashingLog == true) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
(player->stateFlags2 & PLAYER_STATE2_80000)) {
- this->unk_28E = 0;
- return 1;
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
- case 4:
- if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_COMBO_1H))) {
- this->unk_28E = 0;
- return 0;
+ case ENKENDOJS_NOVICE_SWORD_TARGET:
+ if ((this->isSlashingLog == true) && ((player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_COMBO_1H))) {
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_CORRECT;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ if ((this->isSlashingLog == true) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
(player->stateFlags2 & PLAYER_STATE2_80000)) {
- this->unk_28E = 0;
- return 1;
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
- case 5:
- if ((this->unk_28E == 1) && (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H)) {
- this->unk_28E = 0;
- return 0;
+ case ENKENDOJS_NOVICE_SWORD_THRUST:
+ if ((this->isSlashingLog == true) && (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H)) {
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_CORRECT;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ if ((this->isSlashingLog == true) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
(player->stateFlags2 & PLAYER_STATE2_80000)) {
- this->unk_28E = 0;
- return 1;
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
- case 6:
- if ((this->unk_28E == 1) && ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
- (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH))) {
- this->unk_28E = 0;
- return 0;
+ case ENKENDOJS_NOVICE_JUMP_ATTACK:
+ if ((this->isSlashingLog == true) && ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
+ (player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH))) {
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_CORRECT;
}
- if ((this->unk_28E == 1) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
+ if ((this->isSlashingLog == true) || (player->stateFlags3 & PLAYER_STATE3_8000000) ||
(player->stateFlags2 & PLAYER_STATE2_80000)) {
- this->unk_28E = 0;
- return 1;
+ this->isSlashingLog = false;
+ return ENKENDOJS_RESULT_INCORRECT;
}
break;
default:
break;
}
- return 2;
+ return ENKENDOJS_RESULT_PENDING;
}
-void func_80B26EB4(EnKendoJs* this, PlayState* play) {
- Message_StartTextbox(play, D_80B27D00[this->unk_284], &this->actor);
- this->unk_288 = D_80B27D00[this->unk_284];
- this->unk_284++;
+void EnKendoJs_NoviceCourseProgress(EnKendoJs* this, PlayState* play) {
+ ENKENDOJS_START_MSG(this, play, sNoviceCourseProgressTextIds[this->minigameRound.noviceRound]);
+ this->minigameRound.noviceRound++;
}
-void func_80B26F14(EnKendoJs* this, PlayState* play) {
- Message_StartTextbox(play, D_80B27D10[this->unk_284], &this->actor);
- this->unk_288 = D_80B27D10[this->unk_284];
+void EnKendoJs_NoviceCourseTryAgain(EnKendoJs* this, PlayState* play) {
+ ENKENDOJS_START_MSG(this, play, sNoviceCourseTryAgainTextIds[this->minigameRound.noviceRound]);
}
-s32 func_80B26F6C(EnKendoJs* this, PlayState* play) {
+s32 EnKendoJs_HasMoreAdviceToTryAgain(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- switch (this->unk_288) {
+ switch (this->curTextId) {
case 0x271D:
if (Player_GetMeleeWeaponHeld(player) != PLAYER_MELEEWEAPON_NONE) {
- Message_StartTextbox(play, 0x272A, &this->actor);
- this->unk_288 = 0x272A;
+ ENKENDOJS_START_MSG(this, play, 0x272A);
return true;
}
break;
case 0x2721:
- if (this->unk_292 != 0) {
- Message_StartTextbox(play, 0x272B, &this->actor);
- this->unk_288 = 0x272B;
+ if (this->isPlayerLockedOn) {
+ ENKENDOJS_START_MSG(this, play, 0x272B);
return true;
}
break;
@@ -502,151 +512,147 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) {
return false;
}
-void func_80B2701C(EnKendoJs* this) {
- this->actionFunc = func_80B27030;
+void EnKendoJs_SetupNoviceCourse(EnKendoJs* this) {
+ this->actionFunc = EnKendoJs_MovePlayerToStartNoviceCourse;
}
-void func_80B27030(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_MovePlayerToStartNoviceCourse(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Vec3f sp20 = this->actor.world.pos;
+ Vec3f startPos = this->actor.world.pos;
- sp20.z += 200.0f;
+ startPos.z += 200.0f;
- if (EnKendoJs_MovePlayerToPos(play, sp20)) {
+ if (EnKendoJs_MovePlayerToPos(play, startPos)) {
this->actor.flags |= ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
if (Actor_TalkOfferAccepted(&this->actor, &play->state)) {
this->actor.flags &= ~ACTOR_FLAG_TALK_OFFER_AUTO_ACCEPTED;
player->stateFlags1 &= ~PLAYER_STATE1_20;
- func_80B279F0(this, play, 0);
- Message_StartTextbox(play, 0x271A, &this->actor);
- this->unk_288 = 0x271A;
- func_80B26AE8(this);
+ EnKendoJs_SpawnLog(this, play, 0);
+ ENKENDOJS_START_MSG(this, play, 0x271A);
+ EnKendoJs_SetupMessageStateHandler(this);
} else {
Actor_OfferTalk(&this->actor, play, 800.0f);
}
}
}
-void func_80B2714C(EnKendoJs* this) {
- SET_WEEKEVENTREG(WEEKEVENTREG_82_08);
- this->unk_28C = 1;
- this->unk_290 = 0;
- this->unk_284 = 0;
- this->unk_286 = 1;
- this->actionFunc = func_80B27188;
+void EnKendoJs_StartNoviceCourse(EnKendoJs* this) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME);
+ this->numLogs = 1;
+ this->timer = 0;
+ this->minigameRound.noviceRound = ENKENDOJS_NOVICE_SIDE_JUMP;
+ this->courseState = ENKENDOJS_COURSE_ACTIVE;
+ this->actionFunc = EnKendoJs_NoviceCourse;
}
-void func_80B27188(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_NoviceCourse(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT) && Message_ShouldAdvance(play)) {
- if (this->unk_288 == 0x2729) {
- func_80B26F14(this, play);
- } else if (!func_80B26F6C(this, play)) {
- if (this->skelAnime.animation == &object_js_Anim_00016C) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_3);
+ if (this->curTextId == 0x2729) {
+ EnKendoJs_NoviceCourseTryAgain(this, play);
+ } else if (!EnKendoJs_HasMoreAdviceToTryAgain(this, play)) {
+ if (this->skelAnime.animation == &gSwordmasterFlailingAnim) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_STOP_FLAILING);
}
- this->unk_286 = 2;
+ this->courseState = ENKENDOJS_COURSE_RETRY;
Message_CloseTextbox(play);
player->stateFlags1 &= ~PLAYER_STATE1_20;
}
- } else if (this->unk_286 == 2) {
- this->unk_286 = 1;
+ } else if (this->courseState == ENKENDOJS_COURSE_RETRY) {
+ this->courseState = ENKENDOJS_COURSE_ACTIVE;
}
- if (this->unk_286 == 1) {
- switch (func_80B26BF8(this, play)) {
- case 0:
- this->unk_286 = 0;
+ if (this->courseState == ENKENDOJS_COURSE_ACTIVE) {
+ switch (EnKendoJs_GetNoviceCourseActionResult(this, play)) {
+ case ENKENDOJS_RESULT_CORRECT:
+ this->courseState = ENKENDOJS_COURSE_PAUSED;
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
player->stateFlags1 |= PLAYER_STATE1_20;
- func_80B26EB4(this, play);
+ EnKendoJs_NoviceCourseProgress(this, play);
break;
- case 1:
+ case ENKENDOJS_RESULT_INCORRECT:
Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR);
- this->unk_286 = 0;
+ this->courseState = ENKENDOJS_COURSE_PAUSED;
player->stateFlags1 |= PLAYER_STATE1_20;
- Message_StartTextbox(play, 0x2729, &this->actor);
- this->unk_288 = 0x2729;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_2);
+ ENKENDOJS_START_MSG(this, play, 0x2729);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_FLAILING);
break;
default:
- if (this->unk_28C == 0) {
- this->unk_290++;
- if (this->unk_290 == 30) {
- this->unk_290 = 0;
- func_80B279F0(this, play, 0);
+ if (this->numLogs == 0) {
+ this->timer++;
+ if (this->timer == 30) {
+ this->timer = 0;
+ EnKendoJs_SpawnLog(this, play, 0);
}
}
break;
}
- if ((this->skelAnime.animation == &object_js_Anim_0003DC) &&
+ if ((this->skelAnime.animation == &gSwordmasterStopFlailingAnim) &&
Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_1);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, ENKENDOJS_ANIM_DEFAULT);
}
- if (this->unk_284 == 7) {
- CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
- func_80B26AE8(this);
+ if (this->minigameRound.noviceRound == ENKENDOJS_NOVICE_FINISHED) {
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME);
+ EnKendoJs_SetupMessageStateHandler(this);
}
}
}
-void func_80B273D0(EnKendoJs* this) {
- SET_WEEKEVENTREG(WEEKEVENTREG_82_08);
- this->unk_290 = 120;
- this->unk_284 = 0;
- this->unk_286 = 1;
- this->actionFunc = func_80B2740C;
+void EnKendoJs_SetupExpertCourse(EnKendoJs* this) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME);
+ this->timer = 120;
+ this->minigameRound.expertRound = 0;
+ this->courseState = ENKENDOJS_COURSE_ACTIVE;
+ this->actionFunc = EnKendoJs_MovePlayerToStartExpertCourse;
}
-void func_80B2740C(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_MovePlayerToStartExpertCourse(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- Vec3f sp18 = this->actor.world.pos;
+ Vec3f startPos = this->actor.world.pos;
- sp18.z += 300.0f;
+ startPos.z += 300.0f;
- if (EnKendoJs_MovePlayerToPos(play, sp18)) {
- this->unk_28C = 0;
+ if (EnKendoJs_MovePlayerToPos(play, startPos)) {
+ this->numLogs = 0;
player->stateFlags1 &= ~PLAYER_STATE1_20;
- this->actionFunc = func_80B274BC;
+ this->actionFunc = EnKendoJs_ExpertCourse;
}
}
-void func_80B274BC(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_ExpertCourse(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- if (this->unk_290 >= 140) {
- if (this->unk_284 == 5) {
+ if (this->timer >= 140) {
+ if (this->minigameRound.expertRound == 5) {
if (gSaveContext.minigameScore == 30) {
- Message_StartTextbox(play, 0x272D, &this->actor);
- this->unk_288 = 0x272D;
+ ENKENDOJS_START_MSG(this, play, 0x272D);
} else {
- Message_StartTextbox(play, 0x272E, &this->actor);
- this->unk_288 = 0x272E;
+ ENKENDOJS_START_MSG(this, play, 0x272E);
}
player->stateFlags1 |= PLAYER_STATE1_20;
- CLEAR_WEEKEVENTREG(WEEKEVENTREG_82_08);
- func_80B26AE8(this);
+ CLEAR_WEEKEVENTREG(WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME);
+ EnKendoJs_SetupMessageStateHandler(this);
return;
}
Audio_PlaySfx(NA_SE_SY_FOUND);
- func_80B279F0(this, play, ((u8)Rand_Next() % 3) + 1);
- func_80B279F0(this, play, ((u8)Rand_Next() % 3) + 4);
- this->unk_290 = 0;
- this->unk_284++;
- } else if (this->unk_290 == 120) {
- func_80B27A90(this, play);
- this->unk_290++;
+ EnKendoJs_SpawnLog(this, play, ((u8)Rand_Next() % 3) + 1);
+ EnKendoJs_SpawnLog(this, play, ((u8)Rand_Next() % 3) + 4);
+ this->timer = 0;
+ this->minigameRound.expertRound++;
+ } else if (this->timer == 120) {
+ EnKendoJs_RetractLogs(this, play);
+ this->timer++;
} else {
- this->unk_290++;
+ this->timer++;
}
- if (this->unk_28E == 1) {
+ if (this->isSlashingLog == true) {
if ((player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_START) ||
(player->meleeWeaponAnimation == PLAYER_MWA_JUMPSLASH_FINISH)) {
play->interfaceCtx.minigamePoints = 3;
@@ -659,19 +665,19 @@ void func_80B274BC(EnKendoJs* this, PlayState* play) {
play->interfaceCtx.minigamePoints = 1;
}
Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR);
- this->unk_28E = 0;
+ this->isSlashingLog = false;
}
- func_80B2783C(this, play);
+ EnKendoJs_SetExpertCourseCamera(this, play);
}
-void func_80B276C4(EnKendoJs* this) {
- this->actionFunc = func_80B276D8;
+void EnKendoJs_SetupPrize(EnKendoJs* this) {
+ this->actionFunc = EnKendoJs_AwardPrize;
}
-void func_80B276D8(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_AwardPrize(EnKendoJs* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL;
- func_80B27760(this);
+ EnKendoJs_AfterPrizeAccepted(this);
} else if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWORDSMANS_SCHOOL_HEART_PIECE)) {
Actor_OfferGetItem(&this->actor, play, GI_HEART_PIECE, 800.0f, 100.0f);
} else {
@@ -679,42 +685,40 @@ void func_80B276D8(EnKendoJs* this, PlayState* play) {
}
}
-void func_80B27760(EnKendoJs* this) {
- this->actionFunc = func_80B27774;
+void EnKendoJs_AfterPrizeAccepted(EnKendoJs* this) {
+ this->actionFunc = EnKendoJs_AwaitFinalMessage;
}
-void func_80B27774(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_AwaitFinalMessage(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if (Actor_TalkOfferAccepted(&this->actor, &play->state)) {
if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWORDSMANS_SCHOOL_HEART_PIECE)) {
SET_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_SWORDSMANS_SCHOOL_HEART_PIECE);
- Message_StartTextbox(play, 0x272F, &this->actor);
- this->unk_288 = 0x272F;
+ ENKENDOJS_START_MSG(this, play, 0x272F);
} else {
- Message_StartTextbox(play, 0x2730, &this->actor);
- this->unk_288 = 0x2730;
+ ENKENDOJS_START_MSG(this, play, 0x2730);
}
- func_80B26AE8(this);
+ EnKendoJs_SetupMessageStateHandler(this);
player->stateFlags1 &= ~PLAYER_STATE1_20;
} else {
Actor_OfferTalkExchangeEquiCylinder(&this->actor, play, 1000.0f, PLAYER_IA_MINUS1);
}
}
-void func_80B2783C(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_SetExpertCourseCamera(EnKendoJs* this, PlayState* play) {
if (this->actor.csId != CS_ID_NONE) {
Camera_ChangeActorCsCamIndex(play->cameraPtrs[CAM_ID_MAIN],
CutsceneManager_GetCutsceneEntry(this->actor.csId)->csCamId);
}
}
-void func_80B27880(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_KeepPlayerInTrainingArea(EnKendoJs* this, PlayState* play) {
Player* player = GET_PLAYER(play);
- f32 temp_f0 = this->actor.world.pos.z + 70.0f;
+ f32 zClamp = this->actor.world.pos.z + 70.0f;
- if ((ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) && (player->actor.world.pos.z < temp_f0)) {
- player->actor.world.pos.z = temp_f0;
+ if ((ENKENDOJS_GET_LOCATION(&this->actor) != ENKENDOJS_IN_BACK_ROOM) && (player->actor.world.pos.z < zClamp)) {
+ player->actor.world.pos.z = zClamp;
}
}
@@ -744,21 +748,21 @@ s32 EnKendoJs_MovePlayerToPos(PlayState* play, Vec3f targetPos) {
return false;
}
-void func_80B279AC(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_UpdateCollider(EnKendoJs* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
}
-void func_80B279F0(EnKendoJs* this, PlayState* play, s32 arg2) {
- f32 x = this->pathPoints[arg2].x;
- f32 y = this->pathPoints[arg2].y;
- f32 z = this->pathPoints[arg2].z;
+void EnKendoJs_SpawnLog(EnKendoJs* this, PlayState* play, s32 position) {
+ f32 x = this->pathPoints[position].x;
+ f32 y = this->pathPoints[position].y;
+ f32 z = this->pathPoints[position].z;
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MARUTA, x, y, z, 0, 0, 0, 0);
- this->unk_28C++;
+ this->numLogs++;
}
-void func_80B27A90(EnKendoJs* this, PlayState* play) {
+void EnKendoJs_RetractLogs(EnKendoJs* this, PlayState* play) {
Actor* actor = play->actorCtx.actorLists[ACTORCAT_PROP].first;
while (actor != NULL) {
@@ -768,7 +772,7 @@ void func_80B27A90(EnKendoJs* this, PlayState* play) {
actor = actor->next;
}
- this->unk_28C = 0;
+ this->numLogs = 0;
}
void EnKendoJs_Update(Actor* thisx, PlayState* play) {
@@ -778,8 +782,8 @@ void EnKendoJs_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime);
Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->torsoRot, this->actor.focus.pos);
- func_80B279AC(this, play);
- func_80B27880(this, play);
+ EnKendoJs_UpdateCollider(this, play);
+ EnKendoJs_KeepPlayerInTrainingArea(this, play);
}
s32 EnKendoJs_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
index 9c00267ff..575fd5f12 100644
--- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
+++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.h
@@ -8,10 +8,10 @@ struct EnKendoJs;
typedef void (*EnKendoJsActionFunc)(struct EnKendoJs*, PlayState*);
-#define ENKENDOJS_GET_FF(thisx) ((thisx)->params & 0xFF)
+#define ENKENDOJS_GET_LOCATION(thisx) ((thisx)->params & 0xFF)
#define ENKENDOJS_GET_PATH_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define ENKENDOJS_FF_1 1
+#define ENKENDOJS_IN_BACK_ROOM 1
typedef struct EnKendoJs {
/* 0x000 */ Actor actor;
@@ -23,14 +23,17 @@ typedef struct EnKendoJs {
/* 0x274 */ Vec3s* pathPoints;
/* 0x278 */ Vec3s headRot;
/* 0x27E */ Vec3s torsoRot;
- /* 0x284 */ s16 unk_284;
- /* 0x286 */ s16 unk_286;
- /* 0x288 */ s16 unk_288;
- /* 0x28A */ s16 unk_28A;
- /* 0x28C */ s16 unk_28C;
- /* 0x28E */ s16 unk_28E;
- /* 0x290 */ s16 unk_290;
- /* 0x292 */ u8 unk_292;
+ /* 0x284 */ union {
+ s16 noviceRound;
+ s16 expertRound;
+ } minigameRound;
+ /* 0x286 */ s16 courseState;
+ /* 0x288 */ s16 curTextId;
+ /* 0x28A */ s16 hasSpoken;
+ /* 0x28C */ s16 numLogs;
+ /* 0x28E */ s16 isSlashingLog;
+ /* 0x290 */ s16 timer;
+ /* 0x292 */ u8 isPlayerLockedOn;
} EnKendoJs; // size = 0x294
#endif // Z_EN_KENDO_JS_H
diff --git a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
index ca146059b..84372addb 100644
--- a/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
+++ b/src/overlays/actors/ovl_En_Maruta/z_en_maruta.c
@@ -312,7 +312,7 @@ void EnMaruta_SittingWhole(EnMaruta* this, PlayState* play) {
if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) {
EnKendoJs* kendoJs = (EnKendoJs*)this->actor.parent;
- kendoJs->unk_292 = this->actor.isLockedOn;
+ kendoJs->isPlayerLockedOn = this->actor.isLockedOn;
}
}
@@ -342,7 +342,7 @@ void EnMaruta_RetractWhole(EnMaruta* this, PlayState* play) {
if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) {
EnKendoJs* kendoJs = (EnKendoJs*)this->actor.parent;
- kendoJs->unk_28C--;
+ kendoJs->numLogs--;
}
Actor_Kill(&this->actor);
}
@@ -579,8 +579,8 @@ void EnMaruta_UpdateCollider(EnMaruta* this, PlayState* play) {
if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) {
EnKendoJs* kendoJs = (EnKendoJs*)this->actor.parent;
- kendoJs->unk_28E = 1;
- kendoJs->unk_28C--;
+ kendoJs->isSlashingLog = true;
+ kendoJs->numLogs--;
}
return;
}
diff --git a/tools/disasm/n64-us/functions.txt b/tools/disasm/n64-us/functions.txt
index 14c8fe397..364303270 100644
--- a/tools/disasm/n64-us/functions.txt
+++ b/tools/disasm/n64-us/functions.txt
@@ -2182,8 +2182,8 @@ func_80122D44 = 0x80122D44; // type:func
Player_MaskIdToItemId = 0x80122ED8; // type:func
Player_GetCurMaskItemId = 0x80122EEC; // type:func
func_80122F28 = 0x80122F28; // type:func
-func_80122F9C = 0x80122F9C; // type:func
-func_80122FCC = 0x80122FCC; // type:func
+Player_IsBackJumping = 0x80122F9C; // type:func
+Player_IsSideJumping = 0x80122FCC; // type:func
func_8012300C = 0x8012300C; // type:func
func_8012301C = 0x8012301C; // type:func
func_80123140 = 0x80123140; // type:func
@@ -13299,8 +13299,8 @@ EnRacedog_PostLimbDraw = 0x80B25A90; // type:func
EnRacedog_Draw = 0x80B25B14; // type:func
EnKendoJs_Init = 0x80B262A0; // type:func
EnKendoJs_Destroy = 0x80B264FC; // type:func
-func_80B26538 = 0x80B26538; // type:func
-func_80B2654C = 0x80B2654C; // type:func
+EnKendoJs_SetupAwaitingTalk = 0x80B26538; // type:func
+EnKendoJs_AwaitTalk = 0x80B2654C; // type:func
func_80B26758 = 0x80B26758; // type:func
func_80B269A4 = 0x80B269A4; // type:func
func_80B26AE8 = 0x80B26AE8; // type:func
diff --git a/tools/overlayhelpers/mscriptdis.py b/tools/overlayhelpers/mscriptdis.py
index 1cbbefbe1..0efba0c82 100644
--- a/tools/overlayhelpers/mscriptdis.py
+++ b/tools/overlayhelpers/mscriptdis.py
@@ -720,7 +720,7 @@ week_event_reg = {
(82 << 8) | 0x01: "WEEKEVENTREG_82_01",
(82 << 8) | 0x02: "WEEKEVENTREG_82_02",
(82 << 8) | 0x04: "WEEKEVENTREG_82_04",
- (82 << 8) | 0x08: "WEEKEVENTREG_82_08",
+ (82 << 8) | 0x08: "WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME ",
(82 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_FISHERMANS_JUMPING_GAME_HEART_PIECE",
(82 << 8) | 0x20: "WEEKEVENTREG_82_20",
(82 << 8) | 0x40: "WEEKEVENTREG_82_40",
diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv
index eb4a0b01e..0f6d84586 100644
--- a/tools/sizes/code_functions.csv
+++ b/tools/sizes/code_functions.csv
@@ -1699,8 +1699,8 @@ asm/non_matchings/code/z_player_lib/func_80122D44.s,func_80122D44,0x80122D44,0x6
asm/non_matchings/code/z_player_lib/Player_MaskIdToItemId.s,Player_MaskIdToItemId,0x80122ED8,0x5
asm/non_matchings/code/z_player_lib/Player_GetCurMaskItemId.s,Player_GetCurMaskItemId,0x80122EEC,0xF
asm/non_matchings/code/z_player_lib/func_80122F28.s,func_80122F28,0x80122F28,0x1D
-asm/non_matchings/code/z_player_lib/func_80122F9C.s,func_80122F9C,0x80122F9C,0xC
-asm/non_matchings/code/z_player_lib/func_80122FCC.s,func_80122FCC,0x80122FCC,0x10
+asm/non_matchings/code/z_player_lib/Player_IsBackJumping.s,Player_IsBackJumping,0x80122F9C,0xC
+asm/non_matchings/code/z_player_lib/Player_IsSideJumping.s,Player_IsSideJumping,0x80122FCC,0x10
asm/non_matchings/code/z_player_lib/func_8012300C.s,func_8012300C,0x8012300C,0x4
asm/non_matchings/code/z_player_lib/func_8012301C.s,func_8012301C,0x8012301C,0x49
asm/non_matchings/code/z_player_lib/func_80123140.s,func_80123140,0x80123140,0x86
diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py
index 2ff55f146..5e8e7cfc6 100755
--- a/tools/weekeventregconvert.py
+++ b/tools/weekeventregconvert.py
@@ -663,7 +663,7 @@ weekEventReg = {
(82 << 8) | 0x01: "WEEKEVENTREG_82_01",
(82 << 8) | 0x02: "WEEKEVENTREG_82_02",
(82 << 8) | 0x04: "WEEKEVENTREG_82_04",
- (82 << 8) | 0x08: "WEEKEVENTREG_82_08",
+ (82 << 8) | 0x08: "WEEKEVENTREG_PLAYING_SWORDSMAN_MINIGAME ",
(82 << 8) | 0x10: "WEEKEVENTREG_RECEIVED_FISHERMANS_JUMPING_GAME_HEART_PIECE",
(82 << 8) | 0x20: "WEEKEVENTREG_82_20",
(82 << 8) | 0x40: "WEEKEVENTREG_82_40",