diff --git a/game.conf b/game.conf index c27530a..fba0149 100644 --- a/game.conf +++ b/game.conf @@ -1,3 +1,4 @@ title = Red Glazed Terracotta description = Segmentation fault (core dumped). -disabled_settings = !enable_damage \ No newline at end of file +disabled_settings = !enable_damage +default_mapgen = valleys \ No newline at end of file diff --git a/mods/rgt_base/init.lua b/mods/rgt_base/init.lua index 1716096..2732c5c 100644 --- a/mods/rgt_base/init.lua +++ b/mods/rgt_base/init.lua @@ -67,6 +67,39 @@ setmetatable(EventTarget, { __call = function(_, ...) return EventTarget.init(...) end }) +StateMachine = { + init = function(obj, states) + local super = EventTarget() + local e = { + states = states, + active_states = {}, + obj = obj + } + return setmetatable(e, {__index = super}) + end, + add_state = function(e, state) + if e.active_states[state] then return false end + e.states[state]:add(e.obj) + e.active_states[state] = true + return true + end, + tick = function(e) + for k in pairs(e.active_states) do + e.states[k]:tick(e.obj) + end + end, + remove_state = function(e, state) + if not e.active_states[state] then return false end + e.states[state]:remove(e.obj) + e.active_states[state] = nil + return true + end, +} +setmetatable(StateMachine, { + __call = function(_, ...) return StateMachine.init(...) end, + __index = EventTarget() +}) + rgt = { adjacent_neighbor_offests = { vector.new(0,0,1), @@ -85,7 +118,8 @@ rgt = { vector.new(-1,0,0), }, nodes_to_content_ids = {}, - content_ids_to_nodes = {} + content_ids_to_nodes = {}, + vm_data = {}, } local ns = rgt @@ -151,6 +185,60 @@ function ns.register_entity(name, def) minetest.register_entity(name, def) end +-- Make node dig particles denser. +minetest.register_on_dignode(function(pos, node, digger) + local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81 + local def = minetest.registered_nodes[node.name] + minetest.add_particlespawner({ + amount = 128, + time = 0.001, + minpos = vector.offset(pos, -0.35, -0.35, -0.35), + maxpos = vector.offset(pos, 0.35, 0.35, 0.35), + minvel = vector.new(-1.7, 0, -1.7), + maxvel = vector.new(1.7, 3.5, 1.7), + minacc = vector.new(0, -gravity *2, 0), + maxacc = vector.new(0, -gravity *2, 0), + minexptime = 0, maxexptime = 1, + minsize = 0, maxsize = 0, -- random + node = node, + minsize = 0.5, + maxsize = 1.4, + blend = (def and def.use_texture_alpha == "blend") and "blend" or "clip", + }) +end) + +-- Fills the area from pos1 to pos2 with the node named `node`. +function ns.fill_area(pos1, pos2, node) + local minp = vector.new(math.min(pos1.x, pos2.x), math.min(pos1.y, pos2.y), math.min(pos1.z, pos2.z)) + local maxp = vector.new(math.max(pos1.x, pos2.x), math.max(pos1.y, pos2.y), math.max(pos1.z, pos2.z)) + local vm = minetest.get_voxel_manip(pos1, pos2) + local min, max = vm:get_emerged_area() + local va = VoxelArea(min, max) + local data = ns.vm_data + + vm:get_data(data) + + local c_node = minetest.get_content_id(node) + for i in va:iterp(minp, maxp) do + data[i] = c_node + end + + vm:set_data(data) + vm:write_to_map() + if vm.close then vm:close() end +end + +-- Get a flat texture that may represent the given node (using the first tile). +function ns.get_node_texture(node) + local def = minetest.registered_nodes[node] + if not def or not def.tiles then return "blank.png" end + local tx = def.tiles[1] + if type(tx) == "string" then + return tx + end + return tx.name or "blank.png" +end + -- Out-of-line node metadata, allowing meta for a node to be accessed even when its containing mapblock is not loaded. local db = minetest.get_mod_storage() local NodeMetaRef = { diff --git a/mods/rgt_machines/rgt_alloy_furnace/init.lua b/mods/rgt_gadgets/modpack.conf similarity index 100% rename from mods/rgt_machines/rgt_alloy_furnace/init.lua rename to mods/rgt_gadgets/modpack.conf diff --git a/mods/rgt_gadgets/rgt_fill_tool/init.lua b/mods/rgt_gadgets/rgt_fill_tool/init.lua new file mode 100644 index 0000000..bcaef49 --- /dev/null +++ b/mods/rgt_gadgets/rgt_fill_tool/init.lua @@ -0,0 +1,158 @@ + +minetest.register_entity(":red_glazed_terracotta:fill_tool_display", { + initial_properties = { + static_save = false, + visual = "cube", + textures = {"rgt_fill_tool_display_start.png", "rgt_fill_tool_display_start.png", "rgt_fill_tool_display_start.png", "rgt_fill_tool_display_start.png", "rgt_fill_tool_display_start.png", "rgt_fill_tool_display_start.png"}, + glow = 15, + visual_size = vector.new(1, 1, 1) *1.1, + pointable = false + } +}) + +--minetest.register_entity(":travelers_notebook:fill_tool_range_display", { +-- initial_properties = { +-- static_save = false, +-- textures = {"blank.png"}, +-- glow = 15, +-- visual_size = vector.new(1, 1, 1) *0.6, +-- pointable = false +-- } +--}) + +local function get_shape_fill_display_pos(m) + local pos = m.pos + local dir = m.object:get_look_dir() + local node = minetest.raycast(pos, pos +(dir *(m.shape_fill_range or 5)), false):next() + if node and node.under then + pos = node.under + else + pos = (pos +(dir *(m.shape_fill_range or 5))):round() + end + return pos +end +rgt.register_item("fill_tool", { + stack_max = 1, + inventory_image = "rgt_shape_fill_tool.png", + range = 0, + touch_interaction = "short_dig_long_place", + on_use = function(s, p) + local m = rgt.players[p:get_player_name()] + if m.node_picker then + local pos = m.pos + local dir = m.object:get_look_dir() +-- local obj = minetest.raycast(pos +dir, pos +(dir *15), true, false, {nodes = {}}):next() + if m.pointed_obj or obj and obj.type == "object" then + local e = m.pointed_obj + if e.node then + local sm = s:get_meta() + if e.node == "air" then + sm:set_string("inventory_image", "") + else + local def = minetest.registered_nodes[e.node] + if def._rgt_tileset_master then e.node = def._rgt_tileset_master end + local tx = rgt.get_node_texture(e.node) + sm:set_string("inventory_image", "[combine:16x16:3,3="..tx.."\\^[resize\\:10x10:0,0=rgt_shape_fill_tool.png") + end + sm:set_string("node", e.node) + rgt.close_node_picker(m) + end + end + else + local pos = get_shape_fill_display_pos(rgt.players[p:get_player_name()]) + if not pos then return end + local m = s:get_meta() + local node = minetest.get_node(pos).name + if node == "air" then + m:set_string("inventory_image", "") + else + local def = minetest.registered_nodes[node] + if def._rgt_tileset_master then node = def._rgt_tileset_master end + local tx = rgt.get_node_texture(node) + m:set_string("inventory_image", "[combine:16x16:3,3="..tx.."\\^[resize\\:10x10:0,0=rgt_shape_fill_tool.png") + end + m:set_string("node", node) + end + return s + end, + on_wield = function(m) + local pos = get_shape_fill_display_pos(m) + m.shape_fill_display_start = minetest.add_entity(pos, "red_glazed_terracotta:fill_tool_display") + m.shape_fill_display_start:set_observers{[m.name] = true} + m.shape_fill_range = m.shape_fill_range or 5 + m.shape_fill_last_range = m.shape_fill_range + end, + while_wielded = function(m, s) + local pos = get_shape_fill_display_pos(m) + if not m.shape_fill_display_start and not m.node_picker then + m.shape_fill_display_start = minetest.add_entity(pos, "red_glazed_terracotta:fill_tool_display") + m.shape_fill_display_start:set_observers{[m.name] = true} + end + + if m.shape_fill_display_start and m.node_picker then + m.shape_fill_display_start:remove() + m.shape_fill_display_start = nil + end + + if m.shape_fill_display_end then + m.shape_fill_display_end:set_pos(pos) + elseif m.shape_fill_display_start then + m.shape_fill_display_start:set_pos(pos) + end + +-- if m.shape_fill_zoom_view then +-- local pitch = m.object:get_look_vertical() +-- if math.abs(pitch) > math.rad(15) then +-- m.shape_fill_range = math.max(5, m.shape_fill_range -(0.2 *pitch)) +-- if math.abs(m.shape_fill_range -(m.shape_fill_last_range or 5)) > 1 then +-- m.shape_fill_zoom_view:set_properties{ +-- textures = {libarchive.rasterize(tostring(math.round(m.shape_fill_range or 5)), 40, 40, 0, 0)} +-- } +-- m.shape_fill_last_range = range +-- end +-- end +-- end +-- +-- if m.ctl.zoom and not m.shape_fill_zoom_view then +-- m.shape_fill_zoom_view = minetest.add_entity(pos, "red_glazed_terracotta:fill_tool_range_display") +-- m.shape_fill_zoom_view:set_properties{ +-- textures = {libarchive.rasterize(tostring(math.round(m.shape_fill_range) or 5), 40, 40, 0, 0)} +-- } +-- m.shape_fill_zoom_view:set_attach(m.object, "", vector.new(0, 20, 20), nil, true) +-- elseif not m.ctl.zoom and m.shape_fill_zoom_view then +-- m.shape_fill_zoom_view:remove() +-- m.shape_fill_zoom_view = nil +-- end + + if m.shape_fill_display_end and not m.ctl.place then + local node = s:get_meta():get("node") or "air" + rgt.fill_area(m.shape_fill_start, m.shape_fill_display_end:get_pos():round(), node) + + m.shape_fill_display_end:remove() + m.shape_fill_display_end = nil + elseif m.shape_fill_display_start and not m.shape_fill_display_end and m.ctl.place then + m.shape_fill_start = m.shape_fill_display_start:get_pos():round() + + m.shape_fill_display_end = minetest.add_entity(get_shape_fill_display_pos(m), "red_glazed_terracotta:fill_tool_display") + m.shape_fill_display_end:set_properties{ + textures = {"rgt_fill_tool_display_end.png", "rgt_fill_tool_display_end.png", "rgt_fill_tool_display_end.png", "rgt_fill_tool_display_end.png", "rgt_fill_tool_display_end.png", "rgt_fill_tool_display_end.png"}, + } + m.shape_fill_display_end:set_observers{[m.name] = true} + end + end, + on_unwield = function(m) + if m.shape_fill_display_start then + m.shape_fill_display_start:remove() + m.shape_fill_display_start = nil + end + if m.shape_fill_display_end then + m.shape_fill_display_end:remove() + m.shape_fill_display_end = nil + end + if m.shape_fill_zoom_view then + m.shape_fill_zoom_view:remove() + m.shape_fill_zoom_view = nil + end + m.shape_fill_start = nil + end +}) diff --git a/mods/rgt_gadgets/rgt_fill_tool/mod.conf b/mods/rgt_gadgets/rgt_fill_tool/mod.conf new file mode 100644 index 0000000..742ad15 --- /dev/null +++ b/mods/rgt_gadgets/rgt_fill_tool/mod.conf @@ -0,0 +1,2 @@ +name = rgt_fill_tool +depends = rgt_player \ No newline at end of file diff --git a/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_end.png b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_end.png new file mode 100644 index 0000000..8918e8f Binary files /dev/null and b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_end.png differ diff --git a/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_start.png b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_start.png new file mode 100644 index 0000000..a13009c Binary files /dev/null and b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_fill_tool_display_start.png differ diff --git a/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_shape_fill_tool.png b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_shape_fill_tool.png new file mode 100644 index 0000000..42b2277 Binary files /dev/null and b/mods/rgt_gadgets/rgt_fill_tool/textures/rgt_shape_fill_tool.png differ diff --git a/mods/rgt_inv/init.lua b/mods/rgt_inv/init.lua index d807869..7ed2b8f 100644 --- a/mods/rgt_inv/init.lua +++ b/mods/rgt_inv/init.lua @@ -1,10 +1,28 @@ rgt_inv = {} local ns = rgt_inv +local creative_inv = minetest.create_detached_inventory("rgt_creative_inv", { + allow_take = function() + return -1 + end +}) +local num_items = 0 + +minetest.register_on_mods_loaded(function() + for name, def in pairs(minetest.registered_items) do + if not def._variant then + creative_inv:set_size("main", num_items +1) + creative_inv:set_stack("main", num_items, ItemStack(name.." "..def.stack_max)) + num_items = num_items +1 + end + end +end) + Inventory = setmetatable({ new = function(p) local e = setmetatable({ player = p, + inv = p:get_inventory(), state = { proximate_machines = {} } @@ -18,6 +36,12 @@ Inventory = setmetatable({ e:rebuild() end }) + + e.inv:set_size("hand", 1) + e.inv:set_size("craft", 4) + -- This is important for shaped crafting to work properly. + e.inv:set_width("craft", 2) + e:rebuild() return e end, @@ -26,33 +50,29 @@ Inventory = setmetatable({ formspec_version[10]\ size[12,10]\ style_type[button,image_button;border=false]\ - "} - for x = 0, 7 do - for y = 0, 3 do - fs[#fs +1] = "\ - image["..(x *1.25 +1.125 -0.0625)..","..(y *1.25 +4.5 -0.0625)..";1.14,1.14;rgt_other_button_bg.png;8,8]\ - " - end - end - fs[#fs +1] = "\ - style_type[image_button;noclip=true;bgimg=rgt_button_bg.png;bgimg_middle=8,8]\ - " - local i = 0 - for _, x in ipairs(e.state.proximate_machines) do - local y = i > 11 and 10.5 or -1 - fs[#fs +1] = "image_button["..(i %11 +0.125)..","..y..";0.75,0.75;rgt_stone.png;blah;]" - i = i +1 - end - fs[#fs +1] = "\ - list[current_player;main;1.125,4.5;8,4;]\ - list[current_player;craft;3,0.5;3,3;]\ + ", + ui.list("current_player", "main", 1.125, 4.5, 8, 4), + } + + if true or e.player._creative then + fs[#fs +1] = "scroll_container[1,1;10,3;creativescroll;vertical;;0]" + fs[#fs +1] = ui.list("detached:rgt_creative_inv", "main", 0.05, 0.05, 8, math.ceil(num_items /8)) + fs[#fs +1] = "scroll_container_end[]\ + scrollbar[11,1;0.2,3;vertical;creativescroll;]" + else + fs[#fs +1] = ui.list("current_player", "craft", 2, 1, 2, 2) + fs[#fs +1] = "\ listring[]\ - list[current_player;craftpreview;7,1;1,1;]\ - " + image[4.7,1.5;1,1;rgt_progress_bg.png^\\[transformR270]\ + " + fs[#fs +1] = ui.list("current_player", "craftpreview", 6, 1.5, 1, 1) + end + e.player:set_inventory_formspec(table.concat(fs)) end, - on_action = function(e, data) - + set_craft_grid_size = function(e, size) + e.inv:set_size("craft", size *size) + e.inv:set_width("craft", size) end }, { __call = function(_, ...) @@ -60,31 +80,6 @@ Inventory = setmetatable({ end }) -local last_time = 0 -minetest.register_globalstep(function() - local time = minetest.get_us_time() - -- Scan for machines every second. - if time -last_time > 1000000 then - for name, m in pairs(rgt.players) do - local pm = {} - local machines = minetest.find_nodes_in_area(m.pos:offset(-7, -7, -7), m.pos:offset(7, 7, 7), "group:rgt_machine", true) - for type, positions in pairs(machines) do - pm[#pm +1] = { - type = type, - pos = positions[math.random(1, #positions)] - } - end - if not (#pm <= 0 and #m.inv.state.proximate_machines <= 0) then - -- Give the machines list a predictable order by sorting it alphabetically prior to submission. - table.sort(pm, function(a, b) return a.type < b.type end) - m.inv.proximate_machines = pm - end - end - last_time = time - end -end) - - minetest.register_chatcommand("/lua", { privs = {server = true}, func = function(name, args) diff --git a/mods/rgt_machines/rgt_alloy_furnace/mod.conf b/mods/rgt_machines/rgt_alloy_furnace/mod.conf deleted file mode 100644 index 0d48230..0000000 --- a/mods/rgt_machines/rgt_alloy_furnace/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = rgt_alloy_furnace -depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_arc_furnace/mod.conf b/mods/rgt_machines/rgt_arc_furnace/mod.conf deleted file mode 100644 index 3341e53..0000000 --- a/mods/rgt_machines/rgt_arc_furnace/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = rgt_arc_furnace -depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_casting_basin/mod.conf b/mods/rgt_machines/rgt_casting_basin/mod.conf deleted file mode 100644 index 76d31fb..0000000 --- a/mods/rgt_machines/rgt_casting_basin/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = rgt_casting_basin -depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_furnace/mod.conf b/mods/rgt_machines/rgt_furnace/mod.conf deleted file mode 100644 index ad6dae3..0000000 --- a/mods/rgt_machines/rgt_furnace/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = rgt_furnace -depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_machines/init.lua b/mods/rgt_machines/rgt_machines/init.lua index ae11acc..0690fd6 100644 --- a/mods/rgt_machines/rgt_machines/init.lua +++ b/mods/rgt_machines/rgt_machines/init.lua @@ -1,171 +1,7 @@ ---[[ - List of machines: - - Arc furnace: Melts materials into their liquid form ---]] - - rgt_machines = { registered_machines = {}, networks = {} } local ns = rgt_machines -local db = minetest.get_mod_storage() -function ns.get_network(id) - return minetest.deserialize(db:get(id) or "return nil") or {supply = 0, demand = 0} -end - --- This abstracts away the use of multiple nodes for visual state feedback by --- copying all node callbacks into each node, so that by default the machine --- behaves exactly the same regardless of the underlying node type. ---[[ - { - states = { ... }, -- Alternate visual states for this node. All properties of the resultant node may be overriden. - ... - } ---]] -function ns.register_machine(name, def) - if not def.groups then - def.groups = {} - end - def.groups.machine = 1 - def.groups.network_component = 1 - def.groups.run_on_activate = 1 - def.groups[name] = 1 - - -- Ensure that we update the network when a machine is placed or removed. - local _on_construct = def.on_construct - def.on_construct = function(pos) - ns.update_network(pos) - if _on_construct then _on_construct(pos) end - end - local _after_destruct = def.after_destruct - def.after_destruct = function(pos) - ns.update_network(pos) - if _after_destruct then _after_destruct(pos) end - end - - ns.registered_machines[name] = def - for state, x in pairs(def.states) do - rgt.register_node(name.."_"..state, extend(table.copy(def), x)) - end -end - --- Recursively propagate a network reassignment to all connected nodes (ignoring positions in `ignore`). -local function propagate_network_update(pos, net, ignore) - ignore[minetest.hash_node_position(pos)] = true - -- Store the network to the target node. - minetest.get_meta(pos):set_string("network", net) - -- Check each neighboring node for further propagation. - for _, x in ipairs(rgt.adjacent_neighbor_offests) do - -- If we already checked this node, we shouldn't consider it to avoid infinite recursion. - if not ignore[minetest.hash_node_position(pos +x)] then - local cid = minetest.get_node_raw(pos.x +x.x, pos.y +x.y, pos.z +x.z) - -- Ensure that this node can belong to a network and thus is a valid propagation target. - if minetest.get_item_group(rgt.content_ids_to_nodes[cid], "network_component") > 0 then - propagate_network_update(pos +x, net, ignore) - end - end - end -end - --- Called when a pos is added to or removed from a network. --- Whether an addition or deletion is being performed depends on whether the node at `pos` belongs to the `network_component` group. -function ns.update_network(pos) - -- We're adding a node. - if minetest.get_item_group(minetest.get_node(pos).name, "network_component") > 0 then - -- Find all adjacent networks. - local net - local nets = {} - local num_nets = 0 - for _, x in ipairs(rgt.adjacent_neighbor_offests) do - -- Ensure that this is a node that should have a network field. - if minetest.get_item_group(minetest.get_node(pos +x).name, "network_component") > 0 then - local n = minetest.get_meta(pos +x):get("network") - -- If the node doesn't have a network for some reason, we should give it one. - if not n or table.indexof(nets, n) == -1 then - -- Set our network to the first one we find. - if not net then - net = n - -- Store the positions of any other adjacent networks, so we can merge them with ours. - elseif net ~= n then - nets[#nets +1] = x - end - num_nets = num_nets +1 - end - end - end - - -- Propagate our chosen network to adjacent networks with different IDs. - -- If we didn't find any adjacent networks, this will just do nothing. - local ignore = {[minetest.hash_node_position(pos)] = true} - for _, x in ipairs(nets) do - propagate_network_update(pos +x, net, ignore) - end - - -- Create a new unique network ID if none of our neighbors have one. - if not net then - net = string.format("net_%d_%06d", minetest.get_us_time(), math.random(100000, 999999)) - end - - -- Save our chosen network ID. - minetest.get_meta(pos):set_string("network", net) - -- We're removing a node. - else - -- Find all adjacent networks. - local net - local nets = {} - for _, x in ipairs(rgt.adjacent_neighbor_offests) do - -- Ensure that this is a node that should have a network field. - if minetest.get_item_group(minetest.get_node(pos +x).name, "network_component") > 0 then - local n = minetest.get_meta(pos +x):get("network") - nets[#nets +1] = x - end - end - -- We only need to ensure that these networks are unique, thus one of them can keep its original ID. - if #nets > 1 then table.remove(nets, 1) end - - -- Create a new ID for each network and propagate it. - local pos_hash = minetest.hash_node_position(pos) - for _, x in ipairs(nets) do - net = string.format("net_%d_%06d", minetest.get_us_time(), math.random(100000, 999999)) - -- Provide a different ignore table each time, to ensure that when the same network abuts this node on multiple edges, all touching nodes get the same network in the end. - propagate_network_update(pos +x, net, {[pos_hash] = true}) - end - end - return true -end - -function ns.add_network_supply(id, amount) - local net = ns.get_network(id) - net.supply = net.supply +amount - db:set_string(id, minetest.serialize(net)) -end - -function ns.remove_network_supply(id, amount) - ns.add_network_supply(id, -amount) -end - -function ns.change_network_supply(id, from, to) - ns.add_network_supply(id, to -from) -end - -function ns.add_network_demand(id, amount) - local net = ns.get_network(id) - net.demand = net.demand +amount - db:set_string(id, minetest.serialize(net)) -end - -function ns.remove_network_demand(id, amount) - ns.add_network_demand(id, -amount) -end - -function ns.change_network_demand(id, from, to) - ns.add_network_demand(id, to -from) -end - -include "fluids.lua" - -include "cables.lua" -include "pipes.lua" diff --git a/mods/rgt_machines/rgt_machines_electric/modpack.conf b/mods/rgt_machines/rgt_machines_electric/modpack.conf new file mode 100644 index 0000000..e69de29 diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_alloy_furnace/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_alloy_furnace/init.lua new file mode 100644 index 0000000..e69de29 diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_alloy_furnace/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_alloy_furnace/mod.conf new file mode 100644 index 0000000..1c020c4 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_alloy_furnace/mod.conf @@ -0,0 +1,2 @@ +name = rgt_alloy_furnace +depends = rgt_machines_electric \ No newline at end of file diff --git a/mods/rgt_machines/rgt_arc_furnace/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/init.lua similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/init.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/init.lua diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/mod.conf new file mode 100644 index 0000000..32e6042 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/mod.conf @@ -0,0 +1,2 @@ +name = rgt_arc_furnace +depends = rgt_machines_electric \ No newline at end of file diff --git a/mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_bottom.png b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_bottom.png similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_bottom.png rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_bottom.png diff --git a/mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_front.png b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_front.png similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_front.png rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_front.png diff --git a/mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_front_active.png b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_front_active.png similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_front_active.png rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_front_active.png diff --git a/mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_side.png b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_side.png similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_side.png rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_side.png diff --git a/mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_top.png b/mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_top.png similarity index 100% rename from mods/rgt_machines/rgt_arc_furnace/textures/rgt_arc_furnace_top.png rename to mods/rgt_machines/rgt_machines_electric/rgt_arc_furnace/textures/rgt_arc_furnace_top.png diff --git a/mods/rgt_machines/rgt_casting_basin/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/init.lua similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/init.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/init.lua diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/mod.conf new file mode 100644 index 0000000..6165176 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/mod.conf @@ -0,0 +1,2 @@ +name = rgt_casting_basin +depends = rgt_machines_electric \ No newline at end of file diff --git a/mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_gear.png b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_gear.png similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_gear.png rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_gear.png diff --git a/mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_plate.png b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_plate.png similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_plate.png rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_plate.png diff --git a/mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_rod.png b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_rod.png similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/textures/rgt_cast_rod.png rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_cast_rod.png diff --git a/mods/rgt_machines/rgt_casting_basin/textures/rgt_casting_basin_front.png b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_casting_basin_front.png similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/textures/rgt_casting_basin_front.png rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_casting_basin_front.png diff --git a/mods/rgt_machines/rgt_casting_basin/textures/rgt_casting_basin_front_active.png b/mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_casting_basin_front_active.png similarity index 100% rename from mods/rgt_machines/rgt_casting_basin/textures/rgt_casting_basin_front_active.png rename to mods/rgt_machines/rgt_machines_electric/rgt_casting_basin/textures/rgt_casting_basin_front_active.png diff --git a/mods/rgt_machines/rgt_furnace/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_furnace/init.lua similarity index 100% rename from mods/rgt_machines/rgt_furnace/init.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_furnace/init.lua diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_furnace/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_furnace/mod.conf new file mode 100644 index 0000000..d8d4b01 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_furnace/mod.conf @@ -0,0 +1,2 @@ +name = rgt_furnace +depends = rgt_machines_electric \ No newline at end of file diff --git a/mods/rgt_machines/rgt_machines/cables.lua b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/cables.lua similarity index 100% rename from mods/rgt_machines/rgt_machines/cables.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/cables.lua diff --git a/mods/rgt_machines/rgt_machines/fluids.lua b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/fluids.lua similarity index 95% rename from mods/rgt_machines/rgt_machines/fluids.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/fluids.lua index 6cbc164..93933f2 100644 --- a/mods/rgt_machines/rgt_machines/fluids.lua +++ b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/fluids.lua @@ -12,7 +12,7 @@ local function push_fluid(pos, node, ctx) local fluid_type = m:get "fluid_type" local space = m:get_float "fluid_capacity" -fluid - -- If possible, cast the type of an empty tank to that of the fluid we're pushing; if, however, the tank already contains some amount of a different fluid type, we should not push anything. + -- If possible, cast the type of an empty tank to that of the fluid we're pushing; if, however, the tank already contains some amount of a different fluid type, we should not push anything. if ctx.type ~= fluid_type then if not fluid_type or fluid == 0 then m:set_string("fluid_type", ctx.type) diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/init.lua new file mode 100644 index 0000000..6334cf9 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/init.lua @@ -0,0 +1,170 @@ +--[[ + List of machines: + - Arc furnace: Melts materials into their liquid form +--]] + +local ns = rgt_machines +extend(ns, { + registered_machines = {}, + networks = {} +}) + +local db = minetest.get_mod_storage() +function ns.get_network(id) + return minetest.deserialize(db:get(id) or "return nil") or {supply = 0, demand = 0} +end + +-- This abstracts away the use of multiple nodes for visual state feedback by +-- copying all node callbacks into each node, so that by default the machine +-- behaves exactly the same regardless of the underlying node type. +--[[ + { + states = { ... }, -- Alternate visual states for this node. All properties of the resultant node may be overriden. + ... + } +--]] +function ns.register_machine(name, def) + if not def.groups then + def.groups = {} + end + def.groups.machine = 1 + def.groups.network_component = 1 + def.groups.run_on_activate = 1 + def.groups[name] = 1 + + -- Ensure that we update the network when a machine is placed or removed. + local _on_construct = def.on_construct + def.on_construct = function(pos) + ns.update_network(pos) + if _on_construct then _on_construct(pos) end + end + local _after_destruct = def.after_destruct + def.after_destruct = function(pos) + ns.update_network(pos) + if _after_destruct then _after_destruct(pos) end + end + + ns.registered_machines[name] = def + for state, x in pairs(def.states) do + rgt.register_node(name.."_"..state, extend(table.copy(def), x)) + end +end + +-- Recursively propagate a network reassignment to all connected nodes (ignoring positions in `ignore`). +local function propagate_network_update(pos, net, ignore) + ignore[minetest.hash_node_position(pos)] = true + -- Store the network to the target node. + minetest.get_meta(pos):set_string("network", net) + -- Check each neighboring node for further propagation. + for _, x in ipairs(rgt.adjacent_neighbor_offests) do + -- If we already checked this node, we shouldn't consider it to avoid infinite recursion. + if not ignore[minetest.hash_node_position(pos +x)] then + local cid = minetest.get_node_raw(pos.x +x.x, pos.y +x.y, pos.z +x.z) + -- Ensure that this node can belong to a network and thus is a valid propagation target. + if minetest.get_item_group(rgt.content_ids_to_nodes[cid], "network_component") > 0 then + propagate_network_update(pos +x, net, ignore) + end + end + end +end + +-- Called when a pos is added to or removed from a network. +-- Whether an addition or deletion is being performed depends on whether the node at `pos` belongs to the `network_component` group. +function ns.update_network(pos) + -- We're adding a node. + if minetest.get_item_group(minetest.get_node(pos).name, "network_component") > 0 then + -- Find all adjacent networks. + local net + local nets = {} + local num_nets = 0 + for _, x in ipairs(rgt.adjacent_neighbor_offests) do + -- Ensure that this is a node that should have a network field. + if minetest.get_item_group(minetest.get_node(pos +x).name, "network_component") > 0 then + local n = minetest.get_meta(pos +x):get("network") + -- If the node doesn't have a network for some reason, we should give it one. + if not n or table.indexof(nets, n) == -1 then + -- Set our network to the first one we find. + if not net then + net = n + -- Store the positions of any other adjacent networks, so we can merge them with ours. + elseif net ~= n then + nets[#nets +1] = x + end + num_nets = num_nets +1 + end + end + end + + -- Propagate our chosen network to adjacent networks with different IDs. + -- If we didn't find any adjacent networks, this will just do nothing. + local ignore = {[minetest.hash_node_position(pos)] = true} + for _, x in ipairs(nets) do + propagate_network_update(pos +x, net, ignore) + end + + -- Create a new unique network ID if none of our neighbors have one. + if not net then + net = string.format("net_%d_%06d", minetest.get_us_time(), math.random(100000, 999999)) + end + + -- Save our chosen network ID. + minetest.get_meta(pos):set_string("network", net) + -- We're removing a node. + else + -- Find all adjacent networks. + local net + local nets = {} + for _, x in ipairs(rgt.adjacent_neighbor_offests) do + -- Ensure that this is a node that should have a network field. + if minetest.get_item_group(minetest.get_node(pos +x).name, "network_component") > 0 then + local n = minetest.get_meta(pos +x):get("network") + nets[#nets +1] = x + end + end + -- We only need to ensure that these networks are unique, thus one of them can keep its original ID. + if #nets > 1 then table.remove(nets, 1) end + + -- Create a new ID for each network and propagate it. + local pos_hash = minetest.hash_node_position(pos) + for _, x in ipairs(nets) do + net = string.format("net_%d_%06d", minetest.get_us_time(), math.random(100000, 999999)) + -- Provide a different ignore table each time, to ensure that when the same network abuts this node on multiple edges, all touching nodes get the same network in the end. + propagate_network_update(pos +x, net, {[pos_hash] = true}) + end + end + return true +end + +function ns.add_network_supply(id, amount) + local net = ns.get_network(id) + net.supply = net.supply +amount + db:set_string(id, minetest.serialize(net)) +end + +function ns.remove_network_supply(id, amount) + ns.add_network_supply(id, -amount) +end + +function ns.change_network_supply(id, from, to) + ns.add_network_supply(id, to -from) +end + +function ns.add_network_demand(id, amount) + local net = ns.get_network(id) + net.demand = net.demand +amount + db:set_string(id, minetest.serialize(net)) +end + +function ns.remove_network_demand(id, amount) + ns.add_network_demand(id, -amount) +end + +function ns.change_network_demand(id, from, to) + ns.add_network_demand(id, to -from) +end + +include "fluids.lua" + +include "cables.lua" +include "pipes.lua" + diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/mod.conf new file mode 100644 index 0000000..7116bf2 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/mod.conf @@ -0,0 +1,2 @@ +name = rgt_machines_electric +depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_machines/models/rgt_pipe_straight.gltf b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight.gltf similarity index 100% rename from mods/rgt_machines/rgt_machines/models/rgt_pipe_straight.gltf rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight.gltf diff --git a/mods/rgt_machines/rgt_machines/models/rgt_pipe_straight_double_cap.gltf b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight_double_cap.gltf similarity index 100% rename from mods/rgt_machines/rgt_machines/models/rgt_pipe_straight_double_cap.gltf rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight_double_cap.gltf diff --git a/mods/rgt_machines/rgt_machines/models/rgt_pipe_straight_single_cap.gltf b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight_single_cap.gltf similarity index 100% rename from mods/rgt_machines/rgt_machines/models/rgt_pipe_straight_single_cap.gltf rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/models/rgt_pipe_straight_single_cap.gltf diff --git a/mods/rgt_machines/rgt_machines/pipes.lua b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/pipes.lua similarity index 100% rename from mods/rgt_machines/rgt_machines/pipes.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/pipes.lua diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_cable_copper.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_cable_copper.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_cable_copper.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_cable_copper.png diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_fluid_container_bg.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_fluid_container_bg.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_fluid_container_bg.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_fluid_container_bg.png diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_fluid_container_bg_filled.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_fluid_container_bg_filled.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_fluid_container_bg_filled.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_fluid_container_bg_filled.png diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_pipe_straight.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_pipe_straight.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_pipe_straight.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_pipe_straight.png diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_progress_bg.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_progress_bg.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_progress_bg.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_progress_bg.png diff --git a/mods/rgt_machines/rgt_machines/textures/rgt_progress_bg_active.png b/mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_progress_bg_active.png similarity index 100% rename from mods/rgt_machines/rgt_machines/textures/rgt_progress_bg_active.png rename to mods/rgt_machines/rgt_machines_electric/rgt_machines_electric/textures/rgt_progress_bg_active.png diff --git a/mods/rgt_machines/rgt_steam_generator/init.lua b/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/init.lua similarity index 100% rename from mods/rgt_machines/rgt_steam_generator/init.lua rename to mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/init.lua diff --git a/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/mod.conf b/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/mod.conf new file mode 100644 index 0000000..0281078 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/mod.conf @@ -0,0 +1,2 @@ +name = rgt_steam_generator +depends = rgt_machines_electric \ No newline at end of file diff --git a/mods/rgt_machines/rgt_steam_generator/textures/rgt_steam_generator_front.png b/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/textures/rgt_steam_generator_front.png similarity index 100% rename from mods/rgt_machines/rgt_steam_generator/textures/rgt_steam_generator_front.png rename to mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/textures/rgt_steam_generator_front.png diff --git a/mods/rgt_machines/rgt_steam_generator/textures/rgt_steam_generator_front_active.png b/mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/textures/rgt_steam_generator_front_active.png similarity index 100% rename from mods/rgt_machines/rgt_steam_generator/textures/rgt_steam_generator_front_active.png rename to mods/rgt_machines/rgt_machines_electric/rgt_steam_generator/textures/rgt_steam_generator_front_active.png diff --git a/mods/rgt_machines/rgt_machines_mechanical/modpack.conf b/mods/rgt_machines/rgt_machines_mechanical/modpack.conf new file mode 100644 index 0000000..e69de29 diff --git a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua new file mode 100644 index 0000000..06d394a --- /dev/null +++ b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua @@ -0,0 +1,22 @@ +local ns = rgt_machines + +ns.components = {} + +--[[ + { + name = "...", -- The component's name. + attach_points + } +--]] +function ns.register_component(def) + ns.components[def.name] = def +end + +function ns.register_plate(name, def) + rgt.register_item(name, def) +end + + +rgt.register_node("hand_crank", { + mesh = "rgt_hand_crank.gltf" +}) diff --git a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/mod.conf b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/mod.conf new file mode 100644 index 0000000..8c50aca --- /dev/null +++ b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/mod.conf @@ -0,0 +1,2 @@ +name = rgt_machines_mechanical +depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_machines/rgt_steam_generator/mod.conf b/mods/rgt_machines/rgt_steam_generator/mod.conf deleted file mode 100644 index 7907304..0000000 --- a/mods/rgt_machines/rgt_steam_generator/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = rgt_steam_generator -depends = rgt_machines \ No newline at end of file diff --git a/mods/rgt_materials/init.lua b/mods/rgt_materials/init.lua index fde694f..9f01954 100644 --- a/mods/rgt_materials/init.lua +++ b/mods/rgt_materials/init.lua @@ -16,6 +16,20 @@ - Gravel --]] +-- MARK: - Wood + +rgt.register_item("stick", { + inventory_image = "rgt_stick.png" +}) + +minetest.register_craft { + recipe = { + {"group:planks", "group:planks"}, + {"group:planks", "group:planks"}, + }, + output = "workbench" +} + -- MARK: - Coal diff --git a/mods/rgt_materials/textures/rgt_copper_block.png b/mods/rgt_materials/textures/rgt_copper_block.png index 45d22e1..80bc7a9 100644 Binary files a/mods/rgt_materials/textures/rgt_copper_block.png and b/mods/rgt_materials/textures/rgt_copper_block.png differ diff --git a/mods/rgt_materials/textures/rgt_copper_ingot.png b/mods/rgt_materials/textures/rgt_copper_ingot.png index 0a2f127..e6db94a 100644 Binary files a/mods/rgt_materials/textures/rgt_copper_ingot.png and b/mods/rgt_materials/textures/rgt_copper_ingot.png differ diff --git a/mods/rgt_materials/textures/rgt_gear_copper.png b/mods/rgt_materials/textures/rgt_gear_copper.png index a1adcef..04a8e4f 100644 Binary files a/mods/rgt_materials/textures/rgt_gear_copper.png and b/mods/rgt_materials/textures/rgt_gear_copper.png differ diff --git a/mods/rgt_materials/textures/rgt_plate_copper.png b/mods/rgt_materials/textures/rgt_plate_copper.png index dbc8f14..a402efe 100644 Binary files a/mods/rgt_materials/textures/rgt_plate_copper.png and b/mods/rgt_materials/textures/rgt_plate_copper.png differ diff --git a/mods/rgt_materials/textures/rgt_rod_copper.png b/mods/rgt_materials/textures/rgt_rod_copper.png index 345ba03..aa156ee 100644 Binary files a/mods/rgt_materials/textures/rgt_rod_copper.png and b/mods/rgt_materials/textures/rgt_rod_copper.png differ diff --git a/mods/rgt_origins/init.lua b/mods/rgt_origins/init.lua new file mode 100644 index 0000000..86ff563 --- /dev/null +++ b/mods/rgt_origins/init.lua @@ -0,0 +1,57 @@ +local ns = rgt + +ns.origins = {} + +local db = minetest.get_mod_storage() + +--[[ + { + name = "human", -- The name of this origin. + label = "Human", -- The user-facing name. + base_hp = 20, -- The base HP of this origin. + properties = {...}, -- Object properties overridden by this origin. + abilities = { + + }, + on_apply = function(m) end, -- Called when this origin is first applied to a player. + on_join = function(m) end, -- Called when a player with this origin joins. + on_leave = function(m) end, -- Called when a player with this origin leaves. + tick = function(m) end, -- Called every globalstep for each player that has this origin. + } +--]] +function ns.register_origin(def) + ns.origins[def.name] = def +end + +include_all "origins" + + +local REALM_START = 30500 +local REALM_END = 31000 + +rgt_realms.register_realm { + name = "startroom", + label = "Start Room", + min = vector.new(-100, REALM_START, -100), + max = vector.new(100, REALM_END, 100), + sky = { + type = "plain", + base_color = "#000", +-- fog = { +-- fog_distance = 20, +-- fog_start = 0.3, +-- fog_color = "#aab" +-- } + } +} + +if not db:contains "initialized" then + minetest.after(0, function() + local pos = vector.new(0, REALM_START +100, 0) + minetest.emerge_area(pos, pos, function() + say(pos:to_string()) + minetest.set_node(pos, {name = "stone"}) + end) + db:set_string("initialized", "true") + end) +end diff --git a/mods/rgt_origins/origins/human.lua b/mods/rgt_origins/origins/human.lua new file mode 100644 index 0000000..e69de29 diff --git a/mods/rgt_player/init.lua b/mods/rgt_player/init.lua index a57d4a1..0a033c0 100644 --- a/mods/rgt_player/init.lua +++ b/mods/rgt_player/init.lua @@ -9,8 +9,6 @@ Player = { object = p }, {__index = Player}) - local inv = p:get_inventory() - inv:set_size("hand", 1) m:set_hotbar_size(8) m.textures = {_textures = {}} @@ -431,6 +429,16 @@ Player = { m:dispatch("deinit") m.health_display:remove() m.wielditem_display:remove() + + -- Unwield the wielded item. This ensures that if wielding an item creates side effects + -- (e.g. temporary entities while wielded), those side effects will not remain in effect + -- when the player leaves the game. + local w = m.object:get_wielded_item() + local wname = w:get_name() + local def = minetest.registered_items[wname] + local onunselect = def and def.on_unwield + if onunselect then onunselect(m) end + rgt.players[m.name] = nil end } diff --git a/mods/rgt_tools/textures/rgt_axe_copper.png b/mods/rgt_tools/textures/rgt_axe_copper.png index 8ed4299..7cb9d72 100644 Binary files a/mods/rgt_tools/textures/rgt_axe_copper.png and b/mods/rgt_tools/textures/rgt_axe_copper.png differ diff --git a/mods/rgt_tools/textures/rgt_pick_copper.png b/mods/rgt_tools/textures/rgt_pick_copper.png index 4247685..5000bfc 100644 Binary files a/mods/rgt_tools/textures/rgt_pick_copper.png and b/mods/rgt_tools/textures/rgt_pick_copper.png differ diff --git a/mods/rgt_tools/textures/rgt_shovel_copper.png b/mods/rgt_tools/textures/rgt_shovel_copper.png index 9a786db..5195479 100644 Binary files a/mods/rgt_tools/textures/rgt_shovel_copper.png and b/mods/rgt_tools/textures/rgt_shovel_copper.png differ diff --git a/mods/rgt_tools/textures/rgt_sword_copper.png b/mods/rgt_tools/textures/rgt_sword_copper.png index 4c01e3d..1a7ab2c 100644 Binary files a/mods/rgt_tools/textures/rgt_sword_copper.png and b/mods/rgt_tools/textures/rgt_sword_copper.png differ diff --git a/mods/rgt_workbench/init.lua b/mods/rgt_workbench/init.lua new file mode 100644 index 0000000..c7f411c --- /dev/null +++ b/mods/rgt_workbench/init.lua @@ -0,0 +1,30 @@ +local ns = rgt + + +rgt.register_node("workbench", { + on_construct = function() + + end, + on_rightclick = function(pos, node, p) + local name = p:get_player_name() + local fs = { + "formspec_version[10]\ + size[12,11]\ + ", + ui.list("current_player", "main", 1.125, 5.5, 8, 4), + ui.list("current_player", "craft", 2, 1, 3, 3), + "listring[]\n", + ui.list("current_player", "craftpreview", 6, 2.1, 1, 1) + } + rgt.players[name].inv:set_craft_grid_size(3) + minetest.show_formspec(name, "workbench", table.concat(fs)) + end +}) + + +minetest.register_on_player_receive_fields(function(p, form, data) + if form == "workbench" and data.quit then + local name = p:get_player_name() + rgt.players[name].inv:set_craft_grid_size(2) + end +end) diff --git a/mods/rgt_workbench/mod.conf b/mods/rgt_workbench/mod.conf new file mode 100644 index 0000000..e12712b --- /dev/null +++ b/mods/rgt_workbench/mod.conf @@ -0,0 +1,2 @@ +name = rgt_workbench +depends = rgt_base \ No newline at end of file diff --git a/mods/rgt_world/biomes.lua b/mods/rgt_world/biomes.lua new file mode 100644 index 0000000..ac1dba9 --- /dev/null +++ b/mods/rgt_world/biomes.lua @@ -0,0 +1,71 @@ +minetest.register_biome { + name = "forest", + + node_top = "dirt_grass", + depth_top = 1, + + node_filler = "dirt", + depth_filler = 5, + + node_riverbed = "dirt", + depth_riverbed = 3, + + node_dungeon = "cobble", + node_dungeon_alt = "stone_brick_large", + + + y_max = 3000, + y_min = 2, + vertical_blend = 2, + + heat_point = 50, + humidity_point = 50, +} + +minetest.register_biome { + name = "plains", + + node_top = "dirt_grass", + depth_top = 1, + + node_filler = "dirt", + depth_filler = 5, + + node_riverbed = "dirt", + depth_riverbed = 3, + + node_dungeon = "cobble", + node_dungeon_alt = "stone_brick_large", + + + y_max = 3000, + y_min = 2, + vertical_blend = 2, + + heat_point = 50, + humidity_point = 30, +} + +minetest.register_biome { + name = "beach", + + node_top = "sand", + depth_top = 1, + + node_filler = "sand", + depth_filler = 2, + + node_riverbed = "sand", + depth_riverbed = 3, + + node_dungeon = "cobble", + node_dungeon_alt = "stone_brick_large", + + + y_max = 1, + y_min = -3, + vertical_blend = 1, + + heat_point = 50, + humidity_point = 50, +} \ No newline at end of file diff --git a/mods/rgt_world/config.lua b/mods/rgt_world/config.lua new file mode 100644 index 0000000..3ca5dd0 --- /dev/null +++ b/mods/rgt_world/config.lua @@ -0,0 +1,162 @@ +-- This file configures the Valleys mapgen settings to produce much larger-scale, more explorable terrain. +-- These settings were originally posted by voxelproof on the Minetest forum: https://forum.luanti.org/viewtopic.php?p=336441#p336441 + +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_terrain_height", { + flags = "defaults", + lacunarity = 1, + offset = -10, + scale = 1000, + spread = vector.new(2048,2048,4096), + seed = 4541, + octaves = 6, + persistence = 0.45, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_inter_valley_slope", { + flags = "defaults", + lacunarity = 2, + offset = 0.5, + scale = 0.5, + spread = vector.new(128,128,1024), + seed = 746, + octaves = 1, + persistence = 1, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_inter_valley_fill", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 1, + spread = vector.new(256,512,256), + seed = 1993, + octaves = 6, + persistence = 0.8, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_filler_depth", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 1.2, + spread = vector.new(256,256,256), + seed = 1605, + octaves = 3, + persistence = 0.5, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_massive_caves", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 1, + spread = vector.new(512,256,256), + seed = 59033, + octaves = 6, + persistence = 0.63, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_cave2", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 23, -- 13 + spread = vector.new(67,67,67), + seed = 10325, + octaves = 3, + persistence = 0.5, +}, true) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_cave1", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 23, -- 13 + spread = vector.new(61,61,61), + seed = 52534, + octaves = 3, + persistence = 0.3, +}, true) +--mgvalleys_cave_width = 0.01 +--mgvalleys_river_size = 2 +--mg_flags = caves, dungeons, light, decorations +--chunksize = 5 +--mgvalleys_lava_features = 0 +--mg_name = valleys +--mapgen_limit = 31000 +--water_level = 1 +--seed = 18446744073709545565 +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_rivers", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 2, + spread = vector.new(512,512,128), + seed = -6050, + octaves = 5, + persistence = 0.6, +}, true) +minetest.set_mapgen_setting_noiseparams("mg_biome_np_heat", { + flags = "defaults", + lacunarity = 2, + offset = 50, + scale = 50, + spread = vector.new(1000,1000,1000), + seed = 5349, + octaves = 3, + persistence = 0.5, +}, true) +--mgvalleys_water_features = 0 +minetest.set_mapgen_setting_noiseparams("mg_biome_np_heat_blend", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 1.5, + spread = vector.new(8,8,8), + seed = 13, + octaves = 2, + persistence = 1, +}, true) +minetest.set_mapgen_setting_noiseparams("mg_biome_np_humidity", { + flags = "defaults", + lacunarity = 2, + offset = 50, + scale = 50, + spread = vector.new(1000,1000,1000), + seed = 842, + octaves = 3, + persistence = 0.5, +}, true) +minetest.set_mapgen_setting_noiseparams("mg_biome_np_humidity_blend", { + flags = "defaults", + lacunarity = 2, + offset = 0, + scale = 1.5, + spread = vector.new(8,8,8), + seed = 90003, + octaves = 2, + persistence = 1, +}, true) +minetest.set_mapgen_setting("mgvalleys_spflags", "altitude_chill, humid_rivers") +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_valley_depth", { + flags = "defaults", + lacunarity = 2, + offset = 5, + scale = 4, + spread = vector.new(512,512,1024), + seed = -1914, + octaves = 1, + persistence = 1, +}, true) +minetest.set_mapgen_setting("mgvalleys_altitude_chill", 90) +minetest.set_mapgen_setting_noiseparams("mgvalleys_np_valley_profile", { + flags = "defaults", + lacunarity = 2, + offset = 0.6, + scale = 0.5, + spread = vector.new(64,2048,1024), + seed = 777, + octaves = 1, + persistence = 1, +}, true) +--mgvalleys_large_cave_depth = -33 +--mgvalleys_massive_cave_depth = -256 +minetest.set_mapgen_setting("mgvalleys_river_depth", 0, true) + +-- This ensures both that caverns are appropriately hard to reach and that they won't be reached on a large scale by oceans. +minetest.set_mapgen_setting("mgvalleys_cavern_limit", -1400, true) + diff --git a/mods/rgt_world/init.lua b/mods/rgt_world/init.lua index 78a3f19..a32456b 100644 --- a/mods/rgt_world/init.lua +++ b/mods/rgt_world/init.lua @@ -40,7 +40,7 @@ rgt.register_node("stone_tile", { rgt.register_node("cobble", { tiles = {"rgt_cobble.png"}, _variants = "all", - groups = {dig_immediate = 3} + groups = {stone = 1} }) rgt.register_node("dirt", { @@ -54,11 +54,122 @@ rgt.register_node("dirt_mossy", { }) rgt.register_node("dirt_grass", { - tiles = {"rgt_grass_top.png", "rgt_dirt.png", "rgt_dirt.png^rgt_grass_side.png"}, + paramtype2 = "color", + tiles = {"rgt_grass_top.png", {name = "rgt_dirt.png", color = "#fff"}, {name = "rgt_dirt.png^rgt_grass_side_shadow.png", color = "#fff"}}, + overlay_tiles = {"", "", "rgt_grass_side.png"}, + palette = "rgt_palette_grass.png", + on_construct = function(pos) + + end, -- tiles = {"[fill:16x16:0,0:#3e7e7b^[fill:14x14:1,1:#326764"}, groups = {dig_immediate = 3} }) +-- Grass +for i = 1, 3 do + rgt.register_node("grass_"..i, { + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 2, + sunlight_propagates = false, + tiles = {"rgt_grass_"..i..".png"}, + groups = {attached_node = 3, dig_immediate = 3}, + walkable = false, + selection_box = { + type = "fixed", + fixed = { + -6/16, -0.5, -6/16, + 6/16, 6/16, 6/16 + } + } + }) +end + +-- Tall grass +rgt.register_node("grass_tall_bottom", { + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 2, + sunlight_propagates = false, + tiles = {"rgt_grass_tall.png^[verticalframe:2:1"}, + groups = {attached_node = 3, dig_immediate = 3}, + walkable = false, + selection_box = { + type = "fixed", + fixed = { + -6/16, -0.5, -6/16, + 6/16, 0.5, 6/16 + } + }, + node_placement_prediction = "", + after_destruct = function(pos) + local above = pos:offset(0, 1, 0) + local na = minetest.get_node(above) + if na.name:find "grass_tall_top" then + minetest.remove_node(above) + end + end, + on_place = function(s, p, pt) + if pt.type ~= "node" then return end + + local target = pt.above + + if not minetest.get_node(target:offset(0, -1, 0)).name:find "dirt_grass" then + return + end + + local above = target:offset(0, 1, 0) + if minetest.get_node(above).name == "air" then + minetest.set_node(target, {name = "grass_tall_bottom", param2 = 2}) + minetest.set_node(above, {name = "grass_tall_top", param2 = 2}) + s:take_item() + return s + end + end +}) + +rgt.register_node("grass_tall_top", { + drawtype = "plantlike", + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 2, + sunlight_propagates = false, + tiles = {"rgt_grass_tall.png^[verticalframe:2:0"}, + groups = {dig_immediate = 3}, + walkable = false, + selection_box = { + type = "fixed", + fixed = { + -6/16, -0.5, -6/16, + 6/16, 6/16, 6/16 + } + }, + drop = "grass_tall_bottom", + after_destruct = function(pos) + local below = pos:offset(0, -1, 0) + local nb = minetest.get_node(below) + if nb.name:find "grass_tall_bottom" then + minetest.remove_node(below) + end + end, +}) + +-- TODO: Tall grass +--rgt.register_node("tall_grass", { +-- drawtype = "mesh", +-- mesh = "rgt_plantlike_1x1x2.obj", +-- use_texture_alpha = "clip", +-- paramtype = "light", +-- sunlight_propagates = false, +-- tiles = {"rgt_grass_tall.png"}, +-- groups = {dig_immediate = 3}, +-- walkable = false +--}) + + + rgt.register_node("path_grass", { drawtype = "nodebox", node_box = { @@ -91,43 +202,43 @@ rgt.register_node("oak_leaves", { drawtype = "allfaces", tiles = {"rgt_oak_leaves.png"}, use_texture_alpha = "clip", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("oak_planks", { tiles = {{name = "rgt_oak_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("dark_planks", { tiles = {{name = "rgt_dark_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("spruce_planks", { tiles = {{name = "rgt_spruce_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("acacia_planks", { tiles = {{name = "rgt_acacia_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("redwood_planks", { tiles = {{name = "rgt_redwood_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) rgt.register_node("birch_planks", { tiles = {{name = "rgt_birch_planks.png", align_style = "world"}}, _variants = "all", - groups = {dig_immediate = 3} + groups = {dig_immediate = 3}, }) @@ -149,6 +260,13 @@ rgt.register_node("glass", { --} +rgt.register_node("basalt", { + tiles = {{name = "rgt_basalt.png", align_style = "world"}}, + _variants = "all", + groups = {dig_immediate = 3}, +}) + + rgt.register_node("water", { tiles = {"[fill:16x16:0,0:#2d5a7c77^[fill:14x14:1,1:#2d5a7c33"}, groups = {dig_immediate = 3}, @@ -158,6 +276,7 @@ rgt.register_node("water", { walkable = false, climbable = true, post_effect_color = "#2d5a7c55", + is_ground_content = false, liquidtype = "source", -- Minetest pro tip: Do not try to use aliases for these. @@ -178,6 +297,7 @@ rgt.register_node("water_flowing", { walkable = false, climbable = true, post_effect_color = "#2d5a7c55", + is_ground_content = false, liquidtype = "flowing", liquid_alternative_source = "red_glazed_terracotta:water", @@ -230,6 +350,35 @@ minetest.register_alias("mapgen_water_source", "red_glazed_terracotta:water") minetest.register_alias("mapgen_river_water_source", "red_glazed_terracotta:river_water") +--[[ + +Biomes to add: + +[Temperate] +Steppe +Moor +Plains +Light Deciduous Forest +Dark Deciduous Forest + +[Cold] +Alpine +Glacier +Taiga +Tundra +Coniferous Forest + +[Warm] +Desert +Badlands +Jungle +Swamp +Marsh + +--]] + +include "biomes.lua" + rgt.register_node("light", { tiles = {"[fill:1x1:0,0:#fed"}, @@ -247,62 +396,80 @@ minetest.register_ore { clust_size = 1 } - ---minetest.register_decoration { --- deco_type = "schematic", --- place_on = "dirt_grass", --- biomes = {"forest"}, --- y_min = 1, --- fill_ratio = 0.01, --- schematic = minetest.get_modpath(minetest.get_current_modname()).."/schems/tree.mts", --- flags = "place_center_x, place_center_z", --- place_offset_y = 1, ---} - -minetest.register_biome{ - name = "plains", - - node_top = "dirt_grass", - depth_top = 1, - - node_filler = "dirt", - depth_filler = 5, - - node_riverbed = "dirt", - depth_riverbed = 3, - - node_dungeon = "cobble", - node_dungeon_alt = "stone_brick_large", - - - y_max = 3000, - y_min = 2, - vertical_blend = 2, - - heat_point = 50, - humidity_point = 50, +minetest.register_decoration { + deco_type = "schematic", + place_on = "dirt_grass", + biomes = {"forest"}, + y_min = 1, + y_max = 8000, + fill_ratio = 0.01, + schematic = minetest.get_modpath(minetest.get_current_modname()).."/schems/tree.mts", + flags = "place_center_x, place_center_z", + place_offset_y = 1, } -minetest.register_biome{ - name = "beach", +minetest.register_decoration { + deco_type = "schematic", + place_on = "dirt_grass", + biomes = {"plains"}, + y_min = 1, + noise_params = { + offset = 0, + scale = 0.25, + spread = {x = 8, y = 8, z = 8}, + seed = 3456789, + octaves = 4, + persist = 0.6, + lacunarity = 3, + }, +-- fill_ratio = 0.1, + schematic = { + size = {x = 1, y = 2, z = 1}, -- 1×2×1 + data = { + {name = "grass_tall_bottom", prob = 255, param2 = 2}, + {name = "grass_tall_top", prob = 255, param2 = 2}, + }, + }, + place_offset_y = 1, +} - node_top = "sand", - depth_top = 1, +minetest.register_decoration { + deco_type = "simple", + place_on = "dirt_grass", + biomes = {"forest", "plains"}, + decoration = {"grass_1", "grass_2", "grass_3"}, + param2 = 2, + y_min = 1, + fill_ratio = 0.2, +} - node_filler = "sand", - depth_filler = 2, +minetest.override_item("", { + on_place = function(s, p, pt) + if minetest.get_node(pt.under).name:find "dirt_grass" then + minetest.set_node(pt.under, {name = "path_grass"}) + end +-- minetest.spawn_tree(pt.above, { +-- axiom = "TF[FFA]", +-- rules_a = "F", +-- trunk = "oak_log", +-- leaves = "oak_leaves", +-- angle = 30, +-- iterations = 2, +-- random_level = 0, +-- trunk_type = "single", +---- thin_branches = true, +-- fruit_chance = 0, +-- fruit = "stone_brick" +-- }) + end +}) - node_riverbed = "sand", - depth_riverbed = 3, - - node_dungeon = "cobble", - node_dungeon_alt = "stone_brick_large", +minetest.register_chatcommand("biome", { + func = function(name) + tell(name, minetest.get_biome_name(minetest.get_biome_data(minetest.get_player_by_name(name):get_pos()).biome)) + end +}) - - y_max = 1, - y_min = -3, - vertical_blend = 1, +include "config.lua" - heat_point = 50, - humidity_point = 50, -} \ No newline at end of file +--minetest.register_mapgen_script(minetest.get_modpath(minetest.get_current_modname()).."/mapgen.lua") diff --git a/mods/rgt_world/mapgen.lua b/mods/rgt_world/mapgen.lua new file mode 100644 index 0000000..619b67d --- /dev/null +++ b/mods/rgt_world/mapgen.lua @@ -0,0 +1,14 @@ + +local c = minetest.get_content_id + +local c_stone = c "stone" + +local np_continental = { + offset = 0, + scale = 1, + spread = {x = 4096, y = 4096, z = 4096}, + seed = 12345, + octaves = 4, + persist = 0.6 +} +local n_terrain = {} diff --git a/mods/rgt_world/textures/rgt_basalt.png b/mods/rgt_world/textures/rgt_basalt.png new file mode 100644 index 0000000..ecb1e68 Binary files /dev/null and b/mods/rgt_world/textures/rgt_basalt.png differ diff --git a/mods/rgt_world/textures/rgt_cobble.png b/mods/rgt_world/textures/rgt_cobble.png index 6a21895..338a34c 100644 Binary files a/mods/rgt_world/textures/rgt_cobble.png and b/mods/rgt_world/textures/rgt_cobble.png differ diff --git a/mods/rgt_world/textures/rgt_grass_1.png b/mods/rgt_world/textures/rgt_grass_1.png new file mode 100644 index 0000000..a7d0c66 Binary files /dev/null and b/mods/rgt_world/textures/rgt_grass_1.png differ diff --git a/mods/rgt_world/textures/rgt_grass_2.png b/mods/rgt_world/textures/rgt_grass_2.png new file mode 100644 index 0000000..1a24cf8 Binary files /dev/null and b/mods/rgt_world/textures/rgt_grass_2.png differ diff --git a/mods/rgt_world/textures/rgt_grass_3.png b/mods/rgt_world/textures/rgt_grass_3.png new file mode 100644 index 0000000..3e736e4 Binary files /dev/null and b/mods/rgt_world/textures/rgt_grass_3.png differ diff --git a/mods/rgt_world/textures/rgt_grass_side.png b/mods/rgt_world/textures/rgt_grass_side.png index 0d3ff89..506d894 100644 Binary files a/mods/rgt_world/textures/rgt_grass_side.png and b/mods/rgt_world/textures/rgt_grass_side.png differ diff --git a/mods/rgt_world/textures/rgt_grass_side_shadow.png b/mods/rgt_world/textures/rgt_grass_side_shadow.png new file mode 100644 index 0000000..b571129 Binary files /dev/null and b/mods/rgt_world/textures/rgt_grass_side_shadow.png differ diff --git a/mods/rgt_world/textures/rgt_grass_tall.png b/mods/rgt_world/textures/rgt_grass_tall.png new file mode 100644 index 0000000..ee28715 Binary files /dev/null and b/mods/rgt_world/textures/rgt_grass_tall.png differ diff --git a/mods/rgt_world/textures/rgt_grass_top.png b/mods/rgt_world/textures/rgt_grass_top.png index ff39b7d..7b4d059 100644 Binary files a/mods/rgt_world/textures/rgt_grass_top.png and b/mods/rgt_world/textures/rgt_grass_top.png differ diff --git a/mods/rgt_world/textures/rgt_modern_floor.png b/mods/rgt_world/textures/rgt_modern_floor.png new file mode 100644 index 0000000..ecb1e68 Binary files /dev/null and b/mods/rgt_world/textures/rgt_modern_floor.png differ diff --git a/mods/rgt_world/textures/rgt_palette_grass.png b/mods/rgt_world/textures/rgt_palette_grass.png new file mode 100644 index 0000000..20c4a04 Binary files /dev/null and b/mods/rgt_world/textures/rgt_palette_grass.png differ diff --git a/mods/rgt_world/variants.lua b/mods/rgt_world/variants.lua index 75895b8..e4e0412 100644 --- a/mods/rgt_world/variants.lua +++ b/mods/rgt_world/variants.lua @@ -11,7 +11,8 @@ function ns.register_slab(def) fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5} }, paramtype = "light", - paramtype2 = "facedir" + paramtype2 = "facedir", + _variant = "slab" })) end @@ -61,7 +62,8 @@ function ns.register_stair(def) fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, -0.5, 0, 0.5, 0.5, 0.5}} }, paramtype = "light", - paramtype2 = "facedir" + paramtype2 = "facedir", + _variant = "stair", })) rgt.register_node(def._name.."_stair_inner", extend(table.copy(def), { @@ -71,7 +73,8 @@ function ns.register_stair(def) fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, -0.5, 0, 0.5, 0.5, 0.5}, {-0.5, -0.5, -0.5, 0, 0.5, 0.5}} }, paramtype = "light", - paramtype2 = "facedir" + paramtype2 = "facedir", + _variant = "stair_inner", })) rgt.register_node(def._name.."_stair_outer", extend(def, { @@ -81,7 +84,8 @@ function ns.register_stair(def) fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, -0.5, 0.5, 0, 0.5, 0}} }, paramtype = "light", - paramtype2 = "facedir" + paramtype2 = "facedir", + _variant = "stair_outer", })) end