// Check to see if the surivor is wounded/dies return false for failing the mission, true for continuing public bool WoundCheck(Shelter s, Report r, int successChance, string tasking, string task, ref wound sWound) { sWound = wound.Uninjured; bool invulnerable = Health > 1; //Chance of getting wounded, if the wound is severe enough, do not continue scouting if (successChance + Random.Range(0, 10) < 6) { sWound = (wound)Random.Range(0, (int)wound.Count); switch (sWound) { case wound.Uninjured: break; case wound.Minor: Health -= Random.Range(0, 1); //1 being a papercut break; case wound.Moderate: Health -= Random.Range(1, 3); //1 being a papercut break; case wound.Severe: Health -= Random.Range(3, 5); //1 being a papercut break; case wound.Grievous: Health -= Random.Range(5, 7); //1 being a papercut break; } } if (Health < 0 && false == invulnerable) { r.SetMessage(_name + " sustained a " + sWound.ToString() + " wound " + tasking + " and is severely injured."); s.KillSurvivor(this.Name); return(false); } else if (sWound == wound.Severe || sWound == wound.Grievous) { if (invulnerable && Health < 0) { Health = 1; } r.SetMessage(_name + " attempted to " + task + " but wound up sustaining a " + sWound.ToString() + " wound."); return(false); } return(true); }
// =================================================== tasks // scout public ArrayList Scout(Shelter s) { int boost = 0; if (s.ConsumeFood(1)) { boost++; } Report rTemporary = new Report(); int spillover = 0; if (Fatigue < 0) { spillover = Mathf.Abs(Fatigue); } int fatigueModifier = -Fatigue / 10; int proficiency = GetProficiency(task.Scout) + 10 + fatigueModifier; wound sWound = wound.Uninjured; ArrayList NewReps = new ArrayList(); if (WoundCheck(s, rTemporary, proficiency, "scouting", "scout", ref sWound)) { int locationBonus = (int)Mathf.Pow(Random.Range(1.0f, 4.0f) * proficiency, .36f); _gameWorld.AddScoutingBonus(locationBonus); if (sWound == wound.Uninjured) { rTemporary.SetMessage(_name + " successfully scouted and helped to locate a scavenging target."); } else { rTemporary.SetMessage(_name + " sustained a " + sWound.ToString() + " wound while scouting but still helped to locate a scavenging target."); } //Look for enemy camps NewReps = _gameWorld.ScoutForShelters(proficiency + boost); } if (rTemporary.IsInitialized()) { NewReps.Add(rTemporary); } return(NewReps); }