Merge pull request #358 from hatal175/pegasusboots

This commit is contained in:
notyourav
2022-02-07 20:13:03 -08:00
committed by GitHub
5 changed files with 104 additions and 284 deletions
@@ -1,145 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r4, r0, #0
adds r6, r1, #0
bl sub_08077EFC
cmp r0, #0
bne _08076978
b _08076A70
_08076978:
ldr r0, _080769C4 @ =gPlayerEntity
ldr r7, [r0, #0x34]
cmp r7, #0
bne _08076A70
ldr r5, _080769C8 @ =gPlayerState
ldrb r0, [r5, #0x1e]
cmp r0, #0
beq _08076A70
adds r0, r4, #0
bl UpdateItemAnim
ldr r0, [r5, #0x30]
movs r1, #0x80
mov r8, r1
ands r0, r1
cmp r0, #0
bne _080769A0
adds r0, r4, #0
bl UpdateItemAnim
_080769A0:
ldrb r0, [r5, #0x1e]
adds r0, #1
strb r0, [r5, #0x1e]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x1e
bne _08076A7E
ldr r0, [r5, #0x30]
movs r1, #2
ands r0, r1
cmp r0, #0
beq _080769CC
strb r7, [r5, #0x1e]
adds r0, r4, #0
adds r1, r6, #0
bl sub_08077E78
b _08076A7E
.align 2, 0
_080769C4: .4byte gPlayerEntity
_080769C8: .4byte gPlayerState
_080769CC:
movs r0, #0x40
strb r0, [r5, #0x1e]
movs r1, #8
asrs r1, r6
ldrb r0, [r5, #0xa]
bics r0, r1
strb r0, [r5, #0xa]
ldrb r0, [r4, #4]
adds r0, #1
strb r0, [r4, #4]
bl sub_0807A158
cmp r0, #0
beq _08076A46
ldr r0, [r5, #0x30]
mov r1, r8
ands r0, r1
cmp r0, #0
bne _08076A60
adds r0, r5, #0
adds r0, #0xac
ldrh r1, [r0]
movs r0, #4
ands r0, r1
cmp r0, #0
beq _08076A46
adds r0, r5, #0
adds r0, #0xab
movs r1, #3
strb r1, [r0]
movs r1, #0xa6
lsls r1, r1, #2
adds r0, r4, #0
bl sub_08077DF4
adds r0, r4, #0
movs r1, #0xc
bl CreatePlayerBomb
adds r5, r0, #0
cmp r5, #0
beq _08076A70
ldr r6, _08076A34 @ =gSave
adds r4, r6, #0
adds r4, #0xb4
ldrb r0, [r4]
bl ItemIsSword
cmp r0, #0
beq _08076A38
ldrb r1, [r4]
b _08076A3E
.align 2, 0
_08076A34: .4byte gSave
_08076A38:
adds r0, r6, #0
adds r0, #0xb5
ldrb r1, [r0]
_08076A3E:
adds r0, r5, #0
adds r0, #0x68
strb r1, [r0]
b _08076A7E
_08076A46:
ldr r0, _08076A5C @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _08076A60
adds r1, #0x84
adds r0, r4, #0
bl sub_08077DF4
b _08076A7E
.align 2, 0
_08076A5C: .4byte gPlayerState
_08076A60:
ldr r1, _08076A6C @ =gPlayerState
movs r0, #0xc1
lsls r0, r0, #4
strh r0, [r1, #8]
b _08076A7E
.align 2, 0
_08076A6C: .4byte gPlayerState
_08076A70:
ldr r1, _08076A84 @ =gPlayerState
movs r0, #0
strb r0, [r1, #0x1e]
adds r0, r4, #0
adds r1, r6, #0
bl sub_08077E78
_08076A7E:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08076A84: .4byte gPlayerState
.syntax divided
@@ -1,123 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r7, r1, #0
bl sub_08077EFC
cmp r0, #0
beq _08076B64
ldr r1, _08076AB4 @ =gPlayerState
ldrb r0, [r1, #0x1e]
adds r3, r1, #0
cmp r0, #0
beq _08076B64
ldr r0, [r3, #0x30]
movs r1, #0x80
ands r0, r1
cmp r0, #0
bne _08076ABC
ldr r1, _08076AB8 @ =gPlayerEntity
movs r0, #0xc0
lsls r0, r0, #2
b _08076AC2
.align 2, 0
_08076AB4: .4byte gPlayerState
_08076AB8: .4byte gPlayerEntity
_08076ABC:
ldr r1, _08076B00 @ =gPlayerEntity
movs r0, #0xa0
lsls r0, r0, #2
_08076AC2:
strh r0, [r1, #0x24]
adds r5, r1, #0
ldr r1, _08076B04 @ =gUnk_0800275C
ldrb r2, [r5, #0x14]
movs r6, #0xe
adds r0, r6, #0
ands r0, r2
lsls r0, r0, #3
adds r0, r0, r1
ldrh r1, [r0]
ldrh r0, [r5, #0x2a]
ands r0, r1
cmp r1, r0
bne _08076B0E
ldrb r0, [r4, #8]
cmp r0, #0
beq _08076B08
movs r2, #0
movs r0, #6
strb r0, [r5, #0xc]
strb r2, [r5, #0xd]
ldrb r1, [r5, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r5, #0x10]
adds r0, r3, #0
adds r0, #0x38
strb r2, [r0]
movs r0, #0xff
strb r0, [r3, #0xd]
b _08076B72
.align 2, 0
_08076B00: .4byte gPlayerEntity
_08076B04: .4byte gUnk_0800275C
_08076B08:
movs r0, #1
strb r0, [r4, #8]
b _08076B72
_08076B0E:
ldr r1, _08076B60 @ =gUnk_0811BE38
movs r0, #0xfe
ands r0, r2
adds r0, r0, r1
adds r1, r3, #0
adds r1, #0x90
ldrh r2, [r0]
ldrh r0, [r1]
ands r0, r2
cmp r0, #0
bne _08076B64
ldrb r0, [r4, #0xa]
adds r1, r6, #0
ands r1, r0
lsls r0, r1, #2
strb r0, [r4, #0xb]
ldrb r2, [r3, #0xd]
cmp r2, #0xff
beq _08076B52
cmp r2, r0
beq _08076B52
adds r0, r2, #0
ldrb r1, [r4, #0xb]
subs r0, r0, r1
movs r2, #0x1f
ands r0, r2
cmp r0, #0xf
bgt _08076B4A
adds r0, r1, #2
strb r0, [r4, #0xb]
_08076B4A:
ldrb r0, [r4, #0xb]
subs r0, #1
ands r0, r2
strb r0, [r4, #0xb]
_08076B52:
ldrb r0, [r4, #0xb]
strb r0, [r3, #0xd]
adds r0, r4, #0
bl UpdateItemAnim
b _08076B72
.align 2, 0
_08076B60: .4byte gUnk_0811BE38
_08076B64:
ldr r1, _08076B74 @ =gPlayerState
movs r0, #0
strb r0, [r1, #0x1e]
adds r0, r4, #0
adds r1, r7, #0
bl sub_08077E78
_08076B72:
pop {r4, r5, r6, r7, pc}
.align 2, 0
_08076B74: .4byte gPlayerState
.syntax divided
-10
View File
@@ -1,10 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_0811BDCC:: @ 0811BDCC
.4byte sub_080768F8
.4byte sub_08076964
.4byte sub_08076A88
+1 -1
View File
@@ -1344,7 +1344,7 @@ SECTIONS {
data/const/item/itemBow.o(.rodata);
data/const/item/itemBomb.o(.rodata);
data/const/item/itemTryPickupObject.o(.rodata);
data/const/item/itemPegasusBoots.o(.rodata);
src/item/itemPegasusBoots.o(.rodata);
data/const/item/itemOcarina.o(.rodata);
data/const/item/itemPacciCane.o(.rodata);
data/const/item/itemShield.o(.rodata);
+103 -5
View File
@@ -3,12 +3,24 @@
#include "sound.h"
#include "functions.h"
#include "effects.h"
extern void (*const gUnk_0811BDCC[])(ItemBehavior* beh, u32);
#include "game.h"
#include "save.h"
void sub_08076964(ItemBehavior*, u32);
void sub_080768F8(ItemBehavior*, u32);
void sub_08076A88(ItemBehavior*, u32);
extern bool32 sub_0807A158();
extern Entity* CreatePlayerBomb(ItemBehavior*, u32);
extern u16 gUnk_0800275C[];
extern u8 gUnk_0811BE38[];
void ItemPegasusBoots(ItemBehavior* this, u32 arg1) {
static void (*const ItemPegasusBoots_StateFunctions[])(ItemBehavior * beh, u32) = {
sub_080768F8,
sub_08076964,
sub_08076A88,
};
u32 bVar1;
Entity* fx;
u32 uVar4;
@@ -44,7 +56,7 @@ void ItemPegasusBoots(ItemBehavior* this, u32 arg1) {
}
}
}
gUnk_0811BDCC[this->stateID](this, arg1);
ItemPegasusBoots_StateFunctions[this->stateID](this, arg1);
}
}
@@ -72,6 +84,92 @@ void sub_080768F8(ItemBehavior* this, u32 arg1) {
}
}
ASM_FUNC("asm/non_matching/itemPegasusBoots/sub_08076964.inc", void sub_08076964(ItemBehavior* this, u32 arg1))
void sub_08076964(ItemBehavior* this, u32 arg1) {
Entity* bombEntity;
u32 uVar3;
if (sub_08077EFC(this) && gPlayerEntity.z.WORD == 0 && gPlayerState.dash_state) {
UpdateItemAnim(this);
ASM_FUNC("asm/non_matching/itemPegasusBoots/sub_08076A88.inc", void sub_08076A88(ItemBehavior* this, u32 arg1))
if ((gPlayerState.flags & PL_MINISH) == 0) {
UpdateItemAnim(this);
}
if ((++gPlayerState.dash_state) == 0x1e) {
if ((gPlayerState.flags & PL_FLAGS2) != 0) {
gPlayerState.dash_state = 0;
sub_08077E78(this, arg1);
return;
}
gPlayerState.dash_state = 0x40;
gPlayerState.field_0xa &= ~(8 >> arg1);
this->stateID++;
if (sub_0807A158() && (gPlayerState.flags & PL_MINISH) == 0 && (gPlayerState.field_0xac & 4) != 0) {
gPlayerState.field_0xab = 3;
sub_08077DF4(this, 0x298);
bombEntity = CreatePlayerBomb(this, 0xc);
if (bombEntity != NULL) {
if (ItemIsSword(gSave.stats.itemButtons[SLOT_A]) != 0) {
uVar3 = gSave.stats.itemButtons[SLOT_A];
} else {
uVar3 = gSave.stats.itemButtons[SLOT_B];
}
bombEntity->field_0x68.HALF.LO = uVar3;
return;
}
} else if ((gPlayerState.flags & PL_MINISH) == 0) {
sub_08077DF4(this, 0x104);
return;
} else {
gPlayerState.animation = 0xc10;
return;
}
} else {
return;
}
}
gPlayerState.dash_state = 0;
sub_08077E78(this, arg1);
}
void sub_08076A88(ItemBehavior* this, u32 arg1) {
u32 uVar1;
u32 uVar2;
u8* ptr;
if ((sub_08077EFC(this) != 0) && (gPlayerState.dash_state != 0)) {
if ((gPlayerState.flags & PL_MINISH) == 0) {
gPlayerEntity.speed = 0x300;
} else {
gPlayerEntity.speed = 0x280;
}
uVar2 = gUnk_0800275C[(gPlayerEntity.animationState & 0xe) * 4];
if (uVar2 == (gPlayerEntity.collisions & uVar2)) {
if (this->field_0x5[3] != 0) {
gPlayerEntity.action = 6;
gPlayerEntity.subAction = 0;
COLLISION_OFF(&gPlayerEntity);
gPlayerState.field_0x38 = 0;
gPlayerState.field_0xd = 0xff;
return;
}
this->field_0x5[3] = 1;
return;
}
ptr = gUnk_0811BE38;
if ((*(u16*)&ptr[(gPlayerEntity.animationState & 0xfe)] & gPlayerState.field_0x90) == 0) {
this->field_0x5[6] = (this->field_0x5[5] & 0xe) * 4;
if ((gPlayerState.field_0xd != 0xff) && (gPlayerState.field_0xd != this->field_0x5[6])) {
if (((gPlayerState.field_0xd - this->field_0x5[6]) & 0x1f) < 0x10) {
this->field_0x5[6] = this->field_0x5[6] + 2;
}
this->field_0x5[6]--;
this->field_0x5[6] &= 0x1f;
}
gPlayerState.field_0xd = this->field_0x5[6];
UpdateItemAnim(this);
return;
}
}
gPlayerState.dash_state = 0;
sub_08077E78(this, arg1);
}