diff --git a/mods/lzr_globals/init.lua b/mods/lzr_globals/init.lua index 2a4ba1a..ffa8207 100644 --- a/mods/lzr_globals/init.lua +++ b/mods/lzr_globals/init.lua @@ -6,3 +6,6 @@ lzr_globals.PLAYFIELD_END = vector.add(lzr_globals.PLAYFIELD_START, lzr_globals. lzr_globals.LEVEL_POS = { x = 0, y = 0, z = 0 } lzr_globals.MENU_SHIP_POS = { x = -500, y = -4, z = -500 } lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET = { x = 7, y = 8.5, z = 29 } +lzr_globals.MENU_SHIP_STARTBOOK_OFFSET = { x = 7, y = 10, z = 31 } +lzr_globals.MENU_PLAYER_SPAWN_POS = vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET) + diff --git a/mods/lzr_levels/init.lua b/mods/lzr_levels/init.lua index bea4927..bc5dc3f 100644 --- a/mods/lzr_levels/init.lua +++ b/mods/lzr_levels/init.lua @@ -65,15 +65,20 @@ function lzr_levels.build_level(level) return minetest.place_schematic(lzr_globals.LEVEL_POS, minetest.get_modpath("lzr_levels").."/schematics/lzr_levels_level_"..tonumber(level)..".mts", "0", {}, true, "") end -local function reset_inventory(player) +local function clear_inventory(player) local inv = player:get_inventory() for i=1,inv:get_size("main") do inv:set_stack("main", i, "") end +end + +local function reset_inventory(player) + clear_inventory(player) + local inv = player:get_inventory() inv:add_item("main", "screwdriver:screwdriver") end -local current_level = 1 +local current_level = nil local get_singleplayer = function() return minetest.get_player_by_name("singleplayer") @@ -98,6 +103,13 @@ function lzr_levels.next_level() end end +function lzr_levels.leave_level() + local player = get_singleplayer() + current_level = nil + clear_inventory(player) + player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET)) +end + minetest.register_chatcommand("level", { privs = { server = true }, description = S("Go to level"), @@ -121,7 +133,25 @@ minetest.register_chatcommand("restart", { params = "", description = S("Restart current level"), func = function(name, param) - lzr_levels.start_level(current_level) - return true + if current_level then + lzr_levels.start_level(current_level) + return true + else + return false, S("Not playing in a level!") + end + end, +}) + +minetest.register_chatcommand("leave", { + privs = {}, + params = "", + description = S("Leave current level"), + func = function(name, param) + if current_level then + lzr_levels.leave_level(current_level) + return true + else + return false, S("Not playing in a level!") + end end, }) diff --git a/mods/lzr_menu/init.lua b/mods/lzr_menu/init.lua index 22b867c..be6f6a9 100644 --- a/mods/lzr_menu/init.lua +++ b/mods/lzr_menu/init.lua @@ -1,5 +1,8 @@ +local S = minetest.get_translator("lzr_menu") + local build_ship = function(pos) minetest.place_schematic(pos, minetest.get_modpath("lzr_menu").."/schematics/lzr_menu_ship.mts", "0", {}, true, "") + minetest.set_node(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_STARTBOOK_OFFSET), {name="lzr_menu:startbook", param2=0}) end local emerge_callback = function(blockpos, action, calls_remaining, param) @@ -25,4 +28,27 @@ minetest.register_on_joinplayer(function(player) player:set_pos(vector.add(lzr_globals.MENU_SHIP_POS, lzr_globals.MENU_SHIP_PLAYER_SPAWN_OFFSET)) end) +local on_punch = function() + lzr_levels.start_level(1) +end +local on_rightclick = on_punch + +minetest.register_node("lzr_menu:startbook", { + description = S("Start Game Book"), + tiles = { "lzr_menu_book_top.png", "lzr_menu_book_bottom.png", "lzr_menu_book_side.png", "lzr_menu_book_side.png", "lzr_menu_book_end.png", "lzr_menu_book_end.png" }, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + { -0.4375, -0.5, -0.375, 0.4375, -0.4375, 0.1875 }, + { -0.375, -0.4375, -0.375, 0.375, -0.375, 0.1875 } + } + }, + sunlight_propagates = true, + on_punch = on_punch, + on_rightclick = on_rightclick, + groups = { snappy = 3, not_in_creative_inventory = 1, }, +}) diff --git a/mods/lzr_menu/mod.conf b/mods/lzr_menu/mod.conf index 95460b9..c4a3810 100644 --- a/mods/lzr_menu/mod.conf +++ b/mods/lzr_menu/mod.conf @@ -1,2 +1,2 @@ name = lzr_menu -depends = lzr_globals, lzr_core, xdecor, lzr_mapgen +depends = lzr_globals, lzr_core, xdecor, lzr_mapgen, lzr_levels diff --git a/mods/lzr_menu/textures/lzr_menu_book_bottom.png b/mods/lzr_menu/textures/lzr_menu_book_bottom.png new file mode 100644 index 0000000..78b8f16 Binary files /dev/null and b/mods/lzr_menu/textures/lzr_menu_book_bottom.png differ diff --git a/mods/lzr_menu/textures/lzr_menu_book_end.png b/mods/lzr_menu/textures/lzr_menu_book_end.png new file mode 100644 index 0000000..1a587b4 Binary files /dev/null and b/mods/lzr_menu/textures/lzr_menu_book_end.png differ diff --git a/mods/lzr_menu/textures/lzr_menu_book_side.png b/mods/lzr_menu/textures/lzr_menu_book_side.png new file mode 100644 index 0000000..1ff4178 Binary files /dev/null and b/mods/lzr_menu/textures/lzr_menu_book_side.png differ diff --git a/mods/lzr_menu/textures/lzr_menu_book_top.png b/mods/lzr_menu/textures/lzr_menu_book_top.png new file mode 100644 index 0000000..5d57ab9 Binary files /dev/null and b/mods/lzr_menu/textures/lzr_menu_book_top.png differ diff --git a/mods/lzr_startitems/init.lua b/mods/lzr_startitems/init.lua deleted file mode 100644 index 90caf01..0000000 --- a/mods/lzr_startitems/init.lua +++ /dev/null @@ -1,7 +0,0 @@ -minetest.register_on_joinplayer(function(player) - local inv = player:get_inventory() - if inv:contains_item("main", "screwdriver:screwdriver") then - else - inv:add_item("main", "screwdriver:screwdriver") - end -end) diff --git a/mods/lzr_startitems/mod.conf b/mods/lzr_startitems/mod.conf deleted file mode 100644 index c986004..0000000 --- a/mods/lzr_startitems/mod.conf +++ /dev/null @@ -1,2 +0,0 @@ -name = lzr_startitems -depends = screwdriver