diff options
Diffstat (limited to 'lode_stylus.lua')
| -rw-r--r-- | lode_stylus.lua | 396 | 
1 files changed, 31 insertions, 365 deletions
| diff --git a/lode_stylus.lua b/lode_stylus.lua index 99d4c65..823e3c8 100644 --- a/lode_stylus.lua +++ b/lode_stylus.lua @@ -1,10 +1,3 @@ ---TODO: --- Anvil craft bug report? ---[[ Note: when Liberties is disabled but there's a stone stylus with crossy Liberties -	patt, it always sets pattern to gifty and can't change patt anymore. However I -	probably won't fix this as this is just a side effect of the crossy->gifty alias -	that atleast doesn't make the game error this way, other patts, e.g. starcrossy, -	when on stylus and Liberties uninstalled makes game error when etching--]]  --[[  	NB More Concrete - Adds more concrete types to NodeCore @@ -132,7 +125,10 @@ function nb_more_concrete.register_patterns_finish(table)  end -- register_patterns_finish --- Liberties install bool to easily check if it's installed below and later +-- Liberties is a mod which defines some patts too, one of which, Crossy, suprisingly +-- turned out to be the same as the Gifty one below. +-- So I'll alias them to skip installing one uselessly by checking for this variable +-- which will show if it's enabled  if (core.get_modpath("lc_liberties")) then  	nb_more_concrete.liberated = true  end @@ -141,18 +137,14 @@ end  -- Bricky, Vermy, Hashy, Bindy, Verty, Horzy, Boxy, Iceboxy  --  -- Oh my goodness --- What a wall of text! <- Written when this was an actual nice wall of text btw, now it has following comment wall etc. +-- What a wall of text! <- Written when this was an actual nice wall of text btw, now it has this if etc.  nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Blank", blank=true})  nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Liny", paramtype2="facedir"}) --- I realised that this 'Gifty' pattern is exactly the same as the 'Crossy' one in the Liberties mod. --- Maybe it's not that much of a problem, at most I could alias the Liberties' crosses to these gifts or something. --- However, I'm not sure if I need to give them copyright/license credit, even though I came up with this myself. --- -Later/edit: I will  if (nb_more_concrete.liberated) then -- Alias gifty to crossy, this gets checked for later to not define gifty anymore  	nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Gifty", alias="crossy"})  else 				-- liberties could've gotten uninstalled, so let's alias its crosses back to Santa  	nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Gifty", aliased="crossy"}) -end -- Note in the crafts later there's no check for alias variable, just once for "crossy" instead +end -- Note in the crafts later there's no check for alias variable, just once for "crossy" instead manually added  nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Tily"})  nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Quady"})  nb_more_concrete.register_patterns(nb_more_concrete.annealed_patterns,{description = "Checkery"}) @@ -164,7 +156,7 @@ nb_more_concrete.register_patterns_finish(nb_more_concrete.annealed_patterns)  ---	Tempered (for now same as annealed)  --nb_more_concrete.tempered_patterns=nb_more_concrete.annealed_patterns ----	Later probably also lux annealed and lux tempered (but _probably_ not boost lux and hot lode versions) +---	Later probably also lux annealed and lux tempered (but /probably/ not boost lux and hot lode versions) @@ -192,26 +184,10 @@ local stylish_def = {  	},  	-- Change toolcaps depending on temper  	bytemper = function (item,def) -		-- Custom cool/hot indicator groups to avoid default lode cook/cool ABMs, -		-- custom ABMs will be implemented later -		-- Hopefully no other mods use the original groups for lode things, -		--[[ as I can't predict them here. They would need to add support for this? -		-- EDIT: Nevermind! I can just do 1 aism instead of all! -		def.lode_temper_cool = nil -		def.groups.lode_temper_cool=nil -		def.nb_lode_temper_cool = true -		def.groups.nb_lode_temper_cool=1--]]  		if (item.name == "tempered") then  			def.tool_capabilities = nc.toolcaps({scratchy=5})  		elseif (item.name == "hot") then -- Hot doesn't actually melt everything and scratch=9999  			def.tool_capabilities = nc.toolcaps({scratchy=3}) -			--[[ Replace also cool nb groups set before the if -			def.lode_temper_hot = nil -			def.nb_lode_temper_cool = nil -			def.groups.nb_lode_temper_cool=nil -			def.groups.lode_temper_hot=nil -			def.nb_lode_temper_hot = true -			def.groups.nb_lode_temper_hot=1--]]  		end  		-- Create nb_scratchy groups for crafts later  		--[[ This tool_capabilities table looks like this: @@ -241,17 +217,7 @@ local stylish_def = {  		-- Get pattern  		local patt = stack:get_meta():get_string("pattern")  		if not patt --[[or patt == ""--]] then -			--- Doesn't work, as stack cannot be swapped -			--[[ Let's randomly pick a pattern from the right table, -			-- so it isn't kept blank when changing temper (after which it turns to "") -			patt = nc.pickrand(patterns).name -			print(dump(patt)) -			--patt = patterns[math.random(9)].name -			stack:get_meta():set_string("pattern",patt) -			print(dump(stack:to_table()))--]]  		return desc end -		--print (patt) -  		-- Add to desc  		-- First, check for crossy alias, so name can be changed to crossy instead  		if (nb_more_concrete.liberated and patt=="gifty") then @@ -266,39 +232,6 @@ local stylish_def = {  		return desc  	end, -	--[[ Set new pattern upon creation -	on_construct = function(pos) -		print("ON CONSTRUCTOR") -		tool = core.get_node[pos] -		-- Patterns: later set dependant on temper state -		patterns = nb_more_concrete.annealed_patterns -		tool:get_meta():set_string("pattern", nc.pickrand(patterns).name) -		-- Set the node -		core.swap_node(pos,tool) -	end--]] - -	-- Preserve meta for patterns across temper state changes (e.g. heating up the stylus) -	-- -	-- Later will choose a new pattern of the same index -	-- if the pattern table is switched (e.g. annealed -> tempered) -	--[[preserve_metadata = function(_, _, oldmeta, drops) -		local patt = oldmeta:get_string("pattern") -		if (patt) then -			drops[1]:get_meta():set_string("pattern", patt) -			return drops -		end -	end]] -- It doesn't work! It gets defined into the tool but doesn't work when -		--					changing temper state -	-- What actually Not works is nc's on_stack_change (pos,node,stack,old) -	--[[on_stack_change = function (_, __, stack, ___) -		print("ON STACK CHANGE!") -		-- Patterns: later set dependant on temper state -		patterns = nb_more_concrete.annealed_patterns -		stack:get_meta():set_string("pattern", nc.pickrand(patterns).name) -		-- Set the node -		return stack -	end--]] -  }  -- NC versions older than a load of gibberish:  -- 5002ea97bd9ab058bb11d7f639612f5a894020c9 @@ -418,139 +351,8 @@ end  ---------->	Common lode crafts (create/recycle) and special patt aism ---- Specific cool/cook ABMs --- The ABMS of NodeCore don't offer a callback, so it isn't possible to --- make one so the stylus changes its pattern. This is why I need to make --- my own. --- --- Normally the after function in those ABMs had this local, --- here it is modified ---[[local function replacestack(pos, temper) -	-- Get stack -	local stack = nc.stack_get(pos) -	--if stack:is_empty() then stack = nil end -	-- Node alternative to stack/^ -	--local node = core.get_node(pos) -	-- Name from stack or node -	local name = --[[stack and--]]--[[ stack:get_name()-- or node.name -	-- Def -	local def = core.registered_items[name] or {} -	-- Alt lode temper -	local alt = def["lode_alt_" .. temper] -	if not alt then return error("no " .. alt .. " alt for " .. name) end - -	--if stack then -	-- repl - alt stack (repl-acement) -	local repl = ItemStack(alt) -	-- qty - stack count (1?) (not sure what qty means) -	local qty = stack:get_count() -	if qty == 0 then qty = 1 end -- min 1 - -	-- Same amount of items as earlier -	repl:set_count(qty * repl:get_count()) - -	-- The thing I wanted to do: set a new pattern -	local patterns = nb_more_concrete.annealed_patterns -- Depend later on temper -	repl:get_meta():set_string("pattern", nc.pickrand(patterns).name) - -	nc.stack_set(pos, repl) - -	--[[else -- Omit, stylys is only as stack -		core.set_node(pos, {name = alt}) -		nc.fallcheck(pos) -	end--]] -	-- Witness murder of metallurgizing victim? (what does that even mean? gotta ask ironman...) -	--[[nc.witness(pos, "metallurgize " .. alt) -end--]] - --- Here are the crafts and aism from NC, modified --- (I don't think it is worth defining a local function to define these --- all, as they have different values in every variable) ---[[nc.register_craft({ -	label = "nb lode stylus heating", -	action = "cook", -	touchgroups = {flame = 3}, -	neargroups = {coolant = 0}, -	cookfx = true, -	duration = 30, -- -	nodes = {{match = {nb_lode_temper_cool = true, count = false}}}, -	after = function(pos) return replacestack(pos, "hot") end -}) - -nc.register_craft({ -	label = "nb lode stylus annealing", -	action = "cook", -	touchgroups = {flame = 0}, -	neargroups = {coolant = 0}, -	cookfx = {smoke = true, hiss = true}, -	duration = 120, -- -	priority = -1, -- -	nodes = {{match = {nb_lode_temper_hot = true, count = false}}}, -	after = function(pos) return replacestack(pos, "annealed") end -}) - -nc.register_craft({ -	label = "nb lode stylus quenching", -	action = "cook", -	touchgroups = {flame = 0}, -	neargroups = {coolant = 1}, -	cookfx = true, -	nodes = {{match = {nb_lode_temper_hot = true, count = false}}}, -	after = function(pos) return replacestack(pos, "tempered") end -}) - --- Instead of replacestack, the AISM here uses this local -local function coolto(pos, stack, tempername) -	-- Get alt from def -	local def = core.registered_items[stack:get_name()] -	if not def then return end -	local alt = def["lode_alt_" .. tempername] -	if not alt then return end - -	-- Others aside from stack -	nc.witness(pos, "metallurgize " .. alt) -	nc.playcookfx(pos, true, "hiss", 80, 0.2) - -	-- Make final stack -	local repl = ItemStack(alt .. " " .. stack:get_count()) -	-- Set pattern -	local patterns = nb_more_concrete.annealed_patterns -- Depend later on temper -	repl:get_meta():set_string("pattern", nc.pickrand(patterns).name) -	--print(repl:get_meta():get_string("pattern")) -	-- -	return repl -end - -nc.register_aism({ -	label = "nb tong-carried lode stylus cooling", -	itemnames = {"nc_lode:stylus_hot"}, -- for some reason "group:nb_lode_temper_hot" didn't work -	priority=2, -	action = function(stack, data) -		-- Don't conflict with cooking ABMs already operating on stack nodes <-NC comment -		if data.node then return end - -		-- Fast tempering in water -		if nc.quenched(data.pos) then -			return coolto(data.pos, stack, "tempered") -		end - -		-- Annealing -		local meta = stack:get_meta() -- Help variable, also to not save meta to stack? -		local exp = meta:get_float("annealtime") or 0 - -		if exp > 0 and exp <= nc.gametime then -- Final anneal -			return coolto(data.pos, stack, "annealed") -		elseif exp <= 0 then -- -			meta:set_float("annealtime", nc.gametime + 60) -		end - -		nc.playcookfx(data.pos, {smoke = true}, "", 2, 1) -		return stack -	end -})--]] - --- Or, instead of re-defining the heating/cooling and tong-carrying mechanics, --- how about just 1 aism to replace a stylus with no pattern with one set? +-- Instead of re-defining the heating/cooling and tong-carrying mechanics, +-- let's make just 1 aism to replace a stylus with no pattern with one set.  -- This seems to be a very nice and simple solution, but it has a side effect:  -- the stylus is visibly changing to another pattern. I don't think it's that  -- bad though. @@ -570,7 +372,6 @@ nc.register_aism({  		return stack  	end  }) ---  -- Craft the stylus on anvil @@ -726,7 +527,6 @@ local function regetched(basenode, etch, patt)  	local pattname = mn .. ":" .. etch.name .. "_" .. patt.name -- mn:othermn_concrete_etchy  	-- Pliant name, same as pattname but with _ply  	local plyname = pattname .. "_ply" -- mn:othermn_concrete_etchy_ply -	-- If it isn't registered, let's make it  	-- Pliant block  	if not core.registered_nodes[plyname] then  		local def = {} -- Final def, to which we add @@ -738,7 +538,7 @@ local function regetched(basenode, etch, patt)  		def.tiles = applytile(def.tiles, patttile(etch, patt))  		def.tiles = applytile(def.tiles, etch.pliant_tile) -		def.name = nil -- Already done at the end of this ifknot in core.register_node +		def.name = nil -- Name already done at the end of this ifnot in core.register_node  		def.description = patt.description .. -- Etchy Pliant Concrete  			" Pliant " .. basenode.description @@ -749,115 +549,18 @@ local function regetched(basenode, etch, patt)  		defaultgroup(def, mn .. "_pattern_" .. patt.name)  			--end  		defaultgroup(def, mn .. "_pliant") -		if def.paramtype2 == "4dir" then +		--[[if def.paramtype2 == "4dir" then -- unused  			def.on_rightclick = function(pos, node) -- Rotate upon rightclick  				node.param2 = (node.param2 + 1) % 4 -- Capped param2 at 3  				nc.set_loud(pos, node)  			end -		end -		--- Actually, I scrap this, clockwise rotation of sides would be better? -		-- Extra paramtype2 compared to original NC with also 4 rotations; with this -		-- 4dir replacement, a copy of a pattern just to make it rotate vertically -		-- too (like horzy and verty patterns) wouldn't be needed, useful e.g. for -		-- my line pattern. It could fit in NC, even though as I said, there is -		-- horzy and verty which could seem intentional anyway, as they're useful as -		-- seperate textures for texturepacks such as Wintercore, which makes them -		-- bit different, unlike my line texture (|/-) -		-- 					  ^\it is cool my texture is implemented in ASCII, eh? No. -		--if def.paramtype2 == "4dirfacedir" then -		--[[ -		-- I wanted to make the texture rotate in seemingly the same way, -		-- but each time it is rotated the textures face a slightly different dir. -		-- -		-- (I mean, e.g.: (^/v) and (v/v) (shown in format explained below)----------\ -		-- look the same, as they make (|/|) with e.g. line texture)		      \ -		--									       \ -		-- This way, it is maybe possible to make invisible details with the pliant	\ -		-- texture, but doesn't impair the game in any way.				 \ -		--										  \ -		-- For this, I made the following while testing rotating facedir liny concrete...  | -												   v -			(format: (top/side in front of you), where it can show dir ^v<> or line | -) - -				(sorted as (|/|) -> (-/|) -> (|/-) -> (-/-)) - -				    Confusing Sorted texture directions -					in every param2 facedir... - -		In north						In east -		Flip the dir thingy after the / for south?	Flip the thingy before the / for west? - -		 4(^/^)(like0)						13(^/^)(like1) <- unused param2s -		 8(^/v)(like6,22)					19(v/v) -		20(v/v)(like10)						21(^/v)(like15) -		22(^/v)(like6,8)					23(v/v)(like19) - -		-0,1,5,12						-1,0,12,4 -		 0(^/^)							 1(^/^) -		 1(>/^)							 0(</^) -		 5(^/<)							 12(^/>) -		12(>/>)							 >4<,5,6,7(</<) -		-2,3,7,16						-3,2,14,8 -		 2(v/^)							 3(v/^) -		 3(</^)							 2(>/^) -		 7(^/>)							 14(^/<) -		16(</<)							 >8<,9,10,11(>,>) -		-6,21,11,						-15,20,16,5 -		 6(^/v)							 15(^/v) -		21(>/v)							 20(>/v) -		11(v/<)							 16(v/<) -		>13<,14,15(>/>)						 4,>5<,6,7(</<) -		-10,23,							-17,22,18,9 -		10(v/v)							 17(v/^) -		23(</v)							 22(</v) -		 9(v/>)							 18(v/>) -		>17<,18,19(</<)						 8,>9<,10,11(>,>) -		--]]--[[ -			if (core.settings:get_bool("nb_more_concrete_line_rotation",true)) then -				def.on_rightclick = function(pos, node, clicker) -- Rotate upon rightclick -					local cryptic_tableyNS= -- North/South. -					-- It's horrible! Or is it? I just typed these values based on the previous big comment. -					-- Next params for... -					-- 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 -					  { 1, 5, 3, 7, 1,12,21,16,21,17,23,13, 2,10,10,10, 6, 0, 0, 0,10,11,21, 9} -					local cryptic_tableyEW= -- East/West! -					-- 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 -					  {12, 0,14, 2, 3,17, 3,17,15, 1,15, 1, 4, 0, 8,20, 5,22, 9, 0,16,20,18, 0} -					-- Figure out if yaw of clicker is north/south to set node.param2 accordingly -					local yow=clicker:get_look_horizontal() -					-- I figured out these values by dumping clicker:get_look_horizontal() when right-clicking node in game -					if (yow>5.502 or yow<0.782 or (yow>2.358 and yow<3.921)) then -						node.param2 = cryptic_tableyNS[node.param2+1] -- +1 because lua doesn't start indexes with 0 -					else -						node.param2 = cryptic_tableyEW[node.param2+1] -- -					end -					nc.set_loud(pos, node) -					-- It works! -				end -			else -- Also option for optic-like rotation -				def.on_rightclick=nc.rotation_on_rightclick -				def.groups.nc_api_rotate_under=1 -			end -- core.settings:get_bool(... -			-- Correct paramtype2 -			def.paramtype2="facedir" -		end --]]--  4dirfacedir +		end--]]  		if (def.paramtype2=="facedir") then -			-- I wanted to implement clockwise rotation on a specific side of a block, -			-- but I have little idea how to get a specific side. +			-- I wanted to implement clockwise rotation on any side of a block, +			-- but I have little idea how to get the selected side.  			-- For now, let's use NC's rotation_on_rightclick  			def.on_rightclick=nc.rotation_on_rightclick -			def.groups.nc_api_rotate_under=1 -			--[[def.on_rightclick = function (pos,node,clicker, a, b) -				local eye_pos = clicker:get_pos() -				eye_pos.y=clicker:get_properties().eye_height -				local the_raycast = core.raycast(eye_pos,pos,false,true) -				--print(dump(the_raycast)) -				print(dump(the_raycast:next())) -				--print(dump(b)) -			end--]] -        --[[ <...I looked on the dark web and found the param2s for clockwise rotations...> -                nevermind not gonna show them numbers here yet because I didn't show the work's license -        --]] +			def.groups.nc_api_rotate_under=1 -- required to work  		end -- facedir  		-- Add extra nb group, used mainly for pliant cure ABM  		def.groups.nb_concrete_etchable = 1 @@ -869,8 +572,7 @@ local function regetched(basenode, etch, patt)  		core.register_node(":" .. plyname, def)  	end  		--if not patt.blank then -	-- Here we use the pattname -	-- This is the solid/set block +	-- Set block  	if not core.registered_nodes[pattname] then  		local def = {} -- Final def like earlier  		nc.underride(def, etch.solid) @@ -903,19 +605,12 @@ end  --  -- Etchmakers! ---[[local mudgroups = { -	cracky = 0, -	crumbly = 1, -	snappy = 0, -	choppy = 0, -	stone = 0, -	smoothstone = 0, -	rock = 0 -}--]] +-- (here I call the functions to make the concretes) + +--local mudgroups = {...  	--local function buildpatterns() --- For each PATTern --- Define patt.name and patt.pattern_tile +-- Make sure patt.name and patt.pattern_tile are defined  for _, patt in pairs(nb_more_concrete.annealed_patterns) do  	--nc.translate_inform(patt.description)  	patt.name = patt.name or string:gsub(string:lower(patt.description), @@ -926,21 +621,7 @@ end  -- For every concrete, modify etchable correctly  -- Already done by NC  --[[for _, etch in pairs(nc.registered_concrete_etchables) do -	-- Not sure if this check is required, as nc probably already checked for basename -	-- But I keep it -	if not etch.basename then return error("etchable (concrete) basename required") end -	-- replace nc_ with nothing like NC does, it ignores nb and others but should be ok anyway -	etch.name = etch.name or string:gsub(string:lower(string:gsub( -			etch.basename, "^nc_", "")), "%W", "_") -	-- pliant -	etch.pliant_tile = etch.pliant_tile or "^(" ..-- ^(nc_concrete_pliant.png^[opacity:64) -	"nc_concrete_pliant.png^[opacity:" .. (etch.pliant_opacity or 64) .. ")" -	etch.pliant = etch.pliant or {} -	etch.pliant.groups = etch.pliant.groups or mudgroups -	etch.pliant.groups.concrete_etchable = 1 - -	etch.solid = etch.solid or {} -	etch.drop_in_place = etch.drop_in_place or etch.basenode +	...  end--]]  for _, etch in pairs(nc.registered_concrete_etchables) do  	local basenode = core.registered_nodes[etch.basename] @@ -959,14 +640,10 @@ end  local function getdefs(node)  	local def = core.registered_items[node.name] or {}  	-- If the pattern_def is blank, it will return nc's pattern list, which breaks the recipe -	-- Returned can only be the nb list in general; should I add a universal check for it? -	-- 		This is probably sufficient though (and universal - works same in stone (stylus) craft) +	-- (Returned can only be the nb list in general; should I add a universal check for it? +	-- 		This is probably sufficient though (and universal - works same in stone (stylus) craft))  	if (def.pattern_def.blank) then  		return nb_more_concrete.annealed_patterns[1], def.etch_def -	--[[elseif (nb_more_concrete.liberated and -- Now there's check for this in lode craft, -						so there doesn't need to be another one in stone craft -			def.pattern_def.name == "crossy") then -- Same with alias gifty to crossy -		return nb_more_concrete.annealed_patterns[3], def.etch_def--]]  	end  	return def.pattern_def, def.etch_def  end @@ -974,7 +651,6 @@ end  -- Make pliant node make noise and rotate if paramtype2 is set  local function setply(pos, nodename, player)  	local node = {name = nodename} -	--print(node.name)  	if core.registered_nodes[node.name].paramtype2 == "4dir"  					and player then  		node.param2 = core.dir_to_fourdir( @@ -1007,7 +683,6 @@ nc.register_craft({  		}  	},  	after = function(pos, data) -		--print("LODELY FUNCTIONB!")  		-- Get pattdef, etchdef  		local pattdef, etchdef = getdefs(core.get_node(pos))  		if not (pattdef and etchdef) then return end @@ -1027,12 +702,9 @@ nc.register_craft({  		if (wieldpatt == "blank") then  			setpref = "nc_concrete:" .. etchdef.name .. "_"  		end -		--print (wieldpatt) -		--print (pattdef.name)  		-- If wielded pattern isn't equal to block's pattern  		if wieldpatt and wieldpatt ~= "" and wieldpatt ~= pattdef.name then  			-- Set the pliant block and return -			--print(setpref..wieldpatt.."_ply") -- primitive debugging methods  			setply(pos, setpref .. wieldpatt .. "_ply", data.crafter) -- mn:chromete_etchy_ply  			return  		end @@ -1040,7 +712,6 @@ nc.register_craft({  		-- Now we know that next pattern will be set for stylus and block instead  		-- Get next pattern  		local nxpatt = pattdef.next.name -		--print(nxpatt)  		-- Check for blank like earlier  		if (nxpatt == "blank") then  			setpref = "nc_concrete:" .. etchdef.name .. "_" @@ -1048,7 +719,6 @@ nc.register_craft({  			setpref = mn .. ":" .. etchdef.name .. "_"  		end  		-- So it can be set on pliant -		--print("next: " .. setpref..nxpatt.."_ply")  		setply(pos, setpref .. nxpatt .. "_ply", data.crafter)  		-- And set as next pattern for stylus  		wield:get_meta():set_string("pattern", nxpatt) @@ -1088,8 +758,6 @@ nc.register_craft({  	after = function(pos, data)  		local pattdef, etchdef = getdefs(core.get_node(pos))  		if not (pattdef and etchdef) then return end -		--[[ Here we cannot have nb patterns (useless, blank's already not nb_concrete_etchable) -		if (pattdef.name == "blank") then pattdef = nc.concrete_patterns[1] end]]  		local setpref = "nc_concrete:" .. etchdef.name .. "_" @@ -1114,12 +782,8 @@ nc.register_craft({  	end  })  --- Pliant concrete cure ABM ---  -- The NC pliant cure ABM doesn't work for our pliants,  -- since it only works with "nc_concrete:" concretes. --- Should I report that so NC just removes the "_ply" off of the block name, --- 				working with this mod and others? Maybe not? ---  -- Here's an ABM that works (from NC)  nc.register_soaking_abm({  	label = "pliable nb concrete cure", @@ -1132,15 +796,16 @@ nc.register_soaking_abm({  			1, {"group:concrete_flow", "group:water"}) then  			return false  		end	-- Fire speeding up cure -			local found = nc.find_nodes_around(pos, "group:igniter", 1) -			return #found + 1 -		end, +		local found = nc.find_nodes_around(pos, "group:igniter", 1) +		return #found + 1 +	end, -		soakcheck = function(data, pos, node) -		if data.total < 100 then +	soakcheck = function(data, pos, node) +		if data.total < 100 then -- Create smoke during curing  			nc.smokefx(pos, 1, data.rate)  			return  		end +		-- Get the final cured node  		local pattdef, etchdef = getdefs(core.get_node(pos))	-- Fixed |  		if not (pattdef and etchdef) then return end		-- bit   V  		local curename = mn .. ":" .. etchdef.name .. "_" .. pattdef.name -- nb_more_concrete:mn_concrete_etchy @@ -1148,8 +813,9 @@ nc.register_soaking_abm({  		nc.smokeburst(pos)  		nc.dynamic_shade_add(pos, 1) +		--  		nc.set_loud(pos, {name = curename, param2 = node.param2})  		nc.witness(pos, "cure pliant concrete")  		return false  	end -}) -- END! +}) -- END | 
