Skip to content

Commit

Permalink
Fixes and new experimental options
Browse files Browse the repository at this point in the history
  • Loading branch information
DesertBoss committed Jan 20, 2023
1 parent 4ac0022 commit 0e6b6e2
Show file tree
Hide file tree
Showing 8 changed files with 167 additions and 38 deletions.
15 changes: 8 additions & 7 deletions Patches/HangarsPatches.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@

namespace SandSpace
{
// SymbolExtensions
// Transpilers
// AccessTools

internal class HangarsPatches
{
internal static void OnGameLoad ()
{
FixActiveInBattle ();

}

internal static void OnNewGame ()
{
FixActiveInBattle ();

}

internal static void OnSetupPerks ()
{
FixActiveStrikeCraftInBattle ();
}

[HarmonyPatch (typeof (HangarConfig), "DisplayAllHangars")]
Expand Down Expand Up @@ -77,7 +78,7 @@ private static void Postfix (ref int __result, ref int hangarIndex)
}
}

private static void FixActiveInBattle ()
private static void FixActiveStrikeCraftInBattle ()
{
if (SandSpaceMod.Settings.maxActiveHangars > 4)
{
Expand Down
89 changes: 67 additions & 22 deletions Patches/PerkPatches.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,32 @@ internal class PerkPatches
{
internal static void OnGameLoad ()
{
PerkOverride ();

}

internal static void OnNewGame ()
{
PerkOverride ();

}

[HarmonyPatch (typeof (PerkCategoryManager), "SetupPerks")]
private static class PerkCategoryManager_SetupPerks_Patch
{
private static void Postfix (ref PerkCategoryManager __instance)
{
PerkOverride (ref __instance);
HangarsPatches.OnSetupPerks ();
FixMaxLevelFromPerks (ref __instance);
FixInfPerksUnlockLevel (ref __instance);
}
}

[HarmonyPatch (typeof (PerkCategoryManager), "SetCoreUnlocking")]
private static class PerkCategoryManager_SetCoreUnlocking_Patch
{
private static void Postfix ()
{
PerkPatches.CoreUnlockingPatch ();
CoreUnlockingPatch ();
}
}

Expand All @@ -41,31 +53,64 @@ private static void CoreUnlockingPatch ()
}
}

internal static void PerkOverride ()
private static void FixMaxLevelFromPerks (ref PerkCategoryManager manager)
{
var man = GameManager.GetPerkManager ();
man.GetPerk (PerkType.Health_Inf).myPerkValue = SandSpaceMod.Settings.perkHealthInf / 100f;
man.GetPerk (PerkType.Armor_Inf).myPerkValue = SandSpaceMod.Settings.perkArmorInf / 100f;
man.GetPerk (PerkType.Capacitor_Inf).myPerkValue = SandSpaceMod.Settings.perkCapacitorInf / 100f;
man.GetPerk (PerkType.Reactor_Inf).myPerkValue = SandSpaceMod.Settings.perkReactorInf / 100f;
man.GetPerk (PerkType.WeaponDamage_Inf).myPerkValue = SandSpaceMod.Settings.perkWeaponDamageInf / 100f;
man.GetPerk (PerkType.Shield_Strength_Inf).myPerkValue = SandSpaceMod.Settings.perkShieldStrengthInf / 100f;
man.GetPerk (PerkType.StrikeCraftReserve_Inf).myPerkValue = SandSpaceMod.Settings.perkStrikeCraftReserveInf;

man.GetPerk (PerkType.StrikeCraftActive_1).myUnlockLevel = SandSpaceMod.Settings.hangar_1_unlockLevel;
man.GetPerk (PerkType.StrikeCraftActive_2).myUnlockLevel = SandSpaceMod.Settings.hangar_2_unlockLevel;
man.GetPerk (PerkType.StrikeCraftActive_3).myUnlockLevel = SandSpaceMod.Settings.hangar_3_unlockLevel;
man.GetPerk (PerkType.StrikeCraftActive_4).myUnlockLevel = SandSpaceMod.Settings.hangar_4_unlockLevel;
var perkLookup = PatchingExtension.GetPrivateFieldValue<Perk[]> (manager, "perkLookup");
var maxLvl = PatchingExtension.GetPrivateFieldValue<int> (manager, "maxLevel");
var newMaxLvl = 0;

foreach (var perk in perkLookup)
{
if (perk != null && perk.myUnlockLevel > 0 && !perk.isInfinite &&
!(perk.myClass == PerkClass.StrikeCraftSize || perk.myClass == PerkClass.Core
|| perk.myClass == PerkClass.PartSize || perk.myClass == PerkClass.StarBase
|| perk.myClass == PerkClass.Bounty || perk.myClass == PerkClass.Cloaking))
newMaxLvl++;
}

if (maxLvl != newMaxLvl)
SandSpaceMod.ModEntry.Logger.Log ($"FixMaxLevelFromPerks: old {maxLvl}, new {newMaxLvl}");

PatchingExtension.SetPrivateFieldValue (manager, "maxLevel", newMaxLvl);
}

private static void FixInfPerksUnlockLevel (ref PerkCategoryManager manager)
{
var maxLvl = PatchingExtension.GetPrivateFieldValue<int> (manager, "maxLevel");

manager.GetPerk (PerkType.Armor_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.Capacitor_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.Health_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.Reactor_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.Shield_Strength_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.StrikeCraftReserve_Inf).myUnlockLevel = maxLvl + 1;
manager.GetPerk (PerkType.WeaponDamage_Inf).myUnlockLevel = maxLvl + 1;
}

internal static void PerkOverride (ref PerkCategoryManager manager)
{
manager.GetPerk (PerkType.Health_Inf).myPerkValue = SandSpaceMod.Settings.perkHealthInf / 100f;
manager.GetPerk (PerkType.Armor_Inf).myPerkValue = SandSpaceMod.Settings.perkArmorInf / 100f;
manager.GetPerk (PerkType.Capacitor_Inf).myPerkValue = SandSpaceMod.Settings.perkCapacitorInf / 100f;
manager.GetPerk (PerkType.Reactor_Inf).myPerkValue = SandSpaceMod.Settings.perkReactorInf / 100f;
manager.GetPerk (PerkType.WeaponDamage_Inf).myPerkValue = SandSpaceMod.Settings.perkWeaponDamageInf / 100f;
manager.GetPerk (PerkType.Shield_Strength_Inf).myPerkValue = SandSpaceMod.Settings.perkShieldStrengthInf / 100f;
manager.GetPerk (PerkType.StrikeCraftReserve_Inf).myPerkValue = SandSpaceMod.Settings.perkStrikeCraftReserveInf;

manager.GetPerk (PerkType.StrikeCraftActive_1).myUnlockLevel = SandSpaceMod.Settings.hangar_1_unlockLevel;
manager.GetPerk (PerkType.StrikeCraftActive_2).myUnlockLevel = SandSpaceMod.Settings.hangar_2_unlockLevel;
manager.GetPerk (PerkType.StrikeCraftActive_3).myUnlockLevel = SandSpaceMod.Settings.hangar_3_unlockLevel;
manager.GetPerk (PerkType.StrikeCraftActive_4).myUnlockLevel = SandSpaceMod.Settings.hangar_4_unlockLevel;
}

internal static void SetDefaults ()
{
var man = GameManager.GetPerkManager ();
var manager = GameManager.GetPerkManager ();

SandSpaceMod.Settings.hangar_1_unlockLevel = man.GetPerk (PerkType.StrikeCraftActive_1).myUnlockLevel;
SandSpaceMod.Settings.hangar_2_unlockLevel = man.GetPerk (PerkType.StrikeCraftActive_2).myUnlockLevel;
SandSpaceMod.Settings.hangar_3_unlockLevel = man.GetPerk (PerkType.StrikeCraftActive_3).myUnlockLevel;
SandSpaceMod.Settings.hangar_4_unlockLevel = man.GetPerk (PerkType.StrikeCraftActive_4).myUnlockLevel;
SandSpaceMod.Settings.hangar_1_unlockLevel = manager.GetPerk (PerkType.StrikeCraftActive_1).myUnlockLevel;
SandSpaceMod.Settings.hangar_2_unlockLevel = manager.GetPerk (PerkType.StrikeCraftActive_2).myUnlockLevel;
SandSpaceMod.Settings.hangar_3_unlockLevel = manager.GetPerk (PerkType.StrikeCraftActive_3).myUnlockLevel;
SandSpaceMod.Settings.hangar_4_unlockLevel = manager.GetPerk (PerkType.StrikeCraftActive_4).myUnlockLevel;
}
}
}
25 changes: 25 additions & 0 deletions Patches/ShipPartsPatches.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HarmonyLib;
using UnityEngine;

namespace SandSpace.Patches
{
internal class ShipPartsPatches
{
[HarmonyPatch (typeof (ItemBuildInfo), "GetBoosterMult")]
private static class ItemBuildInfo_GetBoosterMult_Patch
{
private static void Postfix (ref ItemBuildInfo __instance, ref int __result)
{
ItemType itemType = __instance.GetPrefabRefObject().GetItemType();
if (GameManager.GetShipPartDatabase ().IsStationPart (itemType))
__result = Mathf.FloorToInt (__result * SandSpaceMod.Settings.stationPartsBoosterMult);
else
__result = Mathf.FloorToInt (__result * SandSpaceMod.Settings.shipPartsBoosterMult);
}
}
}
}
38 changes: 38 additions & 0 deletions Patches/StrikeCraftPatches.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using HarmonyLib;

namespace SandSpace.Patches
{
internal class StrikeCraftPatches
{
[HarmonyPatch (typeof (ItemBuildInfo), "GetStarStrengthMultiplierForStrikeCraft")]
private static class ItemBuildInfo_GetStarStrengthMultiplierForStrikeCraft_Patch
{
private static bool Prefix (ref float __result, ref int stars)
{
switch (stars)
{
case -1: __result = 1.0f;
break;
case 0: __result = 1.0f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 1: __result = 1.1f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 2: __result = 1.25f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 3: __result = 1.5f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 4: __result = 1.8f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 5: __result = 2.2f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
case 6: __result = 3.0f * SandSpaceMod.Settings.strikeCraftsStrengthMult;
break;
default: __result = 10.0f;
break;
}

return false;
}
}
}
}
19 changes: 14 additions & 5 deletions PatchingExtension.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@ namespace SandSpace
{
public static class PatchingExtension
{
//__instance
//__result
//__state
//___fields
//__args
public static void SetPrivateFieldValue (object obj, string fieldName, object value)
{
AccessTools.Field (obj.GetType (), fieldName).SetValue (obj, value);
Expand Down Expand Up @@ -52,3 +47,17 @@ public static List<string> GetGameObjectComponents (GameObject gameObject)
}
}
}

