[Scummvm-cvs-logs] SF.net SVN: scummvm:[34472] scummvm/trunk/engines/drascula

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Wed Sep 10 10:25:13 CEST 2008


Revision: 34472
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34472&view=rev
Author:   thebluegr
Date:     2008-09-10 08:25:12 +0000 (Wed, 10 Sep 2008)

Log Message:
-----------
Reduced game memory usage by about 400KB by only loading the current language strings, not all strings

Modified Paths:
--------------
    scummvm/trunk/engines/drascula/animation.cpp
    scummvm/trunk/engines/drascula/converse.cpp
    scummvm/trunk/engines/drascula/drascula.cpp
    scummvm/trunk/engines/drascula/drascula.h
    scummvm/trunk/engines/drascula/interface.cpp
    scummvm/trunk/engines/drascula/objects.cpp
    scummvm/trunk/engines/drascula/rooms.cpp
    scummvm/trunk/engines/drascula/talk.cpp

Modified: scummvm/trunk/engines/drascula/animation.cpp
===================================================================
--- scummvm/trunk/engines/drascula/animation.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/animation.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -87,7 +87,7 @@
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		color_abc(kColorRed);
-		centerText(_textmisc[_lang][1], 160, 100);
+		centerText(_textmisc[1], 160, 100);
 		updateScreen();
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
@@ -219,12 +219,12 @@
 		loadPic("plan1.alg", screenSurface, HALF_PAL);
 		updateScreen();
 		pause(10);
