Hopefully allow quiting at any stage AGOS engines games again.
svn-id: r33693
This commit is contained in:
parent
52650efb6a
commit
fd65ea311a
12 changed files with 33 additions and 24 deletions
|
@ -151,7 +151,7 @@ void MoviePlayer::play() {
|
||||||
|
|
||||||
startSound();
|
startSound();
|
||||||
|
|
||||||
while (_frameNum < _framesCount)
|
while (_frameNum < _framesCount && !_vm->_quit)
|
||||||
handleNextFrame();
|
handleNextFrame();
|
||||||
|
|
||||||
closeFile();
|
closeFile();
|
||||||
|
|
|
@ -123,7 +123,7 @@ void AGOSEngine::setup_cond_c_helper() {
|
||||||
clearName();
|
clearName();
|
||||||
_lastNameOn = last;
|
_lastNameOn = last;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = 0;
|
_lastHitArea3 = 0;
|
||||||
_leftButtonDown = 0;
|
_leftButtonDown = 0;
|
||||||
|
@ -145,7 +145,7 @@ void AGOSEngine::setup_cond_c_helper() {
|
||||||
}
|
}
|
||||||
|
|
||||||
delay(100);
|
delay(100);
|
||||||
} while (_lastHitArea3 == (HitArea *) -1 || _lastHitArea3 == 0);
|
} while ((_lastHitArea3 == (HitArea *) -1 || _lastHitArea3 == 0) && !_quit);
|
||||||
|
|
||||||
if (_lastHitArea == NULL) {
|
if (_lastHitArea == NULL) {
|
||||||
} else if (_lastHitArea->id == 0x7FFB) {
|
} else if (_lastHitArea->id == 0x7FFB) {
|
||||||
|
|
|
@ -459,7 +459,7 @@ void AGOSEngine_Feeble::saveUserGame(int slot) {
|
||||||
}
|
}
|
||||||
|
|
||||||
windowPutChar(window, 0x7f);
|
windowPutChar(window, 0x7f);
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_keyPressed.reset();
|
_keyPressed.reset();
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
||||||
|
|
|
@ -279,11 +279,11 @@ restart:
|
||||||
name = buf;
|
name = buf;
|
||||||
_saveGameNameLen = 0;
|
_saveGameNameLen = 0;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
windowPutChar(window, 128);
|
windowPutChar(window, 128);
|
||||||
_keyPressed.reset();
|
_keyPressed.reset();
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
delay(10);
|
delay(10);
|
||||||
if (_keyPressed.ascii && _keyPressed.ascii < 128) {
|
if (_keyPressed.ascii && _keyPressed.ascii < 128) {
|
||||||
i = _keyPressed.ascii;
|
i = _keyPressed.ascii;
|
||||||
|
@ -443,7 +443,7 @@ void AGOSEngine_Elvira2::userGame(bool load) {
|
||||||
|
|
||||||
name = buf + 192;
|
name = buf + 192;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
windowPutChar(window, 128);
|
windowPutChar(window, 128);
|
||||||
|
|
||||||
_saveLoadEdit = true;
|
_saveLoadEdit = true;
|
||||||
|
@ -516,7 +516,7 @@ int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
|
|
||||||
_keyPressed.reset();
|
_keyPressed.reset();
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
|
@ -526,7 +526,7 @@ int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
return _keyPressed.ascii;
|
return _keyPressed.ascii;
|
||||||
}
|
}
|
||||||
delay(10);
|
delay(10);
|
||||||
} while (_lastHitArea3 == 0);
|
} while (_lastHitArea3 == 0 && !_quit);
|
||||||
|
|
||||||
ha = _lastHitArea;
|
ha = _lastHitArea;
|
||||||
if (ha == NULL || ha->id < 200) {
|
if (ha == NULL || ha->id < 200) {
|
||||||
|
@ -543,6 +543,8 @@ int AGOSEngine_Elvira2::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
return ha->id - 200;
|
return ha->id - 200;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 225;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGOSEngine_Simon1::listSaveGames(char *dst) {
|
void AGOSEngine_Simon1::listSaveGames(char *dst) {
|
||||||
|
@ -706,7 +708,7 @@ restart:;
|
||||||
_saveGameNameLen++;
|
_saveGameNameLen++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
windowPutChar(window, 127);
|
windowPutChar(window, 127);
|
||||||
|
|
||||||
_saveLoadEdit = true;
|
_saveLoadEdit = true;
|
||||||
|
@ -785,7 +787,7 @@ int AGOSEngine_Simon1::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
|
|
||||||
_keyPressed.reset();
|
_keyPressed.reset();
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
|
@ -795,7 +797,7 @@ int AGOSEngine_Simon1::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
return _keyPressed.ascii;
|
return _keyPressed.ascii;
|
||||||
}
|
}
|
||||||
delay(10);
|
delay(10);
|
||||||
} while (_lastHitArea3 == 0);
|
} while (_lastHitArea3 == 0 && !_quit);
|
||||||
|
|
||||||
ha = _lastHitArea;
|
ha = _lastHitArea;
|
||||||
if (ha == NULL || ha->id < 205) {
|
if (ha == NULL || ha->id < 205) {
|
||||||
|
@ -824,6 +826,8 @@ int AGOSEngine_Simon1::userGameGetKey(bool *b, char *buf, uint maxChar) {
|
||||||
return ha->id - 208;
|
return ha->id - 208;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 205;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AGOSEngine::disableFileBoxes() {
|
void AGOSEngine::disableFileBoxes() {
|
||||||
|
|
|
@ -1012,7 +1012,7 @@ int AGOSEngine::runScript() {
|
||||||
executeOpcode(_opcode);
|
executeOpcode(_opcode);
|
||||||
} while (getScriptCondition() != flag && !getScriptReturn() && !_quit);
|
} while (getScriptCondition() != flag && !getScriptReturn() && !_quit);
|
||||||
|
|
||||||
return getScriptReturn();
|
return (_quit) ? 1 : getScriptReturn();
|
||||||
}
|
}
|
||||||
|
|
||||||
Child *nextSub(Child *sub, int16 key) {
|
Child *nextSub(Child *sub, int16 key) {
|
||||||
|
|
|
@ -1053,11 +1053,11 @@ uint AGOSEngine::confirmYesOrNo(uint16 x, uint16 y) {
|
||||||
ha->priority = 999;
|
ha->priority = 999;
|
||||||
ha->window = 0;
|
ha->window = 0;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
if (_lastHitArea3 != 0)
|
if (_lastHitArea3 != 0)
|
||||||
break;
|
break;
|
||||||
delay(1);
|
delay(1);
|
||||||
|
@ -1102,11 +1102,11 @@ uint AGOSEngine::continueOrQuit() {
|
||||||
ha->priority = 999;
|
ha->priority = 999;
|
||||||
ha->window = 0;
|
ha->window = 0;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
if (_lastHitArea3 != 0)
|
if (_lastHitArea3 != 0)
|
||||||
break;
|
break;
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
|
@ -370,11 +370,11 @@ void AGOSEngine_Elvira2::oe2_pauseGame() {
|
||||||
uint32 pauseTime = getTime();
|
uint32 pauseTime = getTime();
|
||||||
haltAnimation();
|
haltAnimation();
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
if (processSpecialKeys() != 0 || _lastHitArea3 != 0)
|
if (processSpecialKeys() != 0 || _lastHitArea3 != 0)
|
||||||
break;
|
break;
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
|
@ -339,7 +339,7 @@ void AGOSEngine_Simon1::os1_pauseGame() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
delay(1);
|
delay(1);
|
||||||
if (_keyPressed.keycode == keyYes)
|
if (_keyPressed.keycode == keyYes)
|
||||||
_quit = true;
|
_quit = true;
|
||||||
|
|
|
@ -368,11 +368,11 @@ void AGOSEngine_Waxworks::oww_pauseGame() {
|
||||||
uint32 pauseTime = getTime();
|
uint32 pauseTime = getTime();
|
||||||
haltAnimation();
|
haltAnimation();
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
if (_lastHitArea3 != 0)
|
if (_lastHitArea3 != 0)
|
||||||
break;
|
break;
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
|
@ -518,6 +518,8 @@ void AGOSEngine::runSubroutine101() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int AGOSEngine::startSubroutine(Subroutine *sub) {
|
int AGOSEngine::startSubroutine(Subroutine *sub) {
|
||||||
|
printf("startSubroutine\n");
|
||||||
|
|
||||||
int result = -1;
|
int result = -1;
|
||||||
SubroutineLine *sl = (SubroutineLine *)((byte *)sub + sub->first);
|
SubroutineLine *sl = (SubroutineLine *)((byte *)sub + sub->first);
|
||||||
|
|
||||||
|
|
|
@ -343,6 +343,9 @@ void AGOSEngine::handleVerbClicked(uint verb) {
|
||||||
Subroutine *sub;
|
Subroutine *sub;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
if (_quit)
|
||||||
|
return;
|
||||||
|
|
||||||
_objectItem = _hitAreaObjectItem;
|
_objectItem = _hitAreaObjectItem;
|
||||||
if (_objectItem == _dummyItem2) {
|
if (_objectItem == _dummyItem2) {
|
||||||
_objectItem = me();
|
_objectItem = me();
|
||||||
|
|
|
@ -298,7 +298,7 @@ void AGOSEngine::waitWindow(WindowBlock *window) {
|
||||||
ha->id = 0x7FFF;
|
ha->id = 0x7FFF;
|
||||||
ha->priority = 999;
|
ha->priority = 999;
|
||||||
|
|
||||||
for (;;) {
|
while (!_quit) {
|
||||||
_lastHitArea = NULL;
|
_lastHitArea = NULL;
|
||||||
_lastHitArea3 = NULL;
|
_lastHitArea3 = NULL;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue