aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorMax Horn2004-01-19 20:23:27 +0000
committerMax Horn2004-01-19 20:23:27 +0000
commit8e89f7d060ca5fac1efc7c244df91b678f7e2c9d (patch)
tree89c54551d525b732be98d953205ea15e837e5db3 /scumm
parentbcf805234115b0fc38e494672883919ed94e6cb6 (diff)
downloadscummvm-rg350-8e89f7d060ca5fac1efc7c244df91b678f7e2c9d.tar.gz
scummvm-rg350-8e89f7d060ca5fac1efc7c244df91b678f7e2c9d.tar.bz2
scummvm-rg350-8e89f7d060ca5fac1efc7c244df91b678f7e2c9d.zip
moved the sam&max inventory hack into o6_setOwner
svn-id: r12520
Diffstat (limited to 'scumm')
-rw-r--r--scumm/object.cpp19
-rw-r--r--scumm/script_v6.cpp29
-rw-r--r--scumm/scumm.h1
3 files changed, 29 insertions, 20 deletions
diff --git a/scumm/object.cpp b/scumm/object.cpp
index 56e4b49eaf..e5ad18080e 100644
--- a/scumm/object.cpp
+++ b/scumm/object.cpp
@@ -1188,23 +1188,6 @@ int ScummEngine::getInventorySlot() {
return -1;
}
-void ScummEngine::SamInventoryHack(int obj) {
- // FIXME: Sam and Max hack
- int base = 6;
-
- while (base < 80) {
- int value = readArray(178, 0, base);
- if (value == obj)
- return;
- if (value == 0) {
- _scummVars[179]++;
- writeArray(178, 0, base, obj);
- return;
- }
- base++;
- }
-}
-
void ScummEngine::setOwnerOf(int obj, int owner) {
ScriptSlot *ss;
if (owner == 0) {
@@ -1217,8 +1200,6 @@ void ScummEngine::setOwnerOf(int obj, int owner) {
return;
}
}
- if ((owner == 2) && (_gameId == GID_SAMNMAX))
- SamInventoryHack(obj);
putOwner(obj, owner);
runInventoryScript(0);
diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp
index 545b5a2921..6ca3af6d35 100644
--- a/scumm/script_v6.cpp
+++ b/scumm/script_v6.cpp
@@ -925,6 +925,35 @@ void ScummEngine_v6::o6_setOwner() {
int owner = pop();
int obj = pop();
+ if ((owner == 2) && (_gameId == GID_SAMNMAX)) {
+ // TODO / FIXME: This hack was added a long time ago, in revision 1.28
+ // of object.cpp in the old CVS module (see also here:
+ // http://cvs.sourceforge.net/viewcvs.py/scummvm/scummvm-old/object.cpp?r1=1.27&r2=1.28
+ // Commited by Endy with message:
+ // "Sam and Max inventory hack. Makes it work, but is nasty ;)"
+ //
+ // Sadly, it's not quite clear what exactly the hack fixes. In a quick
+ // test I didn't find any place where it is being used, but of course
+ // that means nothing.
+ //
+ // There aren't many places that invoke setOwner at all (in Sam and Max).
+ // I did a quick search of the script dumps I have here; in those I found
+ // seven calls to setOwner, and only one with owner == 2.
+
+ warning("Inside Sam and Max inventory hack! (obj %d)", obj);
+ for (int base = 6; base < 80; base++) {
+ int value = readArray(178, 0, base);
+ if (value == obj)
+ break;
+ if (value == 0) {
+ _scummVars[179]++;
+ writeArray(178, 0, base, obj);
+ break;
+ }
+ base++;
+ }
+ }
+
setOwnerOf(obj, owner);
}
diff --git a/scumm/scumm.h b/scumm/scumm.h
index c6685d0fa9..15207c3d2f 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -662,7 +662,6 @@ public:
/* Should be in Object class */
byte OF_OWNER_ROOM;
int getInventorySlot();
- void SamInventoryHack(int obj); // FIXME: Sam and Max hack
int findInventory(int owner, int index);
int getInventoryCount(int owner);