# difficulty.ron

> Difficulty presets a new game offers.

<!-- Generated by `zombye-server --docs`. Do not edit: change the game and generate again. -->

**Difficulty presets a new game offers.** Read by the game's rules: a change here changes how the game plays, and a world remembers the content it was made with.

File: `assets/data/difficulty.ron`

## About this file

Difficulty presets (sim::difficulty): what a new game offers under "World". Easiest first. Every number is a multiplier on the game's own (1 = as shipped) unless it says otherwise; anything left out is 1 (or the game's own).

```text
  id, name, about
  zombies            how many (the population)
  fast_zombies       Some(share 0..1) of them that are fast; None: population.ron's
  zombie_senses      how sharp their eyes and ears are
  zombie_toughness   their hit points
  zombie_accuracy    how often their strikes land
  respawn            Some(true/false): do far regions fill up again; None: population.ron's
  loot, rare_loot    how much containers hold; how often the rare things turn up
  xp                 how fast skills grow
  needs              how fast hunger, thirst and tiredness come
  infection          Off | Survivable | Deadly
  day_minutes        Some(real minutes a game day lasts); None: the game's own (60)
  tuning             any other tuning number, set outright, e.g.
                       tuning: (zombie: Some((memory_secs: 30)), combat: Some((player_hp: 150)))
```

The new-game screen lets the player change zombies, loot, xp, respawn, infection, the day's length and the hour they wake on top of a preset. Names and numbers are ours.


## Fields

The file is one `DifficultyData`.

`difficulty.ron`, checked.

| Field | Type | What it is |
|---|---|---|
| `presets` | `Vec<DifficultyDef>` |  |

### `DifficultyDef`

One preset.

