diff --git a/asm/non_matching/playerItemPacciCane/sub_080704FC.inc b/asm/non_matching/playerItemPacciCane/sub_080704FC.inc deleted file mode 100644 index 943cfa68..00000000 --- a/asm/non_matching/playerItemPacciCane/sub_080704FC.inc +++ /dev/null @@ -1,84 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _0807052C @ =gPlayerEntity - adds r0, r5, #0 - adds r0, #0x5a - ldrb r2, [r0] - movs r0, #0x80 - ands r0, r2 - ldr r1, _08070530 @ =gPlayerState - cmp r0, #0 - bne _08070518 - ldr r0, [r1, #0x2c] - cmp r4, r0 - beq _08070534 -_08070518: - ldr r0, [r1, #0x2c] - cmp r4, r0 - bne _08070522 - movs r0, #0 - str r0, [r1, #0x2c] -_08070522: - adds r0, r4, #0 - bl DeleteEntity - b _08070566 - .align 2, 0 -_0807052C: .4byte gPlayerEntity -_08070530: .4byte gPlayerState -_08070534: - movs r0, #0xf - ands r0, r2 - cmp r0, #0xf - beq _08070562 - ldrb r1, [r5, #0x1e] - adds r0, #0x91 - subs r0, r1, r0 - ldrb r2, [r4, #0x1e] - cmp r0, r2 - beq _08070558 - adds r0, r1, #0 - adds r0, #0x6f - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x1e] - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 -_08070558: - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08078E84 - b _08070566 -_08070562: - movs r0, #0xff - strb r0, [r4, #0x1e] -_08070566: - ldr r2, _08070580 @ =gPlayerEntity - ldrb r1, [r2, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08070584 - ldrb r0, [r2, #0x18] - lsls r0, r0, #0x19 - lsrs r2, r0, #0x1f - movs r0, #1 - eors r2, r0 - b _0807058A - .align 2, 0 -_08070580: .4byte gPlayerEntity -_08070584: - ldrb r0, [r2, #0x18] - lsls r0, r0, #0x19 - lsrs r2, r0, #0x1f -_0807058A: - lsls r2, r2, #6 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/data/const/playerItem/playerItemPacciCane.s b/data/const/playerItem/playerItemPacciCane.s deleted file mode 100644 index b135b0bb..00000000 --- a/data/const/playerItem/playerItemPacciCane.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0811B9D8:: @ 0811B9D8 - .4byte sub_080704D4 - .4byte sub_080704FC diff --git a/linker.ld b/linker.ld index 380e052c..8e53b57a 100644 --- a/linker.ld +++ b/linker.ld @@ -1335,7 +1335,7 @@ SECTIONS { src/playerHitbox.o(.rodata); data/gfx/sprite_frames.o(.rodata); src/playerItem/playerItem12.o(.rodata); - data/const/playerItem/playerItemPacciCane.o(.rodata); + src/playerItem/playerItemPacciCane.o(.rodata); src/player.o(.rodata); src/item.o(.rodata); data/const/item/itemSword.o(.rodata); diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index 3f797d84..dc36a6fd 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -6,23 +6,56 @@ #include "save.h" #include "structures.h" -extern void (*const gUnk_0811B9D8[])(Entity*); - -void sub_080704FC(Entity*); +void PlayerItemPacciCane_Action1(Entity*); +void PlayerItemPacciCane_Init(Entity* this); void PlayerItemPacciCane(Entity* this) { - gUnk_0811B9D8[this->action](this); + static void (*const PlayerItemPacciCane_Actions[])(Entity*) = { + PlayerItemPacciCane_Init, + PlayerItemPacciCane_Action1, + }; + PlayerItemPacciCane_Actions[this->action](this); } -void sub_080704D4(Entity* this) { +void PlayerItemPacciCane_Init(Entity* this) { this->action = 1; this->frameIndex = -1; LoadSwapGFX(this, 1, 3); SoundReq(SFX_10E); - sub_080704FC(this); + PlayerItemPacciCane_Action1(this); } -ASM_FUNC("asm/non_matching/playerItemPacciCane/sub_080704FC.inc", void sub_080704FC(Entity* this)) +void PlayerItemPacciCane_Action1(Entity* this) { + u32 playerFrame; + u32 frameIndex; + u32 flipX; + if (((gPlayerEntity.frame & 0x80) != 0) || (this != gPlayerState.item)) { + if (this == gPlayerState.item) { + gPlayerState.item = NULL; + } + DeleteEntity(this); + } else { + playerFrame = gPlayerEntity.frame & 0xf; + if (playerFrame != 0xf) { + frameIndex = gPlayerEntity.frameIndex; + playerFrame += 0x91; + if (frameIndex - playerFrame != this->frameIndex) { + this->frameIndex = frameIndex + 0x6f; + sub_080042D0(this, this->frameIndex, this->spriteIndex); + } + sub_08078E84(this, &gPlayerEntity); + } else { + this->frameIndex = -1; + } + } + + if ((gPlayerEntity.animationState & 2)) { + flipX = gPlayerEntity.spriteSettings.flipX ^ 1; + } else { + flipX = gPlayerEntity.spriteSettings.flipX; + } + this->spriteSettings.flipX = flipX; +} // TODO This name sounds like this does not belong in this file void ClearMenuSavestate(void) {