Branch Commit 1, fixed naming, mod.conf
This branch tracks the changes to Rhynia that will be made under the strategy of code simplification. Much of the main Rhynia files are a haphazard mess of repetitive, poorly communicating, and at times spaghettified code that was made during a time of significant constraint on developer time. Reading over it with an aim to improve, several key areas spanning both current and planned architecture could benefit from significant simplification. This would likely increase both the efficiency, readability, cohesiveness and cleanliness of the existing code; while also making future development and deadline-satisfaction more easily achievable.master
parent
84b06d79fb
commit
c824950cd2
186
comp.lua
186
comp.lua
|
@ -1,4 +1,4 @@
|
|||
-- luacheck: globals minetest rhyn shout
|
||||
-- luacheck: globals minetest rhynia shout
|
||||
|
||||
local thismod = minetest.get_current_modname()
|
||||
local tm = thismod
|
||||
|
@ -7,7 +7,7 @@ local tm = thismod
|
|||
|
||||
-- -- -- -- -- -- -- -- General
|
||||
|
||||
rhyn.f.selectify = function(...)
|
||||
rhynia.f.selectify = function(...)
|
||||
local val = {}
|
||||
for n = 1, select("#",...) do
|
||||
val[n] = select(n,...)
|
||||
|
@ -15,16 +15,16 @@ rhyn.f.selectify = function(...)
|
|||
return val
|
||||
end
|
||||
|
||||
rhyn.gn = function(pos)return minetest.get_node(pos)end
|
||||
rhyn.sn = function(pos,nam,p2)return minetest.set_node(pos, {name = nam, param2 = p2})end
|
||||
rhyn.rn = function(pos) return minetest.remove_node(pos) or true end
|
||||
rhynia.gn = function(pos)return minetest.get_node(pos)end
|
||||
rhynia.sn = function(pos,nam,p2)return minetest.set_node(pos, {name = nam, param2 = p2})end
|
||||
rhynia.rn = function(pos) return minetest.remove_node(pos) or true end
|
||||
|
||||
local acts = {"sprout","tick","grow","stagnate","die","health_change","fruit","propagate"}
|
||||
|
||||
for n = 1, #acts do -- Register act wrappers.
|
||||
local a = "on_"..acts[n]
|
||||
rhyn.f[a] = function(pos, genus)
|
||||
return rhyn.genera[genus].acts[a] and rhyn.genera[genus].acts[a](pos,genus)
|
||||
rhynia.f[a] = function(pos, genus)
|
||||
return rhynia.genera[genus].acts[a] and rhynia.genera[genus].acts[a](pos,genus)
|
||||
end
|
||||
end
|
||||
-- -- -- -- -- -- -- ---- -- -- -- -- -- -- --
|
||||
|
@ -32,69 +32,69 @@ end
|
|||
|
||||
-- -- -- -- -- -- -- -- Wind
|
||||
|
||||
rhyn.f.ghibli = function()
|
||||
local mag = rhyn.wind[2]
|
||||
rhynia.f.ghibli = function()
|
||||
local mag = rhynia.wind[2]
|
||||
return {x = math.random(-mag,mag), y = 0+math.random(), z = math.random(-mag,mag)}
|
||||
end
|
||||
|
||||
rhyn.f.poppyh = function()
|
||||
rhynia.f.poppyh = function()
|
||||
shout("POPPY")
|
||||
rhyn.wind[1],rhyn.wind[2] = rhyn.f.ghibli(),math.random(1,3)
|
||||
rhynia.wind[1],rhynia.wind[2] = rhynia.f.ghibli(),math.random(1,3)
|
||||
end
|
||||
-- -- -- -- -- -- -- ---- -- -- -- -- -- -- --
|
||||
|
||||
-- -- -- -- -- -- -- -- Substrate
|
||||
|
||||
rhyn.f.is_substrate = function(pos)
|
||||
return minetest.get_item_group(rhyn.gn(pos).name, "rhyn_subs_soil")
|
||||
rhynia.f.is_substrate = function(pos)
|
||||
return minetest.get_item_group(rhynia.gn(pos).name, "rhynia_subs_soil")
|
||||
end
|
||||
|
||||
rhyn.f.is_substrate_alt = function(pos, genus)
|
||||
return minetest.get_item_group(rhyn.gn(pos).name, "rhyn_subs_soil_"..genus)
|
||||
rhynia.f.is_substrate_alt = function(pos, genus)
|
||||
return minetest.get_item_group(rhynia.gn(pos).name, "rhynia_subs_soil_"..genus)
|
||||
end
|
||||
|
||||
rhyn.f.is_rooted = function(pos,genus)
|
||||
rhynia.f.is_rooted = function(pos,genus)
|
||||
local pos = {x = pos.x, y = pos.y - 1, z = pos.z}
|
||||
return rhyn.f.is_substrate(pos) > 0 or genus and rhyn.f.is_substrate_alt(pos,genus) > 0
|
||||
return rhynia.f.is_substrate(pos) > 0 or genus and rhynia.f.is_substrate_alt(pos,genus) > 0
|
||||
end
|
||||
|
||||
rhyn.f.assign_soils_alt = function(genus)
|
||||
local subs = rhyn.genera[genus].substrates
|
||||
rhynia.f.assign_soils_alt = function(genus)
|
||||
local subs = rhynia.genera[genus].substrates
|
||||
if(subs)then
|
||||
for k,v in pairs(subs) do
|
||||
local groups = minetest.registered_nodes[k].groups
|
||||
groups["rhyn_subs_soil_"..genus] = 1
|
||||
groups["rhynia_subs_soil_"..genus] = 1
|
||||
minetest.override_item(k, {groups = groups})
|
||||
rhyn.subs.values[k] = v or 1
|
||||
--minetest.after(3, function() shout(rhyn.subs.values)end)
|
||||
rhynia.subs.values[k] = v or 1
|
||||
--minetest.after(3, function() shout(rhynia.subs.values)end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
rhyn.geo_area = function(p,r,t) -- uses vector p and radius r to determine assimilation area for pos p, based on type
|
||||
rhynia.geo_area = function(p,r,t) -- uses vector p and radius r to determine assimilation area for pos p, based on type
|
||||
local t,a = t or false, {}
|
||||
a[1] = t and {x = p.x + r, y = p.y + r, z = p.z + r} or {x = p.x + r, y = p.y, z = p.z + r}
|
||||
a[2] = t and {x = p.x - r, y = p.y - r, z = p.z - r} or {x = p.x - r, y = p.y, z = p.z - r}
|
||||
return a
|
||||
end
|
||||
|
||||
rhyn.f.ass_check = function(pos, r, t, genus) -- Grabs soil data underneath pos, to a max radius of r, depending on the shape specifier t(bool)
|
||||
rhynia.f.ass_check = function(pos, r, t, genus) -- Grabs soil data underneath pos, to a max radius of r, depending on the shape specifier t(bool)
|
||||
local upos = {x = pos.x, y = pos.y - (t and (r+1) or 1), z = pos.z}
|
||||
local cals = rhyn.geo_area(upos,r,t)
|
||||
local cals = rhynia.geo_area(upos,r,t)
|
||||
|
||||
local function soilchk()
|
||||
local alt_soil_group = genus and "group:rhyn_subs_soil_"..genus
|
||||
local area = minetest.find_nodes_in_area(cals[1],cals[2], alt_soil_group or "group:rhyn_subs_soil")
|
||||
local alt_soil_group = genus and "group:rhynia_subs_soil_"..genus
|
||||
local area = minetest.find_nodes_in_area(cals[1],cals[2], alt_soil_group or "group:rhynia_subs_soil")
|
||||
local v = 0
|
||||
for n = 1, #area do
|
||||
local name = minetest.get_node(area[n]).name
|
||||
v = v + rhyn.subs.values[name]
|
||||
v = v + rhynia.subs.values[name]
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
local function waterchk()
|
||||
local area = minetest.find_nodes_in_area(cals[1],cals[2], "group:rhyn_subs_water")
|
||||
local area = minetest.find_nodes_in_area(cals[1],cals[2], "group:rhynia_subs_water")
|
||||
area = area and area[1] and #area+1 or 1
|
||||
area = area <= 5 and area or 5 -- Original value was 4, but bumped up to 5 to accomodate upward shift in base [area] value.
|
||||
area = 1+(math.log10(area))
|
||||
|
@ -105,21 +105,21 @@ rhyn.f.ass_check = function(pos, r, t, genus) -- Grabs soil data underneath pos,
|
|||
return soilchk()*waterchk()
|
||||
end
|
||||
|
||||
rhyn.f.condition_tick = function(pos, genus, tf)
|
||||
local genus = genus or rhyn.f.nominate(minetest.get_node(pos).name).genus
|
||||
local m,root_dim = minetest.get_meta(pos), rhyn.genera[genus].root_dim
|
||||
local mci = m:get_int("rhyn_ci")
|
||||
local catch = m:get_int("rhyn_gl")
|
||||
local matl = rhyn.genera[genus].structure and #rhyn.genera[genus].structure
|
||||
rhynia.f.condition_tick = function(pos, genus, tf)
|
||||
local genus = genus or rhynia.f.nominate(minetest.get_node(pos).name).genus
|
||||
local m,root_dim = minetest.get_meta(pos), rhynia.genera[genus].root_dim
|
||||
local mci = m:get_int("rhynia_ci")
|
||||
local catch = m:get_int("rhynia_gl")
|
||||
local matl = rhynia.genera[genus].structure and #rhynia.genera[genus].structure
|
||||
catch = catch and catch <= math.ceil(matl/root_dim) and "base" or "ext"
|
||||
local v = rhyn.f.ass_check(pos, rhyn.genera[genus].catchments[catch],_, tf and genus)
|
||||
local v = rhynia.f.ass_check(pos, rhynia.genera[genus].catchments[catch],_, tf and genus)
|
||||
v = v + mci
|
||||
m:set_int("rhyn_ci", v)
|
||||
m:set_int("rhynia_ci", v)
|
||||
return v
|
||||
end
|
||||
|
||||
rhyn.f.calc_condition = function(r) -- returns condition value given flat radius r
|
||||
--local switch = genus and rhyn.genera[genus].traits["pt2condition"]
|
||||
rhynia.f.calc_condition = function(r) -- returns condition value given flat radius r
|
||||
--local switch = genus and rhynia.genera[genus].traits["pt2condition"]
|
||||
local maxim = {}
|
||||
maxim.lowest = ((r*2)+1)^2
|
||||
maxim.highest = ((4*((r*2)+1)^2))*(1+math.log10(3))
|
||||
|
@ -131,7 +131,7 @@ rhyn.f.calc_condition = function(r) -- returns condition value given flat radius
|
|||
return maxim
|
||||
end
|
||||
|
||||
rhyn.f.average_light_spot = function(pos)
|
||||
rhynia.f.average_light_spot = function(pos)
|
||||
local area = {a = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, b = {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}}
|
||||
area = minetest.find_nodes_in_area(area.a,area.b,"air")
|
||||
local function lux_iterate()
|
||||
|
@ -145,7 +145,7 @@ rhyn.f.average_light_spot = function(pos)
|
|||
return area and area[1] and lux_iterate()
|
||||
end
|
||||
|
||||
rhyn.f.spot_check = function(pos, name, tf) -- Searches for node [name] 1 node around pos, returns integer of # found. If BOOL "tf" is true, returns table of all values of group "name". (some kind of "verbose" search)
|
||||
rhynia.f.spot_check = function(pos, name, tf) -- Searches for node [name] 1 node around pos, returns integer of # found. If BOOL "tf" is true, returns table of all values of group "name". (some kind of "verbose" search)
|
||||
local area = {a = {x = pos.x + 1, y = pos.y + 1, z = pos.z + 1}, b = {x = pos.x - 1, y = pos.y - 1, z = pos.z - 1}}
|
||||
area = minetest.find_nodes_in_area(area.a,area.b,name)
|
||||
local function tags_on_erryting()
|
||||
|
@ -164,7 +164,7 @@ end
|
|||
|
||||
|
||||
-- -- -- -- -- -- -- -- Plant
|
||||
rhyn.f.nominate = function(name) -- Returns a table containing genus, stage and stage-step if given the name of a node.
|
||||
rhynia.f.nominate = function(name) -- Returns a table containing genus, stage and stage-step if given the name of a node.
|
||||
local data = {}
|
||||
if(string.find(name,":"))then else error("Name "..name.." missing search pattern ':'!") end
|
||||
local name = string.sub(name,string.find(name,":"),string.len(name))
|
||||
|
@ -174,17 +174,17 @@ rhyn.f.nominate = function(name) -- Returns a table containing genus, stage and
|
|||
return data
|
||||
end
|
||||
|
||||
rhyn.f.select = function(pos) -- Performs the above nomination query on a position.
|
||||
return rhyn.f.nominate(rhyn.gn(pos).name)
|
||||
rhynia.f.select = function(pos) -- Performs the above nomination query on a position.
|
||||
return rhynia.f.nominate(rhynia.gn(pos).name)
|
||||
end
|
||||
|
||||
rhyn.f.rnode = function(def) -- Registers a node for use in future plant defs. Still WIP. Currently only "plantlike" and "plantlike-rooted" definitions.
|
||||
rhynia.f.rnode = function(def) -- Registers a node for use in future plant defs. Still WIP. Currently only "plantlike" and "plantlike-rooted" definitions.
|
||||
local nme = def.name
|
||||
local gps = def.groups or {planty = 1, rhyn = 1, [def.genus] = 1}
|
||||
local gps = def.groups or {planty = 1, rhynia = 1, [def.genus] = 1}
|
||||
local function inject_traits()
|
||||
local trait = rhyn.genera[def.genus].traits
|
||||
local trait = rhynia.genera[def.genus].traits
|
||||
for k,v in pairs(trait) do
|
||||
gps["rhyn_trait_"..k] = 1
|
||||
gps["rhynia_trait_"..k] = 1
|
||||
end
|
||||
end
|
||||
inject_traits()
|
||||
|
@ -207,11 +207,11 @@ rhyn.f.rnode = function(def) -- Registers a node for use in future plant defs. S
|
|||
on_construct = def.on_construct,
|
||||
on_punch = def.on_punch
|
||||
})
|
||||
table.insert(rhyn.nodes, nme)
|
||||
table.insert(rhynia.nodes, nme)
|
||||
end
|
||||
|
||||
|
||||
rhyn.f.register_emulsion = function(def) -- Registers a plant genus template with given parameters
|
||||
rhynia.f.register_emulsion = function(def) -- Registers a plant genus template with given parameters
|
||||
local ndef = {
|
||||
visual = def.visual or def.drawtype, -- String: "Plantlike" or "Plantlike rooted".
|
||||
genus = def.genus, -- String: Name for looking up definition variables.
|
||||
|
@ -233,42 +233,42 @@ rhyn.f.register_emulsion = function(def) -- Registers a plant genus template wit
|
|||
on_stagnate = def.acts.on_stagnate, on_wither = def.acts.on_wither, on_punch = def.acts.on_punch, on_propagate = def.acts.on_propagate
|
||||
} -- Functions defining plant behaviour.
|
||||
}
|
||||
rhyn.genera[def.genus] = ndef
|
||||
rhynia.genera[def.genus] = ndef
|
||||
end
|
||||
|
||||
|
||||
-- Plant-Behaviour
|
||||
rhyn.f.grow_chk = function(pos) -- returns true if growth interval in node meta is >= genus standard for current growth level
|
||||
local data = rhyn.f.nominate(rhyn.gn(pos).name)
|
||||
data.gl = minetest.get_meta(pos):get_int("rhyn_gl") -- gl = growth_level
|
||||
data.gi = minetest.get_meta(pos):get_int("rhyn_gi")
|
||||
rhynia.f.grow_chk = function(pos) -- returns true if growth interval in node meta is >= genus standard for current growth level
|
||||
local data = rhynia.f.nominate(rhynia.gn(pos).name)
|
||||
data.gl = minetest.get_meta(pos):get_int("rhynia_gl") -- gl = growth_level
|
||||
data.gi = minetest.get_meta(pos):get_int("rhynia_gi")
|
||||
data.nd = minetest.get_node(pos)
|
||||
data.nx = type(rhyn.genera[data.genus].growth_interval) == "number" and rhyn.genera[data.genus].growth_interval --or rhyn.genera[data.genus].growth_interval[data.gl]
|
||||
data.nx = type(rhynia.genera[data.genus].growth_interval) == "number" and rhynia.genera[data.genus].growth_interval --or rhynia.genera[data.genus].growth_interval[data.gl]
|
||||
return data.gi and data.gl and data.gi >= data.nx
|
||||
end
|
||||
|
||||
rhyn.f.growth_tick = function(pos, genus)
|
||||
local genus = genus or rhyn.f.nominate(minetest.get_node(pos).name).genus
|
||||
local mixed_growth = rhyn.genera[genus].traits["growth_opt"]
|
||||
local cond = rhyn.f.condition_tick(pos,genus)
|
||||
rhynia.f.growth_tick = function(pos, genus)
|
||||
local genus = genus or rhynia.f.nominate(minetest.get_node(pos).name).genus
|
||||
local mixed_growth = rhynia.genera[genus].traits["growth_opt"]
|
||||
local cond = rhynia.f.condition_tick(pos,genus)
|
||||
local gv = 1 + (mixed_growth and math.ceil(math.log10(cond)) or 0) -- Not a good way to attempt mixing growth and condition
|
||||
local function uptick(pos)
|
||||
local m = minetest.get_meta(pos)
|
||||
local mgi = m:get_int("rhyn_gi")
|
||||
m:set_int("rhyn_gi", mgi+gv)
|
||||
local mgi = m:get_int("rhynia_gi")
|
||||
m:set_int("rhynia_gi", mgi+gv)
|
||||
end
|
||||
return rhyn.f.grow_chk(pos) and rhyn.f.grow(pos) or uptick(pos)
|
||||
return rhynia.f.grow_chk(pos) and rhynia.f.grow(pos) or uptick(pos)
|
||||
end
|
||||
|
||||
rhyn.f.grow = function(pos) -- Rebuilds plant using next genus structure table
|
||||
rhynia.f.grow = function(pos) -- Rebuilds plant using next genus structure table
|
||||
|
||||
local data = rhyn.f.nominate(rhyn.gn(pos).name)
|
||||
data.gl = minetest.get_meta(pos):get_int("rhyn_gl") -- gl = growth_level
|
||||
local data = rhynia.f.nominate(rhynia.gn(pos).name)
|
||||
data.gl = minetest.get_meta(pos):get_int("rhynia_gl") -- gl = growth_level
|
||||
data.nd = minetest.get_node(pos)
|
||||
|
||||
local function despues(val) -- val must always be an integer to reference a value in genus[structure] either directly or proximally via growth_order
|
||||
local s,v,g = rhyn.genera[data.genus] ~= nil, val, data.genus
|
||||
local tab = rhyn.genera[g].growth_order or rhyn.genera[g].structure
|
||||
local s,v,g = rhynia.genera[data.genus] ~= nil, val, data.genus
|
||||
local tab = rhynia.genera[g].growth_order or rhynia.genera[g].structure
|
||||
tab = #tab
|
||||
v = s and v and v + 1 <= tab and v + 1 or 1
|
||||
return v
|
||||
|
@ -276,27 +276,27 @@ rhyn.f.grow = function(pos) -- Rebuilds plant using next genus structure table
|
|||
local function plantstruct(pos,v) -- Constructs plant layer-by-layer
|
||||
|
||||
local function airchk(pos)
|
||||
return rhyn.gn(pos).name == "air" or minetest.get_item_group(data.nd.name,"rhyn_plant") > 0
|
||||
return rhynia.gn(pos).name == "air" or minetest.get_item_group(data.nd.name,"rhynia_plant") > 0
|
||||
end
|
||||
|
||||
local function build(pos)
|
||||
local p2 = math.random(4)--data.nd.param2 -- ToDo: Add support for multiple param2s
|
||||
local p, s = pos and {x = pos.x, y = pos.y, z = pos.z},rhyn.genera[data.genus].structure[v]
|
||||
local p, s = pos and {x = pos.x, y = pos.y, z = pos.z},rhynia.genera[data.genus].structure[v]
|
||||
|
||||
for n = 1, #s do
|
||||
if(p and s[n] and airchk(p)) then local m = minetest.get_meta(p); local mm = m:get_int("rhyn_gi") ; rhyn.sn(p,s[n],p2) ; m:set_int("rhyn_gi",(mm-rhyn.genera[data.genus].growth_interval)) else end
|
||||
if(p and s[n] and airchk(p)) then local m = minetest.get_meta(p); local mm = m:get_int("rhynia_gi") ; rhynia.sn(p,s[n],p2) ; m:set_int("rhynia_gi",(mm-rhynia.genera[data.genus].growth_interval)) else end
|
||||
p.y = p.y + 1
|
||||
end
|
||||
end
|
||||
build(pos)
|
||||
rhyn.f.on_grow(pos,data.genus) -- HOOK:on_grow
|
||||
rhynia.f.on_grow(pos,data.genus) -- HOOK:on_grow
|
||||
end
|
||||
plantstruct(pos, despues(data.gl))
|
||||
end
|
||||
|
||||
rhyn.f.propagate = function(pos, dir, mag)
|
||||
local pos, genus = {x = pos.x, y = pos.y, z = pos.z}, rhyn.f.nominate(rhyn.gn(pos).name).genus
|
||||
local sdr,dir,mag = rhyn.genera[genus].spore_dis_rad, dir or rhyn.wind[1], mag or rhyn.wind[2]
|
||||
rhynia.f.propagate = function(pos, dir, mag)
|
||||
local pos, genus = {x = pos.x, y = pos.y, z = pos.z}, rhynia.f.nominate(rhynia.gn(pos).name).genus
|
||||
local sdr,dir,mag = rhynia.genera[genus].spore_dis_rad, dir or rhynia.wind[1], mag or rhynia.wind[2]
|
||||
local function proj(pos)
|
||||
local dir,mag,pos = {x = dir.x, y = 0, z = dir.z}, mag*math.random(1,8),{x = pos.x, y = pos.y, z = pos.z}
|
||||
pos = vector.add(pos,dir)
|
||||
|
@ -319,42 +319,42 @@ rhyn.f.propagate = function(pos, dir, mag)
|
|||
local pos = {x = pos.x, y = pos.y, z = pos.z}
|
||||
local pos2 = vector.add(pos,{x = math.random(-sdr,sdr), y = -1, z = math.random(-sdr,sdr)})
|
||||
local function ifair(pos)
|
||||
return rhyn.gn(pos).name == "air"
|
||||
return rhynia.gn(pos).name == "air"
|
||||
end
|
||||
|
||||
return pos and ifair({x = pos2.x, y = pos2.y + 1, z = pos2.z}) and rhyn.f.is_substrate(pos2) > 0 and minetest.set_node({x = pos2.x, y = pos2.y + 1, z = pos2.z}, {name = rhyn.genera[genus].structure[1][1] or rhyn.genera[genus].structure[1]})
|
||||
return pos and ifair({x = pos2.x, y = pos2.y + 1, z = pos2.z}) and rhynia.f.is_substrate(pos2) > 0 and minetest.set_node({x = pos2.x, y = pos2.y + 1, z = pos2.z}, {name = rhynia.genera[genus].structure[1][1] or rhynia.genera[genus].structure[1]})
|
||||
end
|
||||
sow(toground(proj(pos)))
|
||||
rhyn.f.on_propagate(pos,genus)
|
||||
rhynia.f.on_propagate(pos,genus)
|
||||
|
||||
end
|
||||
|
||||
rhyn.f.set_health = function(pos, val) -- Sets "health" metadata value at pos.
|
||||
return minetest.get_meta(pos):set_int("rhyn_h",val)
|
||||
rhynia.f.set_health = function(pos, val) -- Sets "health" metadata value at pos.
|
||||
return minetest.get_meta(pos):set_int("rhynia_h",val)
|
||||
end
|
||||
|
||||
rhyn.f.alter_health = function(pos, val) -- Adds "val" to metadata value "health" at pos.
|
||||
rhynia.f.alter_health = function(pos, val) -- Adds "val" to metadata value "health" at pos.
|
||||
local m = minetest.get_meta(pos)
|
||||
local h = m:get_int("rhyn_h")
|
||||
return m:set_int("rhyn_h", h + val)
|
||||
local h = m:get_int("rhynia_h")
|
||||
return m:set_int("rhynia_h", h + val)
|
||||
end
|
||||
|
||||
rhyn.f.check_health = function(pos) -- Returns integer.
|
||||
return minetest.get_meta(pos):get_int("rhyn_h")
|
||||
rhynia.f.check_health = function(pos) -- Returns integer.
|
||||
return minetest.get_meta(pos):get_int("rhynia_h")
|
||||
end
|
||||
|
||||
rhyn.f.is_live = function(pos) -- Returns boolean indicating.
|
||||
return minetest.get_meta(pos):get_int("rhyn_h") > 0 and true or false
|
||||
rhynia.f.is_live = function(pos) -- Returns boolean indicating.
|
||||
return minetest.get_meta(pos):get_int("rhynia_h") > 0 and true or false
|
||||
end
|
||||
|
||||
rhyn.f.kill_if_health = function(pos, val)
|
||||
return minetest.get_meta(pos):get_int("rhyn_h") < val and rhyn.rn(pos)
|
||||
rhynia.f.kill_if_health = function(pos, val)
|
||||
return minetest.get_meta(pos):get_int("rhynia_h") < val and rhynia.rn(pos)
|
||||
end
|
||||
|
||||
rhyn.f.MA13_456 = function(pos,prob)
|
||||
return math.random(1000) < prob and rhyn.rn(pos)
|
||||
rhynia.f.MA13_456 = function(pos,prob)
|
||||
return math.random(1000) < prob and rhynia.rn(pos)
|
||||
end
|
||||
|
||||
rhyn.f.check_vitals = function(pos, genus)
|
||||
return not rhyn.f.is_live(pos) and rhyn.genera[genus].acts.on_die(pos, genus) and rhyn.f.kill_if_health(pos, 1)
|
||||
rhynia.f.check_vitals = function(pos, genus)
|
||||
return not rhynia.f.is_live(pos) and rhynia.genera[genus].acts.on_die(pos, genus) and rhynia.f.kill_if_health(pos, 1)
|
||||
end
|
||||
|
|
14
init.lua
14
init.lua
|
@ -1,11 +1,11 @@
|
|||
-- luacheck: globals minetest rhyn shout
|
||||
-- luacheck: globals minetest rhynia shout
|
||||
local thismod = minetest.get_current_modname()
|
||||
local modpath = minetest.get_modpath(thismod)
|
||||
local tm = thismod..":"
|
||||
local pumswitch = minetest.registered_nodes["nc_lode:block_annealed"] -- Checks if the only decent minetest game is loaded, using a not-so-decently-named variable
|
||||
|
||||
rhyn = {c = {}, f = {},count = {},modules = {}, nodes = {}, genera = {}, wind = {{x = 0, y = 0, z = 0},0,3}}
|
||||
rhyn.count.ind = 0
|
||||
rhynia = {c = {}, f = {},count = {},modules = {}, nodes = {}, genera = {}, wind = {{x = 0, y = 0, z = 0},0,3}}
|
||||
rhynia.count.ind = 0
|
||||
function shout(thing)
|
||||
return minetest.chat_send_all(minetest.serialize(thing))
|
||||
end
|
||||
|
@ -23,14 +23,14 @@ end
|
|||
|
||||
loadfiles()
|
||||
|
||||
rhyn.wind[1] = rhyn.f.ghibli()
|
||||
rhyn.wind[2] =1.1
|
||||
rhynia.wind[1] = rhynia.f.ghibli()
|
||||
rhynia.wind[2] =1.1
|
||||
minetest.register_chatcommand("de", {
|
||||
params = "<name> <privilege>",
|
||||
description = "Remove privilege from player",
|
||||
privs = {privs=true},
|
||||
func = function(name, param)
|
||||
rhyn.f.poppyh()
|
||||
shout(rhyn.f.calc_condition(3))
|
||||
rhynia.f.poppyh()
|
||||
shout(rhynia.f.calc_condition(3))
|
||||
end
|
||||
})
|
16
ledger.lua
16
ledger.lua
|
@ -1,16 +1,16 @@
|
|||
-- luacheck: globals minetest rhyn shout
|
||||
-- luacheck: globals minetest rhynia shout
|
||||
|
||||
rhyn.subs = {}
|
||||
rhyn.subs.soils,rhyn.subs.waters,rhyn.subs.values = {},{},{}
|
||||
rhynia.subs = {}
|
||||
rhynia.subs.soils,rhynia.subs.waters,rhynia.subs.values = {},{},{}
|
||||
|
||||
local function register_substrates()
|
||||
local function assign_soil(k,v)
|
||||
local function soilgroup(k,v)
|
||||
local groups = v.groups
|
||||
local soilv = groups.soil
|
||||
groups["rhyn_subs_soil"] = soilv
|
||||
groups["rhynia_subs_soil"] = soilv
|
||||
minetest.override_item(k, {groups = groups})
|
||||
rhyn.subs.soils[#rhyn.subs.soils + 1], rhyn.subs.values[k] = k, soilv
|
||||
rhynia.subs.soils[#rhynia.subs.soils + 1], rhynia.subs.values[k] = k, soilv
|
||||
end
|
||||
|
||||
return soilgroup(k,v)
|
||||
|
@ -21,9 +21,9 @@ local function register_substrates()
|
|||
local function assign_water(k,v)
|
||||
local function watergroup(k,v)
|
||||
local groups = v.groups
|
||||
groups["rhyn_subs_water"] = 1 -- Later use abmmux key to differentiate flowing from source
|
||||
groups["rhynia_subs_water"] = 1 -- Later use abmmux key to differentiate flowing from source
|
||||
minetest.override_item(k, {groups = groups})
|
||||
rhyn.subs.waters[#rhyn.subs.waters + 1],rhyn.subs.values[k] = k, 1
|
||||
rhynia.subs.waters[#rhynia.subs.waters + 1],rhynia.subs.values[k] = k, 1
|
||||
end
|
||||
return watergroup(k,v)
|
||||
end
|
||||
|
@ -45,7 +45,7 @@ local rand = function(n,v)
|
|||
shout(num.."||"..n.."|||"..v)
|
||||
shout(num > v)
|
||||
if(num > v)then
|
||||
rhyn.f.poppyh()
|
||||
rhynia.f.poppyh()
|
||||
end
|
||||
end
|
||||
|
||||
|
|
12
logic.lua
12
logic.lua
|
@ -1,21 +1,21 @@
|
|||
-- luacheck: globals minetest rhyn shout
|
||||
-- luacheck: globals minetest rhynia shout
|
||||
|
||||
local thismod = minetest.get_current_modname()
|
||||
local tm = thismod
|
||||
|
||||
nodecore.register_limited_abm({
|
||||
label = "Rhynia plant tick",
|
||||
nodenames = {"group:rhyn_plant"},
|
||||
label = "rhyniaia plant tick",
|
||||
nodenames = {"group:rhynia_plant"},
|
||||
interval = 0.1,
|
||||
chance = 1,
|
||||
ignore_stasis = false,
|
||||
action = function(pos, node)
|
||||
local dat = node.name and rhyn.f.nominate(node.name) -- Identity check
|
||||
local dat = node.name and rhynia.f.nominate(node.name) -- Identity check
|
||||
if(dat)then
|
||||
-- Check vitals
|
||||
-- Need to Die?
|
||||
rhyn.genera[dat.genus].acts.on_tick(pos,dat.genus) -- Do tick behaviour
|
||||
rhyn.f.on_propagate(pos,dat.genus)
|
||||
rhynia.genera[dat.genus].acts.on_tick(pos,dat.genus) -- Do tick behaviour
|
||||
rhynia.f.on_propagate(pos,dat.genus)
|
||||
else end
|
||||
return
|
||||
|
||||
|
|
2
mod.conf
2
mod.conf
|
@ -1 +1,3 @@
|
|||
name = rhynia
|
||||
description = "Functions indended to support a few mods adding a variety of fauna to Nodecore"
|
||||
depends = nc_api_all, nc_items, nc_terrain, nc_tree
|
|
@ -1,8 +1,8 @@
|
|||
-- luacheck: globals minetest rhyn shout
|
||||
-- luacheck: globals minetest rhynia shout
|
||||
|
||||
rhyn.f.pollen = function(pos,dir,mag,tex,h)
|
||||
rhynia.f.pollen = function(pos,dir,mag,tex,h)
|
||||
local tex = tex
|
||||
local dir,mag,bas = dir or rhyn.wind[1], mag or rhyn.wind[2], {x = 1, y = 1, z = 1}
|
||||
local dir,mag,bas = dir or rhynia.wind[1], mag or rhynia.wind[2], {x = 1, y = 1, z = 1}
|
||||
minetest.add_particlespawner({
|
||||
amount = 10,
|
||||
time = 1,
|
||||
|
|
Loading…
Reference in New Issue