diff --git a/Languages/English/Keyed/TM_English.xml b/Languages/English/Keyed/TM_English.xml
index 77604287..798e2604 100644
--- a/Languages/English/Keyed/TM_English.xml
+++ b/Languages/English/Keyed/TM_English.xml
@@ -309,7 +309,7 @@
Supporting Trait Commonality
-**Change class settings only when starting a new game**
+**Class settings only affect pawns created after changes**
**Any change requires a game restart**
Enabled Classes
Mages
diff --git a/Languages/Spanish/Keyed/TM_Spanish_Caferino.xml b/Languages/Spanish/Keyed/TM_Spanish_Caferino.xml
index 67d6fc5d..7109560c 100644
--- a/Languages/Spanish/Keyed/TM_Spanish_Caferino.xml
+++ b/Languages/Spanish/Keyed/TM_Spanish_Caferino.xml
@@ -176,7 +176,7 @@
-**Cambia la configuración de las clases solo al empezar un nuevo juego**
+**La configuración de clase solo afecta a los peones creados después del cambio**
**Cualquier cambio requiere un reinicio de juego**
Clases Habilitadas
Magos
diff --git a/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift.cs b/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift.cs
index 4d01a29f..013235b2 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift.cs
@@ -8,7 +8,7 @@
using UnityEngine;
using RimWorld;
using AbilityUser;
-
+using TorannMagic.ModOptions;
namespace TorannMagic
@@ -81,16 +81,15 @@ public override void Tick()
DetermineElementalType();
BeginAssaultCondition();
SpawnCycle();
- ModOptions.SettingsRef settings = new ModOptions.SettingsRef();
if (Find.Storyteller.difficulty.threatScale != 0)
{
this.STDMultiplier = (float)(Find.Storyteller.difficulty.threatScale / 20f);
}
- if(settings.riftChallenge < 2f)
+ if(Settings.Instance.riftChallenge < 2f)
{
this.difficultyMultiplier = 1f;
}
- else if(settings.riftChallenge < 3f)
+ else if(Settings.Instance.riftChallenge < 3f)
{
this.difficultyMultiplier = .85f;
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift_Defenders.cs b/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift_Defenders.cs
index 7d27a432..ad31ff9f 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift_Defenders.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/Building_TMElementalRift_Defenders.cs
@@ -8,7 +8,7 @@
using UnityEngine;
using RimWorld;
using AbilityUser;
-
+using TorannMagic.ModOptions;
namespace TorannMagic
@@ -85,16 +85,15 @@ public override void Tick()
DetermineElementalType();
BeginAssaultCondition();
SpawnCycle();
- ModOptions.SettingsRef settings = new ModOptions.SettingsRef();
if (Find.Storyteller.difficulty.threatScale != 0)
{
this.STDMultiplier = (float)(Find.Storyteller.difficulty.threatScale / 20f);
}
- if(settings.riftChallenge <= 3f)
+ if(Settings.Instance.riftChallenge <= 3f)
{
this.difficultyMultiplier = 1f;
}
- else if(settings.riftChallenge < 3f)
+ else if(Settings.Instance.riftChallenge < 3f)
{
this.difficultyMultiplier = .85f;
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMagic.cs b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMagic.cs
index ca8b2a5e..ec336a03 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMagic.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMagic.cs
@@ -17,7 +17,6 @@ namespace TorannMagic
{
[CompilerGenerated]
[Serializable]
- [StaticConstructorOnStartup]
public class CompAbilityUserMagic : CompAbilityUserTMBase
{
public string LabelKey = "TM_Magic";
@@ -3561,29 +3560,6 @@ private void LoadPowers()
}
}
- public void RemoveTraits()
- {
- List traits = this.Pawn.story.traits.allTraits;
- for (int i = 0; i < traits.Count; i++)
- {
- if (traits[i].def == TorannMagicDefOf.InnerFire || traits[i].def == TorannMagicDefOf.HeartOfFrost || traits[i].def == TorannMagicDefOf.StormBorn || traits[i].def == TorannMagicDefOf.Arcanist || traits[i].def == TorannMagicDefOf.Paladin ||
- traits[i].def == TorannMagicDefOf.Druid || traits[i].def == TorannMagicDefOf.Priest || traits[i].def == TorannMagicDefOf.Necromancer || traits[i].def == TorannMagicDefOf.Warlock || traits[i].def == TorannMagicDefOf.Succubus ||
- traits[i].def == TorannMagicDefOf.TM_Bard || traits[i].def == TorannMagicDefOf.Geomancer || traits[i].def == TorannMagicDefOf.Technomancer || traits[i].def == TorannMagicDefOf.BloodMage || traits[i].def == TorannMagicDefOf.Enchanter ||
- traits[i].def == TorannMagicDefOf.Chronomancer || traits[i].def == TorannMagicDefOf.ChaosMage || traits[i].def == TorannMagicDefOf.TM_Wanderer)
- {
- Log.Message("Removing trait " + traits[i].Label);
- traits.Remove(traits[i]);
- i--;
- }
- if (this.customClass != null)
- {
- traits.Remove(this.Pawn.story.traits.GetTrait(this.customClass.classTrait));
- this.customClass = null;
- this.customIndex = -2;
- }
- }
- }
-
public void RemoveTMagicHediffs()
{
List allHediffs = this.Pawn.health.hediffSet.hediffs;
diff --git a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMight.cs b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMight.cs
index 554e4997..0b0ff828 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMight.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserMight.cs
@@ -17,7 +17,6 @@ namespace TorannMagic
{
[CompilerGenerated]
[Serializable]
- [StaticConstructorOnStartup]
public class CompAbilityUserMight : CompAbilityUserTMBase
{
public string LabelKey = "TM_Might";
@@ -1668,22 +1667,6 @@ private void ClearPower(MightPower current)
base.UpdateAbilities();
}
- public void RemoveTraits()
- {
- List traits = this.Pawn.story.traits.allTraits;
- for (int i = 0; i < traits.Count; i++)
- {
- if (traits[i].def == TorannMagicDefOf.Gladiator || traits[i].def == TorannMagicDefOf.Bladedancer || traits[i].def == TorannMagicDefOf.Ranger || traits[i].def == TorannMagicDefOf.Faceless ||
- traits[i].def == TorannMagicDefOf.DeathKnight || traits[i].def == TorannMagicDefOf.TM_Psionic || traits[i].def == TorannMagicDefOf.TM_Sniper || traits[i].def == TorannMagicDefOf.TM_Monk ||
- traits[i].def == TorannMagicDefOf.TM_Wayfarer || traits[i].def == TorannMagicDefOf.TM_Commander || traits[i].def == TorannMagicDefOf.TM_SuperSoldier)
- {
- Log.Message("Removing trait " + traits[i].Label);
- traits.Remove(traits[i]);
- i--;
- }
- }
- }
-
private void LoadPowers(Pawn pawn)
{
if (pawn.story.traits.HasTrait(TorannMagicDefOf.Gladiator))
diff --git a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserTMBase.cs b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserTMBase.cs
index 9d7d61f8..4c188564 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserTMBase.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/CompAbilityUserTMBase.cs
@@ -110,5 +110,18 @@ protected void DrawMark()
DrawMark(material, new Vector3(.28f, 1f, .28f));
}
}
+
+ public void RemoveTraits()
+ {
+ List traits = Pawn.story.traits.allTraits;
+ for (int i = traits.Count - 1; i >= 0; i--)
+ {
+ if (TM_ClassUtility.AllClassTraits.Contains(traits[i].def))
+ {
+ Log.Message("Removing trait " + traits[i].Label);
+ Pawn.story.traits.RemoveTrait(traits[i]);
+ }
+ }
+ }
}
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMagic.cs b/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMagic.cs
index 0dc1839f..697827b8 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMagic.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMagic.cs
@@ -1,6 +1,7 @@
using RimWorld;
using Verse;
using System.Collections.Generic;
+using TorannMagic.ModOptions;
using UnityEngine;
@@ -17,7 +18,7 @@ public override void DoEffect(Pawn user)
bool advancedClass = false;
string failMessage = "";
CompAbilityUserMagic comp = user.GetCompAbilityUserMagic();
- for (int i = 0; i < TM_ClassUtility.CustomClasses.Count; i++)
+ for (int i = 0; i < TM_ClassUtility.CustomClasses.Length; i++)
{
TMDefs.TM_CustomClass cc = TM_ClassUtility.CustomClasses[i];
if (cc.isMage && cc.isAdvancedClass && comp != null)
@@ -286,12 +287,12 @@ public override void DoEffect(Pawn user)
if (attempts < 50)
{
int baseClassCount = 17;
- int customClassCount = TM_ClassUtility.CustomMageClasses.Count;
+ int customClassCount = TM_ClassUtility.CustomMageClasses.Length;
int rnd = Mathf.RoundToInt(Rand.RangeInclusive(0, baseClassCount + customClassCount));
switch (rnd)
{
case 0:
- if (ModOptions.Settings.Instance.Demonkin)
+ if (Settings.Demonkin.isEnabled)
{
if (user.gender == Gender.Male)
{
@@ -313,7 +314,7 @@ public override void DoEffect(Pawn user)
}
break;
case 15:
- if (ModOptions.Settings.Instance.Demonkin)
+ if (Settings.Demonkin.isEnabled)
{
if (user.gender == Gender.Male)
{
@@ -335,7 +336,7 @@ public override void DoEffect(Pawn user)
}
break;
case 1:
- if (ModOptions.Settings.Instance.Necromancer)
+ if (Settings.Necromancer.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Necromancer, 0, false));
}
@@ -346,7 +347,7 @@ public override void DoEffect(Pawn user)
}
break;
case 2:
- if (ModOptions.Settings.Instance.Druid)
+ if (Settings.Druid.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Druid, 0, false));
}
@@ -357,7 +358,7 @@ public override void DoEffect(Pawn user)
}
break;
case 3:
- if (ModOptions.Settings.Instance.Summoner)
+ if (Settings.Summoner.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Summoner, 0, false));
}
@@ -368,7 +369,7 @@ public override void DoEffect(Pawn user)
}
break;
case 4:
- if (ModOptions.Settings.Instance.FireMage)
+ if (Settings.FireMage.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.InnerFire, 0, false));
}
@@ -379,7 +380,7 @@ public override void DoEffect(Pawn user)
}
break;
case 5:
- if (ModOptions.Settings.Instance.IceMage)
+ if (Settings.IceMage.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.HeartOfFrost, 0, false));
}
@@ -390,7 +391,7 @@ public override void DoEffect(Pawn user)
}
break;
case 6:
- if (ModOptions.Settings.Instance.LitMage)
+ if (Settings.LitMage.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.StormBorn, 0, false));
}
@@ -401,7 +402,7 @@ public override void DoEffect(Pawn user)
}
break;
case 7:
- if (ModOptions.Settings.Instance.Arcanist)
+ if (Settings.Arcanist.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Arcanist, 0, false));
}
@@ -412,7 +413,7 @@ public override void DoEffect(Pawn user)
}
break;
case 8:
- if (ModOptions.Settings.Instance.Priest)
+ if (Settings.Priest.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Priest, 0, false));
}
@@ -423,7 +424,7 @@ public override void DoEffect(Pawn user)
}
break;
case 9:
- if (ModOptions.Settings.Instance.Bard)
+ if (Settings.Bard.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Bard, 0, false));
}
@@ -434,7 +435,7 @@ public override void DoEffect(Pawn user)
}
break;
case 10:
- if (ModOptions.Settings.Instance.Paladin)
+ if (Settings.Paladin.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Paladin, 0, false));
}
@@ -445,7 +446,7 @@ public override void DoEffect(Pawn user)
}
break;
case 11:
- if (ModOptions.Settings.Instance.Geomancer)
+ if (Settings.Geomancer.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Geomancer, 0, false));
}
@@ -456,7 +457,7 @@ public override void DoEffect(Pawn user)
}
break;
case 12:
- if (ModOptions.Settings.Instance.Technomancer)
+ if (Settings.Technomancer.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Technomancer, 0, false));
}
@@ -467,7 +468,7 @@ public override void DoEffect(Pawn user)
}
break;
case 13:
- if (ModOptions.Settings.Instance.BloodMage)
+ if (Settings.BloodMage.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.BloodMage, 0, false));
}
@@ -478,7 +479,7 @@ public override void DoEffect(Pawn user)
}
break;
case 14:
- if (ModOptions.Settings.Instance.Technomancer)
+ if (Settings.Technomancer.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Enchanter, 0, false));
}
@@ -489,7 +490,7 @@ public override void DoEffect(Pawn user)
}
break;
case 16:
- if (ModOptions.Settings.Instance.Chronomancer)
+ if (Settings.Chronomancer.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.Chronomancer, 0, false));
}
@@ -500,7 +501,7 @@ public override void DoEffect(Pawn user)
}
break;
case 17:
- if (ModOptions.Settings.Instance.ChaosMage)
+ if (Settings.ChaosMage.isEnabled)
{
user.story.traits.GainTrait(new Trait(TorannMagicDefOf.ChaosMage, 0, false));
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMight.cs b/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMight.cs
index 5311782a..2ac00337 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMight.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/CompUseEffect_LearnMight.cs
@@ -18,7 +18,7 @@ public override void DoEffect(Pawn user)
TMDefs.TM_CustomClass cc = null;
CompAbilityUserMight comp = user.GetCompAbilityUserMight();
- for (int i = 0; i < TM_ClassUtility.CustomClasses.Count; i++)
+ for (int i = 0; i < TM_ClassUtility.CustomClasses.Length; i++)
{
cc = TM_ClassUtility.CustomClasses[i];
if (cc.isFighter && cc.isAdvancedClass && comp != null)
diff --git a/RimWorldOfMagic/RimWorldOfMagic/Enchantment/CompEnchantmentMod.cs b/RimWorldOfMagic/RimWorldOfMagic/Enchantment/CompEnchantmentMod.cs
index 1d44bd9a..fe970614 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/Enchantment/CompEnchantmentMod.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/Enchantment/CompEnchantmentMod.cs
@@ -6,16 +6,9 @@
namespace TorannMagic.Enchantment
{
- internal class CompEnchantmentMod : Mod
+ internal class CompEnchantmentMod
{
- public CompEnchantmentMod(ModContentPack mcp) : base(mcp)
- {
- LongEventHandler.ExecuteWhenFinished(new Action(CompEnchantmentMod.AddComp));
- LongEventHandler.ExecuteWhenFinished(new Action(CompEnchantmentMod.AddUniversalBodyparts));
- LongEventHandler.ExecuteWhenFinished(new Action(CompEnchantmentMod.FillCloakPool));
- }
-
- private static void AddComp()
+ public static void AddComp()
{
//unrelated, single time load mod check
//foreach (ModContentPack p in LoadedModManager.RunningMods)
@@ -60,30 +53,26 @@ private static void AddComp()
}
}
- private static void AddUniversalBodyparts()
+ public static void InitializeUniversalBodyParts()
{
- IEnumerable universalBodyParts = from def in DefDatabase.AllDefs
- where (def.destroyableByDamage)
- select def;
- foreach (BodyPartDef current1 in universalBodyParts)
+ // Add all destroyable body parts to Regrowth
+ foreach (BodyPartDef bodyPartDef in DefDatabase.AllDefs)
{
- TorannMagicDefOf.UniversalRegrowth.appliedOnFixedBodyParts.AddDistinct(current1);
- }
+ if (!bodyPartDef.destroyableByDamage) continue;
- IEnumerable universalPawnTypes = from def in DefDatabase.AllDefs
- where (def.category == ThingCategory.Pawn && !def.defName.Contains("TM_") && def.race.IsFlesh)
- select def;
- foreach (ThingDef current2 in universalPawnTypes)
- {
- TorannMagicDefOf.UniversalRegrowth.recipeUsers.AddDistinct(current2);
- TorannMagicDefOf.AdministerOrbOfTheEternal.recipeUsers.AddDistinct(current2);
+ TorannMagicDefOf.UniversalRegrowth.appliedOnFixedBodyParts.AddDistinct(bodyPartDef);
}
- }
+ // Add all pawn flesh things outside of this mod
+ foreach (ThingDef thingDef in DefDatabase.AllDefs)
+ {
+ if (thingDef.category != ThingCategory.Pawn
+ || thingDef.defName.StartsWith("TM_")
+ || !thingDef.race.IsFlesh) continue;
- private static void FillCloakPool()
- {
- ModOptions.Constants.InitializeCloaks();
- }
+ TorannMagicDefOf.UniversalRegrowth.recipeUsers.AddDistinct(thingDef);
+ TorannMagicDefOf.AdministerOrbOfTheEternal.recipeUsers.AddDistinct(thingDef);
+ }
+ }
}
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/HarmonyPatches.cs b/RimWorldOfMagic/RimWorldOfMagic/HarmonyPatches.cs
index 04f5d779..356f9073 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/HarmonyPatches.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/HarmonyPatches.cs
@@ -16,6 +16,7 @@
using TorannMagic.TMDefs;
using TorannMagic.Golems;
using System.Diagnostics;
+using TorannMagic.ModOptions;
using TorannMagic.Utils;
namespace TorannMagic
@@ -472,18 +473,18 @@ private static bool Prefix(TraitSet __instance, Trait trait, Pawn ___pawn)
}
private static void Postfix(TraitSet __instance, Trait trait, Pawn ___pawn)
{
- List acList = TM_ClassUtility.CustomAdvancedClasses;
- for (int i = 0; i < acList.Count; i++)
+ TMDefs.TM_CustomClass[] advancedClasses = TM_ClassUtility.CustomAdvancedClasses;
+ for (int i = 0; i < advancedClasses.Length; i++)
{
- if (trait.def == acList[i].classTrait)
+ if (trait.def == advancedClasses[i].classTrait)
{
- if (acList[i].isMage)
+ if (advancedClasses[i].isMage)
{
CompAbilityUserMagic targetComp = ___pawn.GetCompAbilityUserMagic();
targetComp.CompTick();
targetComp.AddAdvancedClass(TM_ClassUtility.GetCustomClassOfTrait(trait.def));
}
- if (acList[i].isFighter)
+ if (advancedClasses[i].isFighter)
{
CompAbilityUserMight targetComp = ___pawn.GetCompAbilityUserMight();
targetComp.CompTick();
@@ -2993,7 +2994,7 @@ public static void TM_Children_TrySpawnHatchedOrBornPawn_Tweak(ref Pawn pawn, Th
i--;
hasFighterTrait = true;
}
- for (int j = 0; j < TM_ClassUtility.CustomClasses.Count; j++)
+ for (int j = 0; j < TM_ClassUtility.CustomClasses.Length; j++)
{
if (TM_ClassUtility.CustomClasses[j].classTrait == pawnTraits[i].def)
{
@@ -3195,7 +3196,7 @@ public static void Pawn_Gizmo_ActionPatch(ref IEnumerable __result, Pawn
}
}
}
- if (ModOptions.Settings.Instance.Wanderer && __instance.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
+ if (Settings.Wanderer.isEnabled && __instance.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
{
//Pawn p = __instance;
//Command_Action itemWanderer = new Command_Action
@@ -3216,7 +3217,7 @@ public static void Pawn_Gizmo_ActionPatch(ref IEnumerable __result, Pawn
}
}
- if (ModOptions.Settings.Instance.Wayfarer && __instance.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
+ if (Settings.Wayfarer.isEnabled && __instance.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
{
//Pawn p = __instance;
//Command_Action itemWayfarer = new Command_Action
@@ -3262,7 +3263,7 @@ public static void Pawn_Gizmo_TogglePatch(ref IEnumerable __result, ref P
CompAbilityUserMight compMight = __instance.GetCompAbilityUserMight();
var gizmoList = __result.ToList();
bool canBecomeClassless = false;
- if (ModOptions.Settings.Instance.Wanderer && __instance.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
+ if (Settings.Wanderer.isEnabled && __instance.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
{
//Pawn p = __instance;
//Command_Action itemWanderer = new Command_Action
@@ -3284,7 +3285,7 @@ public static void Pawn_Gizmo_TogglePatch(ref IEnumerable __result, ref P
}
}
- if (ModOptions.Settings.Instance.Wayfarer && __instance.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
+ if (Settings.Wayfarer.isEnabled && __instance.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
{
//Pawn p = __instance;
//Command_Action itemWayfarer = new Command_Action
@@ -5162,935 +5163,157 @@ private static bool Prefix(AbilityAIDef __instance, Pawn caster, LocalTargetInfo
}
}
- [HarmonyPatch(typeof(PawnGenerator), "GenerateTraits", null)]
- public static class PawnGenerator_Patch
+ private static void GetValidTraits(
+ Pawn pawn,
+ HashSet validMagicTraits,
+ HashSet validMightTraits,
+ HashSet validMagicSupportTraits,
+ HashSet validMightSupportTraits,
+ ref bool isMagicallyGiftedValid,
+ ref bool isPhysicalProdigyValid)
{
- private static void Postfix(Pawn pawn)
+ // Inner function to set variables as needed
+ void handleTraitDef(TraitDef traitDef, ref bool gifted, ref bool prodigy)
{
- List allTraits = DefDatabase.AllDefsListForReading;
- List pawnTraits = pawn.story.traits.allTraits;
-
- bool flag = pawnTraits != null;
- bool anyFightersEnabled = false;
- bool anyMagesEnabled = false;
- int baseCount = 6;
- int mageCount = 18;
- int fighterCount = 11;
- int supportingFighterCount = 2;
- int supportingMageCount = 5;
- float fighterFactor = 1f;
- float mageFactor = 1f;
- if (pawn.Faction != null)
+ if (traitDef == TorannMagicDefOf.TM_Gifted) gifted = false;
+ else if (traitDef == TorannMagicDefOf.PhysicalProdigy) prodigy = false;
+ else
{
- if (ModOptions.Settings.Instance.FactionFighterSettings.ContainsKey(pawn.Faction.def.defName))
- {
- fighterFactor = ModOptions.Settings.Instance.FactionFighterSettings[pawn.Faction.def.defName];
- }
- if (ModOptions.Settings.Instance.FactionMageSettings.ContainsKey(pawn.Faction.def.defName))
- {
- mageFactor = ModOptions.Settings.Instance.FactionMageSettings[pawn.Faction.def.defName];
- }
+ if (validMagicSupportTraits.Remove(traitDef)) return;
+ if (validMightSupportTraits.Remove(traitDef)) return;
+ // must do both of these as there are some classes in both
+ validMagicTraits.Remove(traitDef);
+ validMightTraits.Remove(traitDef);
}
- if (TM_ClassUtility.CustomFighterClasses == null)
+ }
+ // Handle Backstories
+ for (int bsIndex = pawn.story.AllBackstories.Count - 1; bsIndex >= 0; bsIndex--)
+ {
+ List conflictingTraits = pawn.story.AllBackstories[bsIndex].disallowedTraits;
+ if (conflictingTraits == null) continue;
+ for (int conflictIndex = conflictingTraits.Count - 1; conflictIndex >= 0; conflictIndex--)
{
- TM_ClassUtility.LoadCustomClasses();
+ TraitDef conflictTrait = conflictingTraits[conflictIndex].def;
+ handleTraitDef(conflictTrait, ref isMagicallyGiftedValid, ref isPhysicalProdigyValid);
}
- if (TM_ClassUtility.CustomMageClasses == null)
+ }
+ // Handle conflicting traits
+ for (int traitIndex = pawn.story.traits.allTraits.Count - 1; traitIndex >= 0; traitIndex--)
+ {
+ List conflictingTraits = pawn.story.traits.allTraits[traitIndex].def.conflictingTraits;
+ for (int conflictIndex = conflictingTraits.Count - 1; conflictIndex >= 0; conflictIndex--)
{
- TM_ClassUtility.LoadCustomClasses();
+ TraitDef conflictTrait = conflictingTraits[conflictIndex];
+ handleTraitDef(conflictTrait, ref isMagicallyGiftedValid, ref isPhysicalProdigyValid);
}
+ }
- List customFighters = TM_ClassUtility.CustomFighterClasses;
- List customMages = TM_ClassUtility.CustomMageClasses;
+ // Run the validators for traits with special rules. Remove if they break the rule.
+ foreach (KeyValuePair> pair in TM_ClassUtility.ClassSpawnValidators)
+ {
+ if (pair.Value(pawn)) continue;
- mageCount += customMages.Count;
- fighterCount += customFighters.Count;
- if (customFighters.Count > 0 || ModOptions.Settings.Instance.Gladiator || ModOptions.Settings.Instance.Bladedancer || ModOptions.Settings.Instance.Ranger || ModOptions.Settings.Instance.Sniper || ModOptions.Settings.Instance.Faceless || ModOptions.Settings.Instance.DeathKnight || ModOptions.Settings.Instance.Psionic || ModOptions.Settings.Instance.Monk || ModOptions.Settings.Instance.Wayfarer || ModOptions.Settings.Instance.Commander || ModOptions.Settings.Instance.SuperSoldier)
+ validMagicTraits.Remove(pair.Key);
+ validMightTraits.Remove(pair.Key);
+ }
+ }
+
+ [HarmonyPatch(typeof(PawnGenerator), "GenerateTraits", null)]
+ public static class PawnGenerator_Patch
+ {
+ private static void Postfix(Pawn pawn)
+ {
+ List pawnTraits = pawn.story.traits.allTraits;
+ if (pawnTraits == null) return;
+
+ HashSet validMagicTraits =
+ new HashSet(TM_ClassUtility.EnabledMageClasses);
+ HashSet validMightTraits =
+ new HashSet(TM_ClassUtility.EnabledFighterClasses);
+ HashSet validMagicSupportTraits =
+ new HashSet(TM_ClassUtility.EnabledMageSupportClasses);
+ HashSet validMightSupportTraits =
+ new HashSet(TM_ClassUtility.EnabledFighterSupportClasses);
+ bool isMagicallyGiftedValid = true;
+ bool isPhysicalProdigyValid = true;
+ GetValidTraits(
+ pawn, validMagicTraits, validMightTraits, validMagicSupportTraits, validMightSupportTraits,
+ ref isMagicallyGiftedValid, ref isPhysicalProdigyValid);
+
+
+ var inst = Settings.Instance;
+
+ float fighterFactor = 1;
+ float mageFactor = 1;
+ if (pawn.Faction?.def?.defName != null)
{
- anyFightersEnabled = true;
+ fighterFactor = inst.FactionFighterSettings.TryGetValue(pawn.Faction?.def?.defName, 1f);
+ mageFactor = inst.FactionMageSettings.TryGetValue(pawn.Faction?.def?.defName, 1f);
}
- if (customMages.Count > 0 || ModOptions.Settings.Instance.Arcanist || ModOptions.Settings.Instance.FireMage || ModOptions.Settings.Instance.IceMage || ModOptions.Settings.Instance.LitMage || ModOptions.Settings.Instance.Druid || ModOptions.Settings.Instance.Paladin || ModOptions.Settings.Instance.Summoner || ModOptions.Settings.Instance.Priest || ModOptions.Settings.Instance.Necromancer || ModOptions.Settings.Instance.Bard || ModOptions.Settings.Instance.Demonkin || ModOptions.Settings.Instance.Geomancer || ModOptions.Settings.Instance.Technomancer || ModOptions.Settings.Instance.BloodMage || ModOptions.Settings.Instance.Enchanter || ModOptions.Settings.Instance.Chronomancer || ModOptions.Settings.Instance.Wanderer || ModOptions.Settings.Instance.ChaosMage)
+
+
+ float baseMageChance = mageFactor * inst.baseMageChance * (isMagicallyGiftedValid ? 1 : 0);
+ float baseFighterChance = fighterFactor * inst.baseFighterChance * (isPhysicalProdigyValid ? 1 : 0);
+ float advMageChance = mageFactor * inst.advMageChance * (validMagicTraits.Count > 0 ? 1 : 0);
+ float advFighterChance = fighterFactor * inst.advFighterChance * (validMightTraits.Count > 0 ? 1 : 0);
+
+ float sum = baseMageChance + baseFighterChance + advMageChance + advFighterChance;
+ if (sum >= 1f) // If over 100% total, make each chance proportional to the total
{
- anyMagesEnabled = true;
+ baseMageChance /= sum;
+ baseFighterChance /= sum;
+ advFighterChance /= sum;
+ // advMageChance is not needed to be calculated
}
- if (flag)
+
+ float diceRoll = Rand.Range(0, 1f);
+
+ // These log messages will tell you the classes available to spawn and the percentage of each group
+ //
+ // Log.Warning($"mage pre: {baseMageChance}");
+ // Log.Warning($"fight pre: {baseFighterChance}");
+ // Log.Warning($"{string.Join(", ", validMightTraits)} {advFighterChance:F3}");
+ // Log.Warning($"{string.Join(", ", validMagicTraits)} {advMageChance:F3} ({advMageChance/sum:F3})");
+ // Log.Warning($"diceRoll: {diceRoll}");
+
+ if (diceRoll < sum)
{
- float baseMageChance = mageFactor * ModOptions.Settings.Instance.baseMageChance * baseCount;
- float baseFighterChance = fighterFactor * ModOptions.Settings.Instance.baseFighterChance * baseCount;
- float advMageChance = mageCount * ModOptions.Settings.Instance.advMageChance * mageFactor;
- float advFighterChance = fighterCount * ModOptions.Settings.Instance.advFighterChance * fighterFactor;
+ if (pawnTraits.Count > 0) pawnTraits.RemoveAt(0); // Make sure there is room
- if (false) //ModCheck.Validate.AlienHumanoidRaces.IsInitialized())
+ // Gifted
+ if (diceRoll < baseMageChance)
+ pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Gifted));
+ // Prodigy
+ else if (diceRoll >= baseMageChance && diceRoll < baseMageChance + baseFighterChance)
+ pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.PhysicalProdigy));
+ // Fighter
+ else if (diceRoll >= baseMageChance + baseFighterChance &&
+ diceRoll < baseMageChance + baseFighterChance + advFighterChance)
{
- if (Rand.Chance(((baseFighterChance) + (baseMageChance) + (advFighterChance) + (advMageChance)) / (allTraits.Count)))
- {
- if (pawnTraits.Count > 0)
- {
- pawnTraits.Remove(pawnTraits[pawnTraits.Count - 1]);
- }
- float rnd = Rand.Range(0, baseMageChance + baseFighterChance + advMageChance + advFighterChance);
- if (rnd < (baseMageChance) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Gifted, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Gifted) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Gifted)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Gifted, 0, false));
- }
- else if (rnd >= baseMageChance && rnd < (baseMageChance + baseFighterChance) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.PhysicalProdigy, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.PhysicalProdigy) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.PhysicalProdigy)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.PhysicalProdigy, 0, false));
- }
- else if (rnd >= (baseMageChance + baseFighterChance) && rnd < (baseMageChance + baseFighterChance + advFighterChance))
- {
- if (anyFightersEnabled)
- {
- int rndF = Rand.RangeInclusive(1, fighterCount);
- switch (rndF)
- {
- case 1:
- //Gladiator:;
- if (ModOptions.Settings.Instance.Gladiator && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Gladiator, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Gladiator) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Gladiator)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Gladiator, 0, false));
- }
- //else
- //{
- // goto Sniper;
- //}
- break;
- case 2:
- //Sniper:;
- if (ModOptions.Settings.Instance.Sniper && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Sniper, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Sniper) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Sniper)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Sniper, 0, false));
- }
- //else
- //{
- // goto Bladedancer;
- //}
- break;
- case 3:
- Bladedancer:;
- if (ModOptions.Settings.Instance.Bladedancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Bladedancer, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Bladedancer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Bladedancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Bladedancer, 0, false));
- }
- //else
- //{
- // goto Ranger;
- //}
- break;
- case 4:
- Ranger:;
- if (ModOptions.Settings.Instance.Ranger && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Ranger, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Ranger) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Ranger)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Ranger, 0, false));
- }
- //else
- //{
- // goto Faceless;
- //}
- break;
- case 5:
- Faceless:;
- if (ModOptions.Settings.Instance.Faceless && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Faceless, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Faceless) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Faceless)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Faceless, 0, false));
- }
- //else
- //{
- // goto Psionic;
- //}
- break;
- case 6:
- Psionic:;
- if (ModOptions.Settings.Instance.Psionic && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Psionic, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Psionic) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Psionic)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Psionic, 0, false));
- }
- //else
- //{
- // goto DeathKnight;
- //}
- break;
- case 7:
- DeathKnight:;
- if (ModOptions.Settings.Instance.DeathKnight && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.DeathKnight, 0)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.DeathKnight) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.DeathKnight)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.DeathKnight, 0, false));
- }
- //else
- //{
- // goto Monk;
- //}
- break;
- case 8:
- Monk:;
- if (ModOptions.Settings.Instance.Monk && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Monk, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Monk) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Monk)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Monk, 4, false));
- }
- //else
- //{
- // goto Wayfarer;
- //}
- break;
- case 9:
- Wayfarer:;
- if (ModOptions.Settings.Instance.Wayfarer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Wayfarer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Wayfarer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Wayfarer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Wayfarer, 4, false));
- }
- //else
- //{
- // goto Commander;
- //}
- break;
- case 10:
- Commander:;
- if (ModOptions.Settings.Instance.Commander && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Commander, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Commander) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Commander)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Commander, 4, false));
- }
- //else
- //{
- // goto SuperSoldier;
- //}
- break;
- case 11:
- SuperSoldier:;
- if (ModOptions.Settings.Instance.SuperSoldier && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_SuperSoldier, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_SuperSoldier) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_SuperSoldier)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_SuperSoldier, 4, false));
- }
- //else
- //{
- // goto Gladiator;
- //}
- break;
- case int val when rndF > 11:
- TMDefs.TM_CustomClass cFighter = TM_ClassUtility.GetRandomCustomFighter();
- if (!pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(cFighter.classTrait, cFighter.traitDegree)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, cFighter.classTrait) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(cFighter.classTrait)))
- {
- pawn.story.traits.GainTrait(new Trait(cFighter.classTrait, cFighter.traitDegree, false));
- }
- break;
- }
- }
- else
- {
- goto TraitEnd;
- }
- }
- else
- {
- if (anyMagesEnabled)
- {
- int rndM = Rand.RangeInclusive(1, (mageCount + 1));
- switch (rndM)
- {
- case 1:
- FireMage:;
- if (ModOptions.Settings.Instance.FireMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.InnerFire, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.InnerFire) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.InnerFire)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.InnerFire, 4, false));
- }
- //else
- //{
- // goto IceMage;
- //}
- break;
- case 2:
- IceMage:;
- if (ModOptions.Settings.Instance.IceMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.HeartOfFrost, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.HeartOfFrost) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.HeartOfFrost)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.HeartOfFrost, 4, false));
- }
- //else
- //{
- // goto LitMage;
- //}
- break;
- case 3:
- LitMage:;
- if (ModOptions.Settings.Instance.LitMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.StormBorn, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.StormBorn) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.StormBorn)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.StormBorn, 4, false));
- }
- //else
- //{
- // goto Arcanist;
- //}
- break;
- case 4:
- Arcanist:;
- if (ModOptions.Settings.Instance.Arcanist && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Arcanist, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Arcanist) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Arcanist)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Arcanist, 4, false));
- }
- //else
- //{
- // goto Druid;
- //}
- break;
- case 5:
- Druid:;
- if (ModOptions.Settings.Instance.Druid && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Druid, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Druid) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Druid)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Druid, 4, false));
- }
- //else
- //{
- // goto Paladin;
- //}
- break;
- case 6:
- Paladin:;
- if (ModOptions.Settings.Instance.Paladin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Paladin, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Paladin) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Paladin)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Paladin, 4, false));
- }
- //else
- //{
- // goto Summoner;
- //}
- break;
- case 7:
- Summoner:;
- if (ModOptions.Settings.Instance.Summoner && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Summoner, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Summoner) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Summoner)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Summoner, 4, false));
- }
- //else
- //{
- // goto Necromancer;
- //}
- break;
- case 8:
- Necromancer:;
- if (ModOptions.Settings.Instance.Necromancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Necromancer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Necromancer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Necromancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Necromancer, 4, false));
- }
- //else
- //{
- // goto Priest;
- //}
- break;
- case 9:
- Priest:;
- if (ModOptions.Settings.Instance.Priest && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Priest, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Priest) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Priest)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Priest, 4, false));
- }
- //else
- //{
- // goto Demonkin;
- //}
- break;
- case 10:
- Demonkin:;
- if (ModOptions.Settings.Instance.Demonkin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Warlock, 4)) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Succubus, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Succubus) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Warlock) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Succubus)))
- {
- if (pawn.gender != Gender.Female)
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Warlock, 4, false));
- }
- else
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Succubus, 4, false));
- }
- }
- //else
- //{
- // goto Bard;
- //}
- break;
- case 11:
- if (ModOptions.Settings.Instance.Demonkin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Warlock, 4)) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Succubus, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Succubus) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Warlock) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Warlock)))
- {
- if (pawn.gender != Gender.Male)
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Succubus, 4, false));
- }
- else
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Warlock, 4, false));
- }
- }
- //else
- //{
- // goto Bard;
- //}
- break;
- case 12:
- Bard:;
- if (ModOptions.Settings.Instance.Bard && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Bard, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Bard) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Bard)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Bard, 0, false));
- }
- //else
- //{
- // goto Geomancer;
- //}
- break;
- case 13:
- Geomancer:;
- if (ModOptions.Settings.Instance.Geomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Geomancer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Geomancer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Geomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Geomancer, 4, false));
- }
- //else
- //{
- // goto Technomancer;
- //}
- break;
- case 14:
- Technomancer:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Technomancer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Technomancer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Technomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Technomancer, 4, false));
- }
- //else
- //{
- // goto BloodMage;
- //}
- break;
- case 15:
- BloodMage:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.BloodMage, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.BloodMage) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.BloodMage)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.BloodMage, 4, false));
- }
- //else
- //{
- // goto Enchanter;
- //}
- break;
- case 16:
- Enchanter:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Enchanter, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Enchanter) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Enchanter)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Enchanter, 4, false));
- }
- //else
- //{
- // goto Chronomancer;
- //}
- break;
- case 17:
- Chronomancer:;
- if (ModOptions.Settings.Instance.Chronomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Chronomancer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.Chronomancer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Chronomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Chronomancer, 4, false));
- }
- //else
- //{
- // goto Wanderer;
- //}
- break;
- case 18:
- Wanderer:;
- if (ModOptions.Settings.Instance.Wanderer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Wanderer, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.TM_Wanderer) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Wanderer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Wanderer, 4, false));
- }
- //else
- //{
- // goto ChaosMage;
- //}
- break;
- case 19:
- ChaosMage:;
- if (ModOptions.Settings.Instance.ChaosMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.ChaosMage, 4)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, TorannMagicDefOf.ChaosMage) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.ChaosMage)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.ChaosMage, 4, false));
- }
- //else
- //{
- // goto FireMage;
- //}
- break;
- case int val when rndM > 19:
- TMDefs.TM_CustomClass cMage = customMages.RandomElement();
- if (!pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(cMage.classTrait, cMage.traitDegree)) && ModCheck.AlienHumanoidRaces.TryGetBackstory_DisallowedTrait(pawn.def, pawn, cMage.classTrait) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(cMage.classTrait)))
- {
- pawn.story.traits.GainTrait(new Trait(cMage.classTrait, cMage.traitDegree, false));
- }
- break;
- }
- }
- else
- {
- goto TraitEnd;
- }
- }
- }
+ TraitDef traitDef = validMightTraits.RandomElement();
+ pawn.story.traits.GainTrait(new Trait(
+ traitDef, TM_ClassUtility.CustomClassTraitMap.TryGetValue(traitDef.index)?.traitDegree ?? 0));
}
+ // Mage
else
{
- if (Rand.Chance((baseMageChance + baseFighterChance + advMageChance + advFighterChance) / (allTraits.Count)))
- {
-
- if (pawnTraits.Count > 0)
- {
- pawnTraits.Remove(pawnTraits[pawnTraits.Count - 1]);
- }
- float rnd = Rand.Range(0, baseMageChance + baseFighterChance + advFighterChance + advMageChance);
- if (rnd < (baseMageChance) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Gifted, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Gifted)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Gifted, 0, false));
- }
- else if (rnd >= baseMageChance && rnd < (baseMageChance + baseFighterChance) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.PhysicalProdigy, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.PhysicalProdigy)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.PhysicalProdigy, 0, false));
- }
- else if (rnd >= (baseMageChance + baseFighterChance) && rnd < (baseMageChance + baseFighterChance + advFighterChance))
- {
- if (anyFightersEnabled)
- {
- int rndF = Rand.RangeInclusive(1, fighterCount);
- switch (rndF)
- {
- case 1:
- //Gladiator:;
- if (ModOptions.Settings.Instance.Gladiator && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Gladiator, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Gladiator)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Gladiator, 0, false));
- }
- //else
- //{
- // goto Sniper;
- //}
- break;
- case 2:
- //Sniper:;
- if (ModOptions.Settings.Instance.Sniper && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Sniper, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Sniper)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Sniper, 0, false));
- }
- //else
- //{
- // goto Bladedancer;
- //}
- break;
- case 3:
- Bladedancer:;
- if (ModOptions.Settings.Instance.Bladedancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Bladedancer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Bladedancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Bladedancer, 0, false));
- }
- //else
- //{
- // goto Ranger;
- //}
- break;
- case 4:
- Ranger:;
- if (ModOptions.Settings.Instance.Ranger && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Ranger, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Ranger)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Ranger, 0, false));
- }
- //else
- //{
- // goto Faceless;
- //}
- break;
- case 5:
- Faceless:;
- if (ModOptions.Settings.Instance.Faceless && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Faceless, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Faceless)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Faceless, 0, false));
- }
- //else
- //{
- // goto Psionic;
- //}
- break;
- case 6:
- Psionic:;
- if (ModOptions.Settings.Instance.Psionic && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Psionic, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Psionic)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Psionic, 0, false));
- }
- //else
- //{
- // goto DeathKnight;
- //}
- break;
- case 7:
- DeathKnight:;
- if (ModOptions.Settings.Instance.DeathKnight && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.DeathKnight, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.DeathKnight)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.DeathKnight, 0, false));
- }
- //else
- //{
- // goto Monk;
- //}
- break;
- case 8:
- Monk:;
- if (ModOptions.Settings.Instance.Monk && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Monk, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Monk)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Monk, 0, false));
- }
- //else
- //{
- // goto Wayfarer;
- //}
- break;
- case 9:
- Wayfarer:;
- if (ModOptions.Settings.Instance.Wayfarer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Wayfarer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Wayfarer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Wayfarer, 0, false));
- }
- //else
- //{
- // goto Commander;
- //}
- break;
- case 10:
- Commander:;
- if (ModOptions.Settings.Instance.Commander && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Commander, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Commander)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Commander, 0, false));
- }
- //else
- //{
- // goto SuperSoldier;
- //}
- break;
- case 11:
- SuperSoldier:;
- if (ModOptions.Settings.Instance.SuperSoldier && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_SuperSoldier, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_SuperSoldier)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_SuperSoldier, 0, false));
- }
- //else
- //{
- // goto Gladiator;
- //}
- break;
- case int val when rndF > 11:
- TMDefs.TM_CustomClass cFighter = customFighters.RandomElement();
- if (!pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(cFighter.classTrait, cFighter.traitDegree)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(cFighter.classTrait)))
- {
- pawn.story.traits.GainTrait(new Trait(cFighter.classTrait, cFighter.traitDegree, false));
- }
- break;
- }
- }
- else
- {
- goto TraitEnd;
- }
- }
- else
- {
- if (anyMagesEnabled)
- {
- int rndM = Rand.RangeInclusive(1, (mageCount + 1));
- switch (rndM)
- {
- case 1:
- FireMage:;
- if (ModOptions.Settings.Instance.FireMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.InnerFire, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.InnerFire)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.InnerFire, 0, false));
- }
- //else
- //{
- // goto IceMage;
- //}
- break;
- case 2:
- IceMage:;
- if (ModOptions.Settings.Instance.IceMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.HeartOfFrost, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.HeartOfFrost)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.HeartOfFrost, 0, false));
- }
- //else
- //{
- // goto LitMage;
- //}
- break;
- case 3:
- LitMage:;
- if (ModOptions.Settings.Instance.LitMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.StormBorn, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.StormBorn)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.StormBorn, 0, false));
- }
- //else
- //{
- // goto Arcanist;
- //}
- break;
- case 4:
- Arcanist:;
- if (ModOptions.Settings.Instance.Arcanist && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Arcanist, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Arcanist)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Arcanist, 0, false));
- }
- //else
- //{
- // goto Druid;
- //}
- break;
- case 5:
- Druid:;
- if (ModOptions.Settings.Instance.Druid && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Druid, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Druid)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Druid, 0, false));
- }
- //else
- //{
- // goto Paladin;
- //}
- break;
- case 6:
- Paladin:;
- if (ModOptions.Settings.Instance.Paladin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Paladin, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Paladin)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Paladin, 0, false));
- }
- //else
- //{
- // goto Summoner;
- //}
- break;
- case 7:
- Summoner:;
- if (ModOptions.Settings.Instance.Summoner && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Summoner, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Summoner)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Summoner, 0, false));
- }
- //else
- //{
- // goto Necromancer;
- //}
- break;
- case 8:
- Necromancer:;
- if (ModOptions.Settings.Instance.Necromancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Necromancer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Necromancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Necromancer, 0, false));
- }
- //else
- //{
- // goto Priest;
- //}
- break;
- case 9:
- Priest:;
- if (ModOptions.Settings.Instance.Priest && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Priest, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Priest)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Priest, 0, false));
- }
- //else
- //{
- // goto Demonkin;
- //}
- break;
- case 10:
- Demonkin:;
- if (ModOptions.Settings.Instance.Demonkin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Warlock, 0)) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Succubus, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Succubus)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Warlock)))
- {
- if (pawn.gender != Gender.Female)
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Warlock, 0, false));
- }
- else
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Succubus, 0, false));
- }
- }
- //else
- //{
- // goto Bard;
- //}
- break;
- case 11:
- if (ModOptions.Settings.Instance.Demonkin && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Warlock, 0)) && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Succubus, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Succubus)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Warlock)))
- {
- if (pawn.gender != Gender.Male)
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Succubus, 0, false));
- }
- else
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Warlock, 0, false));
- }
- }
- //else
- //{
- // goto Bard;
- //}
- break;
- case 12:
- Bard:;
- if (ModOptions.Settings.Instance.Bard && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Bard, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Bard)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Bard, 0, false));
- }
- //else
- //{
- // goto Geomancer;
- //}
- break;
- case 13:
- Geomancer:;
- if (ModOptions.Settings.Instance.Geomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Geomancer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Geomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Geomancer, 0, false));
- }
- //else
- //{
- // goto Technomancer;
- //}
- break;
- case 14:
- Technomancer:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Technomancer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Technomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Technomancer, 0, false));
- }
- //else
- //{
- // goto BloodMage;
- //}
- break;
- case 15:
- BloodMage:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.BloodMage, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.BloodMage)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.BloodMage, 0, false));
- }
- //else
- //{
- // goto Enchanter;
- //}
- break;
- case 16:
- Enchanter:;
- if (ModOptions.Settings.Instance.Technomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Enchanter, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Enchanter)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Enchanter, 0, false));
- }
- //else
- //{
- // goto Chronomancer;
- //}
- break;
- case 17:
- Chronomancer:;
- if (ModOptions.Settings.Instance.Chronomancer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.Chronomancer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.Chronomancer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.Chronomancer, 0, false));
- }
- //else
- //{
- // goto Wanderer;
- //}
- break;
- case 18:
- Wanderer:;
- if (ModOptions.Settings.Instance.Wanderer && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_Wanderer, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_Wanderer)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_Wanderer, 0, false));
- }
- //else
- //{
- // goto ChaosMage;
- //}
- break;
- case 19:
- ChaosMage:;
- if (ModOptions.Settings.Instance.ChaosMage && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.ChaosMage, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.ChaosMage)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.ChaosMage, 0, false));
- }
- //else
- //{
- // goto FireMage;
- //}
- break;
- case int val when rndM > 19:
- TMDefs.TM_CustomClass cMage = customMages.RandomElement();
- if (!pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(cMage.classTrait, cMage.traitDegree)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(cMage.classTrait)))
- {
- pawn.story.traits.GainTrait(new Trait(cMage.classTrait, cMage.traitDegree, false));
- }
- break;
- }
- }
- else
- {
- goto TraitEnd;
- }
- }
- }
+ TraitDef traitDef = validMagicTraits.RandomElement();
+ pawn.story.traits.GainTrait(new Trait(
+ traitDef, TM_ClassUtility.CustomClassTraitMap.TryGetValue(traitDef.index)?.traitDegree ?? 0));
}
+ }
- if (Rand.Chance(ModOptions.Settings.Instance.supportTraitChance))
+ if (Rand.Chance(inst.supportTraitChance))
+ {
+ if (TM_Calc.IsMagicUser(pawn) || pawn.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
{
- if (TM_Calc.IsMagicUser(pawn) || pawn.story.traits.HasTrait(TorannMagicDefOf.TM_Gifted))
- {
- int rndS = Rand.RangeInclusive(1, supportingMageCount);
- switch (rndS)
- {
- case 1:
- if (ModOptions.Settings.Instance.ArcaneConduit && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_ArcaneConduitTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_ArcaneConduitTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_ArcaneConduitTD, 0, false));
- }
- break;
- case 2:
- if (ModOptions.Settings.Instance.ManaWell && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_ManaWellTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_ManaWellTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_ManaWellTD, 0, false));
- }
- break;
- case 3:
- if(ModOptions.Settings.Instance.FaeBlood && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_FaeBloodTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_FaeBloodTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_FaeBloodTD, 0, false));
- }
- break;
- case 4:
- if (ModOptions.Settings.Instance.Enlightened && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_EnlightenedTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_EnlightenedTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_EnlightenedTD, 0, false));
- }
- break;
- case 5:
- if (ModOptions.Settings.Instance.Cursed && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_CursedTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_CursedTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_CursedTD, 0, false));
- }
- break;
- }
- }
- else if (TM_Calc.IsMightUser(pawn) || pawn.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
- {
- int rndS = Rand.RangeInclusive(1, supportingFighterCount);
- switch (rndS)
- {
- case 1:
- if (ModOptions.Settings.Instance.Boundless && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_BoundlessTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_BoundlessTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_BoundlessTD, 0, false));
- }
- break;
- case 2:
- if (ModOptions.Settings.Instance.GiantsBlood && !pawn.story.AllBackstories.Any(bs => bs.DisallowsTrait(TorannMagicDefOf.TM_GiantsBloodTD, 0)) && !pawn.story.traits.allTraits.Any(td => td.def.conflictingTraits.Contains(TorannMagicDefOf.TM_GiantsBloodTD)))
- {
- pawn.story.traits.GainTrait(new Trait(TorannMagicDefOf.TM_GiantsBloodTD, 0, false));
- }
- break;
- }
- }
+ pawn.story.traits.GainTrait(new Trait(validMagicSupportTraits.RandomElement()));
+ }
+ else if (TM_Calc.IsMightUser(pawn) || pawn.story.traits.HasTrait(TorannMagicDefOf.PhysicalProdigy))
+ {
+ pawn.story.traits.GainTrait(new Trait(validMightSupportTraits.RandomElement()));
}
}
- TraitEnd:;
}
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ClassOptionsWindow.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ClassOptionsWindow.cs
index 4ae901e3..d5a924de 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ClassOptionsWindow.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ClassOptionsWindow.cs
@@ -26,225 +26,148 @@ public ClassOptionsWindow()
public override void DoWindowContents(Rect inRect)
{
- int num = 0;
+ var inst = Settings.Instance;
+ int row = 0;
float rowHeight = 28f;
- Rect sRect = new Rect(inRect.x, inRect.y, inRect.width - 36f, inRect.height + 296f + TM_ClassUtility.CustomClasses.Count * 40);
+ Rect sRect = new Rect(inRect.x, inRect.y, inRect.width - 36f, inRect.height + 296f + TM_ClassUtility.CustomClasses.Length * 40);
scrollPosition = GUI.BeginScrollView(inRect, scrollPosition, sRect, false, true);
//GUI.BeginGroup(inRect);
-
+
Text.Font = GameFont.Medium;
float x = Text.CalcSize("TM_ClassOptions".Translate()).x;
- Rect headerRect = new Rect(inRect.width / 2f - (x / 2), inRect.y, inRect.width, ClassOptionsWindow.HeaderSize);
+ Rect headerRect = new Rect(inRect.width / 2f - (x / 2), inRect.y, inRect.width, HeaderSize);
Widgets.Label(headerRect, "TM_ClassOptions".Translate());
Text.Font = GameFont.Small;
GUI.color = Color.yellow;
x = Text.CalcSize("TM_ClassWarning".Translate()).x;
- Rect warningRect = new Rect(inRect.width / 2f - (x / 2), inRect.y + ClassOptionsWindow.HeaderSize + 4f, inRect.width, ClassOptionsWindow.TextSize);
+ Rect warningRect = new Rect(inRect.width / 2f - (x / 2), inRect.y + HeaderSize + 4f, inRect.width, TextSize);
Widgets.Label(warningRect, "TM_ClassWarning".Translate());
- x = Text.CalcSize("TM_RequiresRestart".Translate()).x;
- Rect restartRect = new Rect(inRect.width / 2f - (x / 2), inRect.y + ClassOptionsWindow.HeaderSize + ClassOptionsWindow.TextSize + 4f, inRect.width, ClassOptionsWindow.TextSize);
- Widgets.Label(restartRect, "TM_RequiresRestart".Translate());
+ // x = Text.CalcSize("TM_RequiresRestart".Translate()).x;
+ // Rect restartRect = new Rect(inRect.width / 2f - (x / 2), inRect.y + HeaderSize + TextSize + 4f, inRect.width, TextSize);
+ // Widgets.Label(restartRect, "TM_RequiresRestart".Translate());
GUI.color = Color.white;
Rect rect1 = new Rect(inRect);
rect1.width /= 3f;
- num+=3;
+ row+=2;
GUI.color = Color.magenta;
- Rect classRect = Controller.UIHelper.GetRowRect(rect1, rowHeight, num);
+ Rect classRect = Controller.UIHelper.GetRowRect(rect1, rowHeight, row);
Widgets.Label(classRect, "TM_EnabledMages".Translate());
- Rect classRectShiftRight = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);
+ Rect classRectShiftRight = Controller.UIHelper.GetRowRect(classRect, rowHeight, row);
classRectShiftRight.x += classRect.width + 98f;
GUI.color = Color.green;
Widgets.Label(classRectShiftRight, "TM_EnabledFighters".Translate());
- num++;
+ row++;
GUI.color = Color.white;
- Rect slRect0 = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);
+ Rect slRect0 = Controller.UIHelper.GetRowRect(classRect, rowHeight, row);
slRect0.width = inRect.width / 2.2f;
- Settings.Instance.baseMageChance = Widgets.HorizontalSlider(slRect0, Settings.Instance.baseMageChance, 0f, 5f, false, "baseMageChance".Translate() + " " + Rarity(Settings.Instance.baseMageChance) + " " + TM_Calc.GetMagePrecurserChance().ToString("P1"), "0", "5", .01f);
- Rect slRect0ShiftRight = Controller.UIHelper.GetRowRect(slRect0, rowHeight, num);
+ inst.baseMageChance = Widgets.HorizontalSlider(slRect0, inst.baseMageChance, 0f, 1f, false, "baseMageChance".Translate() + " " + Rarity(inst.baseMageChance) + " " + TM_Calc.GetWeightedChance(inst.baseMageChance), roundTo: .002f);
+ Rect slRect0ShiftRight = Controller.UIHelper.GetRowRect(slRect0, rowHeight, row);
slRect0ShiftRight.x += slRect0.width + 20f;
- Settings.Instance.baseFighterChance = Widgets.HorizontalSlider(slRect0ShiftRight, Settings.Instance.baseFighterChance, 0f, 5f, false, "baseFighterChance".Translate() + " " + Rarity(Settings.Instance.baseFighterChance) + " " + TM_Calc.GetFighterPrecurserChance().ToString("P1"), "0", "5", .01f);
- num++;
- Rect slRect1 = Controller.UIHelper.GetRowRect(slRect0, rowHeight, num);
- Settings.Instance.advMageChance = Widgets.HorizontalSlider(slRect1, Settings.Instance.advMageChance, 0f, 2f, false, "advMageChance".Translate() + " " + Rarity(Settings.Instance.advMageChance) + " " + TM_Calc.GetMageSpawnChance().ToString("P1"), "0", "2", .01f);
- Rect slRect1ShiftRight = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);
+ inst.baseFighterChance = Widgets.HorizontalSlider(slRect0ShiftRight, inst.baseFighterChance, 0f, 1f, false, "baseFighterChance".Translate() + " " + Rarity(inst.baseFighterChance) + " " + TM_Calc.GetWeightedChance(inst.baseFighterChance), roundTo: .002f);
+ row++;
+ Rect slRect1 = Controller.UIHelper.GetRowRect(slRect0, rowHeight, row);
+ inst.advMageChance = Widgets.HorizontalSlider(slRect1, inst.advMageChance, 0f, 1f, false, "advMageChance".Translate() + " " + Rarity(inst.advMageChance) + " " + TM_Calc.GetWeightedChance(inst.advMageChance), roundTo: .002f);
+ Rect slRect1ShiftRight = Controller.UIHelper.GetRowRect(slRect1, rowHeight, row);
slRect1ShiftRight.x += slRect0.width + 20f;
- Settings.Instance.advFighterChance = Widgets.HorizontalSlider(slRect1ShiftRight, Settings.Instance.advFighterChance, 0f, 2f, false, "advFighterChance".Translate() + " " + Rarity(Settings.Instance.advFighterChance) + " " + TM_Calc.GetFighterSpawnChance().ToString("P1"), "0", "2", .01f);
- num++;
- Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
- num++;
- Rect rowRect0 = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect0, "TM_Wanderer".Translate(), ref Settings.Instance.Wanderer, false);
- Rect rowRect0ShiftRight = Controller.UIHelper.GetRowRect(rowRect0, rowHeight, num);
- rowRect0ShiftRight.x += rowRect0.width + 98f;
- Widgets.CheckboxLabeled(rowRect0ShiftRight, "TM_Wayfarer".Translate(), ref Settings.Instance.Wayfarer, false);
- num++;
- Rect rowRect = Controller.UIHelper.GetRowRect(rowRect0, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect, "TM_Arcanist".Translate(), ref Settings.Instance.Arcanist, false);
- Rect rowRectShiftRight = Controller.UIHelper.GetRowRect(rowRect, rowHeight, num);
- rowRectShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRectShiftRight, "TM_Gladiator".Translate(), ref Settings.Instance.Gladiator, false);
- num++;
- Rect rowRect1 = Controller.UIHelper.GetRowRect(rowRect, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect1, "TM_FireMage".Translate(), ref Settings.Instance.FireMage, false);
- Rect rowRect1ShiftRight = Controller.UIHelper.GetRowRect(rowRect1, rowHeight, num);
- rowRect1ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect1ShiftRight, "TM_Bladedancer".Translate(), ref Settings.Instance.Bladedancer, false);
- num++;
- Rect rowRect2 = Controller.UIHelper.GetRowRect(rowRect1, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect2, "TM_IceMage".Translate(), ref Settings.Instance.IceMage, false);
- Rect rowRect2ShiftRight = Controller.UIHelper.GetRowRect(rowRect2, rowHeight, num);
- rowRect2ShiftRight.x += rowRect1.width + 98f;
- Widgets.CheckboxLabeled(rowRect2ShiftRight, "TM_Sniper".Translate(), ref Settings.Instance.Sniper, false);
- num++;
- Rect rowRect3 = Controller.UIHelper.GetRowRect(rowRect2, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect3, "TM_LitMage".Translate(), ref Settings.Instance.LitMage, false);
- Rect rowRect3ShiftRight = Controller.UIHelper.GetRowRect(rowRect3, rowHeight, num);
- rowRect3ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect3ShiftRight, "TM_Ranger".Translate(), ref Settings.Instance.Ranger, false);
- num++;
- Rect rowRect4 = Controller.UIHelper.GetRowRect(rowRect3, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect4, "TM_Geomancer".Translate(), ref Settings.Instance.Geomancer, false);
- Rect rowRect4ShiftRight = Controller.UIHelper.GetRowRect(rowRect4, rowHeight, num);
- rowRect4ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect4ShiftRight, "TM_Faceless".Translate(), ref Settings.Instance.Faceless, false);
- num++;
- Rect rowRect5 = Controller.UIHelper.GetRowRect(rowRect4, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect5, "TM_Druid".Translate(), ref Settings.Instance.Druid, false);
- Rect rowRect5ShiftRight = Controller.UIHelper.GetRowRect(rowRect5, rowHeight, num);
- rowRect5ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect5ShiftRight, "TM_Psionic".Translate(), ref Settings.Instance.Psionic, false);
- num++;
- Rect rowRect6 = Controller.UIHelper.GetRowRect(rowRect5, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect6, "TM_Paladin".Translate(), ref Settings.Instance.Paladin, false);
- Rect rowRect6ShiftRight = Controller.UIHelper.GetRowRect(rowRect6, rowHeight, num);
- rowRect6ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect6ShiftRight, "TM_DeathKnight".Translate(), ref Settings.Instance.DeathKnight, false);
- num++;
- Rect rowRect7 = Controller.UIHelper.GetRowRect(rowRect6, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect7, "TM_Priest".Translate(), ref Settings.Instance.Priest, false);
- Rect rowRect7ShiftRight = Controller.UIHelper.GetRowRect(rowRect7, rowHeight, num);
- rowRect7ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect7ShiftRight, "TM_Monk".Translate(), ref Settings.Instance.Monk, false);
- num++;
- Rect rowRect8 = Controller.UIHelper.GetRowRect(rowRect7, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect8, "TM_Bard".Translate(), ref Settings.Instance.Bard, false);
- Rect rowRect8ShiftRight = Controller.UIHelper.GetRowRect(rowRect8, rowHeight, num);
- rowRect8ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect8ShiftRight, "TM_Commander".Translate(), ref Settings.Instance.Commander, false);
- num++;
- Rect rowRect9 = Controller.UIHelper.GetRowRect(rowRect8, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect9, "TM_Summoner".Translate(), ref Settings.Instance.Summoner, false);
- Rect rowRect9ShiftRight = Controller.UIHelper.GetRowRect(rowRect9, rowHeight, num);
- rowRect9ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect9ShiftRight, "TM_SuperSoldier".Translate(), ref Settings.Instance.SuperSoldier, false);
- num++;
- Rect rowRect10 = Controller.UIHelper.GetRowRect(rowRect9, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect10, "TM_Necromancer".Translate(), ref Settings.Instance.Necromancer, false);
- Rect rowRect10ShiftRight = Controller.UIHelper.GetRowRect(rowRect10, rowHeight, num);
- rowRect10ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect10ShiftRight, "TM_Shadow".Translate(), ref Settings.Instance.Shadow);
- num++;
- Rect rowRect11 = Controller.UIHelper.GetRowRect(rowRect10, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect11, "TM_Demonkin".Translate(), ref Settings.Instance.Demonkin, false);
- Rect rowRect11ShiftRight = Controller.UIHelper.GetRowRect(rowRect11, rowHeight, num);
- rowRect11ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect11ShiftRight, "TM_Apothecary".Translate(), ref Settings.Instance.Apothecary);
- num++;
- Rect rowRect12 = Controller.UIHelper.GetRowRect(rowRect11, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect12, "TM_Technomancer".Translate(), ref Settings.Instance.Technomancer, false);
- num++;
- Rect rowRect13 = Controller.UIHelper.GetRowRect(rowRect12, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect13, "TM_BloodMage".Translate(), ref Settings.Instance.BloodMage, false);
- num++;
- Rect rowRect14 = Controller.UIHelper.GetRowRect(rowRect13, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect14, "TM_Enchanter".Translate(), ref Settings.Instance.Enchanter, false);
- num++;
- Rect rowRect15 = Controller.UIHelper.GetRowRect(rowRect14, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect15, "TM_Chronomancer".Translate(), ref Settings.Instance.Chronomancer, false);
- num++;
- Rect rowRect16 = Controller.UIHelper.GetRowRect(rowRect15, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect16, "TM_ChaosMage".Translate(), ref Settings.Instance.ChaosMage, false);
- num++;
- Rect rowRect17 = Controller.UIHelper.GetRowRect(rowRect16, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect17, "TM_Brightmage".Translate(), ref Settings.Instance.Brightmage, false);
- num++;
- Rect rowRect18 = Controller.UIHelper.GetRowRect(rowRect17, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect18, "TM_Shaman".Translate(), ref Settings.Instance.Shaman, false);
- num++;
- Rect rowRect21 = Controller.UIHelper.GetRowRect(rowRect18, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect21, "TM_Golemancer".Translate(), ref Settings.Instance.Golemancer, false);
- num++;
- Rect rowRect22 = Controller.UIHelper.GetRowRect(rowRect21, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect22, "TM_Empath".Translate(), ref Settings.Instance.Empath, false);
- num++;
- Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
- num++;
- Rect slRect2 = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);
- Settings.Instance.supportTraitChance = Widgets.HorizontalSlider(slRect2, Settings.Instance.supportTraitChance, 0f, 1f, false, "supportTraitChance".Translate() + " " + (Settings.Instance.supportTraitChance).ToString("P1"), "0", "1", .01f);
+ inst.advFighterChance = Widgets.HorizontalSlider(slRect1ShiftRight, inst.advFighterChance, 0f, 1f, false, "advFighterChance".Translate() + " " + Rarity(inst.advFighterChance) + " " + TM_Calc.GetWeightedChance(inst.advFighterChance), roundTo: .002f);
+ row++;
+ Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * row, inRect.width - 15f);
+
+ // Given a matrix of ClassOptions, build the grid of checkboxes!
+ void buildCheckboxGrid(Rect startingRect, Settings.CheckboxOption[][] grid)
+ {
+ foreach (Settings.CheckboxOption[] gridRow in grid)
+ {
+ row++;
+ for (int i = 0; i < gridRow.Length; i++)
+ {
+ Rect newRect = Controller.UIHelper.GetRowRect(startingRect, rowHeight, row);
+ newRect.x = (startingRect.width + 98f) * i;
+ Widgets.CheckboxLabeled(newRect, gridRow[i].label.Translate(), ref gridRow[i].isEnabled);
+ }
+ }
+ }
+ buildCheckboxGrid(classRect, new []
+ {
+ new []{ Settings.Wanderer, Settings.Wayfarer },
+ new []{ Settings.Arcanist, Settings.Gladiator },
+ new []{ Settings.FireMage, Settings.Bladedancer },
+ new []{ Settings.IceMage, Settings.Sniper },
+ new []{ Settings.LitMage, Settings.Ranger },
+ new []{ Settings.Geomancer, Settings.Faceless },
+ new []{ Settings.Druid, Settings.Psionic },
+ new []{ Settings.Paladin, Settings.DeathKnight },
+ new []{ Settings.Priest, Settings.Monk },
+ new []{ Settings.Bard, Settings.Commander },
+ new []{ Settings.Summoner, Settings.SuperSoldier },
+ new []{ Settings.Necromancer, Settings.Shadow },
+ new []{ Settings.Demonkin, Settings.Apothecary },
+ new []{ Settings.Technomancer },
+ new []{ Settings.BloodMage },
+ new []{ Settings.Enchanter },
+ new []{ Settings.Chronomancer },
+ new []{ Settings.ChaosMage },
+ new []{ Settings.Brightmage },
+ new []{ Settings.Shaman },
+ new []{ Settings.Golemancer },
+ new []{ Settings.Empath },
+ });
+ row++;
+ Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * row, inRect.width - 15f);
+ row++;
+ Rect slRect2 = Controller.UIHelper.GetRowRect(slRect1, rowHeight, row);
+ inst.supportTraitChance = Widgets.HorizontalSlider(slRect2, inst.supportTraitChance, 0f, 1f, false, "supportTraitChance".Translate() + " " + (inst.supportTraitChance).ToString("P1"), "0", "1", .01f);
//Rect slRect2ShiftRight = Controller.UIHelper.GetRowRect(slRect1, rowHeight, num);
- num++;
- Rect rowRect19 = Controller.UIHelper.GetRowRect(rowRect21, rowHeight, num); ;
- Widgets.CheckboxLabeled(rowRect19, "TM_ArcaneConduit".Translate(), ref Settings.Instance.ArcaneConduit, false);
- Rect rowRect19ShiftRight = Controller.UIHelper.GetRowRect(rowRect19, rowHeight, num);
- rowRect19ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect19ShiftRight, "TM_Boundless".Translate(), ref Settings.Instance.Boundless, false);
- num++;
- Rect rowRect20 = Controller.UIHelper.GetRowRect(rowRect19, rowHeight, num); ;
- Widgets.CheckboxLabeled(rowRect20, "TM_ManaWell".Translate(), ref Settings.Instance.ManaWell, false);
- Rect rowRect20ShiftRight = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num);
- rowRect20ShiftRight.x += rowRect.width + 98f;
- Widgets.CheckboxLabeled(rowRect20ShiftRight, "TM_GiantsBlood".Translate(), ref Settings.Instance.GiantsBlood, false);
- num++;
- Rect rowRect20a = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num); ;
- Widgets.CheckboxLabeled(rowRect20a, "TM_FaeBlood".Translate(), ref Settings.Instance.FaeBlood, false);
- num++;
- Rect rowRect20b = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num); ;
- Widgets.CheckboxLabeled(rowRect20b, "TM_Enlightened".Translate(), ref Settings.Instance.Enlightened, false);
- num++;
- Rect rowRect20c = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num); ;
- Widgets.CheckboxLabeled(rowRect20c, "TM_Cursed".Translate(), ref Settings.Instance.Cursed, false);
- num++;
- Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * num, inRect.width - 15f);
- num++;
+ buildCheckboxGrid(classRect, new []
+ {
+ new []{ Settings.ArcaneConduit, Settings.Boundless },
+ new []{ Settings.ManaWell, Settings.GiantsBlood },
+ new []{ Settings.FaeBlood },
+ new []{ Settings.Enlightened },
+ new []{ Settings.Cursed }
+ });
+ row++;
+ Widgets.DrawLineHorizontal(inRect.x - 10f, rowHeight * row, inRect.width - 15f);
+ row++;
GUI.color = Color.cyan;
- Rect customRect = Controller.UIHelper.GetRowRect(rowRect20, rowHeight, num);
+ Rect customRect = Controller.UIHelper.GetRowRect(classRect, rowHeight, row);
Widgets.Label(customRect, "TM_CustomClasses".Translate());
GUI.color = Color.white;
- num++;
- for(int i = 0; i < TM_ClassUtility.CustomClasses.Count; i++)
+ row++;
+ for(int i = 0; i < TM_ClassUtility.CustomClasses.Length; i++)
{
TMDefs.TM_CustomClass cClass = TM_ClassUtility.CustomClasses[i];
- bool classEnabled = Settings.Instance.CustomClass[cClass.classTrait.ToString()];
+ bool classEnabled = inst.CustomClass[cClass.classTrait.ToString()];
if(cClass.classTrait == TorannMagicDefOf.TM_Brightmage)
{
- classEnabled = Settings.Instance.Brightmage;
+ classEnabled = Settings.Brightmage.isEnabled;
}
else if(cClass.classTrait == TorannMagicDefOf.TM_Shaman)
{
- classEnabled = Settings.Instance.Shaman;
+ classEnabled = Settings.Shaman.isEnabled;
}
else if (cClass.classTrait == TorannMagicDefOf.TM_Golemancer)
{
- classEnabled = Settings.Instance.Golemancer;
+ classEnabled = Settings.Golemancer.isEnabled;
}
else if (cClass.classTrait == TorannMagicDefOf.TM_Empath)
{
- classEnabled = Settings.Instance.Empath;
+ classEnabled = Settings.Empath.isEnabled;
}
else if (cClass.classTrait == TorannMagicDefOf.TM_TheShadow)
{
- classEnabled = Settings.Instance.Shadow;
+ classEnabled = Settings.Shadow.isEnabled;
}
else if (cClass.classTrait == TorannMagicDefOf.TM_Apothecary)
{
- classEnabled = Settings.Instance.Apothecary;
+ classEnabled = Settings.Apothecary.isEnabled;
}
else if (cClass.classTrait == TorannMagicDefOf.TM_Empath)
{
- classEnabled = Settings.Instance.Empath;
+ classEnabled = Settings.Empath.isEnabled;
}
if (cClass.shouldShow)
- {
+ {
//if (cClass.isMage && cClass.isFighter)
//{
// GUI.color = Color.yellow;
@@ -261,14 +184,14 @@ public override void DoWindowContents(Rect inRect)
//{
// GUI.color = Color.gray;
//}
- Rect customRect1 = Controller.UIHelper.GetRowRect(customRect, rowHeight, num);
- Widgets.CheckboxLabeled(customRect1, cClass.classTrait.degreeDatas.FirstOrDefault().label, ref classEnabled, false);
- num++;
+ Rect customRect1 = Controller.UIHelper.GetRowRect(customRect, rowHeight, row);
+ Widgets.CheckboxLabeled(customRect1, cClass.classTrait.degreeDatas.FirstOrDefault().label, ref classEnabled);
+ row++;
}
- if (classEnabled != Settings.Instance.CustomClass[cClass.classTrait.ToString()])
+ if (classEnabled != inst.CustomClass[cClass.classTrait.ToString()])
{
- Settings.Instance.CustomClass.Remove(cClass.classTrait.ToString());
- Settings.Instance.CustomClass.Add(cClass.classTrait.ToString(), classEnabled);
+ inst.CustomClass.Remove(cClass.classTrait.ToString());
+ inst.CustomClass.Add(cClass.classTrait.ToString(), classEnabled);
}
//GUI.color = Color.white;
}
@@ -284,19 +207,19 @@ private string Rarity(float val)
{
rarity = "None";
}
- else if (val < .2f)
+ else if (val < .04f)
{
rarity = "Very Rare";
}
- else if (val < .5f)
+ else if (val < .1f)
{
rarity = "Rare";
}
- else if (val < 1f)
+ else if (val < .2f)
{
rarity = "Uncommon";
}
- else if (val < 2f)
+ else if (val < .4f)
{
rarity = "Common";
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Constants.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Constants.cs
index 2b781551..80b4550d 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Constants.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Constants.cs
@@ -9,7 +9,8 @@
using AbilityUser;
namespace TorannMagic.ModOptions
-{
+{
+ [StaticConstructorOnStartup]
public abstract class Constants
{
private static bool pawnInFlight = false;
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Controller.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Controller.cs
index b29f2171..d1ab5968 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Controller.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Controller.cs
@@ -1,4 +1,5 @@
using System;
+using TorannMagic.Enchantment;
using UnityEngine;
using Verse;
@@ -28,15 +29,43 @@ public override string SettingsCategory()
return "A RimWorld of Magic";
}
+ // After defs are loaded on startup
+ private static void AfterDefsLoadedAction()
+ {
+ CompEnchantmentMod.AddComp();
+ CompEnchantmentMod.InitializeUniversalBodyParts();
+ Constants.InitializeCloaks();
+ TM_ClassUtility.InitializeCustomClasses();
+ ModClassOptions.InitializeThingDefDictionaries();
+ ModClassOptions.ReloadSettings(); // Requires InitializeCustomClasses && InitializeThingDefDictionaries
+ ModClassOptions.InitializeCustomClassActions(); // Requires CacheEnabledClasses
+ ModClassOptions.InitializeModBackstories();
+ }
+
public Controller(ModContentPack content) : base(content)
{
- Controller.Instance = this;
- Settings.Instance = base.GetSettings();
+ Instance = this;
+ Settings.Instance = GetSettings();
+ LongEventHandler.ExecuteWhenFinished(AfterDefsLoadedAction);
+ }
+
+ // On Changing of settings
+ public override void WriteSettings()
+ {
+ try
+ {
+ ModClassOptions.ReloadSettings();
+ }
+ catch
+ {
+ Log.Error("[Rimworld of Magic] Error writing settings. Skipping...");
+ }
+ base.WriteSettings();
}
public override void DoSettingsWindowContents(Rect canvas)
- {
- int num = 0;
+ {
+ int row = 0;
float rowHeight = 28f;
Rect sRect = new Rect(canvas.x, canvas.y, canvas.width - 36f, canvas.height + 360f);
scrollPosition = GUI.BeginScrollView(canvas, scrollPosition, sRect, false, true);
@@ -44,24 +73,23 @@ public override void DoSettingsWindowContents(Rect canvas)
Rect rect1 = new Rect(canvas);
rect1.width /= 2.4f;
- num++;
- num++;
- SettingsRef settingsRef = new SettingsRef();
+ row++;
+ row++;
deathExplosionDmgMin = ModOptions.Settings.Instance.deathExplosionMin.ToString();
deathExplosionDmgMax = ModOptions.Settings.Instance.deathExplosionMax.ToString();
- Rect rowRect = UIHelper.GetRowRect(rect1, rowHeight, num);
+ Rect rowRect = UIHelper.GetRowRect(rect1, rowHeight, row);
Settings.Instance.xpMultiplier = Widgets.HorizontalSlider(rowRect, Settings.Instance.xpMultiplier, .1f, 2f, false, "XPMultiplier".Translate() + " " + Settings.Instance.xpMultiplier, ".1", "2", .1f);
- Rect rowRectShiftRight = UIHelper.GetRowRect(rowRect, rowHeight, num);
+ Rect rowRectShiftRight = UIHelper.GetRowRect(rowRect, rowHeight, row);
rowRectShiftRight.x += rowRect.width + 56f;
rowRectShiftRight.width /= 3;
classOptions = Widgets.ButtonText(rowRectShiftRight, "Class Options", true, false, true);
if (classOptions)
{
Rect rect = new Rect(64f, 64f, 480, 640);
- ClassOptionsWindow newWindow = new ClassOptionsWindow();
+ ClassOptionsWindow newWindow = new ClassOptionsWindow();
Find.WindowStack.Add(newWindow);
}
- Rect rowRectShiftRightPlus = UIHelper.GetRowRect(rowRect, rowHeight, num);
+ Rect rowRectShiftRightPlus = UIHelper.GetRowRect(rowRect, rowHeight, row);
rowRectShiftRightPlus.x += (rowRect.width+rowRectShiftRight.width) + 56f;
rowRectShiftRightPlus.width /= 3;
factionOptions = Widgets.ButtonText(rowRectShiftRightPlus, "Faction Options", true, false, true);
@@ -71,10 +99,10 @@ public override void DoSettingsWindowContents(Rect canvas)
FactionOptionsWindow newWindow = new FactionOptionsWindow();
Find.WindowStack.Add(newWindow);
}
- num++;
- Rect rowRect2 = UIHelper.GetRowRect(rowRect, rowHeight, num);
+ row++;
+ Rect rowRect2 = UIHelper.GetRowRect(rowRect, rowHeight, row);
Settings.Instance.needMultiplier = Widgets.HorizontalSlider(rowRect2, Settings.Instance.needMultiplier, 0f, 10f, false, "NeedMultiplier".Translate() + " " + Settings.Instance.needMultiplier, "0", "10", .1f);
- Rect rowRect2ShiftRight = UIHelper.GetRowRect(rowRect2, rowHeight, num);
+ Rect rowRect2ShiftRight = UIHelper.GetRowRect(rowRect2, rowHeight, row);
rowRect2ShiftRight.x += rowRect.width + 56f;
rowRect2ShiftRight.width /= 3;
eventOptions = Widgets.ButtonText(rowRect2ShiftRight, "Event Options", true, false, true);
@@ -84,7 +112,7 @@ public override void DoSettingsWindowContents(Rect canvas)
EventOptionsWindow newWindow = new EventOptionsWindow();
Find.WindowStack.Add(newWindow);
}
- Rect rowRect2ShiftRightPlus = UIHelper.GetRowRect(rowRect2, rowHeight, num);
+ Rect rowRect2ShiftRightPlus = UIHelper.GetRowRect(rowRect2, rowHeight, row);
rowRect2ShiftRightPlus.x += (rowRect2.width + rowRect2ShiftRight.width) + 56f;
rowRect2ShiftRightPlus.width /= 3;
factionOptions = Widgets.ButtonText(rowRect2ShiftRightPlus, "Golem Options", true, false, true);
@@ -94,123 +122,123 @@ public override void DoSettingsWindowContents(Rect canvas)
GolemOptionsWindow newWindow = new GolemOptionsWindow();
Find.WindowStack.Add(newWindow);
}
- num++;
- Rect rowRect21 = UIHelper.GetRowRect(rowRect2, rowHeight, num);
+ row++;
+ Rect rowRect21 = UIHelper.GetRowRect(rowRect2, rowHeight, row);
Settings.Instance.magicyteChance = Widgets.HorizontalSlider(rowRect21, Settings.Instance.magicyteChance, 0, .05f, false, "MagicyteChance".Translate() + " " + Settings.Instance.magicyteChance, "0%", "5%", .001f);
- num++;
- Rect rowRect3 = UIHelper.GetRowRect(rowRect21, rowHeight, num);
+ row++;
+ Rect rowRect3 = UIHelper.GetRowRect(rowRect21, rowHeight, row);
Widgets.CheckboxLabeled(rowRect3, "TM_DeathRetaliationIsLethal".Translate(), ref Settings.Instance.deathRetaliationIsLethal, false);
//rowRect3.width = rowRect3.width * .7f;
//Settings.Instance.deathExplosionRadius = Widgets.HorizontalSlider(rowRect3, Settings.Instance.deathExplosionRadius, .1f, 6f, false, "DeathRadius".Translate() + " " + Settings.Instance.deathExplosionRadius, ".1", "6", .1f);
//Rect rowRect31 = new Rect(rowRect3.xMax + 4f, rowRect3.y, rowRect2.width/2, rowRect3.height);
- //Widgets.TextFieldNumericLabeled(rowRect31, "DeathExplosionMin".Translate(), ref Settings.Instance.deathExplosionMin, ref this.deathExplosionDmgMin, 0, 100);
+ //Widgets.TextFieldNumericLabeled(rowRect31, "DeathExplosionMin".Translate(), ref Settings.Instance.deathExplosionMin, ref this.deathExplosionDmgMin, 0, 100);
//Rect rowRect32 = new Rect(rowRect31.xMax + 4f, rowRect3.y, rowRect2.width/2, rowRect3.height);
//Widgets.TextFieldNumericLabeled(rowRect32, "DeathExplosionMax".Translate(), ref Settings.Instance.deathExplosionMax, ref this.deathExplosionDmgMax, 0, 200);
- num++;
- Rect rowRect4 = UIHelper.GetRowRect(rowRect3, rowHeight, num);
+ row++;
+ Rect rowRect4 = UIHelper.GetRowRect(rowRect3, rowHeight, row);
Settings.Instance.deathRetaliationChance = Widgets.HorizontalSlider(rowRect4, Settings.Instance.deathRetaliationChance, 0f, 1f, false, "TM_DeathRetaliationChance".Translate() + " " + Settings.Instance.deathRetaliationChance.ToString("P0"), "0", "1", .01f);
- Rect rowRect4ShiftRight = UIHelper.GetRowRect(rowRect4, rowHeight, num);
+ Rect rowRect4ShiftRight = UIHelper.GetRowRect(rowRect4, rowHeight, row);
rowRect4ShiftRight.x += rowRect4.width + 56f;
Widgets.CheckboxLabeled(rowRect4ShiftRight, "TM_enableAutocast".Translate(), ref Settings.Instance.autocastEnabled, false);
- num++;
- Rect rowRect5 = UIHelper.GetRowRect(rowRect4, rowHeight, num);
+ row++;
+ Rect rowRect5 = UIHelper.GetRowRect(rowRect4, rowHeight, row);
Settings.Instance.deathRetaliationDelayFactor = Widgets.HorizontalSlider(rowRect5, Settings.Instance.deathRetaliationDelayFactor, .1f, 4f, false, "TM_DeathRetaliationDelay".Translate() + " " + Settings.Instance.deathRetaliationDelayFactor.ToString("P0"), "0", "4", .01f);
- Rect rowRect5ShiftRight = UIHelper.GetRowRect(rowRect5, rowHeight, num);
+ Rect rowRect5ShiftRight = UIHelper.GetRowRect(rowRect5, rowHeight, row);
rowRect5ShiftRight.x += rowRect5.width + 56f;
Widgets.CheckboxLabeled(rowRect5ShiftRight, "TM_queueAutocast".Translate(), ref Settings.Instance.autocastQueueing, false);
TooltipHandler.TipRegion(rowRect5ShiftRight, "TM_queueAutocastDesc".Translate());
- num++;
- Rect rowRect6 = UIHelper.GetRowRect(rowRect5, rowHeight, num);
+ row++;
+ Rect rowRect6 = UIHelper.GetRowRect(rowRect5, rowHeight, row);
//Settings.Instance.advMageChance = Widgets.HorizontalSlider(rowRect6, Settings.Instance.advMageChance, 0f, 2f, false, "advMageChance".Translate() + " " + Rarity(Settings.Instance.advMageChance) + " " + TM_Calc.GetMageSpawnChance().ToString("P1"), "0", "2", .01f);
- Rect rowRect6ShiftRight = UIHelper.GetRowRect(rowRect6, rowHeight, num);
+ Rect rowRect6ShiftRight = UIHelper.GetRowRect(rowRect6, rowHeight, row);
rowRect6ShiftRight.x += rowRect6.width + 56f;
Settings.Instance.autocastMinThreshold = Widgets.HorizontalSlider(rowRect6ShiftRight, Settings.Instance.autocastMinThreshold, 0f, 1f, false, "TM_autocastUndraftedThreshold".Translate() + " " + (Settings.Instance.autocastMinThreshold * 100) + "%", "0", "1", .01f);
- num++;
- Rect rowRect66 = UIHelper.GetRowRect(rowRect6, rowHeight, num);
+ row++;
+ Rect rowRect66 = UIHelper.GetRowRect(rowRect6, rowHeight, row);
Settings.Instance.undeadUpkeepMultiplier = Widgets.HorizontalSlider(rowRect66, Settings.Instance.undeadUpkeepMultiplier, 0f, 5f, false, "TM_UndeadUpkeepMultiplier".Translate() + " " + Settings.Instance.undeadUpkeepMultiplier.ToString("P1"), "0", "5", .01f);
- Rect rowRect66ShiftRight = UIHelper.GetRowRect(rowRect66, rowHeight, num);
+ Rect rowRect66ShiftRight = UIHelper.GetRowRect(rowRect66, rowHeight, row);
rowRect66ShiftRight.x += rowRect66.width + 56f;
Settings.Instance.autocastCombatMinThreshold = Widgets.HorizontalSlider(rowRect66ShiftRight, Settings.Instance.autocastCombatMinThreshold, 0f, 1f, false, "TM_autocastDraftedThreshold".Translate() + " " + (Settings.Instance.autocastCombatMinThreshold * 100) + "%", "0", "1", .01f);
- num++;
- Rect rowRect67 = UIHelper.GetRowRect(rowRect66, rowHeight, num);
+ row++;
+ Rect rowRect67 = UIHelper.GetRowRect(rowRect66, rowHeight, row);
Settings.Instance.paracyteSoftCap = Widgets.HorizontalSlider(rowRect67, Settings.Instance.paracyteSoftCap, 0, 500, false, "TM_ParacyteSoftCap".Translate() + " " + (Settings.Instance.paracyteSoftCap), "0", "500", 1);
- Rect rowRect67ShiftRight = UIHelper.GetRowRect(rowRect67, rowHeight, num);
+ Rect rowRect67ShiftRight = UIHelper.GetRowRect(rowRect67, rowHeight, row);
rowRect67ShiftRight.x += rowRect67.width + 56f;
Settings.Instance.autocastEvaluationFrequency = Mathf.RoundToInt(Widgets.HorizontalSlider(rowRect67ShiftRight, Settings.Instance.autocastEvaluationFrequency, 60, 600, false, "TM_autocastEvaluationFrequency".Translate() + " " + (Settings.Instance.autocastEvaluationFrequency / 60) + "seconds", "1", "10", .1f));
- num++;
- Rect rowRect68 = UIHelper.GetRowRect(rowRect67, rowHeight, num);
+ row++;
+ Rect rowRect68 = UIHelper.GetRowRect(rowRect67, rowHeight, row);
Widgets.CheckboxLabeled(rowRect68, "TM_ParacyteMagesCount".Translate(), ref Settings.Instance.paracyteMagesCount, false);
- Rect rowRect68ShiftRight = UIHelper.GetRowRect(rowRect68, rowHeight, num);
+ Rect rowRect68ShiftRight = UIHelper.GetRowRect(rowRect68, rowHeight, row);
rowRect68ShiftRight.x += rowRect68.width + 56f;
Widgets.CheckboxLabeled(rowRect68ShiftRight, "TM_autocastAnimals".Translate(), ref Settings.Instance.autocastAnimals, false);
- num++;
- Rect rowRect7 = UIHelper.GetRowRect(rowRect68, rowHeight, num);
+ row++;
+ Rect rowRect7 = UIHelper.GetRowRect(rowRect68, rowHeight, row);
Widgets.CheckboxLabeled(rowRect7, "AICanCast".Translate(), ref Settings.Instance.AICasting, false);
- Rect rowRect7ShiftRight = UIHelper.GetRowRect(rowRect7, rowHeight, num);
+ Rect rowRect7ShiftRight = UIHelper.GetRowRect(rowRect7, rowHeight, row);
rowRect7ShiftRight.x += rowRect7.width + 56f;
- Widgets.CheckboxLabeled(rowRect7ShiftRight, "AIHardMode".Translate(), ref Settings.Instance.AIHardMode, !ModOptions.Settings.Instance.AICasting);
- num++;
- Rect rowRect9 = UIHelper.GetRowRect(rowRect7, rowHeight, num);
+ Widgets.CheckboxLabeled(rowRect7ShiftRight, "AIHardMode".Translate(), ref Settings.Instance.AIHardMode, !ModOptions.Settings.Instance.AICasting);
+ row++;
+ Rect rowRect9 = UIHelper.GetRowRect(rowRect7, rowHeight, row);
Widgets.CheckboxLabeled(rowRect9, "AIMarking".Translate(), ref Settings.Instance.AIMarking, false);
- Rect rowRect91 = UIHelper.GetRowRect(rowRect9, rowHeight, num);
+ Rect rowRect91 = UIHelper.GetRowRect(rowRect9, rowHeight, row);
rowRect91.x += rowRect9.width + 56f;
Widgets.CheckboxLabeled(rowRect91, "AIFighterMarking".Translate(), ref Settings.Instance.AIFighterMarking, false);
- num++;
- Rect rowRect92 = UIHelper.GetRowRect(rowRect9, rowHeight, num);
+ row++;
+ Rect rowRect92 = UIHelper.GetRowRect(rowRect9, rowHeight, row);
Widgets.CheckboxLabeled(rowRect92, "AIFriendlyMarking".Translate(), ref Settings.Instance.AIFriendlyMarking, false);
- Rect rowRect92ShiftRight = UIHelper.GetRowRect(rowRect92, rowHeight, num);
+ Rect rowRect92ShiftRight = UIHelper.GetRowRect(rowRect92, rowHeight, row);
rowRect92ShiftRight.x += rowRect92.width + 56f;
Widgets.CheckboxLabeled(rowRect92ShiftRight, "showLevelUpMessage".Translate(), ref Settings.Instance.showLevelUpMessage, false);
- num++;
- Rect rowRect93 = UIHelper.GetRowRect(rowRect92, rowHeight, num);
+ row++;
+ Rect rowRect93 = UIHelper.GetRowRect(rowRect92, rowHeight, row);
Widgets.CheckboxLabeled(rowRect93, "showMagicGizmo".Translate(), ref Settings.Instance.showGizmo, false);
- Rect rowRect93ShiftRight = UIHelper.GetRowRect(rowRect93, rowHeight, num);
+ Rect rowRect93ShiftRight = UIHelper.GetRowRect(rowRect93, rowHeight, row);
rowRect93ShiftRight.x += rowRect93.width + 56f;
Widgets.CheckboxLabeled(rowRect93ShiftRight, "showUndeadPawnChange".Translate(), ref Settings.Instance.changeUndeadPawnAppearance, false);
- num++;
- Rect rowRect10 = UIHelper.GetRowRect(rowRect93, rowHeight, num);
+ row++;
+ Rect rowRect10 = UIHelper.GetRowRect(rowRect93, rowHeight, row);
Widgets.CheckboxLabeled(rowRect10, "TM_shrinkIcons".Translate(), ref Settings.Instance.shrinkIcons, false);
- Rect rowRect10ShiftRight = UIHelper.GetRowRect(rowRect10, rowHeight, num);
+ Rect rowRect10ShiftRight = UIHelper.GetRowRect(rowRect10, rowHeight, row);
rowRect10ShiftRight.x += rowRect10.width + 56f;
Widgets.CheckboxLabeled(rowRect10ShiftRight, "showUndeadAnimalChange".Translate(), ref Settings.Instance.changeUndeadAnimalAppearance, false);
- num++;
- Rect rowRect11 = UIHelper.GetRowRect(rowRect10, rowHeight, num);
+ row++;
+ Rect rowRect11 = UIHelper.GetRowRect(rowRect10, rowHeight, row);
Widgets.CheckboxLabeled(rowRect11, "unrestrictedBloodTypesForBloodMagic".Translate(), ref Settings.Instance.unrestrictedBloodTypes, false);
- Rect rowRect11ShiftRight = UIHelper.GetRowRect(rowRect11, rowHeight, num);
+ Rect rowRect11ShiftRight = UIHelper.GetRowRect(rowRect11, rowHeight, row);
rowRect11ShiftRight.x += rowRect11.width + 56f;
Widgets.CheckboxLabeled(rowRect11ShiftRight, "showClassIconOnColonistBar".Translate(), ref Settings.Instance.showClassIconOnColonistBar, false);
- num++;
- Rect rowRect12 = UIHelper.GetRowRect(rowRect11, rowHeight, num);
+ row++;
+ Rect rowRect12 = UIHelper.GetRowRect(rowRect11, rowHeight, row);
Widgets.CheckboxLabeled(rowRect12, "TM_AggressiveAICasting".Translate(), ref Settings.Instance.AIAggressiveCasting, false);
- Rect rowRect12ShiftRight = UIHelper.GetRowRect(rowRect12, rowHeight, num);
+ Rect rowRect12ShiftRight = UIHelper.GetRowRect(rowRect12, rowHeight, row);
rowRect12ShiftRight.x += rowRect12.width + 56f;
if (Settings.Instance.showClassIconOnColonistBar)
{
Settings.Instance.classIconSize = Widgets.HorizontalSlider(rowRect12ShiftRight, Settings.Instance.classIconSize, .5f, 2.5f, false, "classIconSize".Translate() + " " + Settings.Instance.classIconSize.ToString("P1"), "0", "2.5", .01f);
}
- num++;
- Rect rowRect13 = UIHelper.GetRowRect(rowRect12, rowHeight, num);
+ row++;
+ Rect rowRect13 = UIHelper.GetRowRect(rowRect12, rowHeight, row);
Widgets.CheckboxLabeled(rowRect13, "TM_UnrestrictedWeaponCopy".Translate(), ref Settings.Instance.unrestrictedWeaponCopy, false);
- Rect rowRect13ShiftRight = UIHelper.GetRowRect(rowRect13, rowHeight, num);
+ Rect rowRect13ShiftRight = UIHelper.GetRowRect(rowRect13, rowHeight, row);
rowRect13ShiftRight.x += rowRect13.width + 56f;
Widgets.CheckboxLabeled(rowRect13ShiftRight, "TM_CameraSnap".Translate(), ref Settings.Instance.cameraSnap, false);
- num++;
- Rect rowRect14 = UIHelper.GetRowRect(rowRect13, rowHeight, num);
+ row++;
+ Rect rowRect14 = UIHelper.GetRowRect(rowRect13, rowHeight, row);
//Widgets.CheckboxLabeled(rowRect13, "TM_UnrestrictedWeaponCopy".Translate(), ref Settings.Instance.unrestrictedWeaponCopy, false);
//Rect rowRect14ShiftRight = UIHelper.GetRowRect(rowRect14, rowHeight, num);
//rowRect14ShiftRight.x += rowRect13.width + 56f;
//Settings.Instance.iconPosition.y = Widgets.HorizontalSlider(rowRect14ShiftRight, Settings.Instance.iconPosition.y, -UI.screenHeight/(5f), UI.screenHeight/(5f), false, "y offset " + Settings.Instance.iconPosition.y, "-", "+", 1f);
//num++;
- num++;
- Rect rowRect20 = UIHelper.GetRowRect(rowRect10, rowHeight, num);
+ row++;
+ Rect rowRect20 = UIHelper.GetRowRect(rowRect10, rowHeight, row);
rowRect20.width = 120f;
- Rect rowRect20ShiftRight1 = UIHelper.GetRowRect(rowRect20, rowHeight, num);
+ Rect rowRect20ShiftRight1 = UIHelper.GetRowRect(rowRect20, rowHeight, row);
rowRect20ShiftRight1.x = rowRect20.width + 40f;
- Rect rowRect20ShiftRight2 = UIHelper.GetRowRect(rowRect20ShiftRight1, rowHeight, num);
+ Rect rowRect20ShiftRight2 = UIHelper.GetRowRect(rowRect20ShiftRight1, rowHeight, row);
rowRect20ShiftRight2.x = rowRect20.width + rowRect20ShiftRight1.width + 40f;
//GUI.color = Color.yellow;
//GUI.backgroundColor = Color.yellow;
- reset = Widgets.ButtonText(rowRect20, "Default", true, false, true);
+ reset = Widgets.ButtonText(rowRect20, "Default", true, false);
if (reset)
{
Settings.Instance.xpMultiplier = 1f;
@@ -223,10 +251,10 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.AIMarking = true;
Settings.Instance.AIFighterMarking = false;
Settings.Instance.AIFriendlyMarking = false;
- Settings.Instance.baseMageChance = 1f;
- Settings.Instance.baseFighterChance = 1f;
- Settings.Instance.advMageChance = 0.5f;
- Settings.Instance.advFighterChance = 0.5f;
+ Settings.Instance.baseMageChance = 0.063f;
+ Settings.Instance.baseFighterChance = 0.063f;
+ Settings.Instance.advMageChance = 0.083f;
+ Settings.Instance.advFighterChance = 0.042f;
Settings.Instance.magicyteChance = .005f;
Settings.Instance.showIconsMultiSelect = true;
Settings.Instance.showGizmo = true;
@@ -250,8 +278,8 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.shrinkIcons = false;
Settings.Instance.cameraSnap = true;
- this.deathExplosionDmgMax = "50.0";
- this.deathExplosionDmgMin = "20.0";
+ deathExplosionDmgMax = "50.0";
+ deathExplosionDmgMin = "20.0";
Settings.Instance.autocastEnabled = true;
Settings.Instance.autocastMinThreshold = .7f;
@@ -272,10 +300,10 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.AIMarking = false;
Settings.Instance.AIFighterMarking = false;
Settings.Instance.AIFriendlyMarking = false;
- Settings.Instance.baseMageChance = .8f;
- Settings.Instance.baseFighterChance = .8f;
- Settings.Instance.advMageChance = 1.5f;
- Settings.Instance.advFighterChance = 1.5f;
+ Settings.Instance.baseMageChance = .05f;
+ Settings.Instance.baseFighterChance = .05f;
+ Settings.Instance.advMageChance = 0.25f;
+ Settings.Instance.advFighterChance = 0.125f;
Settings.Instance.magicyteChance = .003f;
Settings.Instance.showIconsMultiSelect = true;
Settings.Instance.showGizmo = true;
@@ -295,8 +323,8 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.deathRetaliationIsLethal = true;
Settings.Instance.deathRetaliationChance = 1f;
Settings.Instance.deathRetaliationDelayFactor = .3f;
- this.deathExplosionDmgMax = "60.0";
- this.deathExplosionDmgMin = "30.0";
+ deathExplosionDmgMax = "60.0";
+ deathExplosionDmgMin = "30.0";
Settings.Instance.autocastEnabled = true;
Settings.Instance.autocastMinThreshold = .8f;
@@ -317,10 +345,10 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.AIMarking = false;
Settings.Instance.AIFighterMarking = false;
Settings.Instance.AIFriendlyMarking = false;
- Settings.Instance.baseMageChance = 2f;
- Settings.Instance.baseFighterChance = 2f;
- Settings.Instance.advMageChance = 1f;
- Settings.Instance.advFighterChance = 1f;
+ Settings.Instance.baseMageChance = 0.04f;
+ Settings.Instance.baseFighterChance = 0.04f;
+ Settings.Instance.advMageChance = 0.02f;
+ Settings.Instance.advFighterChance = 0.02f;
Settings.Instance.magicyteChance = .01f;
Settings.Instance.showIconsMultiSelect = true;
Settings.Instance.showGizmo = true;
@@ -334,8 +362,8 @@ public override void DoSettingsWindowContents(Rect canvas)
Settings.Instance.riftChallenge = 1f;
Settings.Instance.autocastAnimals = false;
Settings.Instance.unrestrictedWeaponCopy = false;
- this.deathExplosionDmgMax = "5.0";
- this.deathExplosionDmgMin = "10.0";
+ deathExplosionDmgMax = "5.0";
+ deathExplosionDmgMin = "10.0";
Settings.Instance.autocastEnabled = true;
Settings.Instance.autocastMinThreshold = .6f;
@@ -345,7 +373,6 @@ public override void DoSettingsWindowContents(Rect canvas)
//Widgets.EndScrollView();
GUI.EndScrollView();
-
}
public static class UIHelper
@@ -357,58 +384,5 @@ public static Rect GetRowRect(Rect inRect, float rowHeight, int row)
return result;
}
}
-
- private string Rarity(float val)
- {
- string rarity = "";
- if (val == 0)
- {
- rarity = "None";
- }
- else if (val < .2f)
- {
- rarity = "Very Rare";
- }
- else if (val < .5f)
- {
- rarity = "Rare";
- }
- else if (val < 1f)
- {
- rarity = "Uncommon";
- }
- else if (val < 2f)
- {
- rarity = "Common";
- }
- else
- {
- rarity = "Frequent";
- }
- return rarity;
- }
-
- private string Challenge(float val)
- {
- string rarity = "";
- if (val == 0)
- {
- rarity = "None (never happens)";
- }
- else if (val <= 1)
- {
- rarity = "Easy";
- }
- else if (val <= 2)
- {
- rarity = "Normal";
- }
- else
- {
- rarity = "Hard";
- }
-
- return rarity;
- }
}
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ExtraOptionsWindow.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ExtraOptionsWindow.cs
index 3316846f..3d0d8292 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ExtraOptionsWindow.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ExtraOptionsWindow.cs
@@ -50,10 +50,10 @@ public override void DoWindowContents(Rect inRect)
//Options
GUI.color = Color.white;
Rect rowRect = Controller.UIHelper.GetRowRect(classRect, rowHeight, num);
- Widgets.CheckboxLabeled(rowRect, "TM_Arcanist".Translate(), ref Settings.Instance.Arcanist, false);
+ Widgets.CheckboxLabeled(rowRect, "TM_Arcanist".Translate(), ref Settings.Arcanist.isEnabled);
Rect rowRectShiftRight = Controller.UIHelper.GetRowRect(rowRect, rowHeight, num);
rowRectShiftRight.x += rowRect.width + 140f;
- Widgets.CheckboxLabeled(rowRectShiftRight, "TM_Gladiator".Translate(), ref Settings.Instance.Gladiator, false);
+ Widgets.CheckboxLabeled(rowRectShiftRight, "TM_Gladiator".Translate(), ref Settings.Gladiator.isEnabled);
num++;
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/FactionDictionary.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/FactionDictionary.cs
index c532ed66..bad4b978 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/FactionDictionary.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/FactionDictionary.cs
@@ -44,8 +44,6 @@ public static void InitializeFactionSettings()
{
Settings.Instance.FactionFighterSettings = new Dictionary();
Settings.Instance.FactionMageSettings = new Dictionary();
- Settings.Instance.FactionFighterSettings.Clear();
- Settings.Instance.FactionMageSettings.Clear();
foreach (FactionDef current in factionDefs)
{
if (current.defName == "Seers")
@@ -63,9 +61,7 @@ public static void InitializeFactionSettings()
else
{
Dictionary fList = new Dictionary();
- fList.Clear();
Dictionary mList = new Dictionary();
- mList.Clear();
foreach (FactionDef current in factionDefs)
{
if (Settings.Instance.FactionFighterSettings.ContainsKey(current.defName))
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ModClassOptions.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ModClassOptions.cs
index 129155bf..43439bd3 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ModClassOptions.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/ModClassOptions.cs
@@ -6,6 +6,7 @@
using UnityEngine;
using System.Text;
using HarmonyLib;
+using TorannMagic.TMDefs;
using TorannMagic.Utils;
namespace TorannMagic.ModOptions
@@ -13,23 +14,23 @@ namespace TorannMagic.ModOptions
internal class ModClassOptions : Mod
{
// These get initialized in InitializeThingDefDictionaries since things must load first before ThingDefs can be accessed.
- private static Dictionary> thingDefIndexToSettingsRefMap;
- private static Dictionary> spellIndexToSettingsRefMap;
- private static Dictionary settingsValueGetter, ThingDef spell)> recipeIndexMap;
+ private static Dictionary thingDefIndexToSettingsRefMap;
+ private static Dictionary spellIndexToSettingsRefMap;
+ private static Dictionary recipeIndexMap;
- public ModClassOptions(ModContentPack mcp) : base(mcp)
+ public ModClassOptions(ModContentPack content) : base(content) { }
+
+ // Requires TM_ClassUtility.InitializeCustomClasses and ModClassOptions.InitializeThingDefDictionaries to be ran before
+ public static void ReloadSettings()
{
- LongEventHandler.ExecuteWhenFinished(TM_ClassUtility.LoadCustomClasses);
- //TM_ClassUtility.LoadCustomClasses();
- LongEventHandler.ExecuteWhenFinished(CheckForDisabledCustomClass);
- LongEventHandler.ExecuteWhenFinished(InitializeThingDefDictionaries);
- LongEventHandler.ExecuteWhenFinished(RestrictClasses);
- LongEventHandler.ExecuteWhenFinished(InitializeFactionSettings);
- LongEventHandler.ExecuteWhenFinished(InitializeCustomClassActions);
- LongEventHandler.ExecuteWhenFinished(InitializeModBackstories);
+ TM_ClassUtility.LoadCustomClasses();
+ TM_ClassUtility.CacheEnabledClasses();
+ CheckForDisabledCustomClass();
+ RestrictClasses();
+ InitializeFactionSettings();
}
- private static void InitializeModBackstories()
+ public static void InitializeModBackstories()
{
BackstorySlot TM_BS = (BackstorySlot)13;
@@ -75,21 +76,16 @@ private static void InitializeModBackstories()
//BackstoryDatabase.AddBackstory(TM_RegretSpiritBS);
}
- private static void InitializeFactionSettings()
+ public static void InitializeFactionSettings()
{
ModOptions.FactionDictionary.InitializeFactionSettings();
}
- private static void CheckForDisabledCustomClass()
+ public static void CheckForDisabledCustomClass()
{
- if(Settings.Instance.CustomClass == null)
- {
- Settings.Instance.CustomClass = new Dictionary();
- Settings.Instance.CustomClass.Clear();
- }
- for (int i = 0; i < TM_ClassUtility.CustomClasses.Count; i++)
+ for (int i = 0; i < TM_ClassUtility.CustomClasses.Length; i++)
{
- TMDefs.TM_CustomClass customClass = TM_ClassUtility.CustomClasses[i];
+ TM_CustomClass customClass = TM_ClassUtility.CustomClasses[i];
if(!Settings.Instance.CustomClass.Keys.Contains(customClass.classTrait.ToString()))
{
Settings.Instance.CustomClass.Add(customClass.classTrait.ToString(), true);
@@ -97,16 +93,19 @@ private static void CheckForDisabledCustomClass()
}
}
- private static void InitializeCustomClassActions()
+ public static void InitializeCustomClassActions()
{
//Conflicting trait levelset
List customTraits = new List();
- customTraits.Clear();
const string customIconType = "TM_Icon_Custom";
-
- for (int i = 0; i < TM_ClassUtility.CustomClasses.Count; i++)
+
+ TM_CustomClassDef named = TM_CustomClassDef.Named("TM_CustomClasses");
+ if (named == null) return;
+ List customClasses = named.customClasses;
+
+ for (int i = 0; i < customClasses.Count; i++)
{
- TMDefs.TM_CustomClass customClass = TM_ClassUtility.CustomClasses[i];
+ TM_CustomClass customClass = customClasses[i];
//customTraits.AddDistinct(customClass.classTrait);
if (customTraits.Contains(customClass.classTrait))
{
@@ -134,12 +133,11 @@ private static void InitializeCustomClassActions()
// Add custom trait to list for processing
customTraits.Add(customClass.classTrait);
}
- customClass.classTrait.conflictingTraits.AddRange(TM_Data.AllClassTraits);
+ customClass.classTrait.conflictingTraits.AddRange(TM_ClassUtility.AllClassTraits);
}
- IEnumerable enumerable = from def in DefDatabase.AllDefs
- where (TM_Data.AllClassTraits.Contains(def))
- select def;
+ IEnumerable enumerable =
+ DefDatabase.AllDefs.Where(static def => TM_ClassUtility.AllClassTraits.Contains(def));
foreach (TraitDef current in enumerable)
{
@@ -157,1008 +155,431 @@ private static void InitializeCustomClassActions()
}
}
}
- private static void InitializeThingDefDictionaries()
+ public static void InitializeThingDefDictionaries()
{
- thingDefIndexToSettingsRefMap = new Dictionary>
+ thingDefIndexToSettingsRefMap = new Dictionary
{
- { TorannMagicDefOf.BookOfSniper.index, () => new SettingsRef().Sniper },
- { TorannMagicDefOf.BookOfRanger.index, () => new SettingsRef().Ranger },
- { TorannMagicDefOf.TM_PoisonTrap.index, () => new SettingsRef().Ranger },
- { TorannMagicDefOf.BookOfGladiator.index, () => new SettingsRef().Gladiator },
- { TorannMagicDefOf.BookOfBladedancer.index, () => new SettingsRef().Bladedancer },
- { TorannMagicDefOf.BookOfFaceless.index, () => new SettingsRef().Faceless },
- { TorannMagicDefOf.BookOfPsionic.index, () => new SettingsRef().Psionic },
- { TorannMagicDefOf.BookOfDeathKnight.index, () => new SettingsRef().DeathKnight },
- { TorannMagicDefOf.BookOfMonk.index, () => new SettingsRef().Monk },
- { TorannMagicDefOf.BookOfCommander.index, () => new SettingsRef().Commander },
- { TorannMagicDefOf.BookOfSuperSoldier.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_60mmMortar_Base.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base1.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base2.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base3.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base4.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base5.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base6.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base7.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base8.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base9.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base10.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base11.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base12.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base13.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base14.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base15.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base16.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base17.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base18.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_PistolSpec_Base19.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base1.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base2.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base3.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base4.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base5.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base6.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base7.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base8.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base9.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base10.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base11.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base12.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base13.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base14.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base15.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base16.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base17.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base18.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_RifleSpec_Base19.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base1.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base2.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base3.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base4.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base5.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base6.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base7.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base8.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base9.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base10.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base11.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base12.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base13.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base14.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base15.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base16.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base17.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base18.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.TM_ShotgunSpec_Base19.index, () => new SettingsRef().SuperSoldier },
- { TorannMagicDefOf.BookOfArcanist.index, () => new SettingsRef().Arcanist },
- { TorannMagicDefOf.Torn_BookOfArcanist.index, () => new SettingsRef().Arcanist },
- { TorannMagicDefOf.Torn_BookOfInnerFire.index, () => new SettingsRef().FireMage },
- { TorannMagicDefOf.BookOfInnerFire.index, () => new SettingsRef().FireMage },
- { TorannMagicDefOf.Torn_BookOfHeartOfFrost.index, () => new SettingsRef().IceMage },
- { TorannMagicDefOf.BookOfHeartOfFrost.index, () => new SettingsRef().IceMage },
- { TorannMagicDefOf.Torn_BookOfStormBorn.index, () => new SettingsRef().LitMage },
- { TorannMagicDefOf.BookOfStormBorn.index, () => new SettingsRef().LitMage },
- { TorannMagicDefOf.Torn_BookOfNature.index, () => new SettingsRef().Druid },
- { TorannMagicDefOf.BookOfDruid.index, () => new SettingsRef().Druid },
- { TorannMagicDefOf.SeedofRegrowth.index, () => new SettingsRef().Druid },
- { TorannMagicDefOf.Torn_BookOfSummoner.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.BookOfSummoner.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.TM_ManaMine.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.TM_ManaMine_I.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.TM_ManaMine_II.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.TM_ManaMine_III.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.DefensePylon.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.DefensePylon_I.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.DefensePylon_II.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.DefensePylon_III.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.Launcher_DefensePylon.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.Launcher_DefensePylon_I.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.Launcher_DefensePylon_II.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.Launcher_DefensePylon_III.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.TM_Poppi.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.Torn_BookOfValiant.index, () => new SettingsRef().Paladin },
- { TorannMagicDefOf.BookOfValiant.index, () => new SettingsRef().Paladin },
- { TorannMagicDefOf.Torn_BookOfPriest.index, () => new SettingsRef().Priest },
- { TorannMagicDefOf.BookOfPriest.index, () => new SettingsRef().Priest },
- { TorannMagicDefOf.Torn_BookOfBard.index, () => new SettingsRef().Bard },
- { TorannMagicDefOf.BookOfBard.index, () => new SettingsRef().Bard },
- { TorannMagicDefOf.BookOfNecromancer.index, () => new SettingsRef().Necromancer },
- { TorannMagicDefOf.Torn_BookOfUndead.index, () => new SettingsRef().Necromancer },
- { TorannMagicDefOf.TM_Artifact_NecroticOrb.index, () => new SettingsRef().Necromancer },
- { TorannMagicDefOf.Torn_BookOfEarth.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.BookOfEarth.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.TM_Lesser_SentinelR.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.TM_SentinelR.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.TM_Greater_SentinelR.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.Torn_BookOfDemons.index, () => new SettingsRef().Demonkin },
- { TorannMagicDefOf.BookOfDemons.index, () => new SettingsRef().Demonkin },
- { TorannMagicDefOf.Torn_BookOfMagitech.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.BookOfMagitech.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.Torn_BookOfHemomancy.index, () => new SettingsRef().BloodMage },
- { TorannMagicDefOf.BookOfHemomancy.index, () => new SettingsRef().BloodMage },
- { TorannMagicDefOf.Torn_BookOfEnchanter.index, () => new SettingsRef().Enchanter },
- { TorannMagicDefOf.BookOfEnchanter.index, () => new SettingsRef().Enchanter },
- { TorannMagicDefOf.Torn_BookOfChronomancer.index, () => new SettingsRef().Chronomancer },
- { TorannMagicDefOf.BookOfChronomancer.index, () => new SettingsRef().Chronomancer },
- { TorannMagicDefOf.Torn_BookOfChaos.index, () => new SettingsRef().ChaosMage },
- { TorannMagicDefOf.BookOfChaos.index, () => new SettingsRef().ChaosMage }
+ { TorannMagicDefOf.BookOfSniper.index, Settings.Sniper },
+ { TorannMagicDefOf.BookOfRanger.index, Settings.Ranger },
+ { ThingDef.Named("TM_PoisonTrap").index, Settings.Ranger },
+ { TorannMagicDefOf.BookOfGladiator.index, Settings.Gladiator },
+ { TorannMagicDefOf.BookOfBladedancer.index, Settings.Bladedancer },
+ { TorannMagicDefOf.BookOfFaceless.index, Settings.Faceless },
+ { TorannMagicDefOf.BookOfPsionic.index, Settings.Psionic },
+ { TorannMagicDefOf.BookOfDeathKnight.index, Settings.DeathKnight },
+ { TorannMagicDefOf.BookOfMonk.index, Settings.Monk },
+ { TorannMagicDefOf.BookOfCommander.index, Settings.Commander },
+ { TorannMagicDefOf.BookOfSuperSoldier.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_60mmMortar_Base.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base1.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base2.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base3.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base4.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base5.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base6.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base7.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base8.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base9.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base10.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base11.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base12.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base13.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base14.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base15.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base16.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base17.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base18.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_PistolSpec_Base19.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base1.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base2.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base3.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base4.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base5.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base6.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base7.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base8.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base9.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base10.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base11.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base12.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base13.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base14.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base15.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base16.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base17.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base18.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_RifleSpec_Base19.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base1.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base2.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base3.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base4.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base5.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base6.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base7.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base8.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base9.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base10.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base11.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base12.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base13.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base14.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base15.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base16.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base17.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base18.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_ShotgunSpec_Base19.index, Settings.SuperSoldier },
+ { TorannMagicDefOf.BookOfArcanist.index, Settings.Arcanist },
+ { TorannMagicDefOf.Torn_BookOfArcanist.index, Settings.Arcanist },
+ { TorannMagicDefOf.Torn_BookOfInnerFire.index, Settings.FireMage },
+ { TorannMagicDefOf.BookOfInnerFire.index, Settings.FireMage },
+ { TorannMagicDefOf.Torn_BookOfHeartOfFrost.index, Settings.IceMage },
+ { TorannMagicDefOf.BookOfHeartOfFrost.index, Settings.IceMage },
+ { TorannMagicDefOf.Torn_BookOfStormBorn.index, Settings.LitMage },
+ { TorannMagicDefOf.BookOfStormBorn.index, Settings.LitMage },
+ { TorannMagicDefOf.Torn_BookOfNature.index, Settings.Druid },
+ { TorannMagicDefOf.BookOfDruid.index, Settings.Druid },
+ { TorannMagicDefOf.SeedofRegrowth.index, Settings.Druid },
+ { TorannMagicDefOf.Torn_BookOfSummoner.index, Settings.Summoner },
+ { TorannMagicDefOf.BookOfSummoner.index, Settings.Summoner },
+ { TorannMagicDefOf.TM_ManaMine.index, Settings.Summoner },
+ { TorannMagicDefOf.TM_ManaMine_I.index, Settings.Summoner },
+ { TorannMagicDefOf.TM_ManaMine_II.index, Settings.Summoner },
+ { TorannMagicDefOf.TM_ManaMine_III.index, Settings.Summoner },
+ { TorannMagicDefOf.DefensePylon.index, Settings.Summoner },
+ { TorannMagicDefOf.DefensePylon_I.index, Settings.Summoner },
+ { TorannMagicDefOf.DefensePylon_II.index, Settings.Summoner },
+ { TorannMagicDefOf.DefensePylon_III.index, Settings.Summoner },
+ { TorannMagicDefOf.Launcher_DefensePylon.index, Settings.Summoner },
+ { TorannMagicDefOf.Launcher_DefensePylon_I.index, Settings.Summoner },
+ { TorannMagicDefOf.Launcher_DefensePylon_II.index, Settings.Summoner },
+ { TorannMagicDefOf.Launcher_DefensePylon_III.index, Settings.Summoner },
+ { TorannMagicDefOf.TM_Poppi.index, Settings.Summoner },
+ { TorannMagicDefOf.Torn_BookOfValiant.index, Settings.Paladin },
+ { TorannMagicDefOf.BookOfValiant.index, Settings.Paladin },
+ { TorannMagicDefOf.Torn_BookOfPriest.index, Settings.Priest },
+ { TorannMagicDefOf.BookOfPriest.index, Settings.Priest },
+ { TorannMagicDefOf.Torn_BookOfBard.index, Settings.Bard },
+ { TorannMagicDefOf.BookOfBard.index, Settings.Bard },
+ { TorannMagicDefOf.BookOfNecromancer.index, Settings.Necromancer },
+ { TorannMagicDefOf.Torn_BookOfUndead.index, Settings.Necromancer },
+ { TorannMagicDefOf.TM_Artifact_NecroticOrb.index, Settings.Necromancer },
+ { TorannMagicDefOf.Torn_BookOfEarth.index, Settings.Geomancer },
+ { TorannMagicDefOf.BookOfEarth.index, Settings.Geomancer },
+ { TorannMagicDefOf.TM_Lesser_SentinelR.index, Settings.Geomancer },
+ { TorannMagicDefOf.TM_SentinelR.index, Settings.Geomancer },
+ { TorannMagicDefOf.TM_Greater_SentinelR.index, Settings.Geomancer },
+ { TorannMagicDefOf.Torn_BookOfDemons.index, Settings.Demonkin },
+ { TorannMagicDefOf.BookOfDemons.index, Settings.Demonkin },
+ { TorannMagicDefOf.Torn_BookOfMagitech.index, Settings.Technomancer },
+ { TorannMagicDefOf.BookOfMagitech.index, Settings.Technomancer },
+ { TorannMagicDefOf.Torn_BookOfHemomancy.index, Settings.BloodMage },
+ { TorannMagicDefOf.BookOfHemomancy.index, Settings.BloodMage },
+ { TorannMagicDefOf.Torn_BookOfEnchanter.index, Settings.Enchanter },
+ { TorannMagicDefOf.BookOfEnchanter.index, Settings.Enchanter },
+ { TorannMagicDefOf.Torn_BookOfChronomancer.index, Settings.Chronomancer },
+ { TorannMagicDefOf.BookOfChronomancer.index, Settings.Chronomancer },
+ { TorannMagicDefOf.Torn_BookOfChaos.index, Settings.ChaosMage },
+ { TorannMagicDefOf.BookOfChaos.index, Settings.ChaosMage }
};
- spellIndexToSettingsRefMap = new Dictionary>
+ spellIndexToSettingsRefMap = new Dictionary
{
- { TorannMagicDefOf.SpellOf_FoldReality.index, () => new SettingsRef().Arcanist },
- { TorannMagicDefOf.SpellOf_Firestorm.index, () => new SettingsRef().FireMage },
- { TorannMagicDefOf.SpellOf_DryGround.index, () => new SettingsRef().FireMage },
- { TorannMagicDefOf.SpellOf_Blizzard.index, () => new SettingsRef().IceMage },
- { TorannMagicDefOf.SpellOf_WetGround.index, () => new SettingsRef().IceMage },
- { TorannMagicDefOf.SpellOf_EyeOfTheStorm.index, () => new SettingsRef().LitMage },
- { TorannMagicDefOf.SpellOf_ChargeBattery.index, () => new SettingsRef().LitMage },
- { TorannMagicDefOf.SpellOf_RegrowLimb.index, () => new SettingsRef().Druid },
- { TorannMagicDefOf.SpellOf_FertileLands.index, () => new SettingsRef().Druid },
- { TorannMagicDefOf.SpellOf_SummonPoppi.index, () => new SettingsRef().Summoner },
- { TorannMagicDefOf.SpellOf_HolyWrath.index, () => new SettingsRef().Paladin },
- { TorannMagicDefOf.SpellOf_Resurrection.index, () => new SettingsRef().Priest },
- { TorannMagicDefOf.SpellOf_BattleHymn.index, () => new SettingsRef().Bard },
- { TorannMagicDefOf.SpellOf_LichForm.index, () => new SettingsRef().Necromancer },
- { TorannMagicDefOf.SpellOf_Meteor.index, () => new SettingsRef().Geomancer },
- { TorannMagicDefOf.SpellOf_Scorn.index, () => new SettingsRef().Demonkin },
- { TorannMagicDefOf.SpellOf_PsychicShock.index, () => new SettingsRef().Demonkin },
- { TorannMagicDefOf.SpellOf_TechnoShield.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.SpellOf_Sabotage.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.SpellOf_Overdrive.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.SpellOf_OrbitalStrike.index, () => new SettingsRef().Technomancer },
- { TorannMagicDefOf.SpellOf_BloodMoon.index, () => new SettingsRef().BloodMage },
- { TorannMagicDefOf.SpellOf_Shapeshift.index, () => new SettingsRef().Enchanter },
- { TorannMagicDefOf.SpellOf_Recall.index, () => new SettingsRef().Chronomancer },
+ { TorannMagicDefOf.SpellOf_FoldReality.index, Settings.Arcanist },
+ { TorannMagicDefOf.SpellOf_Firestorm.index, Settings.FireMage },
+ { TorannMagicDefOf.SpellOf_DryGround.index, Settings.FireMage },
+ { TorannMagicDefOf.SpellOf_Blizzard.index, Settings.IceMage },
+ { TorannMagicDefOf.SpellOf_WetGround.index, Settings.IceMage },
+ { TorannMagicDefOf.SpellOf_EyeOfTheStorm.index, Settings.LitMage },
+ { TorannMagicDefOf.SpellOf_ChargeBattery.index, Settings.LitMage },
+ { TorannMagicDefOf.SpellOf_RegrowLimb.index, Settings.Druid },
+ { TorannMagicDefOf.SpellOf_FertileLands.index, Settings.Druid },
+ { TorannMagicDefOf.SpellOf_SummonPoppi.index, Settings.Summoner },
+ { TorannMagicDefOf.SpellOf_HolyWrath.index, Settings.Paladin },
+ { TorannMagicDefOf.SpellOf_Resurrection.index, Settings.Priest },
+ { TorannMagicDefOf.SpellOf_BattleHymn.index, Settings.Bard },
+ { TorannMagicDefOf.SpellOf_LichForm.index, Settings.Necromancer },
+ { TorannMagicDefOf.SpellOf_Meteor.index, Settings.Geomancer },
+ { TorannMagicDefOf.SpellOf_Scorn.index, Settings.Demonkin },
+ { TorannMagicDefOf.SpellOf_PsychicShock.index, Settings.Demonkin },
+ { TorannMagicDefOf.SpellOf_TechnoShield.index, Settings.Technomancer },
+ { TorannMagicDefOf.SpellOf_Sabotage.index, Settings.Technomancer },
+ { TorannMagicDefOf.SpellOf_Overdrive.index, Settings.Technomancer },
+ { TorannMagicDefOf.SpellOf_OrbitalStrike.index, Settings.Technomancer },
+ { TorannMagicDefOf.SpellOf_BloodMoon.index, Settings.BloodMage },
+ { TorannMagicDefOf.SpellOf_Shapeshift.index, Settings.Enchanter },
+ { TorannMagicDefOf.SpellOf_Recall.index, Settings.Chronomancer },
};
- recipeIndexMap = new Dictionary settingsValueGetter, ThingDef item)>
+ recipeIndexMap = new Dictionary
{
{
TorannMagicDefOf.Make_SpellOf_FoldReality.index,
- (() => new SettingsRef().Arcanist, TorannMagicDefOf.SpellOf_FoldReality)
+ (Settings.Arcanist, TorannMagicDefOf.SpellOf_FoldReality)
},
{
TorannMagicDefOf.Make_SpellOf_Firestorm.index,
- (() => new SettingsRef().FireMage, TorannMagicDefOf.SpellOf_Firestorm)
+ (Settings.FireMage, TorannMagicDefOf.SpellOf_Firestorm)
},
{
TorannMagicDefOf.Make_SpellOf_DryGround.index,
- (() => new SettingsRef().FireMage, TorannMagicDefOf.SpellOf_DryGround)
+ (Settings.FireMage, TorannMagicDefOf.SpellOf_DryGround)
},
{
TorannMagicDefOf.Make_SpellOf_Blizzard.index,
- (() => new SettingsRef().IceMage, TorannMagicDefOf.SpellOf_Blizzard)
+ (Settings.IceMage, TorannMagicDefOf.SpellOf_Blizzard)
},
{
TorannMagicDefOf.Make_SpellOf_WetGround.index,
- (() => new SettingsRef().IceMage, TorannMagicDefOf.SpellOf_WetGround)
+ (Settings.IceMage, TorannMagicDefOf.SpellOf_WetGround)
},
{
TorannMagicDefOf.Make_SpellOf_EyeOfTheStorm.index,
- (() => new SettingsRef().LitMage, TorannMagicDefOf.SpellOf_EyeOfTheStorm)
+ (Settings.LitMage, TorannMagicDefOf.SpellOf_EyeOfTheStorm)
},
{
TorannMagicDefOf.Make_SpellOf_ChargeBattery.index,
- (() => new SettingsRef().LitMage, TorannMagicDefOf.SpellOf_ChargeBattery)
+ (Settings.LitMage, TorannMagicDefOf.SpellOf_ChargeBattery)
},
{
TorannMagicDefOf.Make_SpellOf_RegrowLimb.index,
- (() => new SettingsRef().Druid, TorannMagicDefOf.SpellOf_RegrowLimb)
+ (Settings.Druid, TorannMagicDefOf.SpellOf_RegrowLimb)
},
{
TorannMagicDefOf.Make_SpellOf_FertileLands.index,
- (() => new SettingsRef().Druid, TorannMagicDefOf.SpellOf_FertileLands)
+ (Settings.Druid, TorannMagicDefOf.SpellOf_FertileLands)
},
{
TorannMagicDefOf.Make_SpellOf_SummonPoppi.index,
- (() => new SettingsRef().Summoner, TorannMagicDefOf.SpellOf_SummonPoppi)
+ (Settings.Summoner, TorannMagicDefOf.SpellOf_SummonPoppi)
},
{
TorannMagicDefOf.Make_SpellOf_HolyWrath.index,
- (() => new SettingsRef().Paladin, TorannMagicDefOf.SpellOf_HolyWrath)
+ (Settings.Paladin, TorannMagicDefOf.SpellOf_HolyWrath)
},
{
TorannMagicDefOf.Make_SpellOf_Resurrection.index,
- (() => new SettingsRef().Priest, TorannMagicDefOf.SpellOf_Resurrection)
+ (Settings.Priest, TorannMagicDefOf.SpellOf_Resurrection)
},
{
TorannMagicDefOf.Make_SpellOf_BattleHymn.index,
- (() => new SettingsRef().Bard, TorannMagicDefOf.SpellOf_BattleHymn)
+ (Settings.Bard, TorannMagicDefOf.SpellOf_BattleHymn)
},
{
TorannMagicDefOf.Make_SpellOf_LichForm.index,
- (() => new SettingsRef().Necromancer, TorannMagicDefOf.SpellOf_LichForm)
+ (Settings.Necromancer, TorannMagicDefOf.SpellOf_LichForm)
},
{
TorannMagicDefOf.Make_SpellOf_Meteor.index,
- (() => new SettingsRef().Geomancer, TorannMagicDefOf.SpellOf_Meteor)
+ (Settings.Geomancer, TorannMagicDefOf.SpellOf_Meteor)
},
{
TorannMagicDefOf.Make_SpellOf_Scorn.index,
- (() => new SettingsRef().Demonkin, TorannMagicDefOf.SpellOf_Scorn)
+ (Settings.Demonkin, TorannMagicDefOf.SpellOf_Scorn)
},
{
TorannMagicDefOf.Make_SpellOf_PsychicShock.index,
- (() => new SettingsRef().Demonkin, TorannMagicDefOf.SpellOf_PsychicShock)
+ (Settings.Demonkin, TorannMagicDefOf.SpellOf_PsychicShock)
},
{
TorannMagicDefOf.Make_SpellOf_TechnoShield.index,
- (() => new SettingsRef().Technomancer, TorannMagicDefOf.SpellOf_TechnoShield)
+ (Settings.Technomancer, TorannMagicDefOf.SpellOf_TechnoShield)
},
{
TorannMagicDefOf.Make_SpellOf_Sabotage.index,
- (() => new SettingsRef().Technomancer, TorannMagicDefOf.SpellOf_Sabotage)
+ (Settings.Technomancer, TorannMagicDefOf.SpellOf_Sabotage)
},
{
TorannMagicDefOf.Make_SpellOf_Overdrive.index,
- (() => new SettingsRef().Technomancer, TorannMagicDefOf.SpellOf_Overdrive)
+ (Settings.Technomancer, TorannMagicDefOf.SpellOf_Overdrive)
},
{
TorannMagicDefOf.Make_SpellOf_OrbitalStrike.index,
- (() => new SettingsRef().Technomancer, TorannMagicDefOf.SpellOf_OrbitalStrike)
+ (Settings.Technomancer, TorannMagicDefOf.SpellOf_OrbitalStrike)
},
{
TorannMagicDefOf.Make_SpellOf_BloodMoon.index,
- (() => new SettingsRef().BloodMage, TorannMagicDefOf.SpellOf_BloodMoon)
+ (Settings.BloodMage, TorannMagicDefOf.SpellOf_BloodMoon)
},
{
TorannMagicDefOf.Make_SpellOf_Shapeshift.index,
- (() => new SettingsRef().Enchanter, TorannMagicDefOf.SpellOf_Shapeshift)
+ (Settings.Enchanter, TorannMagicDefOf.SpellOf_Shapeshift)
},
{
TorannMagicDefOf.Make_SpellOf_Recall.index,
- (() => new SettingsRef().Chronomancer, TorannMagicDefOf.SpellOf_Recall)
+ (Settings.Chronomancer, TorannMagicDefOf.SpellOf_Recall)
},
{
TorannMagicDefOf.Make_BookOfSuperSoldier.index,
- (() => new SettingsRef().SuperSoldier, TorannMagicDefOf.BookOfSuperSoldier)
+ (Settings.SuperSoldier, TorannMagicDefOf.BookOfSuperSoldier)
}
};
}
- private static void RestrictClasses()
+ public static Dictionary GetLinkedCustomFighterSkillThings()
{
-
+ return new Dictionary
+ {
+ { TorannMagicDefOf.TM_PoisonTrap, new[] { ThingDef.Named("TM_PoisonTrap") } },
+ { TorannMagicDefOf.TM_60mmMortar, new[] { TorannMagicDefOf.TM_60mmMortar_Base } },
+ { TorannMagicDefOf.TM_PistolSpec, new[] { TorannMagicDefOf.TM_PistolSpec_Base0 } },
+ { TorannMagicDefOf.TM_RifleSpec, new[] { TorannMagicDefOf.TM_RifleSpec_Base0 } },
+ { TorannMagicDefOf.TM_ShotgunSpec, new[] { TorannMagicDefOf.TM_ShotgunSpec_Base0 } }
+ };
+ }
- IEnumerable enumerable = (from def in DefDatabase.AllDefs
- select def);
- List removedThings = new List();
- List customThings = new List();
- List removedCustomThings = new List();
+ public static Dictionary GetLinkedCustomMageSkillThings()
+ {
+ return new Dictionary
+ {
+ { TorannMagicDefOf.TM_RegrowLimb, new[] { TorannMagicDefOf.SeedofRegrowth } },
+ { TorannMagicDefOf.TM_SummonExplosive, new[]
+ {
+ TorannMagicDefOf.TM_ManaMine,
+ TorannMagicDefOf.TM_ManaMine_I,
+ TorannMagicDefOf.TM_ManaMine_II,
+ TorannMagicDefOf.TM_ManaMine_III
+ }},
+ { TorannMagicDefOf.TM_SummonPylon, new[]
+ {
+ TorannMagicDefOf.DefensePylon,
+ TorannMagicDefOf.DefensePylon_I,
+ TorannMagicDefOf.DefensePylon_II,
+ TorannMagicDefOf.DefensePylon_III,
+ TorannMagicDefOf.Bullet_DefensePylon,
+ TorannMagicDefOf.Launcher_DefensePylon,
+ TorannMagicDefOf.Launcher_DefensePylon_I,
+ TorannMagicDefOf.Launcher_DefensePylon_II,
+ TorannMagicDefOf.Launcher_DefensePylon_III
+ }},
+ { TorannMagicDefOf.TM_SummonPoppi, new[] { TorannMagicDefOf.TM_Poppi }},
+ { TorannMagicDefOf.TM_RaiseUndead, new[] { TorannMagicDefOf.TM_Artifact_NecroticOrb }}
+ };
+ }
+
+ public static void RestrictClasses()
+ {
+ HashSet removedThings = new HashSet();
+ HashSet customThings = new HashSet();
+ HashSet removedCustomThings = new HashSet();
List classSpells = new List();
List removedSpells = new List();
- TM_CustomClassDef ccDef = TM_CustomClassDef.Named("TM_CustomClasses");
- if (ccDef != null)
+ TM_CustomClassDef customClassDef = TM_CustomClassDef.Named("TM_CustomClasses");
+ if (customClassDef == null)
{
- for (int i = 0; i < ccDef.customClasses.Count; i++)
- {
- TMDefs.TM_CustomClass cc = ccDef.customClasses[i];
- if (Settings.Instance.CustomClass[cc.classTrait.ToString()])
+ Log.Error("[Rimworld of Magic] Could not load Custom Classes. Something went wrong.");
+ return;
+ }
+
+ for (int ccIndex = 0; ccIndex < customClassDef.customClasses.Count; ccIndex++)
+ {
+ TM_CustomClass cc = customClassDef.customClasses[ccIndex];
+ if (Settings.Instance.CustomClass[cc.classTrait.ToString()])
+ {
+ if (cc.tornScript != null) customThings.Add(cc.tornScript);
+ if (cc.fullScript != null) customThings.Add(cc.fullScript);
+ if (cc.learnableSkills != null) customThings.AddRange(cc.learnableSkills);
+ if (cc.learnableSpells != null) customThings.AddRange(cc.learnableSpells);
+ if (cc.classFighterAbilities != null)
{
- if (cc.tornScript != null)
- {
- customThings.AddDistinct(cc.tornScript);
- }
- if (cc.fullScript != null)
- {
- customThings.AddDistinct(cc.fullScript);
- }
- if (cc.learnableSkills != null && cc.learnableSkills.Count > 0)
- {
- for (int j = 0; j < cc.learnableSkills.Count; j++)
- {
- customThings.AddDistinct(cc.learnableSkills[j]);
- }
- }
- if (cc.learnableSpells != null && cc.learnableSpells.Count > 0)
- {
- for (int j = 0; j < cc.learnableSpells.Count; j++)
- {
- customThings.AddDistinct(cc.learnableSpells[j]);
- }
- }
- if (cc.classFighterAbilities != null && cc.classFighterAbilities.Count > 0)
+ for (int i = 0; i < cc.classFighterAbilities.Count; i++)
{
- if (cc.classFighterAbilities.Contains(TorannMagicDefOf.TM_PoisonTrap))
- {
- customThings.AddDistinct(ThingDef.Named("TM_PoisonTrap"));
- }
- if (cc.classFighterAbilities.Contains(TorannMagicDefOf.TM_60mmMortar))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_60mmMortar_Base);
- }
- if (cc.classFighterAbilities.Contains(TorannMagicDefOf.TM_PistolSpec))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_PistolSpec_Base0);
- }
- if (cc.classFighterAbilities.Contains(TorannMagicDefOf.TM_RifleSpec))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_RifleSpec_Base0);
- }
- if (cc.classFighterAbilities.Contains(TorannMagicDefOf.TM_ShotgunSpec))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_ShotgunSpec_Base0);
- }
- }
- if (cc.classMageAbilities != null && cc.classMageAbilities.Count > 0)
- {
- if (cc.classMageAbilities.Contains(TorannMagicDefOf.TM_RegrowLimb))
- {
- customThings.AddDistinct(TorannMagicDefOf.SeedofRegrowth);
- }
- if (cc.classMageAbilities.Contains(TorannMagicDefOf.TM_SummonExplosive))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_ManaMine);
- customThings.AddDistinct(TorannMagicDefOf.TM_ManaMine_I);
- customThings.AddDistinct(TorannMagicDefOf.TM_ManaMine_II);
- customThings.AddDistinct(TorannMagicDefOf.TM_ManaMine_III);
- }
- if (cc.classMageAbilities.Contains(TorannMagicDefOf.TM_SummonPylon))
- {
- customThings.AddDistinct(TorannMagicDefOf.DefensePylon);
- customThings.AddDistinct(TorannMagicDefOf.DefensePylon_I);
- customThings.AddDistinct(TorannMagicDefOf.DefensePylon_II);
- customThings.AddDistinct(TorannMagicDefOf.DefensePylon_III);
- customThings.AddDistinct(TorannMagicDefOf.Bullet_DefensePylon);
- customThings.AddDistinct(TorannMagicDefOf.Launcher_DefensePylon);
- customThings.AddDistinct(TorannMagicDefOf.Launcher_DefensePylon_I);
- customThings.AddDistinct(TorannMagicDefOf.Launcher_DefensePylon_II);
- customThings.AddDistinct(TorannMagicDefOf.Launcher_DefensePylon_III);
- customThings.AddDistinct(TorannMagicDefOf.TM_Poppi);
- }
- if (cc.classMageAbilities.Contains(TorannMagicDefOf.TM_SummonPoppi))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_Poppi);
- }
- if (cc.classMageAbilities.Contains(TorannMagicDefOf.TM_RaiseUndead))
- {
- customThings.AddDistinct(TorannMagicDefOf.TM_Artifact_NecroticOrb);
- }
+ customThings.AddRange(GetLinkedCustomFighterSkillThings().TryGetValue(
+ cc.classFighterAbilities[i], Array.Empty()));
}
}
- else
+ if (cc.classMageAbilities != null)
{
- if (cc.tornScript != null)
+ for (int i = 0; i < cc.classMageAbilities.Count; i++)
{
- removedCustomThings.Add(cc.tornScript);
+ customThings.AddRange(GetLinkedCustomMageSkillThings().TryGetValue(
+ cc.classMageAbilities[i], Array.Empty()));
}
- //for (int k = 0; k < cc.learnableSpells.Count; k++)
- //{
- // removedSpells.Add(cc.learnableSpells[k]);
- //}
- //for (int k = 0; k < cc.learnableSkills.Count; k++)
- //{
- // removedSpells.Add(cc.learnableSkills[k]);
- //}
- removedSpells.AddRange(cc.learnableSpells);
- removedSpells.AddRange(cc.learnableSkills);
- removedCustomThings.Add(cc.fullScript);
}
}
-
- void removeIfNotCustom(ThingDef thingDef)
- {
- if (!customThings.Contains(thingDef))
- removedThings.Add(thingDef);
- }
-
- foreach (ThingDef current in enumerable)
+ else
{
- // First check if this is a normal ThingDef we have a setting for
- Func settingsValueGetter = thingDefIndexToSettingsRefMap.TryGetValue(current.index);
- if (settingsValueGetter != null)
+ if (cc.tornScript != null)
{
- if (!settingsValueGetter())
- removeIfNotCustom(current);
- }
- // If that fails, next we check for spells
- else
- {
- settingsValueGetter = spellIndexToSettingsRefMap.TryGetValue(current.index);
- if (settingsValueGetter == null) continue;
-
- if (settingsValueGetter())
- classSpells.Add(current);
- else
- removeIfNotCustom(current);
+ removedCustomThings.Add(cc.tornScript);
}
+ removedSpells.AddRange(cc.learnableSpells);
+ removedSpells.AddRange(cc.learnableSkills);
+ removedCustomThings.Add(cc.fullScript);
}
+ }
- //foreach (ThingDef current in enumerable)
- //{
- // if (!ModOptions.Settings.Instance.Sniper)
- // {
- // if (current.defName == "BookOfSniper")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Ranger)
- // {
- // if (current.defName == "BookOfRanger" || current.defName == "TM_PoisonTrap")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Gladiator)
- // {
- // if (current.defName == "BookOfGladiator")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Bladedancer)
- // {
- // if (current.defName == "BookOfBladedancer")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Faceless)
- // {
- // if (current.defName == "BookOfFaceless")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Psionic)
- // {
- // if (current.defName == "BookOfPsionic")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.DeathKnight)
- // {
- // if (current.defName == "BookOfDeathKnight")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Monk)
- // {
- // if (current.defName == "BookOfMonk")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.Commander)
- // {
- // if (current == TorannMagicDefOf.BookOfCommander)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // if (!ModOptions.Settings.Instance.SuperSoldier)
- // {
- // if (current == TorannMagicDefOf.BookOfSuperSoldier || current == TorannMagicDefOf.TM_60mmMortar_Base)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // if (current.defName.Contains("TM_PistolSpec_Base") && !customThings.Contains(ThingDef.Named("TM_PistolSpec_Base0")))
- // {
- // removedThings.Add(current);
- // }
- // if (current.defName.Contains("TM_RifleSpec_Base") && !customThings.Contains(ThingDef.Named("TM_RifleSpec_Base0")))
- // {
- // removedThings.Add(current);
- // }
- // if (current.defName.Contains("TM_ShotgunSpec_Base") && !customThings.Contains(ThingDef.Named("TM_ShotgunSpec_Base0")))
- // {
- // removedThings.Add(current);
- // }
- // }
-
- // if (!ModOptions.Settings.Instance.Arcanist)
- // {
- // if (current.defName == "Torn_BookOfArcanist" || current.defName == "BookOfArcanist" || current.defName == "SpellOf_FoldReality")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_FoldReality")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.FireMage)
- // {
- // if (current.defName == "Torn_BookOfInnerFire" || current.defName == "BookOfInnerFire" || current.defName == "SpellOf_Firestorm" || current.defName == "SpellOf_DryGround")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_Firestorm" || current.defName == "SpellOf_DryGround")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.IceMage)
- // {
- // if (current.defName == "Torn_BookOfHeartOfFrost" || current.defName == "BookOfHeartOfFrost" || current.defName == "SpellOf_Blizzard" || current.defName == "SpellOf_WetGround")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_Blizzard" || current.defName == "SpellOf_WetGround")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.LitMage)
- // {
- // if (current.defName == "Torn_BookOfStormBorn" || current.defName == "BookOfStormBorn" || current.defName == "SpellOf_EyeOfTheStorm" || current.defName == "SpellOf_ChargeBattery")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_EyeOfTheStorm" || current.defName == "SpellOf_ChargeBattery")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Druid)
- // {
- // if (current.defName == "Torn_BookOfNature" || current.defName == "BookOfNature" || current.defName == "SpellOf_RegrowLimb" || current.defName == "SeedofRegrowth" || current.defName == "SpellOf_FertileLands")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_RegrowLimb" || current.defName == "SpellOf_FertileLands")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Summoner)
- // {
- // if (current.defName == "Torn_BookOfSummoner" || current.defName == "BookOfSummoner" || current.defName == "SpellOf_SummonPoppi" ||
- // current.defName == "TM_ManaMine" || current.defName == "TM_ManaMine_I" || current.defName == "TM_ManaMine_II" || current.defName == "TM_ManaMine_III" ||
- // current.defName == "DefensePylon" || current.defName == "DefensePylon_I" || current.defName == "DefensePylon_II" || current.defName == "DefensePylon_III" || current.defName == "Bullet_DefensePylon" ||
- // current.defName == "Launcher_DefensePylon" || current.defName == "Launcher_DefensePylon_I" || current.defName == "Launcher_DefensePylon_II" || current.defName == "Launcher_DefensePylon_III" ||
- // current.defName == "TM_Poppi")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_SummonPoppi")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Paladin)
- // {
- // if (current.defName == "Torn_BookOfValiant" || current.defName == "BookOfValiant" || current.defName == "SpellOf_HolyWrath")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_HolyWrath")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Priest)
- // {
- // if (current.defName == "Torn_BookOfPriest" || current.defName == "BookOfPriest" || current.defName == "SpellOf_Resurrection")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_Resurrection")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Bard)
- // {
- // if (current.defName == "Torn_BookOfBard" || current.defName == "BookOfBard" || current.defName == "SpellOf_BattleHymn")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_BattleHymn")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Necromancer)
- // {
- // if (current == TorannMagicDefOf.BookOfNecromancer || current == TorannMagicDefOf.Torn_BookOfUndead || current == TorannMagicDefOf.SpellOf_LichForm || current == TorannMagicDefOf.TM_Artifact_NecroticOrb)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current == TorannMagicDefOf.SpellOf_LichForm)
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Geomancer)
- // {
- // if (current.defName == "Torn_BookOfEarth" || current.defName == "BookOfEarth" || current.defName == "SpellOf_Meteor" ||
- // current.defName == "TM_Lesser_SentinelR" || current.defName == "TM_SentinelR" || current.defName == "TM_Greater_SentinelR")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_Meteor")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Demonkin)
- // {
- // if (current.defName == "Torn_BookOfDemons" || current.defName == "BookOfDemons" || current.defName == "SpellOf_Scorn" || current.defName == "SpellOf_PsychicShock")
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current.defName == "SpellOf_Scorn" || current.defName == "SpellOf_PsychicShock")
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Technomancer)
- // {
- // if (current == TorannMagicDefOf.Torn_BookOfMagitech || current == TorannMagicDefOf.BookOfMagitech || current == TorannMagicDefOf.SpellOf_TechnoShield || current == TorannMagicDefOf.SpellOf_Sabotage || current == TorannMagicDefOf.SpellOf_Overdrive || current == TorannMagicDefOf.SpellOf_OrbitalStrike)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current == TorannMagicDefOf.SpellOf_TechnoShield || current == TorannMagicDefOf.SpellOf_Sabotage || current == TorannMagicDefOf.SpellOf_Overdrive || current == TorannMagicDefOf.SpellOf_OrbitalStrike)
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.BloodMage)
- // {
- // if (current == TorannMagicDefOf.BookOfHemomancy || current == TorannMagicDefOf.Torn_BookOfHemomancy || current == TorannMagicDefOf.SpellOf_BloodMoon)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current == TorannMagicDefOf.SpellOf_BloodMoon)
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Enchanter)
- // {
- // if (current == TorannMagicDefOf.BookOfEnchanter || current == TorannMagicDefOf.Torn_BookOfEnchanter || current == TorannMagicDefOf.SpellOf_Shapeshift)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current == TorannMagicDefOf.SpellOf_Shapeshift)
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.Chronomancer)
- // {
- // if (current == TorannMagicDefOf.BookOfChronomancer || current == TorannMagicDefOf.Torn_BookOfChronomancer || current == TorannMagicDefOf.SpellOf_Recall)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- // else
- // {
- // if (current == TorannMagicDefOf.SpellOf_Recall)
- // {
- // classSpells.Add(current);
- // }
- // }
- // if (!ModOptions.Settings.Instance.ChaosMage)
- // {
- // if (current == TorannMagicDefOf.BookOfChaos || current == TorannMagicDefOf.Torn_BookOfChaos)
- // {
- // if (!customThings.Contains(current))
- // {
- // removedThings.Add(current);
- // }
- // }
- // }
- //}
+ void removeIfNotCustom(ThingDef thingDef)
+ {
+ if (!customThings.Contains(thingDef))
+ removedThings.Add(thingDef);
+ }
- for (int i = 0; i < removedCustomThings.Count; i++)
+ foreach (ThingDef current in DefDatabase.AllDefs)
+ {
+ // First check if this is a normal ThingDef we have a setting for
+ Settings.CheckboxOption option = thingDefIndexToSettingsRefMap.TryGetValue(current.index);
+ if (option != null)
{
- if (!removedThings.Contains(removedCustomThings[i]))
- {
- removedThings.Add(removedCustomThings[i]);
- }
+ if (!option.isEnabled)
+ removeIfNotCustom(current);
}
-
- for (int i = 0; i < removedSpells.Count; i++)
+ // If that fails, next we check for spells
+ else
{
- if (!customThings.Contains(removedSpells[i]) && !classSpells.Contains(removedSpells[i]))
- {
- removedThings.Add(removedSpells[i]);
- removedCustomThings.Add(removedSpells[i]);
- }
+ option = spellIndexToSettingsRefMap.TryGetValue(current.index);
+ if (option == null) continue;
+
+ if (option.isEnabled)
+ classSpells.Add(current);
+ else
+ removeIfNotCustom(current);
}
+ }
+
+ removedThings.UnionWith(removedCustomThings);
- for (int i = 0; i < removedThings.Count; i++)
+ for (int i = 0; i < removedSpells.Count; i++)
+ {
+ if (!customThings.Contains(removedSpells[i]) && !classSpells.Contains(removedSpells[i]))
{
- //Log.Message("removing " + removedThings[i].defName + " from def database");
- removedThings[i].resourceReadoutPriority = ResourceCountPriority.Uncounted;
- DefDatabase.AllDefsListForReading.Remove(removedThings[i]);
+ removedThings.Add(removedSpells[i]);
+ removedCustomThings.Add(removedSpells[i]);
}
-
- IEnumerable RecipeEnumerable = DefDatabase.AllDefs;
- List removedRecipes = new List();
- Dictionary recipeDictionary = new Dictionary();
- bool anyRemovedCustomThings = removedCustomThings.Count > 0;
+ }
- foreach (RecipeDef current in RecipeEnumerable)
- {
- if (anyRemovedCustomThings)
- recipeDictionary[current.defName] = current;
+ foreach (ThingDef thingDef in removedThings)
+ {
+ if (thingDef == null) continue; // TODO: Find where the null is coming from.
+ thingDef.resourceReadoutPriority = ResourceCountPriority.Uncounted;
+ DefDatabase.AllDefsListForReading.Remove(thingDef);
+ }
- (Func settingsValueGetter, ThingDef item) = recipeIndexMap.TryGetValue(current.index);
- if (settingsValueGetter == null) continue;
- if (settingsValueGetter()) continue;
- if (customThings.Contains(item)) continue;
- removedRecipes.Add(current);
- //if (!ModOptions.Settings.Instance.Arcanist)
- //{
- // if (current.defName == "Make_SpellOf_FoldReality" && !customThings.Contains(TorannMagicDefOf.SpellOf_FoldReality))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.FireMage)
- //{
- // if ((current.defName == "Make_SpellOf_Firestorm" && !customThings.Contains(TorannMagicDefOf.SpellOf_Firestorm)) || (current.defName == "Make_SpellOf_DryGround" && !customThings.Contains(TorannMagicDefOf.SpellOf_DryGround)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.IceMage)
- //{
- // if ((current.defName == "Make_SpellOf_Overdrive" && !customThings.Contains(TorannMagicDefOf.SpellOf_Overdrive)) || (current.defName == "Make_SpellOf_WetGround" && !customThings.Contains(TorannMagicDefOf.SpellOf_WetGround)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.LitMage)
- //{
- // if ((current.defName == "Make_SpellOf_EyeOfTheStorm" && !customThings.Contains(TorannMagicDefOf.SpellOf_EyeOfTheStorm)) || (current.defName == "Make_SpellOf_ChargeBattery" && !customThings.Contains(TorannMagicDefOf.SpellOf_ChargeBattery)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Druid)
- //{
- // if ((current.defName == "Make_SpellOf_RegrowLimb" && !customThings.Contains(TorannMagicDefOf.SpellOf_RegrowLimb)) || (current.defName == "Make_SpellOf_FertileLands" && !customThings.Contains(TorannMagicDefOf.SpellOf_FertileLands)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Summoner)
- //{
- // if ((current.defName == "Make_SpellOf_SummonPoppi" && !customThings.Contains(TorannMagicDefOf.SpellOf_SummonPoppi)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Paladin)
- //{
- // if ((current.defName == "Make_SpellOf_HolyWrath" && !customThings.Contains(TorannMagicDefOf.SpellOf_HolyWrath)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Priest)
- //{
- // if ((current.defName == "Make_SpellOf_Resurrection" && !customThings.Contains(TorannMagicDefOf.SpellOf_Resurrection)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Bard)
- //{
- // if ((current.defName == "Make_SpellOf_BattleHymn" && !customThings.Contains(TorannMagicDefOf.SpellOf_BattleHymn)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Necromancer)
- //{
- // if ((current.defName == "Make_SpellOf_FoldReality" && !customThings.Contains(TorannMagicDefOf.SpellOf_FoldReality)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Geomancer)
- //{
- // if ((current.defName == "Make_SpellOf_Meteor" && !customThings.Contains(TorannMagicDefOf.SpellOf_Meteor)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Demonkin)
- //{
- // if ((current.defName == "Make_SpellOf_Scorn" && !customThings.Contains(TorannMagicDefOf.SpellOf_Scorn)) || (current.defName == "Make_SpellOf_PsychicShock" && !customThings.Contains(TorannMagicDefOf.SpellOf_PsychicShock)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Technomancer)
- //{
- // if ((current.defName == "Make_SpellOf_TechnoShield" && !customThings.Contains(TorannMagicDefOf.SpellOf_TechnoShield)) ||
- // (current.defName == "Make_SpellOf_Sabotage" && !customThings.Contains(TorannMagicDefOf.SpellOf_Sabotage)) ||
- // (current.defName == "Make_SpellOf_Overdrive" && !customThings.Contains(TorannMagicDefOf.SpellOf_Overdrive)) ||
- // (current.defName == "Make_SpellOf_OrbitalStrike" && !customThings.Contains(TorannMagicDefOf.SpellOf_OrbitalStrike)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.BloodMage)
- //{
- // if ((current.defName == "Make_SpellOf_BloodMoon" && !customThings.Contains(TorannMagicDefOf.SpellOf_BloodMoon)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Enchanter)
- //{
- // if ((current.defName == "Make_SpellOf_Shapeshift" && !customThings.Contains(TorannMagicDefOf.SpellOf_Shapeshift)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.Chronomancer)
- //{
- // if ((current.defName == "Make_SpellOf_Recall" && !customThings.Contains(TorannMagicDefOf.SpellOf_Recall)))
- // {
- // removedRecipes.Add(current);
- // }
- //}
- //if (!ModOptions.Settings.Instance.SuperSoldier)
- //{
- // if (!ModOptions.Settings.Instance.SuperSoldier)
- // {
- // if ((current.defName == "Make_BookOfSuperSoldier" && !customThings.Contains(TorannMagicDefOf.BookOfSuperSoldier)))
- // {
- // removedRecipes.Add(current);
- // }
- // }
- //}
- }
+ List removedRecipes = new List();
+ Dictionary recipeDictionary = new Dictionary();
+ bool anyRemovedCustomThings = removedCustomThings.Count > 0;
+ foreach (RecipeDef current in DefDatabase.AllDefs)
+ {
if (anyRemovedCustomThings)
- {
- removedRecipes.AddRange(removedCustomThings
- .Select(td => recipeDictionary.TryGetValue($"Make_{td.defName}"))
- .Where(recipeDef => recipeDef != null)
- );
- }
- //for (int i = 0; i < removedCustomThings.Count; i++)
- //{
- // if (RecipeEnumerable.Any((RecipeDef x) => x.defName == "Make_" + removedCustomThings[i].defName))
- // {
- // removedRecipes.Add(RecipeEnumerable.FirstOrDefault((RecipeDef x) => x.defName == ("Make_" + removedCustomThings[i].ToString())));
- // }
- //}
+ recipeDictionary[current.defName] = current;
- for (int i = 0; i < removedRecipes.Count; i++)
- {
- //Log.Message("removing " + removedRecipes[i].defName + " from def database");
- DefDatabase.AllDefsListForReading.Remove(removedRecipes[i]);
- }
+ (Settings.CheckboxOption option, ThingDef item) = recipeIndexMap.TryGetValue(current.index);
+ if (option == null) continue;
+ if (option.isEnabled) continue;
+ if (customThings.Contains(item)) continue;
+ removedRecipes.Add(current);
}
- else
+
+ foreach (ThingDef thingDef in removedCustomThings)
+ {
+ RecipeDef recipeDef = recipeDictionary.TryGetValue($"Make_{thingDef?.defName}"); // TODO: remove ? when the null todo above is taken care of
+ if (recipeDef != null) removedRecipes.Add(recipeDef);
+ }
+
+ for (int i = 0; i < removedRecipes.Count; i++)
{
- Log.Warning("RimWorld of Magic Class Restrictions failed to load properly - no classes were disabled.");
+ //Log.Message("removing " + removedRecipes[i].defName + " from def database");
+ DefDatabase.AllDefsListForReading.Remove(removedRecipes[i]);
}
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Settings.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Settings.cs
index 0c02782d..517b9917 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Settings.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/Settings.cs
@@ -9,6 +9,18 @@ namespace TorannMagic.ModOptions
{
public class Settings : Verse.ModSettings
{
+ // This class lets us link boolean values to their labels for the class options
+ public class CheckboxOption
+ {
+ public bool isEnabled = true;
+ public string label;
+
+ public CheckboxOption(string _label)
+ {
+ label = _label;
+ }
+ }
+
public float xpMultiplier = 1f;
public float needMultiplier = 1f;
public bool AICasting = true;
@@ -17,10 +29,10 @@ public class Settings : Verse.ModSettings
public bool AIMarking = true;
public bool AIFighterMarking = false;
public bool AIFriendlyMarking = false;
- public float baseMageChance = 1f;
- public float baseFighterChance = 1f;
- public float advMageChance = 0.5f;
- public float advFighterChance = 0.5f;
+ public float baseMageChance = 0.063f;
+ public float baseFighterChance = 0.063f;
+ public float advMageChance = 0.083f;
+ public float advFighterChance = 0.042f;
public float supportTraitChance = 0.1f;
public float magicyteChance = .005f;
public bool showIconsMultiSelect = true;
@@ -64,50 +76,50 @@ public class Settings : Verse.ModSettings
public bool golemScreenShake = true;
//class options
- public bool Arcanist = true;
- public bool FireMage = true;
- public bool IceMage = true;
- public bool LitMage = true;
- public bool Druid = true;
- public bool Paladin = true;
- public bool Necromancer = true;
- public bool Bard = true;
- public bool Priest = true;
- public bool Demonkin = true;
- public bool Geomancer = true;
- public bool Summoner = true;
- public bool Technomancer = true;
- public bool BloodMage = true;
- public bool Enchanter = true;
- public bool Chronomancer = true;
- public bool Wanderer = true;
- public bool ChaosMage = true;
- public bool Brightmage = true;
- public bool Shaman = true;
- public bool Golemancer = true;
- public bool Empath = true;
-
- public bool Gladiator = true;
- public bool Bladedancer = true;
- public bool Sniper = true;
- public bool Ranger = true;
- public bool Faceless = true;
- public bool Psionic = true;
- public bool DeathKnight = true;
- public bool Monk = true;
- public bool Wayfarer = true;
- public bool Commander = true;
- public bool SuperSoldier = true;
- public bool Shadow = true;
- public bool Apothecary = true;
-
- public bool ArcaneConduit = true;
- public bool ManaWell = true;
- public bool Boundless = true;
- public bool Enlightened = true;
- public bool Cursed = true;
- public bool FaeBlood = true;
- public bool GiantsBlood = true;
+ public static CheckboxOption Arcanist = new("TM_Arcanist");
+ public static CheckboxOption FireMage = new("TM_FireMage");
+ public static CheckboxOption IceMage = new("TM_IceMage");
+ public static CheckboxOption LitMage = new("TM_LitMage");
+ public static CheckboxOption Druid = new("TM_Druid");
+ public static CheckboxOption Paladin = new("TM_Paladin");
+ public static CheckboxOption Necromancer = new("TM_Necromancer");
+ public static CheckboxOption Bard = new("TM_Bard");
+ public static CheckboxOption Priest = new("TM_Priest");
+ public static CheckboxOption Demonkin = new("TM_Demonkin");
+ public static CheckboxOption Geomancer = new("TM_Geomancer");
+ public static CheckboxOption Summoner = new("TM_Summoner");
+ public static CheckboxOption Technomancer = new("TM_Technomancer");
+ public static CheckboxOption BloodMage = new("TM_BloodMage");
+ public static CheckboxOption Enchanter = new("TM_Enchanter");
+ public static CheckboxOption Chronomancer = new("TM_Chronomancer");
+ public static CheckboxOption Wanderer = new("TM_Wanderer");
+ public static CheckboxOption ChaosMage = new("TM_ChaosMage");
+ public static CheckboxOption Brightmage = new("TM_Brightmage");
+ public static CheckboxOption Shaman = new("TM_Shaman");
+ public static CheckboxOption Golemancer = new("TM_Golemancer");
+ public static CheckboxOption Empath = new("TM_Empath");
+
+ public static CheckboxOption Gladiator = new("TM_Gladiator");
+ public static CheckboxOption Bladedancer = new("TM_Bladedancer");
+ public static CheckboxOption Sniper = new("TM_Sniper");
+ public static CheckboxOption Ranger = new("TM_Ranger");
+ public static CheckboxOption Faceless = new("TM_Faceless");
+ public static CheckboxOption Psionic = new("TM_Psionic");
+ public static CheckboxOption DeathKnight = new("TM_DeathKnight");
+ public static CheckboxOption Monk = new("TM_Monk");
+ public static CheckboxOption Wayfarer = new("TM_Wayfarer");
+ public static CheckboxOption Commander = new("TM_Commander");
+ public static CheckboxOption SuperSoldier = new("TM_SuperSoldier");
+ public static CheckboxOption Shadow = new("TM_Shadow");
+ public static CheckboxOption Apothecary = new("TM_Apothecary");
+
+ public static CheckboxOption ArcaneConduit = new("TM_ArcaneConduit");
+ public static CheckboxOption ManaWell = new("TM_ManaWell");
+ public static CheckboxOption Boundless = new("TM_Boundless");
+ public static CheckboxOption Enlightened = new("TM_Enlightened");
+ public static CheckboxOption Cursed = new("TM_Cursed");
+ public static CheckboxOption FaeBlood = new("TM_FaeBlood");
+ public static CheckboxOption GiantsBlood = new("TM_GiantsBlood");
//Faction settings
public Dictionary FactionFighterSettings = new Dictionary();
@@ -132,10 +144,10 @@ public override void ExposeData()
Scribe_Values.Look(ref this.AIMarking, "AIMarking", false, false);
Scribe_Values.Look(ref this.AIFighterMarking, "AIFighterMarking", false, false);
Scribe_Values.Look(ref this.AIFriendlyMarking, "AIFriendlyMarking", false, false);
- Scribe_Values.Look(ref this.baseMageChance, "baseMageChance", 1f, false);
- Scribe_Values.Look(ref this.baseFighterChance, "baseFighterChance", 1f, false);
- Scribe_Values.Look(ref this.advMageChance, "advMageChance", 0.5f, false);
- Scribe_Values.Look(ref this.advFighterChance, "advFighterChance", 0.5f, false);
+ Scribe_Values.Look(ref baseMageChance, "baseMageChance", 0.063f);
+ Scribe_Values.Look(ref baseFighterChance, "baseFighterChance", 0.063f);
+ Scribe_Values.Look(ref advMageChance, "advMageChance", 0.83f);
+ Scribe_Values.Look(ref advFighterChance, "advFighterChance", 0.042f);
Scribe_Values.Look(ref this.supportTraitChance, "supportTraitChance", 0.1f, false);
Scribe_Values.Look(ref this.magicyteChance, "magicyteChance", 0.005f, false);
Scribe_Values.Look(ref this.showIconsMultiSelect, "showIconsMultiSelect", true, false);
@@ -171,52 +183,54 @@ public override void ExposeData()
Scribe_Values.Look(ref this.autocastAnimals, "autocastAnimals", false, false);
Scribe_Values.Look(ref this.autocastQueueing, "autocastQueueing", false, false);
- Scribe_Values.Look(ref this.showDormantFrames, "showDormantFrames", false, false);
+ Scribe_Values.Look(ref this.showDormantFrames, "sClassOptionhowDormantFrames", false, false);
Scribe_Values.Look(ref this.showGolemsOnColonistBar, "showGolemsOnColonistBar", false, false);
+ // Mage classes enabled
+ Scribe_Values.Look(ref Arcanist.isEnabled, "Arcanist", true);
+ Scribe_Values.Look(ref Bard.isEnabled, "Bard", true);
+ Scribe_Values.Look(ref BloodMage.isEnabled, "BloodMage", true);
+ Scribe_Values.Look(ref Brightmage.isEnabled, "Brightmage", true);
+ Scribe_Values.Look(ref ChaosMage.isEnabled, "ChaosMage", true);
+ Scribe_Values.Look(ref Chronomancer.isEnabled, "Chronomancer", true);
+ Scribe_Values.Look(ref Demonkin.isEnabled, "Demonkin", true);
+ Scribe_Values.Look(ref Druid.isEnabled, "Druid", true);
+ Scribe_Values.Look(ref Empath.isEnabled, "Empath", true);
+ Scribe_Values.Look(ref Enchanter.isEnabled, "Enchanter", true);
+ Scribe_Values.Look(ref FireMage.isEnabled, "FireMage", true);
+ Scribe_Values.Look(ref Geomancer.isEnabled, "Geomancer", true);
+ Scribe_Values.Look(ref Golemancer.isEnabled, "Golemancer", true);
+ Scribe_Values.Look(ref IceMage.isEnabled, "IceMage", true);
+ Scribe_Values.Look(ref LitMage.isEnabled, "LitMage", true);
+ Scribe_Values.Look(ref Necromancer.isEnabled, "Necromancer", true);
+ Scribe_Values.Look(ref Paladin.isEnabled, "Paladin", true);
+ Scribe_Values.Look(ref Priest.isEnabled, "Priest", true);
+ Scribe_Values.Look(ref Shaman.isEnabled, "Shaman", true);
+ Scribe_Values.Look(ref Summoner.isEnabled, "Summoner", true);
+ Scribe_Values.Look(ref Technomancer.isEnabled, "Technomancer", true);
+ Scribe_Values.Look(ref Wanderer.isEnabled, "Wanderer", true);
+ // Fighter classes enabled
+ Scribe_Values.Look(ref Apothecary.isEnabled, "Apothecary", true);
+ Scribe_Values.Look(ref Bladedancer.isEnabled, "Bladedancer", true);
+ Scribe_Values.Look(ref Commander.isEnabled, "Commander", true);
+ Scribe_Values.Look(ref DeathKnight.isEnabled, "DeathKnight", true);
+ Scribe_Values.Look(ref Faceless.isEnabled, "Faceless", true);
+ Scribe_Values.Look(ref Gladiator.isEnabled, "Gladiator", true);
+ Scribe_Values.Look(ref Monk.isEnabled, "Monk", true);
+ Scribe_Values.Look(ref Psionic.isEnabled, "Psionic", true);
+ Scribe_Values.Look(ref Ranger.isEnabled, "Ranger", true);
+ Scribe_Values.Look(ref Shadow.isEnabled, "Shadow", true);
+ Scribe_Values.Look(ref Sniper.isEnabled, "Sniper", true);
+ Scribe_Values.Look(ref SuperSoldier.isEnabled, "SuperSoldier", true);
+ Scribe_Values.Look(ref Wayfarer.isEnabled, "Wayfarer", true);
- Scribe_Values.Look(ref this.Arcanist, "Arcanist", true, false);
- Scribe_Values.Look(ref this.FireMage, "FireMage", true, false);
- Scribe_Values.Look(ref this.IceMage, "IceMage", true, false);
- Scribe_Values.Look(ref this.LitMage, "LitMage", true, false);
- Scribe_Values.Look(ref this.Geomancer, "Geomancer", true, false);
- Scribe_Values.Look(ref this.Druid, "Druid", true, false);
- Scribe_Values.Look(ref this.Paladin, "Paladin", true, false);
- Scribe_Values.Look(ref this.Priest, "Priest", true, false);
- Scribe_Values.Look(ref this.Bard, "Bard", true, false);
- Scribe_Values.Look(ref this.Summoner, "Summoner", true, false);
- Scribe_Values.Look(ref this.Necromancer, "Necromancer", true, false);
- Scribe_Values.Look(ref this.Technomancer, "Technomancer", true, false);
- Scribe_Values.Look(ref this.Demonkin, "Demonkin", true, false);
- Scribe_Values.Look(ref this.BloodMage, "BloodMage", true, false);
- Scribe_Values.Look(ref this.Enchanter, "Enchanter", true, false);
- Scribe_Values.Look(ref this.Chronomancer, "Chronomancer", true, false);
- Scribe_Values.Look(ref this.Gladiator, "Gladiator", true, false);
- Scribe_Values.Look(ref this.Bladedancer, "Bladedancer", true, false);
- Scribe_Values.Look(ref this.Sniper, "Sniper", true, false);
- Scribe_Values.Look(ref this.Ranger, "Ranger", true, false);
- Scribe_Values.Look(ref this.Faceless, "Faceless", true, false);
- Scribe_Values.Look(ref this.Psionic, "Psionic", true, false);
- Scribe_Values.Look(ref this.DeathKnight, "DeathKnight", true, false);
- Scribe_Values.Look(ref this.Wanderer, "Wanderer", true, false);
- Scribe_Values.Look(ref this.Wayfarer, "Wayfarer", true, false);
- Scribe_Values.Look(ref this.ChaosMage, "ChaosMage", true, false);
- Scribe_Values.Look(ref this.Monk, "Monk", true, false);
- Scribe_Values.Look(ref this.Commander, "Commander", true, false);
- Scribe_Values.Look(ref this.SuperSoldier, "SuperSoldier", true, false);
- Scribe_Values.Look(ref this.Shadow, "Shadow", true, false);
- Scribe_Values.Look(ref this.Brightmage, "Brightmage", true, false);
- Scribe_Values.Look(ref this.Shaman, "Shaman", true, false);
- Scribe_Values.Look(ref this.Golemancer, "Golemancer", true, false);
- Scribe_Values.Look(ref this.Empath, "Empath", true, false);
- Scribe_Values.Look(ref this.Apothecary, "Apothecary", true, false);
Scribe_Collections.Look(ref this.CustomClass, "CustomClass");
- Scribe_Values.Look(ref this.ManaWell, "ManaWell", true, false);
- Scribe_Values.Look(ref this.ArcaneConduit, "ArcaneConduit", true, false);
- Scribe_Values.Look(ref this.Boundless, "Boundless", true, false);
- Scribe_Values.Look(ref this.Enlightened, "Enlightened", true, false);
- Scribe_Values.Look(ref this.Cursed, "Cursed", true, false);
- Scribe_Values.Look(ref this.FaeBlood, "FaeBlood", true, false);
- Scribe_Values.Look(ref this.GiantsBlood, "GiantsBlood", true, false);
+ Scribe_Values.Look(ref ManaWell.isEnabled, "ManaWell", true, false);
+ Scribe_Values.Look(ref ArcaneConduit.isEnabled, "ArcaneConduit", true, false);
+ Scribe_Values.Look(ref Boundless.isEnabled, "Boundless", true, false);
+ Scribe_Values.Look(ref Enlightened.isEnabled, "Enlightened", true, false);
+ Scribe_Values.Look(ref Cursed.isEnabled, "Cursed", true, false);
+ Scribe_Values.Look(ref FaeBlood.isEnabled, "FaeBlood", true, false);
+ Scribe_Values.Look(ref GiantsBlood.isEnabled, "GiantsBlood", true, false);
Scribe_Collections.Look(ref this.FactionFighterSettings, "FactionFighterSettings");
Scribe_Collections.Look(ref this.FactionMageSettings, "FactionMageSettings");
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/SettingsRef.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/SettingsRef.cs
deleted file mode 100644
index 9a29911a..00000000
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/SettingsRef.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-using Verse;
-using System.Collections.Generic;
-using RimWorld;
-using UnityEngine;
-
-namespace TorannMagic.ModOptions
-{
- public class SettingsRef
- {
- public float xpMultiplier = Settings.Instance.xpMultiplier;
- public float needMultiplier = Settings.Instance.needMultiplier;
- public float deathExplosionRadius = Settings.Instance.deathExplosionRadius;
- public bool AICasting = Settings.Instance.AICasting;
- public bool AIAggressiveCasting = Settings.Instance.AIAggressiveCasting;
- public bool AIHardMode = Settings.Instance.AIHardMode;
- public bool AIMarking = Settings.Instance.AIMarking;
- public bool AIFighterMarking = Settings.Instance.AIFighterMarking;
- public bool AIFriendlyMarking = Settings.Instance.AIFriendlyMarking;
- public float baseMageChance = Settings.Instance.baseMageChance;
- public float baseFighterChance = Settings.Instance.baseFighterChance;
- public float advMageChance = Settings.Instance.advMageChance;
- public float advFighterChance = Settings.Instance.advFighterChance;
- public float supportTraitChance = Settings.Instance.supportTraitChance;
- public int deathExplosionMin = Settings.Instance.deathExplosionMin;
- public int deathExplosionMax = Settings.Instance.deathExplosionMax;
- public float magicyteChance = Settings.Instance.magicyteChance;
- public bool showIconsMultiSelect = Settings.Instance.showIconsMultiSelect;
- public float riftChallenge = Settings.Instance.riftChallenge;
- public float wanderingLichChallenge = Settings.Instance.wanderingLichChallenge;
- public float demonAssaultChallenge = Settings.Instance.demonAssaultChallenge;
- public bool showGizmo = Settings.Instance.showGizmo;
- public bool showLevelUpMessage = Settings.Instance.showLevelUpMessage;
- public bool changeUndeadPawnAppearance = Settings.Instance.changeUndeadPawnAppearance;
- public bool changeUndeadAnimalAppearance = Settings.Instance.changeUndeadAnimalAppearance;
- public bool showClassIconOnColonistBar = Settings.Instance.showClassIconOnColonistBar;
- public float classIconSize = Settings.Instance.classIconSize;
- public bool unrestrictedBloodTypes = Settings.Instance.unrestrictedBloodTypes;
- public float paracyteSoftCap = Settings.Instance.paracyteSoftCap;
- public bool paracyteMagesCount = Settings.Instance.paracyteMagesCount;
- public bool unrestrictedWeaponCopy = Settings.Instance.unrestrictedWeaponCopy;
- public float undeadUpkeepMultiplier = Settings.Instance.undeadUpkeepMultiplier;
- public float deathRetaliationDelayFactor = Settings.Instance.deathRetaliationDelayFactor;
- public float deathRetaliationChance = Settings.Instance.deathRetaliationChance;
- public bool deathRetaliationIsLethal = Settings.Instance.deathRetaliationIsLethal;
- public bool shrinkIcons = Settings.Instance.shrinkIcons;
- public Vector2 iconPosition = Settings.Instance.iconPosition;
- public bool cameraSnap= Settings.Instance.cameraSnap;
-
- //autocast
- public bool autocastEnabled = Settings.Instance.autocastEnabled;
- public bool autocastAnimals = Settings.Instance.autocastAnimals;
- public float autocastMinThreshold = Settings.Instance.autocastMinThreshold;
- public float autocastCombatMinThreshold = Settings.Instance.autocastCombatMinThreshold;
- public float autocastEvaluationFrequency = Settings.Instance.autocastEvaluationFrequency;
- public bool autocastQueueing = Settings.Instance.autocastQueueing;
-
- //golem options
- public bool showDormantFrames = Settings.Instance.showDormantFrames;
- public bool showGolemsOnColonistBar = Settings.Instance.showGolemsOnColonistBar;
- public bool golemScreenShake = Settings.Instance.golemScreenShake;
-
- //Class options
- public bool Arcanist = Settings.Instance.Arcanist;
- public bool FireMage = Settings.Instance.FireMage;
- public bool IceMage = Settings.Instance.IceMage;
- public bool LitMage = Settings.Instance.LitMage;
- public bool Druid = Settings.Instance.Druid;
- public bool Paladin = Settings.Instance.Paladin;
- public bool Necromancer = Settings.Instance.Necromancer;
- public bool Bard = Settings.Instance.Bard;
- public bool Priest = Settings.Instance.Priest;
- public bool Demonkin = Settings.Instance.Demonkin;
- public bool Geomancer = Settings.Instance.Geomancer;
- public bool Summoner = Settings.Instance.Summoner;
- public bool Technomancer = Settings.Instance.Technomancer;
- public bool BloodMage = Settings.Instance.BloodMage;
- public bool Enchanter = Settings.Instance.Enchanter;
- public bool Chronomancer = Settings.Instance.Chronomancer;
- public bool Wanderer = Settings.Instance.Wanderer;
- public bool ChaosMage = Settings.Instance.ChaosMage;
- public bool Brightmage = Settings.Instance.Brightmage;
- public bool Shaman = Settings.Instance.Shaman;
- public bool Golemancer = Settings.Instance.Golemancer;
- public bool Empath = Settings.Instance.Empath;
-
- public bool Gladiator = Settings.Instance.Gladiator;
- public bool Bladedancer = Settings.Instance.Bladedancer;
- public bool Sniper = Settings.Instance.Sniper;
- public bool Ranger = Settings.Instance.Ranger;
- public bool Faceless = Settings.Instance.Faceless;
- public bool Psionic = Settings.Instance.Psionic;
- public bool DeathKnight = Settings.Instance.DeathKnight;
- public bool Monk = Settings.Instance.Monk;
- public bool Wayfarer = Settings.Instance.Wayfarer;
- public bool Commander = Settings.Instance.Commander;
- public bool SuperSoldier = Settings.Instance.SuperSoldier;
- public bool Shadow = Settings.Instance.Shadow;
- public bool Apothecary = Settings.Instance.Apothecary;
-
- public bool ArcaneConduit = Settings.Instance.ArcaneConduit;
- public bool ManaWell = Settings.Instance.ManaWell;
- public bool Boundless = Settings.Instance.Boundless;
- public bool Enlightened = Settings.Instance.Enlightened;
- public bool Cursed = Settings.Instance.Cursed;
- public bool FaeBlood = Settings.Instance.FaeBlood;
- public bool GiantsBlood = Settings.Instance.GiantsBlood;
-
- //faction settings
- public Dictionary FactionFighterSettings = Settings.Instance.FactionFighterSettings;
- public Dictionary FactionMageSettings = Settings.Instance.FactionMageSettings;
-
- public Dictionary CustomClass = Settings.Instance.CustomClass;
- }
-}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/TM_DebugTools.cs b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/TM_DebugTools.cs
index cf00fced..744aef61 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/ModOptions/TM_DebugTools.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/ModOptions/TM_DebugTools.cs
@@ -129,17 +129,15 @@ public static void RemoveClassHediffs(Pawn pawn)
public static void RemoveClassTrait(Pawn pawn)
{
- for (int i = 0; i < TM_Data.AllClassTraits.Count; i++)
+ for (int j = 0; j < pawn.story.traits.allTraits.Count; j++)
{
- for (int j = 0; j < pawn.story.traits.allTraits.Count; j++)
+ if (TM_ClassUtility.AllClassTraits.Contains(pawn.story.traits.allTraits[j].def))
{
- if (pawn.story.traits.allTraits[j].def == TM_Data.AllClassTraits[i])
- {
- pawn.story.traits.allTraits.Remove(pawn.story.traits.allTraits[j]);
- break;
- }
+ pawn.story.traits.RemoveTrait(pawn.story.traits.allTraits[j]);
+ break;
}
}
+
if(pawn.story.traits.HasTrait(TorannMagicDefOf.TM_CursedTD))
{
pawn.story.traits.RemoveTrait(pawn.story.traits.GetTrait(TorannMagicDefOf.TM_CursedTD));
diff --git a/RimWorldOfMagic/RimWorldOfMagic/RimWorldOfMagic.csproj b/RimWorldOfMagic/RimWorldOfMagic/RimWorldOfMagic.csproj
index 64404a78..40a10865 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/RimWorldOfMagic.csproj
+++ b/RimWorldOfMagic/RimWorldOfMagic/RimWorldOfMagic.csproj
@@ -13,6 +13,7 @@
512
true
+ 10
true
@@ -585,7 +586,6 @@
-
diff --git a/RimWorldOfMagic/RimWorldOfMagic/SihvRMagicScrollScribe/CompUseEffect_WriteMartialScript.cs b/RimWorldOfMagic/RimWorldOfMagic/SihvRMagicScrollScribe/CompUseEffect_WriteMartialScript.cs
index a50aa814..a93a0c7a 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/SihvRMagicScrollScribe/CompUseEffect_WriteMartialScript.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/SihvRMagicScrollScribe/CompUseEffect_WriteMartialScript.cs
@@ -15,7 +15,7 @@ public override void DoEffect(Pawn user)
ThingDef tempPod = null;
IntVec3 currentPos = parent.PositionHeld;
Map map = parent.Map;
- List cFighters = TM_ClassUtility.CustomFighterClasses;
+ TM_CustomClass[] cFighters = TM_ClassUtility.CustomFighterClasses;
CompAbilityUserMight comp = user.GetCompAbilityUserMight();
if (parent.def != null && comp != null && user.IsSlave)
@@ -82,10 +82,10 @@ public override void DoEffect(Pawn user)
RetryWrite:;
if (attempt < 20)
{
- float rnd = Rand.Range(0, 9 + cFighters.Count);
+ float rnd = Rand.Range(0, 9 + cFighters.Length);
if (rnd < 1)
{
- if (ModOptions.Settings.Instance.Gladiator)
+ if (ModOptions.Settings.Gladiator.isEnabled)
{
tempPod = ThingDef.Named("BookOfGladiator");
}
@@ -98,7 +98,7 @@ public override void DoEffect(Pawn user)
else if (rnd < 2)
{
- if (ModOptions.Settings.Instance.Sniper)
+ if (ModOptions.Settings.Sniper.isEnabled)
{
tempPod = ThingDef.Named("BookOfSniper");
}
@@ -110,7 +110,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 3)
{
- if (ModOptions.Settings.Instance.Bladedancer)
+ if (ModOptions.Settings.Bladedancer.isEnabled)
{
tempPod = ThingDef.Named("BookOfBladedancer");
}
@@ -122,7 +122,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 4)
{
- if (ModOptions.Settings.Instance.Ranger)
+ if (ModOptions.Settings.Ranger.isEnabled)
{
tempPod = ThingDef.Named("BookOfRanger");
}
@@ -134,7 +134,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 5)
{
- if (ModOptions.Settings.Instance.Psionic)
+ if (ModOptions.Settings.Psionic.isEnabled)
{
tempPod = ThingDef.Named("BookOfPsionic");
}
@@ -146,7 +146,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 6)
{
- if (ModOptions.Settings.Instance.DeathKnight)
+ if (ModOptions.Settings.DeathKnight.isEnabled)
{
tempPod = ThingDef.Named("BookOfDeathKnight");
}
@@ -158,7 +158,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 7)
{
- if (ModOptions.Settings.Instance.Monk)
+ if (ModOptions.Settings.Monk.isEnabled)
{
tempPod = TorannMagicDefOf.BookOfMonk;
}
@@ -170,7 +170,7 @@ public override void DoEffect(Pawn user)
}
else if (rnd < 8)
{
- if (ModOptions.Settings.Instance.Commander)
+ if (ModOptions.Settings.Commander.isEnabled)
{
tempPod = TorannMagicDefOf.BookOfCommander;
}
@@ -182,7 +182,7 @@ public override void DoEffect(Pawn user)
}
else if(rnd < 9)
{
- if (ModOptions.Settings.Instance.Faceless)
+ if (ModOptions.Settings.Faceless.isEnabled)
{
tempPod = ThingDef.Named("BookOfFaceless");
}
@@ -194,7 +194,7 @@ public override void DoEffect(Pawn user)
}
else
{
- if (cFighters.Count > 0)
+ if (cFighters.Length > 0)
{
tempPod = TM_ClassUtility.GetRandomCustomFighter().fullScript;
}
diff --git a/RimWorldOfMagic/RimWorldOfMagic/TM_Calc.cs b/RimWorldOfMagic/RimWorldOfMagic/TM_Calc.cs
index 6fd85949..4a27b942 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/TM_Calc.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/TM_Calc.cs
@@ -333,7 +333,7 @@ public static bool IsMightUser(Pawn pawn)
if (pawn?.story?.traits?.allTraits == null) return false;
CompAbilityUserMight comp = pawn.GetCompAbilityUserMight();
if (comp != null && comp.IsMightUser && comp.MightData != null && comp.Stamina != null) return true;
- if (pawn.story.traits.allTraits.Any(t => TM_Data.MightTraits.Contains(t.def))) return true;
+ if (pawn.story.traits.allTraits.Any(t => TM_ClassUtility.MightTraits.Contains(t.def))) return true;
if (pawn.needs != null && pawn.needs.AllNeeds.Any(t => t.def == TorannMagicDefOf.TM_Stamina)) return true;
return false;
}
@@ -366,29 +366,18 @@ public static bool IsMagicUser(Pawn pawn)
if (pawn.story.traits.HasTrait(TorannMagicDefOf.Faceless)) return false;
CompAbilityUserMagic comp = pawn.GetCompAbilityUserMagic();
if (comp != null && comp.IsMagicUser && comp.MagicData != null && comp.Mana != null) return true;
- if (pawn.story.traits.allTraits.Any(t => TM_Data.MagicTraits.Contains(t.def))) return true;
+ if (pawn.story.traits.allTraits.Any(t => TM_ClassUtility.MagicTraits.Contains(t.def))) return true;
if (pawn.needs != null && pawn.needs.AllNeeds.Any(t => t.def == TorannMagicDefOf.TM_Mana)) return true;
return false;
}
public static bool HasAdvancedClass(Pawn p)
- {
- if (p != null && p.story != null && p.story.traits != null)
+ {
+ if (p?.story?.traits == null) return false;
+ for (int i = p.story.traits.allTraits.Count - 1; i >= 0; i--)
{
- List customClasses = TM_ClassUtility.CustomClasses;
- for (int i = 0; i < customClasses.Count; i++)
- {
- if (customClasses[i].isAdvancedClass)
- {
- foreach(Trait t in p.story.traits.allTraits)
- {
- if(t.def == customClasses[i].classTrait)
- {
- return true;
- }
- }
- }
- }
+ if (TM_ClassUtility.CustomAdvancedClassTraitMap.ContainsKey(p.story.traits.allTraits[i].def.index))
+ return true;
}
return false;
}
@@ -2075,41 +2064,17 @@ public static float GetRWoMTraitChance()
float chance = ((ModOptions.Settings.Instance.baseFighterChance * 6) + (ModOptions.Settings.Instance.baseMageChance * 6) + (9 * ModOptions.Settings.Instance.advFighterChance) + (18 * ModOptions.Settings.Instance.advMageChance)) / (allTraits.Count);
return Mathf.Clamp01(chance);
}
-
- public static float GetMagePrecurserChance()
- {
- float chance = 0f;
-
- chance = (ModOptions.Settings.Instance.baseMageChance * 6) / ((ModOptions.Settings.Instance.baseFighterChance * 6) + (ModOptions.Settings.Instance.baseMageChance * 6) + (9 * ModOptions.Settings.Instance.advFighterChance) + (18 * ModOptions.Settings.Instance.advMageChance));
- chance *= GetRWoMTraitChance();
- return chance;
- }
-
- public static float GetFighterPrecurserChance()
- {
- float chance = 0f;
-
- chance = (ModOptions.Settings.Instance.baseFighterChance * 6) / ((ModOptions.Settings.Instance.baseFighterChance * 6) + (ModOptions.Settings.Instance.baseMageChance * 6) + (9 * ModOptions.Settings.Instance.advFighterChance) + (18 * ModOptions.Settings.Instance.advMageChance));
- chance *= GetRWoMTraitChance();
- return chance;
- }
- public static float GetMageSpawnChance()
+ public static string GetWeightedChance(float chance)
{
- float chance = 0f;
-
- chance = (ModOptions.Settings.Instance.advMageChance * 16) / ((ModOptions.Settings.Instance.baseFighterChance * 6) + (ModOptions.Settings.Instance.baseMageChance * 6) + (9 * ModOptions.Settings.Instance.advFighterChance) + (18 * ModOptions.Settings.Instance.advMageChance));
- chance *= GetRWoMTraitChance();
- return chance;
- }
+ var inst = ModOptions.Settings.Instance;
+ float total = Math.Max(inst.baseMageChance + inst.baseFighterChance + inst.advMageChance + inst.advFighterChance, 1f);
- public static float GetFighterSpawnChance()
- {
- float chance = 0f;
-
- chance = (ModOptions.Settings.Instance.advFighterChance * 8) / ((ModOptions.Settings.Instance.baseFighterChance * 6) + (ModOptions.Settings.Instance.baseMageChance * 6) + (9 * ModOptions.Settings.Instance.advFighterChance) + (18 * ModOptions.Settings.Instance.advMageChance));
- chance *= GetRWoMTraitChance();
- return chance;
+ float weightedChance = chance * 100 / total;
+ // cut the decimal if 100%
+ string formatted = weightedChance > 99.9f ? $"{weightedChance:F0}" : $"{weightedChance:F1}";
+ // Add a + if the total is over 100% as when conflicts arise the percentage will be higher (unless full conflict)
+ return total > 1f && chance > 0f ? $"{formatted}+%" : $"{formatted} %";
}
public static Area GetSpriteArea(Map map = null, bool makeNewArea = true)
diff --git a/RimWorldOfMagic/RimWorldOfMagic/TM_ClassUtility.cs b/RimWorldOfMagic/RimWorldOfMagic/TM_ClassUtility.cs
index ff9e03fe..ba295643 100644
--- a/RimWorldOfMagic/RimWorldOfMagic/TM_ClassUtility.cs
+++ b/RimWorldOfMagic/RimWorldOfMagic/TM_ClassUtility.cs
@@ -18,98 +18,242 @@ namespace TorannMagic
{
public static class TM_ClassUtility
{
- public static List CustomClasses;
- public static readonly List CustomBaseClasses = new List();
- public static readonly List CustomMageClasses = new List();
- public static readonly List CustomFighterClasses = new List();
- public static readonly List CustomAdvancedClasses = new List();
-
- //public static TM_CustomClass[] CustomClasses;
- //public static readonly Dictionary CustomAdvancedClassTraitIndexMap = new Dictionary();
- //public static TM_CustomClass[] CustomBaseClasses;
- //public static TM_CustomClass[] CustomMageClasses;
- //public static TM_CustomClass[] CustomFighterClasses;
- //public static TM_CustomClass[] CustomAdvancedClasses;
+ public static Dictionary NonCustomMagicTraits = new ()
+ {
+ { TorannMagicDefOf.Arcanist, Settings.Arcanist },
+ { TorannMagicDefOf.BloodMage, Settings.BloodMage },
+ { TorannMagicDefOf.ChaosMage, Settings.ChaosMage },
+ { TorannMagicDefOf.Chronomancer, Settings.Chronomancer },
+ { TorannMagicDefOf.Druid, Settings.Druid },
+ { TorannMagicDefOf.Enchanter, Settings.Enchanter },
+ { TorannMagicDefOf.Faceless, Settings.Faceless },
+ { TorannMagicDefOf.Geomancer, Settings.Geomancer },
+ { TorannMagicDefOf.HeartOfFrost, Settings.IceMage },
+ { TorannMagicDefOf.InnerFire, Settings.FireMage },
+ { TorannMagicDefOf.Lich, Settings.Necromancer },
+ { TorannMagicDefOf.Necromancer, Settings.Necromancer },
+ { TorannMagicDefOf.Paladin, Settings.Paladin },
+ { TorannMagicDefOf.Priest, Settings.Priest },
+ { TorannMagicDefOf.StormBorn, Settings.LitMage },
+ { TorannMagicDefOf.Succubus, Settings.Demonkin },
+ { TorannMagicDefOf.Summoner, Settings.Summoner },
+ { TorannMagicDefOf.TM_Bard, Settings.Bard },
+ { TorannMagicDefOf.TM_Brightmage, Settings.Brightmage },
+ { TorannMagicDefOf.TM_TheShadow, Settings.Shadow },
+ { TorannMagicDefOf.TM_Wanderer, Settings.Wanderer },
+ { TorannMagicDefOf.Technomancer, Settings.Technomancer },
+ { TorannMagicDefOf.Warlock, Settings.Demonkin }
+ };
+
+ public static Dictionary NonCustomFighterTraits = new ()
+ {
+ { TorannMagicDefOf.TM_Apothecary, Settings.Apothecary },
+ { TorannMagicDefOf.Bladedancer, Settings.Bladedancer },
+ { TorannMagicDefOf.DeathKnight, Settings.DeathKnight },
+ { TorannMagicDefOf.Faceless, Settings.Faceless },
+ { TorannMagicDefOf.Gladiator, Settings.Gladiator },
+ { TorannMagicDefOf.Ranger, Settings.Ranger },
+ { TorannMagicDefOf.TM_Commander, Settings.Commander },
+ { TorannMagicDefOf.TM_Monk, Settings.Monk },
+ { TorannMagicDefOf.TM_Psionic, Settings.Psionic },
+ { TorannMagicDefOf.TM_Sniper, Settings.Sniper },
+ { TorannMagicDefOf.TM_SuperSoldier, Settings.SuperSoldier },
+ { TorannMagicDefOf.TM_TheShadow, Settings.Shadow },
+ { TorannMagicDefOf.TM_Wayfarer, Settings.Wayfarer }
+ };
+
+ public static Dictionary MageSupportTraits = new ()
+ {
+ { TorannMagicDefOf.TM_ArcaneConduitTD, Settings.ArcaneConduit },
+ { TorannMagicDefOf.TM_ManaWellTD, Settings.ManaWell },
+ { TorannMagicDefOf.TM_FaeBloodTD, Settings.FaeBlood },
+ { TorannMagicDefOf.TM_EnlightenedTD, Settings.Enlightened },
+ { TorannMagicDefOf.TM_CursedTD, Settings.Cursed }
+ };
+
+ public static Dictionary FighterSupportTraits = new ()
+ {
+ { TorannMagicDefOf.TM_BoundlessTD, Settings.Boundless },
+ { TorannMagicDefOf.TM_GiantsBloodTD, Settings.GiantsBlood }
+ };
+ // Special rules for generating pawns.
+ public static Dictionary> ClassSpawnValidators = new Dictionary>
+ {
+ { TorannMagicDefOf.Warlock, static pawn => pawn.gender == Gender.Male },
+ { TorannMagicDefOf.Succubus, static pawn => pawn.gender == Gender.Female },
+ { TorannMagicDefOf.Lich, static pawn => false }, // Never spawn a lich under normal circumstances
+ { TorannMagicDefOf.TM_Possessor, static pawn => false }, // Never spawn possessor under normal circumstances
+
+ };
+
+ public static HashSet MightTraits;
+ public static HashSet MagicTraits;
+ public static HashSet AllClassTraits;
+ public static Dictionary CustomClassTraitMap;
+ public static Dictionary CustomAdvancedClassTraitMap;
+ public static TM_CustomClass[] CustomClasses;
+ public static TM_CustomClass[] CustomBaseClasses;
+ public static TM_CustomClass[] CustomMageClasses;
+ public static TM_CustomClass[] CustomFighterClasses;
+ public static TM_CustomClass[] CustomAdvancedClasses;
+
+ // Load all custom classes into the mod (regardless if enabled)
+ public static void InitializeCustomClasses()
+ {
+ // A Helper method to set the trait trackers to no custom classes.
+ static void setNoCustomClassDefaults()
+ {
+ CustomClassTraitMap = new Dictionary();
+ CustomAdvancedClassTraitMap = new Dictionary();
+ MagicTraits = new HashSet(NonCustomMagicTraits.Keys);
+ MightTraits = new HashSet(NonCustomFighterTraits.Keys);
+ AllClassTraits = new HashSet(NonCustomFighterTraits.Keys);
+ AllClassTraits.UnionWith(MagicTraits);
+ }
+
+ try
+ {
+ setNoCustomClassDefaults();
+ CustomClasses = TM_CustomClassDef.Named("TM_CustomClasses").customClasses.ToArray();
+ foreach (TM_CustomClass cc in CustomClasses)
+ {
+ CustomClassTraitMap[cc.classTrait.index] = cc;
+ if (cc.isAdvancedClass) CustomAdvancedClassTraitMap[cc.classTrait.index] = cc;
+ if (cc.isMage) MagicTraits.Add(cc.classTrait);
+ if (cc.isFighter) MightTraits.Add(cc.classTrait);
+ AllClassTraits.Add(cc.classTrait);
+ }
+ }
+ catch
+ {
+ Log.Error("[Rimworld of Magic] Initializing Custom Classes failed. Disabling Custom Classes");
+ setNoCustomClassDefaults();
+ CustomClasses = Array.Empty();
+ }
+ }
+
+ // Load the enabled custom classes into appropriate variables after load + mod settings change
public static void LoadCustomClasses()
{
- TM_CustomClassDef named = TM_CustomClassDef.Named("TM_CustomClasses");
- if (named == null) return;
-
- CustomClasses = named.customClasses;
- //CustomAdvancedClassTraitIndexMap.Clear();
- //var CustomBaseClassesList = new List();
- //var CustomMageClassesList = new List();
- //var CustomFighterClassesList = new List();
- //var CustomAdvancedClassesList = new List();
- CustomBaseClasses.Clear();
- CustomMageClasses.Clear();
- CustomFighterClasses.Clear();
- CustomAdvancedClasses.Clear();
-
- IEnumerable enabledCustomClasses = CustomClasses.Where(cc =>
- Settings.Instance.CustomClass.TryGetValue(cc.classTrait.ToString(), true));
-
- foreach (TM_CustomClass cc in enabledCustomClasses)
+ try
{
- if (cc.isMage)
+ var CustomBaseClassesList = new List