aboutsummaryrefslogtreecommitdiff
path: root/engines/parallaction/parallaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/parallaction/parallaction.cpp')
-rw-r--r--engines/parallaction/parallaction.cpp57
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;
}