Skip to content

Commit

Permalink
[Sonic Frontiers] Enhanced Homing Attack Rebound Fixes (#120)
Browse files Browse the repository at this point in the history
* [Sonic Frontiers] Enhanced Homing Attack Rebound Fixes

Added skydiving check to fix skydiving sections with enemies like Bridge the Gap and Spider
Added Enemy Health check to fix skills activating when they shouldn't

* Update Enhanced Homing Attack Rebound.hmm

* Update Enhanced Homing Attack Rebound.hmm

* Update Enhanced Homing Attack Rebound.hmm
  • Loading branch information
theblazingrush authored Feb 16, 2024
1 parent 7b658c6 commit 319c028
Showing 1 changed file with 45 additions and 19 deletions.
64 changes: 45 additions & 19 deletions Source/Sonic Frontiers/Physics/Enhanced Homing Attack Rebound.hmm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Notes;
#include "Reflection" noemit

#lib "AmyParameters"
#lib "GameObject"
#lib "HMM"
#lib "KnucklesParameters"
#lib "Lua"
Expand All @@ -27,6 +28,8 @@ Notes;
static bool isHomingAttack = false;
static bool isInitialized = false;
static bool useTrickAnim = false;
static bool isDive = false;
static bool isEnemy = false;
static float homingTime = 0.3f;
static float currentTime = 0;
static string[] animRand = new[] { "U", "D", "L", "R" };
Expand All @@ -47,7 +50,30 @@ Notes;
if (BlackboardStatus.IsSuper())
return;

if (Player.State.GetCurrentStateID<Sonic.StateID>() == Sonic.StateID.StateHomingFinished && Player.State.GetPreviousStateID<Sonic.StateID>() != Sonic.StateID.StateHomingAttackInStorm)
if (IS_STATE_FLAG(IsDiving))
{
isDive = true;
}
else if (Player.Status.IsGroundedSpecial())
{
isDive = false;
}

var lockonTarget = Player.Status.GetLockOnTarget();

if (lockonTarget != null)
{
if (GameObject.GetGOC(lockonTarget, "GOCHealth") != null)
{
isEnemy = true;
}
else
{
isEnemy = false;
}
}

if (Player.State.GetCurrentStateID<Sonic.StateID>() == Sonic.StateID.StateHomingFinished && Player.State.GetPreviousStateID<Sonic.StateID>() != Sonic.StateID.StateHomingAttackInStorm && !isDive)
{
Player.State.SetState<Sonic.StateID>(Sonic.StateID.StateRecoveryJump);
//Temporarily disable Homing Attack to prevent no delay spamming
Expand Down Expand Up @@ -112,20 +138,20 @@ Notes;

if (SonicParametersInfo.pData != null)
{
//Restoring the ability to use combo skills out of Homing Attack
//Restoring the ability to use combo skills out of Homing Attack only if the target is an enemy
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack && isEnemy ? SonicParameters.Action.AcceleCombo1 : SonicParameters.Action.HomingAttack));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[1], (isHomingAttack && isEnemy ? SonicParameters.Action.ChargeAttack : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[2], (isHomingAttack && isEnemy ? SonicParameters.Action.QuickCyloop : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[3], (isHomingAttack && isEnemy ? SonicParameters.Action.SpinSlash : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[4], (isHomingAttack && isEnemy ? SonicParameters.Action.Stomping : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[5], (isHomingAttack && isEnemy ? SonicParameters.Action.SonicBoom : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack && isEnemy ? SonicParameters.Action.AerialAcceleCombo1 : SonicParameters.Action.AerialHomingAttack));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[1], (isHomingAttack && isEnemy ? SonicParameters.Action.ChargeAttack : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[2], (isHomingAttack && isEnemy ? SonicParameters.Action.AerialQuickCyloop : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[4], (isHomingAttack && isEnemy ? SonicParameters.Action.Stomping : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[5], (isHomingAttack && isEnemy ? SonicParameters.Action.SonicBoom : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.commonPackage.attack.homingAttack.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(SonicParametersInfo, common.commonPackage.attack.homingAttackAir.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack ? SonicParameters.Action.AcceleCombo1 : SonicParameters.Action.HomingAttack));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[1], (isHomingAttack ? SonicParameters.Action.ChargeAttack : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[2], (isHomingAttack ? SonicParameters.Action.QuickCyloop : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[3], (isHomingAttack ? SonicParameters.Action.SpinSlash : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[4], (isHomingAttack ? SonicParameters.Action.Stomping : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitExistTarget[5], (isHomingAttack ? SonicParameters.Action.SonicBoom : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack ? SonicParameters.Action.AerialAcceleCombo1 : SonicParameters.Action.AerialHomingAttack));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[1], (isHomingAttack ? SonicParameters.Action.ChargeAttack : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[2], (isHomingAttack ? SonicParameters.Action.AerialQuickCyloop : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[4], (isHomingAttack ? SonicParameters.Action.Stomping : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, common.combo.comboTable.root.transitInAir[5], (isHomingAttack ? SonicParameters.Action.SonicBoom : SonicParameters.Action.Root));
RFL_SET_PARAM(SonicParametersInfo, forwardView.modePackage.homingAttack.sonicBounce.bounceHorzSpeed, 2.5f);
RFL_SET_PARAM(SonicParametersInfo, cyberspace.modePackage.homingAttack.sonicBounce.bounceHorzSpeed, 2.5f);
RFL_SET_PARAM(SonicParametersInfo, cyberspaceSV.modePackage.homingAttack.sonicBounce.bounceHorzSpeed, -2.5f);
Expand All @@ -136,10 +162,10 @@ Notes;

if (AmyParametersInfo.pData != null)
{
RFL_SET_PARAM(AmyParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack && isEnemy ? AmyParameters.Action.AmyTarotAttack : AmyParameters.Action.HomingAttack));
RFL_SET_PARAM(AmyParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack && isEnemy ? AmyParameters.Action.AmyTarotAttack : AmyParameters.Action.HomingAttack));
RFL_SET_PARAM(AmyParametersInfo, common.commonPackage.attack.homingAttack.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(AmyParametersInfo, common.commonPackage.attack.homingAttackAir.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(AmyParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack ? AmyParameters.Action.AmyTarotAttack : AmyParameters.Action.HomingAttack));
RFL_SET_PARAM(AmyParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack ? AmyParameters.Action.AmyTarotAttack : AmyParameters.Action.HomingAttack));
RFL_SET_PARAM(AmyParametersInfo, forwardView.modePackage.homingAttack.sonicBounce.bounceVertSpeed, 17.0f);
RFL_SET_PARAM(AmyParametersInfo, forwardView.modePackage.homingAttack.sonicBounce.bounceHorzSpeed, 2.5f);
RFL_SET_PARAM(AmyParametersInfo, forwardView.modePackage.homingAttack.sonicBounceWeak.bounceVertSpeed, 12.0f);
Expand All @@ -152,12 +178,12 @@ Notes;

if (KnucklesParametersInfo.pData != null)
{
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack && isEnemy ? KnucklesParameters.Action.KnucklesPunch1 : KnucklesParameters.Action.HomingAttack));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitExistTarget[4], (isHomingAttack && isEnemy ? KnucklesParameters.Action.Stomping : KnucklesParameters.Action.Root));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack && isEnemy ? KnucklesParameters.Action.KnucklesPunch1 : KnucklesParameters.Action.HomingAttack));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitInAir[4], (isHomingAttack && isEnemy ? KnucklesParameters.Action.Stomping : KnucklesParameters.Action.Root));
RFL_SET_PARAM(KnucklesParametersInfo, common.commonPackage.attack.homingAttack.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(KnucklesParametersInfo, common.commonPackage.attack.homingAttackAir.hitStopNameDead.pValue, 0);
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitExistTarget[0], (isHomingAttack ? KnucklesParameters.Action.KnucklesPunch1 : KnucklesParameters.Action.HomingAttack));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitExistTarget[4], (isHomingAttack ? KnucklesParameters.Action.Stomping : KnucklesParameters.Action.Root));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitInAir[0], (isHomingAttack ? KnucklesParameters.Action.KnucklesPunch1 : KnucklesParameters.Action.HomingAttack));
RFL_SET_PARAM(KnucklesParametersInfo, common.combo.comboTable.root.transitInAir[4], (isHomingAttack ? KnucklesParameters.Action.Stomping : KnucklesParameters.Action.Root));
RFL_SET_PARAM(KnucklesParametersInfo, forwardView.modePackage.homingAttack.sonicBounce.bounceVertSpeed, 17.0f);
RFL_SET_PARAM(KnucklesParametersInfo, forwardView.modePackage.homingAttack.sonicBounce.bounceHorzSpeed, 2.5f);
RFL_SET_PARAM(KnucklesParametersInfo, forwardView.modePackage.homingAttack.sonicBounceWeak.bounceVertSpeed, 12.0f);
Expand Down

0 comments on commit 319c028

Please sign in to comment.