+ Imbues the target with a psychic shock.PsychicShockThe target will gain psychic shock.2
+ InvokerDeathRefusalTargetBasicPsychicRituals
diff --git a/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml b/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
index efe09991..85d5e864 100644
--- a/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
+++ b/1.6/Defs/ThingDefs_Buildings/WULA_FallenEmpire_Buildings_Ritual.xml
@@ -45,7 +45,8 @@
True
-
+
+ WulaRitual
diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
index f1a2d527..bd9a05a8 100644
--- a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
+++ b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_FE_Spiritualist_Weapon.xml
@@ -45,7 +45,7 @@
3004
- 65
+ 56251000AgonyPulse_Cast
diff --git a/Source/WulaFallenEmpire/CompWulaRitualSpot.cs b/Source/WulaFallenEmpire/CompWulaRitualSpot.cs
new file mode 100644
index 00000000..c19f7ae7
--- /dev/null
+++ b/Source/WulaFallenEmpire/CompWulaRitualSpot.cs
@@ -0,0 +1,72 @@
+using System.Collections.Generic;
+using System.Linq;
+using RimWorld;
+using Verse;
+using Verse.AI.Group;
+
+namespace WulaFallenEmpire
+{
+ // NOTE: The PsychicRitualDef_Wula class has been removed as it's no longer needed.
+ // We are now using a DefModExtension for filtering, which is a much cleaner approach.
+
+ ///
+ /// Custom CompProperties for our ritual spot, with a tag.
+ ///
+ public class CompProperties_WulaRitualSpot : CompProperties
+ {
+ public string ritualTag;
+
+ public CompProperties_WulaRitualSpot()
+ {
+ this.compClass = typeof(CompWulaRitualSpot);
+ }
+ }
+
+ ///
+ /// The core component for the custom ritual spot. Generates its own gizmos
+ /// by filtering for rituals with a matching tag via a DefModExtension.
+ ///
+ public class CompWulaRitualSpot : ThingComp
+ {
+ public CompProperties_WulaRitualSpot Props => (CompProperties_WulaRitualSpot)this.props;
+
+ public override IEnumerable CompGetGizmosExtra()
+ {
+ foreach (Gizmo gizmo in base.CompGetGizmosExtra())
+ {
+ yield return gizmo;
+ }
+
+ // Find all rituals that have our custom mod extension and a matching tag
+ foreach (PsychicRitualDef ritualDef in DefDatabase.AllDefsListForReading)
+ {
+ var extension = ritualDef.GetModExtension();
+ if (extension != null && extension.ritualTag == this.Props.ritualTag)
+ {
+ Command_Action command_Action = new Command_Action();
+ command_Action.defaultLabel = ritualDef.LabelCap;
+ command_Action.defaultDesc = ritualDef.description;
+ command_Action.icon = ritualDef.uiIcon;
+ command_Action.action = delegate
+ {
+ // Mimic vanilla initialization
+ TargetInfo target = new TargetInfo(this.parent);
+ PsychicRitualRoleAssignments assignments = ritualDef.BuildRoleAssignments(target);
+ PsychicRitualCandidatePool candidatePool = ritualDef.FindCandidatePool();
+ ritualDef.InitializeCast(this.parent.Map);
+ Find.WindowStack.Add(new Dialog_BeginPsychicRitual(ritualDef, candidatePool, assignments, this.parent.Map));
+ };
+
+ // Corrected check for cooldown and other requirements
+ AcceptanceReport acceptanceReport = Find.PsychicRitualManager.CanInvoke(ritualDef, this.parent.Map);
+ if (!acceptanceReport.Accepted)
+ {
+ command_Action.Disable(acceptanceReport.Reason.CapitalizeFirst());
+ }
+
+ yield return command_Action;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs b/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs
new file mode 100644
index 00000000..2f8ea2e4
--- /dev/null
+++ b/Source/WulaFallenEmpire/HarmonyPatches/Patch_PsychicRitualGizmo_VisibleRituals.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using System.Linq;
+using HarmonyLib;
+using Verse;
+using RimWorld;
+
+namespace WulaFallenEmpire.HarmonyPatches
+{
+ [HarmonyPatch(typeof(PsychicRitualGizmo), "VisibleRituals")]
+ public static class Patch_PsychicRitualGizmo_VisibleRituals
+ {
+ [HarmonyPostfix]
+ public static List Postfix(List __result)
+ {
+ if (__result == null || __result.Count == 0)
+ {
+ return __result;
+ }
+
+ // Create a new list containing only the rituals that DO NOT have our custom tag.
+ // This is a more robust way to ensure our custom rituals are filtered out.
+ return __result.Where(ritualDef =>
+ {
+ var extension = ritualDef.GetModExtension();
+ // Keep the ritual if it has no extension, or if the extension tag is null/empty.
+ return extension == null || string.IsNullOrEmpty(extension.ritualTag);
+ }).ToList();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/WulaFallenEmpire/RitualTagExtension.cs b/Source/WulaFallenEmpire/RitualTagExtension.cs
new file mode 100644
index 00000000..2e74c7c6
--- /dev/null
+++ b/Source/WulaFallenEmpire/RitualTagExtension.cs
@@ -0,0 +1,9 @@
+using Verse;
+
+namespace WulaFallenEmpire
+{
+ public class RitualTagExtension : DefModExtension
+ {
+ public string ritualTag;
+ }
+}
\ No newline at end of file
diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
index 8771b901..1ad637a8 100644
--- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
+++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
@@ -71,6 +71,7 @@
+
@@ -108,6 +109,7 @@
+