@@ -1,14 +1,14 @@ local u = sorcery.lib -sorcery.data.infusions = {} -- not sure where to put this tbh -sorcery.data.infusion_leftovers = {} +sorcery.registry.mk('infusions',false) +sorcery.registry.mk('residue',false) sorcery.register_potion = function(name,label,desc,color,imgvariant,glow,extra) local image = 'sorcery_liquid_'..(imgvariant or 'dull')..'.png' .. '^[multiply:'..tostring(color).. '^vessels_glass_bottle.png' - sorcery.data.register.infusion_leftover('sorcery:' .. name, 'vessels:glass_bottle') + sorcery.register.residue.link('sorcery:' .. name, 'vessels:glass_bottle') local node = { description = color:darken(0.8):bg( sorcery.lib.ui.tooltip { title = label; @@ -47,9 +47,9 @@ end sorcery.register_oil = function(name,label,desc,color,imgvariant,extra) local image = 'xdecor_bowl.png^(sorcery_oil_' .. (imgvariant or 'dull') .. '.png^[colorize:'..tostring(color)..':140)' - sorcery.data.register.infusion_leftover('sorcery:' .. name, 'xdecor:bowl') + sorcery.register.residue.link('sorcery:' .. name, 'xdecor:bowl') extra.description = label; extra.inventory_image = image; if not extra.groups then extra.groups = {} end minetest.register_craftitem('sorcery:' .. name, extra) @@ -60,9 +60,9 @@ sorcery.register_potion('holy_water', 'Holy Water','A bottle of consecrated water',u.color(94,138,206),'sparkle',6) local create_infusion_recipe = function(id,potion,default_basis,proto) if potion.infusion then - sorcery.data.register.infusion { + sorcery.register.infusions.link { infuse = potion.infusion; into = potion.basis or default_basis; output = 'sorcery:' .. id; _proto = proto; @@ -69,9 +69,10 @@ } end end -for n,v in pairs(sorcery.data.potions) do +-- for n,v in pairs(sorcery.data.potions) do +sorcery.register.potions.foreach('sorcery:mknodes',{},function(n,v) local color = u.color(v.color) local kind = v.style local glow = v.glow local id = 'potion_' .. string.lower(n) @@ -87,11 +88,12 @@ sorcery_magical = 1; }; }) create_infusion_recipe(id,v,'sorcery:potion_serene',{data=v,name=fullname}) -end +end) -for n,potion in pairs(sorcery.data.draughts) do +-- for n,potion in pairs(sorcery.data.draughts) do +sorcery.register.draughts.foreach('sorcery:mknodes',{},function(n,potion) local name = 'draught_' .. n local behavior = { _proto = potion; groups = { @@ -104,11 +106,12 @@ local pproto = stack:get_definition()._proto if potion.effect(stack, user, pproto) == false then return nil end local meta = stack:get_meta() local force = meta:get_int('force'); + local duration = pproto:duration(meta); minetest.add_particlespawner { - amount = 200 + (30 * force); - time = pproto:duration(meta); + amount = (7 + (10 * force)) * duration; + time = duration; minpos = { x = -0.1; y = 0; z = -0.1; }; maxpos = { x = 0.1; y = 2; z = 0.1; }; minvel = { x = -0.1; y = 0; z = -0.1; }; maxvel = { x = 0.1; y = 0; z = 0.1; }; @@ -144,11 +147,12 @@ potion.style or 'dull', potion.glow or 0, behavior) create_infusion_recipe(name,potion,'sorcery:potion_luminous',{data=potion,name=fullname}) -end +end) -for n,elixir in pairs(sorcery.data.elixirs) do +-- for n,elixir in pairs(sorcery.data.elixirs) do +sorcery.register.elixirs.foreach('sorcery:mknodes',{},function(n,elixir) local color = u.color(elixir.color) local id = 'elixir_' .. string.lower(n) local fullname = 'Elixir of ' .. n sorcery.register_potion(id, fullname, nil, color, 'dull', false, { @@ -158,29 +162,32 @@ sorcery_magical = 1; }; }) create_infusion_recipe(id,elixir,'sorcery:potion_misty',{data=elixir,name=fullname}) -end +end) -for n,v in pairs(sorcery.data.oils) do +-- for n,v in pairs(sorcery.data.oils) do +sorcery.register.oils.foreach('sorcery:mknodes',{},function(n,v) local color = u.color(v.color) local kind = v.style local id = 'oil_' .. n n = v.name or u.str.capitalize(n) sorcery.register_oil(id, n .. ' Oil', nil, color, kind, { groups = { sorcery_oil = 1 }; }) -end +end) -for n,v in pairs(sorcery.data.greases) do +-- for n,v in pairs(sorcery.data.greases) do +sorcery.register.greases.foreach('sorcery:mknodes',{},function(n,v) local color = u.color(v.color) local kind = v.style sorcery.register_oil('grease_' .. n, u.str.capitalize(n) .. ' Grease', nil, color, kind, { groups = { sorcery_grease = 1 } }) -end +end) -for n,v in pairs(sorcery.data.philters) do +-- for n,v in pairs(sorcery.data.philters) do +sorcery.register.philters.foreach('sorcery:mknodes',{},function(n,v) local color = u.color(v.color) local id = 'philter_' .. n local name = v.name or u.str.capitalize(n) local fullname = name .. ' Philter' @@ -192,17 +199,18 @@ sorcery_philter = 1; }; }) create_infusion_recipe(id,v,'sorcery:potion_viscous',{data=v,name=fullname}) -end +end) -for n,v in pairs(sorcery.data.extracts) do +-- for n,v in pairs(sorcery.data.extracts) do +sorcery.register.extracts.foreach('sorcery:mknodes',{},function(n,v) local item = v[1] local color = u.color(v[2]) local name = 'extract_' .. n sorcery.register_potion(name, u.str.capitalize(n) .. ' Extract', nil, color, 'sparkle', false, { groups = { - sorcery_extracts = 1; + sorcery_extract = 1; }; }) local add_alcohol = function(booze) @@ -223,5 +231,5 @@ -- need a relatively pure alcohol for this, tho other alcohols can be used -- for potionmaking in other ways add_alcohol('farming:bottle_ethanol') add_alcohol('wine:glass_vodka') -end +end)