Add extra picture opcode code for ELvira 1/2

svn-id: r24426
This commit is contained in:
Travis Howell 2006-10-22 00:55:17 +00:00
parent 7ca5752fbc
commit bce0a11065
6 changed files with 43 additions and 23 deletions

View File

@ -324,6 +324,7 @@ AGOSEngine::AGOSEngine(OSystem *syst)
_classMode1 = 0;
_classMode2 = 0;
_superRoomNumber = 0;
_wallOn = 0;
_boxLineCount = 0;
_boxCR = 0;

View File

@ -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();

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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