aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Sandulenko2016-08-28 11:11:27 +0200
committerEugene Sandulenko2016-08-28 11:43:25 +0200
commit0f0fee3add3dcff4740bb3c68765c109331573bc (patch)
tree84adb4e47bc03598c01b4d7e437a697822a2cc0e
parentbcd5df5c6e94a1d6c9cfb97f27a0306b8ff54e60 (diff)
downloadscummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.tar.gz
scummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.tar.bz2
scummvm-rg350-0f0fee3add3dcff4740bb3c68765c109331573bc.zip
FULLPIPE: Implement Inventory2::removeItem()
-rw-r--r--engines/fullpipe/fullpipe.cpp1
-rw-r--r--engines/fullpipe/fullpipe.h3
-rw-r--r--engines/fullpipe/inventory.cpp28
3 files changed, 29 insertions, 3 deletions
diff --git a/engines/fullpipe/fullpipe.cpp b/engines/fullpipe/fullpipe.cpp
index 22f2050d16..b41d0ed894 100644
--- a/engines/fullpipe/fullpipe.cpp
+++ b/engines/fullpipe/fullpipe.cpp
@@ -55,6 +55,7 @@ FullpipeEngine::FullpipeEngine(OSystem *syst, const ADGameDescription *gameDesc)
DebugMan.addDebugChannel(kDebugBehavior, "behavior", "Behavior");
DebugMan.addDebugChannel(kDebugMemory, "memory", "Memory management");
DebugMan.addDebugChannel(kDebugEvents, "events", "Event handling");
+ DebugMan.addDebugChannel(kDebugInventory, "inventory", "Inventory");
// Setup mixer
if (!_mixer->isReady()) {
diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h
index 2012d7a344..e4e2e477d5 100644
--- a/engines/fullpipe/fullpipe.h
+++ b/engines/fullpipe/fullpipe.h
@@ -55,7 +55,8 @@ enum {
kDebugAnimation = 1 << 3,
kDebugMemory = 1 << 4,
kDebugEvents = 1 << 5,
- kDebugBehavior = 1 << 6
+ kDebugBehavior = 1 << 6,
+ kDebugInventory = 1 << 7
};
class BehaviorManager;
diff --git a/engines/fullpipe/inventory.cpp b/engines/fullpipe/inventory.cpp
index aa229d55d7..70ad19c8ea 100644
--- a/engines/fullpipe/inventory.cpp
+++ b/engines/fullpipe/inventory.cpp
@@ -35,7 +35,7 @@ Inventory::~Inventory() {
}
bool Inventory::load(MfcArchive &file) {
- debugC(5, kDebugLoading, "Inventory::load()");
+ debugC(5, kDebugLoading | kDebugInventory, "Inventory::load()");
_sceneId = file.readUint16LE();
int numInvs = file.readUint32LE();
@@ -119,12 +119,36 @@ void Inventory2::addItem2(StaticANIObject *obj) {
}
void Inventory2::removeItem(int itemId, int count) {
- warning("STUB: Inventory2::removeItem(%d, %d)", itemId, count);
+ debugC(2, kDebugInventory, "Inventory2::removeItem(%d, %d)", itemId, count);
+
+ while (count) {
+ int i;
+ for (i = _inventoryItems.size() - 1; i >= 0; i--) {
+ if (_inventoryItems[i]->itemId == itemId) {
+ if (_selectedId == itemId)
+ unselectItem(false);
+
+ if (_inventoryItems[i]->count > count) {
+ _inventoryItems[i]->count -= count;
+ } else {
+ count -= _inventoryItems[i]->count;
+ _inventoryItems.remove_at(i);
+ }
+
+ if (getCountItemsWithId(itemId) < 0)
+ getInventoryPoolItemFieldCById(itemId);
+
+ break;
+ }
+ }
+ }
}
void Inventory2::removeItem2(Scene *sceneObj, int itemId, int x, int y, int priority) {
int idx = getInventoryItemIndexById(itemId);
+ debugC(2, kDebugInventory, "removeItem2(*, %d, %d, %d, %d)", itemId, x, y, priority);
+
if (idx >= 0) {
if (_inventoryItems[idx]->count) {
removeItem(itemId, 1);