diff options
| author | Walter van Niftrik | 2016-03-15 23:18:43 +0100 | 
|---|---|---|
| committer | Walter van Niftrik | 2016-06-06 20:35:49 +0200 | 
| commit | 0a6b7fb6a6414caa4d8654a75e07b6a33ef6cce3 (patch) | |
| tree | 968f64649194a0ed437aaec36927cb1fd306a3a4 | |
| parent | 1e5fff86c875958408f3a5532451139626a4dc56 (diff) | |
| download | scummvm-rg350-0a6b7fb6a6414caa4d8654a75e07b6a33ef6cce3.tar.gz scummvm-rg350-0a6b7fb6a6414caa4d8654a75e07b6a33ef6cce3.tar.bz2 scummvm-rg350-0a6b7fb6a6414caa4d8654a75e07b6a33ef6cce3.zip  | |
ADL: Add loading of room picture index for hires2
| -rw-r--r-- | engines/adl/hires2.cpp | 44 | ||||
| -rw-r--r-- | engines/adl/hires2.h | 3 | 
2 files changed, 34 insertions, 13 deletions
diff --git a/engines/adl/hires2.cpp b/engines/adl/hires2.cpp index f44dfc4a2b..226a8e33da 100644 --- a/engines/adl/hires2.cpp +++ b/engines/adl/hires2.cpp @@ -110,17 +110,31 @@ void HiRes2Engine::initState() {  		f.readByte(); // always 1, possibly disk?  		_state.rooms.push_back(room);  	} - -	loadRoom(_state.room);  } -void HiRes2Engine::loadRoom(uint i) { +void HiRes2Engine::loadRoom(byte roomNr) {  	Common::File f;  	openFile(f, IDS_HR2_DISK_IMAGE); -	Room &room = getRoom(i); +	Room &room = getRoom(roomNr);  	uint offset = TSO(room.track, room.sector, room.offset);  	f.seek(offset); -	_roomData.description = readStringAt(f, offset + f.readByte(), 0xff); +	uint16 descOffset = 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. +	uint16 picCount = (descOffset - 4) / 5; + +	for (uint i = 0; i < picCount; ++i) { +		Picture2 pic; +		pic.nr = f.readByte(); +		pic.track = f.readByte(); +		pic.sector = f.readByte(); +		pic.offset = f.readByte(); +		f.readByte(); +		_roomData.pictures.push_back(pic); +	} +	_roomData.description = readStringAt(f, offset + descOffset, 0xff);  }  void HiRes2Engine::restartGame() { @@ -128,18 +142,24 @@ void HiRes2Engine::restartGame() {  }  void HiRes2Engine::drawPic(byte pic, Common::Point pos) const { -	// Temp hack to show a pic - -	Common::File f; -	openFile(f, IDS_HR2_DISK_IMAGE); -	f.seek(0x1000); +	Common::Array<Picture2>::const_iterator roomPic; + +	for (roomPic = _roomData.pictures.begin(); roomPic != _roomData.pictures.end(); ++roomPic) { +		if (roomPic->nr == pic) { +			Common::File f; +			openFile(f, IDS_HR2_DISK_IMAGE); +			f.seek(TSO(roomPic->track, roomPic->sector, roomPic->offset)); +			_graphics->drawPic(f, pos, 0); +		} +	} -	_graphics->drawPic(f, pos, 0); +	// Check global pic list here  }  void HiRes2Engine::showRoom() { +	loadRoom(_state.room);  	_linesPrinted = 0; -	drawPic(0, Common::Point()); +	drawPic(getCurRoom().curPicture, Common::Point());  	_display->updateHiResScreen();  	printString(_roomData.description);  } diff --git a/engines/adl/hires2.h b/engines/adl/hires2.h index d88e43a5a6..58831c497d 100644 --- a/engines/adl/hires2.h +++ b/engines/adl/hires2.h @@ -64,6 +64,7 @@ namespace Adl {  #define IDI_HR2_OFS_STR_PRESS_RETURN  TSO(0x1a, 0x8, 0x5f)  struct Picture2 { +	byte nr;  	byte track;  	byte sector;  	byte offset; @@ -89,7 +90,7 @@ private:  	void showRoom();  	void printMessage(uint idx, bool wait); -	void loadRoom(uint i); +	void loadRoom(byte roomNr);  	void checkTextOverflow(char c);  	void printString(const Common::String &str);  | 
