aboutsummaryrefslogtreecommitdiff
path: root/engines/lastexpress/game/action.cpp
diff options
context:
space:
mode:
authorJulien Templier2010-10-19 20:53:43 +0000
committerJulien Templier2010-10-19 20:53:43 +0000
commit3feab382bc5c97656580254c235a5573e24e0d6f (patch)
tree0fa6d1b0b6f1e389a089dcfc512c090f2961b24c /engines/lastexpress/game/action.cpp
parentf3becaddf1d865e44f13aadbb8c71952a73f2268 (diff)
downloadscummvm-rg350-3feab382bc5c97656580254c235a5573e24e0d6f.tar.gz
scummvm-rg350-3feab382bc5c97656580254c235a5573e24e0d6f.tar.bz2
scummvm-rg350-3feab382bc5c97656580254c235a5573e24e0d6f.zip
LASTEXPRESS: Fix corpse disappearing when hiding the body in the bed
The setItemLocation action had a typo that prevented it from setting the item location. The "corpse moved" event was not set and it broke the scene progression. Also clean up the pickCorpse code and add better comments. svn-id: r53624
Diffstat (limited to 'engines/lastexpress/game/action.cpp')
-rw-r--r--engines/lastexpress/game/action.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/engines/lastexpress/game/action.cpp b/engines/lastexpress/game/action.cpp
index b2c7fdef1f..b90ee40c6a 100644
--- a/engines/lastexpress/game/action.cpp
+++ b/engines/lastexpress/game/action.cpp
@@ -638,18 +638,14 @@ IMPLEMENT_ACTION(setItemLocation)
return kSceneInvalid;
Inventory::InventoryEntry* entry = getInventory()->get(item);
- if (!entry->isPresent)
+ if (entry->isPresent)
return kSceneInvalid;
entry->location = (ObjectLocation)hotspot.param2;
if (item == kItemCorpse) {
ObjectLocation corpseLocation = getInventory()->get(kItemCorpse)->location;
-
- if (corpseLocation == kObjectLocation3 || corpseLocation == kObjectLocation4)
- getProgress().eventCorpseMovedFromFloor = true;
- else
- getProgress().eventCorpseMovedFromFloor = false;
+ getProgress().eventCorpseMovedFromFloor = (corpseLocation == kObjectLocation3 || corpseLocation == kObjectLocation4);
}
return kSceneInvalid;
@@ -1514,20 +1510,20 @@ void Action::pickCorpse(ObjectLocation bedPosition, bool process) const {
// Floor
case kObjectLocation1:
- if (bedPosition != 4) {
- playAnimation(getProgress().jacket == kJacketGreen ? kEventCorpsePickFloorGreen : kEventCorpsePickFloorOriginal);
+ // Bed is fully opened, move corpse directly there
+ if (bedPosition == 4) {
+ playAnimation(kEventCorpsePickFloorOpenedBedOriginal);
+
+ getInventory()->get(kItemCorpse)->location = kObjectLocation5;
break;
}
- if (getProgress().jacket)
- playAnimation(kEventCorpsePickFloorOpenedBedOriginal);
-
- getInventory()->get(kItemCorpse)->location = kObjectLocation5;
+ playAnimation(getProgress().jacket == kJacketGreen ? kEventCorpsePickFloorGreen : kEventCorpsePickFloorOriginal);
break;
// Bed
case kObjectLocation2:
- playAnimation(getProgress().jacket == kJacketGreen ? kEventCorpsePickFloorGreen : kEventCorpsePickBedOriginal);
+ playAnimation(getProgress().jacket == kJacketGreen ? kEventCorpsePickBedGreen : kEventCorpsePickBedOriginal);
break;
}
@@ -1535,7 +1531,7 @@ void Action::pickCorpse(ObjectLocation bedPosition, bool process) const {
getScenes()->processScene();
// Add corpse to inventory
- if (bedPosition != 4) { // bed position
+ if (bedPosition != 4) { // bed is not fully opened
getInventory()->addItem(kItemCorpse);
getInventory()->selectItem(kItemCorpse);
_engine->getCursor()->setStyle(kCursorCorpse);
@@ -1765,7 +1761,7 @@ CursorStyle Action::getCursor(const SceneHotspot &hotspot) const {
return kCursorNormal;
if ((!getInventory()->getSelectedItem() || getInventory()->getSelectedEntry()->manualSelect)
- && (object != kObject21 || getProgress().eventCorpseMovedFromFloor == 1))
+ && (object != kObject21 || getProgress().eventCorpseMovedFromFloor == true))
return kCursorHand;
else
return kCursorNormal;