| Field | Type | What it is |
|---|---|---|
| `id` | `String` | Lower-case letters, digits and `_`. |
| `name` | `String` |  |
| `about` | `String` | A line for the new-game screen. |
| `zombies` | `f32` | How many zombies (a multiplier on the population). |
| `fast_zombies` | `Option<f32>` | The share of them that are fast (`None`: the population file's). |
| `zombie_senses` | `f32` | How sharp their eyes and ears are (a multiplier on their alertness). |
| `zombie_toughness` | `f32` | How much it takes to put one down (a multiplier on their hit points). |
| `zombie_accuracy` | `f32` | How often their strikes land. |
| `respawn` | `Option<bool>` | Do far regions fill up again (`None`: as the population file says)? |
| `loot` | `f32` | How much there is to find, and how often the rare things. |
| `rare_loot` | `f32` |  |
| `xp` | `f32` | How fast skills grow. |
| `needs` | `f32` | How fast hunger, thirst and tiredness come. |
| `infection` | `Infection` |  |
| `day_minutes` | `Option<f32>` | Real minutes a game day lasts (`None`: the game's own). |
| `tuning` | `Tunings` | Any other tuning number, set outright (before the multipliers above). |

#### `Infection`

What becomes of someone a zombie's wound infects.

| Value | What it means |
|---|---|
| `Off` | Nobody catches it. |
| `Survivable` | It burns out after the fever. |
| `Deadly` | It ends in death, and the body rises. |

#### `Tunings`

Tuning numbers a preset sets outright. Each is the whole tuning, with what the preset leaves out at its default: `zombie: Some((memory_secs: 30))`.

| Field | Type | What it is |
|---|---|---|
| `zombie` | `Option<crate::ai::ZombieTuning>` |  |
| `combat` | `Option<crate::combat::CombatTuning>` |  |
| `health` | `Option<crate::health::HealthTuning>` |  |
| `needs` | `Option<crate::needs::NeedsTuning>` |  |
| `carry` | `Option<crate::inventory::CarryTuning>` |  |
| `movement` | `Option<crate::players::MoveTuning>` | Speeds and endurance (`crate::players::MoveTuning`). |

##### `ZombieTuning`

Zombie senses and behaviour numbers. Part of `WorldConfig`; serde with defaults for every field, so a data file or sandbox options can override just a few. Distances in metres, times in seconds.

| Field | Type | What it is |
|---|---|---|
| `sight_day` | `f32` | Range dead ahead at a walking, moving player in full daylight / at night. |
| `sight_night` | `f32` | Range dead ahead at a walking, moving player in full daylight / at night. |
| `sight_cone_deg` | `f32` | Half-angle of the full-range cone, and of the wider peripheral cone (degrees). |
| `peripheral_deg` | `f32` | Sight. |
| `peripheral_mult` | `f32` | Range multiplier in the peripheral band. |
| `rear_range` | `f32` | Range behind the zombie (outside the peripheral cone), before the stance multiplier. |
| `sneak_sight_mult` | `f32` | Range multipliers for a sneaking / running player, and for one standing still. |
| `run_sight_mult` | `f32` | Range multipliers for a sneaking / running player, and for one standing still. |
| `still_sight_mult` | `f32` | Range multipliers for a sneaking / running player, and for one standing still. |
| `sure_sight_frac` | `f32` | Within this fraction of the range a check always notices; beyond it the chance per check falls from `notice_chance` to 0 at full range. A wandering zombie that notices someone beyond it only glimpses them: it turns and shuffles over to look (investigates), and chases only if it notices them again (or they come within this fraction). |
| `notice_chance` | `f32` | Within this fraction of the range a check always notices; beyond it the chance per check falls from `notice_chance` to 0 at full range. A wandering zombie that notices someone beyond it only glimpses them: it turns and shuffles over to look (investigates), and chases only if it notices them again (or they come within this fraction). |
| `sight_interval_ticks` | `u8` | Each zombie looks once every this many ticks. |
| `chase_sight_mult` | `f32` | A chaser keeps its own player in view out to this multiple of the range, without luck. |
| `window_sight_mult` | `f32` | Range multiplier when it looks through a window (shut, open or broken): a survivor indoors is hard to make out from the street. |
| `alertness` | `(f32, f32)` | Some zombies are sharper than others: each one's sight range, notice chance and hearing are multiplied by its alertness, from a hash of its id, between these two. Skewed by `alertness_skew` (1 even, higher: most near the low end, a few sharp ones), so the defaults average about 1. |
| `alertness_skew` | `f32` | Some zombies are sharper than others: each one's sight range, notice chance and hearing are multiplied by its alertness, from a hash of its id, between these two. Skewed by `alertness_skew` (1 even, higher: most near the low end, a few sharp ones), so the defaults average about 1. |
| `sneak_noise` | `f32` | Footstep noise radius per tick while moving, by stance. |
| `walk_noise` | `f32` | Hearing. |
| `run_noise` | `f32` | Hearing. |
| `door_noise` | `f32` | A door opening or closing. |
| `groan_noise` | `f32` | A hunting zombie's groan, and the seconds between groans. |
| `groan_min_secs` | `f32` | Hearing. |
| `groan_max_secs` | `f32` | Hearing. |
| `alert_groan_secs` | `f32` | About how soon a zombie groans after first noticing someone. |
| `wall_muffle` | `f32` | Fraction of a sound's radius that carries through walls (no line of sight). |
| `herd_chance` | `f32` | A wanderer choosing where to shuffle next heads back toward the zombies round it (within `herd_radius`) with this chance, when their middle is more than `herd_keep` away, so groups stay groups instead of spreading over the map. |
| `herd_radius` | `f32` | A wanderer choosing where to shuffle next heads back toward the zombies round it (within `herd_radius`) with this chance, when their middle is more than `herd_keep` away, so groups stay groups instead of spreading over the map. |
| `herd_keep` | `f32` | A wanderer choosing where to shuffle next heads back toward the zombies round it (within `herd_radius`) with this chance, when their middle is more than `herd_keep` away, so groups stay groups instead of spreading over the map. |
| `memory_secs` | `f32` | How long a chaser keeps after a player it can't see. |
| `investigate_secs` | `f32` | How long a zombie looks around a sound (or a lost player's last spot), on top of the time it takes to walk to a sound (capped at `max_travel_secs`). |
| `max_travel_secs` | `f32` | How long a zombie looks around a sound (or a lost player's last spot), on top of the time it takes to walk to a sound (capped at `max_travel_secs`). |
| `investigate_speed_mult` | `f32` | Speed multiplier while investigating (of the zombie's own top speed). |
| `wander_speed` | `f32` | Idle shuffle speed. |
| `search_radius` | `f32` | Milling about around a point it reached: how far it strays. |
| `lunge_range` | `f32` | A chaser this close (centre to centre) with line of sight lunges. |
| `lunge_secs` | `f32` | Lunge and attack. |
| `lunge_speed_mult` | `f32` | Lunge speed: the zombie's speed times this, but at least `lunge_min_speed`. |
| `lunge_min_speed` | `f32` | Lunge speed: the zombie's speed times this, but at least `lunge_min_speed`. |
| `lunge_cooldown` | `f32` | Lunge and attack. |
| `attack_reach` | `f32` | Strikes land within this distance (centre to centre). |
| `attack_windup` | `f32` | Seconds from reaching a player to the first strike, and between strikes. |
| `attack_cooldown` | `f32` | Lunge and attack. |
| `attack_leave` | `f32` | It gives up attacking and chases again once the player is this much beyond reach. |
| `door_hp` | `f32` | Hit points of a shut door and of an intact window. |
| `window_hp` | `f32` | Doors and windows. |
| `thump_damage` | `f32` | Damage per thump, and seconds between one zombie's thumps (each jittered by ±20%, so a crowd doesn't thump in step). |
| `thump_cooldown` | `f32` | Doors and windows. |
| `thump_reach` | `f32` | A zombie this close to a door or window (centre to edge) can batter it. |
| `thump_noise` | `f32` | Noise radius of one thump, of glass breaking (battered or smashed by a player) and of a door giving way. |
| `glass_break_noise` | `f32` | Doors and windows. |
| `door_break_noise` | `f32` | Doors and windows. |
| `window_noise` | `f32` | A player opening or closing a window (quieter than a door). |
| `climb_speed` | `f32` | Top speed while climbing through an open or broken window. |
| `thump_interest_secs` | `f32` | A thumper keeps at it this long after it last saw or heard a player (any player's noise refreshes it, so someone moving about inside keeps the crowd battering), then gives up. |
| `crowd_reach` | `f32` | Crowd pressure: a zombie this close to the door or window (centre to edge) behind one battering it pushes in too, and each of its thumps does `crowd_thump_frac` of a thump. |
| `crowd_thump_frac` | `f32` | Crowd pressure: a zombie this close to the door or window (centre to edge) behind one battering it pushes in too, and each of its thumps does `crowd_thump_frac` of a thump. |
| `give_up_secs` | `f32` | A chaser or investigator held back by walls (not by the crowd) that hasn't moved `stuck_move` metres for `give_up_secs` gives up, as does one whose target has no way to it at all (not even through a door or window). |
| `stuck_move` | `f32` | A chaser or investigator held back by walls (not by the crowd) that hasn't moved `stuck_move` metres for `give_up_secs` gives up, as does one whose target has no way to it at all (not even through a door or window). |
| `bored_secs` | `f32` | After giving up (stuck, or a thumper that lost interest) it mills about where it is, then wanders. For this long it ignores other zombies' noise and noise that isn't a player's, and only notices a player close up (within `sure_sight_frac` of its sight range). |
| `max_corpses` | `u32` | Corpses kept at most (the oldest go first), and how long one lies before it's removed. |
| `corpse_secs` | `f32` | Corpses. |
| `knockback_slide` | `f32` | A staggered or downed zombie's slide (from a shove or a blow) keeps this share of its speed each tick, so it slides farther than a walker's (0.75) before it stops: a shove can push one back about `0.25 m x slide / (1 - slide)` at most (1.5 m at 0.86). |

##### `CombatTuning`

Player health and every combat number that isn't a weapon's. Serde with defaults, like `crate::ZombieTuning`. Distances in metres, times in seconds, chances 0..1.

| Field | Type | What it is |
|---|---|---|
| `player_hp` | `f32` | A player's full hit points. |
| `zombie_hp` | `(f32, f32)` | Zombie hit points are rolled per zombie in this range. |
| `tired_below` | `f32` | Below this endurance actions weaken and slow down, down to `tired_power` (damage, knockback and knockdown chance) and `tired_slow` (time multiplier) at 0. |
| `tired_power` | `f32` | Below this endurance actions weaken and slow down, down to `tired_power` (damage, knockback and knockdown chance) and `tired_slow` (time multiplier) at 0. |
| `tired_slow` | `f32` | Below this endurance actions weaken and slow down, down to `tired_power` (damage, knockback and knockdown chance) and `tired_slow` (time multiplier) at 0. |
| `action_buffer_secs` | `f32` | An action asked for this close to the end of the last one is queued instead of dropped. |
| `multi_hit_falloff` | `f32` | Each target after the first in one swing takes this much more of the damage (0.8 → 80%, 64%...). |
| `behind_dot` | `f32` | A zombie facing away from the attacker (its forward · attacker→zombie above this) is hit from behind. |
| `behind_crit_bonus` | `f32` | From behind: added crit chance, and knockdown chance multiplier. |
| `behind_knockdown_mult` | `f32` | Hitting. |
| `staggered_knockdown_mult` | `f32` | Knockdown chance multiplier against a zombie already staggered. |
| `stagger_secs` | `(f32, f32)` | How long a stagger and a knockdown last. A knockdown's last `zombies::GET_UP_SECS` (2 s) are getting up; before that the client plays a 1.3 s fall, so the shortest leaves ~0.7 s lying still. |
| `down_secs` | `(f32, f32)` | Hitting. |
| `shove_range` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_arc_degrees` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_targets` | `u32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_knockback` | `f32` | How far a shove pushes a zombie back (metres, before Strength and how tired you are; at most about 1.5 m, `ZombieTuning::knockback_slide`). |
| `shove_knockdown_chance` | `f32` | Knockdown chance of a shove (it always staggers), before the staggered / behind multipliers. |
| `shove_weapon_range` | `f32` | A shove with a melee weapon in hand (pushed with its shaft): this much more reach, and knockback times `shove_weapon_knockback`. |
| `shove_weapon_knockback` | `f32` | A shove with a melee weapon in hand (pushed with its shaft): this much more reach, and knockback times `shove_weapon_knockback`. |
| `shove_repeat_secs` | `f32` | Shoves on the same zombie this close together add up: each earlier one (at most `shove_repeat_max`) adds `shove_repeat_knockdown` to the knockdown chance. A knockdown starts it over. |
| `shove_repeat_knockdown` | `f32` | Shoves on the same zombie this close together add up: each earlier one (at most `shove_repeat_max`) adds `shove_repeat_knockdown` to the knockdown chance. A knockdown starts it over. |
| `shove_repeat_max` | `u32` | Shoves on the same zombie this close together add up: each earlier one (at most `shove_repeat_max`) adds `shove_repeat_knockdown` to the knockdown chance. A knockdown starts it over. |
| `shove_windup` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_seconds` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_endurance` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `shove_noise` | `f32` | Shove: hands, or the weapon held across the body, to push them off and make room to swing. |
| `stomp_range` | `f32` | Reach from the player's centre to a downed zombie's centre. |
| `stomp_arc_degrees` | `f32` | Stomp. |
| `stomp_damage` | `(f32, f32)` | Stomp. |
| `down_head_offset` | `f32` | A zombie on the ground lies on its back with its head this far behind its feet (its position): the line between is the body a stomp can land on. |
| `stomp_head_reach` | `f32` | A stomp from within this of the head (and in the arc) is a stomp to the head: its damage times `stomp_head_mult`. |
| `stomp_head_mult` | `f32` | A stomp from within this of the head (and in the arc) is a stomp to the head: its damage times `stomp_head_mult`. |
| `stomp_pin_secs` | `f32` | A stomp that doesn't kill keeps the zombie on the ground at least this long before it starts to get up (one getting up is stamped back down). |
| `stomp_crit_chance` | `f32` | Stomp. |
| `stomp_crit_multiplier` | `f32` | Stomp. |
| `stomp_windup` | `f32` | Stomp. |
| `stomp_seconds` | `f32` | Stomp. |
| `stomp_endurance` | `f32` | Stomp. |
| `stomp_noise` | `f32` | Stomp. |
| `zombie_hit_chance` | `f32` | Chance a strike lands, plus this for every other zombie attacking the same player, at most `zombie_hit_max`. What a landed strike does is up to the wound it leaves (`HealthTuning`). |
| `zombie_crowd_bonus` | `f32` | Zombie strikes. |
| `zombie_hit_max` | `f32` | Chance a strike lands, plus this for every other zombie attacking the same player, at most `zombie_hit_max`. What a landed strike does is up to the wound it leaves (`HealthTuning`). |
| `pvp` | `bool` | Swings, shoves and stomps hit other players as they hit zombies. Off in single-player and co-op (players are never targets); a multiplayer server turns it on unless started with `--pvp off`. |
| `pvp_damage_mult` | `f32` | A swing's or stomp's damage to a player is its damage to a zombie times this (the player also gets the wound). |
| `pvp_shot_mult` | `f32` | A bullet's damage to a player is its damage to a zombie times this. |
| `pvp_blunt_gash` | `f32` | Chance a blunt weapon's blow splits the skin (a gash, not a bruise); a crit always does. |
| `pvp_stopped_damage` | `f32` | A cut that clothing stops is a bruise, and takes this much of its damage. |
| `player_stagger_secs` | `(f32, f32)` | How long a player reels from a blow, and how long one stays on the ground. |
| `player_down_secs` | `(f32, f32)` | Players and each other (PLAN §4.8). |
| `lag_comp_max_secs` | `f32` | A blow of a player whose client reports what it shows (one over the network) is tested against its targets where they stood at most this long ago; 0 turns it off. It is also the most by which a blow about to land survives its player being floored (a trade of blows). 0.35 s covers a 150 ms ping with the client's own tick and snapshot cushion on top. |
| `cramped_damage` | `f32` | A blow at a target nearer than the weapon's `close_range` does this much of its damage. |
| `one_hand_power` | `f32` | A two-handed weapon swung in one hand (its item's `one_hand`, the other hand full) hits this much as hard, and takes `one_hand_slow` times as long. |
| `one_hand_slow` | `f32` | A two-handed weapon swung in one hand (its item's `one_hand`, the other hand full) hits this much as hard, and takes `one_hand_slow` times as long. |
| `battered_below` | `f32` | With this share of its life or less left a weapon is battered, and does `battered_damage` of its damage. |
| `battered_damage` | `f32` | With this share of its life or less left a weapon is battered, and does `battered_damage` of its damage. |
| `broken_damage` | `f32` | A broken weapon (every knock taken: `crate::wear`) stays in the hand as an item, but its swing does this much of its damage and knockback, and never crits or knocks down. |
| `wear_skill_less` | `f32` | Each level of the weapon's skill makes a knock this much less likely. |
| `found_wear_max` | `f32` | A weapon found in furniture has had at most this share of its life (0: every one is sound). |

##### `HealthTuning`

Every wound and illness number but the infection's. Serde with defaults, saved with the world's settings. Times in game hours, chances 0..1. Ours.

| Field | Type | What it is |
|---|---|---|
| `bruise` | `WoundTuning` |  |
| `scratch` | `WoundTuning` |  |
| `gash` | `WoundTuning` |  |
| `bite` | `WoundTuning` |  |
| `glass_cut` | `WoundTuning` |  |
| `burn` | `WoundTuning` | A burn from standing in a fire (`crate::fire`): doesn't bleed, hurts, heals slowly. |
| `heal_spread` | `f32` | Each wound's healing time is rolled within ± this share of its kind's. |
| `stitched_heal_speed` | `f32` | A stitched wound heals this many times as fast. |
| `dressed_gash_bleed` | `f32` | A dressed but unstitched gash still bleeds at this share of its rate. |
| `regen_awake_per_h` | `f32` | HP back per game hour with nothing bleeding or festering, no fever and not hungry; asleep more. |
| `regen_asleep_per_h` | `f32` |  |
| `front` | `PartWeights` | Where strikes land from in front and from behind (zombies reach the upper body best). |
| `behind` | `PartWeights` |  |
| `behind_dot` | `f32` | A zombie facing a player's back (the player's facing · the direction of the blow above this). |
| `strike` | `StrikeWounds` |  |
| `arm_power_per` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `arm_power_max` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `arm_time_per` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `arm_time_max` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `leg_walk_per` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `leg_run_per` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `leg_max` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `leg_gash_stops_running` | `bool` | A gash or bite on a leg (not a foot) means no running. |
| `torso_regen_per` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `torso_regen_max` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `head_pain_mult` | `f32` | Effects of open wounds (each counted by its kind's `effect`), with their caps. |
| `fester_undressed` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `fester_dirty` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `fester_clean` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `fester_cleaned_mult` | `f32` | Cleaning a wound before dressing it multiplies the chance by this. |
| `fester_pain` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `fester_heal_mult` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `fester_hp_per_h` | `f32` | Festering: chance per game hour by dressing; what it does. |
| `smash_cut_chance` | `f32` | Smashing a window with no weapon cuts the hand that did it this often (gloved: the other). |
| `smash_cut_gloved` | `f32` | Glass. |
| `climb_cut_chance` | `f32` | Climbing in through a broken window: a cut on a hand, arm or leg this often (clothing protects). |
| `poison_hours` | `(f32, f32)` | Food poisoning (#11 decides when; these are its numbers). |
| `poison_regen_mult` | `f32` | Food poisoning (#11 decides when; these are its numbers). |
| `poison_thirst_mult` | `f32` | Food poisoning (#11 decides when; these are its numbers). |
| `poison_rotten` | `f32` | Chances for mouldy or rotten food, stale food and unsafe water. |
| `poison_stale` | `f32` | Food poisoning (#11 decides when; these are its numbers). |
| `poison_water` | `f32` | Food poisoning (#11 decides when; these are its numbers). |
| `first_aid` | `FirstAidTuning` | First aid: treatment times, dressings, painkillers, antibiotics. |

###### `WoundTuning`

One wound kind's numbers.

| Field | Type | What it is |
|---|---|---|
| `damage` | `(f32, f32)` | Hit points it takes at once. |
| `bleed_per_h` | `f32` | HP per game hour while it bleeds, and how long it bleeds by itself (`None`: until dressed). |
| `bleeds_for_h` | `Option<f32>` |  |
| `heal_h` | `f32` | Game hours to heal (each wound rolls ±`HealthTuning::heal_spread` of it). |
| `pain` | `f32` |  |
| `protection` | `f32` | How much clothing counts against it (1 = its protection in full). |
| `effect` | `f32` | How much it counts toward arm, leg and torso effects (an open gash 1, a scratch half). |
| `can_fester` | `bool` |  |

###### `PartWeights`

Where zombie strikes land: a weight per part (each arm, hand, leg and foot on its own).

| Field | Type | What it is |
|---|---|---|
| `head` | `f32` |  |
| `torso` | `f32` |  |
| `arm` | `f32` |  |
| `hand` | `f32` |  |
| `leg` | `f32` |  |
| `foot` | `f32` |  |

###### `StrikeWounds`

Which wound a zombie strike leaves (weights), before clothing.

| Field | Type | What it is |
|---|---|---|
| `scratch` | `f32` |  |
| `gash` | `f32` |  |
| `bite` | `f32` |  |
| `grabbed_bite_bonus` | `f32` | Added to `bite` when two or more zombies are on you, or the strike comes from behind. |

###### `FirstAidTuning`

First aid's numbers (`HealthTuning::first_aid`). Seconds of play for the treatments, game hours for the rest. Ours.

| Field | Type | What it is |
|---|---|---|
| `dress_secs` | `f32` |  |
| `plaster_secs` | `f32` |  |
| `clean_secs` | `f32` |  |
| `stitch_secs` | `f32` |  |
| `pill_secs` | `f32` |  |
| `remove_secs` | `f32` |  |
| `own_hand_mult` | `f32` | Dressing a hand (with the other one) takes this much longer. |
| `skill_faster_per_level` | `f32` | Each First Aid level makes treatment this much faster; from `skill_stitch_level` up, stitching hurts half as much. |
| `skill_stitch_level` | `u32` | Each First Aid level makes treatment this much faster; from `skill_stitch_level` up, stitching hurts half as much. |
| `plaster_clean_h` | `f32` | Hours a clean dressing stays clean: a plaster, any other, and any other put on a bleeding wound. |
| `dressing_clean_h` | `f32` |  |
| `bleeding_clean_h` | `f32` |  |
| `clean_pain` | `f32` | Pain cleaning and stitching cause, and for how many game hours. |
| `clean_pain_h` | `f32` |  |
| `stitch_pain` | `f32` |  |
| `stitch_pain_h` | `f32` |  |
| `painkiller_relief` | `f32` | Pain a painkiller dose takes away, for how long; this many doses at once make you drowsy. |
| `painkiller_h` | `f32` |  |
| `drowsy_doses` | `u32` |  |
| `antibiotic_course` | `u8` | Antibiotics: doses in a course; a dose counts from `min_gap` hours after the last, the course lapses after `max_gap` hours without one; each dose keeps festering off for `cover` hours. |
| `antibiotic_min_gap_h` | `f32` |  |
| `antibiotic_max_gap_h` | `f32` |  |
| `antibiotic_cover_h` | `f32` |  |

##### `NeedsTuning`

Every needs and sleep number. Serde with defaults, saved with the world's settings. Rates per game hour, needs 0..1. Ours.

| Field | Type | What it is |
|---|---|---|
| `hunger_per_h` | `f32` |  |
| `hunger_asleep_per_h` | `f32` |  |
| `thirst_per_h` | `f32` |  |
| `thirst_asleep_per_h` | `f32` |  |
| `run_thirst_per_h` | `f32` | Extra thirst per game hour spent running, and per swing. |
| `swing_thirst` | `f32` |  |
| `tired_per_h` | `f32` |  |
| `rest_bed_per_h` | `f32` | Tiredness lost per game hour asleep on a bed, a sofa, the floor. |
| `rest_sofa_per_h` | `f32` |  |
| `rest_floor_per_h` | `f32` |  |
| `mild` | `f32` | Where a need turns mild, strong and severe. |
| `strong` | `f32` |  |
| `severe` | `f32` |  |
| `hungry_regen` | `f32` | Endurance recovery while hungry, thirsty (multipliers; both can apply). |
| `thirsty_regen` | `f32` |  |
| `starving_hp_per_h` | `f32` | HP per game hour starving, parched. |
| `parched_hp_per_h` | `f32` |  |
| `starving_swing_power` | `f32` | Swing power while starving; swing time tired and exhausted; walking speed exhausted. |
| `tired_swing_time` | `f32` |  |
| `exhausted_swing_time` | `f32` |  |
| `exhausted_walk` | `f32` |  |
| `tired_sight` | `f32` | The client's view cone while tired or worse (a multiplier on its angle). |
| `tired_endurance` | `f32` | The most endurance there can be while tired, and while exhausted (`MoveMods::max_endurance`): a tired survivor runs out of breath sooner, so sleep matters for getting away too. |
| `exhausted_endurance` | `f32` |  |
| `pain_sore` | `f32` | Pain levels (sore, hurting, agony) and swing power at each. |
| `pain_hurting` | `f32` |  |
| `pain_agony` | `f32` |  |
| `pain_swing_power` | `(f32, f32, f32)` |  |
| `eat_secs` | `(f32, f32)` | Eating or drinking takes `eat_secs.0` plus this per unit of hunger and thirst it does, at most `eat_secs.1`. |
| `eat_secs_per` | `f32` |  |
| `waste_below` | `f32` | Food eaten with hunger under this does nothing for hunger. |
| `stale_food` | `f32` | Share of the hunger and thirst stale and mouldy food gives. |
| `mouldy_food` | `f32` |  |
| `found_food_age` | `(f32, f32)` | Food found in furniture was made this share of its `spoils_hours` before the world began (each stack rolls within the range). |
| `min_tiredness_to_sleep` | `f32` | No sleeping with tiredness below this; asleep, you wake once it's below `rested_below`. |
| `rested_below` | `f32` | No sleeping with tiredness below this; asleep, you wake once it's below `rested_below`. |
| `wake_noise_m` | `f32` | A sound this close (and loud enough to reach you) wakes you. |
| `hunger_wakes_after_h` | `f32` | Starving or parched, you wake after this many game hours asleep. |
| `floor_sore_pain` | `f32` | A night on the floor: pain for this many game hours. |
| `floor_sore_h` | `f32` |  |
| `sleep_time_scale` | `f32` | Game time runs this many times as fast while every living player is asleep (1: never). |
| `sleep_through_night` | `bool` | After dark you can lie down however rested you are, and being rested doesn't wake you until sunrise: a night can be slept through, unless something else wakes you. |

##### `CarryTuning`

Carrying: limits, burden stages and how long handling things takes. Serde with defaults, saved with the world like the other tunings. All numbers are ours.

| Field | Type | What it is |
|---|---|---|
| `limit_kg` | `f32` | What a player carries without effect (kg)... |
| `strength_kg` | `f32` | ...plus this per Strength level. |
| `pockets_l` | `f32` | Room in pockets (litres), always there. |
| `burdened_at` | `f32` | Burden stages start at these shares of the limit. |
| `heavy_at` | `f32` |  |
| `overloaded_at` | `f32` |  |
| `max_load` | `f32` | Nothing more can be picked up past this share of the limit. |
| `burdened_speed` | `f32` |  |
| `burdened_run_drain` | `f32` |  |
| `heavy_speed` | `f32` |  |
| `heavy_action_cost` | `f32` | Swings, shoves and stomps cost this much more endurance from Heavy on. |
| `overloaded_speed` | `f32` |  |
| `move_secs` | `f32` | Seconds to move one stack, and one heavier than `heavy_stack_kg`. |
| `heavy_move_secs` | `f32` |  |
| `heavy_stack_kg` | `f32` | Seconds to move one stack, and one heavier than `heavy_stack_kg`. |
| `reopen_secs` | `f32` | Seconds to open a container that has been searched before. |
| `use_secs` | `f32` | Seconds to eat or drink something. |
| `sneak_search_mult` | `f32` | Searching while sneaking takes this much longer, and makes this share of the noise. |
| `sneak_noise_mult` | `f32` |  |
| `max_jobs` | `u32` | Jobs a player can have queued. |

##### `MoveTuning`

How fast a survivor moves and how its endurance (stamina) drains and comes back (`WorldConfig::movement`; ours). Saved with the world's settings, and reachable from a difficulty preset's `tuning`. The world hands it to its map (`TileMap::movement`), which is what `step_movement` reads, so a client's prediction has the server's numbers too (sent in the join's tunings). The `*_SPEED`, `RUN_DRAIN` and `*_ENDURANCE` constants are its defaults.

| Field | Type | What it is |
|---|---|---|
| `walk_speed` | `f32` | Speeds in m/s, before load, wounds and needs (`MoveMods`). |
| `run_speed` | `f32` |  |
| `sneak_speed` | `f32` |  |
| `aim_speed` | `f32` | Walking while aiming. |
| `climb_speed` | `f32` | Top speed while climbing through a window or over a fence. |
| `run_drain` | `f32` | Endurance a second spent running. |
| `stand_regen` | `f32` | Endurance a second regained standing still (or sitting: `SitTuning::endurance_regen` on top). |
| `walk_regen` | `f32` | ...walking (or aiming, or climbing): catching your breath on the move is slow. |
| `sneak_regen` | `f32` | ...sneaking. |
| `run_min_endurance` | `f32` | Running needs more endurance than this; running down to it winds you. |
| `run_recover_endurance` | `f32` | Winded, you can't run again until endurance is back above this. |

## The file

<details>
<summary>The whole file as shipped</summary>

```ron
// Difficulty presets (sim::difficulty): what a new game offers under "World". Easiest first.
// Every number is a multiplier on the game's own (1 = as shipped) unless it says otherwise;
// anything left out is 1 (or the game's own).
//
//   id, name, about
//   zombies            how many (the population)
//   fast_zombies       Some(share 0..1) of them that are fast; None: population.ron's
//   zombie_senses      how sharp their eyes and ears are
//   zombie_toughness   their hit points
//   zombie_accuracy    how often their strikes land
//   respawn            Some(true/false): do far regions fill up again; None: population.ron's
//   loot, rare_loot    how much containers hold; how often the rare things turn up
//   xp                 how fast skills grow
//   needs              how fast hunger, thirst and tiredness come
//   infection          Off | Survivable | Deadly
//   day_minutes        Some(real minutes a game day lasts); None: the game's own (60)
//   tuning             any other tuning number, set outright, e.g.
//                        tuning: (zombie: Some((memory_secs: 30)), combat: Some((player_hp: 150)))
//
// The new-game screen lets the player change zombies, loot, xp, respawn, infection, the day's
// length and the hour they wake on top of a preset. Names and numbers are ours.
[
    (id: "easy_street", name: "Easy street",
        about: "Fewer of the dead, duller ones, and full cupboards. For learning the town.",
        zombies: 0.6, zombie_senses: 0.8, zombie_toughness: 0.85, zombie_accuracy: 0.8,
        loot: 1.5, rare_loot: 1.5, xp: 1.5, needs: 0.8, infection: Survivable),
    (id: "survivor", name: "Survivor",
        about: "The game as it is meant to be played."),
    (id: "hard_times", name: "Hard times",
        about: "More of them, sharper, and the houses have been picked over.",
        zombies: 1.5, fast_zombies: Some(0.25), zombie_senses: 1.15, zombie_accuracy: 1.1,
        loot: 0.7, rare_loot: 0.7, needs: 1.15, respawn: Some(true)),
    (id: "last_one_left", name: "Last one left",
        about: "The town is full, they miss nothing, and there is very little left to find.",
        zombies: 2.2, fast_zombies: Some(0.4), zombie_senses: 1.3, zombie_toughness: 1.15, zombie_accuracy: 1.2,
        loot: 0.45, rare_loot: 0.5, xp: 0.8, needs: 1.3, respawn: Some(true)),
]
```

</details>