diff options
author | Sven Hesse | 2007-08-03 15:18:00 +0000 |
---|---|---|
committer | Sven Hesse | 2007-08-03 15:18:00 +0000 |
commit | e802f067cd96d63054b4233e44db02b660557787 (patch) | |
tree | e49723f0af30097d6a0bc323876933755bce97d3 | |
parent | 02103a65a271af647ff32928b331ee4291607931 (diff) | |
download | scummvm-rg350-e802f067cd96d63054b4233e44db02b660557787.tar.gz scummvm-rg350-e802f067cd96d63054b4233e44db02b660557787.tar.bz2 scummvm-rg350-e802f067cd96d63054b4233e44db02b660557787.zip |
Lost in Time now (kind of) shows the title and the wobble-effect is drawn
svn-id: r28433
-rw-r--r-- | engines/gob/draw.cpp | 85 | ||||
-rw-r--r-- | engines/gob/draw.h | 3 | ||||
-rw-r--r-- | engines/gob/gob.cpp | 3 | ||||
-rw-r--r-- | engines/gob/inter.h | 2 | ||||
-rw-r--r-- | engines/gob/inter_v1.cpp | 2 | ||||
-rw-r--r-- | engines/gob/inter_v2.cpp | 4 | ||||
-rw-r--r-- | engines/gob/inter_v3.cpp | 6 |
7 files changed, 101 insertions, 4 deletions
diff --git a/engines/gob/draw.cpp b/engines/gob/draw.cpp index bc5b205bd1..acf4d5765b 100644 --- a/engines/gob/draw.cpp +++ b/engines/gob/draw.cpp @@ -33,6 +33,7 @@ #include "gob/game.h" #include "gob/inter.h" #include "gob/video.h" +#include "gob/palanim.h" namespace Gob { @@ -411,4 +412,88 @@ void Draw::forceBlit(bool backwards) { 0, 0, 0); } +const int16 Draw::_wobbleTable[360] = { + 0x0000, 0x011D, 0x023B, 0x0359, 0x0476, 0x0593, 0x06B0, 0x07CC, 0x08E8, + 0x0A03, 0x0B1D, 0x0C36, 0x0D4E, 0x0E65, 0x0F7B, 0x1090, 0x11A4, 0x12B6, + 0x13C6, 0x14D6, 0x15E3, 0x16EF, 0x17F9, 0x1901, 0x1A07, 0x1B0C, 0x1C0E, + 0x1D0E, 0x1E0B, 0x1F07, 0x2000, 0x20F6, 0x21EA, 0x22DB, 0x23C9, 0x24B5, + 0x259E, 0x2684, 0x2766, 0x2846, 0x2923, 0x29FC, 0x2AD3, 0x2BA5, 0x2C75, + 0x2D41, 0x2E09, 0x2ECE, 0x2F8F, 0x304D, 0x3106, 0x31BC, 0x326E, 0x331C, + 0x33C6, 0x346C, 0x350E, 0x35AC, 0x3646, 0x36DB, 0x376C, 0x37F9, 0x3882, + 0x3906, 0x3985, 0x3A00, 0x3A77, 0x3AE9, 0x3B56, 0x3BBF, 0x3C23, 0x3C83, + 0x3CDE, 0x3D34, 0x3D85, 0x3DD1, 0x3E19, 0x3E5C, 0x3E99, 0x3ED2, 0x3F07, + 0x3F36, 0x3F60, 0x3F85, 0x3FA6, 0x3FC1, 0x3FD8, 0x3FE9, 0x3FF6, 0x3FFD, + 0x4000, 0x3FFD, 0x3FF6, 0x3FE9, 0x3FD8, 0x3FC1, 0x3FA6, 0x3F85, 0x3F60, + 0x3F36, 0x3F07, 0x3ED2, 0x3E99, 0x3E5C, 0x3E19, 0x3DD1, 0x3D85, 0x3D34, + 0x3CDE, 0x3C83, 0x3C23, 0x3BBF, 0x3B56, 0x3AE9, 0x3A77, 0x3A00, 0x3985, + 0x3906, 0x3882, 0x37F9, 0x376C, 0x36DB, 0x3646, 0x35AC, 0x350E, 0x346C, + 0x33C6, 0x331C, 0x326E, 0x31BC, 0x3106, 0x304D, 0x2F8F, 0x2ECE, 0x2E09, + 0x2D41, 0x2C75, 0x2BA5, 0x2AD3, 0x29FC, 0x2923, 0x2846, 0x2766, 0x2684, + 0x259E, 0x24B5, 0x23C9, 0x22DB, 0x21EA, 0x20F6, 0x1FFF, 0x1F07, 0x1E0B, + 0x1D0E, 0x1C0E, 0x1B0C, 0x1A07, 0x1901, 0x17F9, 0x16EF, 0x15E3, 0x14D6, + 0x13C6, 0x12B6, 0x11A4, 0x1090, 0x0F7B, 0x0E65, 0x0D4E, 0x0C36, 0x0B1D, + 0x0A03, 0x08E8, 0x07CC, 0x06B0, 0x0593, 0x0476, 0x0359, 0x023B, 0x011D + -0x0000, -0x011D, -0x023B, -0x0359, -0x0476, -0x0593, -0x06B0, -0x07CC, -0x08E8, + -0x0A03, -0x0B1D, -0x0C36, -0x0D4E, -0x0E65, -0x0F7B, -0x1090, -0x11A4, -0x12B6, + -0x13C6, -0x14D6, -0x15E3, -0x16EF, -0x17F9, -0x1901, -0x1A07, -0x1B0C, -0x1C0E, + -0x1D0E, -0x1E0B, -0x1F07, -0x2000, -0x20F6, -0x21EA, -0x22DB, -0x23C9, -0x24B5, + -0x259E, -0x2684, -0x2766, -0x2846, -0x2923, -0x29FC, -0x2AD3, -0x2BA5, -0x2C75, + -0x2D41, -0x2E09, -0x2ECE, -0x2F8F, -0x304D, -0x3106, -0x31BC, -0x326E, -0x331C, + -0x33C6, -0x346C, -0x350E, -0x35AC, -0x3646, -0x36DB, -0x376C, -0x37F9, -0x3882, + -0x3906, -0x3985, -0x3A00, -0x3A77, -0x3AE9, -0x3B56, -0x3BBF, -0x3C23, -0x3C83, + -0x3CDE, -0x3D34, -0x3D85, -0x3DD1, -0x3E19, -0x3E5C, -0x3E99, -0x3ED2, -0x3F07, + -0x3F36, -0x3F60, -0x3F85, -0x3FA6, -0x3FC1, -0x3FD8, -0x3FE9, -0x3FF6, -0x3FFD, + -0x4000, -0x3FFD, -0x3FF6, -0x3FE9, -0x3FD8, -0x3FC1, -0x3FA6, -0x3F85, -0x3F60, + -0x3F36, -0x3F07, -0x3ED2, -0x3E99, -0x3E5C, -0x3E19, -0x3DD1, -0x3D85, -0x3D34, + -0x3CDE, -0x3C83, -0x3C23, -0x3BBF, -0x3B56, -0x3AE9, -0x3A77, -0x3A00, -0x3985, + -0x3906, -0x3882, -0x37F9, -0x376C, -0x36DB, -0x3646, -0x35AC, -0x350E, -0x346C, + -0x33C6, -0x331C, -0x326E, -0x31BC, -0x3106, -0x304D, -0x2F8F, -0x2ECE, -0x2E09, + -0x2D41, -0x2C75, -0x2BA5, -0x2AD3, -0x29FC, -0x2923, -0x2846, -0x2766, -0x2684, + -0x259E, -0x24B5, -0x23C9, -0x22DB, -0x21EA, -0x20F6, -0x1FFF, -0x1F07, -0x1E0B, + -0x1D0E, -0x1C0E, -0x1B0C, -0x1A07, -0x1901, -0x17F9, -0x16EF, -0x15E3, -0x14D6, + -0x13C6, -0x12B6, -0x11A4, -0x1090, -0x0F7B, -0x0E65, -0x0D4E, -0x0C36, -0x0B1D, + -0x0A03, -0x08E8, -0x07CC, -0x06B0, -0x0593, -0x0476, -0x0359, -0x023B, -0x011D +}; + +void Draw::wobble(SurfaceDesc *surfDesc) { + int16 amplitude = 32; + uint16 curFrame = 0; + uint16 frameWobble = 0; + uint16 rowWobble = 0; + int8 *offsets = new int8[_vm->_height]; + + _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, 0, -1); + + while (amplitude > 0) { + rowWobble = frameWobble; + frameWobble = (frameWobble + 20) % 360; + + for (uint16 y = 0; y < _vm->_height; y++) { + offsets[y] = amplitude + + ((_wobbleTable[rowWobble] * amplitude) / 0x4000); + + rowWobble = (rowWobble + 20) % 360; + } + + if (curFrame++ & 16) + amplitude--; + + for (uint16 y = 0; y < _vm->_height; y++) + _vm->_video->drawSprite(surfDesc, _frontSurface, + 0, y, _vm->_width - 1, y, offsets[y], y, 0); + + _vm->_palAnim->fadeStep(0); + _vm->_video->waitRetrace(); + } + + _vm->_video->drawSprite(surfDesc, _frontSurface, + 0, 0, _vm->_width - 1, _vm->_height - 1, 0, 0, 0); + + _applyPal = false; + _invalidatedCount = 0; + _noInvalidated = true; + + delete[] offsets; +} + } // End of namespace Gob diff --git a/engines/gob/draw.h b/engines/gob/draw.h index 8108a18d12..4bf59856be 100644 --- a/engines/gob/draw.h +++ b/engines/gob/draw.h @@ -153,6 +153,9 @@ public: int32 getSpriteRectSize(int16 index); void forceBlit(bool backwards = false); + static const int16 _wobbleTable[360]; + void wobble(SurfaceDesc *surfDesc); + virtual void initScreen() = 0; virtual void closeScreen() = 0; virtual void blitCursor() = 0; diff --git a/engines/gob/gob.cpp b/engines/gob/gob.cpp index 40a505364d..d9385b1b0f 100644 --- a/engines/gob/gob.cpp +++ b/engines/gob/gob.cpp @@ -136,7 +136,8 @@ void GobEngine::validateLanguage() { } void GobEngine::validateVideoMode(int16 videoMode) { - if ((videoMode != 0x13) && (videoMode != 0x14) && (videoMode != 0x18)) + if ((videoMode != 0x10) && (videoMode != 0x13) && + (videoMode != 0x14) && (videoMode != 0x18)) error("Video mode 0x%X is not supported!", videoMode); } diff --git a/engines/gob/inter.h b/engines/gob/inter.h index db56ad4cd9..a7317492ad 100644 --- a/engines/gob/inter.h +++ b/engines/gob/inter.h @@ -481,6 +481,8 @@ protected: bool o3_checkData(OpFuncParams ¶ms); bool o3_readData(OpFuncParams ¶ms); bool o3_writeData(OpFuncParams ¶ms); + + void o3_wobble(OpGobParams ¶ms); }; class Inter_v4 : public Inter_v3 { diff --git a/engines/gob/inter_v1.cpp b/engines/gob/inter_v1.cpp index 5d74138db1..9f30d9dea2 100644 --- a/engines/gob/inter_v1.cpp +++ b/engines/gob/inter_v1.cpp @@ -1617,7 +1617,7 @@ bool Inter_v1::o1_palLoad(OpFuncParams ¶ms) { _vm->_global->_pPaletteDesc->unused1 = _vm->_draw->_unusedPalette1; if (_vm->_global->_videoMode < 0x13) { - _vm->_global->_pPaletteDesc->vgaPal = _vm->_draw->_vgaSmallPalette; + _vm->_global->_pPaletteDesc->vgaPal = _vm->_draw->_vgaPalette; _vm->_palAnim->fade(_vm->_global->_pPaletteDesc, 0, 0); return false; } diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 8cb8b706bd..476ebedddd 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -1375,10 +1375,12 @@ void Inter_v2::o2_initScreen() { width = _vm->_parse->parseValExpr(); height = _vm->_parse->parseValExpr(); + _vm->_global->_colorCount = (videoMode == 0x10) ? 16 : 256; + _vm->_global->_fakeVideoMode = videoMode; // Some versions require this - if ((videoMode == 0xD) || (videoMode == 0x10)) + if ((videoMode == 0xD))// || (videoMode == 0x10)) videoMode = _vm->_mode; if ((videoMode == _vm->_global->_videoMode) && (width == -1)) diff --git a/engines/gob/inter_v3.cpp b/engines/gob/inter_v3.cpp index 701842a9d2..51413c839a 100644 --- a/engines/gob/inter_v3.cpp +++ b/engines/gob/inter_v3.cpp @@ -594,7 +594,7 @@ void Inter_v3::setupOpcodes() { {NULL, ""}, {NULL, ""}, {NULL, ""}, - {NULL, ""}, + OPCODE(o3_wobble), /* 28 */ {NULL, ""}, {NULL, ""}, @@ -894,4 +894,8 @@ bool Inter_v3::o3_copySprite(OpFuncParams ¶ms) { return false; } +void Inter_v3::o3_wobble(OpGobParams ¶ms) { + _vm->_draw->wobble(_vm->_draw->_backSurface); +} + } // End of namespace Gob |