aboutsummaryrefslogtreecommitdiff
path: root/engines/drascula/drascula.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2008-09-10 08:25:12 +0000
committerFilippos Karapetis2008-09-10 08:25:12 +0000
commit3202ef4dd15f12bdd8cd648d31a9f41b5e0c3053 (patch)
treecd16304a52bf61dccf3f9d89130b70887d2a6967 /engines/drascula/drascula.cpp
parentcde2ee58b18684628b7c37d297178323ad58c73f (diff)
downloadscummvm-rg350-3202ef4dd15f12bdd8cd648d31a9f41b5e0c3053.tar.gz
scummvm-rg350-3202ef4dd15f12bdd8cd648d31a9f41b5e0c3053.tar.bz2
scummvm-rg350-3202ef4dd15f12bdd8cd648d31a9f41b5e0c3053.zip
Reduced game memory usage by about 400KB by only loading the current language strings, not all strings
svn-id: r34472
Diffstat (limited to 'engines/drascula/drascula.cpp')
-rw-r--r--engines/drascula/drascula.cpp38
1 files changed, 16 insertions, 22 deletions
diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp
index ef6c9158d2..b81c4bc729 100644
--- a/engines/drascula/drascula.cpp
+++ b/engines/drascula/drascula.cpp
@@ -259,7 +259,7 @@ int DrasculaEngine::go() {
memset(iconName, 0, sizeof(iconName));
for (i = 0; i < 6; i++)
- strcpy(iconName[i + 1], _textverbs[_lang][i]);
+ strcpy(iconName[i + 1], _textverbs[i]);
assignDefaultPalette();
if (!runCurrentChapter()) {
@@ -563,12 +563,12 @@ bool DrasculaEngine::runCurrentChapter() {
withoutVerb();
} else if (key == Common::KEYCODE_v) {
withVoices = 1;
- print_abc(_textsys[_lang][2], 96, 86);
+ print_abc(_textsys[2], 96, 86);
updateScreen();
delay(1410);
} else if (key == Common::KEYCODE_t) {
withVoices = 0;
- print_abc(_textsys[_lang][3], 94, 86);
+ print_abc(_textsys[3], 94, 86);
updateScreen();
delay(1460);
} else if (key == Common::KEYCODE_ESCAPE) {
@@ -1002,24 +1002,22 @@ bool DrasculaEngine::loadDrasculaDat() {
return true;
}
-char ***DrasculaEngine::loadTexts(Common::File &in) {
+char **DrasculaEngine::loadTexts(Common::File &in) {
int numTexts = in.readUint16BE();
- char ***res;
+ char **res = (char **)malloc(sizeof(char *) * numTexts);
int entryLen;
- char *pos;
+ char *pos = 0;
int len;
- res = (char ***)malloc(sizeof(char *) * _numLangs);
-
for (int lang = 0; lang < _numLangs; lang++) {
entryLen = in.readUint16BE();
-
- res[lang] = (char **)malloc(sizeof(char *) * numTexts);
-
pos = (char *)malloc(entryLen);
- res[lang][0] = pos;
-
- in.read(res[lang][0], entryLen);
+ if (lang == _lang) {
+ res[0] = pos;
+ in.read(res[0], entryLen);
+ } else {
+ in.read(pos, entryLen);
+ }
pos += DATAALIGNMENT;
@@ -1029,23 +1027,19 @@ char ***DrasculaEngine::loadTexts(Common::File &in) {
len = READ_BE_UINT16(pos);
pos += 2 + len;
- res[lang][i] = pos;
+ if (lang == _lang)
+ res[i] = pos;
}
}
return res;
}
-void DrasculaEngine::freeTexts(char ***ptr) {
+void DrasculaEngine::freeTexts(char **ptr) {
if (!ptr)
return;
- for (int lang = 0; lang < _numLangs; lang++) {
- if (ptr[lang]) {
- free(ptr[lang][0]);
- free(ptr[lang]);
- }
- }
+ free(ptr[0]);
free(ptr);
}