diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll
index 8941d0b0..8bb5a621 100644
Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ
diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml b/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
index 5cb5592d..b81f4a20 100644
--- a/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
+++ b/1.6/Defs/BackstoryDefs/Solid/Solid_Adult_WULA.xml
@@ -1051,20 +1051,6 @@
破碎人格
破碎人格
[PAWN_possessive]人格矩阵完全损坏,已是某个集体意识的一部分。
-
- -5
- -5
- -5
- -5
- -5
- -5
- -5
- -5
- -5
- -5
- -5
- -5
-
Wula_Backstory_Categories_For_Hostile_Faction
@@ -1090,4 +1076,4 @@
-
\ No newline at end of file
+
diff --git a/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml b/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
index ecff35b6..3f1c461f 100644
--- a/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
+++ b/1.6/Defs/BackstoryDefs/Solid/Solid_Child_WULA.xml
@@ -1,12 +1,12 @@
- WULA_Child_Backstory01
- False
- Childhood
- 旧日遗物
- 旧日遗物
- [PAWN_nameDef] 是诞生于乌拉帝国的合成人。
+ WULA_Child_Backstory01
+ False
+ Childhood
+ 旧日遗物
+ 旧日遗物
+ [PAWN_nameDef] 是诞生于乌拉帝国的合成人。
5
5
@@ -31,5 +31,11 @@
WULA_Addons_Antenna_Hediff_Base
+
+
+ WULA_BrokenPersonalityTrait
+ 100
+
+
diff --git a/1.6/Defs/FactionDefs/Factions_Player_WULA.xml b/1.6/Defs/FactionDefs/Factions_Player_WULA.xml
index 04aac892..c831e7da 100644
--- a/1.6/Defs/FactionDefs/Factions_Player_WULA.xml
+++ b/1.6/Defs/FactionDefs/Factions_Player_WULA.xml
@@ -73,7 +73,7 @@
(4000, 500)
- false
+ true
true
false
false
diff --git a/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml b/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml
new file mode 100644
index 00000000..8e8b2a24
--- /dev/null
+++ b/1.6/Defs/MentalBreakDefs/MentalBreaks_WULA.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Wula_BrokenPersonality
+
+ Wula_BrokenPersonality
+ Extreme
+ 1.0
+ WulaFallenEmpire.MentalBreakWorker_BrokenPersonality
+
+
+
diff --git a/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml b/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml
new file mode 100644
index 00000000..4671e24f
--- /dev/null
+++ b/1.6/Defs/MentalStateDefs/MentalStates_WULA_Broken.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ Wula_BrokenPersonality
+
+ WulaFallenEmpire.MentalState_BrokenPersonality
+ Aggro
+ true
+ (255, 0, 0)
+ 0.0001
+
+
+ WULA_Trait_Broken_Personality
+ Wula_Broken_Personality_Faction
+ 0.5
+
+
+
+ Insult
+
+
+ Insult
+
+ Catharsis
+ 由于重度精神崩溃,{0}的模拟人格已经破碎,{0}受到了星球上乌拉帝国反常网络的一个主脑子节点影响,已经成为了这些反常子个体乌拉的一员。
+ NegativeEvent
+ 精神状态:人格破碎
+
+
+
diff --git a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
index 4d1a4e42..e9bbf769 100644
--- a/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
+++ b/1.6/Defs/ThingDefs_Races/Races_Wulaspecies.xml
@@ -1126,4 +1126,4 @@
-
\ No newline at end of file
+
diff --git a/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml b/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml
new file mode 100644
index 00000000..f2b3e9f5
--- /dev/null
+++ b/1.6/Defs/TraitDefs/Traits_WULA_Broken.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ WULA_BrokenPersonalityTrait
+ 0
+
+
+
+ {PAWN_nameDef}是机械乌拉。乌拉的思维模式与常人不同,在极端压力下,其模拟人格会彻底崩溃。
+
+ Wula_BrokenPersonality
+
+
+
+
+
+
diff --git a/Source/WulaFallenEmpire/.gitignore b/Source/WulaFallenEmpire/.gitignore
deleted file mode 100644
index 93713d58..00000000
--- a/Source/WulaFallenEmpire/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-# Compiled output
-bin/
-obj/
-
-# Rider
-.idea/
-
-# Visual Studio
-.vs/
-*.suo
-*.user
-*.userosf
-*.sln.docstates
-
-# OS generated files
-.DS_Store
-.localized
-Thumbs.db
diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo
index 0308adc5..5da9f907 100644
Binary files a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo and b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo differ
diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
index 4a6f0440..07f9c84d 100644
--- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
+++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
@@ -3,7 +3,11 @@
"WorkspaceRootPath": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\",
"Documents": [
{
- "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|c:\\steam\\steamapps\\common\\rimworld\\mods\\3516260226\\source\\wulafallenempire\\mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:mentalstate_brokenpersonality.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:recipe_administerwulamechrepairkit.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
@@ -63,6 +67,19 @@
{
"$type": "Document",
"DocumentIndex": 0,
+ "Title": "MentalState_BrokenPersonality.cs",
+ "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MentalState_BrokenPersonality.cs",
+ "RelativeDocumentMoniker": "MentalState_BrokenPersonality.cs",
+ "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MentalState_BrokenPersonality.cs",
+ "RelativeToolTip": "MentalState_BrokenPersonality.cs",
+ "ViewState": "AQIAADMAAAAAAAAAAAAlwEsAAAAjAAAA",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-07-25T13:51:03.13Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
"Title": "Recipe_AdministerWulaMechRepairKit.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Recipe_AdministerWulaMechRepairKit.cs",
"RelativeDocumentMoniker": "Recipe_AdministerWulaMechRepairKit.cs",
@@ -70,12 +87,11 @@
"RelativeToolTip": "Recipe_AdministerWulaMechRepairKit.cs",
"ViewState": "AQIAAC8AAAAAAAAAAAAAAC8AAAAAAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-24T05:09:33.389Z",
- "EditorCaption": ""
+ "WhenOpened": "2025-07-24T05:09:33.389Z"
},
{
"$type": "Document",
- "DocumentIndex": 1,
+ "DocumentIndex": 2,
"Title": "WorkGiver_Warden_DeliverEnergy.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiver_Warden_DeliverEnergy.cs",
"RelativeDocumentMoniker": "WorkGiver_Warden_DeliverEnergy.cs",
@@ -87,7 +103,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 2,
+ "DocumentIndex": 3,
"Title": "WorkGiverDefExtension_FeedWula.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WorkGiverDefExtension_FeedWula.cs",
"RelativeDocumentMoniker": "WorkGiverDefExtension_FeedWula.cs",
@@ -99,7 +115,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 3,
+ "DocumentIndex": 4,
"Title": "CompApparelInterceptor.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompApparelInterceptor.cs",
"RelativeDocumentMoniker": "CompApparelInterceptor.cs",
@@ -111,7 +127,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 4,
+ "DocumentIndex": 5,
"Title": "Projectile_Launch_Patch.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HarmonyPatches\\Projectile_Launch_Patch.cs",
"RelativeDocumentMoniker": "HarmonyPatches\\Projectile_Launch_Patch.cs",
@@ -123,7 +139,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 6,
+ "DocumentIndex": 7,
"Title": "IngestPatch.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\IngestPatch.cs",
"RelativeDocumentMoniker": "IngestPatch.cs",
@@ -135,7 +151,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 5,
+ "DocumentIndex": 6,
"Title": "CompUseEffect_WulaSkillTrainer.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\CompUseEffect_WulaSkillTrainer.cs",
"RelativeDocumentMoniker": "CompUseEffect_WulaSkillTrainer.cs",
@@ -147,7 +163,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 7,
+ "DocumentIndex": 8,
"Title": "Building_Wula_DarkEnergy_Engine.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs",
"RelativeDocumentMoniker": "Building_Wula_DarkEnergy_Engine.cs",
@@ -159,7 +175,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 8,
+ "DocumentIndex": 9,
"Title": "HediffComp_RegenerateBackstory.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\HediffComp_RegenerateBackstory.cs",
"RelativeDocumentMoniker": "HediffComp_RegenerateBackstory.cs",
@@ -171,7 +187,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 9,
+ "DocumentIndex": 10,
"Title": "WulaFallenEmpireMod.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\WulaFallenEmpireMod.cs",
"RelativeDocumentMoniker": "WulaFallenEmpireMod.cs",
@@ -183,7 +199,7 @@
},
{
"$type": "Document",
- "DocumentIndex": 10,
+ "DocumentIndex": 11,
"Title": "MechanitorPatch.cs",
"DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\MechanitorPatch.cs",
"RelativeDocumentMoniker": "MechanitorPatch.cs",
diff --git a/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs
new file mode 100644
index 00000000..4439012d
--- /dev/null
+++ b/Source/WulaFallenEmpire/MentalBreakWorker_BrokenPersonality.cs
@@ -0,0 +1,26 @@
+using RimWorld;
+using Verse;
+using Verse.AI;
+
+namespace WulaFallenEmpire
+{
+ public class MentalBreakWorker_BrokenPersonality : MentalBreakWorker
+ {
+ public override bool TryStart(Pawn pawn, string reason, bool causedByMood)
+ {
+ // 先尝试启动精神状态
+ if (base.TryStart(pawn, reason, causedByMood))
+ {
+ // 成功启动后,执行附加逻辑
+ var extension = def.mentalState.GetModExtension();
+ if (extension != null && extension.traitToAdd != null && !pawn.story.traits.HasTrait(extension.traitToAdd))
+ {
+ pawn.story.traits.GainTrait(new Trait(extension.traitToAdd));
+ }
+
+ return true;
+ }
+ return false;
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs
new file mode 100644
index 00000000..a1d07b28
--- /dev/null
+++ b/Source/WulaFallenEmpire/MentalStateDefExtension_BrokenPersonality.cs
@@ -0,0 +1,12 @@
+using RimWorld;
+using Verse;
+
+namespace WulaFallenEmpire
+{
+ public class MentalStateDefExtension_BrokenPersonality : DefModExtension
+ {
+ public TraitDef traitToAdd;
+ public FactionDef factionToJoin;
+ public float skillLevelFactor = 1f;
+ }
+}
diff --git a/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs b/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs
new file mode 100644
index 00000000..be6b8f9c
--- /dev/null
+++ b/Source/WulaFallenEmpire/MentalState_BrokenPersonality.cs
@@ -0,0 +1,93 @@
+using RimWorld;
+using Verse;
+using Verse.AI;
+using Verse.AI.Group;
+
+namespace WulaFallenEmpire
+{
+ public class MentalState_BrokenPersonality : MentalState
+ {
+ public override void PostStart(string reason)
+ {
+ base.PostStart(reason);
+
+ // 发送信件
+ if (PawnUtility.ShouldSendNotificationAbout(pawn))
+ {
+ // 手动实现备用逻辑:如果信件标题(beginLetterLabel)为空,则使用精神状态的通用标签(label)
+ string labelText = def.beginLetterLabel;
+ if (string.IsNullOrEmpty(labelText))
+ {
+ labelText = def.label;
+ }
+ TaggedString letterLabel = labelText.Formatted(pawn.LabelShort, pawn.Named("PAWN")).CapitalizeFirst();
+ TaggedString letterText = def.beginLetter.Formatted(pawn.LabelShort, pawn.Named("PAWN")).CapitalizeFirst();
+ if (reason != null)
+ {
+ letterText += "\n\n" + reason;
+ }
+ Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, pawn);
+ }
+
+ var extension = def.GetModExtension();
+ if (extension != null)
+ {
+ bool alreadyBroken = pawn.story.traits.HasTrait(extension.traitToAdd);
+
+ if (!alreadyBroken)
+ {
+ // 移除所有技能热情
+ foreach (SkillRecord skill in pawn.skills.skills)
+ {
+ skill.passion = Passion.None;
+ }
+
+ // 所有技能等级减半
+ foreach (SkillRecord skill in pawn.skills.skills)
+ {
+ int currentLevel = skill.Level;
+ skill.Level = (int)(currentLevel * extension.skillLevelFactor);
+ }
+ }
+
+ // 改变派系
+ Faction newFaction = Find.FactionManager.FirstFactionOfDef(extension.factionToJoin);
+ if (newFaction == null)
+ {
+ newFaction = Find.FactionManager.FirstFactionOfDef(FactionDefOf.AncientsHostile);
+ }
+
+ if (newFaction != null)
+ {
+ pawn.SetFaction(newFaction, null);
+ }
+
+ }
+
+ // 离开地图
+ Lord lord = pawn.GetLord();
+ if (lord == null)
+ {
+ LordJob_ExitMapBest lordJob = new LordJob_ExitMapBest(LocomotionUrgency.Jog, canDig: true, canDefendSelf: true);
+ lord = LordMaker.MakeNewLord(pawn.Faction, lordJob, pawn.Map, Gen.YieldSingle(pawn));
+ }
+ else
+ {
+ lord.ReceiveMemo("PawnBroken");
+ }
+
+ // 强制恢复以避免状态无限持续
+ this.forceRecoverAfterTicks = 150;
+ }
+
+ public override void MentalStateTick(int delta)
+ {
+ base.MentalStateTick(delta);
+ // 确保在下一帧就恢复,因为所有效果都已经应用
+ if (age > 0)
+ {
+ RecoverFromState();
+ }
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
index e68fb724..87de747e 100644
--- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
+++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
@@ -99,6 +99,9 @@
+
+
+