Skip to content
Permalink
Browse files

Give subgames the ability to disallow specific mapgens (#6792)

  • Loading branch information...
Ezhh authored and SmallJoker committed Dec 16, 2017
1 parent 770eb09 commit 649eef9e4fe4ef6a59ca9f59c900c6e0900cfb3a
Showing with 47 additions and 15 deletions.
  1. +1 −1 builtin/common/misc_helpers.lua
  2. +35 −13 builtin/mainmenu/dlg_create_world.lua
  3. +11 −1 doc/lua_api.txt
@@ -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]
@@ -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
@@ -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 .. "]" ..
@@ -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
@@ -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,
@@ -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.

2 comments on commit 649eef9

@Xaleth

This comment has been minimized.

Copy link

replied Dec 16, 2017

One suggestion: the end-user (non-coder) should be notified that his/her chosen mapgen is not to be used in the subgame (s)he installed. Otherwise, you'll surely get angry posts in the forums.

@Ezhh

This comment has been minimized.

Copy link
Member Author

replied Dec 16, 2017

That should be included in subgame documentation.

Please sign in to comment.
You can’t perform that action at this time.