-		talk_solo(_textd[_lang][4],"d4.als");
+		talk_solo(_textd[4],"d4.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		loadPic("plan1.alg", screenSurface, HALF_PAL);
 		updateScreen();
-		talk_solo(_textd[_lang][5], "d5.als");
+		talk_solo(_textd[5], "d5.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		if (animate("lib2.bin", 16))
@@ -233,7 +233,7 @@
 		loadPic("plan2.alg", screenSurface, HALF_PAL);
 		updateScreen();
 		pause(20);
-		talk_solo(_textd[_lang][6], "d6.als");
+		talk_solo(_textd[6], "d6.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		if (animate("lib2.bin", 16))
@@ -244,12 +244,12 @@
 		pause(20);
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
-		talk_solo(_textd[_lang][7], "d7.als");
+		talk_solo(_textd[7], "d7.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		loadPic("plan3.alg", screenSurface, HALF_PAL);
 		updateScreen();
-		talk_solo(_textd[_lang][8], "d8.als");
+		talk_solo(_textd[8], "d8.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		clearRoom();
@@ -436,7 +436,7 @@
 
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
-		talk_solo(_textbj[_lang][1], "BJ1.als");
+		talk_solo(_textbj[1], "BJ1.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		clearRoom();
@@ -449,7 +449,7 @@
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		color_solo = kColorYellow;
-		talk_solo(_text[_lang][214], "214.als");
+		talk_solo(_text[214], "214.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		clearRoom();
@@ -523,7 +523,7 @@
 		pause(120);
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
-		talk_solo(_text[_lang][223], "223.als");
+		talk_solo(_text[223], "223.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		color_solo = kColorWhite;
@@ -532,7 +532,7 @@
 			break;
 		updateScreen();
 		pause(110);
-		talk_solo(_textbj[_lang][11], "BJ11.als");
+		talk_solo(_textbj[11], "BJ11.als");
 		if ((term_int == 1) || (getScan() == Common::KEYCODE_ESCAPE))
 			break;
 		updateRoom();
@@ -836,7 +836,7 @@
 	copyBackground();
 
 	if (_lang != kSpanish)
-		centerText(_texthis[_lang][1], 180, 180);
+		centerText(_texthis[1], 180, 180);
 
 	updateScreen();
 
@@ -866,7 +866,7 @@
 	copyBackground();
 
 	if (_lang != kSpanish)
-		centerText(_texthis[_lang][2], 180, 180);
+		centerText(_texthis[2], 180, 180);
 
 	updateScreen();
 	key = getScan();
@@ -892,7 +892,7 @@
 	copyBackground();
 
 	if (_lang != kSpanish)
-		centerText(_texthis[_lang][3], 180, 180);
+		centerText(_texthis[3], 180, 180);
 
 	updateScreen();
 	key = getScan();
@@ -917,7 +917,7 @@
 	copyBackground(0, 0, 0, 0, 320, 200, drawSurface3, screenSurface);
 
 	if (_lang != kSpanish)
-		centerText(_texthis[_lang][1], 180, 180);
+		centerText(_texthis[1], 180, 180);
 
 	updateScreen();
 	key = getScan();
@@ -1660,7 +1660,7 @@
 	trackProtagonist = 3;
 	updateRoom();
 	updateScreen();
-	talk_solo(_textd[_lang][18], "d18.als");
+	talk_solo(_textd[18], "d18.als");
 	fadeToBlack(1);
 }
 
@@ -1818,11 +1818,11 @@
 	clearRoom();
 	loadPic("nota.alg", bgSurface, COMPLETE_PAL);
 	color_abc(kColorWhite);
-	talk_solo(_textbj[_lang][24], "bj24.als");
-	talk_solo(_textbj[_lang][25], "bj25.als");
-	talk_solo(_textbj[_lang][26], "bj26.als");
-	talk_solo(_textbj[_lang][27], "bj27.als");
-	talk_solo(_textbj[_lang][28], "bj28.als");
+	talk_solo(_textbj[24], "bj24.als");
+	talk_solo(_textbj[25], "bj25.als");
+	talk_solo(_textbj[26], "bj26.als");
+	talk_solo(_textbj[27], "bj27.als");
+	talk_solo(_textbj[28], "bj28.als");
 	trackProtagonist = 3;
 	clearRoom();
 	loadPic(96, frontSurface, COMPLETE_PAL);
@@ -1837,7 +1837,7 @@
 	copyBackground(0, 0, 0, 0, 320, 200, screenSurface, bgSurface);
 	updateScreen();
 	color_abc(kColorLightGreen);
-	talk_solo(_textmisc[_lang][2], "s15.als");
+	talk_solo(_textmisc[2], "s15.als");
 	loadPic("nota2.alg", bgSurface);
 	trackProtagonist = 0;
 	updateRoom();
@@ -2219,7 +2219,7 @@
 	loadPic("aux5.alg", drawSurface3);
 	flags[8] = 1;
 	curX = curX - 4;
-	talk_sync(_text[_lang][46], "46.als", "4442444244244");
+	talk_sync(_text[46], "46.als", "4442444244244");
 	withoutVerb();
 }
 

Modified: scummvm/trunk/engines/drascula/converse.cpp
===================================================================
--- scummvm/trunk/engines/drascula/converse.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/converse.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -139,19 +139,19 @@
 	_arj.close();
 
 	if (currentChapter == 2 && !strcmp(fileName, "op_5.cal") && flags[38] == 1 && flags[33] == 1) {
-		strcpy(phrase3, _text[_lang][405]);
+		strcpy(phrase3, _text[405]);
 		strcpy(sound3, "405.als");
 		answer3 = 31;
 	}
 
 	if (currentChapter == 6 && !strcmp(fileName, "op_12.cal") && flags[7] == 1) {
-		strcpy(phrase3, _text[_lang][273]);
+		strcpy(phrase3, _text[273]);
 		strcpy(sound3, "273.als");
 		answer3 = 14;
 	}
 
 	if (currentChapter == 6 && !strcmp(fileName, "op_12.cal") && flags[10] == 1) {
-		strcpy(phrase3, _text[_lang][274]);
+		strcpy(phrase3, _text[274]);
 		strcpy(sound3, "274.als");
 		answer3 = 15;
 	}

Modified: scummvm/trunk/engines/drascula/drascula.cpp
===================================================================
--- scummvm/trunk/engines/drascula/drascula.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/drascula.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -259,7 +259,7 @@
 		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 @@
 			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,25 +1002,23 @@
 	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;
+		if (lang == _lang) {
+			res[0] = pos;
+			in.read(res[0], entryLen);
+		} else {
+			in.read(pos, entryLen);
+		}
 
-		in.read(res[lang][0], entryLen);
-
 		pos += DATAALIGNMENT;
 
 		for (int i = 1; i < numTexts; i++) {
@@ -1029,23 +1027,19 @@
 			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);
 }
 

Modified: scummvm/trunk/engines/drascula/drascula.h
===================================================================
--- scummvm/trunk/engines/drascula/drascula.h	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/drascula.h	2008-09-10 08:25:12 UTC (rev 34472)
@@ -691,21 +691,21 @@
 	int _talkSequencesSize;
 	int _numLangs;
 
-	char ***_text;
-	char ***_textd;
-	char ***_textb;
-	char ***_textbj;
-	char ***_texte;
-	char ***_texti;
-	char ***_textl;
-	char ***_textp;
-	char ***_textt;
-	char ***_textvb;
-	char ***_textsys;
-	char ***_texthis;
-	char ***_textverbs;
-	char ***_textmisc;
-	char ***_textd1;
+	char **_text;
+	char **_textd;
+	char **_textb;
+	char **_textbj;
+	char **_texte;
+	char **_texti;
+	char **_textl;
+	char **_textp;
+	char **_textt;
+	char **_textvb;
+	char **_textsys;
+	char **_texthis;
+	char **_textverbs;
+	char **_textmisc;
+	char **_textd1;
 	ItemLocation *_itemLocations;
 	int *_polX, *_polY;
 	int *_verbBarX;
@@ -717,8 +717,8 @@
 	RoomTalkAction *_roomActions;
 	TalkSequenceCommand *_talkSequences;
 
-	char ***loadTexts(Common::File &in);
-	void freeTexts(char ***ptr);
+	char **loadTexts(Common::File &in);
+	void freeTexts(char **ptr);
 };
 
 } // End of namespace Drascula

Modified: scummvm/trunk/engines/drascula/interface.cpp
===================================================================
--- scummvm/trunk/engines/drascula/interface.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/interface.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -61,7 +61,7 @@
 
 	color_abc(kColorRed);
 	updateRoom();
-	centerText(_textsys[_lang][1], 160, 87);
+	centerText(_textsys[1], 160, 87);
 	updateScreen();
 
 	delay(100);

Modified: scummvm/trunk/engines/drascula/objects.cpp
===================================================================
--- scummvm/trunk/engines/drascula/objects.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/objects.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -256,7 +256,7 @@
 		if (roomNumber == 22 && flags[27] == 1)
 			visible[3] = 0;
 		if (roomNumber == 26 && flags[21] == 0)
-			strcpy(objName[2], _textmisc[_lang][0]);
+			strcpy(objName[2], _textmisc[0]);
 		if (roomNumber == 26 && flags[18] == 1)
 			visible[2] = 0;
 		if (roomNumber == 26 && flags[12] == 1)

Modified: scummvm/trunk/engines/drascula/rooms.cpp
===================================================================
--- scummvm/trunk/engines/drascula/rooms.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/rooms.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -184,9 +184,9 @@
 	if (pickedObject == kVerbTalk && fl == 129) {
 		talk(23);
 		pause(6);
-		talk_sync(_text[_lang][50], "50.als", "11111111111144432554433");
+		talk_sync(_text[50], "50.als", "11111111111144432554433");
 	} else if (pickedObject == kVerbTalk && fl == 133) {
-		talk_sync(_text[_lang][322], "322.als", "13333334125433333333");
+		talk_sync(_text[322], "322.als", "13333334125433333333");
 		updateRoom();
 		updateScreen();
 		pause(25);
@@ -407,7 +407,7 @@
 		talk(336);
 		trackProtagonist = 3;
 		talk(337);
-		talk_sync(_text[_lang][46], "46.als", "4442444244244");
+		talk_sync(_text[46], "46.als", "4442444244244");
 		trackProtagonist = 1;
 	} else if (pickedObject == 18 && fl == 188 && flags[26] == 0) {
 		copyBackground();
@@ -441,7 +441,7 @@
 	else if (pickedObject == kVerbTalk && fl == 183) {
 		talk(341);
 		pause(10);
-		talk_sync(_text[_lang][50], "50.als", "11111111111144432554433");
+		talk_sync(_text[50], "50.als", "11111111111144432554433");
 		pause(3);
 		talk_trunk(83);
 	} else if (pickedObject == kVerbOpen && fl == 183) {
@@ -948,19 +948,19 @@
 			talk_htel(240);
 
 			color_abc(kColorBrown);
-			talk_solo(_textvb[_lang][58], "VB58.als");
+			talk_solo(_textvb[58], "VB58.als");
 			talk_htel(241);
 			color_abc(kColorBrown);
-			talk_solo(_textvb[_lang][59], "VB59.als");
+			talk_solo(_textvb[59], "VB59.als");
 			talk_htel(242);
 			color_abc(kColorBrown);
-			talk_solo(_textvb[_lang][60], "VB60.als");
+			talk_solo(_textvb[60], "VB60.als");
 			talk_htel(196);
 			color_abc(kColorBrown);
-			talk_solo(_textvb[_lang][61],"VB61.als");
+			talk_solo(_textvb[61],"VB61.als");
 			talk_htel(244);
 			color_abc(kColorBrown);
-			talk_solo(_textvb[_lang][62], "VB62.als");
+			talk_solo(_textvb[62], "VB62.als");
 			clearRoom();
 			loadPic("aux59.alg", drawSurface3);
 			loadPic(96, frontSurface, COMPLETE_PAL);

Modified: scummvm/trunk/engines/drascula/talk.cpp
===================================================================
--- scummvm/trunk/engines/drascula/talk.cpp	2008-09-10 08:12:49 UTC (rev 34471)
+++ scummvm/trunk/engines/drascula/talk.cpp	2008-09-10 08:25:12 UTC (rev 34472)
@@ -55,7 +55,7 @@
 void DrasculaEngine::talk_igor(int index, int talkerType) {
 	char filename[20];
 	sprintf(filename, "I%i.als", index);
-	const char *said = _texti[_lang][index];
+	const char *said = _texti[index];
 	int x_talk0[8] = {  56,  82, 108, 134, 160, 186, 212, 238 };
 	int x_talk1[8] = {  56,  86, 116, 146, 176, 206, 236, 266 };
 	int x_talk3[4] = {  80, 102, 124, 146 };
@@ -136,7 +136,7 @@
 
 // Talker type 0: talk_dr_izq, 1: talk_dr_dch
 void DrasculaEngine::talk_drascula(int index, int talkerType) {
-	const char *said = _textd[_lang][index];
+	const char *said = _textd[index];
 	char filename[20];
 	sprintf(filename, "d%i.als", index);
 	int x_talk[8] = { 1, 40, 79, 118, 157, 196, 235, 274 };
@@ -196,7 +196,7 @@
 void DrasculaEngine::talk_drascula_big(int index) {
 	char filename[20];
 	sprintf(filename, "d%i.als", index);
-	const char *said = _textd[_lang][index];
+	const char *said = _textd[index];
 	int x_talk[4] = {47, 93, 139, 185};
 	int face;
 	int l = 0;
@@ -266,10 +266,10 @@
 
 	// Line 82 is a special case
 	if (index != 82)
-		said = _textt[_lang][index];
+		said = _textt[index];
 	else {
 		sprintf(filename, "d%i.als", index);
-		said = _textd[_lang][index];
+		said = _textd[index];
 	}
 
 	int x_talk[9] = { 1, 23, 45, 67, 89, 111, 133, 155, 177 };
@@ -321,7 +321,7 @@
 void DrasculaEngine::talk_bj(int index) {
 	char filename[20];
 	sprintf(filename, "BJ%i.als", index);
-	const char *said = _textbj[_lang][index];
+	const char *said = _textbj[index];
 	int x_talk[5] = { 64, 92, 120, 148, 176 };
 	int face;
 	int length = strlen(said);
@@ -369,7 +369,7 @@
 void DrasculaEngine::talk(int index) {
 	char name[20];
 	sprintf(name, "%i.als", index);
-	talk(_text[_lang][index], name);
+	talk(_text[index], name);
 }
 
 void DrasculaEngine::talk(const char *said, const char *filename) {
@@ -491,7 +491,7 @@
 void DrasculaEngine::talk_pianist(int index) {
 	char filename[20];
 	sprintf(filename, "P%i.als", index);
-	const char* said = _textp[_lang][index];
+	const char* said = _textp[index];
 	int x_talk[4] = { 97, 145, 193, 241 };
 	int coords[7] = { 139, 228, 112, 47, 60, 221, 128 };
 
@@ -502,7 +502,7 @@
 void DrasculaEngine::talk_drunk(int index) {
 	char filename[20];
 	sprintf(filename, "B%i.als", index);
-	const char *said = _textb[_lang][index];
+	const char *said = _textb[index];
 	int x_talk[8] = { 1, 21, 41, 61, 81, 101, 121, 141 };
 	int coords[7] = { 29, 177, 50, 19, 19, 181, 54 };
 
@@ -539,7 +539,7 @@
 void DrasculaEngine::talk_vonBraun(int index, int talkerType) {
 	char filename[20];
 	sprintf(filename, "VB%i.als", index);
-	const char *said = _textvb[_lang][index];
+	const char *said = _textvb[index];
 	int x_talk[6] = {1, 27, 53, 79, 105, 131};
 	int face;
 	int length = strlen(said);
@@ -591,8 +591,8 @@
 	// voice files start from 58, not 1
 	char filename[20];
 	sprintf(filename, "d%i.als", index + TEXTD_START - 1);
-	const char *said = _textd[_lang][index + TEXTD_START - 1];
-	const char *syncChar = _textd1[_lang][index - 1];
+	const char *said = _textd[index + TEXTD_START - 1];
+	const char *syncChar = _textd1[index - 1];
 
 	byte *faceBuffer;
 	int p = 0;
@@ -641,7 +641,7 @@
 void DrasculaEngine::talk_hacker(int index) {
 	char filename[20];
 	sprintf(filename, "d%i.als", index);
-	const char *said = _textd[_lang][index];
+	const char *said = _textd[index];
 	int length = strlen(said);
 
 	copyBackground();
@@ -661,7 +661,7 @@
 void DrasculaEngine::talk_werewolf(int index) {
 	char filename[20];
 	sprintf(filename, "L%i.als", index);
-	const char *said = _textl[_lang][index];
+	const char *said = _textl[index];
 	int x_talk[9] = {52, 79, 106, 133, 160, 187, 214, 241, 268};
 	int coords[7] = { 136, 198, 81, 26, 24, 203, 78 };
 
@@ -672,7 +672,7 @@
 void DrasculaEngine::talk_mus(int index) {
 	char filename[20];
 	sprintf(filename, "E%i.als", index);
-	const char *said = _texte[_lang][index];
+	const char *said = _texte[index];
 	int x_talk[8] = { 16, 35, 54, 73, 92, 111, 130, 149};
 	int coords[7] = { 156, 190, 64, 18, 24, 197, 64 };
 
@@ -735,7 +735,7 @@
 void DrasculaEngine::talk_bj_bed(int index) {
 	char filename[20];
 	sprintf(filename, "BJ%i.als", index);
-	const char *said = _textbj[_lang][index];
+	const char *said = _textbj[index];
 	int x_talk[5] = {51, 101, 151, 201, 251};
 	int face;
 	int length = strlen(said);
@@ -771,7 +771,7 @@
 void DrasculaEngine::talk_htel(int index) {
 	char filename[20];
 	sprintf(filename, "%i.als", index);
-	const char *said = _text[_lang][index];
+	const char *said = _text[index];
 	char *faceBuffer;
 	int x_talk[3] = {1, 94, 187};
 	int face, curScreen;
@@ -895,7 +895,7 @@
 void DrasculaEngine::talk_trunk(int index) {
 	char filename[20];
 	sprintf(filename, "d%i.als", index);
-	const char *said = _text[_lang][index];
+	const char *said = _text[index];
 	int face = 0, cara_antes;
 	int length = strlen(said);
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list