Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Give subgames the ability to disallow specific mapgens (#6792)
  • 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
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
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
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

2 comments on commit 649eef9

@Xaleth
Copy link

@Xaleth Xaleth commented on 649eef9 Dec 16, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Contributor Author

@Ezhh Ezhh commented on 649eef9 Dec 16, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That should be included in subgame documentation.

Please sign in to comment.