mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-22 04:01:23 +00:00
Merging playTot()
svn-id: r42129
This commit is contained in:
parent
7be3530ffb
commit
14172febf7
@ -37,6 +37,7 @@
|
||||
#include "gob/inter.h"
|
||||
#include "gob/draw.h"
|
||||
#include "gob/mult.h"
|
||||
#include "gob/scenery.h"
|
||||
#include "gob/videoplayer.h"
|
||||
#include "gob/sound/sound.h"
|
||||
|
||||
@ -241,6 +242,137 @@ void Game::prepareStart() {
|
||||
_startTimeKey = _vm->_util->getTimeKey();
|
||||
}
|
||||
|
||||
void Game::playTot(int16 skipPlay) {
|
||||
char savedTotName[20];
|
||||
int16 *oldCaptureCounter;
|
||||
int16 *oldBreakFrom;
|
||||
int16 *oldNestLevel;
|
||||
int16 _captureCounter;
|
||||
int16 breakFrom;
|
||||
int16 nestLevel;
|
||||
|
||||
oldNestLevel = _vm->_inter->_nestLevel;
|
||||
oldBreakFrom = _vm->_inter->_breakFromLevel;
|
||||
oldCaptureCounter = _vm->_scenery->_pCaptureCounter;
|
||||
|
||||
_script->push();
|
||||
|
||||
_vm->_inter->_nestLevel = &nestLevel;
|
||||
_vm->_inter->_breakFromLevel = &breakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = &_captureCounter;
|
||||
strcpy(savedTotName, _curTotFile);
|
||||
|
||||
if (skipPlay <= 0) {
|
||||
while (!_vm->shouldQuit()) {
|
||||
if (_vm->_inter->_variables)
|
||||
_vm->_draw->animateCursor(4);
|
||||
|
||||
if (skipPlay != -1) {
|
||||
_vm->_inter->initControlVars(1);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
_vm->_draw->_fontToSprite[i].sprite = -1;
|
||||
_vm->_draw->_fontToSprite[i].base = -1;
|
||||
_vm->_draw->_fontToSprite[i].width = -1;
|
||||
_vm->_draw->_fontToSprite[i].height = -1;
|
||||
}
|
||||
|
||||
_vm->_mult->initAll();
|
||||
_vm->_mult->zeroMultData();
|
||||
|
||||
_vm->_draw->_spritesArray[20] = _vm->_draw->_frontSurface;
|
||||
_vm->_draw->_spritesArray[21] = _vm->_draw->_backSurface;
|
||||
_vm->_draw->_cursorSpritesBack = _vm->_draw->_cursorSprites;
|
||||
} else
|
||||
_vm->_inter->initControlVars(0);
|
||||
|
||||
_vm->_draw->_cursorHotspotXVar = -1;
|
||||
_totToLoad[0] = 0;
|
||||
|
||||
if ((_curTotFile[0] == 0) && (!_script->isLoaded()))
|
||||
break;
|
||||
|
||||
if (skipPlay == -2) {
|
||||
_vm->_vidPlayer->primaryClose();
|
||||
skipPlay = 0;
|
||||
}
|
||||
|
||||
if (!_script->load(_curTotFile)) {
|
||||
_vm->_draw->blitCursor();
|
||||
_vm->_inter->_terminate = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
_resources->load(_curTotFile);
|
||||
|
||||
_vm->_global->_inter_animDataSize = _script->getAnimDataSize();
|
||||
if (!_vm->_inter->_variables)
|
||||
_vm->_inter->allocateVars(_script->getVariablesCount() & 0xFFFF);
|
||||
|
||||
_script->seek(_script->getFunctionOffset(TOTFile::kFunctionStart));
|
||||
|
||||
_vm->_inter->renewTimeInVars();
|
||||
|
||||
WRITE_VAR(13, _vm->_global->_useMouse);
|
||||
WRITE_VAR(14, _vm->_global->_soundFlags);
|
||||
WRITE_VAR(15, _vm->_global->_fakeVideoMode);
|
||||
WRITE_VAR(16, _vm->_global->_language);
|
||||
|
||||
_vm->_inter->callSub(2);
|
||||
|
||||
if (_totToLoad[0] != 0)
|
||||
_vm->_inter->_terminate = 0;
|
||||
|
||||
_vm->_draw->blitInvalidated();
|
||||
|
||||
_script->unload();
|
||||
|
||||
_resources->unload();
|
||||
|
||||
for (int i = 0; i < *_vm->_scenery->_pCaptureCounter; i++)
|
||||
capturePop(0);
|
||||
|
||||
if (skipPlay != -1) {
|
||||
_vm->_goblin->freeObjects();
|
||||
|
||||
_vm->_sound->blasterStop(0);
|
||||
|
||||
for (int i = 0; i < Sound::kSoundsCount; i++) {
|
||||
SoundDesc *sound = _vm->_sound->sampleGetBySlot(i);
|
||||
|
||||
if (sound &&
|
||||
((sound->getType() == SOUND_SND) || (sound->getType() == SOUND_WAV)))
|
||||
_vm->_sound->sampleFree(sound);
|
||||
}
|
||||
}
|
||||
|
||||
if (_totToLoad[0] == 0)
|
||||
break;
|
||||
|
||||
strcpy(_curTotFile, _totToLoad);
|
||||
}
|
||||
} else {
|
||||
_vm->_inter->initControlVars(0);
|
||||
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
|
||||
_script->seek(_script->getFunctionOffset(skipPlay + 1));
|
||||
|
||||
_menuLevel++;
|
||||
_vm->_inter->callSub(2);
|
||||
_menuLevel--;
|
||||
|
||||
if (_vm->_inter->_terminate != 0)
|
||||
_vm->_inter->_terminate = 2;
|
||||
}
|
||||
|
||||
strcpy(_curTotFile, savedTotName);
|
||||
|
||||
_vm->_inter->_nestLevel = oldNestLevel;
|
||||
_vm->_inter->_breakFromLevel = oldBreakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
|
||||
|
||||
_script->pop();
|
||||
}
|
||||
|
||||
void Game::capturePush(int16 left, int16 top, int16 width, int16 height) {
|
||||
int16 right;
|
||||
|
||||
@ -394,7 +526,7 @@ int16 Game::checkKeys(int16 *pMouseX, int16 *pMouseY,
|
||||
return _vm->_util->checkKey();
|
||||
}
|
||||
|
||||
void Game::start(void) {
|
||||
void Game::start() {
|
||||
prepareStart();
|
||||
playTot(-2);
|
||||
|
||||
|
@ -94,6 +94,8 @@ public:
|
||||
|
||||
virtual void prepareStart();
|
||||
|
||||
void playTot(int16 skipPlay);
|
||||
|
||||
void capturePush(int16 left, int16 top, int16 width, int16 height);
|
||||
void capturePop(char doDraw);
|
||||
|
||||
@ -103,13 +105,11 @@ public:
|
||||
|
||||
int16 checkKeys(int16 *pMousex = 0, int16 *pMouseY = 0,
|
||||
MouseButtons *pButtons = 0, char handleMouse = 0);
|
||||
void start(void);
|
||||
void start();
|
||||
|
||||
void totSub(int8 flags, const char *newTotFile);
|
||||
void switchTotSub(int16 index, int16 skipPlay);
|
||||
|
||||
virtual void playTot(int16 skipPlay) = 0;
|
||||
|
||||
protected:
|
||||
uint32 _menuLevel;
|
||||
|
||||
@ -133,16 +133,12 @@ class Game_v1 : public Game {
|
||||
public:
|
||||
Game_v1(GobEngine *vm);
|
||||
virtual ~Game_v1() {}
|
||||
|
||||
virtual void playTot(int16 skipPlay);
|
||||
};
|
||||
|
||||
class Game_v2 : public Game_v1 {
|
||||
public:
|
||||
Game_v2(GobEngine *vm);
|
||||
virtual ~Game_v2() {}
|
||||
|
||||
virtual void playTot(int16 skipPlay);
|
||||
};
|
||||
|
||||
class Game_v6 : public Game_v2 {
|
||||
@ -150,7 +146,7 @@ public:
|
||||
Game_v6(GobEngine *vm);
|
||||
virtual ~Game_v6() {}
|
||||
|
||||
virtual void prepareStart(void);
|
||||
virtual void prepareStart();
|
||||
};
|
||||
|
||||
} // End of namespace Gob
|
||||
|
@ -46,118 +46,4 @@ namespace Gob {
|
||||
Game_v1::Game_v1(GobEngine *vm) : Game(vm) {
|
||||
}
|
||||
|
||||
void Game_v1::playTot(int16 skipPlay) {
|
||||
int16 _captureCounter;
|
||||
int16 breakFrom;
|
||||
int16 nestLevel;
|
||||
|
||||
int16 *oldNestLevel = _vm->_inter->_nestLevel;
|
||||
int16 *oldBreakFrom = _vm->_inter->_breakFromLevel;
|
||||
int16 *oldCaptureCounter = _vm->_scenery->_pCaptureCounter;
|
||||
|
||||
_script->push();
|
||||
|
||||
_vm->_inter->_nestLevel = &nestLevel;
|
||||
_vm->_inter->_breakFromLevel = &breakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = &_captureCounter;
|
||||
|
||||
char savedTotName[20];
|
||||
strcpy(savedTotName, _curTotFile);
|
||||
|
||||
if (skipPlay <= 0) {
|
||||
while (!_vm->shouldQuit()) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
_vm->_draw->_fontToSprite[i].sprite = -1;
|
||||
_vm->_draw->_fontToSprite[i].base = -1;
|
||||
_vm->_draw->_fontToSprite[i].width = -1;
|
||||
_vm->_draw->_fontToSprite[i].height = -1;
|
||||
}
|
||||
|
||||
if ((_vm->getPlatform() == Common::kPlatformMacintosh)||
|
||||
(_vm->getPlatform() == Common::kPlatformWindows))
|
||||
_vm->_sound->adlibStop();
|
||||
else
|
||||
_vm->_sound->cdStop();
|
||||
|
||||
_vm->_draw->animateCursor(4);
|
||||
_vm->_inter->initControlVars(1);
|
||||
_vm->_mult->initAll();
|
||||
_vm->_mult->zeroMultData();
|
||||
|
||||
for (int i = 0; i < SPRITES_COUNT; i++)
|
||||
_vm->_draw->freeSprite(i);
|
||||
|
||||
_vm->_draw->_spritesArray[20] = _vm->_draw->_frontSurface;
|
||||
_vm->_draw->_spritesArray[21] = _vm->_draw->_backSurface;
|
||||
_vm->_draw->_spritesArray[23] = _vm->_draw->_cursorSprites;
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
freeSoundSlot(i);
|
||||
|
||||
_totToLoad[0] = 0;
|
||||
|
||||
if ((_curTotFile[0] == 0) && !_script->isLoaded())
|
||||
break;
|
||||
|
||||
if (!_script->load(_curTotFile)) {
|
||||
_vm->_draw->blitCursor();
|
||||
break;
|
||||
}
|
||||
|
||||
_resources->load(_curTotFile);
|
||||
|
||||
_vm->_global->_inter_animDataSize = _script->getAnimDataSize();
|
||||
if (!_vm->_inter->_variables)
|
||||
_vm->_inter->allocateVars(_script->getVariablesCount() & 0xFFFF);
|
||||
|
||||
_script->seek(_script->getFunctionOffset(TOTFile::kFunctionStart));
|
||||
|
||||
_vm->_inter->renewTimeInVars();
|
||||
|
||||
WRITE_VAR(13, _vm->_global->_useMouse);
|
||||
WRITE_VAR(14, _vm->_global->_soundFlags);
|
||||
WRITE_VAR(15, _vm->_global->_videoMode);
|
||||
WRITE_VAR(16, _vm->_global->_language);
|
||||
|
||||
_vm->_inter->callSub(2);
|
||||
_script->setFinished(false);
|
||||
|
||||
if (_totToLoad[0] != 0)
|
||||
_vm->_inter->_terminate = 0;
|
||||
|
||||
_vm->_draw->blitInvalidated();
|
||||
|
||||
_script->unload();
|
||||
|
||||
_resources->unload();
|
||||
|
||||
for (int i = 0; i < *_vm->_scenery->_pCaptureCounter; i++)
|
||||
capturePop(0);
|
||||
|
||||
_vm->_mult->checkFreeMult();
|
||||
_vm->_mult->freeAll();
|
||||
|
||||
for (int i = 0; i < SPRITES_COUNT; i++)
|
||||
_vm->_draw->freeSprite(i);
|
||||
_vm->_sound->blasterStop(0);
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
freeSoundSlot(i);
|
||||
|
||||
if (_totToLoad[0] == 0)
|
||||
break;
|
||||
|
||||
strcpy(_curTotFile, _totToLoad);
|
||||
}
|
||||
}
|
||||
|
||||
strcpy(_curTotFile, savedTotName);
|
||||
|
||||
_vm->_inter->_nestLevel = oldNestLevel;
|
||||
_vm->_inter->_breakFromLevel = oldBreakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
|
||||
|
||||
_script->pop();
|
||||
}
|
||||
|
||||
} // End of namespace Gob
|
||||
|
@ -38,7 +38,6 @@
|
||||
#include "gob/goblin.h"
|
||||
#include "gob/inter.h"
|
||||
#include "gob/mult.h"
|
||||
#include "gob/scenery.h"
|
||||
#include "gob/video.h"
|
||||
#include "gob/videoplayer.h"
|
||||
#include "gob/sound/sound.h"
|
||||
@ -48,135 +47,4 @@ namespace Gob {
|
||||
Game_v2::Game_v2(GobEngine *vm) : Game_v1(vm) {
|
||||
}
|
||||
|
||||
void Game_v2::playTot(int16 skipPlay) {
|
||||
char savedTotName[20];
|
||||
int16 *oldCaptureCounter;
|
||||
int16 *oldBreakFrom;
|
||||
int16 *oldNestLevel;
|
||||
int16 _captureCounter;
|
||||
int16 breakFrom;
|
||||
int16 nestLevel;
|
||||
|
||||
oldNestLevel = _vm->_inter->_nestLevel;
|
||||
oldBreakFrom = _vm->_inter->_breakFromLevel;
|
||||
oldCaptureCounter = _vm->_scenery->_pCaptureCounter;
|
||||
|
||||
_script->push();
|
||||
|
||||
_vm->_inter->_nestLevel = &nestLevel;
|
||||
_vm->_inter->_breakFromLevel = &breakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = &_captureCounter;
|
||||
strcpy(savedTotName, _curTotFile);
|
||||
|
||||
if (skipPlay <= 0) {
|
||||
while (!_vm->shouldQuit()) {
|
||||
if (_vm->_inter->_variables)
|
||||
_vm->_draw->animateCursor(4);
|
||||
|
||||
if (skipPlay != -1) {
|
||||
_vm->_inter->initControlVars(1);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
_vm->_draw->_fontToSprite[i].sprite = -1;
|
||||
_vm->_draw->_fontToSprite[i].base = -1;
|
||||
_vm->_draw->_fontToSprite[i].width = -1;
|
||||
_vm->_draw->_fontToSprite[i].height = -1;
|
||||
}
|
||||
|
||||
_vm->_mult->initAll();
|
||||
_vm->_mult->zeroMultData();
|
||||
|
||||
_vm->_draw->_spritesArray[20] = _vm->_draw->_frontSurface;
|
||||
_vm->_draw->_spritesArray[21] = _vm->_draw->_backSurface;
|
||||
_vm->_draw->_cursorSpritesBack = _vm->_draw->_cursorSprites;
|
||||
} else
|
||||
_vm->_inter->initControlVars(0);
|
||||
|
||||
_vm->_draw->_cursorHotspotXVar = -1;
|
||||
_totToLoad[0] = 0;
|
||||
|
||||
if ((_curTotFile[0] == 0) && (!_script->isLoaded()))
|
||||
break;
|
||||
|
||||
if (skipPlay == -2) {
|
||||
_vm->_vidPlayer->primaryClose();
|
||||
skipPlay = 0;
|
||||
}
|
||||
|
||||
if (!_script->load(_curTotFile)) {
|
||||
_vm->_draw->blitCursor();
|
||||
_vm->_inter->_terminate = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
_resources->load(_curTotFile);
|
||||
|
||||
_vm->_global->_inter_animDataSize = _script->getAnimDataSize();
|
||||
if (!_vm->_inter->_variables)
|
||||
_vm->_inter->allocateVars(_script->getVariablesCount() & 0xFFFF);
|
||||
|
||||
_script->seek(_script->getFunctionOffset(TOTFile::kFunctionStart));
|
||||
|
||||
_vm->_inter->renewTimeInVars();
|
||||
|
||||
WRITE_VAR(13, _vm->_global->_useMouse);
|
||||
WRITE_VAR(14, _vm->_global->_soundFlags);
|
||||
WRITE_VAR(15, _vm->_global->_fakeVideoMode);
|
||||
WRITE_VAR(16, _vm->_global->_language);
|
||||
|
||||
_vm->_inter->callSub(2);
|
||||
|
||||
if (_totToLoad[0] != 0)
|
||||
_vm->_inter->_terminate = 0;
|
||||
|
||||
_vm->_draw->blitInvalidated();
|
||||
|
||||
_script->unload();
|
||||
|
||||
_resources->unload();
|
||||
|
||||
for (int i = 0; i < *_vm->_scenery->_pCaptureCounter; i++)
|
||||
capturePop(0);
|
||||
|
||||
if (skipPlay != -1) {
|
||||
_vm->_goblin->freeObjects();
|
||||
|
||||
_vm->_sound->blasterStop(0);
|
||||
|
||||
for (int i = 0; i < Sound::kSoundsCount; i++) {
|
||||
SoundDesc *sound = _vm->_sound->sampleGetBySlot(i);
|
||||
|
||||
if (sound &&
|
||||
((sound->getType() == SOUND_SND) || (sound->getType() == SOUND_WAV)))
|
||||
_vm->_sound->sampleFree(sound);
|
||||
}
|
||||
}
|
||||
|
||||
if (_totToLoad[0] == 0)
|
||||
break;
|
||||
|
||||
strcpy(_curTotFile, _totToLoad);
|
||||
}
|
||||
} else {
|
||||
_vm->_inter->initControlVars(0);
|
||||
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
|
||||
_script->seek(_script->getFunctionOffset(skipPlay + 1));
|
||||
|
||||
_menuLevel++;
|
||||
_vm->_inter->callSub(2);
|
||||
_menuLevel--;
|
||||
|
||||
if (_vm->_inter->_terminate != 0)
|
||||
_vm->_inter->_terminate = 2;
|
||||
}
|
||||
|
||||
strcpy(_curTotFile, savedTotName);
|
||||
|
||||
_vm->_inter->_nestLevel = oldNestLevel;
|
||||
_vm->_inter->_breakFromLevel = oldBreakFrom;
|
||||
_vm->_scenery->_pCaptureCounter = oldCaptureCounter;
|
||||
|
||||
_script->pop();
|
||||
}
|
||||
|
||||
} // End of namespace Gob
|
||||
|
@ -42,7 +42,7 @@ namespace Gob {
|
||||
Game_v6::Game_v6(GobEngine *vm) : Game_v2(vm) {
|
||||
}
|
||||
|
||||
void Game_v6::prepareStart(void) {
|
||||
void Game_v6::prepareStart() {
|
||||
_noCd = false;
|
||||
|
||||
if (Common::File::exists("cd1.itk") && Common::File::exists("cd2.itk") &&
|
||||
|
Loading…
x
Reference in New Issue
Block a user