aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Kagerer2009-10-07 20:25:49 +0000
committerFlorian Kagerer2009-10-07 20:25:49 +0000
commit35f8e6ec0505c9f7ea2ae1e03b39372784bd768f (patch)
tree5ec16e2f24a6ad63e4d03c344398763020331848
parent423f54a2d0585fa281649988e33d6f0bd6279925 (diff)
downloadscummvm-rg350-35f8e6ec0505c9f7ea2ae1e03b39372784bd768f.tar.gz
scummvm-rg350-35f8e6ec0505c9f7ea2ae1e03b39372784bd768f.tar.bz2
scummvm-rg350-35f8e6ec0505c9f7ea2ae1e03b39372784bd768f.zip
LOL/PC-98: fixed freeze spell
svn-id: r44753
-rw-r--r--engines/kyra/lol.cpp56
-rw-r--r--engines/kyra/screen_lol.cpp2
2 files changed, 40 insertions, 18 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index a33a04b3c2..130acc2f40 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -2288,19 +2288,45 @@ int LoLEngine::processMagicIce(int charNum, int spellLevel) {
setCharacterUpdateEvent(charNum, 8, freezeTimes[spellLevel], 1);
}
- _screen->loadPalette("SWAMPICE.COL", swampCol);
- tpal.copy(_screen->getPalette(1), 128);
- swampCol.copy(_screen->getPalette(1), 128);
-
- Palette &s = _screen->getPalette(1);
- for (int i = 1; i < 128; i++) {
- tpal[i * 3] = 0;
- uint16 v = (s[i * 3] + s[i * 3 + 1] + s[i * 3 + 2]) / 3;
- tpal[i * 3 + 1] = v;
- tpal[i * 3 + 2] = v << 1;
+ Palette s(256);
+ s.copy(_screen->getPalette(1));
+ if (_flags.use16ColorMode) {
+ _screen->loadPalette("LOLICE.NOL", swampCol);
+ uint8 *s1 = s.getData();
+ for (int i = 0; i < 16; i++) {
+ s1[((i << 4) | i) * 3] = s1[i * 3];
+ s1[((i << 4) | i) * 3 + 1] = s1[i * 3 + 1];
+ s1[((i << 4) | i) * 3 + 2] = s1[i * 3 + 2];
+ }
+ uint8 *d1 = tpal.getData();
+ uint8 *d2 = swampCol.getData();
+ for (int i = 48; i < 256; i++)
+ d1[i] = d2[i] = s1[i] & 0x3f;
+
+ for (int i = 1; i < 16; i++) {
+ uint16 v = (s[i * 3] + s[i * 3 + 1] + s[i * 3 + 2]) / 3;
+ tpal[i * 3] = 0;
+ tpal[i * 3 + 1] = v;
+ tpal[i * 3 + 2] = v << 1;
+
+ if (tpal[i * 3 + 2] > 0x3f)
+ tpal[i * 3 + 2] = 0x3f;
+ }
- if (tpal[i * 3 + 2] > 0x3f)
- tpal[i * 3 + 2] = 0x3f;
+ } else {
+ _screen->loadPalette("SWAMPICE.COL", swampCol);
+ tpal.copy(s, 128);
+ swampCol.copy(s, 128);
+
+ for (int i = 1; i < 128; i++) {
+ tpal[i * 3] = 0;
+ uint16 v = (s[i * 3] + s[i * 3 + 1] + s[i * 3 + 2]) / 3;
+ tpal[i * 3 + 1] = v;
+ tpal[i * 3 + 2] = v << 1;
+
+ if (tpal[i * 3 + 2] > 0x3f)
+ tpal[i * 3 + 2] = 0x3f;
+ }
}
generateBrightnessPalette(tpal, tpal, _brightness, _lampEffect);
@@ -2405,10 +2431,6 @@ int LoLEngine::processMagicIce(int charNum, int spellLevel) {
if (breakWall)
breakIceWall(tpal.getData(), swampCol.getData());
- //static const uint8 freezeTime[] = { 20, 28, 40, 60 };
- //if (spellLevel == 11)
- // setCharacterUpdateEvent(charNum, 8, freezeTime[spellLevel], 1);
-
_screen->setCurPage(cp);
return 1;
}
@@ -3168,7 +3190,7 @@ void LoLEngine::playSpellAnimation(WSAMovie_v2 *mov, int firstFrame, int lastFra
(this->*callback)(mov, x, y);
if (mov)
- mov->displayFrame(curFrame % mov->frames(), 2, x, y, 0x5000, _trueLightTable1, _trueLightTable2);
+ mov->displayFrame(curFrame % mov->frames(), 2, x, y, _flags.use16ColorMode ? 0x4000 : 0x5000, _trueLightTable1, _trueLightTable2);
if (mov || callback) {
_screen->copyRegion(x, y, x, y, w2, h2, 2, 0, Screen::CR_NO_P_CHECK);
diff --git a/engines/kyra/screen_lol.cpp b/engines/kyra/screen_lol.cpp
index ca26695c47..4feabffa62 100644
--- a/engines/kyra/screen_lol.cpp
+++ b/engines/kyra/screen_lol.cpp
@@ -914,7 +914,7 @@ bool Screen_LoL::fadePaletteStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, u
Palette &p1 = getPalette(1);
bool res = false;
- for (int i = 0; i < 768; i++) {
+ for (int i = 0; i < p1.getNumColors() * 3; i++) {
uint8 out = 0;
if (elapsedTime < targetTime) {