aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/agi/console.cpp9
-rw-r--r--engines/agi/console.h1
-rw-r--r--engines/agi/preagi_mickey.cpp55
-rw-r--r--engines/agi/preagi_mickey.h2
4 files changed, 44 insertions, 23 deletions
diff --git a/engines/agi/console.cpp b/engines/agi/console.cpp
index 538cd8c4ea..6548772f51 100644
--- a/engines/agi/console.cpp
+++ b/engines/agi/console.cpp
@@ -251,6 +251,7 @@ Mickey_Console::Mickey_Console(PreAgiEngine *vm, Mickey *mickey) : PreAGI_Consol
_mickey = mickey;
DCmd_Register("curRoom", WRAP_METHOD(Mickey_Console, Cmd_CurRoom));
+ DCmd_Register("gotoRoom", WRAP_METHOD(Mickey_Console, Cmd_GotoRoom));
DCmd_Register("drawPic", WRAP_METHOD(Mickey_Console, Cmd_DrawPic));
DCmd_Register("drawObj", WRAP_METHOD(Mickey_Console, Cmd_DrawObj));
}
@@ -260,6 +261,14 @@ bool Mickey_Console::Cmd_CurRoom(int argc, const char **argv) {
return true;
}
+bool Mickey_Console::Cmd_GotoRoom(int argc, const char **argv) {
+ if (argc != 2)
+ DebugPrintf("Usage: %s <Room number>\n", argv[0]);
+ else
+ _mickey->debugGotoRoom(atoi(argv[1]));
+ return true;
+}
+
bool Mickey_Console::Cmd_DrawPic(int argc, const char **argv) {
if (argc != 2)
DebugPrintf("Usage: %s <Picture number>\n", argv[0]);
diff --git a/engines/agi/console.h b/engines/agi/console.h
index 54ea898e37..c435a70188 100644
--- a/engines/agi/console.h
+++ b/engines/agi/console.h
@@ -103,6 +103,7 @@ private:
Mickey *_mickey;
bool Cmd_CurRoom(int argc, const char **argv);
+ bool Cmd_GotoRoom(int argc, const char **argv);
bool Cmd_DrawPic(int argc, const char **argv);
bool Cmd_DrawObj(int argc, const char **argv);
};
diff --git a/engines/agi/preagi_mickey.cpp b/engines/agi/preagi_mickey.cpp
index d3ef2b90c5..9ddf664e78 100644
--- a/engines/agi/preagi_mickey.cpp
+++ b/engines/agi/preagi_mickey.cpp
@@ -220,6 +220,32 @@ void Mickey::printDesc(int iRoom) {
free(buffer);
}
+bool Mickey::checkMenu() {
+ char *buffer = new char[sizeof(MSA_MENU)];
+ MSA_MENU menu;
+ int iSel0, iSel1;
+ MSA_DAT_HEADER hdr;
+ char szFile[256] = {0};
+ Common::File infile;
+
+ getDatFileName(_game.iRoom, szFile);
+ readDatHdr(szFile, &hdr);
+ if (!infile.open(szFile))
+ return false;
+ infile.seek(hdr.ofsRoom[_game.iRoom - 1] + IDI_MSA_OFS_DAT, SEEK_SET);
+ infile.read((uint8 *)buffer, sizeof(MSA_MENU));
+ infile.close();
+
+ memcpy(&menu, buffer, sizeof(MSA_MENU));
+ patchMenu(&menu);
+ memcpy(buffer, &menu, sizeof(MSA_MENU));
+
+ getMenuSel(buffer, &iSel0, &iSel1);
+ delete [] buffer;
+
+ return parse(menu.cmd[iSel0].data[iSel1], menu.arg[iSel0].data[iSel1]);
+}
+
void Mickey::drawMenu(MSA_MENU menu, int sel0, int sel1) {
int iWord;
int iRow;
@@ -2060,6 +2086,11 @@ void Mickey::debugCurRoom() {
}
}
+void Mickey::debugGotoRoom(int room) {
+ _game.iRoom = room;
+ drawRoom();
+}
+
Mickey::Mickey(PreAgiEngine *vm) : _vm(vm) {
_vm->_console = new Mickey_Console(_vm, this);
}
@@ -2119,13 +2150,7 @@ void Mickey::init() {
}
void Mickey::run() {
- char *buffer = new char[sizeof(MSA_MENU)];
- MSA_MENU menu;
- int iSel0, iSel1;
bool done;
- MSA_DAT_HEADER hdr;
- char szFile[256] = {0};
- Common::File infile;
// Game intro
intro();
@@ -2165,28 +2190,12 @@ void Mickey::run() {
_game.nAir = IDI_MSA_MAX_AIR_SUPPLY;
}
- // Read menu
- getDatFileName(_game.iRoom, szFile);
- readDatHdr(szFile, &hdr);
- if (!infile.open(szFile))
- return;
- infile.seek(hdr.ofsRoom[_game.iRoom - 1] + IDI_MSA_OFS_DAT, SEEK_SET);
- infile.read((uint8 *)buffer, sizeof(MSA_MENU));
- infile.close();
-
- memcpy(&menu, buffer, sizeof(MSA_MENU));
- patchMenu(&menu);
- memcpy(buffer, &menu, sizeof(MSA_MENU));
-
- getMenuSel(buffer, &iSel0, &iSel1);
- done = parse(menu.cmd[iSel0].data[iSel1], menu.arg[iSel0].data[iSel1]);
+ done = checkMenu();
}
_game.nFrame = 0;
}
- delete [] buffer;
-
gameOver();
}
diff --git a/engines/agi/preagi_mickey.h b/engines/agi/preagi_mickey.h
index de01d11f4c..350456b982 100644
--- a/engines/agi/preagi_mickey.h
+++ b/engines/agi/preagi_mickey.h
@@ -737,6 +737,7 @@ public:
void run();
void debugCurRoom();
+ void debugGotoRoom(int);
void drawPic(int);
void drawObj(ENUM_MSA_OBJECT, int, int);
@@ -757,6 +758,7 @@ protected:
void printExeStr(int);
void printExeMsg(int);
void printDesc(int);
+ bool checkMenu();
void drawMenu(MSA_MENU, int, int);
void getMouseMenuSelRow(MSA_MENU, int*, int*, int, int, int);
bool getMenuSelRow(MSA_MENU, int*, int*, int);