3 static const float WATER_LOSS_HEAVYMETAL_MIN = 0.3;
4 static const float WATER_LOSS_HEAVYMETAL_MAX = 0.8;
6 static const float HEALTH_LOSS_HEAVYMETAL_MIN = 0.03;
7 static const float HEALTH_LOSS_HEAVYMETAL_MAX = 0.05;
9 static const int SYMPTOMFALLOFF_THRESHOLD1 = 200;
10 static const int SYMPTOMFALLOFF_THRESHOLD2 = 300;
11 static const int SYMPTOMFALLOFF_THRESHOLD3 = 400;
31 player.IncreaseDiseaseCount();
36 player.DecreaseDiseaseCount();
43 static const int AGENT_THRESHOLD_DEACTIVATE = 200;
45 static const int SHIVER_EVENT_INTERVAL_MIN = 20;
46 static const int SHIVER_EVENT_INTERVAL_MAX = 40;
63 override protected void OnTick(
PlayerBase player,
float deltaT)
65 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
67 float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX *
Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(
eAgents.HEAVYMETAL))));
68 player.GetStatWater().Add(-waterLoss);
73 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD2)
75 player.m_AgentPool.AddAgent(
eAgents.HEAVYMETAL, -0.5);
78 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
82 player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HAND_SHIVER);
85 m_NextEvent =
Math.RandomFloatInclusive(SHIVER_EVENT_INTERVAL_MIN, SHIVER_EVENT_INTERVAL_MAX);
93 static const int AGENT_THRESHOLD_ACTIVATE = 200;
94 static const int AGENT_THRESHOLD_DEACTIVATE = 400;
96 static const int PAIN_EVENT_INTERVAL_MIN = 20;
97 static const int PAIN_EVENT_INTERVAL_MAX = 40;
99 static const int DEAFNESS_INTERVAL = 3;
108 override string GetDebugText()
110 return (
"Activate threshold: "+
AGENT_THRESHOLD_ACTIVATE +
"| " +
"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
134 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) >= SYMPTOMFALLOFF_THRESHOLD1)
136 player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_LIGHT);
139 m_NextEvent =
Math.RandomFloatInclusive(PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX);
143 float chanceOfDeafness = player.GetSingleAgentCountNormalized(
eAgents.HEAVYMETAL);
144 if (
Math.RandomFloat01() < chanceOfDeafness /
Math.RandomInt(5, 10))
146 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
151 m_NextEvent =
Math.RandomFloatInclusive(PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX);
156 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
160 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3 &&
eAgents.HEAVYMETAL >= SYMPTOMFALLOFF_THRESHOLD1)
162 float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX *
Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(
eAgents.HEAVYMETAL))));
163 player.GetStatWater().Add(-waterLoss);
166 if (player.GetSingleAgentCount(
eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
168 player.m_AgentPool.AddAgent(
eAgents.HEAVYMETAL, -0.5);
176 static const int AGENT_THRESHOLD_DEACTIVATE = 600;
178 static const int VOMIT_EVENT_INTERVAL_MIN = 180;
179 static const int VOMIT_EVENT_INTERVAL_MAX = 360;
190 return (
"Activate threshold: "+
AGENT_THRESHOLD_ACTIVATE +
"| " +
"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
207 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
208 player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
213 super.OnDeactivate(player);
215 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
216 player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
219 override protected void OnTick(
PlayerBase player,
float deltaT)
221 float healthLoss = (deltaT * (HEALTH_LOSS_HEAVYMETAL_MAX *
Math.Max(HEALTH_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(
eAgents.HEAVYMETAL))));
222 player.AddHealth(-healthLoss);
228 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
236 m_NextEvent =
Math.RandomFloatInclusive( VOMIT_EVENT_INTERVAL_MIN, VOMIT_EVENT_INTERVAL_MAX );
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
bool m_TrackActivatedTime
overall time this modifier was active
bool ActivateCondition(PlayerBase player)
bool DeactivateCondition(PlayerBase player)
bool m_AnalyticsStatsEnabled
float m_TickIntervalActive
float m_TickIntervalInactive
const int DEFAULT_TICK_TIME_INACTIVE
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE