[Scummvm-cvs-logs] scummvm master -> 444c6bd24a3b91a1b87e0a0377bd842344cadfb7

clone2727 clone2727 at gmail.com
Fri Apr 18 01:29:45 CEST 2014


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
444c6bd24a PEGASUS: Reset item state upon starting a new game


Commit: 444c6bd24a3b91a1b87e0a0377bd842344cadfb7
    https://github.com/scummvm/scummvm/commit/444c6bd24a3b91a1b87e0a0377bd842344cadfb7
Author: Matthew Hoops (clone2727 at gmail.com)
Date: 2014-04-17T19:29:06-04:00

Commit Message:
PEGASUS: Reset item state upon starting a new game

Changed paths:
    engines/pegasus/items/item.cpp
    engines/pegasus/items/item.h
    engines/pegasus/items/itemlist.cpp
    engines/pegasus/items/itemlist.h
    engines/pegasus/pegasus.cpp



diff --git a/engines/pegasus/items/item.cpp b/engines/pegasus/items/item.cpp
index 8089f2b..830d3f2 100644
--- a/engines/pegasus/items/item.cpp
+++ b/engines/pegasus/items/item.cpp
@@ -39,9 +39,9 @@
 namespace Pegasus {
 
 Item::Item(const ItemID id, const NeighborhoodID neighborhood, const RoomID room, const DirectionConstant direction) : IDObject(id) {
-	_itemNeighborhood = neighborhood;
-	_itemRoom = room;
-	_itemDirection = direction;
+	_originalNeighborhood = _itemNeighborhood = neighborhood;
+	_originalRoom = _itemRoom = room;
+	_originalDirection = _itemDirection = direction;
 	_itemWeight = 1;
 	_itemOwnerID = kNoActorID;
 	_itemState = 0;
@@ -131,6 +131,14 @@ Item::~Item() {
 	delete[] _itemExtras.entries;
 }
 
+void Item::reset() {
+	_itemNeighborhood = _originalNeighborhood;
+	_itemRoom = _originalRoom;
+	_itemDirection = _originalDirection;
+	_itemOwnerID = kNoActorID;
+	_itemState = 0;
+}
+
 void Item::writeToStream(Common::WriteStream *stream) {
 	stream->writeUint16BE(_itemNeighborhood);
 	stream->writeUint16BE(_itemRoom);
diff --git a/engines/pegasus/items/item.h b/engines/pegasus/items/item.h
index a1451b2..26cccf0 100644
--- a/engines/pegasus/items/item.h
+++ b/engines/pegasus/items/item.h
@@ -339,6 +339,9 @@ public:
 
 	void findItemExtra(const uint32 extraID, ItemExtraEntry &entry);
 
+	// Reset to its original state at the beginning of the game
+	void reset();
+
 protected:
 	NeighborhoodID _itemNeighborhood;
 	RoomID	_itemRoom;
@@ -347,6 +350,10 @@ protected:
 	WeightType _itemWeight;
 	ItemState _itemState;
 
+	NeighborhoodID _originalNeighborhood;
+	RoomID _originalRoom;
+	DirectionConstant _originalDirection;
+
 	JMPItemInfo _itemInfo;
 	ItemStateInfo _sharedAreaInfo;
 	ItemExtraInfo _itemExtras;
diff --git a/engines/pegasus/items/itemlist.cpp b/engines/pegasus/items/itemlist.cpp
index ff8cae5..4b58d9a 100644
--- a/engines/pegasus/items/itemlist.cpp
+++ b/engines/pegasus/items/itemlist.cpp
@@ -64,4 +64,9 @@ Item *ItemList::findItemByID(const ItemID id) {
 	return 0;
 }
 
+void ItemList::resetAllItems() {
+	for (ItemIterator it = begin(); it != end(); it++)
+		(*it)->reset();
+}
+
 } // End of namespace Pegasus
diff --git a/engines/pegasus/items/itemlist.h b/engines/pegasus/items/itemlist.h
index 9b59206..22bef2c 100644
--- a/engines/pegasus/items/itemlist.h
+++ b/engines/pegasus/items/itemlist.h
@@ -48,6 +48,7 @@ public:
 	virtual void readFromStream(Common::ReadStream *stream);
 
 	Item *findItemByID(const ItemID id);
+	void resetAllItems();
 };
 
 typedef ItemList::iterator ItemIterator;
diff --git a/engines/pegasus/pegasus.cpp b/engines/pegasus/pegasus.cpp
index 978cb24..2062fe6 100644
--- a/engines/pegasus/pegasus.cpp
+++ b/engines/pegasus/pegasus.cpp
@@ -1682,6 +1682,9 @@ void PegasusEngine::startNewGame() {
 	removeAllItemsFromInventory();
 	removeAllItemsFromBiochips();
 
+	// Properly reset all items to their original state
+	g_allItems.resetAllItems();
+
 	BiochipItem *biochip = (BiochipItem *)_allItems.findItemByID(kAIBiochip);
 	addItemToBiochips(biochip);
 






More information about the Scummvm-git-logs mailing list