Skip to content

Commit

Permalink
Give subgames the ability to disallow specific mapgens (minetest#6792)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ezhh authored and SmallJoker committed Dec 16, 2017
1 parent 770eb09 commit 649eef9
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 15 deletions.
2 changes: 1 addition & 1 deletion builtin/common/misc_helpers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ end
--------------------------------------------------------------------------------
if INIT == "mainmenu" then
function core.get_game(index)
local games = game.get_games()
local games = core.get_games()

if index > 0 and index <= #games then
return games[index]
Expand Down
48 changes: 35 additions & 13 deletions builtin/mainmenu/dlg_create_world.lua
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,39 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

local worldname = ""

local function create_world_formspec(dialogdata)
local mapgens = core.get_mapgen_names()

local current_seed = core.settings:get("fixed_map_seed") or ""
local current_mg = core.settings:get("mg_name")
local gameid = core.settings:get("menu_last_game")

local game, gameidx = nil , 0
if gameid ~= nil then
game, gameidx = gamemgr.find_by_gameid(gameid)

if gameidx == nil then
gameidx = 0
end
end

local gamepath = core.get_game(gameidx).path
local gameconfig = Settings(gamepath.."/game.conf")

local disallowed_mapgens = (gameconfig:get("disallowed_mapgens") or ""):split()
for key, value in pairs(disallowed_mapgens) do
disallowed_mapgens[key] = value:trim()
end

if disallowed_mapgens then
for i = #mapgens, 1, -1 do
if table.indexof(disallowed_mapgens, mapgens[i]) > 0 then
table.remove(mapgens, i)
end
end
end

local mglist = ""
local selindex = 1
Expand All @@ -32,23 +60,12 @@ local function create_world_formspec(dialogdata)
mglist = mglist .. v .. ","
end
mglist = mglist:sub(1, -2)

local gameid = core.settings:get("menu_last_game")

local game, gameidx = nil , 0
if gameid ~= nil then
game, gameidx = gamemgr.find_by_gameid(gameid)

if gameidx == nil then
gameidx = 0
end
end

current_seed = core.formspec_escape(current_seed)
local retval =
"size[11.5,6.5,true]" ..
"label[2,0;" .. fgettext("World name") .. "]"..
"field[4.5,0.4;6,0.5;te_world_name;;]" ..
"field[4.5,0.4;6,0.5;te_world_name;;" .. minetest.formspec_escape(worldname) .. "]" ..

"label[2,1;" .. fgettext("Seed") .. "]"..
"field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" ..
Expand Down Expand Up @@ -121,10 +138,14 @@ local function create_world_buttonhandler(this, fields)
return true
end

worldname = fields.te_world_name

if fields["games"] then
local gameindex = core.get_textlist_index("games")
core.settings:set("menu_last_game", gamemgr.games[gameindex].id)
return true
end

if fields["world_create_cancel"] then
this:delete()
return true
Expand All @@ -135,6 +156,7 @@ end


function create_create_world_dlg(update_worldlistfilter)
worldname = ""
local retval = dialog_create("sp_create_world",
create_world_formspec,
create_world_buttonhandler,
Expand Down
12 changes: 11 additions & 1 deletion doc/lua_api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,24 @@ Games are looked up from:

where `gameid` is unique to each game.

The game directory contains the file `game.conf`, which contains these fields:
The game directory contains the file `game.conf`, which contains:

name = <Human-readable full name of the game>

e.g.

name = Minetest

Optionally, game.conf can also contain:

disallowed_mapgens = <comma-separated mapgens>

e.g.

disallowed_mapgens = v5,v6,flat

These mapgens are removed from the list of mapgens for the game.

The game directory can contain the file minetest.conf, which will be used
to set default settings when running the particular game.
It can also contain a settingtypes.txt in the same format as the one in builtin.
Expand Down

0 comments on commit 649eef9

Please sign in to comment.