diff options
Diffstat (limited to 'engines/dm/dungeonman.cpp')
| -rw-r--r-- | engines/dm/dungeonman.cpp | 48 | 
1 files changed, 46 insertions, 2 deletions
| diff --git a/engines/dm/dungeonman.cpp b/engines/dm/dungeonman.cpp index 9ec9830b15..fa1ec5cab5 100644 --- a/engines/dm/dungeonman.cpp +++ b/engines/dm/dungeonman.cpp @@ -3,7 +3,8 @@  #include "dungeonman.h" -using namespace DM; + +namespace DM {  uint16 gJunkInfo[53] = { // @ G0241_auc_Graphic559_JunkInfo  	1,   /* COMPASS */ @@ -529,9 +530,10 @@ void DungeonMan::loadDungeonFile() {  				_dunData.thingsData[thingType][i][4] = dunDataStream.readUint16BE();  			}  		} else { -			for (uint16 i = 0; i < thingCount; ++i) +			for (uint16 i = 0; i < thingCount; ++i) {  				for (uint16 j = 0; j < thingStoreWordCount; ++j)  					_dunData.thingsData[thingType][i][j] = dunDataStream.readUint16BE(); +			}  		}  		if (_messages.newGame) { @@ -993,3 +995,45 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {  	}  	*destString = ((type == kTextTypeInscription) ? 0x81 : '\0');  } + + +uint16 DungeonMan::getObjectWeight(Thing thing) { +	if (thing == Thing::thingNone) +		return 0; +	switch (thing.getType()) { +	case kWeaponThingType: +		return gWeaponInfo[Weapon(getThingData(thing)).getType()]._weight; +	case kArmourThingType: +		return gArmourInfo[Armour(getThingData(thing)).getType()]._weight; +	case kJunkThingType: { +		Junk junk = getThingData(thing); +		uint16 weight = gJunkInfo[junk.getType()]; +		if (junk.getType() == kJunkTypeWaterskin) +			weight += junk.getChargeCount() * 2; +		return weight; +	} +	case kContainerThingType: { +		uint16 weight = 50; +		Container container = getThingData(thing); +		Thing slotThing = container.getNextContainedThing(); +		while (slotThing != Thing::thingEndOfList) { +			weight += getObjectWeight(slotThing); +			slotThing = getNextThing(slotThing); +		} +		return weight; +	} +	case kPotionThingType: +		if (Junk(getThingData(thing)).getType() == kPotionTypeEmptyFlask) { +			return 1; +		} else { +			return 3; +		} +	case kScrollThingType: +		return 1; +	} + +	assert(false); // this should never be taken +	return 0; // dummy +} + +}
\ No newline at end of file | 
