[Scummvm-cvs-logs] scummvm master -> 2ebacc64be623cf4c4e8bff9df9c363523660939
dreammaster
dreammaster at scummvm.org
Mon May 23 10:44:13 CEST 2011
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
3556875c49 SWORD25: Created proxy class that presents ScumMVM settings as a valid config.lua file
b5609eb4a1 SWORD25: Added proxy code for converting writing config.lua to update the ScummVM game settings
27a6d9b910 SWORD25: Added detection entries for other languages
2ebacc64be SWORD25: Moved detection entries into detection_tables.h
Commit: 3556875c4922e9172c1eff6c4d929f1f80aa1254
https://github.com/scummvm/scummvm/commit/3556875c4922e9172c1eff6c4d929f1f80aa1254
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:16-07:00
Commit Message:
SWORD25: Created proxy class that presents ScumMVM settings as a valid config.lua file
Changed paths:
A engines/sword25/util/lua/scummvm_file.cpp
A engines/sword25/util/lua/scummvm_file.h
engines/sword25/util/lua/lauxlib.cpp
diff --git a/engines/sword25/util/lua/lauxlib.cpp b/engines/sword25/util/lua/lauxlib.cpp
index ce61827..3b54cf9 100644
--- a/engines/sword25/util/lua/lauxlib.cpp
+++ b/engines/sword25/util/lua/lauxlib.cpp
@@ -22,7 +22,8 @@
#include "lua.h"
#include "lauxlib.h"
-
+#include "scummvm_file.h"
+#include "common\textconsole.h"
#define FREELIST_REF 0 /* free list of references */
@@ -520,7 +521,7 @@ LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
typedef struct LoadF {
int extraline;
- FILE *f;
+ Sword25::Sword25FileProxy *f;
char buff[LUAL_BUFFERSIZE];
} LoadF;
@@ -533,8 +534,8 @@ static const char *getF (lua_State *L, void *ud, size_t *size) {
*size = 1;
return "\n";
}
- if (feof(lf->f)) return NULL;
- *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f);
+ if (lf->f->eof()) return NULL;
+ *size = lf->f->read(lf->buff, 1, sizeof(lf->buff));
return (*size > 0) ? lf->buff : NULL;
}
@@ -551,9 +552,13 @@ static int errfile (lua_State *L, const char *what, int fnameindex) {
LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) {
LoadF lf;
int status, readstatus;
- int c;
+// int c;
int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */
lf.extraline = 0;
+
+ lua_pushfstring(L, "@%s", filename);
+ lf.f = new Sword25::Sword25FileProxy(filename, "r");
+/*
if (filename == NULL) {
lua_pushliteral(L, "=stdin");
lf.f = stdin;
@@ -563,23 +568,25 @@ LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) {
lf.f = fopen(filename, "r");
if (lf.f == NULL) return errfile(L, "open", fnameindex);
}
- c = getc(lf.f);
- if (c == '#') { /* Unix exec. file? */
+
+ c = lf.f->getc();
+ if (c == '#') { // Unix exec. file?
lf.extraline = 1;
- while ((c = getc(lf.f)) != EOF && c != '\n') ; /* skip first line */
- if (c == '\n') c = getc(lf.f);
+ while ((c = lf.f->getc()) != EOF && c != '\n') ; // skip first line
+ if (c == '\n') c = lf.f->getc();
}
- if (c == LUA_SIGNATURE[0] && filename) { /* binary file? */
- lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */
+ if (c == LUA_SIGNATURE[0] && filename) { // binary file?
+ lf.f = freopen(filename, "rb", lf.f); // reopen in binary mode
if (lf.f == NULL) return errfile(L, "reopen", fnameindex);
- /* skip eventual `#!...' */
- while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ;
+ // skip eventual `#!...'
+ while ((c = lf.f->getc()) != EOF && c != LUA_SIGNATURE[0]) ;
lf.extraline = 0;
}
ungetc(c, lf.f);
+*/
status = lua_load(L, getF, &lf, lua_tostring(L, -1));
- readstatus = ferror(lf.f);
- if (filename) fclose(lf.f); /* close file (even in case of errors) */
+ readstatus = 0; //ferror(lf.f);
+ if (filename) delete lf.f; // close file (even in case of errors)
if (readstatus) {
lua_settop(L, fnameindex); /* ignore results from `lua_load' */
return errfile(L, "read", fnameindex);
@@ -637,7 +644,7 @@ static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
static int panic (lua_State *L) {
(void)L; /* to avoid warnings */
- fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n",
+ warning("PANIC: unprotected error in call to Lua API (%s)\n",
lua_tostring(L, -1));
return 0;
}
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
new file mode 100644
index 0000000..bb0da64
--- /dev/null
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -0,0 +1,93 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "sword25/util/lua/scummvm_file.h"
+#include "common/config-manager.h"
+#include "common/util.h"
+
+namespace Sword25 {
+
+Sword25FileProxy::Sword25FileProxy(const Common::String &filename, const Common::String &mode) {
+ assert(filename.contains("config.lua"));
+ if (mode == "r")
+ setupConfigFile();
+}
+
+void Sword25FileProxy::setupConfigFile() {
+ float sfxVolume = ConfMan.hasKey("sfx_volume") ? 1.0 : 1.0 * ConfMan.getInt("sfx_volume") / 255.0;
+ float musicVolume = ConfMan.hasKey("music_volume") ? 0.5 : 1.0 * ConfMan.getInt("music_volume") / 255.0;
+ float speechVolume = ConfMan.hasKey("speech_volume") ? 1.0 : 1.0 * ConfMan.getInt("speech_volume") / 255.0;
+ bool subtitles = ConfMan.hasKey("subtitles") ? true : ConfMan.getBool("subtitles");
+
+ _readData = Common::String::format(
+"GAME_LANGUAGE = \"%s\"\r\n\
+GAME_SUBTITLES = %s\r\n\
+MAX_MEMORY_USAGE = 256000000\r\n\
+GFX_VSYNC_ACTIVE = true\r\n\
+SFX_SAMPLING_RATE = 44100\r\n\
+SFX_CHANNEL_COUNT = 32\r\n\
+SFX_SOUND_VOLUME = %f\r\n\
+SFX_MUSIC_VOLUME = %f\r\n\
+SFX_SPEECH_VOLUME = %f\r\n",
+ getLanguage().c_str(), subtitles ? "true" : "false", sfxVolume, musicVolume, speechVolume);
+
+ _readPos = 0;
+}
+
+/**
+ * Get the language code used by the game for each language it supports
+ */
+Common::String Sword25FileProxy::getLanguage() {
+ Common::Language lang = Common::parseLanguage(ConfMan.get("language"));
+ switch (lang) {
+ case Common::EN_ANY:
+ return "en";
+ case Common::DE_DEU:
+ return "de";
+ case Common::ES_ESP:
+ return "es";
+ case Common::FR_FRA:
+ return "fr";
+ case Common::HU_HUN:
+ return "hr";
+ case Common::IT_ITA:
+ return "it";
+ case Common::PL_POL:
+ return "pl";
+ case Common::PT_BRA:
+ return "pt";
+ case Common::RU_RUS:
+ return "ru";
+ default:
+ error("Unknown language '%s' encountered", ConfMan.get("language"));
+ break;
+ }
+}
+
+size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
+ size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
+ memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
+ _readPos += bytesRead;
+ return bytesRead / size;
+}
+
+} // End of namespace Sword25
diff --git a/engines/sword25/util/lua/scummvm_file.h b/engines/sword25/util/lua/scummvm_file.h
new file mode 100644
index 0000000..8ecfd34
--- /dev/null
+++ b/engines/sword25/util/lua/scummvm_file.h
@@ -0,0 +1,49 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SWORD25_SCUMMVM_FILE_H
+#define SWORD25_SCUMMVM_FILE_H
+
+#include "common/str.h"
+
+namespace Sword25 {
+
+/**
+ * The following class acts as a proxy interface to the I/O code, pretending that the ScummVM
+ * settings are a properly formatted 'config.lua' file
+ */
+class Sword25FileProxy {
+private:
+ Common::String _readData;
+ uint _readPos;
+
+ void setupConfigFile();
+ Common::String getLanguage();
+public:
+ Sword25FileProxy(const Common::String &filename, const Common::String &mode);
+ bool eof() const { return _readPos >= _readData.size(); }
+ size_t read(void *ptr, size_t size, size_t count);
+};
+
+} // End of namespace Sword25
+
+#endif
Commit: b5609eb4a162264c7b3bc02ff31ca2f7dcbdecc8
https://github.com/scummvm/scummvm/commit/b5609eb4a162264c7b3bc02ff31ca2f7dcbdecc8
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:17-07:00
Commit Message:
SWORD25: Added proxy code for converting writing config.lua to update the ScummVM game settings
Changed paths:
engines/sword25/module.mk
engines/sword25/util/lua/liolib.cpp
engines/sword25/util/lua/scummvm_file.cpp
engines/sword25/util/lua/scummvm_file.h
diff --git a/engines/sword25/module.mk b/engines/sword25/module.mk
index da91c84..968f21c 100644
--- a/engines/sword25/module.mk
+++ b/engines/sword25/module.mk
@@ -83,6 +83,7 @@ MODULE_OBJS := \
util/lua/lvm.o \
util/lua/lzio.o \
util/lua/print.o \
+ util/lua/scummvm_file.o \
util/pluto/pdep.o \
util/pluto/pluto.o \
util/pluto/plzio.o
diff --git a/engines/sword25/util/lua/liolib.cpp b/engines/sword25/util/lua/liolib.cpp
index aea6c32..b505d1e 100644
--- a/engines/sword25/util/lua/liolib.cpp
+++ b/engines/sword25/util/lua/liolib.cpp
@@ -16,7 +16,8 @@
#include "lauxlib.h"
#include "lualib.h"
-
+#include "common/textconsole.h"
+#include "scummvm_file.h"
#define IO_INPUT 1
@@ -43,47 +44,48 @@ static int pushresult (lua_State *L, int i, const char *filename) {
}
}
-
+/*
static void fileerror (lua_State *L, int arg, const char *filename) {
lua_pushfstring(L, "%s: %s", filename, "LUA I/O error descriptions have been removed in ScummVM");
luaL_argerror(L, arg, lua_tostring(L, -1));
}
-
+*/
#define tofilep(L) ((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE))
-
+#define tofileProxy(L) ((Sword25::Sword25FileProxy **)luaL_checkudata(L, 1, LUA_FILEHANDLE))
static int io_type (lua_State *L) {
+ return luaL_error(L, "%s", "LUA I/O has been removed in ScummVM");
+/*
void *ud;
luaL_checkany(L, 1);
ud = lua_touserdata(L, 1);
lua_getfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE);
if (ud == NULL || !lua_getmetatable(L, 1) || !lua_rawequal(L, -2, -1))
- lua_pushnil(L); /* not a file */
+ lua_pushnil(L); // not a file
else if (*((FILE **)ud) == NULL)
lua_pushliteral(L, "closed file");
else
lua_pushliteral(L, "file");
return 1;
+*/
}
-
-static FILE *tofile (lua_State *L) {
- FILE **f = tofilep(L);
+static Sword25::Sword25FileProxy *tofile (lua_State *L) {
+ Sword25::Sword25FileProxy **f = tofileProxy(L);
if (*f == NULL)
luaL_error(L, "attempt to use a closed file");
return *f;
}
-
/*
** When creating file handles, always creates a `closed' file handle
** before opening the actual file; so, if there is a memory error, the
** file is not left opened.
*/
-static FILE **newfile (lua_State *L) {
- FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *));
+static Sword25::Sword25FileProxy **newfile (lua_State *L) {
+ Sword25::Sword25FileProxy **pf = (Sword25::Sword25FileProxy **)lua_newuserdata(L, sizeof(Sword25::Sword25FileProxy *));
*pf = NULL; /* file handle is currently `closed' */
luaL_getmetatable(L, LUA_FILEHANDLE);
lua_setmetatable(L, -2);
@@ -105,10 +107,13 @@ static int io_noclose (lua_State *L) {
** function to close 'popen' files
*/
static int io_pclose (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+/*
FILE **p = tofilep(L);
int ok = lua_pclose(L, *p);
*p = NULL;
return pushresult(L, ok, NULL);
+ */
}
@@ -116,52 +121,63 @@ static int io_pclose (lua_State *L) {
** function to close regular files
*/
static int io_fclose (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+ /*
FILE **p = tofilep(L);
int ok = (fclose(*p) == 0);
*p = NULL;
return pushresult(L, ok, NULL);
+ */
}
-
+/*
static int aux_close (lua_State *L) {
lua_getfenv(L, 1);
lua_getfield(L, -1, "__close");
return (lua_tocfunction(L, -1))(L);
}
-
+*/
static int io_close (lua_State *L) {
if (lua_isnone(L, 1))
lua_rawgeti(L, LUA_ENVIRONINDEX, IO_OUTPUT);
- tofile(L); /* make sure argument is a file */
- return aux_close(L);
+
+ Sword25::Sword25FileProxy **f = tofileProxy(L);
+ delete *f;
+ *f = NULL;
+
+ return 0;
}
static int io_gc (lua_State *L) {
- FILE *f = *tofilep(L);
- /* ignore closed files */
- if (f != NULL)
- aux_close(L);
+ Sword25::Sword25FileProxy **f = tofileProxy(L);
+ // ignore closed files
+ if (*f != NULL)
+ delete *f;
+
return 0;
}
static int io_tostring (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+ /*
FILE *f = *tofilep(L);
if (f == NULL)
lua_pushliteral(L, "file (closed)");
else
lua_pushfstring(L, "file (%p)", f);
return 1;
+ */
}
static int io_open (lua_State *L) {
const char *filename = luaL_checkstring(L, 1);
const char *mode = luaL_optstring(L, 2, "r");
- FILE **pf = newfile(L);
- *pf = fopen(filename, mode);
+ Sword25::Sword25FileProxy **pf = newfile(L);
+ *pf = new Sword25::Sword25FileProxy(filename, mode);
return (*pf == NULL) ? pushresult(L, 0, filename) : 1;
}
@@ -171,21 +187,22 @@ static int io_open (lua_State *L) {
** correct __close for 'popen' files
*/
static int io_popen (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+/*
const char *filename = luaL_checkstring(L, 1);
const char *mode = luaL_optstring(L, 2, "r");
FILE **pf = newfile(L);
*pf = lua_popen(L, filename, mode);
return (*pf == NULL) ? pushresult(L, 0, filename) : 1;
+ */
}
static int io_tmpfile (lua_State *L) {
- FILE **pf = newfile(L);
- *pf = tmpfile();
- return (*pf == NULL) ? pushresult(L, 0, NULL) : 1;
+ return luaL_error(L, "%s", "LUA I/O error descriptions have been removed in ScummVM");
}
-
+/*
static FILE *getiofile (lua_State *L, int findex) {
FILE *f;
lua_rawgeti(L, LUA_ENVIRONINDEX, findex);
@@ -194,8 +211,8 @@ static FILE *getiofile (lua_State *L, int findex) {
luaL_error(L, "standard %s file is closed", fnames[findex - 1]);
return f;
}
-
-
+*/
+/*
static int g_iofile (lua_State *L, int f, const char *mode) {
if (!lua_isnoneornil(L, 1)) {
const char *filename = lua_tostring(L, 1);
@@ -206,24 +223,26 @@ static int g_iofile (lua_State *L, int f, const char *mode) {
fileerror(L, 1, filename);
}
else {
- tofile(L); /* check that it's a valid file handle */
+ tofile(L); // check that it's a valid file handle
lua_pushvalue(L, 1);
}
lua_rawseti(L, LUA_ENVIRONINDEX, f);
}
- /* return current value */
+ // return current value
lua_rawgeti(L, LUA_ENVIRONINDEX, f);
return 1;
}
-
+*/
static int io_input (lua_State *L) {
- return g_iofile(L, IO_INPUT, "r");
+ error("LUA I/O has been removed in ScummVM");
+// return g_iofile(L, IO_INPUT, "r");
}
static int io_output (lua_State *L) {
- return g_iofile(L, IO_OUTPUT, "w");
+ error("LUA I/O has been removed in ScummVM");
+// return g_iofile(L, IO_OUTPUT, "w");
}
@@ -245,8 +264,10 @@ static int f_lines (lua_State *L) {
static int io_lines (lua_State *L) {
- if (lua_isnoneornil(L, 1)) { /* no arguments? */
- /* will iterate over default input */
+ error("LUA I/O has been removed in ScummVM");
+/*
+ if (lua_isnoneornil(L, 1)) { // no arguments?
+ // will iterate over default input
lua_rawgeti(L, LUA_ENVIRONINDEX, IO_INPUT);
return f_lines(L);
}
@@ -259,6 +280,7 @@ static int io_lines (lua_State *L) {
aux_lines(L, lua_gettop(L), 1);
return 1;
}
+ */
}
@@ -268,18 +290,18 @@ static int io_lines (lua_State *L) {
** =======================================================
*/
-
-static int read_number (lua_State *L, FILE *f) {
+/*
+static int read_number (lua_State *L, Sword25::Sword25FileProxy *f) {
lua_Number d;
if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) {
lua_pushnumber(L, d);
return 1;
}
- else return 0; /* read fails */
+ else return 0; // read fails
}
-static int test_eof (lua_State *L, FILE *f) {
+static int test_eof (lua_State *L, Sword25::Sword25FileProxy *f) {
int c = getc(f);
ungetc(c, f);
lua_pushlstring(L, NULL, 0);
@@ -287,56 +309,56 @@ static int test_eof (lua_State *L, FILE *f) {
}
-static int read_line (lua_State *L, FILE *f) {
+static int read_line (lua_State *L, Sword25::Sword25FileProxy *f) {
luaL_Buffer b;
luaL_buffinit(L, &b);
for (;;) {
size_t l;
char *p = luaL_prepbuffer(&b);
- if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */
- luaL_pushresult(&b); /* close buffer */
- return (lua_objlen(L, -1) > 0); /* check whether read something */
+ if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { // eof?
+ luaL_pushresult(&b); // close buffer
+ return (lua_objlen(L, -1) > 0); // check whether read something
}
l = strlen(p);
if (l == 0 || p[l-1] != '\n')
luaL_addsize(&b, l);
else {
- luaL_addsize(&b, l - 1); /* do not include `eol' */
- luaL_pushresult(&b); /* close buffer */
- return 1; /* read at least an `eol' */
+ luaL_addsize(&b, l - 1); // do not include `eol'
+ luaL_pushresult(&b); // close buffer
+ return 1; // read at least an `eol'
}
}
}
-static int read_chars (lua_State *L, FILE *f, size_t n) {
- size_t rlen; /* how much to read */
- size_t nr; /* number of chars actually read */
+static int read_chars (lua_State *L, Sword25::Sword25FileProxy *f, size_t n) {
+ size_t rlen; // how much to read
+ size_t nr; // number of chars actually read
luaL_Buffer b;
luaL_buffinit(L, &b);
- rlen = LUAL_BUFFERSIZE; /* try to read that much each time */
+ rlen = LUAL_BUFFERSIZE; // try to read that much each time
do {
char *p = luaL_prepbuffer(&b);
- if (rlen > n) rlen = n; /* cannot read more than asked */
+ if (rlen > n) rlen = n; // cannot read more than asked
nr = fread(p, sizeof(char), rlen, f);
luaL_addsize(&b, nr);
- n -= nr; /* still have to read `n' chars */
- } while (n > 0 && nr == rlen); /* until end of count or eof */
- luaL_pushresult(&b); /* close buffer */
+ n -= nr; // still have to read `n' chars
+ } while (n > 0 && nr == rlen); // until end of count or eof
+ luaL_pushresult(&b); // close buffer
return (n == 0 || lua_objlen(L, -1) > 0);
}
-static int g_read (lua_State *L, FILE *f, int first) {
+static int g_read (lua_State *L, Sword25::Sword25FileProxy *f, int first) {
int nargs = lua_gettop(L) - 1;
int success;
int n;
clearerr(f);
- if (nargs == 0) { /* no arguments? */
+ if (nargs == 0) { // no arguments?
success = read_line(L, f);
- n = first+1; /* to return 1 result */
+ n = first+1; // to return 1 result
}
- else { /* ensure stack space for all results and for auxlib's buffer */
+ else { // ensure stack space for all results and for auxlib's buffer
luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments");
success = 1;
for (n = first; nargs-- && success; n++) {
@@ -348,15 +370,15 @@ static int g_read (lua_State *L, FILE *f, int first) {
const char *p = lua_tostring(L, n);
luaL_argcheck(L, p && p[0] == '*', n, "invalid option");
switch (p[1]) {
- case 'n': /* number */
+ case 'n': // number
success = read_number(L, f);
break;
- case 'l': /* line */
+ case 'l': // line
success = read_line(L, f);
break;
- case 'a': /* file */
- read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */
- success = 1; /* always success */
+ case 'a': // file
+ read_chars(L, f, ~((size_t)0)); // read MAX_SIZE_T chars
+ success = 1; // always success
break;
default:
return luaL_argerror(L, n, "invalid format");
@@ -367,58 +389,66 @@ static int g_read (lua_State *L, FILE *f, int first) {
if (ferror(f))
return pushresult(L, 0, NULL);
if (!success) {
- lua_pop(L, 1); /* remove last result */
- lua_pushnil(L); /* push nil instead */
+ lua_pop(L, 1); // remove last result
+ lua_pushnil(L); // push nil instead
}
return n - first;
}
-
+*/
static int io_read (lua_State *L) {
- return g_read(L, getiofile(L, IO_INPUT), 1);
+ error("LUA I/O has been removed in ScummVM");
+// return g_read(L, getiofile(L, IO_INPUT), 1);
}
static int f_read (lua_State *L) {
- return g_read(L, tofile(L), 2);
+ error("LUA I/O has been removed in ScummVM");
+// return g_read(L, tofile(L), 2);
}
static int io_readline (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+/*
FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(1));
int sucess;
- if (f == NULL) /* file is already closed? */
+ if (f == NULL) // file is already closed?
luaL_error(L, "file is already closed");
sucess = read_line(L, f);
if (ferror(f))
return luaL_error(L, "%s", "LUA I/O error descriptions have been removed in ScummVM");
if (sucess) return 1;
- else { /* EOF */
- if (lua_toboolean(L, lua_upvalueindex(2))) { /* generator created file? */
+ else { // EOF
+ if (lua_toboolean(L, lua_upvalueindex(2))) { // generator created file?
lua_settop(L, 0);
lua_pushvalue(L, lua_upvalueindex(1));
- aux_close(L); /* close it */
+ aux_close(L); // close it
}
return 0;
}
+*/
}
/* }====================================================== */
-static int g_write (lua_State *L, FILE *f, int arg) {
+static int g_write (lua_State *L, Sword25::Sword25FileProxy *f, int arg) {
int nargs = lua_gettop(L) - 1;
int status = 1;
for (; nargs--; arg++) {
if (lua_type(L, arg) == LUA_TNUMBER) {
- /* optimization: could be done exactly as for strings */
- status = status &&
- fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0;
- }
+ // optimization: could be done exactly as for strings
+ if (status) {
+ char buffer[20];
+ sprintf(buffer, LUA_NUMBER_FMT, lua_tonumber(L, arg));
+ status = f->write(buffer, strlen(buffer)) == strlen(buffer);
+ }
+ }
else {
size_t l;
const char *s = luaL_checklstring(L, arg, &l);
- status = status && (fwrite(s, sizeof(char), l, f) == l);
+ status = status && (f->write(s, l) == l);
}
}
return pushresult(L, status, NULL);
@@ -426,7 +456,8 @@ static int g_write (lua_State *L, FILE *f, int arg) {
static int io_write (lua_State *L) {
- return g_write(L, getiofile(L, IO_OUTPUT), 1);
+ error("LUA I/O has been removed in ScummVM");
+// return g_write(L, getiofile(L, IO_OUTPUT), 1);
}
@@ -436,6 +467,8 @@ static int f_write (lua_State *L) {
static int f_seek (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+ /*
static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END};
static const char *const modenames[] = {"set", "cur", "end", NULL};
FILE *f = tofile(L);
@@ -443,15 +476,18 @@ static int f_seek (lua_State *L) {
long offset = luaL_optlong(L, 3, 0);
op = fseek(f, offset, mode[op]);
if (op)
- return pushresult(L, 0, NULL); /* error */
+ return pushresult(L, 0, NULL); // error
else {
lua_pushinteger(L, ftell(f));
return 1;
}
+*/
}
static int f_setvbuf (lua_State *L) {
+ error("LUA I/O has been removed in ScummVM");
+ /*
static const int mode[] = {_IONBF, _IOFBF, _IOLBF};
static const char *const modenames[] = {"no", "full", "line", NULL};
FILE *f = tofile(L);
@@ -459,17 +495,20 @@ static int f_setvbuf (lua_State *L) {
lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE);
int res = setvbuf(f, NULL, mode[op], sz);
return pushresult(L, res == 0, NULL);
+ */
}
static int io_flush (lua_State *L) {
- return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL);
+ error("LUA I/O has been removed in ScummVM");
+// return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL);
}
static int f_flush (lua_State *L) {
- return pushresult(L, fflush(tofile(L)) == 0, NULL);
+ error("LUA I/O has been removed in ScummVM");
+// return pushresult(L, fflush(tofile(L)) == 0, NULL);
}
@@ -510,18 +549,18 @@ static void createmeta (lua_State *L) {
luaL_register(L, NULL, flib); /* file methods */
}
-
+/*
static void createstdfile (lua_State *L, FILE *f, int k, const char *fname) {
*newfile(L) = f;
if (k > 0) {
lua_pushvalue(L, -1);
lua_rawseti(L, LUA_ENVIRONINDEX, k);
}
- lua_pushvalue(L, -2); /* copy environment */
- lua_setfenv(L, -2); /* set it */
+ lua_pushvalue(L, -2); // copy environment
+ lua_setfenv(L, -2); // set it
lua_setfield(L, -3, fname);
}
-
+*/
static void newfenv (lua_State *L, lua_CFunction cls) {
lua_createtable(L, 0, 1);
@@ -539,9 +578,11 @@ LUALIB_API int luaopen_io (lua_State *L) {
luaL_register(L, LUA_IOLIBNAME, iolib);
/* create (and set) default files */
newfenv(L, io_noclose); /* close function for default files */
+/*
createstdfile(L, stdin, IO_INPUT, "stdin");
createstdfile(L, stdout, IO_OUTPUT, "stdout");
createstdfile(L, stderr, 0, "stderr");
+*/
lua_pop(L, 1); /* pop environment for default files */
lua_getfield(L, -1, "popen");
newfenv(L, io_pclose); /* create environment for 'popen' */
diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp
index bb0da64..2b7ac6d 100644
--- a/engines/sword25/util/lua/scummvm_file.cpp
+++ b/engines/sword25/util/lua/scummvm_file.cpp
@@ -53,6 +53,99 @@ SFX_SPEECH_VOLUME = %f\r\n",
_readPos = 0;
}
+Sword25FileProxy::~Sword25FileProxy() {
+ if (!_settings.empty())
+ writeSettings();
+}
+
+size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
+ size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
+ memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
+ _readPos += bytesRead;
+ return bytesRead / size;
+}
+
+size_t Sword25FileProxy::write(const char *ptr, size_t count) {
+ // Loop through the provided line(s)
+ while (*ptr) {
+ if ((*ptr == '-') && (*(ptr + 1) == '-')) {
+ // Comment line to skip over
+ while ((*ptr != '\r') && (*ptr != '\n'))
+ ++ptr;
+ } else {
+ // Legitimate data
+ const char *p = strchr(ptr, '\n');
+ if (!p) p = ptr + strlen(ptr);
+ while ((*p == '\r') || (*p == '\n'))
+ ++p;
+
+ _settings += Common::String(ptr, p - ptr);
+ ptr = p;
+ }
+
+ while ((*ptr == '\r') || (*ptr == '\n'))
+ ++ptr;
+ }
+
+ return count;
+}
+
+void Sword25FileProxy::writeSettings() {
+ // Loop through the setting lines
+ const char *pSrc = _settings.c_str();
+ while (*pSrc) {
+ if ((*pSrc != '\r') && (*pSrc != '\n')) {
+ const char *p = strchr(pSrc, '=');
+ assert(p);
+
+ // Get the setting name
+ const char *pEnd = p - 1;
+ while (*pEnd == ' ')
+ --pEnd;
+ Common::String settingName(pSrc, pEnd - pSrc + 1);
+
+ // Get the setting value
+ const char *pStart = p + 1;
+ while (*pStart == ' ')
+ ++pStart;
+
+ pEnd = pStart + 1;
+ while ((*pEnd != '\r') && (*pEnd != '\n') && (*pEnd != '\0'))
+ ++pEnd;
+ Common::String value(pStart + (*pStart == '"' ? 1 : 0), pEnd - pStart - (*pStart == '"' ? 2 : 0));
+
+ // Update the setting
+ updateSetting(settingName, value);
+ pSrc = pEnd;
+ }
+
+ // Move to next line
+ while ((*pSrc == '\r') || (*pSrc == '\n'))
+ ++pSrc;
+ }
+
+ ConfMan.flushToDisk();
+}
+
+void Sword25FileProxy::updateSetting(const Common::String &setting, const Common::String &value) {
+ if (setting == "GAME_LANGUAGE")
+ setLanguage(value);
+ else if (setting == "GAME_SUBTITLES")
+ ConfMan.setBool("subtitles", value == "true");
+ else if (setting == "SFX_SOUND_VOLUME") {
+ double v = strtod(value.c_str(), NULL);
+ ConfMan.setInt("sfx_volume", (int)(v * 255));
+ } else if (setting == "SFX_MUSIC_VOLUME") {
+ double v = strtod(value.c_str(), NULL);
+ ConfMan.setInt("music_volume", (int)(v * 255));
+ } else if (setting == "SFX_SPEECH_VOLUME") {
+ double v = strtod(value.c_str(), NULL);
+ ConfMan.setInt("speech_volume", (int)(v * 255));
+ } else {
+ // All other settings are ignored
+ }
+}
+
/**
* Get the language code used by the game for each language it supports
*/
@@ -83,11 +176,30 @@ Common::String Sword25FileProxy::getLanguage() {
}
}
-size_t Sword25FileProxy::read(void *ptr, size_t size, size_t count) {
- size_t bytesRead = MIN(_readData.size() - _readPos, size * count);
- memmove(ptr, &_readData.c_str()[_readPos], bytesRead);
- _readPos += bytesRead;
- return bytesRead / size;
+/**
+ * Set the language code fro the game
+ */
+void Sword25FileProxy::setLanguage(const Common::String &lang) {
+ if (lang == "en")
+ ConfMan.set("language", Common::getLanguageCode(Common::EN_ANY));
+ else if (lang == "de")
+ ConfMan.set("language", Common::getLanguageCode(Common::DE_DEU));
+ else if (lang == "es")
+ ConfMan.set("language", Common::getLanguageCode(Common::ES_ESP));
+ else if (lang == "fr")
+ ConfMan.set("language", Common::getLanguageCode(Common::FR_FRA));
+ else if (lang == "hr")
+ ConfMan.set("language", Common::getLanguageCode(Common::HU_HUN));
+ else if (lang == "it")
+ ConfMan.set("language", Common::getLanguageCode(Common::IT_ITA));
+ else if (lang == "pl")
+ ConfMan.set("language", Common::getLanguageCode(Common::PL_POL));
+ else if (lang == "pt")
+ ConfMan.set("language", Common::getLanguageCode(Common::PT_BRA));
+ else if (lang == "ru")
+ ConfMan.set("language", Common::getLanguageCode(Common::RU_RUS));
+ else
+ error("Unknown language encountered");
}
} // End of namespace Sword25
diff --git a/engines/sword25/util/lua/scummvm_file.h b/engines/sword25/util/lua/scummvm_file.h
index 8ecfd34..a4cbd2a 100644
--- a/engines/sword25/util/lua/scummvm_file.h
+++ b/engines/sword25/util/lua/scummvm_file.h
@@ -35,13 +35,20 @@ class Sword25FileProxy {
private:
Common::String _readData;
uint _readPos;
+ Common::String _settings;
void setupConfigFile();
Common::String getLanguage();
+ void setLanguage(const Common::String &lang);
+ void writeSettings();
+ void updateSetting(const Common::String &setting, const Common::String &value);
public:
Sword25FileProxy(const Common::String &filename, const Common::String &mode);
+ ~Sword25FileProxy();
+
bool eof() const { return _readPos >= _readData.size(); }
size_t read(void *ptr, size_t size, size_t count);
+ size_t write(const char *ptr, size_t count);
};
} // End of namespace Sword25
Commit: 27a6d9b910d5f434f1b75c2c42bbd1675fa10e37
https://github.com/scummvm/scummvm/commit/27a6d9b910d5f434f1b75c2c42bbd1675fa10e37
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:17-07:00
Commit Message:
SWORD25: Added detection entries for other languages
This is needed now, since changing the language in-game updates the ScummVM language setting, and there must be a matching detection entry for each language.
Changed paths:
engines/sword25/detection.cpp
diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
index fd5820d..62c7f81 100644
--- a/engines/sword25/detection.cpp
+++ b/engines/sword25/detection.cpp
@@ -37,10 +37,8 @@ static const PlainGameDescriptor Sword25Game[] = {
namespace Sword25 {
-// TODO: Need to decide whether we're going to implement code to detect all the various languages allowed,
-// both by the core data package, as well as the extra languages added by the patch file; also, I don't
-// think that all the languages supported by the game currently have constants in ScummVM
static const ADGameDescription gameDescriptions[] = {
+ // These two versions represent the default languages available in the data file
{
"sword25",
"",
@@ -52,6 +50,80 @@ static const ADGameDescription gameDescriptions[] = {
},
{
"sword25",
+ "",
+ AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
+ Common::FR_FRA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+ Common::DE_DEU,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
+ Common::HU_HUN,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
+ Common::IT_ITA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
+ Common::PL_POL,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
+ Common::PT_BRA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
+ Common::RU_RUS,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
+ Common::ES_ESP,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+
+ // Extracted version
+ {
+ "sword25",
"Extracted",
{{"_includes.lua", 0, 0, -1},
{"boot.lua", 0, 0, -1},
Commit: 2ebacc64be623cf4c4e8bff9df9c363523660939
https://github.com/scummvm/scummvm/commit/2ebacc64be623cf4c4e8bff9df9c363523660939
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-05-23T01:41:18-07:00
Commit Message:
SWORD25: Moved detection entries into detection_tables.h
Changed paths:
A engines/sword25/detection_tables.h
engines/sword25/detection.cpp
diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp
index 62c7f81..edb8c30 100644
--- a/engines/sword25/detection.cpp
+++ b/engines/sword25/detection.cpp
@@ -24,6 +24,7 @@
#include "engines/advancedDetector.h"
#include "sword25/sword25.h"
+#include "sword25/detection_tables.h"
#include "sword25/kernel/persistenceservice.h"
namespace Sword25 {
@@ -35,110 +36,6 @@ static const PlainGameDescriptor Sword25Game[] = {
{0, 0}
};
-namespace Sword25 {
-
-static const ADGameDescription gameDescriptions[] = {
- // These two versions represent the default languages available in the data file
- {
- "sword25",
- "",
- AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
- Common::EN_ANY,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
- Common::FR_FRA,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
- Common::DE_DEU,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
- Common::HU_HUN,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
- Common::IT_ITA,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
- Common::PL_POL,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
- Common::PT_BRA,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
- Common::RU_RUS,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
- {
- "sword25",
- "",
- AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
- Common::ES_ESP,
- Common::kPlatformUnknown,
- ADGF_NO_FLAGS,
- Common::GUIO_NONE
- },
-
- // Extracted version
- {
- "sword25",
- "Extracted",
- {{"_includes.lua", 0, 0, -1},
- {"boot.lua", 0, 0, -1},
- {"kernel.lua", 0, 0, -1},
- AD_LISTEND},
- Common::EN_ANY,
- Common::kPlatformUnknown,
- GF_EXTRACTED,
- Common::GUIO_NONE
- },
- AD_TABLE_END_MARKER
-};
-
-} // End of namespace Sword25
-
static const char *directoryGlobs[] = {
"system", // Used by extracted dats
0
diff --git a/engines/sword25/detection_tables.h b/engines/sword25/detection_tables.h
new file mode 100644
index 0000000..ca586b4
--- /dev/null
+++ b/engines/sword25/detection_tables.h
@@ -0,0 +1,129 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+namespace Sword25 {
+
+using Common::GUIO_NONE;
+using Common::GUIO_NOSPEECH;
+using Common::GUIO_NOSFX;
+using Common::GUIO_NOMUSIC;
+
+static const ADGameDescription gameDescriptions[] = {
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+ Common::EN_ANY,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043),
+ Common::FR_FRA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588),
+ Common::DE_DEU,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217),
+ Common::HU_HUN,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197),
+ Common::IT_ITA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799),
+ Common::PL_POL,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812),
+ Common::PT_BRA,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378),
+ Common::RU_RUS,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+ {
+ "sword25",
+ "",
+ AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965),
+ Common::ES_ESP,
+ Common::kPlatformUnknown,
+ ADGF_NO_FLAGS,
+ Common::GUIO_NONE
+ },
+
+ // Extracted version
+ {
+ "sword25",
+ "Extracted",
+ {{"_includes.lua", 0, 0, -1},
+ {"boot.lua", 0, 0, -1},
+ {"kernel.lua", 0, 0, -1},
+ AD_LISTEND},
+ Common::EN_ANY,
+ Common::kPlatformUnknown,
+ GF_EXTRACTED,
+ Common::GUIO_NONE
+ },
+ AD_TABLE_END_MARKER
+};
+
+} // End of namespace Sword25
More information about the Scummvm-git-logs
mailing list