From bce0a11065570c7bb2373c6330071143f0489815 Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Sun, 22 Oct 2006 00:55:17 +0000 Subject: Add extra picture opcode code for ELvira 1/2 svn-id: r24426 --- engines/agos/agos.cpp | 1 + engines/agos/agos.h | 2 ++ engines/agos/icons.cpp | 8 ++++---- engines/agos/input.cpp | 3 ++- engines/agos/menus.cpp | 8 ++++---- engines/agos/script.cpp | 44 ++++++++++++++++++++++++++++++-------------- 6 files changed, 43 insertions(+), 23 deletions(-) (limited to 'engines/agos') diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index b0fa6c6205..ad7884e31a 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -324,6 +324,7 @@ AGOSEngine::AGOSEngine(OSystem *syst) _classMode1 = 0; _classMode2 = 0; _superRoomNumber = 0; + _wallOn = 0; _boxLineCount = 0; _boxCR = 0; diff --git a/engines/agos/agos.h b/engines/agos/agos.h index f8576b0f5e..a302760b29 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -318,6 +318,7 @@ protected: int _agosMenu; byte _textMenu[10]; uint _superRoomNumber; + uint _wallOn; uint16 _hyperLink, _newLines; uint16 _oracleMaxScrollY, _noOracleScroll; @@ -797,6 +798,7 @@ protected: void animate(uint windowNum, uint zoneNum, uint vgaSpriteId, uint x, uint y, uint palette, bool setZone = true); void setImage(uint16 vga_res_id, bool setZone); void setWindowImage(uint16 mode, uint16 vga_res_id); + void setWindowImageEx(uint16 mode, uint16 vga_res); void playSpeech(uint speech_id, uint vga_sprite_id); void skipSpeech(); diff --git a/engines/agos/icons.cpp b/engines/agos/icons.cpp index 7738c8cf25..b2926d4856 100644 --- a/engines/agos/icons.cpp +++ b/engines/agos/icons.cpp @@ -568,7 +568,7 @@ void AGOSEngine::defineArrowBoxes(WindowBlock *window) { ha->priority = 100; ha->window = window; ha->verb = 1; - setWindowImage(6, 103); + setWindowImageEx(6, 103); } else if (getGameType() == GType_ELVIRA2) { ha->x = 54; ha->y = 178; @@ -579,7 +579,7 @@ void AGOSEngine::defineArrowBoxes(WindowBlock *window) { ha->priority = 100; ha->window = window; ha->verb = 1; - setWindowImage(6, 106); + setWindowImageEx(6, 106); } else { ha->x = 30 * 8; ha->y = 170; @@ -705,10 +705,10 @@ void AGOSEngine::removeArrows(WindowBlock *window, uint num) { stopAnimateSimon1(128); } else if (getGameType() == GType_WW) { setBitFlag(22, false); - setWindowImage(6, 103); + setWindowImageEx(6, 103); } else if (getGameType() == GType_ELVIRA2) { setBitFlag(21, false); - setWindowImage(6, 106); + setWindowImageEx(6, 106); } } diff --git a/engines/agos/input.cpp b/engines/agos/input.cpp index c07cae713a..d00bbe10b3 100644 --- a/engines/agos/input.cpp +++ b/engines/agos/input.cpp @@ -183,7 +183,8 @@ startOver: if (getGameType() != GType_FF && getGameType() != GType_PP && _keyPressed == 35) displayBoxStars(); if (processSpecialKeys() != 0) { - goto out_of_here; + if (getGameType() == GType_WW || getGameType() == GType_PP) + goto out_of_here; } if (_lastHitArea3 == (HitArea *) -1) goto startOver; diff --git a/engines/agos/menus.cpp b/engines/agos/menus.cpp index 9168bb6021..6ef180b4f8 100644 --- a/engines/agos/menus.cpp +++ b/engines/agos/menus.cpp @@ -161,9 +161,9 @@ void AGOSEngine::clearMenuStrip() { disableBox(i); if (getGameType() == GType_WW) { - setWindowImage(2, 101); + setWindowImageEx(2, 101); } else { - setWindowImage(2, 102); + setWindowImageEx(2, 102); } } @@ -205,9 +205,9 @@ void AGOSEngine::doMenuStrip(uint menuNum) { _variableArray[var + 4] = id - 111; if (getGameType() == GType_WW) { - setWindowImage(2, 102); + setWindowImageEx(2, 102); } else { - setWindowImage(2, 103); + setWindowImageEx(2, 103); } } diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index 22225165f2..90e014b28a 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -655,20 +655,7 @@ void AGOSEngine::o_picture() { uint mode = getVarOrByte(); _picture8600 = (vga_res == 8600); - - if (mode == 4) { - vc29_stopAllSounds(); - - if (!_initMouse) { - _initMouse = 1; - vc33_setMouseOn(); - } - } - - if (_lockWord & 0x10) - error("o_picture: _lockWord & 0x10"); - - setWindowImage(mode, vga_res); + setWindowImageEx(mode, vga_res); } void AGOSEngine::o_loadZone() { @@ -1541,4 +1528,33 @@ void AGOSEngine::stopAnimateSimon2(uint a, uint b) { _lockWord &= ~0x8000; } +void AGOSEngine::setWindowImageEx(uint16 mode, uint16 vga_res) { + if (!_initMouse) { + _initMouse = 1; + vc33_setMouseOn(); + } + + if (mode == 4) { + vc29_stopAllSounds(); + + if (getGameType() == GType_ELVIRA1) { + if (_variableArray[299] == 0) { + _variableArray[293] = 0; + _wallOn = 0; + } + } else if (getGameType() == GType_ELVIRA1) { + if (_variableArray[70] == 0) { + _variableArray[71] = 0; + _wallOn = 0; + } + } + + } + + if (_lockWord & 0x10) + error("setWindowImageEx: _lockWord & 0x10"); + + setWindowImage(mode, vga_res); +} + } // End of namespace AGOS -- cgit v1.2.3