This commit is contained in:
Eric Hoey 2024-04-10 22:34:04 +00:00 committed by GitHub
commit 5f455bfa03
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 73 additions and 5 deletions

View File

@ -231,6 +231,8 @@ const std::vector<const char*> enhancementsCvars = {
"gAuthenticLogo",
"gPauseLiveLinkRotationSpeed",
"gBowReticle",
"gBoomerangFirstPerson",
"gBoomerangReticle",
"gFixTexturesOOB",
"gIvanCoopModeEnabled",
"gEnemySpawnsOverWaterboxes",

View File

@ -708,6 +708,17 @@ void DrawEnhancementsMenu() {
UIWidgets::Tooltip("Prevent bombchus from forcing the camera into first-person mode when released.");
UIWidgets::PaddedEnhancementCheckbox("Aiming reticle for the bow/slingshot", "gBowReticle", true, false);
UIWidgets::Tooltip("Aiming with a bow or slingshot will display a reticle as with the hookshot when the projectile is ready to fire.");
if (UIWidgets::PaddedEnhancementCheckbox("Aim boomerang in first-person mode", "gBoomerangFirstPerson", true, false)) {
if (CVarGetInteger("gBoomerangFirstPerson", 0) == 0) {
CVarSetInteger("gBoomerangReticle", 0);
}
}
UIWidgets::Tooltip(
"Change aiming for the boomerang from third person to first person to see past Link's head");
if (CVarGetInteger("gBoomerangFirstPerson", 0) == 1) {
UIWidgets::PaddedEnhancementCheckbox("Aiming reticle for boomerang", "gBoomerangReticle", true, false);
UIWidgets::Tooltip("Aiming with the boomerang will display a reticle as with the hookshot");
}
if (UIWidgets::PaddedEnhancementCheckbox("Allow strength equipment to be toggled", "gToggleStrength", true, false)) {
if (!CVarGetInteger("gToggleStrength", 0)) {
CVarSetInteger("gStrengthDisabled", 0);

View File

@ -858,6 +858,16 @@ s32 Player_HoldsSlingshot(Player* this) {
return this->heldItemAction == PLAYER_IA_SLINGSHOT;
}
// #region SOH [Enhancement]
s32 Player_HoldsBoomerang(Player* this) {
return this->heldItemAction == PLAYER_IA_BOOMERANG;
}
s32 Player_AimsBoomerang(Player* this) {
return Player_HoldsBoomerang(this) && (this->unk_834 != 0);
}
// #endregion
s32 func_8008F128(Player* this) {
return Player_HoldsHookshot(this) && (this->heldActor == NULL);
}
@ -1917,6 +1927,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
play, this, ((this->heldItemAction == PLAYER_IA_HOOKSHOT) ? 38600.0f : 77600.0f) * CVarGetFloat("gCheatHookshotReachMultiplier", 1.0f));
}
}
// #region SOH [Enhancement]
} else if (CVarGetInteger("gBowReticle", 0) && (
(this->heldItemAction == PLAYER_IA_BOW_FIRE) ||
(this->heldItemAction == PLAYER_IA_BOW_ICE) ||
@ -1935,6 +1946,24 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Player_DrawHookshotReticle(play, this, RETICLE_MAX);
}
}
} else if (CVarGetInteger("gBoomerangReticle", 0) && (this->heldItemAction == PLAYER_IA_BOOMERANG)) {
if (Player_HoldsBoomerang(this) != 0) {
MtxF sp44;
s32 pad;
if (LINK_AGE_IN_YEARS == YEARS_ADULT) {
Matrix_RotateZYX(-31200, -9200, 17000, MTXMODE_APPLY);
} else {
Matrix_RotateZYX(-31200, -8700, 17000, MTXMODE_APPLY);
}
Matrix_Get(&sp44);
if (Player_AimsBoomerang(this) != 0) {
Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY);
Player_DrawHookshotReticle(play, this, 37000.0f);
}
}
// #endregion
}
if ((this->unk_862 != 0) || ((func_8002DD6C(this) == 0) && (heldActor != NULL))) {

View File

@ -2977,7 +2977,14 @@ s32 func_808358F0(Player* this, PlayState* play) {
AnimationContext_SetCopyAll(play, this->skelAnime.limbCount, this->upperSkelAnime.jointTable,
this->skelAnime.jointTable);
} else {
LinkAnimation_Update(play, &this->upperSkelAnime);
// #region SOH [Enhancement]
if (CVarGetInteger("gBoomerangReticle", 0) == 1) {
// don't play animation
// #endregion
}
else {
LinkAnimation_Update(play, &this->upperSkelAnime);
}
}
func_80834EB8(this, play);
@ -5361,7 +5368,13 @@ s32 func_8083AD4C(PlayState* play, Player* this) {
cameraMode = shouldUseBowCamera ? CAM_MODE_BOWARROW : CAM_MODE_SLINGSHOT;
} else {
cameraMode = CAM_MODE_BOOMERANG;
// #region SOH [Enhancement]
if (CVarGetInteger("gBoomerangFirstPerson", 0)) {
cameraMode = CAM_MODE_FIRSTPERSON;
// #endregion
} else {
cameraMode = CAM_MODE_BOOMERANG;
}
}
} else {
cameraMode = CAM_MODE_FIRSTPERSON;
@ -10861,7 +10874,13 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
camMode = CAM_MODE_TALK;
} else if (this->stateFlags1 & PLAYER_STATE1_TARGET_LOCKED) {
if (this->stateFlags1 & PLAYER_STATE1_THREW_BOOMERANG) {
camMode = CAM_MODE_FOLLOWBOOMERANG;
// #region SOH [Enhancement]
if (CVarGetInteger("gBoomerangFirstPerson", 0) == 1) {
camMode = CAM_MODE_TARGET;
// #endregion
} else {
camMode = CAM_MODE_FOLLOWBOOMERANG;
}
} else {
camMode = CAM_MODE_FOLLOWTARGET;
}
@ -10872,8 +10891,15 @@ void Player_UpdateCamAndSeqModes(PlayState* play, Player* this) {
} else if (this->stateFlags1 & PLAYER_STATE1_CHARGING_SPIN_ATTACK) {
camMode = CAM_MODE_CHARGE;
} else if (this->stateFlags1 & PLAYER_STATE1_THREW_BOOMERANG) {
camMode = CAM_MODE_FOLLOWBOOMERANG;
Camera_SetParam(Play_GetCamera(play, 0), 8, this->boomerangActor);
// #region SOH [Enhancement]
if (CVarGetInteger("gBoomerangFirstPerson", 0)) {
camMode = CAM_MODE_TARGET;
Camera_SetParam(Play_GetCamera(play, 0), 8, this->boomerangActor);
// #endregion
} else {
camMode = CAM_MODE_FOLLOWBOOMERANG;
Camera_SetParam(Play_GetCamera(play, 0), 8, this->boomerangActor);
}
} else if (this->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE)) {
if (func_80833B2C(this)) {
camMode = CAM_MODE_HANGZ;