diff --git a/game/engines/default/engine/version.lua b/game/engines/default/engine/version.lua index 2ca15ab228f218e88c5c43e63b6f6d292f462774..7975bb63d79ae01096511f6feb30c160d2171b10 100644 --- a/game/engines/default/engine/version.lua +++ b/game/engines/default/engine/version.lua @@ -18,5 +18,15 @@ -- darkgod@te4.org -- Engine Version -engine.version = {0,9,10,"te4"} -engine.version_id = "te4-0.9.10" +engine.version = {0,9,9,"te4"} +engine.version_id = "te4-0.9.9" + +function engine.version_check(v) + local ev = engine.version + if v[4] ~= ev[4] then return "different engine" end + if v[1] > ev[1] then return "newer" end + if v[1] == ev[1] and v[2] > ev[2] then return "newer" end + if v[1] == ev[1] and v[2] == ev[2] and v[3] > ev[3] then return "newer" end + if v[1] == ev[1] and v[2] == ev[2] and v[3] == ev[3] then return "same" end + return "lower" +end diff --git a/game/engines/default/special/mainmenu/class/Game.lua b/game/engines/default/special/mainmenu/class/Game.lua index 1725ad7e7087c284af92d3ba378a7e536ff92427..dbd6e0a6f1d5a6161432125ba02aebcdc4cfb577 100644 --- a/game/engines/default/special/mainmenu/class/Game.lua +++ b/game/engines/default/special/mainmenu/class/Game.lua @@ -201,6 +201,23 @@ function _M:selectStepMain() if not self.news then self.news = profile:getNews() + + if self.news then + local f = loadstring(self.news.text) + if f then + local env = {} + setfenv(f, env) + pcall(f) + if env.text and env.version then + self.news.text = env.text + print("Latest engine version available: ", env.version[4], env.version[1], env.version[2], env.version[3]) + self.latest_engine_version = env.version + else + self.news = nil + end + end + end + if not self.news then self.news = { title = 'Welcome to T-Engine and the Tales of Middle-earth', @@ -215,10 +232,13 @@ Remember that in most roguelikes death is usually permanent so be careful! Now go and have some fun!]] } end + self.tooltip:set("#AQUAMARINE#%s#WHITE#\n---\n%s", self.news.title, self.news.text) end self.step.do_tooltip = true + self:installNewEngine() + if not self.firstrunchecked then -- Check first time run for online profile self.firstrunchecked = true @@ -455,3 +475,20 @@ function _M:selectStepOnlineProfile() end, "Create", "Login") end end + +function _M:installNewEngine() + if not self.latest_engine_version then return end + if engine.version_check(self.latest_engine_version) == "newer" then + local url = ("http://te4.org/dl/engines/%s-%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]) + local d = DownloadDialog.new(("Downloading: T-Engine 4 %d.%d.%d"):format(self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]), url, function(di, data) + fs.mkdir("/engines") + local f = fs.open(("/engines/%s-%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]), "w") + for i, v in ipairs(data) do f:write(v) end + f:close() + + Dialog:simplePopup("Success!", "The new engine is installed, it will now restart using it.", function() util.showMainMenu() end) + end) + self:registerDialog(d) + d:startDownload() + end +end diff --git a/game/loader/init.lua b/game/loader/init.lua index 6f0cb3c2f3b0790fbcfb36e0f29af0cb6a724d8b..9f073f578639d0fab3590b354489e1e6db866a28 100644 --- a/game/loader/init.lua +++ b/game/loader/init.lua @@ -17,6 +17,10 @@ -- Nicolas Casalini "DarkGod" -- darkgod@te4.org +-- Setup the user directory +local homepath = fs.getUserPath()..fs.getPathSeparator()..fs.getHomePath()..fs.getPathSeparator().."4.0" +fs.mount(homepath, "/") + -- Look for the required engine and load it local args = {...} local req_engine = args[1] or "te4" @@ -96,5 +100,7 @@ elseif use_engine.load_dir then fs.mount(fs.getRealPath(use_engine.load_dir), "/") end +fs.umount(homepath) + -- RUN engine RUN !! dofile("/engine/init.lua")