Warmth, food, water and energy as bars of 0..100; what an hour of doing something costs them (the package's rates: a full bar is a day at a trip's median); the countdown when one runs out, reported as NEEDS_CRITICAL / NEEDS_RESTORED / NEEDS_COLLAPSED facts. The body's work, the air, clothing, the sun, the difficulty and the effects come through the NeedsWorld port. Its own save section. Uses ludic_base only; 13 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
15 lines
708 B
Text
15 lines
708 B
Text
# run.ludic - `gh` game hours of whatever the body is doing, taken out of the four bars
|
|
function nd_add(k: int, d: float) -> void {
|
|
let lv = nd_lv()
|
|
lv[k] = Math.clamp(lv[k] + d, 0.0, 100.0)
|
|
}
|
|
|
|
export function needs_run(gh: float) -> void {
|
|
let a = NeedsWorld.activity()
|
|
nd_add(NEED_FOOD, (NeedsWorld.bonus(NEED_FOOD) - nd_food_rate(a) * NeedsWorld.drain(NEED_FOOD)) * gh)
|
|
if NeedsWorld.thirst() {
|
|
nd_add(NEED_WATER, (NeedsWorld.bonus(NEED_WATER) - nd_water_rate(a) * NeedsWorld.drain(NEED_WATER)) * gh)
|
|
} else { nd_lv()[NEED_WATER] = 100.0 }
|
|
nd_add(NEED_ENERGY, (nd_energy_rate(a) + NeedsWorld.bonus(NEED_ENERGY)) * gh)
|
|
nd_add(NEED_WARMTH, nd_warmth_rate(a, nd_lv()[NEED_WATER]) * gh)
|
|
}
|