The "room" command can now set the current room number, too (more straightforward than changing global var 13)

svn-id: r46925
This commit is contained in:
Filippos Karapetis 2010-01-03 15:08:26 +00:00
parent 454fb24c85
commit 2f23eb99ee
3 changed files with 18 additions and 2 deletions

View file

@ -327,7 +327,7 @@ bool Console::cmdHelp(int argc, const char **argv) {
DebugPrintf(" list_saves - List all saved games including filenames\n");
DebugPrintf(" restart_game - Restarts the game\n");
DebugPrintf(" version - Shows the resource and interpreter versions\n");
DebugPrintf(" room - Shows the current room number\n");
DebugPrintf(" room - Gets or sets the current room number\n");
DebugPrintf(" exit - Exits the game\n");
DebugPrintf("\n");
DebugPrintf("Screen:\n");
@ -630,7 +630,18 @@ bool Console::cmdDissectScript(int argc, const char **argv) {
}
bool Console::cmdRoomNumber(int argc, const char **argv) {
// The room number is stored in global var 13
// The same functionality is provided by "vmvars g 13" (but this one is more straighforward)
if (argc != 2) {
DebugPrintf("Current room number is %d\n", _vm->_gamestate->currentRoomNumber());
DebugPrintf("Calling this command with the room number (in decimal or hexadecimal) changes the room\n");
} else {
Common::String roomNumberStr = argv[1];
int roomNumber = strtol(roomNumberStr.c_str(), NULL, roomNumberStr.hasSuffix("h") ? 16 : 10);
_vm->getEngineState()->setRoomNumber(roomNumber);
DebugPrintf("Room number changed to %d (%x in hex)\n", roomNumber, roomNumber);
}
return true;
}

View file

@ -120,6 +120,10 @@ uint16 EngineState::currentRoomNumber() const {
return script_000->_localsBlock->_locals[13].toUint16();
}
void EngineState::setRoomNumber(uint16 roomNumber) {
script_000->_localsBlock->_locals[13] = make_reg(0, roomNumber);
}
kLanguage EngineState::charToLanguage(const char c) const {
switch (c) {
case 'F':

View file

@ -226,6 +226,7 @@ public:
Script *script_000; /**< script 000, e.g. for globals */
uint16 currentRoomNumber() const;
void setRoomNumber(uint16 roomNumber);
/**
* Processes a multilanguage string based on the current language settings and