Merge branch 'main' into en-kendo-js

This commit is contained in:
Jordan Longstaff 2025-12-15 07:45:55 -05:00 committed by GitHub
commit b225188a3e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 463 additions and 411 deletions

View File

@ -3,14 +3,14 @@
<Texture Name="object_maruta_Tex_000000" OutName="tex_000000" Format="rgba16" Width="32" Height="32" Offset="0x0" />
<Texture Name="object_maruta_Tex_000800" OutName="tex_000800" Format="rgba16" Width="32" Height="32" Offset="0x800" />
<Texture Name="object_maruta_Tex_001000" OutName="tex_001000" Format="rgba16" Width="32" Height="32" Offset="0x1000" />
<DList Name="object_maruta_DL_002220" Offset="0x2220" /> <!-- Original name is "parts_1_model" -->
<DList Name="object_maruta_DL_0023D0" Offset="0x23D0" /> <!-- Original name is "parts_2_model" -->
<DList Name="object_maruta_DL_002568" Offset="0x2568" /> <!-- Original name is "parts_3_model" -->
<DList Name="object_maruta_DL_002660" Offset="0x2660" /> <!-- Original name is "parts_4_model" -->
<DList Name="object_maruta_DL_002758" Offset="0x2758" /> <!-- Original name is "parts_5_model" -->
<DList Name="object_maruta_DL_002850" Offset="0x2850" /> <!-- Original name is "parts_6_model" -->
<DList Name="object_maruta_DL_002948" Offset="0x2948" /> <!-- Original name is "parts_7_model" -->
<DList Name="object_maruta_DL_002AE0" Offset="0x2AE0" /> <!-- Original name is "parts_8_model" -->
<DList Name="object_maruta_DL_002EC0" Offset="0x2EC0" /> <!-- Original name is "kiretenaimaruta_model" -->
<DList Name="gPracticeLogBottomLeftBigChunkDL" Offset="0x2220" /> <!-- Original name is "parts_1_model" -->
<DList Name="gPracticeLogBottomRightBigChunkDL" Offset="0x23D0" /> <!-- Original name is "parts_2_model" -->
<DList Name="gPracticeLogBottomLeftCornerChunkDL" Offset="0x2568" /> <!-- Original name is "parts_3_model" -->
<DList Name="gPracticeLogBottomRightCornerChunkDL" Offset="0x2660" /> <!-- Original name is "parts_4_model" -->
<DList Name="gPracticeLogTopLeftCornerChunkDL" Offset="0x2758" /> <!-- Original name is "parts_5_model" -->
<DList Name="gPracticeLogTopRightCornerChunkDL" Offset="0x2850" /> <!-- Original name is "parts_6_model" -->
<DList Name="gPracticeLogTopLeftBigChunkDL" Offset="0x2948" /> <!-- Original name is "parts_7_model" -->
<DList Name="gPracticeLogTopRightBigChunkDL" Offset="0x2AE0" /> <!-- Original name is "parts_8_model" -->
<DList Name="gPracticeLogWholeDL" Offset="0x2EC0" /> <!-- Original name is "kiretenaimaruta_model" -->
</File>
</Root>

View File

