mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-16 23:30:15 -05:00
Add instant boomerang recall (#1006)
This commit is contained in:
parent
a4334ecb02
commit
f80ba4102a
@ -1062,6 +1062,8 @@ namespace SohImGui {
|
|||||||
Tooltip("Skip the part where the Ocarina playback is called when you play a song");
|
Tooltip("Skip the part where the Ocarina playback is called when you play a song");
|
||||||
EnhancementCheckbox("Prevent Dropped Ocarina Inputs", "gDpadNoDropOcarinaInput");
|
EnhancementCheckbox("Prevent Dropped Ocarina Inputs", "gDpadNoDropOcarinaInput");
|
||||||
Tooltip("Prevent dropping inputs when playing the ocarina quickly");
|
Tooltip("Prevent dropping inputs when playing the ocarina quickly");
|
||||||
|
EnhancementCheckbox("Instant Boomerang Recall", "gFastBoomerang");
|
||||||
|
Tooltip("Instantly return the boomerang to Link by pressing its item button while it's in the air");
|
||||||
EnhancementCheckbox("Instant Putaway", "gInstantPutaway");
|
EnhancementCheckbox("Instant Putaway", "gInstantPutaway");
|
||||||
Tooltip("Allow Link to put items away without having to wait around");
|
Tooltip("Allow Link to put items away without having to wait around");
|
||||||
EnhancementCheckbox("Mask Select in Inventory", "gMaskSelect");
|
EnhancementCheckbox("Mask Select in Inventory", "gMaskSelect");
|
||||||
|
@ -626,6 +626,7 @@ typedef struct Player {
|
|||||||
/* 0x0A87 */ u8 unk_A87;
|
/* 0x0A87 */ u8 unk_A87;
|
||||||
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
/* 0x0A88 */ Vec3f unk_A88; // previous body part 0 position
|
||||||
/* 0x0A94 */ PendingFlag pendingFlag;
|
/* 0x0A94 */ PendingFlag pendingFlag;
|
||||||
} Player; // size = 0xAA0
|
/* 0x0AA0 */ u8 boomerangQuickRecall; // Has the player pressed the boomerang button while it's in the air still?
|
||||||
|
} Player; // size = 0xAA1
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -167,12 +167,12 @@ void EnBoom_Fly(EnBoom* this, GlobalContext* globalCtx) {
|
|||||||
|
|
||||||
// Decrement the return timer and check if it's 0. If it is, check if Link can catch it and handle accordingly.
|
// Decrement the return timer and check if it's 0. If it is, check if Link can catch it and handle accordingly.
|
||||||
// Otherwise handle grabbing and colliding.
|
// Otherwise handle grabbing and colliding.
|
||||||
if (DECR(this->returnTimer) == 0) {
|
if (DECR(this->returnTimer) == 0 || player->boomerangQuickRecall) {
|
||||||
distFromLink = Math_Vec3f_DistXYZ(&this->actor.world.pos, &player->actor.focus.pos);
|
distFromLink = Math_Vec3f_DistXYZ(&this->actor.world.pos, &player->actor.focus.pos);
|
||||||
this->moveTo = &player->actor;
|
this->moveTo = &player->actor;
|
||||||
|
|
||||||
// If the boomerang is less than 40 units away from Link, he can catch it.
|
// If the boomerang is less than 40 units away from Link, he can catch it.
|
||||||
if (distFromLink < 40.0f) {
|
if (distFromLink < 40.0f || player->boomerangQuickRecall) {
|
||||||
target = this->grabbed;
|
target = this->grabbed;
|
||||||
if (target != NULL) {
|
if (target != NULL) {
|
||||||
Math_Vec3f_Copy(&target->world.pos, &player->actor.world.pos);
|
Math_Vec3f_Copy(&target->world.pos, &player->actor.world.pos);
|
||||||
@ -187,7 +187,8 @@ void EnBoom_Fly(EnBoom* this, GlobalContext* globalCtx) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Set player flags and kill the boomerang beacause Link caught it.
|
// Set player flags and kill the boomerang beacause Link caught it.
|
||||||
player->stateFlags1 &= ~0x02000000;
|
player->stateFlags1 &= ~PLAYER_STATE1_25;
|
||||||
|
player->boomerangQuickRecall = false;
|
||||||
Actor_Kill(&this->actor);
|
Actor_Kill(&this->actor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -146,10 +146,10 @@ s32 func_808353D8(Player* this, GlobalContext* globalCtx);
|
|||||||
s32 func_80835588(Player* this, GlobalContext* globalCtx);
|
s32 func_80835588(Player* this, GlobalContext* globalCtx);
|
||||||
s32 func_808356E8(Player* this, GlobalContext* globalCtx);
|
s32 func_808356E8(Player* this, GlobalContext* globalCtx);
|
||||||
s32 func_80835800(Player* this, GlobalContext* globalCtx);
|
s32 func_80835800(Player* this, GlobalContext* globalCtx);
|
||||||
s32 func_80835884(Player* this, GlobalContext* globalCtx);
|
s32 func_80835884(Player* this, GlobalContext* globalCtx); // Start aiming boomerang
|
||||||
s32 func_808358F0(Player* this, GlobalContext* globalCtx);
|
s32 func_808358F0(Player* this, GlobalContext* globalCtx); // Aim boomerang
|
||||||
s32 func_808359FC(Player* this, GlobalContext* globalCtx);
|
s32 func_808359FC(Player* this, GlobalContext* globalCtx); // Throw boomerang
|
||||||
s32 func_80835B60(Player* this, GlobalContext* globalCtx);
|
s32 func_80835B60(Player* this, GlobalContext* globalCtx); // Boomerang active
|
||||||
s32 func_80835C08(Player* this, GlobalContext* globalCtx);
|
s32 func_80835C08(Player* this, GlobalContext* globalCtx);
|
||||||
void func_80835F44(GlobalContext* globalCtx, Player* this, s32 item);
|
void func_80835F44(GlobalContext* globalCtx, Player* this, s32 item);
|
||||||
void func_80839F90(Player* this, GlobalContext* globalCtx);
|
void func_80839F90(Player* this, GlobalContext* globalCtx);
|
||||||
@ -487,8 +487,8 @@ static s32 D_80853604 = 0;
|
|||||||
static s32 D_80853608 = 0;
|
static s32 D_80853608 = 0;
|
||||||
static s32 D_8085360C = 0;
|
static s32 D_8085360C = 0;
|
||||||
static s16 D_80853610 = 0;
|
static s16 D_80853610 = 0;
|
||||||
static s32 D_80853614 = 0;
|
static s32 D_80853614 = 0; // Held item button just pressed?
|
||||||
static s32 D_80853618 = 0;
|
static s32 D_80853618 = 0; // Held item button currently down?
|
||||||
|
|
||||||
static u16 D_8085361C[] = {
|
static u16 D_8085361C[] = {
|
||||||
NA_SE_VO_LI_SWEAT,
|
NA_SE_VO_LI_SWEAT,
|
||||||
@ -955,6 +955,7 @@ static s8 sItemActionParams[] = {
|
|||||||
|
|
||||||
static u8 sMaskMemory;
|
static u8 sMaskMemory;
|
||||||
|
|
||||||
|
// Used to map action params to update functions
|
||||||
static s32(*D_80853EDC[])(Player* this, GlobalContext* globalCtx) = {
|
static s32(*D_80853EDC[])(Player* this, GlobalContext* globalCtx) = {
|
||||||
func_8083485C, func_8083485C, func_8083485C, func_808349DC, func_808349DC, func_808349DC, func_8083485C,
|
func_8083485C, func_8083485C, func_8083485C, func_808349DC, func_808349DC, func_808349DC, func_8083485C,
|
||||||
func_8083485C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C,
|
func_8083485C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C, func_8083501C,
|
||||||
@ -2729,6 +2730,10 @@ s32 func_80835B60(Player* this, GlobalContext* globalCtx) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (D_80853614 && CVar_GetS32("gFastBoomerang", 0)) {
|
||||||
|
this->boomerangQuickRecall = true;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user