Rework large parts of init.lua, except the formspecs

This commit is contained in:
ExeVirus 2021-11-02 22:03:12 -04:00
parent 7318dd22e5
commit 141451cf93
6 changed files with 102 additions and 94 deletions

View File

@ -1,14 +1,38 @@
-- ██╗ █████╗ ██████╗ ██╗ ██╗██████╗ ██╗███╗ ██╗████████╗██╗ ██╗
-- ██║ ██╔══██╗██╔══██╗╚██╗ ██╔╝██╔══██╗██║████╗ ██║╚══██╔══╝██║ ██║
-- ██║ ███████║██████╔╝ ╚████╔╝ ██████╔╝██║██╔██╗ ██║ ██║ ███████║
-- ██║ ██╔══██║██╔══██╗ ╚██╔╝ ██╔══██╗██║██║╚██╗██║ ██║ ██╔══██║
-- ███████╗██║ ██║██████╔╝ ██║ ██║ ██║██║██║ ╚████║ ██║ ██║ ██║
-- ╚══════╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝
-- Ascii art font: ANSI Shadow, from patorjk.com/software/taag/
--
-- The code for labyrinth is licensed as follows:
-- MIT License, ExeVirus (c) 2021
--
--
-- Labyrinth Core Game
--
--
--
-- Please see the LICENSE file for texture licenses
--Settings Changes --
--BE VERY CAREFUL WHEN PLAYING WITH OTHER PEOPLES SETTINGS--
minetest.settings:set("enable_damage","false")
local max_block_send_distance = minetest.settings:get("max_block_send_distance")
local block_send_optimize_distance = minetest.settings:get("block_send_optimize_distance")
if max_block_send_distance == 31 then -- no one would set these to 31, so it must have been a crash,
max_block_send_distance = 8 -- and we should revert to defaults on proper shutdown
end
if block_send_optimize_distance == 31 then
block_send_optimize_distance = 4
end
minetest.settings:set("max_block_send_distance","8")
minetest.settings:set("block_send_optimize_distance","4")
minetest.register_on_shutdown(function()
minetest.settings:set("max_block_send_distance",tostring(max_block_send_distance))
minetest.settings:set("block_send_optimize_distance",tostring(block_send_optimize_distance))
end)
--End Settings Changes--
local GenMaze = dofile(minetest.get_modpath("game") .. "/maze.lua")
local DefaultGenerateMaze = dofile(minetest.get_modpath("game") .. "/maze.lua")
local GenMaze = DefaultGenerateMaze
--Style registrations
@ -17,25 +41,27 @@ local styles = {}
local music = nil
-------------------
-- Global function register_style(name, map_from_maze)
-- Global function laby_register_style(name, music_name, map_from_maze, cleanup, genMaze)
--
-- name: text in lowercase, typically, of the map style
-- music_name: music file name
-- map_from_maze = function(maze, player)
-- maze is from GenMaze() above, an input
-- player is the player_ref to place them at the start of the maze
-- map_from_maze should turn on the music for the maze
-- cleanup = function (maze_w, maze_h) -- should replace maze with air
-- genMaze is an optional arguement to provide your own algorithm for this style to generate maps with
--
function register_style(name, music_name, map_from_maze, cleanup)
function laby_register_style(name, music_name, map_from_maze, cleanup, genMaze)
numStyles = numStyles + 1
styles[numStyles] = {}
styles[numStyles].name = name
styles[numStyles].music = music_name
styles[numStyles].gen_map = map_from_maze
styles[numStyles].cleanup = cleanup
styles[numStyles].genMaze = genMaze
end
--Common node between styles
--Common node between styles, used for hidden floor to fall onto
minetest.register_node("game:inv",
{
description = "Ground Block",
@ -51,8 +77,6 @@ minetest.register_item(":", {
groups = {not_in_creative_inventory=1},
})
--Style Registrations
dofile(minetest.get_modpath("game") .. "/styles/classic.lua")
dofile(minetest.get_modpath("game") .. "/styles/grassy.lua")
@ -68,6 +92,11 @@ local gscroll = 0
local selectedStyle = 1
local first_load = false
local function setup(player)
if styles[selectedStyle].genMaze ~= nil and type(styles[selectedStyle].genMaze) == "function" then
GenMaze = styles[selectedStyle].genMaze
else
GenMaze = DefaultGenerateMaze
end
--Load up the level
local maze = GenMaze(math.floor(gwidth/2)*2+((gwidth+1)%2),math.floor(gheight/2)*2+(gheight+1)%2)
restart = styles[selectedStyle].gen_map
@ -83,7 +112,6 @@ local function setup(player)
})
minetest.after(2, function() first_load = true end)
end
--------- GUI ------------
@ -94,24 +122,22 @@ local height = height_in or 42
local scroll = scroll_in or 0
--Header
local r = {
"formspec_version[3]",
"size[11,11]",
"position[0.5,0.5]",
"anchor[0.5,0.5]",
"no_prepend[]",
"bgcolor[#DFE0EDD0;both;#00000080]",
"box[0.5,1;10,9.5;#DDD7]",
[[
formspec_version[3]
size[11,11]
position[0.5,0.5]
anchor[0.5,0.5]
no_prepend[]
bgcolor[#DFE0EDD0;both;#00000080]
box[0.5,1;10,9.5;#DDD7]
hypertext[1,0.1;9,5;;<global halign=center color=#03A size=32 font=Regular>
Labyrinth<global halign=left color=#000 size=24 font=Regular>
Level style:]
button[7.5,0.15;3.3,0.7;labyexit;Quit Labyrinth]
scroll_container[0.5,2;10,2;scroll;horizontal;0.1]
]],
}
--title
table.insert(r,"hypertext[1,0.1;9,2;;")
table.insert(r,"<global halign=center color=#03A size=32 font=Regular>")
table.insert(r,"Labyrinth")
table.insert(r,"<global halign=left color=#000 size=24 font=Regular>\n\n")
table.insert(r,"Level style:]")
--quit game button
table.insert(r,"button[7.5,0.15;3.3,0.7;labyexit;Quit Labyrinth]")
--Scroll container containing setnames with icons:
table.insert(r,"scroll_container[0.5,2;10,2;scroll;horizontal;0.1]")
--for each set, output the icon and set_name as a button
for i=1, numStyles, 1 do
if selectedStyle == i then
@ -121,42 +147,38 @@ for i=1, numStyles, 1 do
table.insert(r,"image_button["..((i-1)*2+0.25)..",0.15;1.5,1.5;"..name..".png;style"..i..";"..name.."]")
end
table.insert(r,"scroll_container_end[]")
table.insert(r,"scrollbaroptions[max="..(numStyles*20)..";thumbsize="..(numStyles*10).."]")
table.insert(r,"scrollbaroptions[max="..(numStyles*10)..";thumbsize="..(numStyles*10).."]")
table.insert(r,"scrollbar[1,4;9,0.5;horizontal;scroll;"..scroll.."]")
table.insert(r,"button_exit[1.25,5.5;4,1;easy;Easy (40x40)]")
table.insert(r,"button_exit[5.75,5.5;4,1;medium;Medium (70x70)]")
table.insert(r,"button_exit[1.25,7;4,1;hard;Hard (120x120)]")
table.insert(r,
[[button_exit[1.25,5.5;4,1;easy;Easy (40x40)]
button_exit[5.75,5.5;4,1;medium;Medium (70x70)]
button_exit[1.25,7;4,1;hard;Hard (120x120)]
]])
table.insert(r,"field[5.75,6.9;4,0.5;custom_w;"..minetest.colorize("#000","Width")..";"..width.."]")
table.insert(r,"field[5.75,7.9;4,0.5;custom_h;"..minetest.colorize("#000","Height")..";"..height.."]")
table.insert(r,"field_close_on_enter[custom_w;false]")
table.insert(r,"field_close_on_enter[custom_h;false]")
table.insert(r,"button_exit[5.75,8.5;4,1;custom;Custom]")
table.insert(r,
[[field_close_on_enter[custom_w;false]
field_close_on_enter[custom_h;false]
button_exit[5.75,8.5;4,1;custom;Custom]
]])
return table.concat(r);
end
local function pause_menu()
local r = {
"formspec_version[3]",
"size[8,8]",
"position[0.5,0.5]",
"anchor[0.5,0.5]",
"no_prepend[]",
"bgcolor[#DFE0EDD0;both;#00000080]",
}
table.insert(r,"button_exit[0.6,0.5;6.8,1;game_menu;Quit to Game Menu]")
table.insert(r,"button_exit[0.6,2;6.8,1;restart;Restart with new Map]")
table.insert(r,"hypertext[2,3.5;4,4.25;;")
table.insert(r,"<global halign=center color=#03A size=32 font=Regular>")
table.insert(r,"Credits")
table.insert(r,"<global halign=center color=#000 size=16 font=Regular>\n")
table.insert(r,"Original Game by ExeVirus\n")
table.insert(r,"Source code is MIT License, 2021\n")
table.insert(r,"Media/Music is:\nCC-BY-SA, ExeVirus 2021\n")
table.insert(r,"Music coming soon to Spotify and other streaming services!\n]")
return table.concat(r);
local function pause_menu() return
[[formspec_version[3]
size[8,8]
position[0.5,0.5]
anchor[0.5,0.5]
no_prepend[]
bgcolor[#DFE0EDD0;both;#00000080]
button_exit[0.6,0.5;6.8,1;game_menu;Quit to Game Menu]
button_exit[0.6,2;6.8,1;restart;Restart with new Map]
hypertext[2,3.5;4,4.25;;<global halign=center color=#03A size=32 font=Regular>Credits<global halign=center color=#000 size=16 font=Regular>
Original Game by ExeVirus
Source code is MIT License, 2021
Media/Music is:\nCC-BY-SA, ExeVirus 2021
Music coming soon to Spotify and other streaming services!]
]]
end
local function to_game_menu(player)
@ -252,40 +274,28 @@ end
minetest.register_on_player_receive_fields(onRecieveFields)
local function safe_clear()
local function safe_clear(w, l)
local vm = minetest.get_voxel_manip()
local emin, emax = vm:read_from_map({x=0,y=-20,z=0}, {x=225,y=10,z=225})
local data = vm:get_data()
local a = VoxelArea:new{
MinEdge = emin,
MaxEdge = emax
}
local air = minetest.get_content_id("air")
--Generally a good idea to zero it out
for z=0, 225 do --z
for y=0,10 do --
for x=0, 225 do --x
data[a:index(x, y, z)] = air
end
end
end
vm:set_data(data)
vm:write_to_map(true)
local vm = minetest.get_voxel_manip()
local emin, emax = vm:read_from_map({x=-50,y=-20,z=-50}, {x=225,y=-20,z=225})
local emin, emax = vm:read_from_map({x=-10,y=-11,z=-10}, {x=w,y=10,z=l})
local data = vm:get_data()
local a = VoxelArea:new{
MinEdge = emin,
MaxEdge = emax
}
local invisible = minetest.get_content_id("game:inv")
local air = minetest.get_content_id("air")
--Generally a good idea to zero it out
for z=-50, 250 do --z
for x=-50, 250 do --x
data[a:index(x, -20, z)] = invisible
for z=0, l-10 do --z
for y=0,10 do --y
for x=0, w-10 do --x
data[a:index(x, y, z)] = air
end
end
end
for z=-10, l do --z
for x=-10, w do --x
data[a:index(x, -11, z)] = invisible
end
end
vm:set_data(data)
@ -294,7 +304,7 @@ end
minetest.register_on_joinplayer(
function(player)
safe_clear()
safe_clear(300,300)
player:set_properties({
textures = {"inv.png", "inv.png"},
visual = "upright_sprite",
@ -335,5 +345,3 @@ function(dtime)
end
end
)

View File

@ -165,4 +165,4 @@ local function cleanup(width, height)
vm:write_to_map(true)
end
register_style("cave","cave", map_function, cleanup)
laby_register_style("cave","cave", map_function, cleanup)

View File

@ -125,4 +125,4 @@ local function cleanup(width, height)
vm:write_to_map(true)
end
register_style("classic","classic", map_function, cleanup)
laby_register_style("classic","classic", map_function, cleanup)

View File

@ -226,4 +226,4 @@ local function cleanup(width, height)
minetest.set_timeofday(0.5)
end
register_style("club","club", map_function, cleanup)
laby_register_style("club","club", map_function, cleanup)

View File

@ -78,4 +78,4 @@ local function cleanup(width, height)
vm:write_to_map(true)
end
register_style("glass","glass", map_function, cleanup)
laby_register_style("glass","glass", map_function, cleanup)

View File

@ -141,4 +141,4 @@ local function cleanup(width, height)
vm:write_to_map(true)
end
register_style("grassy","grassy", map_function, cleanup)
laby_register_style("grassy","grassy", map_function, cleanup)