local lib = starlit.mod.lib
local T,G = lib.marshal.t, lib.marshal.g
local function U(unit, prec, fixed)
local trunc = 2
if fixed then
return function(amt, excludeUnit)
local ta = lib.math.trim(amt/prec, trunc)
if excludeUnit then return tostring(ta) end
return string.format("%s%s", ta, unit)
end
else
return function(amt, excludeUnit)
local ta = lib.math.trim(amt/prec, trunc)
if excludeUnit then return tostring(ta) end
return lib.math.si(unit, amt/prec, nil, nil, trunc)
end
end
end
local function C(h, s, l)
return lib.color {hue = h, sat = s or 1, lum = l or .7}
end
starlit.world.stats = {
psi = {min = 0, max = 500, base = 0, desc = U('ψ', 10), color = C(320), name = 'Numina'};
-- numina is measured in daψ
warmth = {min = -1000, max = 1000, base = 0, desc = U('°C', 10, true), color = C(5), name = 'Warmth'};
-- warmth in measured in d°C
fatigue = {min = 0, max = 76 * 60, base = 0, desc = U('hr', 60, true), color = C(288,.3,.5), name = 'Fatigue', srzType = T.decimal};
-- fatigue is measured in minutes one needs to sleep to cure it
stamina = {min = 0, max = 20 * 100, base = true, desc = U('m', 100), color = C(88), name = 'Stamina'};
-- stamina is measured in how many 10th-nodes (== cm) one can sprint
nutrition = {min = 0, max = 8000, base = 0, desc = U('kCal', 1, true), color = C(43,.5,.4), name = 'Nutrition', srzType = T.decimal};
-- hunger is measured in kcalories one must consume to cure it. at 0, you start dying
hydration = {min = 0, max = 4, base = 0, desc = U('L', 1), color = C(217, .25,.4), name = 'Hydration', srzType = T.decimal};
-- thirst is measured in L of H²O required to cure it
morale = {min = 0, max = 10 * 24 * 60, base = true, desc = U('hr', 60, true), color = C(0,0,.8), name = 'Morale', srzType = T.decimal};
-- morale is measured in minutes. e.g. at base rate morale degrades by
-- 60 points every hour. morale can last up to 10 earthdays
irradiation = {min = 0, max = 10, base = 0, desc = U('Gy', 1), color = C(141,1,.5), name = 'Irradiation', srzType = T.decimal};
-- irrad is measured is milligreys
-- 1Gy counters natural healing
-- ~3Gy counters basic nanomedicine
-- 5Gy causes death within two weeks without nanomedicine
-- radiation speeds up psi regen
-- morale drain doubles with each 2Gy
illness = {min = 0, max = 1, base = 0, desc = U('%', .01, true), color = C(71,.4,.25), name = 'Illness', srzType = T.factor};
-- as illness increases, maximum stamina and health gain a corresponding limit
-- illness is increased by certain conditions, and decreases on its own as your
-- body heals when those conditions wear off. some drugs can lower accumulated illness
-- but illness-causing conditions require specific cures
-- illness also causes thirst and fatigue to increase proportionately
}