aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/agi/preagi_mickey.cpp32
-rw-r--r--engines/agi/preagi_mickey.h1
2 files changed, 20 insertions, 13 deletions
diff --git a/engines/agi/preagi_mickey.cpp b/engines/agi/preagi_mickey.cpp
index edd1b12406..264c0ac8b0 100644
--- a/engines/agi/preagi_mickey.cpp
+++ b/engines/agi/preagi_mickey.cpp
@@ -216,8 +216,8 @@ void Mickey::printExeStr(int ofs) {
readExe(ofs, buffer, sizeof(buffer));
printStr((char *)buffer);
- //_vm->_gfx->doUpdate();
- //_vm->_system->updateScreen(); // TODO: this should go in the game's main loop
+ _vm->_gfx->doUpdate();
+ _vm->_system->updateScreen(); // TODO: this should go in the game's main loop
}
void Mickey::printExeMsg(int ofs) {
@@ -693,6 +693,14 @@ void Mickey::drawObj(ENUM_MSA_OBJECT iObj, int x0, int y0) {
if (iObj == IDI_MSA_OBJECT_CRYSTAL)
_vm->_picture->setPictureFlags(kPicFStep);
+ // HACK: attempting to draw the scale in Mickey's house causes a crash, so we don't draw it
+ if (iObj == IDI_MSA_OBJECT_SCALE)
+ return;
+
+ // HACK: attempting to draw the rock in Jupiter causes a crash, so we don't draw it
+ if (iObj == IDI_MSA_OBJECT_ROCK_1 || iObj == IDI_MSA_OBJECT_ROCK_2 || iObj == IDI_MSA_OBJECT_ROCK_3)
+ return;
+
_vm->_picture->setOffset(x0, y0);
_vm->_picture->decodePicture(buffer, size, false, IDI_MSA_PIC_WIDTH, IDI_MSA_PIC_HEIGHT);
_vm->_picture->setOffset(0, 0);
@@ -958,7 +966,7 @@ bool Mickey::loadGame() {
return false;
// load game
- sprintf(szFile, "%s.s%2d", _vm->getTargetName().c_str(), sel);
+ sprintf(szFile, "%s.s%02d", _vm->getTargetName().c_str(), sel);
if (!(infile = _vm->getSaveFileMan()->openForLoading(szFile))) {
printExeStr(IDO_MSA_CHECK_DISK_DRIVE);
if (_vm->getSelection(kSelAnyKey) == 0)
@@ -1004,7 +1012,7 @@ void Mickey::saveGame() {
return;
// save game
- sprintf(szFile, "%s.s%2d", _vm->getTargetName().c_str(), sel);
+ sprintf(szFile, "%s.s%02d", _vm->getTargetName().c_str(), sel);
if (!(outfile = _vm->getSaveFileMan()->openForSaving(szFile))) {
printExeStr(IDO_MSA_CHECK_DISK_DRIVE);
if (_vm->getSelection(kSelAnyKey) == 0)
@@ -1166,10 +1174,11 @@ void Mickey::gameOver() {
void Mickey::flipSwitch() {
if (game.fHasXtal || game.nXtals) {
- if (!game.fStoryShown) {
+ if (!game.fStoryShown)
printStory();
+
+ if (!game.fPlanetsInitialized)
randomize();
- }
// activate screen animation
game.fAnimXL30 = true;
@@ -1260,7 +1269,7 @@ void Mickey::randomize() {
} else {
done = false;
while (!done) {
- iPlanet = _vm->rnd(IDI_MSA_MAX_PLANET);
+ iPlanet = _vm->rnd(IDI_MSA_MAX_PLANET - 2); // Earth (planet 0) is excluded
done = true;
for (int j = 0; j < IDI_MSA_MAX_PLANET; j++) {
if (game.iPlanetXtal[j] == iPlanet) {
@@ -1273,14 +1282,11 @@ void Mickey::randomize() {
game.iPlanetXtal[i] = iPlanet;
- done = false;
- while (!done) {
- iHint = _vm->rnd(5);
- done = true;
- }
-
+ iHint = _vm->rnd(5) - 1; // clues are 0-4
game.iClue[i] = IDO_MSA_NEXT_PIECE[iPlanet][iHint];
}
+
+ game.fPlanetsInitialized = true;
}
void Mickey::flashScreen() {
diff --git a/engines/agi/preagi_mickey.h b/engines/agi/preagi_mickey.h
index 3b45fb8630..24a07d376e 100644
--- a/engines/agi/preagi_mickey.h
+++ b/engines/agi/preagi_mickey.h
@@ -708,6 +708,7 @@ struct MSA_GAME {
bool fShipDoorOpen;
bool fFlying;
bool fStoryShown;
+ bool fPlanetsInitialized;
bool fTempleDoorOpen;
bool fItem[IDI_MSA_MAX_ITEM];