[Scummvm-cvs-logs] SF.net SVN: scummvm:[41677] scummvm/trunk/engines/kyra

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Fri Jun 19 19:03:28 CEST 2009


Revision: 41677
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41677&view=rev
Author:   athrxx
Date:     2009-06-19 17:03:28 +0000 (Fri, 19 Jun 2009)

Log Message:
-----------
LOL: - implemented bezel cup opcode
- implemented font conversion for certain language specific characters in load game dialogue (only german atm)

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/gui_lol.cpp
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/lol.h
    scummvm/trunk/engines/kyra/script_lol.cpp
    scummvm/trunk/engines/kyra/staticres.cpp

Modified: scummvm/trunk/engines/kyra/gui_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lol.cpp	2009-06-19 14:30:09 UTC (rev 41676)
+++ scummvm/trunk/engines/kyra/gui_lol.cpp	2009-06-19 17:03:28 UTC (rev 41677)
@@ -2239,6 +2239,8 @@
 		if (_currentMenu == &_loadMenu || _currentMenu == &_saveMenu) {
 			updateSaveList(true);
 			Common::sort(_saveSlots.begin(), _saveSlots.end(), Common::Greater<int>());
+
+
 			setupSavegameNames(*_currentMenu, 4);
 		}
 
@@ -2359,6 +2361,16 @@
 		if ((in = _vm->openSaveForReading(_vm->getSavegameFilename(_saveSlots[i + _savegameOffset]), header)) != 0) {
 			strncpy(s, header.description.c_str(), 80);
 			s[79] = 0;
+
+			for (uint32 ii = 0; ii < strlen(s); ii++) {
+				for (int iii = 0; iii < _vm->_fontConversionTableGermanSize; iii += 2) {
+					if (s[ii] == _vm->_fontConversionTableGerman[iii]) {
+						s[ii] = _vm->_fontConversionTableGerman[iii + 1];
+						break;
+					}
+				}
+			}
+
 			menu.item[i].itemString = s;
 			s += (strlen(s) + 1);
 			menu.item[i].saveSlot = _saveSlots[i + _savegameOffset];

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-06-19 14:30:09 UTC (rev 41676)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-06-19 17:03:28 UTC (rev 41677)
@@ -2783,6 +2783,55 @@
 	delete[] tpal;
 }
 
