@@ -2,17 +2,36 @@ -- the liquid registry is used to keep track of abstract liquids, -- their properties, and their representation in-game. sorcery.registry.mk('liquid', false) +local mkunit = function(unit,fac) + return function(amt) + -- allow division for more accurate results + if fac >= 0 then + amt = amt * fac + else + amt = amt / (-fac) + end + return string.format('%s %s%s', amt, unit, (amt == 1) and '' or 's') + end +end sorcery.liquid = { constants = { drams_per_glass = 64; + pints_per_glass = 0.5; glasses_per_bottle = 3; bottles_per_bucket = 3; bottles_per_trough = 6; - } + }; + unit = mkunit; } local constants = sorcery.liquid.constants +sorcery.liquid.units = { + dram = mkunit('dram', constants.drams_per_glass); + pint = mkunit('pint', constants.pints_per_glass); + draught = mkunit('draught', -3); + drink = mkunit('drink', 1); +}; local L = sorcery.lib local log = sorcery.logger('liquid') @@ -167,11 +186,9 @@ end end sorcery.liquid.mktrough() -sorcery.liquid.measure_default = function(amt) - return string.format('%s drams', amt*constants.drams_per_glass) -end +sorcery.liquid.measure_default = sorcery.liquid.units.dram sorcery.liquid.container = function(liq, ctr) return liq.containers[({ bottle = 'vessels:glass_bottle';