[Scummvm-cvs-logs] CVS: scummvm/saga sfuncs.cpp,1.35,1.36

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Sun Nov 7 07:15:06 CET 2004


Update of /cvsroot/scummvm/scummvm/saga
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12581

Modified Files:
	sfuncs.cpp 
Log Message:
Unstubbed SF_dropObject(). (Untested)


Index: sfuncs.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/saga/sfuncs.cpp,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- sfuncs.cpp	7 Nov 2004 14:15:41 -0000	1.35
+++ sfuncs.cpp	7 Nov 2004 15:11:04 -0000	1.36
@@ -158,6 +158,10 @@
 	SDataWord_T param = thread->pop();
 	int index = param & 0x1FFF;
 
+	if (index >= ARRAYSIZE(ObjectTable)) {
+		return FAILURE;
+	}
+
 	if (ObjectTable[index].sceneIndex != -1) {
 		ObjectTable[index].sceneIndex = -1;
 		_vm->_interface->addToInventory(index);
@@ -551,10 +555,26 @@
 
 // Script function #32 (0x20)
 int Script::SF_dropObject(SCRIPTFUNC_PARAMS) {
-	for (int i = 0; i < nArgs; i++)
-		thread->pop();
+	SDataWord_T obj_param = thread->pop();
+	SDataWord_T sprite_param = thread->pop();
+	SDataWord_T x_param = thread->pop();
+	SDataWord_T y_param = thread->pop();
+
+	int index = obj_param & 0x1FFF;
+
+	if (index >= ARRAYSIZE(ObjectTable)) {
+		return FAILURE;
+	}
+
+	if (ObjectTable[index].sceneIndex == -1) {
+		_vm->_interface->removeFromInventory(index);
+	}
+
+	ObjectTable[index].sceneIndex = _vm->_scene->currentSceneNumber();
+	ObjectTable[index].spritelistRn = 9 + sprite_param;
+	ObjectTable[index].x = x_param;
+	ObjectTable[index].y = y_param;
 
-	debug(1, "stub: SF_dropObject(), %d args", nArgs);
 	return SUCCESS;
 }
 





More information about the Scummvm-git-logs mailing list