diff options
| -rw-r--r-- | engines/adl/adl.cpp | 52 | ||||
| -rw-r--r-- | engines/adl/adl.h | 3 | ||||
| -rw-r--r-- | engines/adl/adl_v2.cpp | 6 | ||||
| -rw-r--r-- | engines/adl/hires1.cpp | 4 | ||||
| -rw-r--r-- | engines/adl/hires2.cpp | 4 | 
5 files changed, 41 insertions, 28 deletions
diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp index 5bcf1bcc54..038d4ec10a 100644 --- a/engines/adl/adl.cpp +++ b/engines/adl/adl.cpp @@ -379,7 +379,7 @@ void AdlEngine::drawPic(byte pic, Common::Point pos) const {  }  void AdlEngine::drawItems() const { -	Common::Array<Item>::const_iterator item; +	Common::List<Item>::const_iterator item;  	uint dropped = 0; @@ -435,17 +435,23 @@ Room &AdlEngine::getCurRoom() {  }  const Item &AdlEngine::getItem(uint i) const { -	if (i < 1 || i > _state.items.size()) -		error("Item %i out of range [1, %i]", i, _state.items.size()); +	Common::List<Item>::const_iterator item; -	return _state.items[i - 1]; +	for (item = _state.items.begin(); item != _state.items.end(); ++item) +		if (item->id == i) +			return *item; + +	error("Item %i not found", i);  }  Item &AdlEngine::getItem(uint i) { -	if (i < 1 || i > _state.items.size()) -		error("Item %i out of range [1, %i]", i, _state.items.size()); +	Common::List<Item>::iterator item; + +	for (item = _state.items.begin(); item != _state.items.end(); ++item) +		if (item->id == i) +			return *item; -	return _state.items[i - 1]; +	error("Item %i not found", i);  }  byte AdlEngine::getVar(uint i) const { @@ -463,7 +469,7 @@ void AdlEngine::setVar(uint i, byte value) {  }  void AdlEngine::takeItem(byte noun) { -	Common::Array<Item>::iterator item; +	Common::List<Item>::iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item) {  		if (item->noun != noun || item->room != _state.room) @@ -493,7 +499,7 @@ void AdlEngine::takeItem(byte noun) {  }  void AdlEngine::dropItem(byte noun) { -	Common::Array<Item>::iterator item; +	Common::List<Item>::iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item) {  		if (item->noun != noun || item->room != IDI_ANY) @@ -645,12 +651,13 @@ Common::Error AdlEngine::loadGameState(int slot) {  	if (size != _state.items.size())  		error("Item count mismatch (expected %i; found %i)", _state.items.size(), size); -	for (uint i = 0; i < size; ++i) { -		_state.items[i].room = inFile->readByte(); -		_state.items[i].picture = inFile->readByte(); -		_state.items[i].position.x = inFile->readByte(); -		_state.items[i].position.y = inFile->readByte(); -		_state.items[i].state = inFile->readByte(); +	Common::List<Item>::iterator item; +	for (item = _state.items.begin(); item != _state.items.end(); ++item) { +		item->room = inFile->readByte(); +		item->picture = inFile->readByte(); +		item->position.x = inFile->readByte(); +		item->position.y = inFile->readByte(); +		item->state = inFile->readByte();  	}  	size = inFile->readUint32BE(); @@ -724,12 +731,13 @@ Common::Error AdlEngine::saveGameState(int slot, const Common::String &desc) {  	}  	outFile->writeUint32BE(_state.items.size()); -	for (uint i = 0; i < _state.items.size(); ++i) { -		outFile->writeByte(_state.items[i].room); -		outFile->writeByte(_state.items[i].picture); -		outFile->writeByte(_state.items[i].position.x); -		outFile->writeByte(_state.items[i].position.y); -		outFile->writeByte(_state.items[i].state); +	Common::List<Item>::const_iterator item; +	for (item = _state.items.begin(); item != _state.items.end(); ++item) { +		outFile->writeByte(item->room); +		outFile->writeByte(item->picture); +		outFile->writeByte(item->position.x); +		outFile->writeByte(item->position.y); +		outFile->writeByte(item->state);  	}  	outFile->writeUint32BE(_state.vars.size()); @@ -982,7 +990,7 @@ int AdlEngine::o1_varSet(ScriptEnv &e) {  int AdlEngine::o1_listInv(ScriptEnv &e) {  	OP_DEBUG_0("\tLIST_INVENTORY()"); -	Common::Array<Item>::const_iterator item; +	Common::List<Item>::const_iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item)  		if (item->room == IDI_ANY) diff --git a/engines/adl/adl.h b/engines/adl/adl.h index 43d3187d47..42d6667cab 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -139,6 +139,7 @@ enum {  };  struct Item { +	byte id;  	byte noun;  	byte room;  	byte picture; @@ -157,7 +158,7 @@ struct Time {  struct State {  	Common::Array<Room> rooms; -	Common::Array<Item> items; +	Common::List<Item> items;  	Common::Array<byte> vars;  	byte room; diff --git a/engines/adl/adl_v2.cpp b/engines/adl/adl_v2.cpp index 8a826e577a..cc38bebe3f 100644 --- a/engines/adl/adl_v2.cpp +++ b/engines/adl/adl_v2.cpp @@ -213,7 +213,7 @@ int AdlEngine_v2::o2_isRandomGT(ScriptEnv &e) {  }  int AdlEngine_v2::o2_isNounNotInRoom(ScriptEnv &e) { -	Common::Array<Item>::const_iterator item; +	Common::List<Item>::const_iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item)  		if (item->noun == e.getNoun() && (item->room == roomArg(e.arg(1)))) @@ -223,7 +223,7 @@ int AdlEngine_v2::o2_isNounNotInRoom(ScriptEnv &e) {  }  int AdlEngine_v2::o2_isCarryingSomething(ScriptEnv &e) { -	Common::Array<Item>::const_iterator item; +	Common::List<Item>::const_iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item)  		if (item->room == IDI_ANY) @@ -248,7 +248,7 @@ int AdlEngine_v2::o2_moveAllItems(ScriptEnv &e) {  	byte room1 = roomArg(e.arg(1));  	byte room2 = roomArg(e.arg(2)); -	Common::Array<Item>::iterator item; +	Common::List<Item>::iterator item;  	for (item = _state.items.begin(); item != _state.items.end(); ++item)  		if (item->room == room1) { diff --git a/engines/adl/hires1.cpp b/engines/adl/hires1.cpp index 005e56e38c..e0f7574918 100644 --- a/engines/adl/hires1.cpp +++ b/engines/adl/hires1.cpp @@ -233,8 +233,10 @@ void HiRes1Engine::initState() {  	// Load item data from executable  	_state.items.clear();  	stream->seek(IDI_HR1_OFS_ITEMS); -	while (stream->readByte() != 0xff) { +	byte id; +	while ((id = stream->readByte()) != 0xff) {  		Item item = { }; +		item.id = id;  		item.noun = stream->readByte();  		item.room = stream->readByte();  		item.picture = stream->readByte(); diff --git a/engines/adl/hires2.cpp b/engines/adl/hires2.cpp index 6e6692b02d..4ac8e88fa0 100644 --- a/engines/adl/hires2.cpp +++ b/engines/adl/hires2.cpp @@ -167,8 +167,10 @@ void HiRes2Engine::initState() {  	stream.reset(_disk.createReadStream(0x21, 0x0, 0x00, 2));  	_state.items.clear(); -	while (stream->readByte() != 0xff) { +	byte id; +	while ((id = stream->readByte()) != 0xff) {  		Item item = { }; +		item.id = id;  		item.noun = stream->readByte();  		item.room = stream->readByte();  		item.picture = stream->readByte();  | 
