mirror of
https://github.com/zeldaret/tmc
synced 2026-06-07 20:11:29 -04:00
Merge pull request #358 from hatal175/pegasusboots
This commit is contained in:
+103
-5
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user