diff --git a/Assemblies/ZombieLand.dll b/Assemblies/ZombieLand.dll
index 0788ea8c..1b875f88 100755
Binary files a/Assemblies/ZombieLand.dll and b/Assemblies/ZombieLand.dll differ
diff --git a/Languages/ChineseSimplified/Keyed/Text.xml b/Languages/ChineseSimplified/Keyed/Text.xml
index 59962bf9..e64dc564 100644
--- a/Languages/ChineseSimplified/Keyed/Text.xml
+++ b/Languages/ChineseSimplified/Keyed/Text.xml
@@ -69,6 +69,12 @@
正常
较高
群体过于庞大时丧尸会变得愤怒。
+ 愤怒程度
+ 非常低的水平
+ 低水平
+ 正常水平
+ 高水平
+ 非常高的水平
丧尸的体质
丧尸会恢复伤势
diff --git a/Languages/ChineseTraditional/Keyed/Text.xml b/Languages/ChineseTraditional/Keyed/Text.xml
index d28ab6bf..159f11f4 100644
--- a/Languages/ChineseTraditional/Keyed/Text.xml
+++ b/Languages/ChineseTraditional/Keyed/Text.xml
@@ -69,6 +69,12 @@
正常
較高
群體過於龐大時殭屍會變得憤怒。
+ 憤怒程度
+ 非常低的水平
+ 低水平
+ 正常水平
+ 高水平
+ 非常高的水平
殭屍的體質
殭屍會恢復傷勢
diff --git a/Languages/English/Keyed/Help.xml b/Languages/English/Keyed/Help.xml
index 2637321f..aa82adad 100644
--- a/Languages/English/Keyed/Help.xml
+++ b/Languages/English/Keyed/Help.xml
@@ -86,6 +86,7 @@
Zombie senses reach a bit longer
Zombies are very sensitive and sense you and your trails over many cells
To simulate group behaviour, zombies can become enraged if a tight group of zombies gets too large. Raging zombies have red eyes and start walking towards your colonists. They will be stronger and faster than normal. Try preventing zombie hordes from becoming to large or stuck at places on the map to avoid raging zombies.
+ This level controls the group size that triggers raging zombies. High levels are more dangerous and make zombies trigger more easily.
diff --git a/Languages/English/Keyed/Text.xml b/Languages/English/Keyed/Text.xml
index 7ca15a06..a5916d21 100644
--- a/Languages/English/Keyed/Text.xml
+++ b/Languages/English/Keyed/Text.xml
@@ -73,6 +73,12 @@
Normal
Elevated
Zombies rage if a group gets too large
+ Rage level
+ Very low
+ Low
+ Normal
+ High
+ Very high
Zombie health
Zombies recover from injuries
diff --git a/Languages/French/Keyed/Text.xml b/Languages/French/Keyed/Text.xml
index 82e8b0a7..1bc1e7d4 100644
--- a/Languages/French/Keyed/Text.xml
+++ b/Languages/French/Keyed/Text.xml
@@ -69,6 +69,12 @@
Normal
Elevé
Les zombies s’enragent si un groupe devient trop grand
+ Niveau de rage
+ Très bas
+ Faible
+ Normal
+ Haut
+ Très haut
Vitalités des zombies
Les zombies se remettent de leurs blessures
diff --git a/Languages/German/Keyed/Text.xml b/Languages/German/Keyed/Text.xml
index 8d5d7dd4..d5ca801d 100644
--- a/Languages/German/Keyed/Text.xml
+++ b/Languages/German/Keyed/Text.xml
@@ -69,6 +69,12 @@
Normal
Empfindlich
Zombies in zu grossen Gruppen werden rasend
+ Raserei
+ Sehr niedrig
+ Niedrig
+ Normal
+ Hoch
+ Sehr hoch
Zombiegesundheit
Zombies erholen sich von Verletzungen
diff --git a/Languages/Russian/Keyed/Text.xml b/Languages/Russian/Keyed/Text.xml
index 5d3dfabc..f6a406a2 100644
--- a/Languages/Russian/Keyed/Text.xml
+++ b/Languages/Russian/Keyed/Text.xml
@@ -69,6 +69,12 @@
Нормальные
Агресивные
Zombies ярости, если толпа становится слишком большой
+ Уровень ярости
+ Очень низкий
+ Низкий уровень
+ Нормальный
+ Высокий
+ Очень высокий
Стойкость зомби
Зомби восстанавливаются после травм
diff --git a/Languages/Turkish/Keyed/Text.xml b/Languages/Turkish/Keyed/Text.xml
index 25ac12c5..13827e20 100644
--- a/Languages/Turkish/Keyed/Text.xml
+++ b/Languages/Turkish/Keyed/Text.xml
@@ -69,6 +69,12 @@
Normal
Yükseltilmiş
Bir grup çok büyük alırsa Zombiler öfke
+ Öfke seviyesi
+ Çok düşük
+ Düşük
+ Normal
+ Yüksek
+ Çok yüksek
Zombi sağlığı
Zombiler yaralanmaları kurtarmak
diff --git a/Source/Dialogs.cs b/Source/Dialogs.cs
index 84a6843f..74cf24d3 100644
--- a/Source/Dialogs.cs
+++ b/Source/Dialogs.cs
@@ -297,19 +297,17 @@ public static void Dialog_FloatSlider(this Listing_Standard list, string labelId
value = Widgets.HorizontalSlider(srect, value, min, max, false, null, labelId.SafeTranslate(), valstr, -1f);
}
- public static void Dialog_IntSlider(this Listing_Standard list, string labelId, string format, ref int value, int min, int max)
+ public static void Dialog_IntSlider(this Listing_Standard list, string labelId, Func format, ref int value, int min, int max)
{
list.Help(labelId, 32f);
list.Gap(12f);
- var valstr = string.Format("{0:" + format + "}", value);
-
var srect = list.GetRect(24f);
srect.xMin += inset;
srect.xMax -= inset;
- value = (int)(0.5f + Widgets.HorizontalSlider(srect, value, min, max, false, null, labelId.SafeTranslate(), valstr, -1f));
+ value = (int)(0.5f + Widgets.HorizontalSlider(srect, value, min, max, false, null, labelId.SafeTranslate(), format(value), -1f));
}
public static void Dialog_TimeSlider(this Listing_Standard list, string labelId, ref int value, int min, int max, bool fullDaysOnly = false)
@@ -344,7 +342,7 @@ public static void DoWindowContentsInternal(ref SettingsGroup settings, Rect inR
var secondColumnWidth = inRect.width - Listing.ColumnSpacing - firstColumnWidth;
var outerRect = new Rect(inRect.x, inRect.y, firstColumnWidth, inRect.height);
- var innerRect = new Rect(0f, 0f, firstColumnWidth - 24f, inRect.height * 4.6f);
+ var innerRect = new Rect(0f, 0f, firstColumnWidth - 24f, inRect.height * 4.7f);
Widgets.BeginScrollView(outerRect, ref scrollPosition, innerRect, true);
currentHelpItem = null;
@@ -384,7 +382,11 @@ public static void DoWindowContentsInternal(ref SettingsGroup settings, Rect inR
// Senses
list.Dialog_Enum("ZombieInstinctTitle", ref settings.zombieInstinct);
list.Dialog_Checkbox("RagingZombies", ref settings.ragingZombies);
- list.Gap(20f);
+ var rageLevelNames = new string[] { "RageLevelVeryLow", "RageLevelLow", "RageLevelNormal", "RageLevelHigh", "RageLevelVeryHigh" };
+ list.Gap(4f);
+ if (settings.ragingZombies)
+ list.Dialog_IntSlider("RageLevel", level => rageLevelNames[level - 1].Translate(), ref settings.zombieRageLevel, 1, 5);
+ list.Gap(16f);
// Health
list.Dialog_Label("ZombieHealthTitle");
@@ -462,7 +464,7 @@ public static void DoWindowContentsInternal(ref SettingsGroup settings, Rect inR
// Infections
list.Dialog_Label("ZombieSerum");
list.Gap(8f);
- list.Dialog_IntSlider("CorpsesExtractAmount", "0", ref settings.corpsesExtractAmount, 1, 10);
+ list.Dialog_IntSlider("CorpsesExtractAmount", amount => "" + amount, ref settings.corpsesExtractAmount, 1, 10);
list.Dialog_TimeSlider("CorpsesDaysToDessicated", ref settings.corpsesHoursToDessicated, 1, 120);
list.Gap(18f);
diff --git a/Source/JobDriver_Stumble.cs b/Source/JobDriver_Stumble.cs
index 4df7fb35..d68a5579 100644
--- a/Source/JobDriver_Stumble.cs
+++ b/Source/JobDriver_Stumble.cs
@@ -63,6 +63,8 @@ void TickAction()
// --------------------------------------------------
*/
+ ZombieStateHandler.CheckEndRage(zombie);
+
if (this.ShouldDie(zombie))
return;
diff --git a/Source/Patches.cs b/Source/Patches.cs
index e2858f84..5396d4bb 100755
--- a/Source/Patches.cs
+++ b/Source/Patches.cs
@@ -54,7 +54,7 @@ static Patches()
static readonly Dictionary