{
  "$schema": "flyplay/balance@1",
  "$meta": {
    "owner": "LIFE",
    "src": "docs/game/src.html section 06 (rates, the two water anchors, the temperature and age limits), PLAN section 5 LIFE and amendments A13 / A15, contracts types.md (FLY_MODE_DRAIN, STATUS_TABLE)",
    "unit": {
      "sugar.drain.fly": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.hover": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.sprint": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.walk": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.rest": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.groom": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.feed": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.fall": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.stuck": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.drain.dead": "sugar per real second (60 steps) in this state.fly.mode",
      "sugar.low": "fraction of the stat cap",
      "sugar.lowClear": "fraction of the stat cap",
      "water.k": "water per real second at RH 0 and 25 degC (RH as a fraction)",
      "water.p": "exponent of (1 - RH)",
      "water.tempSlope": "per degC (e^(slope (T - tempRef)))",
      "water.tempRef": "degC",
      "water.low": "fraction of the stat cap",
      "water.lowClear": "fraction of the stat cap",
      "stamina.sprintBudgetS": "real seconds of sprint from a full tank (x mods fly.sprint.time)",
      "stamina.refillPerS": "stamina per real second outside a sprint",
      "resolve.regenPerS": "resolve per real second outside a duel",
      "health.low": "fraction of the stat cap",
      "health.lowClear": "fraction of the stat cap",
      "health.regenRestPerS": "hp per real second",
      "health.regenMovePerS": "hp per real second",
      "health.regenSleepMul": "x the resting rate",
      "health.regenNeedFrac": "fraction of the sugar and water caps",
      "health.starvePerS": "hp per real second",
      "health.dehydratePerS": "hp per real second",
      "health.infectPerS": "hp per real second",
      "health.poisonedPerS": "hp per real second",
      "health.toxinPerDose": "hp per real second per toxin dose unit",
      "sleep.gainPerHour": "drowsiness per game hour",
      "sleep.recoverPerHour": "drowsiness per game hour",
      "sleep.dreamMul": "x the recovery rate",
      "sleep.sleepyOn": "drowsiness",
      "sleep.sleepyOff": "drowsiness",
      "sleep.minToSleep": "drowsiness",
      "sleep.safeDist": "metres",
      "temp.tauS": "real seconds",
      "temp.sunHeat": "degC above the air in full sun (0: svc.env.climateAt already includes the sun)",
      "temp.coldOn": "degC",
      "temp.coldOff": "degC",
      "temp.chillBelow": "degC",
      "temp.chillPerDegPerS": "hp per real second per degC beyond the limit",
      "temp.hotOn": "degC",
      "temp.hotOff": "degC",
      "temp.heatAbove": "degC",
      "temp.heatPerDegPerS": "hp per real second per degC beyond the limit",
      "temp.coldSpeed": "fraction of speed lost at full severity",
      "temp.hotSpeed": "fraction of speed lost at full severity",
      "age.onsetDays": "adult game days",
      "age.lifespanDays": "adult game days",
      "age.markedFrac": "fraction of the decline (0 at the onset, 1 at the lifespan)",
      "age.speedLoss": "fraction lost at the end of the decline",
      "age.eggLoss": "fraction lost at the end of the decline",
      "age.immunityLoss": "fraction lost at the end of the decline",
      "age.wingDrift": "rad per second",
      "age.wearRight": "flag: 1 = the worn wing edge drifts the fly to its right (towards the rig L wing), 0 = to its left",
      "age.tornDrift": "rad per second",
      "ethanol.metabolisePerS": "dose per real second",
      "ethanol.onAt": "dose (1 = very drunk)",
      "ethanol.offAt": "dose (1 = very drunk)",
      "ethanol.noiseGain": "fraction at dose 1",
      "ethanol.capCut": "fraction at dose 1",
      "ethanol.energyPerDose": "sugar per dose unit (only with skill b5)",
      "toxin.decayPerS": "dose per real second",
      "toxin.onAt": "dose",
      "toxin.offAt": "dose",
      "toxin.lethalDose": "dose",
      "stuck.drownS": "real seconds",
      "stuck.exhaustS": "real seconds",
      "status.wetTtlS": "steps (60 = one real second)",
      "status.wetCap": "fraction (fly.thrust.cap)",
      "status.groomClearS": "real seconds",
      "wet.rainIntensity": "fraction 0..1",
      "wet.rainShade": "fraction 0..1",
      "wet.warmC": "degC",
      "wet.warmDryMul": "x faster",
      "injury.bruiseHealS": "real seconds of rest per bruise",
      "injury.restSugarFrac": "fraction of the sugar cap",
      "impact.bruiseSpeed": "m/s closing speed",
      "impact.fallHeight": "metres",
      "impact.healthPerMps": "hp per m/s above bruiseSpeed",
      "impact.floorHp": "hp (an impact never takes health below this)",
      "egg.portions": "protein portions per egg",
      "toasts.enabled": "flag: 1 = LIFE words its own toasts, 0 = silent",
      "toasts.quietSteps": "steps at the start of a run during which condition toasts (a status, a low mark) are held and shown only if the condition still holds",
      "easy.waitSteps": "steps (90 = 1.5 s)",
      "easy.respawnTimeoutSteps": "steps of simulation time (360 = 6 s) that svc.world.respawn may take",
      "easy.fill": "fraction of the sugar and water caps after a revive"
    },
    "note": "Generated by tools/game/LIFE/gen_balance.mjs from site_next/play/js/life/balance.js (which carries the comments). Time: one simulation step is 1/60 real second and one game second; \"per real second\" rates are multiplied by dt. These are M1 starting values (design doc section 06): BAL tunes them in wave 3. Water: k and p reproduce the anchors RH 80 % / 25 degC = 30.3 min and RH 30 % / 30 degC = 4.99 min; full sugar in flight lasts 3.33 min.",
    "basis": {
      "sugar": "design",
      "water": "model",
      "stamina": "design",
      "resolve": "design",
      "health": "design",
      "sleep": "design",
      "temp": "design",
      "age": "design",
      "ethanol": "design",
      "toxin": "design",
      "stuck": "design",
      "status": "design",
      "wet": "design",
      "injury": "design",
      "impact": "design",
      "egg": "design",
      "toasts": "design",
      "easy": "design"
    }
  },
  "life": {
    "sugar": {
      "drain": {
        "fly": 0.5,
        "hover": 0.6,
        "sprint": 2,
        "walk": 0.05,
        "rest": 0.02,
        "groom": 0.05,
        "feed": 0.02,
        "fall": 0.02,
        "stuck": 0.3,
        "dead": 0
      },
      "low": 0.25,
      "lowClear": 0.35
    },
    "water": {
      "k": 0.38,
      "p": 1.2,
      "tempSlope": 0.06,
      "tempRef": 25,
      "low": 0.25,
      "lowClear": 0.35
    },
    "stamina": {
      "sprintBudgetS": 8,
      "refillPerS": 25
    },
    "resolve": {
      "regenPerS": 4
    },
    "health": {
      "low": 0.25,
      "lowClear": 0.35,
      "regenRestPerS": 0.3,
      "regenMovePerS": 0.03,
      "regenSleepMul": 2,
      "regenNeedFrac": 0.3,
      "starvePerS": 0.6,
      "dehydratePerS": 1,
      "infectPerS": 0.25,
      "poisonedPerS": 0.3,
      "toxinPerDose": 0.5
    },
    "sleep": {
      "gainPerHour": 4,
      "recoverPerHour": 12,
      "dreamMul": 1.25,
      "sleepyOn": 60,
      "sleepyOff": 45,
      "minToSleep": 5,
      "safeDist": 3
    },
    "temp": {
      "tauS": 15,
      "sunHeat": 0,
      "coldOn": 12,
      "coldOff": 14,
      "chillBelow": 6,
      "chillPerDegPerS": 0.4,
      "hotOn": 33,
      "hotOff": 31,
      "heatAbove": 36,
      "heatPerDegPerS": 0.7,
      "coldSpeed": 0.5,
      "hotSpeed": 0.3
    },
    "age": {
      "onsetDays": 10,
      "lifespanDays": 30,
      "markedFrac": 0.5,
      "speedLoss": 0.25,
      "eggLoss": 0.6,
      "immunityLoss": 0.5,
      "wingDrift": 0.03,
      "wearRight": 1,
      "tornDrift": 0.12
    },
    "ethanol": {
      "metabolisePerS": 0.01,
      "onAt": 0.05,
      "offAt": 0.02,
      "noiseGain": 0.6,
      "capCut": 0.3,
      "energyPerDose": 0.5
    },
    "toxin": {
      "decayPerS": 0.004,
      "onAt": 0.02,
      "offAt": 0.005,
      "lethalDose": 3
    },
    "stuck": {
      "drownS": 20,
      "exhaustS": 180
    },
    "status": {
      "wetTtlS": 900,
      "wetCap": 0.3,
      "groomClearS": 2
    },
    "wet": {
      "rainIntensity": 0.3,
      "rainShade": 0.8,
      "warmC": 20,
      "warmDryMul": 3
    },
    "injury": {
      "bruiseHealS": 30,
      "restSugarFrac": 0.2
    },
    "impact": {
      "bruiseSpeed": 1.5,
      "fallHeight": 0.3,
      "healthPerMps": 4,
      "floorHp": 1
    },
    "egg": {
      "portions": 1
    },
    "toasts": {
      "enabled": 1,
      "quietSteps": 180
    },
    "easy": {
      "waitSteps": 90,
      "respawnTimeoutSteps": 360,
      "fill": 0.75
    }
  }
}
