diff --git a/game/engines/default/engine/version.lua b/game/engines/default/engine/version.lua index 7975bb63d79ae01096511f6feb30c160d2171b10..09a7015693e4b38cdad11b721468dda12ab3449a 100644 --- a/game/engines/default/engine/version.lua +++ b/game/engines/default/engine/version.lua @@ -18,11 +18,13 @@ -- darkgod@te4.org -- Engine Version -engine.version = {0,9,9,"te4"} -engine.version_id = "te4-0.9.9" +engine.version = {0,9,10,"te4",1} +engine.require_c_core = engine.version[5] +engine.version_id = ("%s-%d_%d.%d.%d"):format(engine.version[4], engine.require_c_core, engine.version[1], engine.version[2], engine.version[3]) function engine.version_check(v) local ev = engine.version + if v[5] ~= core.game.VERSION then return "bad C core" end 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 diff --git a/game/engines/default/special/mainmenu/class/Game.lua b/game/engines/default/special/mainmenu/class/Game.lua index 54f4bee0fb03a2b97f6fecee9d440302e1e1bffa..3609343ab1c80e70a54688eb1105746d0b0e0738 100644 --- a/game/engines/default/special/mainmenu/class/Game.lua +++ b/game/engines/default/special/mainmenu/class/Game.lua @@ -237,7 +237,7 @@ Now go and have some fun!]] end self.step.do_tooltip = true --- self:installNewEngine() + self:installNewEngine() if not self.firstrunchecked then -- Check first time run for online profile @@ -478,11 +478,12 @@ end function _M:installNewEngine() if not self.latest_engine_version then return end + print("te4.org told us latest engine is", self.latest_engine_version[4], self.latest_engine_version[5], self.latest_engine_version[1], self.latest_engine_version[2], self.latest_engine_version[3]) 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 url = ("http://te4.org/dl/engines/%s_%d:%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[5], 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") + local f = fs.open(("/engines/%s-%d_%d.%d.%d.teae"):format(self.latest_engine_version[4], self.latest_engine_version[5], 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() diff --git a/game/loader/init.lua b/game/loader/init.lua index 9f073f578639d0fab3590b354489e1e6db866a28..f91165821eaa0e8c25be73626481a22e83b2b927 100644 --- a/game/loader/init.lua +++ b/game/loader/init.lua @@ -26,29 +26,34 @@ local args = {...} local req_engine = args[1] or "te4" local req_version = args[2] or "LATEST" --- List all available engines local engines = {} + +local function tryLoadEngine(ff, dir, teae) + local env = {engine={}} + setfenv(ff, env) + pcall(ff) + if env.engine.version and env.engine.require_c_core == core.game.VERSION then + print("[ENGINE LOADER] available from "..(dir and "dir" or "teae")..": ", env.engine.version[4], env.engine.version[1], env.engine.version[2], env.engine.version[3]) + + local name = env.engine.version[4] + engines[name] = engines[name] or {} + engines[name][#engines[name]+1] = {env.engine.version[1], env.engine.version[2], env.engine.version[3], name, load_dir=dir, load_teae=teae} + end +end + +-- List all available engines for i, f in ipairs(fs.list("/engines/")) do if fs.exists("/engines/"..f.."/engine/version.lua") then local ff, err = loadfile("/engines/"..f.."/engine/version.lua") - if ff and not err then - local env = {engine={}} - setfenv(ff, env) - pcall(ff) - if env.engine.version then - print("[ENGINE LOADER] available from directory: ", env.engine.version[4], env.engine.version[1], env.engine.version[2], env.engine.version[3]) - - local name = env.engine.version[4] - engines[name] = engines[name] or {} - engines[name][#engines[name]+1] = {env.engine.version[1], env.engine.version[2], env.engine.version[3], name, load_dir="/engines/"..f.."/"} - end - end + if ff and not err then tryLoadEngine(ff, "/engines/"..f.."/", nil) end else - local _, _, name, vM, vm, vp = f:find("^([a-z0-9-]+)%-(%d+)%.(%d+)%.(%d+).teae$") + local _, _, name, cv, vM, vm, vp = f:find("^([a-z0-9-]+)%-(%d+)_(%d+)%.(%d+)%.(%d+).teae$") if name then - print("[ENGINE LOADER] available from teae: ", name, vM, vm, vp) - engines[name] = engines[name] or {} - engines[name][#engines[name]+1] = {tonumber(vM), tonumber(vm), tonumber(vp), name, load_teae="/engines/"..f} + local eng_path = fs.getRealPath("/engines/"..f) + fs.mount(eng_path, "/tmp") + local ff, err = loadfile("/tmp/engine/version.lua") + if ff and not err then tryLoadEngine(ff, nil, "/engines/"..f) end + fs.umount(eng_path) end end end diff --git a/src/core_lua.c b/src/core_lua.c index 1920d62686d51bfcdc70d94532b5fa8312fe9074..e286afa648ef54ad8119b8daf27613fd1b39d5c9 100644 --- a/src/core_lua.c +++ b/src/core_lua.c @@ -2098,7 +2098,12 @@ int luaopen_core(lua_State *L) luaL_openlib(L, "core.display", displaylib, 0); luaL_openlib(L, "core.mouse", mouselib, 0); luaL_openlib(L, "core.key", keylib, 0); + luaL_openlib(L, "core.game", gamelib, 0); + lua_pushstring(L, "VERSION"); + lua_pushnumber(L, 1); + lua_settable(L, -3); + luaL_openlib(L, "rng", rnglib, 0); luaL_openlib(L, "line", linelib, 0); luaL_openlib(L, "fs", fslib, 0);