+void LoLEngine::drinkBezelCup(int numUses, int charNum) {
+	int cp = _screen->setCurPage(2);
+	snd_playSoundEffect(73, -1);
+	
+	WSAMovie_v2 *mov = new WSAMovie_v2(this);
+	mov->open("bezel.wsa", 0, 0);
+	if (!mov->opened())
+		error("Bezel: Unable to load bezel.wsa");
+
+	int x = _activeCharsXpos[charNum] - 11;
+	int y = 124;
+	int w = mov->width();
+	int h = mov->height();
+
+	_screen->copyRegion(x, y, 0, 0, w, h, 0, 2, Screen::CR_NO_P_CHECK);
+
+	static const uint8 bezelAnimData[] = { 0, 26, 20, 27, 61, 55, 62, 92, 86, 93, 131, 125 };
+	int frm = bezelAnimData[numUses * 3];
+	int hpDiff = _characters[charNum].hitPointsMax - _characters[charNum].hitPointsCur;
+	uint16 step = 0;
+
+	do {
+		step = (step & 0xff) + (hpDiff * 256) / (bezelAnimData[numUses * 3 + 2]);
+		increaseCharacterHitpoints(charNum, step / 256, true);
+		gui_drawCharPortraitWithStats(charNum);
+
+		uint32 etime = _system->getMillis() + 4 * _tickLength;
+
+		_screen->copyRegion(0, 0, x, y, w, h, 2, 2, Screen::CR_NO_P_CHECK);
+		mov->displayFrame(frm, 2, x, y, 0x5000, _trueLightTable1, _trueLightTable2);
+		_screen->copyRegion(x, y, x, y, w, h, 2, 0, Screen::CR_NO_P_CHECK);
+		_screen->updateScreen();
+
+		delayUntil(etime);		
+	} while (++frm < bezelAnimData[numUses * 3 + 1]);
+
+	_characters[charNum].hitPointsCur = _characters[charNum].hitPointsMax;
+	_screen->copyRegion(0, 0, x, y, w, h, 2, 2, Screen::CR_NO_P_CHECK);
+	removeCharacterEffects(&_characters[charNum], 4, 4);
+	gui_drawCharPortraitWithStats(charNum);
+	_screen->copyRegion(x, y, x, y, w, h, 2, 0, Screen::CR_NO_P_CHECK);
+	_screen->updateScreen();
+	
+	mov->close();
+	delete mov;
+
+	_screen->setCurPage(cp);
+}
+
 void LoLEngine::addSpellToScroll(int spell, int charNum) {
 	bool assigned = false;
 	int slot = 0;

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-06-19 14:30:09 UTC (rev 41676)
+++ scummvm/trunk/engines/kyra/lol.h	2009-06-19 17:03:28 UTC (rev 41677)
@@ -777,6 +777,7 @@
 	int olol_assignSpecialGuiShape(EMCState *script);
 	int olol_findInventoryItem(EMCState *script);
 	int olol_restoreFadePalette(EMCState *script);
+	int olol_drinkBezelCup(EMCState *script);
 	int olol_changeItemTypeOrFlag(EMCState *script);
 	int olol_placeInventoryItemInHand(EMCState *script);
 	int olol_castSpell(EMCState *script);
@@ -851,6 +852,8 @@
 	void decodeSjis(const char *src, char *dst);
 
 	static const char * const _languageExt[];
+	static const char _fontConversionTableGerman[];
+	static const int _fontConversionTableGermanSize;
 
 	// graphics
 	void setupScreenDims();
@@ -905,7 +908,7 @@
 
 	void setCharacterMagicOrHitPoints(int charNum, int type, int points, int mode);
 	void increaseExperience(int charNum, int skill, uint32 points);
-	void increaseCharacterHitpoints(int charNum, int points, bool unk);
+	void increaseCharacterHitpoints(int charNum, int points, bool ignoreDeath);
 
 	LoLCharacter *_characters;
 	uint16 _activeCharsXpos[3];
@@ -1348,6 +1351,8 @@
 	void callbackProcessMagicSwarm(WSAMovie_v2 *mov, int x, int y);
 	void callbackProcessMagicLightning(WSAMovie_v2 *mov, int x, int y);
 
+	void drinkBezelCup(int a, int charNum);
+
 	void addSpellToScroll(int spell, int charNum);
 	void transferSpellToScollAnimation(int charNum, int spell, int slot);
 

Modified: scummvm/trunk/engines/kyra/script_lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lol.cpp	2009-06-19 14:30:09 UTC (rev 41676)
+++ scummvm/trunk/engines/kyra/script_lol.cpp	2009-06-19 17:03:28 UTC (rev 41677)
@@ -1994,6 +1994,12 @@
 	return -1;
 }
 
+int LoLEngine::olol_drinkBezelCup(EMCState *script) {
+	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_drinkBezelCup(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1));
+	drinkBezelCup(3 - stackPos(0), stackPos(1));
+	return 1;
+}
+
 int LoLEngine::olol_restoreFadePalette(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_restoreFadePalette(%p)", (const void *)script);
 	memcpy(_screen->_currentPalette, _screen->getPalette(1), 384);
@@ -2852,7 +2858,7 @@
 	// 0xA8
 	OpcodeUnImpl();
 	OpcodeUnImpl();
-	OpcodeUnImpl();
+	Opcode(olol_drinkBezelCup);
 	Opcode(olol_changeItemTypeOrFlag);
 
 	// 0xAC

Modified: scummvm/trunk/engines/kyra/staticres.cpp
===================================================================
--- scummvm/trunk/engines/kyra/staticres.cpp	2009-06-19 14:30:09 UTC (rev 41676)
+++ scummvm/trunk/engines/kyra/staticres.cpp	2009-06-19 17:03:28 UTC (rev 41677)
@@ -3296,6 +3296,13 @@
 	0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100
 };
 
+const char LoLEngine::_fontConversionTableGerman[] = {
+	'\xC4', 0x8e, '\xE4', 0x84, '\xD6', 0x99, '\xF6',
+	0x94, '\xDC', 0x9a, '\xFC', 0x81, '\xDF', 0xe1
+};
+
+const int LoLEngine::_fontConversionTableGermanSize = ARRAYSIZE(LoLEngine::_fontConversionTableGerman);
+
 #endif // ENABLE_LOL
 
 } // End of namespace Kyra


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