[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