@ -23,7 +23,7 @@
#define MESSAGE_DRAW_TEXT(play, gfxP, drawPos) Message_DrawTextDefault(play, gfxP)
#endif
u8 D_801C6A70 = 0;
u8 sMessageStartFrameCount = 0;
s16 sOcarinaButtonIndexBufPos = 0;
s16 sOcarinaButtonIndexBufLen = 0;
s16 sLastPlayedSong = 0xFF;
@ -69,7 +69,7 @@ s16 sOcarinaButtonStepG = 0;
s16 sOcarinaButtonStepB = 0;
s16 sOcarinaButtonFlashTimer = 12;
s16 sOcarinaButtonFlashColorIndex = 1;
s16 D_801C6A94 = 0;
s16 sOcarinaButtonDropYOffset = 0;
#if MM_VERSION >= N64_US
#define MSGCTX_UNK120D4 msgCtx->unk120D4
@ -360,7 +360,7 @@ void Message_DrawTextboxIcon(PlayState* play, Gfx** gfxP, s16 x, s16 y) {
}
}
void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
void Message_HighlightInputDigitAtCursor(PlayState* play, Gfx** gfxP, s16 x, s16 y) {
static Color_RGB16 D_801CFD10[] = {
{ 0, 80, 200 },
{ 50, 130, 255 },
@ -449,8 +449,8 @@ void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetPrimColor(gfx++, 0, 0, D_801CFD28, D_801CFD2C, D_801CFD30, 120);
gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 17, arg3 + 11);
gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 14, arg3 + 13);
gDPFillRectangle(gfx++, x + 3, y, x + 17, y + 11);
gDPFillRectangle(gfx++, x + 6, y - 2, x + 14, y + 13);
gDPPipeSync(gfx++);
msgCtx->stateTimer++;
@ -458,7 +458,7 @@ void func_80147F18(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
}
}
void func_80148558(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
void Message_HighlightAllInputDigits(PlayState* play, Gfx** gfxP, s16 x, s16 y) {
static Color_RGB16 D_801CFD48[] = {
{ 0, 80, 200 },
{ 50, 130, 255 },
@ -547,8 +547,8 @@ void func_80148558(PlayState* play, Gfx** gfxP, s16 arg2, s16 arg3) {
gDPSetRenderMode(gfx++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
gDPSetCombineMode(gfx++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
gDPSetPrimColor(gfx++, 0, 0, D_801CFD60, D_801CFD64, D_801CFD68, 120);
gDPFillRectangle(gfx++, arg2 + 3, arg3, arg2 + 29, arg3 + 11);
gDPFillRectangle(gfx++, arg2 + 6, arg3 - 2, arg2 + 26, arg3 + 13);
gDPFillRectangle(gfx++, x + 3, y, x + 29, y + 11);
gDPFillRectangle(gfx++, x + 6, y - 2, x + 26, y + 13);
gDPPipeSync(gfx++);
msgCtx->stateTimer++;
@ -597,7 +597,7 @@ void Message_DrawChoiceIcon(PlayState* play, Gfx** gfxP, u8 numChoices) {
Message_DrawTextboxIcon(play, gfxP, msgCtx->textPosX, msgCtx->textPosY);
}
void func_80148D64(PlayState* play) {
void Message_ControlBankInput(PlayState* play) {
static s16 sAnalogStickHeld = false;
MessageContext* msgCtx = &play->msgCtx;
@ -642,7 +642,7 @@ void func_80148D64(PlayState* play) {
msgCtx->rupeesSelected += msgCtx->decodedBuffer.schar[MSGCTX_CODE_BUFFER_OFFSET + 2] - '0';
}
void func_80149048(PlayState* play) {
void Message_ControlDoggyRaceBetInput(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
if (msgCtx->stickAdjY <= -30) {
@ -666,7 +666,7 @@ void func_80149048(PlayState* play) {
msgCtx->rupeesSelected = (msgCtx->decodedBuffer.schar[MSGCTX_CODE_BUFFER_OFFSET] - '0') * 10;
}
void func_801491DC(PlayState* play) {
void Message_ControlBomberCodeInput(PlayState* play) {
static s16 sAnalogStickHeld = false;
MessageContext* msgCtx = &play->msgCtx;
@ -711,7 +711,7 @@ void func_801491DC(PlayState* play) {
}
}
void func_80149454(PlayState* play) {
void Message_ControlLotteryCodeInput(PlayState* play) {
static s16 sAnalogStickHeld = false;
MessageContext* msgCtx = &play->msgCtx;
@ -3218,7 +3218,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
}
msgCtx->messageHasSetSfx = false;
D_801C6A70 = 0;
sMessageStartFrameCount = 0;
msgCtx->textboxSkipped = false;
msgCtx->textIsCredits = false;
var_fv0 = 1.0f;
@ -3331,7 +3331,7 @@ void Message_PauseMenu_ShowDescription(PlayState* play, u16 textId, u8 textBoxPo
gSaveContext.prevHudVisibility = gSaveContext.hudVisibility;
}
msgCtx->messageHasSetSfx = false;
D_801C6A70 = 0;
sMessageStartFrameCount = 0;
msgCtx->textboxSkipped = false;
msgCtx->textIsCredits = false;
@ -4595,7 +4595,7 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
case MSGMODE_OCARINA_FAIL_NO_TEXT:
msgCtx->stateTimer--;
if (msgCtx->stateTimer == 0) {
D_801C6A94 = 1;
sOcarinaButtonDropYOffset = 1;
if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_FAIL) {
Message_ContinueTextbox(play, 0x1B89);
Message_Decode(play);
@ -4609,10 +4609,10 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
case MSGMODE_OCARINA_NOTES_DROP:
case MSGMODE_SONG_PROMPT_NOTES_DROP:
for (i = 0; i < 5; i++) {
msgCtx->ocarinaButtonsPosY[i] += D_801C6A94;
msgCtx->ocarinaButtonsPosY[i] += sOcarinaButtonDropYOffset;
}
D_801C6A94 += D_801C6A94;
if (D_801C6A94 >= 0x226) {
sOcarinaButtonDropYOffset += sOcarinaButtonDropYOffset;
if (sOcarinaButtonDropYOffset >= 550) {
Message_ResetOcarinaButtonAlphas();
if (msgCtx->msgMode == MSGMODE_SONG_PROMPT_NOTES_DROP) {
msgCtx->msgMode = MSGMODE_OCARINA_AWAIT_INPUT;
@ -5019,15 +5019,15 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
ocarinaError = func_8019B5AC();
if (ocarinaError == OCARINA_ERROR_2) {
Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
D_801C6A94 = 1;
sOcarinaButtonDropYOffset = 1;
msgCtx->msgMode = MSGMODE_3B;
} else if (ocarinaError == OCARINA_ERROR_3) {
Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
D_801C6A94 = 1;
sOcarinaButtonDropYOffset = 1;
msgCtx->msgMode = MSGMODE_3E;
} else {
Audio_PlaySfx(NA_SE_SY_OCARINA_ERROR);
D_801C6A94 = 1;
sOcarinaButtonDropYOffset = 1;
msgCtx->msgMode = MSGMODE_38;
}
}
@ -5044,11 +5044,11 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
case MSGMODE_3E:
// notes drop
for (i = 0; i < 5; i++) {
msgCtx->ocarinaButtonsPosY[i] += D_801C6A94;
msgCtx->ocarinaButtonsPosY[i] += sOcarinaButtonDropYOffset;
}
D_801C6A94 += D_801C6A94;
if (D_801C6A94 >= 0x226) {
sOcarinaButtonDropYOffset += sOcarinaButtonDropYOffset;
if (sOcarinaButtonDropYOffset >= 550) {
Message_ResetOcarinaButtonAlphas();
msgCtx->textBoxType = TEXTBOX_TYPE_BLACK;
msgCtx->textboxColorRed = msgCtx->textboxColorGreen = msgCtx->textboxColorBlue = 0;
@ -5071,49 +5071,53 @@ void Message_DrawMain(PlayState* play, Gfx** gfxP) {
case TEXTBOX_ENDTYPE_INPUT_BANK:
lineNum = MSGCTX_INPUT_LINE_NUMBER;
inputLineY = msgCtx->textPosYTarget + (msgCtx->lineHeight * lineNum);
func_80147F18(play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
func_80148D64(play);
Message_HighlightInputDigitAtCursor(
play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
Message_ControlBankInput(play);
break;
case TEXTBOX_ENDTYPE_INPUT_DOGGY_RACETRACK_BET:
lineNum = MSGCTX_INPUT_LINE_NUMBER;
inputLineY = msgCtx->textPosYTarget + (msgCtx->lineHeight * lineNum);
func_80148558(play, &gfx,
msgCtx->lineIndent[lineNum] + (s32)(16.0f * msgCtx->textCharScale * 5.0f) - 1,
inputLineY);
func_80149048(play);
Message_HighlightAllInputDigits(
play, &gfx, msgCtx->lineIndent[lineNum] + (s32)(16.0f * msgCtx->textCharScale * 5.0f) - 1,
inputLineY);
Message_ControlDoggyRaceBetInput(play);
break;
case TEXTBOX_ENDTYPE_INPUT_BOMBER_CODE:
lineNum = MSGCTX_INPUT_LINE_NUMBER;
inputLineY = msgCtx->textPosYTarget + (msgCtx->lineHeight * lineNum);
func_80147F18(play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
func_801491DC(play);
Message_HighlightInputDigitAtCursor(
play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
Message_ControlBomberCodeInput(play);
break;
case TEXTBOX_ENDTYPE_INPUT_LOTTERY_CODE:
lineNum = MSGCTX_INPUT_LINE_NUMBER;
inputLineY = msgCtx->textPosYTarget + (msgCtx->lineHeight * lineNum);
func_80147F18(play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
func_80149454(play);
Message_HighlightInputDigitAtCursor(
play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 5)) - 1,
inputLineY);
Message_ControlLotteryCodeInput(play);
break;
case TEXTBOX_ENDTYPE_64:
lineNum = MSGCTX_INPUT_LINE_NUMBER;
inputLineY = msgCtx->textPosYTarget + (msgCtx->lineHeight * lineNum);
func_80147F18(play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 4)) - 6,
inputLineY);
Message_HighlightInputDigitAtCursor(
play, &gfx,
msgCtx->lineIndent[lineNum] +
(s32)(16.0f * msgCtx->textCharScale * (MSGCTX_INPUT_DIGIT_INDEX + 4)) - 6,
inputLineY);
func_801496C8(play);
break;
@ -5297,14 +5301,14 @@ s16 sTextboxMidYPositions[] = {
s16 D_801D0448[] = { 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25 };
s16 D_801D045C[] = {
0x1B91,
0x1B90,
0x1B8F,
s16 sDoubleTimeSkipToNightTextIds[] = {
0x1B91, // Night of 1st day
0x1B90, // Night of 2nd day
0x1B8F, // Night of final day
};
s16 D_801D0464[] = {
0x1B92,
0x1B8E,
s16 sDoubleTimeSkipToDayTextIds[] = {
0x1B92, // Dawn of 2nd day
0x1B8E, // Dawn of final day
};
void Message_Update(PlayState* play) {
@ -5407,10 +5411,10 @@ void Message_Update(PlayState* play) {
switch (msgCtx->msgMode) {
case MSGMODE_TEXT_START:
D_801C6A70++;
sMessageStartFrameCount++;
temp = false;
if ((D_801C6A70 >= 4) || ((msgCtx->talkActor == NULL) && (D_801C6A70 >= 2))) {
if ((sMessageStartFrameCount >= 4) || ((msgCtx->talkActor == NULL) && (sMessageStartFrameCount >= 2))) {
temp = true;
}
if (temp) {
@ -5904,9 +5908,9 @@ void Message_Update(PlayState* play) {
if (interfaceCtx->restrictions.songOfDoubleTime == 0) {
if ((CURRENT_DAY != 3) || (gSaveContext.save.isNight == 0)) {
if (gSaveContext.save.isNight) {
Message_StartTextbox(play, D_801D0464[CURRENT_DAY - 1], NULL);
Message_StartTextbox(play, sDoubleTimeSkipToDayTextIds[CURRENT_DAY - 1], NULL);
} else {
Message_StartTextbox(play, D_801D045C[CURRENT_DAY - 1], NULL);
Message_StartTextbox(play, sDoubleTimeSkipToNightTextIds[CURRENT_DAY - 1], NULL);
}
play->msgCtx.ocarinaMode = OCARINA_MODE_PROCESS_DOUBLE_TIME;
} else {

View File

@ -70,19 +70,27 @@ void DoorWarp1_SetupAction(DoorWarp1* this, DoorWarp1ActionFunc actionFunc) {
this->actionFunc = actionFunc;
}
s32 func_808B849C(DoorWarp1* this, PlayState* play) {
s32 ret = 0;
/**
* Returns a number representing which remains was obtained inside this warp.
* * 0: None (if it's not a boss or the remains were already obtained)
* * 1: Odolwa
* * 2: Goht
* * 3: Gyorg
* * 4: Twinmold
*/
s32 DoorWarp1_GetRemains(DoorWarp1* this, PlayState* play) {
s32 remains = 0;
if ((play->sceneId == SCENE_MITURIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_ODOLWA)) {
ret = 1;
remains = 1 + GI_REMAINS_ODOLWA - GI_REMAINS_ODOLWA;
} else if ((play->sceneId == SCENE_HAKUGIN_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_GOHT)) {
ret = 2;
remains = 1 + GI_REMAINS_GOHT - GI_REMAINS_ODOLWA;
} else if ((play->sceneId == SCENE_SEA_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_GYORG)) {
ret = 3;
remains = 1 + GI_REMAINS_GYORG - GI_REMAINS_ODOLWA;
} else if ((play->sceneId == SCENE_INISIE_BS) && !CHECK_QUEST_ITEM(QUEST_REMAINS_TWINMOLD)) {
ret = 4;
remains = 1 + GI_REMAINS_TWINMOLD - GI_REMAINS_ODOLWA;
}
return ret;
return remains;
}
void func_808B8568(DoorWarp1* this, PlayState* play) {
@ -502,10 +510,11 @@ void func_808B98A8(DoorWarp1* this, PlayState* play) {
void func_808B9B30(DoorWarp1* this, PlayState* play) {
if (fabsf(this->dyna.actor.xzDistToPlayer) >= 60.0f) {
if (func_808B849C(this, play)) {
this->unk_1A0 = (DmHina*)Actor_SpawnAsChild(
&play->actorCtx, &this->dyna.actor, play, ACTOR_DM_HINA, this->dyna.actor.world.pos.x,
this->dyna.actor.world.pos.y, this->dyna.actor.world.pos.z, 0, 0, 0, func_808B849C(this, play) - 1);
if (DoorWarp1_GetRemains(this, play) != 0) {
this->unk_1A0 = (DmHina*)Actor_SpawnAsChild(&play->actorCtx, &this->dyna.actor, play, ACTOR_DM_HINA,
this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y,
this->dyna.actor.world.pos.z, 0, 0, 0,
DoorWarp1_GetRemains(this, play) - 1);
}
DoorWarp1_SetupAction(this, func_808B9BE8);
}
@ -529,7 +538,7 @@ void func_808B9BE8(DoorWarp1* this, PlayState* play) {
}
this->dyna.actor.parent = NULL;
if (func_808B849C(this, play)) {
if (DoorWarp1_GetRemains(this, play) != 0) {
this->unk_202 = 1;
DoorWarp1_SetupAction(this, func_808B9CE8);
} else {
@ -544,7 +553,8 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) {
}
if (!Actor_HasParent(&this->dyna.actor, play)) {
Actor_OfferGetItem(&this->dyna.actor, play, (GI_REMAINS_ODOLWA - 1) + func_808B849C(this, play), 30.0f, 80.0f);
Actor_OfferGetItem(&this->dyna.actor, play, DoorWarp1_GetRemains(this, play) + (GI_REMAINS_ODOLWA - 1), 30.0f,
80.0f);
return;
}
@ -575,7 +585,7 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) {
gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) |
((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) + 1) & 0xFF);
Item_Give(play, func_808B849C(this, play) + (ITEM_REMAINS_ODOLWA - 1));
Item_Give(play, DoorWarp1_GetRemains(this, play) + (ITEM_REMAINS_ODOLWA - 1));
DoorWarp1_SetupAction(this, func_808B9E94);
}

View File

@ -15,24 +15,24 @@ void EnMaruta_Destroy(Actor* thisx, PlayState* play);
void EnMaruta_Update(Actor* thisx, PlayState* play);
void EnMaruta_Draw(Actor* thisx, PlayState* play);
void func_80B372B8(EnMaruta* this);
void func_80B372CC(EnMaruta* this, PlayState* play);
void func_80B37364(EnMaruta* this);
void func_80B3738C(EnMaruta* this, PlayState* play);
void EnMaruta_SetInPositionWhole(EnMaruta* this);
void EnMaruta_SittingWhole(EnMaruta* this, PlayState* play);
void EnMaruta_SetupRiseThroughFloor(EnMaruta* this);
void EnMaruta_RiseThroughFloor(EnMaruta* this, PlayState* play);
void EnMaruta_StartRetracting(EnMaruta* this);
void func_80B37428(EnMaruta* this, PlayState* play);
void func_80B374FC(EnMaruta* this, PlayState* play);
void func_80B37590(EnMaruta* this, PlayState* play);
void func_80B37950(EnMaruta* this, PlayState* play);
void func_80B379C0(EnMaruta* this, PlayState* play);
void func_80B37A14(EnMaruta* this);
void func_80B37A64(EnMaruta* this, PlayState* play);
void func_80B37AA0(EnMaruta* this, PlayState* play);
void func_80B37C04(s16* arg0);
void func_80B37EC0(EnMaruta* this, PlayState* play);
void func_80B38060(EnMaruta* this, Vec3f* arg1);
void func_80B3828C(Vec3f* arg0, Vec3f* arg1, s16 arg2, s16 arg3, s32 arg4);
void func_80B382E4(PlayState* play, Vec3f arg1);
void EnMaruta_RetractWhole(EnMaruta* this, PlayState* play);
void EnMaruta_RetractAfterCut(EnMaruta* this, PlayState* play);
void EnMaruta_SetupRecoilAfterCut(EnMaruta* this, PlayState* play);
void EnMaruta_Recoil(EnMaruta* this, PlayState* play);
void EnMaruta_FindRestingOrientation(EnMaruta* this, PlayState* play);
void EnMaruta_SetupWaitToFlatten(EnMaruta* this);
void EnMaruta_WaitToFlatten(EnMaruta* this, PlayState* play);
void EnMaruta_Flatten(EnMaruta* this, PlayState* play);
void EnMaruta_LerpSpinAngleToFlat(s16* curSpinAngle);
void EnMaruta_Bounce(EnMaruta* this, PlayState* play);
void EnMaruta_AdjustBounceAngle(EnMaruta* this, Vec3f* lowestPoint);
void EnMaruta_RotateVector(Vec3f* src, Vec3f* dest, s16 rotX, s16 rotY, s32 rotZ);
void EnMaruta_SpawnDustClouds(PlayState* play, Vec3f srcPoint);
ActorProfile En_Maruta_Profile = {
/**/ ACTOR_EN_MARUTA,
@ -46,102 +46,130 @@ ActorProfile En_Maruta_Profile = {
/**/ EnMaruta_Draw,
};
Gfx* D_80B386A0[] = {
object_maruta_DL_002220, object_maruta_DL_0023D0, object_maruta_DL_002568, object_maruta_DL_002660,
object_maruta_DL_002758, object_maruta_DL_002850, object_maruta_DL_002948, object_maruta_DL_002AE0,
/**
* These chunks of log are arranged like so (indices in array included):
*
* -------
* |6 | 7|
* | | |
* |\ | /|
* |4\|/5|
* -------
* |2/|\3|
* |/ | \|
* | | |
* |0 | 1|
* -------
*/
Gfx* sDisplayLists[] = {
gPracticeLogBottomLeftBigChunkDL, gPracticeLogBottomRightBigChunkDL, gPracticeLogBottomLeftCornerChunkDL,
gPracticeLogBottomRightCornerChunkDL, gPracticeLogTopLeftCornerChunkDL, gPracticeLogTopRightCornerChunkDL,
gPracticeLogTopLeftBigChunkDL, gPracticeLogTopRightBigChunkDL,
};
u8 D_80B386C0[] = {
u8 sFragmentsByShape[] = {
0xFF, 0x2B, 0xD4, 0x17, 0xE8, 0x55, 0xAA, 0x0F, 0xF0,
};
s32 D_80B386CC[] = {
5, // PLAYER_MWA_FORWARD_SLASH_1H
5, // PLAYER_MWA_FORWARD_SLASH_2H
3, // PLAYER_MWA_FORWARD_COMBO_1H
3, // PLAYER_MWA_FORWARD_COMBO_2H
7, // PLAYER_MWA_RIGHT_SLASH_1H
7, // PLAYER_MWA_RIGHT_SLASH_2H
7, // PLAYER_MWA_RIGHT_COMBO_1H
7, // PLAYER_MWA_RIGHT_COMBO_2H
3, // PLAYER_MWA_LEFT_SLASH_1H
3, // PLAYER_MWA_LEFT_SLASH_2H
3, // PLAYER_MWA_LEFT_COMBO_1H
3, // PLAYER_MWA_LEFT_COMBO_2H
7, // PLAYER_MWA_STAB_1H
7, // PLAYER_MWA_STAB_2H
3, // PLAYER_MWA_STAB_COMBO_1H
3, // PLAYER_MWA_STAB_COMBO_2H
0, // PLAYER_MWA_FLIPSLASH_START
0, // PLAYER_MWA_JUMPSLASH_START
0, // PLAYER_MWA_ZORA_JUMPKICK_START
0, // PLAYER_MWA_FLIPSLASH_FINISH
5, // PLAYER_MWA_JUMPSLASH_FINISH
0, // PLAYER_MWA_ZORA_JUMPKICK_FINISH
0, // PLAYER_MWA_BACKSLASH_RIGHT
0, // PLAYER_MWA_BACKSLASH_LEFT
0, // PLAYER_MWA_GORON_PUNCH_LEFT
0, // PLAYER_MWA_GORON_PUNCH_RIGHT
0, // PLAYER_MWA_GORON_PUNCH_BUTT
0, // PLAYER_MWA_ZORA_PUNCH_LEFT
0, // PLAYER_MWA_ZORA_PUNCH_COMBO
0, // PLAYER_MWA_ZORA_PUNCH_KICK
7, // PLAYER_MWA_SPIN_ATTACK_1H
7, // PLAYER_MWA_SPIN_ATTACK_2H
7, // PLAYER_MWA_BIG_SPIN_1H
7 // PLAYER_MWA_BIG_SPIN_2H
typedef enum EnMarutaShape {
/* 0 */ ENMARUTA_SHAPE_WHOLE,
/* 1 */ ENMARUTA_SHAPE_DIAGONAL_LEFT_CUT_BOTTOM_HALF,
/* 2 */ ENMARUTA_SHAPE_DIAGONAL_LEFT_CUT_TOP_HALF,
/* 3 */ ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF,
/* 4 */ ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_TOP_HALF,
/* 5 */ ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF,
/* 6 */ ENMARUTA_SHAPE_VERTICAL_CUT_RIGHT_HALF,
/* 7 */ ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF,
/* 8 */ ENMARUTA_SHAPE_HORIZONTAL_CUT_TOP_HALF,
} EnMarutaShape;
s32 sShapesAfterMeleeWeaponAnimations[] = {
ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF, // PLAYER_MWA_FORWARD_SLASH_1H
ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF, // PLAYER_MWA_FORWARD_SLASH_2H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_FORWARD_COMBO_1H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_FORWARD_COMBO_2H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_RIGHT_SLASH_1H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_RIGHT_SLASH_2H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_RIGHT_COMBO_1H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_RIGHT_COMBO_2H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_LEFT_SLASH_1H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_LEFT_SLASH_2H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_LEFT_COMBO_1H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_LEFT_COMBO_2H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_STAB_1H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_STAB_2H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_STAB_COMBO_1H
ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_BOTTOM_HALF, // PLAYER_MWA_STAB_COMBO_2H
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_FLIPSLASH_START
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_JUMPSLASH_START
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_ZORA_JUMPKICK_START
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_FLIPSLASH_FINISH
ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF, // PLAYER_MWA_JUMPSLASH_FINISH
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_ZORA_JUMPKICK_FINISH
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_BACKSLASH_RIGHT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_BACKSLASH_LEFT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_GORON_PUNCH_LEFT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_GORON_PUNCH_RIGHT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_GORON_PUNCH_BUTT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_ZORA_PUNCH_LEFT
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_ZORA_PUNCH_COMBO
ENMARUTA_SHAPE_WHOLE, // PLAYER_MWA_ZORA_PUNCH_KICK
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_SPIN_ATTACK_1H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_SPIN_ATTACK_2H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF, // PLAYER_MWA_BIG_SPIN_1H
ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF // PLAYER_MWA_BIG_SPIN_2H
};
Vec3f D_80B38754 = { -2.0f, 3.0f, 0.0f };
Vec3f D_80B38760 = { -2.0f, 3.0f, 0.0f };
Vec3f D_80B3876C = { 2.0f, 3.0f, 0.0f };
Vec3f D_80B38778 = { -2.0f, 10.0f, 0.0f };
Vec3f D_80B38784 = { -2.5f, 5.0f, 0.0f };
Vec3f D_80B38790 = { -3.0f, 10.0f, 0.0f };
Vec3f D_80B3879C = { 2.5f, 5.0f, 0.0f };
Vec3f D_80B387A8 = { 3.0f, 10.0f, 0.0f };
Vec3f D_80B387B4 = { -1.0f, 7.0f, -1.0f };
Vec3f D_80B387C0 = { 1.0f, 7.0f, -1.0f };
Vec3f D_80B387CC = { 0.0f, 8.0f, -1.5f };
Vec3f D_80B387D8 = { 0.0f, 8.0f, -1.5f };
Vec3f sDiagonalLeftCutTopHalfVelocity = { -2.0f, 3.0f, 0.0f };
UNUSED Vec3f sDiagonalLeftCutBottomHalfVelocity = { -2.0f, 3.0f, 0.0f };
Vec3f sDiagonalRightCutTopHalfVelocitySlideOff = { 2.0f, 3.0f, 0.0f };
Vec3f sDiagonalRightCutTopHalfVelocityUpAndOver = { -2.0f, 10.0f, 0.0f };
Vec3f sVerticalCutLeftHalfVelocityForwardSlash = { -2.5f, 5.0f, 0.0f };
Vec3f sVerticalCutLeftHalfVelocityJumpSlash = { -3.0f, 10.0f, 0.0f };
Vec3f sVerticalCutRightHalfVelocityForwardSlash = { 2.5f, 5.0f, 0.0f };
Vec3f sVerticalCutRightHalfVelocityJumpSlash = { 3.0f, 10.0f, 0.0f };
Vec3f sHorizontalCutTopHalfVelocityLeft = { -1.0f, 7.0f, -1.0f };
Vec3f sHorizontalCutTopHalfVelocityRight = { 1.0f, 7.0f, -1.0f };
Vec3f sHorizontalCutBottomHalfVelocityLeft = { 0.0f, 8.0f, -1.5f };
UNUSED Vec3f sHorizontalCutBottomHalfVelocityRight = { 0.0f, 8.0f, -1.5f };
Vec3f D_80B387E4[] = {
Vec3f sTranslationVectorsToRecoilAxis[] = {
{ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { -10.0f, 460.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f }, { 10.0f, 460.0f, 0.0f }, { -40.0f, 315.0f, 0.0f },
{ 40.0f, 315.0f, 0.0f }, { 0.0f, 140.0f, 0.0f }, { 0.0f, 445.0f, 0.0f },
};
Vec3f D_80B38850[] = {
Vec3f sRecoilSpinAxesForShapes[] = {
{ 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, -1.0f }, { 0.0f, 0.0f, -1.0f }, { 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f },
{ 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, -1.0f }, { -1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f },
};
Vec3f D_80B388BC[] = {
Vec3f sDiagonalLeftCutTopHalfHitboxPoints[] = {
{ 90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, 78.0f }, { 90.0f, 630.0f, 78.0f },
{ 90.0f, 350.0f, -78.0f }, { -90.0f, 170.0f, -78.0f }, { -90.0f, 170.0f, 78.0f }, { 90.0f, 350.0f, 78.0f },
};
Vec3f D_80B3891C[] = {
Vec3f sDiagonalRightCutTopHalfHitboxPoints[] = {
{ 90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, 78.0f }, { 90.0f, 630.0f, 78.0f },
{ 90.0f, 170.0f, -78.0f }, { -90.0f, 350.0f, -78.0f }, { -90.0f, 350.0f, 78.0f }, { 90.0f, 170.0f, 78.0f },
};
Vec3f D_80B3897C[] = {
Vec3f sVerticalCutLeftHalfHitboxPoints[] = {
{ 0.0f, 630.0f, -104.0f }, { -90.0f, 630.0f, -52.0f }, { -90.0f, 630.0f, 52.0f }, { 0.0f, 630.0f, 104.0f },
{ 0.0f, 0.0f, -104.0f }, { -90.0f, 0.0f, -52.0f }, { -90.0f, 0.0f, 52.0f }, { 0.0f, 0.0f, 104.0f },
};
Vec3f D_80B389DC[] = {
Vec3f sVerticalCutRightHalfHitboxPoints[] = {
{ 0.0f, 630.0f, -104.0f }, { 90.0f, 630.0f, -52.0f }, { 90.0f, 630.0f, 52.0f }, { 0.0f, 630.0f, 104.0f },
{ 0.0f, 0.0f, -104.0f }, { 90.0f, 0.0f, -52.0f }, { 90.0f, 0.0f, 52.0f }, { 0.0f, 0.0f, 104.0f },
};
Vec3f D_80B38A3C[] = {
Vec3f sHorizontalCutTopHalfHitboxPoints[] = {
{ 90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, -78.0f }, { -90.0f, 630.0f, 78.0f }, { 90.0f, 630.0f, 78.0f },
{ 90.0f, 260.0f, -78.0f }, { -90.0f, 260.0f, -78.0f }, { -90.0f, 260.0f, 78.0f }, { 90.0f, 260.0f, 78.0f },
};
Vec3f D_80B38A9C[] = {
Vec3f sHorizontalCutBottomHalfHitboxPoints[] = {
{ 90.0f, 260.0f, -78.0f }, { -90.0f, 260.0f, -78.0f }, { -90.0f, 260.0f, 78.0f }, { 90.0f, 260.0f, 78.0f },
{ 90.0f, 20.0f, -78.0f }, { -90.0f, 20.0f, -78.0f }, { -90.0f, 20.0f, 78.0f }, { 90.0f, 20.0f, 78.0f },
};
@ -203,7 +231,7 @@ static DamageTable sDamageTable = {
static CollisionCheckInfoInit2 sColChkInfoInit = { 8, 0, 0, 0, MASS_HEAVY };
Vec3f D_80B38B54 = { 0.0f, 0.0f, 0.0f };
Vec3f sZeroVec = { 0.0f, 0.0f, 0.0f };
void EnMaruta_Init(Actor* thisx, PlayState* play) {
s32 pad;
@ -221,58 +249,59 @@ void EnMaruta_Init(Actor* thisx, PlayState* play) {
this->actor.world.pos.y -= 4.0f;
this->actor.home.pos.y -= 4.0f;
this->unk_210 = ENMARUTA_GET_FF00(&this->actor);
this->unk_218 = 0;
this->unk_21A = 0;
this->unk_1A0 = NULL;
this->unk_21C = 0;
this->shape = ENMARUTA_GET_SHAPE(&this->actor);
this->recoilSpinAngle = 0;
this->recoilSpinRate = 0;
this->relativeHitboxPoints = NULL;
this->endingBounces = 0;
this->unk_194.x = 0.0f;
this->unk_194.y = 0.0f;
this->unk_194.z = 1.0f;
this->recoilSpinAxis.x = 0.0f;
this->recoilSpinAxis.y = 0.0f;
this->recoilSpinAxis.z = 1.0f;
for (i = 0; i < ARRAY_COUNT(this->unk_1A4); i++) {
this->unk_1A4[i] = D_80B38B54;
for (i = 0; i < ARRAY_COUNT(this->hitboxPoints); i++) {
this->hitboxPoints[i] = sZeroVec;
}
this->unk_214 = -1;
this->lowestPointIndex = -1;
this->isRetracting = false;
if (this->unk_210 == 0) {
if (this->shape == ENMARUTA_SHAPE_WHOLE) {
Collider_InitCylinder(play, &this->collider);
Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit);
CollisionCheck_SetInfo2(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
}
if (this->unk_210 == 0) {
if (ENMARUTA_GET_FF(&this->actor) == 0xFF) {
func_80B372B8(this);
if (this->shape == ENMARUTA_SHAPE_WHOLE) {
if (ENMARUTA_GET_TYPE(&this->actor) == ENMARUTA_INIT_ON_FLOOR) {
// Happens in theory, never seen in practice
EnMaruta_SetInPositionWhole(this);
} else {
func_80B37364(this);
EnMaruta_SetupRiseThroughFloor(this);
}
} else {
func_80B37590(this, play);
EnMaruta_SetupRecoilAfterCut(this, play);
}
}
void EnMaruta_Destroy(Actor* thisx, PlayState* play) {
EnMaruta* this = (EnMaruta*)thisx;
if (this->unk_210 == 0) {
if (this->shape == ENMARUTA_SHAPE_WHOLE) {
Collider_DestroyCylinder(play, &this->collider);
}
}
void func_80B372B8(EnMaruta* this) {
this->actionFunc = func_80B372CC;
void EnMaruta_SetInPositionWhole(EnMaruta* this) {
this->actionFunc = EnMaruta_SittingWhole;
}
void func_80B372CC(EnMaruta* this, PlayState* play) {
s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y);
void EnMaruta_SittingWhole(EnMaruta* this, PlayState* play) {
s16 yawDiff = BINANG_SUB(this->actor.yawTowardsPlayer, this->actor.shape.rot.y);
if (temp_v1 > 0x1555) {
if (yawDiff > 0x1555) {
this->actor.shape.rot.y += 0x2AAA;
} else if (temp_v1 < -0x1555) {
} else if (yawDiff < -0x1555) {
this->actor.shape.rot.y -= 0x2AAA;
}
@ -287,14 +316,14 @@ void func_80B372CC(EnMaruta* this, PlayState* play) {
}
}
void func_80B37364(EnMaruta* this) {
void EnMaruta_SetupRiseThroughFloor(EnMaruta* this) {
this->actor.world.pos.y = this->actor.home.pos.y - 630.0f;
this->actionFunc = func_80B3738C;
this->actionFunc = EnMaruta_RiseThroughFloor;
}
void func_80B3738C(EnMaruta* this, PlayState* play) {
void EnMaruta_RiseThroughFloor(EnMaruta* this, PlayState* play) {
if (Math_SmoothStepToF(&this->actor.world.pos.y, this->actor.home.pos.y, 0.4f, 100.0f, 10.0f) == 0.0f) {
func_80B372B8(this);
EnMaruta_SetInPositionWhole(this);
}
}
@ -302,10 +331,10 @@ void EnMaruta_StartRetracting(EnMaruta* this) {
this->collider.base.acFlags |= AC_HIT;
this->actor.velocity.y = 0.0f;
this->actor.gravity = -2.0f;
this->actionFunc = func_80B37428;
this->actionFunc = EnMaruta_RetractWhole;
}
void func_80B37428(EnMaruta* this, PlayState* play) {
void EnMaruta_RetractWhole(EnMaruta* this, PlayState* play) {
if ((this->actor.floorHeight - 630.0f) < this->actor.world.pos.y) {
this->actor.velocity.y += this->actor.gravity;
this->actor.world.pos.y += this->actor.velocity.y;
@ -319,159 +348,162 @@ void func_80B37428(EnMaruta* this, PlayState* play) {
}
}
void func_80B374B8(EnMaruta* this) {
void EnMaruta_BottomHalfSittingOnFloor(EnMaruta* this) {
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
if (this->actionFunc != func_80B37428) {
this->unk_21E = 0;
if (this->actionFunc != EnMaruta_RetractWhole) {
this->timer = 0;
this->actor.gravity = -2.0f;
this->actionFunc = func_80B374FC;
this->actionFunc = EnMaruta_RetractAfterCut;
}
}
void func_80B374FC(EnMaruta* this, PlayState* play) {
if (this->unk_21E == 40) {
void EnMaruta_RetractAfterCut(EnMaruta* this, PlayState* play) {
if (this->timer == 40) {
Actor_Kill(&this->actor);
return;
}
if (((this->actor.floorHeight - 630.0f) < this->actor.world.pos.y) && (this->unk_21E > 30)) {
if (((this->actor.floorHeight - 630.0f) < this->actor.world.pos.y) && (this->timer > 30)) {
this->actor.velocity.y += this->actor.gravity;
this->actor.world.pos.y += this->actor.velocity.y;
}
this->unk_21E++;
this->timer++;
}
void func_80B37590(EnMaruta* this, PlayState* play) {
void EnMaruta_SetupRecoilAfterCut(EnMaruta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f sp48;
s16 sp46;
Vec3f sp38;
Vec3f initialVelocity;
s16 rotY;
Vec3f spinAxis;
this->unk_21E = 0;
this->unk_21C = 0;
this->timer = 0;
this->endingBounces = 0;
this->actor.gravity = -2.0f;
switch (this->unk_210) {
case 2:
sp48 = D_80B38754;
this->unk_1A0 = D_80B388BC;
switch (this->shape) {
case ENMARUTA_SHAPE_DIAGONAL_LEFT_CUT_TOP_HALF:
initialVelocity = sDiagonalLeftCutTopHalfVelocity;
this->relativeHitboxPoints = sDiagonalLeftCutTopHalfHitboxPoints;
break;
case 4:
case ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_TOP_HALF:
if (player->meleeWeaponAnimation == PLAYER_MWA_LEFT_SLASH_1H) {
sp48 = D_80B3876C;
initialVelocity = sDiagonalRightCutTopHalfVelocitySlideOff;
} else {
sp48 = D_80B38778;
initialVelocity = sDiagonalRightCutTopHalfVelocityUpAndOver;
}
this->unk_1A0 = D_80B3891C;
this->relativeHitboxPoints = sDiagonalRightCutTopHalfHitboxPoints;
break;
case 5:
case ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF:
if (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) {
sp48 = D_80B38784;
initialVelocity = sVerticalCutLeftHalfVelocityForwardSlash;
} else {
sp48 = D_80B38790;
initialVelocity = sVerticalCutLeftHalfVelocityJumpSlash;
}
this->unk_1A0 = D_80B3897C;
this->relativeHitboxPoints = sVerticalCutLeftHalfHitboxPoints;
break;
case 6:
case ENMARUTA_SHAPE_VERTICAL_CUT_RIGHT_HALF:
if (player->meleeWeaponAnimation == PLAYER_MWA_FORWARD_SLASH_1H) {
sp48 = D_80B3879C;
initialVelocity = sVerticalCutRightHalfVelocityForwardSlash;
} else {
sp48 = D_80B387A8;
initialVelocity = sVerticalCutRightHalfVelocityJumpSlash;
}
this->unk_1A0 = D_80B389DC;
this->relativeHitboxPoints = sVerticalCutRightHalfHitboxPoints;
break;
case 8:
case ENMARUTA_SHAPE_HORIZONTAL_CUT_TOP_HALF:
if (player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) {
sp48 = D_80B387B4;
initialVelocity = sHorizontalCutTopHalfVelocityLeft;
} else {
sp48 = D_80B387C0;
initialVelocity = sHorizontalCutTopHalfVelocityRight;
}
this->unk_1A0 = D_80B38A3C;
this->relativeHitboxPoints = sHorizontalCutTopHalfHitboxPoints;
break;
case 7:
sp48 = D_80B387CC;
this->unk_1A0 = D_80B38A9C;
case ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF:
initialVelocity = sHorizontalCutBottomHalfVelocityLeft;
this->relativeHitboxPoints = sHorizontalCutBottomHalfHitboxPoints;
break;
default:
sp48 = D_80B38B54;
initialVelocity = sZeroVec;
break;
}
sp46 = this->actor.shape.rot.y;
this->actor.velocity.x = (sp48.x * Math_CosS(sp46) + (Math_SinS(sp46) * sp48.z));
this->actor.velocity.y = sp48.y;
this->actor.velocity.z = (-sp48.x * Math_SinS(sp46) + (Math_CosS(sp46) * sp48.z));
rotY = this->actor.shape.rot.y;
this->actor.velocity.x = (initialVelocity.x * Math_CosS(rotY) + (Math_SinS(rotY) * initialVelocity.z));
this->actor.velocity.y = initialVelocity.y;
this->actor.velocity.z = (-initialVelocity.x * Math_SinS(rotY) + (Math_CosS(rotY) * initialVelocity.z));
sp38 = D_80B38850[this->unk_210];
spinAxis = sRecoilSpinAxesForShapes[this->shape];
func_80B3828C(&sp38, &this->unk_194, Rand_Next() & 0xFFF, Rand_Next() & 0xFFF, 0);
this->unk_21A = Rand_Next() & 0x7FF;
EnMaruta_RotateVector(&spinAxis, &this->recoilSpinAxis, Rand_Next() & 0xFFF, Rand_Next() & 0xFFF, 0);
this->recoilSpinRate = Rand_Next() & 0x7FF;
if (this->unk_210 == 7) {
this->unk_21A |= 0x3F;
if (this->shape == ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF) {
this->recoilSpinRate |= 0x3F;
} else {
this->unk_21A |= 0xFF;
this->recoilSpinRate |= 0xFF;
}
this->actor.flags &= ~ACTOR_FLAG_ATTENTION_ENABLED;
this->actionFunc = func_80B37950;
this->actionFunc = EnMaruta_Recoil;
}
void func_80B37950(EnMaruta* this, PlayState* play) {
this->unk_218 += this->unk_21A;
void EnMaruta_Recoil(EnMaruta* this, PlayState* play) {
this->recoilSpinAngle += this->recoilSpinRate;
this->actor.velocity.y += this->actor.gravity;
func_80B37EC0(this, play);
EnMaruta_Bounce(this, play);
Actor_UpdatePos(&this->actor);
}
void func_80B37998(EnMaruta* this) {
this->unk_21E = 0;
void EnMaruta_StopBouncing(EnMaruta* this) {
this->timer = 0;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->unk_21A = 0;
this->actionFunc = func_80B379C0;
this->recoilSpinRate = 0;
this->actionFunc = EnMaruta_FindRestingOrientation;
}
void func_80B379C0(EnMaruta* this, PlayState* play) {
if (this->unk_21E == 40) {
func_80B37A14(this);
void EnMaruta_FindRestingOrientation(EnMaruta* this, PlayState* play) {
if (this->timer == 40) {
EnMaruta_SetupWaitToFlatten(this);
} else {
this->unk_21E++;
this->timer++;
}
func_80B37C04(&this->unk_218);
EnMaruta_LerpSpinAngleToFlat(&this->recoilSpinAngle);
}
void func_80B37A14(EnMaruta* this) {
s16 temp = this->unk_218 & 0x7FFF;
void EnMaruta_SetupWaitToFlatten(EnMaruta* this) {
s16 isRestingOnSide = this->recoilSpinAngle & 0x7FFF;
if (((this->unk_210 == 5) || (this->unk_210 == 6)) && !temp) {
this->unk_21E = 100;
if (((this->shape == ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF) ||
(this->shape == ENMARUTA_SHAPE_VERTICAL_CUT_RIGHT_HALF)) &&
!isRestingOnSide) {
this->timer = 100;
} else {
this->unk_21E = 0;
this->timer = 0;
}
this->actionFunc = func_80B37A64;
this->actionFunc = EnMaruta_WaitToFlatten;
}
void func_80B37A64(EnMaruta* this, PlayState* play) {
if (this->unk_21E > 100) {
void EnMaruta_WaitToFlatten(EnMaruta* this, PlayState* play) {
if (this->timer > 100) {
this->actor.colChkInfo.health = 0;
} else {
this->unk_21E++;
this->timer++;
}
}
void func_80B37A8C(EnMaruta* this) {
this->actionFunc = func_80B37AA0;
void EnMaruta_ShouldFlatten(EnMaruta* this) {
this->actionFunc = EnMaruta_Flatten;
}
void func_80B37AA0(EnMaruta* this, PlayState* play) {
/** After this log has rested long enough, flatten and eventually destroy it. */
void EnMaruta_Flatten(EnMaruta* this, PlayState* play) {
if (this->actor.scale.y == 0.0f) {
if (this->actor.scale.x == 0.0f) {
Actor_Kill(&this->actor);
@ -484,12 +516,12 @@ void func_80B37AA0(EnMaruta* this, PlayState* play) {
}
}
s32 func_80B37B78(EnMaruta* this, PlayState* play) {
s32 EnMaruta_IsHittable(EnMaruta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 temp_v1 = BINANG_SUB(this->actor.yawTowardsPlayer, 0x8000);
s16 yawDiff = BINANG_SUB(this->actor.yawTowardsPlayer, 0x8000);
temp_v1 = BINANG_SUB(temp_v1, player->actor.shape.rot.y);
if ((ABS_ALT(temp_v1) < 0x1555) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
yawDiff = BINANG_SUB(yawDiff, player->actor.shape.rot.y);
if ((ABS_ALT(yawDiff) < 0x1555) || ((player->meleeWeaponState != PLAYER_MELEE_WEAPON_STATE_0) &&
((player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_SLASH_1H) ||
(player->meleeWeaponAnimation == PLAYER_MWA_RIGHT_COMBO_1H) ||
(player->meleeWeaponAnimation == PLAYER_MWA_SPIN_ATTACK_1H) ||
@ -499,46 +531,49 @@ s32 func_80B37B78(EnMaruta* this, PlayState* play) {
return false;
}
void func_80B37C04(s16* arg0) {
s16 temp_a1 = *arg0 & 0xC000;
s16 temp = *arg0 & 0x3FFF;
void EnMaruta_LerpSpinAngleToFlat(s16* curSpinAngle) {
s16 flatAngle = *curSpinAngle & 0xC000;
s16 mod = *curSpinAngle & 0x3FFF;
if (temp > 0x2000) {
temp_a1 += 0x4000;
if (mod > 0x2000) {
flatAngle += 0x4000;
}
Math_SmoothStepToS(arg0, temp_a1, 1, 0xAAA, 0xB6);
Math_SmoothStepToS(curSpinAngle, flatAngle, 1, 0xAAA, 0xB6);
}
void func_80B37C60(EnMaruta* this) {
if ((this->actionFunc != func_80B37AA0) && (this->actor.colChkInfo.health == 0)) {
func_80B37A8C(this);
/** Checks whether it's time to remove this broken piece of log. */
void EnMaruta_CheckShouldFlatten(EnMaruta* this) {
if ((this->actionFunc != EnMaruta_Flatten) && (this->actor.colChkInfo.health == 0)) {
EnMaruta_ShouldFlatten(this);
}
}
void func_80B37CA0(EnMaruta* this, PlayState* play) {
void EnMaruta_UpdateCollider(EnMaruta* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->actionFunc == func_80B372CC) || (this->actionFunc == func_80B3738C) ||
(this->actionFunc == func_80B374FC) || (this->actionFunc == func_80B37AA0) ||
((this->actionFunc == func_80B37428) && !(this->actor.world.pos.y < (this->actor.floorHeight - 20.0f)))) {
if ((this->collider.base.acFlags & AC_HIT) && (this->actionFunc == func_80B372CC)) {
if ((this->actionFunc == EnMaruta_SittingWhole) || (this->actionFunc == EnMaruta_RiseThroughFloor) ||
(this->actionFunc == EnMaruta_RetractAfterCut) || (this->actionFunc == EnMaruta_Flatten) ||
((this->actionFunc == EnMaruta_RetractWhole) &&
!(this->actor.world.pos.y < (this->actor.floorHeight - 20.0f)))) {
if ((this->collider.base.acFlags & AC_HIT) && (this->actionFunc == EnMaruta_SittingWhole)) {
this->collider.base.acFlags &= ~AC_HIT;
Actor_PlaySfx(&this->actor, NA_SE_IT_SWORD_STRIKE);
if (D_80B386CC[player->meleeWeaponAnimation] != 0) {
s32 temp = D_80B386CC[player->meleeWeaponAnimation] + 1;
if (sShapesAfterMeleeWeaponAnimations[player->meleeWeaponAnimation] != 0) {
s32 spawnParams = sShapesAfterMeleeWeaponAnimations[player->meleeWeaponAnimation] + 1;
temp = (temp << 8) & 0xFF00;
this->unk_210 = D_80B386CC[player->meleeWeaponAnimation];
spawnParams = (spawnParams << 8) & 0xFF00;
this->shape = sShapesAfterMeleeWeaponAnimations[player->meleeWeaponAnimation];
Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_EN_MARUTA, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, this->actor.shape.rot.y, 0,
temp);
spawnParams);
this->actor.world.rot.y = this->actor.shape.rot.y;
if ((this->unk_210 == 5) ||
((this->unk_210 == 7) && (player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H))) {
func_80B37590(this, play);
if ((this->shape == ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF) ||
((this->shape == ENMARUTA_SHAPE_HORIZONTAL_CUT_BOTTOM_HALF) &&
(player->meleeWeaponAnimation == PLAYER_MWA_STAB_1H))) {
EnMaruta_SetupRecoilAfterCut(this, play);
} else {
func_80B374B8(this);
EnMaruta_BottomHalfSittingOnFloor(this);
}
if ((this->actor.parent != NULL) && (this->actor.parent->id == ACTOR_EN_KENDO_JS)) {
@ -554,115 +589,116 @@ void func_80B37CA0(EnMaruta* this, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base);
if (func_80B37B78(this, play) && (this->actionFunc == func_80B372CC)) {
if (EnMaruta_IsHittable(this, play) && (this->actionFunc == EnMaruta_SittingWhole)) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
}
}
}
void func_80B37EC0(EnMaruta* this, PlayState* play) {
Vec3f sp34 = this->unk_204;
s32 phi_a2 = -1;
void EnMaruta_Bounce(EnMaruta* this, PlayState* play) {
Vec3f lowestPoint = this->centerPos;
s32 lowestPointIndex = -1;
s32 i;
f32 temp;
f32 distanceBelowFloor;
for (i = 0; i < ARRAY_COUNT(this->unk_1A4); i++) {
if (this->unk_1A4[i].y < sp34.y) {
sp34 = this->unk_1A4[i];
phi_a2 = i;
for (i = 0; i < ARRAY_COUNT(this->hitboxPoints); i++) {
if (this->hitboxPoints[i].y < lowestPoint.y) {
lowestPoint = this->hitboxPoints[i];
lowestPointIndex = i;
}
this->unk_214 = phi_a2;
this->lowestPointIndex = lowestPointIndex;
}
if (sp34.y < this->actor.floorHeight) {
this->unk_218 -= this->unk_21A;
if (lowestPoint.y < this->actor.floorHeight) {
this->recoilSpinAngle -= this->recoilSpinRate;
temp = this->actor.floorHeight - sp34.y;
distanceBelowFloor = this->actor.floorHeight - lowestPoint.y;
this->actor.velocity.y -= this->actor.gravity;
this->actor.velocity.x *= 0.6f;
this->actor.velocity.z *= 0.6f;
this->actor.world.pos.y += temp;
this->actor.world.pos.y += distanceBelowFloor;
if (this->actor.velocity.y < -this->actor.gravity) {
func_80B382E4(play, sp34);
EnMaruta_SpawnDustClouds(play, lowestPoint);
Actor_PlaySfx(&this->actor, NA_SE_EV_LOG_BOUND);
this->actor.velocity.y *= -0.6f;
func_80B38060(this, &sp34);
EnMaruta_AdjustBounceAngle(this, &lowestPoint);
}
}
}
f32 func_80B38028(Vec3f* arg0, Vec3f* arg1, Vec3f* arg2) {
f32 x0 = arg0->x;
f32 z0 = arg0->z;
f32 dx = arg2->x - arg1->x;
f32 dz = arg2->z - arg1->z;
f32 EnMaruta_CalculateSpinDeterminantOnBounce(Vec3f* axis, Vec3f* centerPoint, Vec3f* outerPoint) {
f32 x0 = axis->x;
f32 z0 = axis->z;
f32 dx = outerPoint->x - centerPoint->x;
f32 dz = outerPoint->z - centerPoint->z;
return z0 * dx - x0 * dz;
}
void func_80B38060(EnMaruta* this, Vec3f* arg1) {
Vec3f sp44;
void EnMaruta_AdjustBounceAngle(EnMaruta* this, Vec3f* lowestPoint) {
Vec3f spinAxis;
s32 pad;
f32 temp_f0;
f32 phi_f2;
f32 det;
f32 bound;
func_80B3828C(&this->unk_194, &sp44, 0, this->actor.shape.rot.y, 0);
temp_f0 = func_80B38028(&sp44, &this->unk_204, arg1);
EnMaruta_RotateVector(&this->recoilSpinAxis, &spinAxis, 0, this->actor.shape.rot.y, 0);
det = EnMaruta_CalculateSpinDeterminantOnBounce(&spinAxis, &this->centerPos, lowestPoint);
if ((this->unk_210 == 5) || (this->unk_210 == 6)) {
phi_f2 = 8.0f;
} else if (this->unk_210 == 4) {
phi_f2 = 5.0f;
if ((this->shape == ENMARUTA_SHAPE_VERTICAL_CUT_LEFT_HALF) ||
(this->shape == ENMARUTA_SHAPE_VERTICAL_CUT_RIGHT_HALF)) {
bound = 8.0f;
} else if (this->shape == ENMARUTA_SHAPE_DIAGONAL_RIGHT_CUT_TOP_HALF) {
bound = 5.0f;
} else {
phi_f2 = 2.0f;
bound = 2.0f;
}
if ((temp_f0 < phi_f2) && (-phi_f2 < temp_f0)) {
phi_f2 = 3.0f;
if ((det < bound) && (-bound < det)) {
bound = 3.0f;
} else {
phi_f2 = 1.2f;
bound = 1.2f;
}
if (temp_f0 > 0.0f) {
if (this->unk_21A > 0) {
this->unk_21A *= phi_f2;
if (det > 0.0f) {
if (this->recoilSpinRate > 0) {
this->recoilSpinRate *= bound;
} else {
this->unk_21A *= -0.8f;
this->recoilSpinRate *= -0.8f;
}
} else {
if (this->unk_21A > 0) {
this->unk_21A *= -0.8f;
if (this->recoilSpinRate > 0) {
this->recoilSpinRate *= -0.8f;
} else {
this->unk_21A *= phi_f2;
this->recoilSpinRate *= bound;
}
}
if ((ABS_ALT(this->unk_21A) < 0x38E) &&
(((this->unk_218 & 0x3FFF) < 0x71C) || ((this->unk_218 & 0x3FFF) >= 0x38E4))) {
if ((ABS_ALT(this->recoilSpinRate) < 0x38E) &&
(((this->recoilSpinAngle & 0x3FFF) < 0x71C) || ((this->recoilSpinAngle & 0x3FFF) >= 0x38E4))) {
this->actor.gravity *= 0.8f;
this->unk_21C++;
if (this->unk_21C == 2) {
func_80B37998(this);
this->endingBounces++;
if (this->endingBounces == 2) {
EnMaruta_StopBouncing(this);
}
} else if (ABS_ALT(this->unk_21A) > 0x38E) {
if (this->unk_21A < 0) {
this->unk_21A = -0x38E;
} else if (ABS_ALT(this->recoilSpinRate) > 0x38E) {
if (this->recoilSpinRate < 0) {
this->recoilSpinRate = -0x38E;
} else {
this->unk_21A = 0x38E;
this->recoilSpinRate = 0x38E;
}
}
}
void func_80B3828C(Vec3f* arg0, Vec3f* arg1, s16 arg2, s16 arg3, s32 arg4) {
void EnMaruta_RotateVector(Vec3f* src, Vec3f* dest, s16 rotX, s16 rotY, s32 rotZ) {
Matrix_Push();
Matrix_RotateZYX(arg2, arg3, arg4, MTXMODE_NEW);
Matrix_MultVec3f(arg0, arg1);
Matrix_RotateZYX(rotX, rotY, rotZ, MTXMODE_NEW);
Matrix_MultVec3f(src, dest);
Matrix_Pop();
}
void func_80B382E4(PlayState* play, Vec3f arg1) {
Vec3f pos = arg1;
void EnMaruta_SpawnDustClouds(PlayState* play, Vec3f srcPoint) {
Vec3f pos = srcPoint;
Vec3f velocity;
Vec3f accel;
Color_RGBA8 primColor = { 170, 130, 90, 255 };
@ -687,43 +723,43 @@ void EnMaruta_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
func_80B37CA0(this, play);
func_80B37C60(this);
EnMaruta_UpdateCollider(this, play);
EnMaruta_CheckShouldFlatten(this);
}
void EnMaruta_Draw(Actor* thisx, PlayState* play) {
EnMaruta* this = (EnMaruta*)thisx;
Vec3f sp50;
Vec3f translate;
s32 i;
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_210 == 0) {
if (this->shape == ENMARUTA_SHAPE_WHOLE) {
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx);
gSPDisplayList(POLY_OPA_DISP++, object_maruta_DL_002EC0);
gSPDisplayList(POLY_OPA_DISP++, gPracticeLogWholeDL);
} else {
sp50 = D_80B387E4[this->unk_210];
translate = sTranslationVectorsToRecoilAxis[this->shape];
Matrix_Push();
Matrix_Translate(sp50.x, sp50.y, sp50.z, MTXMODE_APPLY);
Matrix_RotateAxisS(this->unk_218, &this->unk_194, MTXMODE_APPLY);
Matrix_Translate(-sp50.x, -sp50.y, -sp50.z, MTXMODE_APPLY);
Matrix_Translate(translate.x, translate.y, translate.z, MTXMODE_APPLY);
Matrix_RotateAxisS(this->recoilSpinAngle, &this->recoilSpinAxis, MTXMODE_APPLY);
Matrix_Translate(-translate.x, -translate.y, -translate.z, MTXMODE_APPLY);
MATRIX_FINALIZE_AND_LOAD(POLY_OPA_DISP++, play->state.gfxCtx);
for (i = 0; i < 8; i++) {
if (D_80B386C0[this->unk_210] & (1 << i)) {
gSPDisplayList(POLY_OPA_DISP++, D_80B386A0[i]);
if (sFragmentsByShape[this->shape] & (1 << i)) {
gSPDisplayList(POLY_OPA_DISP++, sDisplayLists[i]);
}
}
if (this->unk_1A0 != NULL) {
for (i = 0; i < ARRAY_COUNT(this->unk_1A4); i++) {
Matrix_MultVec3f(&this->unk_1A0[i], &this->unk_1A4[i]);
if (this->relativeHitboxPoints != NULL) {
for (i = 0; i < ARRAY_COUNT(this->hitboxPoints); i++) {
Matrix_MultVec3f(&this->relativeHitboxPoints[i], &this->hitboxPoints[i]);
}
Matrix_MultVec3f(&sp50, &this->unk_204);
Matrix_MultVec3f(&translate, &this->centerPos);
}
Matrix_Pop();

View File

@ -7,23 +7,25 @@ struct EnMaruta;
typedef void (*EnMarutaActionFunc)(struct EnMaruta*, PlayState*);
#define ENMARUTA_GET_FF(thisx) ((thisx)->params & 0xFF)
#define ENMARUTA_GET_FF00(thisx) (((thisx)->params & 0xFF00) >> 8)
#define ENMARUTA_GET_TYPE(thisx) ((thisx)->params & 0xFF)
#define ENMARUTA_GET_SHAPE(thisx) (((thisx)->params & 0xFF00) >> 8)
#define ENMARUTA_INIT_ON_FLOOR 0xFF // Hypothetical only
typedef struct EnMaruta {
/* 0x000 */ Actor actor;
/* 0x144 */ EnMarutaActionFunc actionFunc;
/* 0x148 */ ColliderCylinder collider;
/* 0x194 */ Vec3f unk_194;
/* 0x1A0 */ Vec3f* unk_1A0;
/* 0x1A4 */ Vec3f unk_1A4[8];
/* 0x204 */ Vec3f unk_204;
/* 0x210 */ s32 unk_210;
/* 0x214 */ s32 unk_214;
/* 0x218 */ s16 unk_218;
/* 0x21A */ s16 unk_21A;
/* 0x21C */ s16 unk_21C;
/* 0x21E */ s16 unk_21E;
/* 0x194 */ Vec3f recoilSpinAxis;
/* 0x1A0 */ Vec3f* relativeHitboxPoints;
/* 0x1A4 */ Vec3f hitboxPoints[8];
/* 0x204 */ Vec3f centerPos;
/* 0x210 */ s32 shape;
/* 0x214 */ s32 lowestPointIndex;
/* 0x218 */ s16 recoilSpinAngle;
/* 0x21A */ s16 recoilSpinRate;
/* 0x21C */ s16 endingBounces;
/* 0x21E */ s16 timer;
/* 0x220 */ s16 isRetracting;
} EnMaruta; // size = 0x224

View File

@ -2823,14 +2823,14 @@ Message_ShouldAdvance = 0x80147624; // type:func
Message_ShouldAdvanceSilent = 0x80147734; // type:func
Message_CloseTextbox = 0x801477B4; // type:func
Message_DrawTextboxIcon = 0x80147818; // type:func
func_80147F18 = 0x80147F18; // type:func
func_80148558 = 0x80148558; // type:func
Message_HighlightInputDigitAtCursor = 0x80147F18; // type:func
Message_HighlightAllInputDigits = 0x80148558; // type:func
Message_HandleChoiceSelection = 0x80148B98; // type:func
Message_DrawChoiceIcon = 0x80148CBC; // type:func
func_80148D64 = 0x80148D64; // type:func
func_80149048 = 0x80149048; // type:func
func_801491DC = 0x801491DC; // type:func
func_80149454 = 0x80149454; // type:func
Message_ControlBankInput = 0x80148D64; // type:func
Message_ControlDoggyRaceBetInput = 0x80149048; // type:func
Message_ControlBomberCodeInput = 0x801491DC; // type:func
Message_ControlLotteryCodeInput = 0x80149454; // type:func
func_801496C8 = 0x801496C8; // type:func
Message_DrawTextChar = 0x8014995C; // type:func
Message_GrowTextbox = 0x80149C18; // type:func
@ -5983,7 +5983,7 @@ func_808B7B54 = 0x808B7B54; // type:func
func_808B7D34 = 0x808B7D34; // type:func
BgBreakwall_Draw = 0x808B7FE4; // type:func
DoorWarp1_SetupAction = 0x808B8490; // type:func
func_808B849C = 0x808B849C; // type:func
DoorWarp1_GetRemains = 0x808B849C; // type:func
func_808B8568 = 0x808B8568; // type:func
func_808B866C = 0x808B866C; // type:func
DoorWarp1_Init = 0x808B86D8; // type:func
@ -13529,31 +13529,31 @@ EnGg_PostLimbDraw = 0x80B368F0; // type:func
EnGg_Draw = 0x80B36A34; // type:func
EnMaruta_Init = 0x80B37080; // type:func
EnMaruta_Destroy = 0x80B37280; // type:func
func_80B372B8 = 0x80B372B8; // type:func
func_80B372CC = 0x80B372CC; // type:func
func_80B37364 = 0x80B37364; // type:func
func_80B3738C = 0x80B3738C; // type:func
func_80B373F4 = 0x80B373F4; // type:func
func_80B37428 = 0x80B37428; // type:func
func_80B374B8 = 0x80B374B8; // type:func
func_80B374FC = 0x80B374FC; // type:func
func_80B37590 = 0x80B37590; // type:func
func_80B37950 = 0x80B37950; // type:func
func_80B37998 = 0x80B37998; // type:func
func_80B379C0 = 0x80B379C0; // type:func
func_80B37A14 = 0x80B37A14; // type:func
func_80B37A64 = 0x80B37A64; // type:func
func_80B37A8C = 0x80B37A8C; // type:func
func_80B37AA0 = 0x80B37AA0; // type:func
func_80B37B78 = 0x80B37B78; // type:func
func_80B37C04 = 0x80B37C04; // type:func
func_80B37C60 = 0x80B37C60; // type:func
func_80B37CA0 = 0x80B37CA0; // type:func
func_80B37EC0 = 0x80B37EC0; // type:func
func_80B38028 = 0x80B38028; // type:func
func_80B38060 = 0x80B38060; // type:func
func_80B3828C = 0x80B3828C; // type:func
func_80B382E4 = 0x80B382E4; // type:func
EnMaruta_SetInPositionWhole = 0x80B372B8; // type:func
EnMaruta_SittingWhole = 0x80B372CC; // type:func
EnMaruta_SetupRiseThroughFloor = 0x80B37364; // type:func
EnMaruta_RiseThroughFloor = 0x80B3738C; // type:func
EnMaruta_StartRetracting = 0x80B373F4; // type:func
EnMaruta_RetractWhole = 0x80B37428; // type:func
EnMaruta_BottomHalfSittingOnFloor = 0x80B374B8; // type:func
EnMaruta_RetractAfterCut = 0x80B374FC; // type:func
EnMaruta_SetupRecoilAfterCut = 0x80B37590; // type:func
EnMaruta_Recoil = 0x80B37950; // type:func
EnMaruta_StopBouncing = 0x80B37998; // type:func
EnMaruta_FindRestingOrientation = 0x80B379C0; // type:func
EnMaruta_SetupWaitToFlatten = 0x80B37A14; // type:func
EnMaruta_WaitToFlatten = 0x80B37A64; // type:func
EnMaruta_ShouldFlatten = 0x80B37A8C; // type:func
EnMaruta_Flatten = 0x80B37AA0; // type:func
EnMaruta_IsHittable = 0x80B37B78; // type:func
EnMaruta_LerpSpinAngleToFlat = 0x80B37C04; // type:func
EnMaruta_CheckShouldFlatten = 0x80B37C60; // type:func
EnMaruta_UpdateCollider = 0x80B37CA0; // type:func
EnMaruta_Bounce = 0x80B37EC0; // type:func
EnMaruta_CalculateSpinDeterminantOnBounce = 0x80B38028; // type:func
EnMaruta_AdjustBounceAngle = 0x80B38060; // type:func
EnMaruta_RotateVector = 0x80B3828C; // type:func
EnMaruta_SpawnDustClouds = 0x80B382E4; // type:func
EnMaruta_Update = 0x80B38454; // type:func
EnMaruta_Draw = 0x80B38498; // type:func
func_80B38E20 = 0x80B38E20; // type:func

View File

@ -1077,7 +1077,7 @@ sSaveDebugChecksum = 0x801C6A44; // size:0x4
D_801C6A48 = 0x801C6A48; // size:0x8
D_801C6A50 = 0x801C6A50; // size:0x8
D_801C6A58 = 0x801C6A58; // size:0x18
D_801C6A70 = 0x801C6A70; // size:0x4
sMessageStartFrameCount = 0x801C6A70; // size:0x4
D_801C6A74 = 0x801C6A74; // size:0x4
D_801C6A78 = 0x801C6A78; // size:0x4
D_801C6A7C = 0x801C6A7C; // size:0x4
@ -1086,7 +1086,7 @@ D_801C6A84 = 0x801C6A84; // size:0x4
D_801C6A88 = 0x801C6A88; // size:0x4
D_801C6A8C = 0x801C6A8C; // size:0x4
D_801C6A90 = 0x801C6A90; // size:0x4
D_801C6A94 = 0x801C6A94; // size:0x4
sOcarinaButtonDropYOffset = 0x801C6A94; // size:0x4
gPageSwitchNextButtonStatus = 0x801C6A98; // size:0x20
sBombersNotebookEventMessages = 0x801C6AB8; // size:0x70
gBombersNotebookWeekEventFlags = 0x801C6B28; // size:0x70

View File

@ -2340,14 +2340,14 @@ asm/non_matchings/code/z_message/Message_ShouldAdvance.s,Message_ShouldAdvance,0
asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s,Message_ShouldAdvanceSilent,0x80147734,0x20
asm/non_matchings/code/z_message/Message_CloseTextbox.s,Message_CloseTextbox,0x801477B4,0x19
asm/non_matchings/code/z_message/Message_DrawTextboxIcon.s,Message_DrawTextboxIcon,0x80147818,0x1C0
asm/non_matchings/code/z_message/func_80147F18.s,func_80147F18,0x80147F18,0x190
asm/non_matchings/code/z_message/func_80148558.s,func_80148558,0x80148558,0x190
asm/non_matchings/code/z_message/Message_HighlightInputDigitAtCursor.s,Message_HighlightInputDigitAtCursor,0x80147F18,0x190
asm/non_matchings/code/z_message/Message_HighlightAllInputDigits.s,Message_HighlightAllInputDigits,0x80148558,0x190
asm/non_matchings/code/z_message/Message_HandleChoiceSelection.s,Message_HandleChoiceSelection,0x80148B98,0x49
asm/non_matchings/code/z_message/Message_DrawChoiceIcon.s,Message_DrawChoiceIcon,0x80148CBC,0x2A
asm/non_matchings/code/z_message/func_80148D64.s,func_80148D64,0x80148D64,0xB9
asm/non_matchings/code/z_message/func_80149048.s,func_80149048,0x80149048,0x65
asm/non_matchings/code/z_message/func_801491DC.s,func_801491DC,0x801491DC,0x9E
asm/non_matchings/code/z_message/func_80149454.s,func_80149454,0x80149454,0x9D
asm/non_matchings/code/z_message/Message_ControlBankInput.s,Message_ControlBankInput,0x80148D64,0xB9
asm/non_matchings/code/z_message/Message_ControlDoggyRaceBetInput.s,Message_ControlDoggyRaceBetInput,0x80149048,0x65
asm/non_matchings/code/z_message/Message_ControlBomberCodeInput.s,Message_ControlBomberCodeInput,0x801491DC,0x9E
asm/non_matchings/code/z_message/Message_ControlLotteryCodeInput.s,Message_ControlLotteryCodeInput,0x80149454,0x9D
asm/non_matchings/code/z_message/func_801496C8.s,func_801496C8,0x801496C8,0xA5
asm/non_matchings/code/z_message/Message_DrawTextChar.s,Message_DrawTextChar,0x8014995C,0xAF
asm/non_matchings/code/z_message/Message_GrowTextbox.s,Message_GrowTextbox,0x80149C18,0xA9

1 asm/non_matchings/code/z_en_a_keep/EnAObj_Init.s EnAObj_Init 0x800A5AC0 0x2B
2340 asm/non_matchings/code/z_message/Message_ShouldAdvanceSilent.s Message_ShouldAdvanceSilent 0x80147734 0x20
2341 asm/non_matchings/code/z_message/Message_CloseTextbox.s Message_CloseTextbox 0x801477B4 0x19
2342 asm/non_matchings/code/z_message/Message_DrawTextboxIcon.s Message_DrawTextboxIcon 0x80147818 0x1C0
2343 asm/non_matchings/code/z_message/func_80147F18.s asm/non_matchings/code/z_message/Message_HighlightInputDigitAtCursor.s func_80147F18 Message_HighlightInputDigitAtCursor 0x80147F18 0x190
2344 asm/non_matchings/code/z_message/func_80148558.s asm/non_matchings/code/z_message/Message_HighlightAllInputDigits.s func_80148558 Message_HighlightAllInputDigits 0x80148558 0x190
2345 asm/non_matchings/code/z_message/Message_HandleChoiceSelection.s Message_HandleChoiceSelection 0x80148B98 0x49
2346 asm/non_matchings/code/z_message/Message_DrawChoiceIcon.s Message_DrawChoiceIcon 0x80148CBC 0x2A
2347 asm/non_matchings/code/z_message/func_80148D64.s asm/non_matchings/code/z_message/Message_ControlBankInput.s func_80148D64 Message_ControlBankInput 0x80148D64 0xB9
2348 asm/non_matchings/code/z_message/func_80149048.s asm/non_matchings/code/z_message/Message_ControlDoggyRaceBetInput.s func_80149048 Message_ControlDoggyRaceBetInput 0x80149048 0x65
2349 asm/non_matchings/code/z_message/func_801491DC.s asm/non_matchings/code/z_message/Message_ControlBomberCodeInput.s func_801491DC Message_ControlBomberCodeInput 0x801491DC 0x9E
2350 asm/non_matchings/code/z_message/func_80149454.s asm/non_matchings/code/z_message/Message_ControlLotteryCodeInput.s func_80149454 Message_ControlLotteryCodeInput 0x80149454 0x9D
2351 asm/non_matchings/code/z_message/func_801496C8.s func_801496C8 0x801496C8 0xA5
2352 asm/non_matchings/code/z_message/Message_DrawTextChar.s Message_DrawTextChar 0x8014995C 0xAF
2353 asm/non_matchings/code/z_message/Message_GrowTextbox.s Message_GrowTextbox 0x80149C18 0xA9