Fix inventory display in C64 maniac
svn-id: r21003
This commit is contained in:
parent
2584f0d69f
commit
2c9f041178
4 changed files with 43 additions and 11 deletions
|
@ -436,6 +436,7 @@ protected:
|
||||||
void o_getActorMoving();
|
void o_getActorMoving();
|
||||||
void o_animateActor();
|
void o_animateActor();
|
||||||
void o_putActorAtObject();
|
void o_putActorAtObject();
|
||||||
|
void o_pickupObject();
|
||||||
void o_lockSound();
|
void o_lockSound();
|
||||||
void o_lockActor();
|
void o_lockActor();
|
||||||
void o_loadActor();
|
void o_loadActor();
|
||||||
|
@ -446,7 +447,6 @@ protected:
|
||||||
void o_lockRoom();
|
void o_lockRoom();
|
||||||
void o_cursorCommand();
|
void o_cursorCommand();
|
||||||
void o_lights();
|
void o_lights();
|
||||||
void o_pickupObject();
|
|
||||||
void o_unlockActor();
|
void o_unlockActor();
|
||||||
void o_unlockScript();
|
void o_unlockScript();
|
||||||
void o_decrement();
|
void o_decrement();
|
||||||
|
@ -458,7 +458,7 @@ protected:
|
||||||
void o_setBitVar();
|
void o_setBitVar();
|
||||||
void o_doSentence();
|
void o_doSentence();
|
||||||
void o_unknown2();
|
void o_unknown2();
|
||||||
void o_unknown3();
|
void o_ifActiveOBject();
|
||||||
void o_getClosestObjActor();
|
void o_getClosestObjActor();
|
||||||
void o_printEgo_c64();
|
void o_printEgo_c64();
|
||||||
void o_print_c64();
|
void o_print_c64();
|
||||||
|
|
|
@ -987,7 +987,7 @@ const byte *ScummEngine::getObjOrActorName(int obj) {
|
||||||
byte *objptr;
|
byte *objptr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (obj < _numActors)
|
if (obj < _numActors && !(_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC))
|
||||||
return derefActor(obj, "getObjOrActorName")->getActorName();
|
return derefActor(obj, "getObjOrActorName")->getActorName();
|
||||||
|
|
||||||
for (i = 0; i < _numNewNames; i++) {
|
for (i = 0; i < _numNewNames; i++) {
|
||||||
|
@ -1004,7 +1004,9 @@ const byte *ScummEngine::getObjOrActorName(int obj) {
|
||||||
if (_game.features & GF_SMALL_HEADER) {
|
if (_game.features & GF_SMALL_HEADER) {
|
||||||
byte offset = 0;
|
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);
|
offset = *(objptr + 14);
|
||||||
else if (_game.features & GF_OLD_BUNDLE)
|
else if (_game.features & GF_OLD_BUNDLE)
|
||||||
offset = *(objptr + 16);
|
offset = *(objptr + 16);
|
||||||
|
|
|
@ -162,7 +162,7 @@ void ScummEngine_c64::setupOpcodes() {
|
||||||
OPCODE(o2_stopScript),
|
OPCODE(o2_stopScript),
|
||||||
OPCODE(o_stopCurrentScript),
|
OPCODE(o_stopCurrentScript),
|
||||||
/* 64 */
|
/* 64 */
|
||||||
OPCODE(o_unknown3),
|
OPCODE(o_ifActiveOBject),
|
||||||
OPCODE(o_stopCurrentScript),
|
OPCODE(o_stopCurrentScript),
|
||||||
OPCODE(o_getClosestObjActor),
|
OPCODE(o_getClosestObjActor),
|
||||||
OPCODE(o5_getActorFacing),
|
OPCODE(o5_getActorFacing),
|
||||||
|
@ -217,7 +217,7 @@ void ScummEngine_c64::setupOpcodes() {
|
||||||
OPCODE(o_putActorAtObject),
|
OPCODE(o_putActorAtObject),
|
||||||
OPCODE(o2_setState02),
|
OPCODE(o2_setState02),
|
||||||
/* 90 */
|
/* 90 */
|
||||||
OPCODE(o2_pickupObject),
|
OPCODE(o_pickupObject),
|
||||||
OPCODE(o_animateActor),
|
OPCODE(o_animateActor),
|
||||||
OPCODE(o2_panCameraTo),
|
OPCODE(o2_panCameraTo),
|
||||||
OPCODE(o_unlockActor),
|
OPCODE(o_unlockActor),
|
||||||
|
@ -322,7 +322,7 @@ void ScummEngine_c64::setupOpcodes() {
|
||||||
OPCODE(o2_stopScript),
|
OPCODE(o2_stopScript),
|
||||||
OPCODE(o_stopCurrentScript),
|
OPCODE(o_stopCurrentScript),
|
||||||
/* E4 */
|
/* E4 */
|
||||||
OPCODE(o_unknown3),
|
OPCODE(o_ifActiveOBject),
|
||||||
OPCODE(o_loadRoomWithEgo),
|
OPCODE(o_loadRoomWithEgo),
|
||||||
OPCODE(o_stopCurrentScript),
|
OPCODE(o_stopCurrentScript),
|
||||||
OPCODE(o5_getActorFacing),
|
OPCODE(o5_getActorFacing),
|
||||||
|
@ -387,6 +387,7 @@ const char *ScummEngine_c64::getOpcodeDesc(byte i) {
|
||||||
int ScummEngine_c64::getObjectFlag() {
|
int ScummEngine_c64::getObjectFlag() {
|
||||||
if (_opcode & 0x40)
|
if (_opcode & 0x40)
|
||||||
return _activeObject;
|
return _activeObject;
|
||||||
|
|
||||||
return fetchScriptByte();
|
return fetchScriptByte();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -656,6 +657,31 @@ void ScummEngine_c64::o_putActorAtObject() {
|
||||||
a->putActor(x, y, a->_room);
|
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() {
|
void ScummEngine_c64::o_badOpcode() {
|
||||||
warning("Bad opcode 0x86 encountered");
|
warning("Bad opcode 0x86 encountered");
|
||||||
}
|
}
|
||||||
|
@ -732,9 +758,13 @@ void ScummEngine_c64::o_unknown2() {
|
||||||
warning("STUB: o_unknown2(%d)", var1);
|
warning("STUB: o_unknown2(%d)", var1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_c64::o_unknown3() {
|
void ScummEngine_c64::o_ifActiveOBject() {
|
||||||
byte var1 = fetchScriptByte();
|
byte obj = fetchScriptByte();
|
||||||
warning("STUB: o_unknown3(%d)", var1);
|
|
||||||
|
if (obj == _activeObject)
|
||||||
|
ScummEngine::fetchScriptWord();
|
||||||
|
else
|
||||||
|
o_jumpRelative();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_c64::o_getClosestObjActor() {
|
void ScummEngine_c64::o_getClosestObjActor() {
|
||||||
|
|
|
@ -1486,7 +1486,7 @@ void ScummEngine::scummInit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScummEngine_c64::scummInit() {
|
void ScummEngine_c64::scummInit() {
|
||||||
ScummEngine::scummInit();
|
ScummEngine_v2::scummInit();
|
||||||
initC64Verbs();
|
initC64Verbs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue