From 8a79ee79cad066e46badc0d2e66d3e45fd6c9f3b Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sat, 19 Feb 2022 06:12:56 +0200 Subject: [PATCH] match some player functions --- .../player/PortalShrinkUpdate.inc | 172 -------------- asm/non_matching/player/sub_08072D54.inc | 222 ------------------ .../CheckPlayerInactive.inc | 94 -------- src/player.c | 135 ++++++++--- 4 files changed, 99 insertions(+), 524 deletions(-) delete mode 100644 asm/non_matching/player/PortalShrinkUpdate.inc delete mode 100644 asm/non_matching/player/sub_08072D54.inc delete mode 100644 asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc diff --git a/asm/non_matching/player/PortalShrinkUpdate.inc b/asm/non_matching/player/PortalShrinkUpdate.inc deleted file mode 100644 index 3c377521..00000000 --- a/asm/non_matching/player/PortalShrinkUpdate.inc +++ /dev/null @@ -1,172 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _08071654 - adds r1, r5, #0 - adds r1, #0x80 - ldr r0, [r1] - adds r0, #0x80 - lsls r0, r0, #0x14 - lsrs r7, r0, #0x17 - adds r4, r1, #0 - b _0807166A -_08071654: - adds r4, r5, #0 - adds r4, #0x80 - ldrb r1, [r4] - lsrs r1, r1, #6 - movs r0, #3 - eors r1, r0 - adds r1, #1 - movs r0, #0x10 - bl __divsi3 - asrs r7, r0, #1 -_0807166A: - adds r0, r5, #0 - adds r0, #0x84 - ldr r3, [r0] - movs r1, #0x80 - lsls r1, r1, #1 - adds r2, r0, #0 - cmp r3, r1 - bls _08071684 - adds r0, r3, #0 - adds r0, #0x80 - lsls r0, r0, #0x14 - lsrs r3, r0, #0x17 - b _08071694 -_08071684: - cmp r3, r1 - bne _0807168C - movs r3, #0x10 - b _08071694 -_0807168C: - ldr r1, _080716B0 @ =gUnk_0811BABC - lsrs r0, r3, #5 - adds r0, r0, r1 - ldrb r3, [r0] -_08071694: - movs r0, #0x80 - lsls r0, r0, #9 - mov r8, r0 - adds r0, r5, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #2 - beq _080716EA - cmp r0, #2 - bgt _080716B4 - cmp r0, #1 - beq _080716BA - b _08071754 - .align 2, 0 -_080716B0: .4byte gUnk_0811BABC -_080716B4: - cmp r0, #3 - beq _0807171E - b _08071754 -_080716BA: - movs r1, #0x29 - adds r1, r1, r5 - mov ip, r1 - ldrb r1, [r1] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - mov r1, ip - strb r0, [r1] - ldr r0, [r4] - cmp r0, #0x80 - bls _080716D6 - subs r0, r0, r7 - str r0, [r4] -_080716D6: - lsls r1, r3, #1 - ldr r0, [r2] - adds r0, r0, r1 - str r0, [r2] - mov r0, r8 - lsls r1, r0, #1 - ldr r0, [r5, #0x30] - adds r0, r0, r1 - str r0, [r5, #0x30] - b _08071754 -_080716EA: - ldr r0, [r4] - adds r0, r0, r7 - str r0, [r4] - ldr r1, [r2] - movs r6, #0x80 - lsls r6, r6, #1 - cmp r1, r6 - bls _08071710 - ldr r0, _0807170C @ =0x0000017F - cmp r1, r0 - bhi _08071702 - lsrs r3, r3, #1 -_08071702: - subs r0, r1, r3 - cmp r0, #0xff - bhi _08071716 - str r6, [r2] - b _08071718 - .align 2, 0 -_0807170C: .4byte 0x0000017F -_08071710: - cmp r1, #0x80 - bls _08071718 - subs r0, r1, r3 -_08071716: - str r0, [r2] -_08071718: - ldr r0, [r5, #0x34] - mov r1, r8 - b _08071750 -_0807171E: - ldr r0, [r4] - ldr r6, _08071740 @ =0x0000033F - cmp r0, r6 - bhi _0807172A - adds r0, r0, r7 - str r0, [r4] -_0807172A: - ldr r1, [r2] - cmp r1, r6 - bls _08071744 - movs r0, #8 - strb r0, [r5, #0xe] - movs r0, #0x1e - strb r0, [r5, #0xf] - movs r0, #6 - strb r0, [r5, #0xd] - b _0807174A - .align 2, 0 -_08071740: .4byte 0x0000033F -_08071744: - lsls r0, r3, #1 - adds r0, r1, r0 - str r0, [r2] -_0807174A: - mov r0, r8 - lsls r1, r0, #1 - ldr r0, [r5, #0x34] -_08071750: - subs r0, r0, r1 - str r0, [r5, #0x34] -_08071754: - ldr r1, [r4] - ldr r2, [r2] - adds r0, r5, #0 - movs r3, #0 - bl sub_0805EC9C - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/asm/non_matching/player/sub_08072D54.inc b/asm/non_matching/player/sub_08072D54.inc deleted file mode 100644 index 30ab4d8d..00000000 --- a/asm/non_matching/player/sub_08072D54.inc +++ /dev/null @@ -1,222 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - movs r2, #0xc - rsbs r2, r2, #0 - adds r0, r4, #0 - movs r1, #0 - bl sub_0806F854 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08072D7A - adds r0, r4, #0 - bl LinearMoveUpdate - ldrb r0, [r4, #0xe] - subs r0, #1 - b _08072E80 -_08072D7A: - adds r0, r4, #0 - bl sub_0806F730 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileType - adds r2, r0, #0 - ldrb r5, [r4, #0xf] - cmp r5, #1 - beq _08072DD0 - cmp r5, #1 - bgt _08072D9C - cmp r5, #0 - beq _08072DA6 - b _08072E6C -_08072D9C: - cmp r5, #2 - beq _08072DFA - cmp r5, #3 - beq _08072E30 - b _08072E6C -_08072DA6: - ldr r1, _08072DC8 @ =sTileTable - ldr r0, _08072DCC @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E6C - movs r0, #1 - strb r0, [r4, #0xe] - strb r0, [r4, #0xf] - b _08072E6C - .align 2, 0 -_08072DC8: .4byte sTileTable -_08072DCC: .4byte gPlayerEntity -_08072DD0: - ldr r1, _08072DEC @ =sTileTable - ldr r0, _08072DF0 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072DF4 - strb r5, [r4, #0xe] - b _08072E6C - .align 2, 0 -_08072DEC: .4byte sTileTable -_08072DF0: .4byte gPlayerEntity -_08072DF4: - movs r0, #2 - strb r0, [r4, #0xf] - b _08072E6C -_08072DFA: - ldrb r0, [r4, #0x14] - movs r5, #4 - eors r0, r5 - strb r0, [r4, #0x14] - ldr r1, _08072E28 @ =sTileTable - ldr r0, _08072E2C @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E22 - movs r0, #1 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xf] -_08072E22: - ldrb r0, [r4, #0x14] - eors r0, r5 - b _08072E6A - .align 2, 0 -_08072E28: .4byte sTileTable -_08072E2C: .4byte gPlayerEntity -_08072E30: - ldrb r0, [r4, #0x14] - movs r1, #4 - eors r0, r1 - strb r0, [r4, #0x14] - ldr r1, _08072E58 @ =sTileTable - ldr r0, _08072E5C @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r2, #0 - bl sub_08007DD6 - cmp r0, #0 - beq _08072E60 - movs r0, #1 - strb r0, [r4, #0xe] - b _08072E64 - .align 2, 0 -_08072E58: .4byte sTileTable -_08072E5C: .4byte gPlayerEntity -_08072E60: - movs r0, #4 - strb r0, [r4, #0xf] -_08072E64: - ldrb r0, [r4, #0x14] - movs r1, #4 - eors r0, r1 -_08072E6A: - strb r0, [r4, #0x14] -_08072E6C: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08072E7A - adds r0, r4, #0 - bl LinearMoveUpdate - b _08072E7E -_08072E7A: - bl UpdatePlayerMovement -_08072E7E: - movs r0, #0 -_08072E80: - strb r0, [r4, #0xe] - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _08072F10 - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _08072EAA - adds r0, r4, #0 - bl ResetCollisionLayer - b _08072EB0 -_08072EAA: - adds r0, r4, #0 - bl sub_08004542 -_08072EB0: - adds r0, r4, #0 - movs r1, #7 - bl sub_08008790 - ldr r5, _08072EDC @ =gPlayerState - ldrb r0, [r5, #0x14] - cmp r0, #0 - beq _08072EE0 - bl sub_08008B22 - cmp r0, #0 - beq _08072F10 - movs r0, #7 - strb r0, [r5, #0x11] - ldr r0, [r5, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08072F10 - bl SetPlayerActionNormal - b _08072F10 - .align 2, 0 -_08072EDC: .4byte gPlayerState -_08072EE0: - ldr r0, [r5, #0x30] - movs r1, #8 - ands r0, r1 - cmp r0, #0 - beq _08072EF4 - ldr r0, _08072EF0 @ =0x00000424 - b _08072EF8 - .align 2, 0 -_08072EF0: .4byte 0x00000424 -_08072EF4: - movs r0, #0x82 - lsls r0, r0, #4 -_08072EF8: - strh r0, [r5, #8] - movs r1, #0 - movs r0, #6 - strb r0, [r4, #0xe] - movs r0, #3 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x42 - strb r1, [r0] - movs r0, #0x7d - bl SoundReq -_08072F10: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc b/asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc deleted file mode 100644 index ecc53f93..00000000 --- a/asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc +++ /dev/null @@ -1,94 +0,0 @@ - .syntax unified - push {lr} - ldr r0, _08070614 @ =gInput - ldrh r1, [r0, #2] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08070674 - ldr r0, _08070618 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08070674 - ldr r0, _0807061C @ =gUnk_02034490 - ldrb r0, [r0] - cmp r0, #0 - bne _08070674 - ldr r0, _08070620 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08070674 - ldr r1, _08070624 @ =gSave - adds r0, r1, #0 - adds r0, #0xaa - ldrb r0, [r0] - cmp r0, #0 - beq _08070674 - adds r0, r1, #0 - adds r0, #0xf2 - ldrb r0, [r0] - cmp r0, #0 - beq _08070674 - ldr r1, _08070628 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0x8b - ldrb r0, [r0] - cmp r0, #0 - bne _08070674 - ldr r0, _0807062C @ =gPriorityHandler - ldrh r0, [r0, #8] - cmp r0, #0 - bne _08070674 - adds r2, r1, #0 - adds r2, #0xa8 - ldrb r0, [r2] - cmp r0, #0 - bne _08070630 - adds r0, r1, #0 - adds r0, #0xa9 - ldrb r0, [r0] - b _08070632 - .align 2, 0 -_08070614: .4byte gInput -_08070618: .4byte gFadeControl -_0807061C: .4byte gUnk_02034490 -_08070620: .4byte gMessage -_08070624: .4byte gSave -_08070628: .4byte gPlayerState -_0807062C: .4byte gPriorityHandler -_08070630: - ldrb r0, [r2] -_08070632: - subs r0, #0x12 - cmp r0, #0xa - bhi _08070678 - lsls r0, r0, #2 - ldr r1, _08070644 @ =_08070648 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08070644: .4byte _08070648 -_08070648: @ jump table - .4byte _08070674 @ case 0 - .4byte _08070674 @ case 1 - .4byte _08070678 @ case 2 - .4byte _08070674 @ case 3 - .4byte _08070674 @ case 4 - .4byte _08070678 @ case 5 - .4byte _08070678 @ case 6 - .4byte _08070678 @ case 7 - .4byte _08070678 @ case 8 - .4byte _08070678 @ case 9 - .4byte _08070674 @ case 10 -_08070674: - movs r0, #0 - b _0807067E -_08070678: - bl sub_080A4D88 - movs r0, #1 -_0807067E: - pop {pc} - .syntax divided diff --git a/src/player.c b/src/player.c index 6c0463f5..6e26f20f 100644 --- a/src/player.c +++ b/src/player.c @@ -322,25 +322,26 @@ extern u16 script_BedAtSimons; extern ScriptExecutionContext gPlayerScriptExecutionContext; -NONMATCH("asm/non_matching/playerItemPacciCane/CheckPlayerInactive.inc", u32 CheckPlayerInactive(void)) { - if (!((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490.unk0 || - (gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] || - gPlayerState.controlMode != CONTROL_ENABLED || gPriorityHandler.priority_timer != 0)) { - u32 tmp = gPlayerState.framestate ? gPlayerState.framestate : gPlayerState.framestate_last; - switch (tmp) { - case PL_STATE_DIE: - case PL_STATE_TALKEZLO: - case PL_STATE_ITEMGET: - case PL_STATE_DROWN: - case PL_STATE_STAIRS: - return 0; - } - sub_080A4D88(); - return 1; +u32 CheckPlayerInactive(void) { + u32 framestate; + if (((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490.unk0 || + (gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] || + gPlayerState.controlMode != 0 || gPriorityHandler.priority_timer != 0)) { + return 0; } - return 0; + + framestate = gPlayerState.framestate == 0 ? gPlayerState.framestate_last : gPlayerState.framestate; + switch (framestate) { + case PL_STATE_DIE: + case PL_STATE_TALKEZLO: + case PL_STATE_ITEMGET: + case PL_STATE_DROWN: + case PL_STATE_STAIRS: + return 0; + } + sub_080A4D88(); + return 1; } -END_NONMATCH void DoPlayerAction(Entity* this) { static void (*const sPlayerActions[])(Entity*) = { @@ -1177,8 +1178,77 @@ static const u8 gUnk_0811BABC[] = { 1, 1, 1, 1, 2, 4, 8, 16, }; -// horrible -/*static*/ ASM_FUNC("asm/non_matching/player/PortalShrinkUpdate.inc", void PortalShrinkUpdate(Entity* this)); +void PortalShrinkUpdate(Entity* this) { + int iVar3; + u32 uVar5; + u32 uVar7; + u32 uVar8; + + if (this->field_0x80.HALF.HI) { + uVar7 = (u32)((*(int*)&this->field_0x80 + 0x80) * 0x100000) >> 0x17; + } else { + uVar7 = (0x10 / (((this->field_0x80.HALF.LO >> 6) ^ 3) + 1)) >> 1; + } + uVar5 = *(u32*)&this->cutsceneBeh; + if (uVar5 >= 0x101) { + uVar5 = (uVar5 + 0x80) * 0x100000 >> 0x17; + } else { + if (uVar5 == 0x100) { + uVar5 = 0x10; + } else { + uVar5 = gUnk_0811BABC[uVar5 >> 5]; + } + } + iVar3 = 0x10000; + + switch (this->frame) { + case 1: + this->spritePriority.b1 = 0; + if (0x80 < *(u32*)&this->field_0x80) { + *(u32*)&this->field_0x80 -= uVar7; + } + *(u32*)&this->cutsceneBeh += uVar5 * 2; + this->y.WORD += iVar3 * 2; + break; + case 2: + *(u32*)&this->field_0x80 += uVar7; + uVar8 = *(u32*)&this->cutsceneBeh; + if (uVar8 >= 0x101) { + + if (uVar8 < 0x180) { + uVar5 = uVar5 >> 1; + } + if (uVar8 - uVar5 < 0x100) { + *(u32*)&this->cutsceneBeh = 0x100; + } else { + *(u32*)&this->cutsceneBeh = uVar8 - uVar5; + } + } else { + if (0x80 < uVar8) { + *(u32*)&this->cutsceneBeh = uVar8 - uVar5; + } + } + this->z.WORD = this->z.WORD - iVar3; + + break; + case 3: + if (*(u32*)&this->field_0x80 < 0x340) { + *(u32*)&this->field_0x80 += uVar7; + } + if (*(u32*)&this->cutsceneBeh >= 0x340) { + this->actionDelay = 8; + this->field_0xf = 0x1e; + this->subAction = 6; + } else { + *(u32*)&this->cutsceneBeh += uVar5 * 2; + } + this->z.WORD = this->z.WORD - iVar3 * 2; + break; + } + + sub_0805EC9C(this, *(u32*)&this->field_0x80, *(u32*)&this->cutsceneBeh, 0); + UpdateAnimationSingleFrame(this); +} /*static*/ void PortalEnterUpdate(Entity* this) { if (this->actionDelay == 0) { @@ -2311,17 +2381,16 @@ static const u16* const sTileTable[] = { sTiles + 9, }; -/*static*/ NONMATCH("asm/non_matching/player/sub_08072D54.inc", void sub_08072D54(Entity* this)) { - u32 bVar1; +void sub_08072D54(Entity* this) { u32 uVar2; UpdateAnimationSingleFrame(this); sub_0806F854(this, 0, -12); if (this->actionDelay != 0) { LinearMoveUpdate(this); + this->actionDelay--; } else { - uVar2 = sub_0806F730(this); - uVar2 = GetTileType(uVar2, this->collisionLayer); + uVar2 = GetTileType(sub_0806F730(this), this->collisionLayer); switch (this->field_0xf) { case 0: if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { @@ -2332,14 +2401,8 @@ static const u16* const sTileTable[] = { case 1: if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { this->actionDelay = 1; - this->field_0xf = 1; - } - break; - case 3: - if (this->actionDelay == 0) { - UpdatePlayerMovement(); } else { - LinearMoveUpdate(this); + this->field_0xf = 2; } break; case 2: @@ -2348,14 +2411,16 @@ static const u16* const sTileTable[] = { this->actionDelay = 1; this->field_0xf = 3; } + this->animationState ^= 4; break; - default: + case 3: this->animationState ^= 4; if (sub_08007DD6(uVar2, sTileTable[gPlayerEntity.animationState >> 1])) { - this->field_0xf = 4; - } else { this->actionDelay = 1; + } else { + this->field_0xf = 4; } + this->animationState ^= 4; break; } @@ -2367,7 +2432,6 @@ static const u16* const sTileTable[] = { this->actionDelay = 0; } - this->actionDelay = bVar1; if (!GravityUpdate(this, GRAVITY_RATE)) { COLLISION_ON(this); if (this->collisionLayer == 1) { @@ -2377,7 +2441,7 @@ static const u16* const sTileTable[] = { } sub_08008790(this, 7); if (gPlayerState.field_0x14 != 0) { - if (sub_08008B22() == 0) { + if (sub_08008B22()) { gPlayerState.field_0x11 = 7; if (!(gPlayerState.flags & PL_MINISH)) { SetPlayerActionNormal(); @@ -2396,7 +2460,6 @@ static const u16* const sTileTable[] = { } } } -END_NONMATCH /*static*/ void sub_08072F14(Entity* this) { if (--this->actionDelay != 0xff) {