diff --git a/mods/lzr_levels/data/level_data.csv b/mods/lzr_levels/data/level_data.csv index ab52225..50a8fe0 100644 --- a/mods/lzr_levels/data/level_data.csv +++ b/mods/lzr_levels/data/level_data.csv @@ -1,5 +1,6 @@ -lzr_levels_level_1.mts,Demo Level 1 -lzr_levels_level_2.mts,Demo Level 2 -lzr_levels_level_3.mts,Demo Level 3 -lzr_levels_level_4.mts,Demo Level 4 -lzr_levels_level_5.mts,Demo Level 5 +lzr_levels_level_1.mts,Demo Level 1,lzr_core:wood|lzr_decor:woodframed_glass +lzr_levels_level_2.mts,Demo Level 2,lzr_core:wood|lzr_decor:woodframed_glass +lzr_levels_level_3.mts,Demo Level 3,lzr_core:wood|lzr_decor:woodframed_glass +lzr_levels_level_4.mts,Demo Level 4,lzr_core:wood|lzr_decor:woodframed_glass +lzr_levels_level_5.mts,Demo Level 5,lzr_core:wood|lzr_decor:woodframed_glass +lzr_levels_level_6.mts,Demo Level 6,lzr_decor:ocean_stone|lzr_decor:ocean_stone|lzr_core:dirt|lzr_core:dirt diff --git a/mods/lzr_levels/init.lua b/mods/lzr_levels/init.lua index 794bcfa..17f1d5c 100644 --- a/mods/lzr_levels/init.lua +++ b/mods/lzr_levels/init.lua @@ -2,7 +2,8 @@ local S = minetest.get_translator("lzr_levels") lzr_levels = {} -local ROOM_NODE = "lzr_core:wood" +local CEILING_NODE = "lzr_core:wood" +local WALL_NODE = "lzr_core:wood" local WINDOW_NODE = "lzr_decor:woodframed_glass" local FLOOR_NODE = "lzr_core:wood" local WINDOW_HEIGHT = 3 @@ -47,7 +48,13 @@ local analyze_levels = function() assert(matches ~= nil, "Malformed level_data.csv") local filename = matches[1] local lname = matches[2] - table.insert(level_data, {filename=filename, name=lname}) + local nodes = matches[3] + local node_matches = string.split(nodes, "|") + local node_wall = node_matches[1] + local node_window = node_matches[2] or node_wall + local node_floor = node_matches[3] or node_wall + local node_ceiling = node_matches[4] or node_wall + table.insert(level_data, {filename=filename, name=lname, node_wall=node_wall, node_window=node_window, node_floor=node_floor, node_ceiling=node_ceiling}) end lzr_levels.LAST_LEVEL = #level_data @@ -82,6 +89,7 @@ local set_room_nodes = function(param) local posses_border = {} local posses_window = {} local posses_floor = {} + local posses_ceiling = {} local size = vector.add(psize, {x=1,y=1,z=1}) set_level_size(psize) for x=0,size.x do @@ -96,6 +104,8 @@ local set_room_nodes = function(param) else if y == 0 then table.insert(posses_floor, vector.add(pos, offset)) + elseif y == size.y then + table.insert(posses_ceiling, vector.add(pos, offset)) else table.insert(posses_border, vector.add(pos, offset)) end @@ -104,9 +114,10 @@ local set_room_nodes = function(param) end end end - minetest.bulk_set_node(posses_floor, {name=FLOOR_NODE}) - minetest.bulk_set_node(posses_border, {name=ROOM_NODE}) - minetest.bulk_set_node(posses_window, {name=WINDOW_NODE}) + minetest.bulk_set_node(posses_floor, {name=param.nodes.node_floor}) + minetest.bulk_set_node(posses_border, {name=param.nodes.node_wall}) + minetest.bulk_set_node(posses_window, {name=param.nodes.node_window}) + minetest.bulk_set_node(posses_ceiling, {name=param.nodes.node_ceiling}) end local get_singleplayer = function() @@ -187,16 +198,30 @@ end -- Either one of these (or none of them for empty room): -- - level: level ID (for builtin level) -- - schematic: Path to schematic +-- - nodes: Table containing: +-- - node_floor, node_ceiling, node_wall, node_window function lzr_levels.build_room(room_data) prepare_room(room_data) end function lzr_levels.prepare_and_build_level(level, spawn_pos, yaw) - lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=level_data[level].size, level=level, spawn_pos=spawn_pos, yaw=yaw}) + local nodes = { + node_floor = level_data[level].node_floor, + node_wall = level_data[level].node_wall, + node_ceiling = level_data[level].node_ceiling, + node_window = level_data[level].node_window, + } + lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=level_data[level].size, level=level, spawn_pos=spawn_pos, yaw=yaw, nodes=nodes}) end function lzr_levels.prepare_and_build_custom_level(schematic, spawn_pos, yaw) - lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=schematic.size, schematic=schematic, spawn_pos=spawn_pos, yaw=yaw}) + local nodes = { + node_floor = FLOOR_NODE, + node_wall = WALL_NODE, + node_ceiling = CEILING_NODE, + node_window = WINDOW_NODE, + } + lzr_levels.build_room({pos=lzr_globals.LEVEL_POS, size=schematic.size, schematic=schematic, spawn_pos=spawn_pos, yaw=yaw, nodes=nodes}) end function lzr_levels.build_level_raw(schematic_specifier) diff --git a/mods/lzr_levels/schematics/lzr_levels_level_6.mts b/mods/lzr_levels/schematics/lzr_levels_level_6.mts new file mode 100644 index 0000000..9ea9486 Binary files /dev/null and b/mods/lzr_levels/schematics/lzr_levels_level_6.mts differ