diff options
Diffstat (limited to 'engines/parallaction/parallaction.cpp')
-rw-r--r-- | engines/parallaction/parallaction.cpp | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index ba97a43c6b..e0291c5a2a 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -86,8 +86,6 @@ char _forwardedAnimationNames[20][20]; uint16 _numForwards = 0; char _soundFile[20]; -byte _mouseHidden = 0; - uint32 _commandFlags = 0; uint16 _introSarcData3 = 200; uint16 _introSarcData2 = 1; @@ -107,7 +105,7 @@ Parallaction::Parallaction(OSystem *syst) : // FIXME _vm = this; - + _mouseHidden = false; Common::File::addDefaultDirectory( _gameDataPath ); @@ -126,27 +124,24 @@ Parallaction::Parallaction(OSystem *syst) : Parallaction::~Parallaction() { delete _debugger; - delete _soundMan; - delete _disk; delete _globalTable; - if (_objectsNames) - delete _objectsNames; - delete _callableNames; delete _commandsNames; delete _instructionNames; delete _zoneTypeNames; delete _zoneFlagNames; - if (_localFlagNames) - delete _localFlagNames; - - delete _gfx; + _animations.remove(&_char._ani); freeLocation(); + freeCharacter(); destroyInventory(); + + delete _gfx; + delete _soundMan; + delete _disk; } @@ -178,11 +173,14 @@ int Parallaction::init() { _baseTime = 0; - if (getPlatform() == Common::kPlatformPC) + if (getPlatform() == Common::kPlatformPC) { _disk = new DosDisk(this); - else { + } else { + if (getFeatures() & GF_DEMO) { + strcpy(_location._name, "fognedemo"); + } _disk = new AmigaDisk(this); - _disk->selectArchive("disk0"); + _disk->selectArchive((_vm->getFeatures() & GF_DEMO) ? "disk0" : "disk1"); } _engineFlags = 0; @@ -284,10 +282,11 @@ uint16 Parallaction::updateInput() { switch (e.type) { case Common::EVENT_KEYDOWN: - if (e.kbd.ascii == 'l') KeyDown = kEvLoadGame; - if (e.kbd.ascii == 's') KeyDown = kEvSaveGame; if (e.kbd.flags == Common::KBD_CTRL && e.kbd.keycode == 'd') _debugger->attach(); + if (getFeatures() & GF_DEMO) break; + if (e.kbd.keycode == Common::KEYCODE_l) KeyDown = kEvLoadGame; + if (e.kbd.keycode == Common::KEYCODE_s) KeyDown = kEvSaveGame; break; case Common::EVENT_LBUTTONDOWN: @@ -312,6 +311,7 @@ uint16 Parallaction::updateInput() { case Common::EVENT_QUIT: _engineFlags |= kEngineQuit; + g_system->quit(); break; default: @@ -378,8 +378,8 @@ void Parallaction::runGame() { _keyDown = updateInput(); debugC(3, kDebugInput, "runGame: input flags (%i, %i, %i, %i)", - _mouseHidden == 0, - (_engineFlags & kEngineMouse) == 0, + !_mouseHidden, + (_engineFlags & kEngineBlockInput) == 0, (_engineFlags & kEngineWalking) == 0, (_engineFlags & kEngineChangeLocation) == 0 ); @@ -390,7 +390,7 @@ void Parallaction::runGame() { // Skipping input processing when kEngineChangeLocation is set solves the issue. It's // noteworthy that the programmers added this very check in Big Red Adventure's engine, // so it should be ok here in Nippon Safes too. - if ((_mouseHidden == 0) && ((_engineFlags & kEngineMouse) == 0) && ((_engineFlags & kEngineWalking) == 0) && ((_engineFlags & kEngineChangeLocation) == 0)) { + if ((!_mouseHidden) && ((_engineFlags & kEngineBlockInput) == 0) && ((_engineFlags & kEngineWalking) == 0) && ((_engineFlags & kEngineChangeLocation) == 0)) { InputData *v8 = translateInput(); if (v8) processInput(v8); } @@ -508,14 +508,14 @@ void Parallaction::processInput(InputData *data) { case kEvSaveGame: _hoverZone = NULL; - changeCursor(kCursorArrow); saveGame(); + changeCursor(kCursorArrow); break; case kEvLoadGame: _hoverZone = NULL; - changeCursor(kCursorArrow); loadGame(); + changeCursor(kCursorArrow); break; } @@ -675,7 +675,10 @@ void Parallaction::waitTime(uint32 t) { } - +void Parallaction::showCursor(bool visible) { + _mouseHidden = !visible; + g_system->showMouse(visible); +} // changes the mouse pointer // index 0 means standard pointer (from pointer.cnv) @@ -756,7 +759,7 @@ void Parallaction::changeCharacter(const char *name) { // character for sanity before memory is freed freeCharacter(); - _disk->selectArchive((_vm->getPlatform() == Common::kPlatformPC) ? "disk1" : "disk0"); + _disk->selectArchive((_vm->getPlatform() == Common::kPlatformAmiga) ? "disk0" : "disk1"); _vm->_char._ani._cnv = _disk->loadFrames(fullName); if (!IS_DUMMY_CHARACTER(name)) { @@ -768,7 +771,7 @@ void Parallaction::changeCharacter(const char *name) { _soundMan->playCharacterMusic(name); - if ((getFeatures() & GF_DEMO) == 0) + if (!(getFeatures() & GF_DEMO)) parseLocation("common"); } } @@ -858,13 +861,13 @@ void jobWaitRemoveJob(void *parm, Job *j) { debugC(3, kDebugJobs, "jobWaitRemoveJob: count = %i", count); - _engineFlags |= kEngineMouse; + _engineFlags |= kEngineBlockInput; count++; if (count == 2) { count = 0; _vm->removeJob(arg); - _engineFlags &= ~kEngineMouse; + _engineFlags &= ~kEngineBlockInput; j->_finished = 1; } |