diff --git a/1.6/Assemblies/WulaFallenEmpire.dll b/1.6/Assemblies/WulaFallenEmpire.dll
index ad92913e..dda1f49b 100644
Binary files a/1.6/Assemblies/WulaFallenEmpire.dll and b/1.6/Assemblies/WulaFallenEmpire.dll differ
diff --git a/1.6/Defs/DamageDefs/Damages_Wula.xml b/1.6/Defs/DamageDefs/Damages_Wula.xml
index e671af25..78152004 100644
--- a/1.6/Defs/DamageDefs/Damages_Wula.xml
+++ b/1.6/Defs/DamageDefs/Damages_Wula.xml
@@ -1,6 +1,6 @@
-
+
Wula_Darm_Matter_Beam
true
@@ -41,4 +41,16 @@
暗物质湮灭
{0} 由于暗物质湮灭爆炸而死。
+
+
+ Wula_Darm_Matter_Beam_Explode
+
+
+ WULA_Darkmatter_Explosion
+ 0.01
+ true
+ true
+
+
+
diff --git a/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml b/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml
new file mode 100644
index 00000000..3cc27c45
--- /dev/null
+++ b/1.6/Defs/HediffDefs/Hediffs_WULA_Damage_Effect.xml
@@ -0,0 +1,32 @@
+
+
+
+
+ WULA_Darkmatter_Explosion
+ 暗流爆发
+ 你身上沾染了不明暗物质!马上就要爆炸了!只能祝你好运咯~
+ (1, 1, 0.8)
+ HediffWithComps
+
+
+ -4
+
+
+ Wula_Darm_Matter_Flame
+ Explosion_Bomb
+ 1.5
+ true
+ 15
+ 0.10
+ 10
+
+
+
+
+
+ minor
+ true
+
+
+
+
\ No newline at end of file
diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Sample_Weapon.xml b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Sample_Weapon.xml
index 4ee608a1..cf9ae383 100644
--- a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Sample_Weapon.xml
+++ b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Sample_Weapon.xml
@@ -42,10 +42,10 @@
WulaFallenEmpire.Verb_ShootArc
true
- Wula_Darm_Matter_Beam
+ Wula_Darm_Matter_Beam_Explode
20
20
- 0.5
+ 1
34.9
25
1.0
diff --git a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
index 95251cee..16369576 100644
--- a/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
+++ b/1.6/Defs/ThingDefs_Misc/Weapons/WULA_Weapon.xml
@@ -1577,26 +1577,25 @@
Bullet_WULA_RW_Handle_Cannon
熔岩炮弹
-
- Projectile_Explosive
+ WulaFallenEmpire.Projectile_ConfigurableHellsphereCannon
Things/Projectile/HellsphereCannon
Graphic_Single
MoteGlow
(1.5, 3)
-
+
Vaporize
75
- 300
- 2.5
+ 75
+ 1.5
0.75
-
+
diff --git a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/.suo
index d2045a8f..3a65d2f5 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 6fc89b93..efa8019f 100644
--- a/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
+++ b/Source/WulaFallenEmpire/.vs/WulaFallenEmpire/v17/DocumentLayout.json
@@ -3,48 +3,12 @@
"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\\verb\\shootarc.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:verb\\shootarc.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\\verb\\projectile_configurablehellspherecannon.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:verb\\projectile_configurablehellspherecannon.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\\verb\\propershotgun.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:verb\\propershotgun.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\\verb\\trackingbullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:verb\\trackingbullet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
- {
- "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\VerbPropertiesExplosiveBeam.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Verb\\VerbPropertiesExplosiveBeam.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\\eventsystem\\dialog_customdisplay.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\dialog_customdisplay.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\\eventsystem\\condition.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\condition.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\\eventsystem\\compopencustomui.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\compopencustomui.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\\eventsystem\\debugactions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\debugactions.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\\eventsystem\\effect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:eventsystem\\effect.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
- {
- "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:EventSystem\\CustomUIDef.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
- },
- {
- "AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Verb_ShootBeamExplosive.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
- "RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:Verb\\Verb_ShootBeamExplosive.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\\building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{F5AE8C3B-0221-4C16-A128-9A62D521A8FF}|WulaFallenEmpire.csproj|solutionrelative:building_wula_darkenergy_engine.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@@ -54,7 +18,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
- "SelectedChildIndex": 1,
+ "SelectedChildIndex": 2,
"Children": [
{
"$type": "Bookmark",
@@ -63,137 +27,28 @@
{
"$type": "Document",
"DocumentIndex": 0,
- "Title": "ShootArc.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\ShootArc.cs",
- "RelativeDocumentMoniker": "Verb\\ShootArc.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\ShootArc.cs",
- "RelativeToolTip": "Verb\\ShootArc.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAFAAAA",
+ "Title": "Projectile_ConfigurableHellsphereCannon.cs",
+ "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Projectile_ConfigurableHellsphereCannon.cs",
+ "RelativeDocumentMoniker": "Verb\\Projectile_ConfigurableHellsphereCannon.cs",
+ "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Projectile_ConfigurableHellsphereCannon.cs",
+ "RelativeToolTip": "Verb\\Projectile_ConfigurableHellsphereCannon.cs",
+ "ViewState": "AQIAAC0AAAAAAAAAAAAUwFwAAAABAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-08-01T04:09:11.909Z",
- "EditorCaption": ""
- },
- {
- "$type": "Document",
- "DocumentIndex": 2,
- "Title": "Trackingbullet.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Trackingbullet.cs",
- "RelativeDocumentMoniker": "Verb\\Trackingbullet.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Trackingbullet.cs",
- "RelativeToolTip": "Verb\\Trackingbullet.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwYAAAAaAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T17:19:18.131Z",
+ "WhenOpened": "2025-08-01T05:40:06.726Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
- "Title": "ProperShotgun.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\ProperShotgun.cs",
- "RelativeDocumentMoniker": "Verb\\ProperShotgun.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\ProperShotgun.cs",
- "RelativeToolTip": "Verb\\ProperShotgun.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAaAAAA",
+ "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",
+ "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Building_Wula_DarkEnergy_Engine.cs",
+ "RelativeToolTip": "Building_Wula_DarkEnergy_Engine.cs",
+ "ViewState": "AQIAAAAAAAAAAAAAAADwvwUAAAAWAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T17:19:04.819Z",
+ "WhenOpened": "2025-08-01T05:27:49.469Z",
"EditorCaption": ""
- },
- {
- "$type": "Document",
- "DocumentIndex": 3,
- "Title": "VerbPropertiesExplosiveBeam.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\VerbPropertiesExplosiveBeam.cs",
- "RelativeDocumentMoniker": "Verb\\VerbPropertiesExplosiveBeam.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\VerbPropertiesExplosiveBeam.cs",
- "RelativeToolTip": "Verb\\VerbPropertiesExplosiveBeam.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T17:16:20.591Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 10,
- "Title": "Verb_ShootBeamExplosive.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Verb_ShootBeamExplosive.cs",
- "RelativeDocumentMoniker": "Verb\\Verb_ShootBeamExplosive.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\Verb\\Verb_ShootBeamExplosive.cs",
- "RelativeToolTip": "Verb\\Verb_ShootBeamExplosive.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwYAAAAaAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T17:12:13.033Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 8,
- "Title": "Effect.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Effect.cs",
- "RelativeDocumentMoniker": "EventSystem\\Effect.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Effect.cs",
- "RelativeToolTip": "EventSystem\\Effect.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAAAAACICAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T16:05:42.638Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 6,
- "Title": "CompOpenCustomUI.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CompOpenCustomUI.cs",
- "RelativeDocumentMoniker": "EventSystem\\CompOpenCustomUI.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CompOpenCustomUI.cs",
- "RelativeToolTip": "EventSystem\\CompOpenCustomUI.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-31T07:40:45.671Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 4,
- "Title": "Dialog_CustomDisplay.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs",
- "RelativeDocumentMoniker": "EventSystem\\Dialog_CustomDisplay.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Dialog_CustomDisplay.cs",
- "RelativeToolTip": "EventSystem\\Dialog_CustomDisplay.cs",
- "ViewState": "AQIAAO8AAAAAAAAAAAAiwAAAAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-27T10:59:13.84Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 7,
- "Title": "DebugActions.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs",
- "RelativeDocumentMoniker": "EventSystem\\DebugActions.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\DebugActions.cs",
- "RelativeToolTip": "EventSystem\\DebugActions.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvxoAAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-27T10:59:11.817Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 9,
- "Title": "CustomUIDef.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs",
- "RelativeDocumentMoniker": "EventSystem\\CustomUIDef.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\CustomUIDef.cs",
- "RelativeToolTip": "EventSystem\\CustomUIDef.cs",
- "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-27T10:59:01.929Z"
- },
- {
- "$type": "Document",
- "DocumentIndex": 5,
- "Title": "Condition.cs",
- "DocumentMoniker": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs",
- "RelativeDocumentMoniker": "EventSystem\\Condition.cs",
- "ToolTip": "C:\\Steam\\steamapps\\common\\RimWorld\\Mods\\3516260226\\Source\\WulaFallenEmpire\\EventSystem\\Condition.cs",
- "RelativeToolTip": "EventSystem\\Condition.cs",
- "ViewState": "AQIAAAAAAAAAAAAAAADwvwAAAAAAAAAA",
- "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
- "WhenOpened": "2025-07-27T10:50:26.799Z"
}
]
}
diff --git a/Source/WulaFallenEmpire/TimedExplosion.cs b/Source/WulaFallenEmpire/TimedExplosion.cs
new file mode 100644
index 00000000..0efca5ec
--- /dev/null
+++ b/Source/WulaFallenEmpire/TimedExplosion.cs
@@ -0,0 +1,244 @@
+using RimWorld;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using Verse;
+using Verse.Noise;
+
+namespace WulaFallenEmpire
+{
+ public class HediffComp_TimedExplosion : HediffComp
+ {
+ // 倒计时相关字段
+ public int ticksToDisappear;
+ public int disappearsAfterTicks;
+ public int seed;
+
+ // 配置属性快捷访问
+ public HediffCompProperties_TimedExplosion Props =>
+ (HediffCompProperties_TimedExplosion)props;
+
+ // 消失判定属性
+ public override bool CompShouldRemove
+ {
+ get
+ {
+ if (ticksToDisappear > 0) return false;
+ if (Props.requiredMentalState != null)
+ {
+ return parent.pawn.MentalStateDef != Props.requiredMentalState;
+ }
+ return true;
+ }
+ }
+
+ // 进度计算
+ public float Progress =>
+ 1f - (float)ticksToDisappear / Mathf.Max(1, disappearsAfterTicks);
+
+ public int EffectiveTicksToDisappear => ticksToDisappear / TicksLostPerTick;
+
+ public float NoisyProgress => AddNoiseToProgress(Progress, seed);
+
+ public virtual int TicksLostPerTick => 1;
+
+ public override string CompLabelInBracketsExtra
+ {
+ get
+ {
+ if (Props.showRemainingTime)
+ {
+ if (EffectiveTicksToDisappear < 2500)
+ {
+ return EffectiveTicksToDisappear.ToStringSecondsFromTicks("F0");
+ }
+ return EffectiveTicksToDisappear.ToStringTicksToPeriod(allowSeconds: true, shortForm: true, canUseDecimals: true, allowYears: true, Props.canUseDecimalsShortForm);
+ }
+ return base.CompLabelInBracketsExtra;
+ }
+ }
+
+ private static float AddNoiseToProgress(float progress, int seed)
+ {
+ float num = (float)Perlin.GetValue(progress, 0.0, 0.0, 9.0, seed);
+ float num2 = 0.25f * (1f - progress);
+ return Mathf.Clamp01(progress + num2 * num);
+ }
+
+ // 初始化
+ public override void CompPostMake()
+ {
+ base.CompPostMake();
+ disappearsAfterTicks = Props.disappearsAfterTicks.RandomInRange;
+ seed = Rand.Int;
+ ticksToDisappear = disappearsAfterTicks;
+ }
+
+ // 每帧更新
+ public override void CompPostTick(ref float severityAdjustment)
+ {
+ ticksToDisappear--;
+ if (CompShouldRemove)
+ {
+ parent.pawn.health.RemoveHediff(parent);
+ }
+ }
+
+ // 移除后处理
+ public override void CompPostPostRemoved()
+ {
+ base.CompPostPostRemoved();
+
+ // 处理新鲜伤口状态
+ if (!Props.leaveFreshWounds && parent.Part != null)
+ {
+ foreach (BodyPartRecord part in parent.Part.GetPartAndAllChildParts())
+ {
+ Hediff_MissingPart hediff = parent.pawn.health.hediffSet.GetMissingPartFor(part) as Hediff_MissingPart;
+ if (hediff != null)
+ {
+ hediff.IsFresh = false;
+ }
+ }
+ }
+
+ // 触发爆炸逻辑
+ if (ShouldTriggerExplosion())
+ {
+ TriggerExplosion();
+ DestroyGearIfNeeded();
+ }
+
+ // 发送消息通知
+ if (!Props.messageOnDisappear.NullOrEmpty() && PawnUtility.ShouldSendNotificationAbout(parent.pawn))
+ {
+ Messages.Message(
+ Props.messageOnDisappear.Formatted(parent.pawn.Named("PAWN")),
+ parent.pawn,
+ MessageTypeDefOf.NeutralEvent
+ );
+ }
+
+ // 发送信件通知
+ if (!Props.letterTextOnDisappear.NullOrEmpty() &&
+ !Props.letterLabelOnDisappear.NullOrEmpty() &&
+ PawnUtility.ShouldSendNotificationAbout(parent.pawn))
+ {
+ Find.LetterStack.ReceiveLetter(
+ Props.letterLabelOnDisappear.Formatted(parent.pawn.Named("PAWN")),
+ Props.letterTextOnDisappear.Formatted(parent.pawn.Named("PAWN")),
+ LetterDefOf.NegativeEvent,
+ parent.pawn
+ );
+ }
+ }
+
+ // 爆炸条件检查
+ private bool ShouldTriggerExplosion()
+ {
+ return parent.pawn.Spawned &&
+ Props.explosionRadius > 0.01f &&
+ Props.damageDef != null &&
+ parent.pawn.Map != null;
+ }
+
+ // 执行爆炸
+ private void TriggerExplosion()
+ {
+ GenExplosion.DoExplosion(
+ center: parent.pawn.Position,
+ map: parent.pawn.Map,
+ radius: Props.explosionRadius,
+ damType: Props.damageDef,
+ instigator: parent.pawn,
+ damAmount: Props.damageAmount,
+ armorPenetration: Props.armorPenetration,
+ explosionSound: Props.soundDef,
+ weapon: null,
+ projectile: null,
+ intendedTarget: null,
+ postExplosionSpawnThingDef: Props.postExplosionSpawnThingDef,
+ postExplosionSpawnChance: Props.postExplosionSpawnChance,
+ postExplosionSpawnThingCount: Props.postExplosionSpawnThingCount,
+ postExplosionGasType: null,
+ applyDamageToExplosionCellsNeighbors: false,
+ chanceToStartFire: Props.chanceToStartFire,
+ damageFalloff: Props.damageFalloff,
+ direction: null,
+ ignoredThings: new List { parent.pawn }
+ );
+ }
+
+ // 装备销毁
+ private void DestroyGearIfNeeded()
+ {
+ if (!Props.destroyGear) return;
+
+ if (parent.pawn.equipment != null)
+ {
+ parent.pawn.equipment.DestroyAllEquipment(DestroyMode.Vanish);
+ }
+ if (parent.pawn.apparel != null)
+ {
+ parent.pawn.apparel.DestroyAll(DestroyMode.Vanish);
+ }
+ }
+
+ // 数据持久化
+ public override void CompExposeData()
+ {
+ Scribe_Values.Look(ref ticksToDisappear, "ticksToDisappear", 0);
+ Scribe_Values.Look(ref disappearsAfterTicks, "disappearsAfterTicks", 0);
+ Scribe_Values.Look(ref seed, "seed", 0);
+ }
+
+ // 调试信息
+ public override string CompDebugString()
+ {
+ return $"倒计时: {ticksToDisappear}\n爆炸半径: {Props.explosionRadius}";
+ }
+ }
+
+ public class HediffCompProperties_TimedExplosion : HediffCompProperties
+ {
+ [Header("消失设置")]
+ public IntRange disappearsAfterTicks = new IntRange(600, 1200);
+ public bool showRemainingTime = true;
+ public bool canUseDecimalsShortForm;
+ public MentalStateDef requiredMentalState;
+ public bool leaveFreshWounds = true;
+
+ [Header("爆炸设置")]
+ public float explosionRadius = 3f;
+ public DamageDef damageDef;
+ public int damageAmount = 20;
+ public float armorPenetration;
+ public SoundDef soundDef;
+ public float chanceToStartFire;
+ public bool damageFalloff = true;
+
+ [Header("后续效果")]
+ public bool destroyGear;
+ public GasType gasType;
+ public ThingDef postExplosionSpawnThingDef;
+ public float postExplosionSpawnChance;
+ public int postExplosionSpawnThingCount = 1;
+
+ [Header("通知设置")]
+ [MustTranslate]
+ public string messageOnDisappear;
+ [MustTranslate]
+ public string letterLabelOnDisappear;
+ [MustTranslate]
+ public string letterTextOnDisappear;
+ public bool sendLetterOnDisappearIfDead = true;
+
+ public HediffCompProperties_TimedExplosion()
+ {
+ compClass = typeof(HediffComp_TimedExplosion);
+ }
+ }
+}
diff --git a/Source/WulaFallenEmpire/Verb/ExplosionParameters.cs b/Source/WulaFallenEmpire/Verb/ExplosionParameters.cs
new file mode 100644
index 00000000..ca857e6a
--- /dev/null
+++ b/Source/WulaFallenEmpire/Verb/ExplosionParameters.cs
@@ -0,0 +1,26 @@
+using Verse;
+using RimWorld;
+using System.Collections.Generic;
+
+namespace ConfigurableHellsphereCannon
+{
+ public class ExplosionParameters : DefModExtension
+ {
+ public float explosionRadius = 4.9f;
+ public SoundDef explosionSound = null;
+ public ThingDef postExplosionSpawnThingDef = null;
+ public float postExplosionSpawnChance = 0f;
+ public int postExplosionSpawnThingCount = 1;
+ public GasType? postExplosionGasType = null;
+ public bool applyDamageToExplosionCellsNeighbors = false;
+ public ThingDef preExplosionSpawnThingDef = null;
+ public float preExplosionSpawnChance = 0f;
+ public int preExplosionSpawnThingCount = 1;
+ public bool damageFalloff = false;
+ public ThingDef filth = null;
+ public bool doVisualEffects = true;
+ public float screenShakeFactor = 1f;
+ public bool doSoundEffects = true;
+ public bool doHitEffects = true;
+ }
+}
\ No newline at end of file
diff --git a/Source/WulaFallenEmpire/Verb/Projectile_ConfigurableHellsphereCannon.cs b/Source/WulaFallenEmpire/Verb/Projectile_ConfigurableHellsphereCannon.cs
new file mode 100644
index 00000000..d346985b
--- /dev/null
+++ b/Source/WulaFallenEmpire/Verb/Projectile_ConfigurableHellsphereCannon.cs
@@ -0,0 +1,93 @@
+using Verse;
+using RimWorld;
+using System.Collections.Generic;
+
+namespace WulaFallenEmpire
+{
+ ///
+ /// ڶXML ڵõԶԡ
+ ///
+ public class ProjectileProperties_ConfigurableHellsphereCannon : ProjectileProperties
+ {
+ // --- ֣ explosionChanceToStartFire ---
+ // ʹ 'new' ؼز滻ֶͬ
+ public new float explosionRadius = 4.9f;
+ public new float explosionChanceToStartFire = 0f; // <--- УʹXML
+ public new bool applyDamageToExplosionCellsNeighbors = false;
+ public new ThingDef preExplosionSpawnThingDef = null;
+ public new float preExplosionSpawnChance = 0f;
+ public new int preExplosionSpawnThingCount = 1;
+ public new ThingDef postExplosionSpawnThingDef = null;
+ public new float postExplosionSpawnChance = 0f;
+ public new int postExplosionSpawnThingCount = 1;
+ public new GasType? postExplosionGasType = null;
+ public new float screenShakeFactor = 1f;
+ public new ThingDef postExplosionSpawnThingDefWater = null;
+ public new ThingDef postExplosionSpawnSingleThingDef = null;
+ public new ThingDef preExplosionSpawnSingleThingDef = null;
+
+ // ЩӵȫֶΣҪ 'new' ؼ
+ public SoundDef explosionSound = null;
+ public bool damageFalloff = false;
+ public bool doVisualEffects = true;
+ public bool doSoundEffects = true;
+ public float? postExplosionGasRadiusOverride = null;
+ public int postExplosionGasAmount = 255;
+ public float? direction = null;
+ public FloatRange? affectedAngle = null;
+ public float excludeRadius = 0f;
+ public SimpleCurve flammabilityChanceCurve = null;
+ }
+
+ ///
+ /// Ͷĺ࣬XMLе ָ
+ ///
+ public class Projectile_ConfigurableHellsphereCannon : Projectile
+ {
+ public ProjectileProperties_ConfigurableHellsphereCannon Props => (ProjectileProperties_ConfigurableHellsphereCannon)def.projectile;
+
+ protected override void Impact(Thing hitThing, bool blockedByShield = false)
+ {
+ Map map = base.Map;
+ base.Impact(hitThing, blockedByShield);
+
+ GenExplosion.DoExplosion(
+ center: base.Position,
+ map: map,
+ radius: Props.explosionRadius,
+ damType: base.DamageDef,
+ instigator: launcher,
+ damAmount: DamageAmount,
+ armorPenetration: ArmorPenetration,
+ explosionSound: Props.explosionSound,
+ weapon: equipmentDef,
+ projectile: def,
+ intendedTarget: intendedTarget.Thing,
+ postExplosionSpawnThingDef: Props.postExplosionSpawnThingDef,
+ postExplosionSpawnChance: Props.postExplosionSpawnChance,
+ postExplosionSpawnThingCount: Props.postExplosionSpawnThingCount,
+ postExplosionGasType: Props.postExplosionGasType,
+ postExplosionGasRadiusOverride: Props.postExplosionGasRadiusOverride,
+ postExplosionGasAmount: Props.postExplosionGasAmount,
+ applyDamageToExplosionCellsNeighbors: Props.applyDamageToExplosionCellsNeighbors,
+ preExplosionSpawnThingDef: Props.preExplosionSpawnThingDef,
+ preExplosionSpawnChance: Props.preExplosionSpawnChance,
+ preExplosionSpawnThingCount: Props.preExplosionSpawnThingCount,
+ // --- ֣ʹȷֶ ---
+ chanceToStartFire: Props.explosionChanceToStartFire, // <--- ˴
+ damageFalloff: Props.damageFalloff,
+ direction: Props.direction,
+ affectedAngle: Props.affectedAngle,
+ doVisualEffects: Props.doVisualEffects,
+ propagationSpeed: base.DamageDef.expolosionPropagationSpeed,
+ excludeRadius: Props.excludeRadius,
+ doSoundEffects: Props.doSoundEffects,
+ postExplosionSpawnThingDefWater: Props.postExplosionSpawnThingDefWater,
+ screenShakeFactor: Props.screenShakeFactor,
+ flammabilityChanceCurve: Props.flammabilityChanceCurve,
+ postExplosionSpawnSingleThingDef: Props.postExplosionSpawnSingleThingDef,
+ preExplosionSpawnSingleThingDef: Props.preExplosionSpawnSingleThingDef
+ );
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
index 1237c021..589cf25e 100644
--- a/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
+++ b/Source/WulaFallenEmpire/WulaFallenEmpire.csproj
@@ -116,6 +116,8 @@
+
+