diff --git a/game/engines/default/engine/Module.lua b/game/engines/default/engine/Module.lua index 52c312ea29541e91434dcde1686c7f547c924128..2ef9cd2b43c4de67ac2d0853d2785c630e020d34 100644 --- a/game/engines/default/engine/Module.lua +++ b/game/engines/default/engine/Module.lua @@ -109,6 +109,8 @@ function _M:loadDefinition(dir, team, incompatible) setfenv(mod_def, mod) mod_def() mod.rng = nil + mod.team = team + mod.dir = dir if not mod.long_name or not mod.name or not mod.short_name or not mod.version or not mod.starter then print("Bad module definition", mod.long_name, mod.name, mod.short_name, mod.version, mod.starter) diff --git a/game/engines/default/modules/boot/dialogs/MainMenu.lua b/game/engines/default/modules/boot/dialogs/MainMenu.lua index 18f74c3d63e549cc19b1234db5bade65b9511d0e..1f0aacb5db5a9acd2a477b497d39e78a215a9e94 100644 --- a/game/engines/default/modules/boot/dialogs/MainMenu.lua +++ b/game/engines/default/modules/boot/dialogs/MainMenu.lua @@ -27,6 +27,7 @@ local Textbox = require "engine.ui.Textbox" local Separator = require "engine.ui.Separator" local KeyBind = require "engine.KeyBind" local FontPackage = require "engine.FontPackage" +local Module = require "engine.Module" module(..., package.seeall, class.inherit(Dialog)) @@ -48,6 +49,22 @@ function _M:init() local list = { "resume", "keybinds_all", + {"Game Options", function() + -- OMFG this is such a nasty hack, I'm nearly pround of it ! + local mod = Module:listModules().tome + if not mod then return end + + local allmounts = fs.getSearchPath(true) + if not mod.team then fs.mount(fs.getRealPath(mod.dir), "/mod", false) + else fs.mount(fs.getRealPath(mod.team), "/", false) end + + local d = require("mod.dialogs.GameOptions").new() + function d:unload() + fs.reset() + fs.mountAll(allmounts) + end + game:registerDialog(d) + end}, "video", "sound", "steam", diff --git a/game/modules/tome/dialogs/GameOptions.lua b/game/modules/tome/dialogs/GameOptions.lua index 593d7ba49de271cc10c834ddcbee79d726801753..6f61a6cfd3b99124afc332c856f34c3c73b97eab 100644 --- a/game/modules/tome/dialogs/GameOptions.lua +++ b/game/modules/tome/dialogs/GameOptions.lua @@ -30,6 +30,9 @@ local FontPackage = require "engine.FontPackage" module(..., package.seeall, class.inherit(Dialog)) function _M:init() + -- we can be called from the boot menu, so make sure to load initial settings in this case + dofile("/mod/settings.lua") + Dialog.init(self, "Game Options", game.w * 0.8, game.h * 0.8) self.vsep = Separator.new{dir="horizontal", size=self.ih - 10} @@ -69,6 +72,10 @@ function _M:select(item) end end +function _M:isTome() + return game.__mod_info.short_name == "tome" +end + function _M:switchTo(kind) self['generateList'..kind:capitalize()](self) self:triggerHook{"GameOptions:generateList", list=self.list, kind=kind} @@ -105,7 +112,7 @@ function _M:generateListUi() game:registerDialog(GetQuantity.new("Enter movement speed(lower is faster)", "From 0 to 60", config.settings.tome.smooth_move, 60, function(qty) game:saveSettings("tome.smooth_move", ("tome.smooth_move = %d\n"):format(qty)) config.settings.tome.smooth_move = qty - engine.Map.smooth_scroll = qty + if self:isTome() then engine.Map.smooth_scroll = qty end self.c_list:drawItem(item) end)) end,} @@ -163,7 +170,7 @@ function _M:generateListUi() config.settings.tome.show_grid_lines = not config.settings.tome.show_grid_lines game:saveSettings("tome.show_grid_lines", ("tome.show_grid_lines = %s\n"):format(tostring(config.settings.tome.show_grid_lines))) self.c_list:drawItem(item) - game:createMapGridLines() + if self:isTome() then game:createMapGridLines() end end,} local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Select the fonts look. Fantasy is the default one. Basic is simplified and smaller.\nYou must restart the game for the change to take effect."} @@ -199,8 +206,10 @@ function _M:generateListUi() qty = util.bound(qty, 0, 20) game:saveSettings("tome.log_fade", ("tome.log_fade = %d\n"):format(qty)) config.settings.tome.log_fade = qty - game.uiset.logdisplay:enableFading(config.settings.tome.log_fade) - profile.chat:enableFading(config.settings.tome.log_fade) + if self:isTome() then + game.uiset.logdisplay:enableFading(config.settings.tome.log_fade) + profile.chat:enableFading(config.settings.tome.log_fade) + end self.c_list:drawItem(item) end, 0)) end,} @@ -217,44 +226,45 @@ function _M:generateListUi() end, 1)) end,} - if game.uiset:checkGameOption("icons_temp_effects") then - local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Uses the icons for status effects instead of text.#WHITE#"} - list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons status effects#WHITE##{normal}#", status=function(item) - return tostring(config.settings.tome.effects_icons and "enabled" or "disabled") - end, fct=function(item) - config.settings.tome.effects_icons = not config.settings.tome.effects_icons - game:saveSettings("tome.effects_icons", ("tome.effects_icons = %s\n"):format(tostring(config.settings.tome.effects_icons))) - game.player.changed = true - self.c_list:drawItem(item) - end,} - end - - if game.uiset:checkGameOption("icons_hotkeys") then - local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Uses the icons hotkeys toolbar or the textual one.#WHITE#"} - list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons hotkey toolbar#WHITE##{normal}#", status=function(item) - return tostring(config.settings.tome.hotkey_icons and "enabled" or "disabled") - end, fct=function(item) - config.settings.tome.hotkey_icons = not config.settings.tome.hotkey_icons - game:saveSettings("tome.hotkey_icons", ("tome.hotkey_icons = %s\n"):format(tostring(config.settings.tome.hotkey_icons))) - game.player.changed = true - game:resizeIconsHotkeysToolbar() - self.c_list:drawItem(item) - end,} - end + if self:isTome() then + if game.uiset:checkGameOption("icons_temp_effects") then + local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Uses the icons for status effects instead of text.#WHITE#"} + list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons status effects#WHITE##{normal}#", status=function(item) + return tostring(config.settings.tome.effects_icons and "enabled" or "disabled") + end, fct=function(item) + config.settings.tome.effects_icons = not config.settings.tome.effects_icons + game:saveSettings("tome.effects_icons", ("tome.effects_icons = %s\n"):format(tostring(config.settings.tome.effects_icons))) + if self:isTome() then game.player.changed = true end + self.c_list:drawItem(item) + end,} + end - if game.uiset:checkGameOption("hotkeys_rows") then - local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Number of rows to show in the icons hotkeys toolbar.#WHITE#"} - list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons hotkey toolbar rows#WHITE##{normal}#", status=function(item) - return tostring(config.settings.tome.hotkey_icons_rows) - end, fct=function(item) - game:registerDialog(GetQuantity.new("Number of icons rows", "From 1 to 4", config.settings.tome.hotkey_icons_rows, 4, function(qty) - qty = util.bound(qty, 1, 4) - game:saveSettings("tome.hotkey_icons_rows", ("tome.hotkey_icons_rows = %d\n"):format(qty)) - config.settings.tome.hotkey_icons_rows = qty - game:resizeIconsHotkeysToolbar() + if game.uiset:checkGameOption("icons_hotkeys") then + local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Uses the icons hotkeys toolbar or the textual one.#WHITE#"} + list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons hotkey toolbar#WHITE##{normal}#", status=function(item) + return tostring(config.settings.tome.hotkey_icons and "enabled" or "disabled") + end, fct=function(item) + config.settings.tome.hotkey_icons = not config.settings.tome.hotkey_icons + game:saveSettings("tome.hotkey_icons", ("tome.hotkey_icons = %s\n"):format(tostring(config.settings.tome.hotkey_icons))) + if self:isTome() then game.player.changed = true game:resizeIconsHotkeysToolbar() end self.c_list:drawItem(item) - end, 1)) - end,} + end,} + end + + if game.uiset:checkGameOption("hotkeys_rows") then + local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Number of rows to show in the icons hotkeys toolbar.#WHITE#"} + list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Icons hotkey toolbar rows#WHITE##{normal}#", status=function(item) + return tostring(config.settings.tome.hotkey_icons_rows) + end, fct=function(item) + game:registerDialog(GetQuantity.new("Number of icons rows", "From 1 to 4", config.settings.tome.hotkey_icons_rows, 4, function(qty) + qty = util.bound(qty, 1, 4) + game:saveSettings("tome.hotkey_icons_rows", ("tome.hotkey_icons_rows = %d\n"):format(qty)) + config.settings.tome.hotkey_icons_rows = qty + if self:isTome() then game:resizeIconsHotkeysToolbar() end + self.c_list:drawItem(item) + end, 1)) + end,} + end end local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Size of the icons in the hotkeys toolbar.#WHITE#"} @@ -265,7 +275,7 @@ function _M:generateListUi() qty = util.bound(qty, 32, 64) game:saveSettings("tome.hotkey_icons_size", ("tome.hotkey_icons_size = %d\n"):format(qty)) config.settings.tome.hotkey_icons_size = qty - game:resizeIconsHotkeysToolbar() + if self:isTome() then game:resizeIconsHotkeysToolbar() end self.c_list:drawItem(item) end, 32)) end,} @@ -288,36 +298,38 @@ function _M:generateListUi() self.c_list:drawItem(item) end,} - local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString[[Toggles between various tactical information display: + if self:isTome() then + local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString[[Toggles between various tactical information display: - Combined healthbar and small tactical frame - Combined healthbar and big tactical frame - Only healthbar - No tactical information at all #{italic}#You can also change this directly ingame by pressing shift+T.#{normal}##WHITE#]]} - list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Tactical overlay#WHITE##{normal}#", status=function(item) - local vs = "Combined Small" - if game.always_target == "old" then - local vs = "Combined Big" - elseif game.always_target == "health" then - local vs = "Only Healthbars" - elseif game.always_target == nil then - local vs = "Nothing" - elseif game.always_target == true then + list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Tactical overlay#WHITE##{normal}#", status=function(item) local vs = "Combined Small" - end - return vs - end, fct=function(item) - Dialog:listPopup("Tactical overlay", "Select overlay mode", { - {name="Combined Small", mode=true}, - {name="Combined Big", mode="old"}, - {name="Only Healthbars", mode="health"}, - {name="Nothing", mode=nil}, - }, 300, 200, function(sel) - if not sel then return end - game:setTacticalMode(sel.mode) - end) - end,} + if game.always_target == "old" then + local vs = "Combined Big" + elseif game.always_target == "health" then + local vs = "Only Healthbars" + elseif game.always_target == nil then + local vs = "Nothing" + elseif game.always_target == true then + local vs = "Combined Small" + end + return vs + end, fct=function(item) + Dialog:listPopup("Tactical overlay", "Select overlay mode", { + {name="Combined Small", mode=true}, + {name="Combined Big", mode="old"}, + {name="Only Healthbars", mode="health"}, + {name="Nothing", mode=nil}, + }, 300, 200, function(sel) + if not sel then return end + game:setTacticalMode(sel.mode) + end) + end,} + end local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Toggles between a normal or flagpost tactical bars.#WHITE#"} list[#list+1] = { zone=zone, name=string.toTString"#GOLD##{bold}#Flagpost tactical bars#WHITE##{normal}#", status=function(item) @@ -344,7 +356,7 @@ function _M:generateListUi() config.settings.tome.fullscreen_stun = not config.settings.tome.fullscreen_stun game:saveSettings("tome.fullscreen_stun", ("tome.fullscreen_stun = %s\n"):format(tostring(config.settings.tome.fullscreen_stun))) self.c_list:drawItem(item) - if game.player.updateMainShader then game.player:updateMainShader() end + if self:isTome() then if game.player.updateMainShader then game.player:updateMainShader() end end end,} local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"If disabled you will not get a fullscreen notification of confusion effects. Beware.#WHITE#"} @@ -354,7 +366,7 @@ function _M:generateListUi() config.settings.tome.fullscreen_confusion = not config.settings.tome.fullscreen_confusion game:saveSettings("tome.fullscreen_confusion", ("tome.fullscreen_confusion = %s\n"):format(tostring(config.settings.tome.fullscreen_confusion))) self.c_list:drawItem(item) - if game.player.updateMainShader then game.player:updateMainShader() end + if self:isTome() then if game.player.updateMainShader then game.player:updateMainShader() end end end,} local zone = Textzone.new{width=self.c_desc.w, height=self.c_desc.h, text=string.toTString"Toggles advanced weapon statistics display.#WHITE#"} diff --git a/game/modules/tome/dialogs/GraphicMode.lua b/game/modules/tome/dialogs/GraphicMode.lua index cb03e63f32911c1c069718f5ab18fe0a601e3a81..9e272d8669f69e7f552de18f23b7f23b97f25daa 100644 --- a/game/modules/tome/dialogs/GraphicMode.lua +++ b/game/modules/tome/dialogs/GraphicMode.lua @@ -56,12 +56,23 @@ function _M:init() self.key:addBinds{ EXIT = function() - if self.changed then game:setupDisplayMode(true) end + if self.changed then + if self:isTome() then + game:setupDisplayMode(true) + else + local gfx = config.settings.tome.gfx + game:saveSettings("tome.gfx", ('tome.gfx = {tiles=%q, size=%q, tiles_custom_dir=%q, tiles_custom_moddable=%s, tiles_custom_adv=%s}\n'):format(gfx.tiles, gfx.size, gfx.tiles_custom_dir or "", gfx.tiles_custom_moddable and "true" or "false", gfx.tiles_custom_adv and "true" or "false")) + end + end game:unregisterDialog(self) end, } end +function _M:isTome() + return game.__mod_info.short_name == "tome" +end + function _M:doCustomTiles() local d = Dialog.new("Custom Tileset", 100, 100) diff --git a/game/modules/tome/load.lua b/game/modules/tome/load.lua index b61686210c6ebba8405cd8abe9d1397593fc42e7..4a3f52a2b6039ee772b9dd2aeefd9535dbfcd6c4 100644 --- a/game/modules/tome/load.lua +++ b/game/modules/tome/load.lua @@ -31,46 +31,9 @@ local Level = require "engine.Level" local FontPackage = require "engine.FontPackage" -- Init settings -config.settings.tome = config.settings.tome or {} -profile.mod.allow_build = profile.mod.allow_build or {} ---if type(config.settings.tome.autosave) == "nil" then -config.settings.tome.autosave = true ---end -if not config.settings.tome.smooth_move then config.settings.tome.smooth_move = 3 end -if type(config.settings.tome.twitch_move) == "nil" then config.settings.tome.twitch_move = true end -if not config.settings.tome.gfx then - local w, h = core.display.size() - if w >= 1000 then config.settings.tome.gfx = {size="64x64", tiles="shockbolt"} - else config.settings.tome.gfx = {size="48x48", tiles="shockbolt"} - end -end -if config.settings.tome.gfx.tiles == "mushroom" then config.settings.tome.gfx.tiles="shockbolt" end -if type(config.settings.tome.weather_effects) == "nil" then config.settings.tome.weather_effects = true end -if type(config.settings.tome.smooth_fov) == "nil" then config.settings.tome.smooth_fov = true end -if type(config.settings.tome.daynight) == "nil" then config.settings.tome.daynight = true end -if type(config.settings.tome.hotkey_icons) == "nil" then config.settings.tome.hotkey_icons = true end -if type(config.settings.tome.effects_icons) == "nil" then config.settings.tome.effects_icons = true end -if type(config.settings.tome.autoassign_talents_on_birth) == "nil" then config.settings.tome.autoassign_talents_on_birth = true end -if type(config.settings.tome.chat_log) == "nil" then config.settings.tome.chat_log = true end -if type(config.settings.tome.actor_based_movement_mode) == "nil" then config.settings.tome.actor_based_movement_mode = true end -if type(config.settings.tome.rest_before_explore) == "nil" then config.settings.tome.rest_before_explore = true end -if type(config.settings.tome.lore_popup) == "nil" then config.settings.tome.lore_popup = true end -if type(config.settings.tome.auto_hotkey_object) == "nil" then config.settings.tome.auto_hotkey_object = true end -if type(config.settings.tome.immediate_melee_keys) == "nil" then config.settings.tome.immediate_melee_keys = true end -if type(config.settings.tome.immediate_melee_keys_auto) == "nil" then config.settings.tome.immediate_melee_keys_auto = true end -if type(config.settings.tome.allow_online_events) == "nil" then config.settings.tome.allow_online_events = true end -if type(config.settings.tome.small_frame_side) == "nil" then config.settings.tome.small_frame_side = true end -if type(config.settings.tome.fullscreen_stun) == "nil" then config.settings.tome.fullscreen_stun = true end -if type(config.settings.tome.fullscreen_confusion) == "nil" then config.settings.tome.fullscreen_confusion = true end -if type(config.settings.tome.show_grid_lines) == "nil" then config.settings.tome.show_grid_lines = false end -if not config.settings.tome.fonts then config.settings.tome.fonts = {type="fantasy", size="normal"} end -if not config.settings.tome.ui_theme2 then config.settings.tome.ui_theme2 = "metal" end -if not config.settings.tome.uiset_mode then config.settings.tome.uiset_mode = "Minimalist" end -if not config.settings.tome.log_lines then config.settings.tome.log_lines = 5 end -if not config.settings.tome.log_fade then config.settings.tome.log_fade = 3 end -if not config.settings.tome.scroll_dist then config.settings.tome.scroll_dist = 20 end -if not config.settings.tome.hotkey_icons_rows then config.settings.tome.hotkey_icons_rows = 1 end -if not config.settings.tome.hotkey_icons_size then config.settings.tome.hotkey_icons_size = 48 end +dofile("/mod/settings.lua") + +-- Apply some settings Map.smooth_scroll = config.settings.tome.smooth_move Map.faction_danger2 = "tactical_danger.png" Map.faction_danger1 = "tactical_enemy_strong.png"