//-------------------------------------------------------------------------
//------------------------- TEST -----------------------------------
//-------------------------------------------------------------------------

//__instance
//__result
//__state
//___fields
//__args

// SymbolExtensions
// Transpilers
// AccessTools
2 changes: 2 additions & 0 deletions SandSpace.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@
<Compile Include="Patches\HazardPatches.cs" />
<Compile Include="Hooks\MainMenuHook.cs" />
<Compile Include="Patches\ResourcesPatces.cs" />
<Compile Include="Patches\ShipPartsPatches.cs" />
<Compile Include="Patches\StrikeCraftPatches.cs" />
<Compile Include="PatchingExtension.cs" />
<Compile Include="SandSpaceMod.cs" />
<Compile Include="Patches\PerkPatches.cs" />
Expand Down
8 changes: 4 additions & 4 deletions SandSpaceMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace SandSpace
{
public class SandSpaceMod
{
public const string version = "0.4.0";
public const string version = "0.4.1";

public static UnityModManager.ModEntry ModEntry { get; private set; }
public static Settings Settings { get; private set; }
Expand Down Expand Up @@ -93,11 +93,11 @@ private static void DynamicPathes ()

private static void ReloadHarmonyPatches ()
{
if (!SandSpaceMod.Settings._changed &&
SandSpaceMod.Settings._inGameLock)
if (!Settings._changed &&
Settings._inGameLock)
return;

Harmony.UnpatchAll (SandSpaceMod.ModEntry.Info.Id);
Harmony.UnpatchAll (ModEntry.Info.Id);
Harmony.PatchAll (Assembly.GetExecutingAssembly ());
DynamicPathes ();
}
Expand Down
9 changes: 9 additions & 0 deletions Settings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,15 @@ public class Settings : UnityModManager.ModSettings, IDrawable
[Draw ("┗━━ Rotation drag factor in outer space", Min = 0.01, Max = 1000)]
public float engineRotateDragMult = 1.0f;

[Draw ("┗━━ Extra stats multiplier for ship parts", Min = 0.01, Max = 1000)]
public float shipPartsBoosterMult = 1.0f;

[Draw ("┗━━ Extra stats multiplier for station parts", Min = 0.01, Max = 1000)]
public float stationPartsBoosterMult = 1.0f;

[Draw ("┗━━ Extra stats multiplier for strike crafts depending their skill", Min = 0.01, Max = 1000)]
public float strikeCraftsStrengthMult = 1.0f;

public override void Save (UnityModManager.ModEntry modEntry)
{
UnityModManager.ModSettings.Save<Settings> (this, modEntry);
Expand Down

0 comments on commit 0e6b6e2

Please sign in to comment.