digtron = {} dofile( minetest.get_modpath( "digtron" ) .. "/util.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/doc.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/awards.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/class_pointset.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/class_layout.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/entities.lua" ) dofile( minetest.get_modpath( "digtron" ) .. "/node_misc.lua" ) -- contains structure and light nodes dofile( minetest.get_modpath( "digtron" ) .. "/node_storage.lua" ) -- contains inventory and fuel storage nodes dofile( minetest.get_modpath( "digtron" ) .. "/node_diggers.lua" ) -- contains all diggers dofile( minetest.get_modpath( "digtron" ) .. "/node_builders.lua" ) -- contains all builders (there's just one currently) dofile( minetest.get_modpath( "digtron" ) .. "/node_controllers.lua" ) -- controllers dofile( minetest.get_modpath( "digtron" ) .. "/node_axle.lua" ) -- Rotation controller dofile( minetest.get_modpath( "digtron" ) .. "/node_crate.lua" ) -- Digtron portability support dofile( minetest.get_modpath( "digtron" ) .. "/recipes.lua" ) -- Enables the spray of particles out the back of a digger head and puffs of smoke from the controller local particle_effects = minetest.setting_getbool("enable_particles") -- this causes digtrons to operate without consuming fuel or building materials. local digtron_creative = minetest.setting_getbool("digtron_creative_mode") -- when true, lava counts as protected nodes. local lava_impassible = minetest.setting_getbool("digtron_lava_impassible") -- when true, diggers deal damage to creatures when they trigger. local damage_creatures = minetest.setting_getbool("digtron_damage_creatures") digtron.creative_mode = digtron_creative -- default false digtron.particle_effects = particle_effects or particle_effects == nil -- default true digtron.lava_impassible = lava_impassible or lava_impassible == nil -- default true digtron.diggers_damage_creatures = damage_creatures or damage_creatures == nil -- default true -- Enables the spray of particles out the back of a digger head and puffs of smoke from the controller local particle_effects = minetest.setting_getbool("enable_particles") -- this causes digtrons to operate without consuming fuel or building materials. local digtron_creative = minetest.setting_getbool("digtron_creative_mode") -- when true, lava counts as protected nodes. local lava_impassible = minetest.setting_getbool("digtron_lava_impassible") -- when true, diggers deal damage to creatures when they trigger. local damage_creatures = minetest.setting_getbool("digtron_damage_creatures") digtron.creative_mode = digtron_creative -- default false digtron.particle_effects = particle_effects or particle_effects == nil -- default true digtron.lava_impassible = lava_impassible or lava_impassible == nil -- default true digtron.diggers_damage_creatures = damage_creatures or damage_creatures == nil -- default true -- How many seconds a digtron waits between cycles. Auto-controllers can make this wait longer, but cannot make it shorter. local digtron_cycle_time = tonumber(minetest.setting_get("digtron_cycle_time")) if digtron_cycle_time == nil or digtron_cycle_time < 0 then digtron.cycle_time = 1.0 else digtron.cycle_time = digtron_cycle_time end -- How many digtron nodes can be moved for each adjacent solid node that the digtron has traction against local digtron_traction_factor = tonumber(minetest.setting_get("digtron_traction_factor")) if digtron_traction_factor == nil or digtron_traction_factor < 0 then digtron.traction_factor = 3.0 else digtron.traction_factor = digtron_traction_factor end -- fuel costs. For comparison, in the default game: -- one default tree block is 30 units -- one coal lump is 40 units -- one coal block is 370 units (apparently it's slightly more productive making your coal lumps into blocks before burning) -- one book is 3 units -- how much fuel is required to dig a node if not in one of the following groups. local digtron_dig_cost_default = tonumber(minetest.setting_get("digtron_dig_cost_default")) if digtron_dig_cost_default == nil or digtron_dig_cost_default < 0 then digtron.dig_cost_default = 0.5 else digtron.dig_cost_default = digtron_dig_cost_default end -- eg, stone local digtron_dig_cost_cracky = tonumber(minetest.setting_get("digtron_dig_cost_cracky")) if digtron_dig_cost_cracky == nil or digtron_dig_cost_cracky < 0 then digtron.dig_cost_cracky = 1.0 else digtron.dig_cost_cracky = digtron_dig_cost_cracky end -- eg, dirt, sand local digtron_dig_cost_crumbly = tonumber(minetest.setting_get("digtron_dig_cost_crumbly")) if digtron_dig_cost_crumbly == nil or digtron_dig_cost_crumbly < 0 then digtron.dig_cost_crumbly = 0.5 else digtron.dig_cost_crumbly = digtron_dig_cost_crumbly end -- eg, wood local digtron_dig_cost_choppy = tonumber(minetest.setting_get("digtron_dig_cost_choppy")) if digtron_dig_cost_choppy == nil or digtron_dig_cost_choppy < 0 then digtron.dig_cost_choppy = 0.75 else digtron.dig_cost_choppy = digtron_dig_cost_choppy end -- how much fuel is required to build a node local digtron_build_cost = tonumber(minetest.setting_get("digtron_build_cost")) if digtron_build_cost == nil or digtron_build_cost < 0 then digtron.build_cost = 1.0 else digtron.build_cost = digtron_build_cost end -- digtron group numbers: -- 1 - generic digtron node, nothing special is done with these. They're just dragged along. -- 2 - inventory-holding digtron, has a "main" inventory that the digtron can add to and take from. -- 3 - digger head, has an "execute_dig" method in its definition -- 4 - builder head, has a "test_build" and "execute_build" method in its definition -- 5 - fuel-holding digtron, has a "fuel" invetory that the control node can draw fuel items from. Separate from general inventory, nothing gets put here automatically. -- 6 - holds both fuel and main inventories minetest.register_lbm({ name = "digtron:sand_digger_upgrade", nodenames = {"digtron:sand_digger"}, action = function(pos, node) local meta = minetest.get_meta(pos) local offset = meta:get_string("offset") local period = meta:get_string("period") minetest.set_node(pos, {name = "digtron:soft_digger", param2 = node.param2}) meta:set_string("offset", offset) meta:set_string("period", period) end }) minetest.register_lbm({ name = "digtron:fuelstore_upgrade", nodenames = {"digtron:fuelstore"}, action = function(pos, node) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local list = inv:get_list("main") inv:set_list("main", {}) inv:set_list("fuel", list) meta:set_string("formspec", "size[8,9.3]" .. default.gui_bg .. default.gui_bg_img .. default.gui_slots .. "label[0,0;Fuel items]" .. "list[current_name;fuel;0,0.6;8,4;]" .. "list[current_player;main;0,5.15;8,1;]" .. "list[current_player;main;0,6.38;8,3;8]" .. "listring[current_name;fuel]" .. "listring[current_player;main]" .. default.get_hotbar_bg(0,5.15) ) end }) minetest.register_lbm({ name = "digtron:autocontroller_lateral_upgrade", nodenames = {"digtron:auto_controller"}, action = function(pos, node) local meta = minetest.get_meta(pos) local cycles = meta:get_int("offset") meta:set_int("cycles", cycles) meta:set_int("offset", 0) meta:set_int("slope", 0) meta:set_string("formspec", "size[3.5,2]" .. default.gui_bg .. default.gui_bg_img .. default.gui_slots .. "field[0.5,0.8;1,0.1;cycles;Cycles;${cycles}]" .. "tooltip[cycles;When triggered, this controller will try to run for the given number of cycles. The cycle count will decrement as it runs, so if it gets halted by a problem you can fix the problem and restart.]" .. "button_exit[1.2,0.5;1,0.1;set;Set]" .. "tooltip[set;Saves the cycle setting without starting the controller running]" .. "button_exit[2.2,0.5;1,0.1;execute;Set &\nExecute]" .. "tooltip[execute;Begins executing the given number of cycles]" .. "field[0.5,2.0;1,0.1;slope;Slope;${slope}]" .. "tooltip[slope;For diagonal digging. After every X nodes the auto controller moves forward, the controller will add an additional cycle moving the digtron laterally in the direction of the arrows on the side of this controller. Set to 0 for no lateral digging.]" .. "field[1.5,2.0;1,0.1;offset;Offset;${offset}]" .. "tooltip[offset;Sets the offset of the lateral motion defined in the Slope field. Note: this offset is relative to the controller's location. The controller will move down when it reaches the indicated point.]" .. "field[2.5,2.0;1,0.1;period;Delay;${period}]" .. "tooltip[period;Number of seconds to wait between each cycle]" ) end })