aboutsummaryrefslogtreecommitdiff
path: root/saga/sfuncs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saga/sfuncs.cpp')
-rw-r--r--saga/sfuncs.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/saga/sfuncs.cpp b/saga/sfuncs.cpp
index b22de449a8..e1e0450e89 100644
--- a/saga/sfuncs.cpp
+++ b/saga/sfuncs.cpp
@@ -31,6 +31,7 @@
#include "saga/console.h"
#include "saga/interface.h"
#include "saga/music.h"
+#include "saga/objectdata.h"
#include "saga/sound.h"
#include "saga/sndres.h"
@@ -155,23 +156,28 @@ int Script::SF_sleep(SCRIPTFUNC_PARAMS) {
// Script function #2 (0x02)
int Script::SF_takeObject(SCRIPTFUNC_PARAMS) {
SDataWord_T param = thread->pop();
+ int index = param & 0x1FFF;
+
+ if (ObjectTable[index].sceneIndex != -1) {
+ ObjectTable[index].sceneIndex = -1;
+ _vm->_interface->addToInventory(index);
+ }
- debug(1, "stub: SF_takeObject(%d)", param);
return SUCCESS;
}
// Script function #3 (0x03)
// Check if an object is carried.
int Script::SF_objectIsCarried(SCRIPTFUNC_PARAMS) {
- // INCOMPLETE
- SDataWord_T param1;
- param1 = thread->pop();
-
- // FIXME: Incomplete, but returning 0 assures that the fair start
- // script will run completely.
+ SDataWord_T param = thread->pop();
+ int index = param & 0x1FFF;
- thread->retVal = 0;
+ if (index >= ARRAYSIZE(ObjectTable)) {
+ thread->retVal = 0;
+ return FAILURE;
+ }
+ thread->retVal = (ObjectTable[index].sceneIndex == -1) ? 1 : 0;
return SUCCESS;
}