[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