[Scummvm-cvs-logs] SF.net SVN: scummvm: [21003] scummvm/trunk/engines/scumm

kirben at users.sourceforge.net kirben at users.sourceforge.net
Wed Mar 1 21:05:02 CET 2006


Revision: 21003
Author:   kirben
Date:     2006-03-01 21:04:40 -0800 (Wed, 01 Mar 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm?rev=21003&view=rev

Log Message:
-----------
Fix inventory display in C64 maniac

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/intern.h
    scummvm/trunk/engines/scumm/object.cpp
    scummvm/trunk/engines/scumm/script_c64.cpp
    scummvm/trunk/engines/scumm/scumm.cpp
Modified: scummvm/trunk/engines/scumm/intern.h
===================================================================
--- scummvm/trunk/engines/scumm/intern.h	2006-03-02 03:31:45 UTC (rev 21002)
+++ scummvm/trunk/engines/scumm/intern.h	2006-03-02 05:04:40 UTC (rev 21003)
@@ -436,6 +436,7 @@
 	void o_getActorMoving();
 	void o_animateActor();
 	void o_putActorAtObject();
+	void o_pickupObject();
 	void o_lockSound();
 	void o_lockActor();
 	void o_loadActor();
@@ -446,7 +447,6 @@
 	void o_lockRoom();
 	void o_cursorCommand();
 	void o_lights();
-	void o_pickupObject();
 	void o_unlockActor();
 	void o_unlockScript();
 	void o_decrement();
@@ -458,7 +458,7 @@
 	void o_setBitVar();
 	void o_doSentence();
 	void o_unknown2();
-	void o_unknown3();
+	void o_ifActiveOBject();
 	void o_getClosestObjActor();
 	void o_printEgo_c64();
 	void o_print_c64();

Modified: scummvm/trunk/engines/scumm/object.cpp
===================================================================
--- scummvm/trunk/engines/scumm/object.cpp	2006-03-02 03:31:45 UTC (rev 21002)
+++ scummvm/trunk/engines/scumm/object.cpp	2006-03-02 05:04:40 UTC (rev 21003)
@@ -987,7 +987,7 @@
 	byte *objptr;
 	int i;
 
-	if (obj < _numActors)
+	if (obj < _numActors && !(_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC))
 		return derefActor(obj, "getObjOrActorName")->getActorName();
 
 	for (i = 0; i < _numNewNames; i++) {
@@ -1004,7 +1004,9 @@
 	if (_game.features & GF_SMALL_HEADER) {
 		byte offset = 0;
 
-		if (_game.version <= 2)
+		if (_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC)
+			offset = *(objptr + 13);
+		else if (_game.version <= 2)
 			offset = *(objptr + 14);
 		else if (_game.features & GF_OLD_BUNDLE)
 			offset = *(objptr + 16);

Modified: scummvm/trunk/engines/scumm/script_c64.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_c64.cpp	2006-03-02 03:31:45 UTC (rev 21002)
+++ scummvm/trunk/engines/scumm/script_c64.cpp	2006-03-02 05:04:40 UTC (rev 21003)
@@ -162,7 +162,7 @@
 		OPCODE(o2_stopScript),
 		OPCODE(o_stopCurrentScript),
 		/* 64 */
-		OPCODE(o_unknown3),
+		OPCODE(o_ifActiveOBject),
 		OPCODE(o_stopCurrentScript),
 		OPCODE(o_getClosestObjActor),
 		OPCODE(o5_getActorFacing),
@@ -217,7 +217,7 @@
 		OPCODE(o_putActorAtObject),
 		OPCODE(o2_setState02),
 		/* 90 */
-		OPCODE(o2_pickupObject),
+		OPCODE(o_pickupObject),
 		OPCODE(o_animateActor),
 		OPCODE(o2_panCameraTo),
 		OPCODE(o_unlockActor),
@@ -322,7 +322,7 @@
 		OPCODE(o2_stopScript),
 		OPCODE(o_stopCurrentScript),
 		/* E4 */
-		OPCODE(o_unknown3),
+		OPCODE(o_ifActiveOBject),
 		OPCODE(o_loadRoomWithEgo),
 		OPCODE(o_stopCurrentScript),
 		OPCODE(o5_getActorFacing),
@@ -387,6 +387,7 @@
 int ScummEngine_c64::getObjectFlag() {
 	if (_opcode & 0x40)
 		return _activeObject;
+
 	return fetchScriptByte();
 }
 
@@ -656,6 +657,31 @@
 	a->putActor(x, y, a->_room);
 }
 
+void ScummEngine_c64::o_pickupObject() {
+	int obj = fetchScriptByte();
+	if (obj == 0) {
+		obj = _activeObject;
+	}
+
+	if (obj < 1) {
+		error("pickupObject received invalid index %d (script %d)", obj, vm.slot[_currentScript].number);
+	}
+
+	if (getObjectIndex(obj) == -1)
+		return;
+
+	if (whereIsObject(obj) == WIO_INVENTORY)	/* Don't take an */
+		return;					/* object twice */
+
+	addObjectToInventory(obj, _roomResource);
+	markObjectRectAsDirty(obj);
+	putOwner(obj, VAR(VAR_EGO));
+	putState(obj, getState(obj) | 0xA);
+	clearDrawObjectQueue();
+
+	runInventoryScript(1);
+}
+
 void ScummEngine_c64::o_badOpcode() {
 	warning("Bad opcode 0x86 encountered");
 }
@@ -732,9 +758,13 @@
 	warning("STUB: o_unknown2(%d)", var1);
 }
 
-void ScummEngine_c64::o_unknown3() {
-	byte var1 = fetchScriptByte();
-	warning("STUB: o_unknown3(%d)", var1);
+void ScummEngine_c64::o_ifActiveOBject() {
+	byte obj = fetchScriptByte();
+
+	if (obj == _activeObject)
+		ScummEngine::fetchScriptWord();
+	else
+		o_jumpRelative();
 }
 
 void ScummEngine_c64::o_getClosestObjActor() {

Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp	2006-03-02 03:31:45 UTC (rev 21002)
+++ scummvm/trunk/engines/scumm/scumm.cpp	2006-03-02 05:04:40 UTC (rev 21003)
@@ -1486,7 +1486,7 @@
 }
 
 void ScummEngine_c64::scummInit() {
-	ScummEngine::scummInit();
+	ScummEngine_v2::scummInit();
 	initC64Verbs();
 }
 







More information about the Scummvm-git-logs mailing list