123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- class HeavyMetalMdfr : ModifierBase
- {
- static const float WATER_LOSS_HEAVYMETAL_MIN = 0.3;
- static const float WATER_LOSS_HEAVYMETAL_MAX = 0.8;
-
- static const float HEALTH_LOSS_HEAVYMETAL_MIN = 0.03;
- static const float HEALTH_LOSS_HEAVYMETAL_MAX = 0.05;
-
- static const int SYMPTOMFALLOFF_THRESHOLD1 = 200;
- static const int SYMPTOMFALLOFF_THRESHOLD2 = 300;
- static const int SYMPTOMFALLOFF_THRESHOLD3 = 400;
-
- protected float m_NextEvent;
- protected float m_Time;
-
- protected float m_DeafnessTime;
- protected bool m_IsDeaf;
-
- override void Init()
- {
- m_ID = eModifiers.MDF_HEAVYMETAL1;
- m_TrackActivatedTime = false;
- m_AnalyticsStatsEnabled = true;
- m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
- m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
- }
-
- override protected void OnActivate(PlayerBase player)
- {
- player.IncreaseDiseaseCount();
- }
- override protected void OnDeactivate(PlayerBase player)
- {
- player.DecreaseDiseaseCount();
- }
- }
- class HeavyMetalPhase1Mdfr : HeavyMetalMdfr
- {
- static const int AGENT_THRESHOLD_ACTIVATE = 1;
- static const int AGENT_THRESHOLD_DEACTIVATE = 200;
-
- static const int SHIVER_EVENT_INTERVAL_MIN = 20;
- static const int SHIVER_EVENT_INTERVAL_MAX = 40;
- override string GetDebugText()
- {
- return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
- }
-
- override protected bool ActivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected bool DeactivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE || player.GetSingleAgentCount(eAgents.HEAVYMETAL) > AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected void OnTick(PlayerBase player, float deltaT)
- {
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
- {
- float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX * Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
- player.GetStatWater().Add(-waterLoss);
- }
-
- m_Time += deltaT;
-
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD2)
- {
- player.m_AgentPool.AddAgent(eAgents.HEAVYMETAL, -0.5);
- }
-
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
- {
- if ( m_Time >= m_NextEvent )
- {
- player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HAND_SHIVER);
- m_Time = 0;
-
- m_NextEvent = Math.RandomFloatInclusive(SHIVER_EVENT_INTERVAL_MIN, SHIVER_EVENT_INTERVAL_MAX);
- }
- }
- }
- }
- class HeavyMetalPhase2Mdfr : HeavyMetalMdfr
- {
- static const int AGENT_THRESHOLD_ACTIVATE = 200;
- static const int AGENT_THRESHOLD_DEACTIVATE = 400;
-
- static const int PAIN_EVENT_INTERVAL_MIN = 20;
- static const int PAIN_EVENT_INTERVAL_MAX = 40;
-
- static const int DEAFNESS_INTERVAL = 3;
-
- override void Init()
- {
- super.Init();
- m_ID = eModifiers.MDF_HEAVYMETAL2;
- }
-
- override string GetDebugText()
- {
- return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
- }
-
- override protected bool ActivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected bool DeactivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE || player.GetSingleAgentCount(eAgents.HEAVYMETAL) > AGENT_THRESHOLD_DEACTIVATE);
- }
-
- override protected void OnTick(PlayerBase player, float deltaT)
- {
- m_Time += deltaT;
-
- if (m_IsDeaf)
- {
- m_DeafnessTime += deltaT;
- }
-
- if (m_Time >= m_NextEvent)
- {
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= SYMPTOMFALLOFF_THRESHOLD1)
- {
- player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_LIGHT);
- m_Time = 0;
-
- m_NextEvent = Math.RandomFloatInclusive(PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX);
- }
- }
-
- float chanceOfDeafness = player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL);
- if (Math.RandomFloat01() < chanceOfDeafness / Math.RandomInt(5, 10))
- {
- player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
- m_Time = 0;
- m_DeafnessTime = 0;
- m_IsDeaf = true;
-
- m_NextEvent = Math.RandomFloatInclusive(PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX);
- }
-
- if (m_IsDeaf && m_DeafnessTime > DEAFNESS_INTERVAL + player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL)*0.6)
- {
- player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
- m_IsDeaf = false;
- }
-
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3 && eAgents.HEAVYMETAL >= SYMPTOMFALLOFF_THRESHOLD1)
- {
- float waterLoss = (deltaT * (WATER_LOSS_HEAVYMETAL_MAX * Math.Max(WATER_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
- player.GetStatWater().Add(-waterLoss);
- }
-
- if (player.GetSingleAgentCount(eAgents.HEAVYMETAL) <= SYMPTOMFALLOFF_THRESHOLD3)
- {
- player.m_AgentPool.AddAgent(eAgents.HEAVYMETAL, -0.5);
- }
- }
- }
- class HeavyMetalPhase3Mdfr : HeavyMetalMdfr
- {
- static const int AGENT_THRESHOLD_ACTIVATE = 400;
- static const int AGENT_THRESHOLD_DEACTIVATE = 600;
-
- static const int VOMIT_EVENT_INTERVAL_MIN = 180;
- static const int VOMIT_EVENT_INTERVAL_MAX = 360;
- override void Init()
- {
- super.Init();
- m_ID = eModifiers.MDF_HEAVYMETAL3;
- }
-
- override string GetDebugText()
- {
- return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
- }
-
- override protected bool ActivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.HEAVYMETAL) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected bool DeactivateCondition(PlayerBase player)
- {
- return player.GetSingleAgentCount(eAgents.HEAVYMETAL) < AGENT_THRESHOLD_ACTIVATE;
- }
-
- override protected void OnActivate(PlayerBase player)
- {
- super.OnActivate(player);
-
- player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
- player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
- }
-
- override protected void OnDeactivate(PlayerBase player)
- {
- super.OnDeactivate(player);
-
- player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_DEAFNESS_COMPLETE);
- player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_HMP_SEVERE);
- }
- override protected void OnTick(PlayerBase player, float deltaT)
- {
- float healthLoss = (deltaT * (HEALTH_LOSS_HEAVYMETAL_MAX * Math.Max(HEALTH_LOSS_HEAVYMETAL_MIN, player.GetSingleAgentCountNormalized(eAgents.HEAVYMETAL))));
- player.AddHealth(-healthLoss);
-
- m_Time += deltaT;
-
- if (m_Time >= m_NextEvent)
- {
- SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
- if (symptom)
- {
- CachedObjectsParams.PARAM1_FLOAT.param1 = 30.0; //percentage of stomach
- symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
- }
-
- m_Time = 0;
- m_NextEvent = Math.RandomFloatInclusive( VOMIT_EVENT_INTERVAL_MIN, VOMIT_EVENT_INTERVAL_MAX );
- }
- }
- }
|