From 7ff7e0def4670fee3346c4b75aa1e79d2f684bb0 Mon Sep 17 00:00:00 2001 From: Walter van Niftrik Date: Wed, 16 Mar 2016 11:04:34 +0100 Subject: ADL: Add hires2 command loading --- engines/adl/hires2.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'engines/adl/hires2.cpp') diff --git a/engines/adl/hires2.cpp b/engines/adl/hires2.cpp index 226a8e33da..8b12746641 100644 --- a/engines/adl/hires2.cpp +++ b/engines/adl/hires2.cpp @@ -83,6 +83,13 @@ void HiRes2Engine::init() { _messageIds.itemNotHere = IDI_HR2_MSG_ITEM_NOT_HERE; _messageIds.thanksForPlaying = IDI_HR2_MSG_THANKS_FOR_PLAYING; + // Load commands from executable + f.seek(IDI_HR2_OFS_CMDS_1); + readCommands(f, _roomCommands); + + f.seek(IDI_HR2_OFS_CMDS_0); + // readCommands(f, _globalCommands); + f.seek(IDI_HR2_OFS_VERBS); loadWords(f, _verbs); @@ -91,6 +98,9 @@ void HiRes2Engine::init() { } void HiRes2Engine::initState() { + _state.vars.clear(); + _state.vars.resize(IDI_HR2_NUM_VARS); + Common::File f; openFile(f, IDS_HR2_DISK_IMAGE); @@ -119,7 +129,7 @@ void HiRes2Engine::loadRoom(byte roomNr) { uint offset = TSO(room.track, room.sector, room.offset); f.seek(offset); uint16 descOffset = f.readUint16LE(); - /* uint16 commandOffset =*/ f.readUint16LE(); + uint16 commandOffset = f.readUint16LE(); // There's no picture count. The original engine always checks at most // five pictures. We use the description offset to bound our search. @@ -134,7 +144,12 @@ void HiRes2Engine::loadRoom(byte roomNr) { f.readByte(); _roomData.pictures.push_back(pic); } + _roomData.description = readStringAt(f, offset + descOffset, 0xff); + + f.seek(offset + commandOffset); + + readCommands(f, _roomData.commands); } void HiRes2Engine::restartGame() { @@ -158,16 +173,23 @@ void HiRes2Engine::drawPic(byte pic, Common::Point pos) const { void HiRes2Engine::showRoom() { loadRoom(_state.room); - _linesPrinted = 0; drawPic(getCurRoom().curPicture, Common::Point()); _display->updateHiResScreen(); printString(_roomData.description); + _linesPrinted = 0; } void HiRes2Engine::printMessage(uint idx, bool wait) { printString(_messages[idx - 1]); } +void HiRes2Engine::checkInput(byte verb, byte noun) { + if (doOneCommand(_roomData.commands, verb, noun)) + return; + + AdlEngine::checkInput(verb, noun); +} + void HiRes2Engine::checkTextOverflow(char c) { if (c != APPLECHAR('\r')) return; -- cgit v1.2.3