Add more opcode differences in C64 maniac.

svn-id: r18187
This commit is contained in:
Travis Howell 2005-05-20 06:29:34 +00:00
parent d5f4a56e11
commit feca9840b8
2 changed files with 108 additions and 33 deletions

View file

@ -42,7 +42,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_getActorRoom),
/* 04 */
OPCODE(o_isGreaterEqual),
OPCODE(o2_drawObject),
OPCODE(o_stopScript),
OPCODE(o_getDist),
OPCODE(o5_getActorRoom),
/* 08 */
@ -56,7 +56,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o_putActorAtObject),
OPCODE(o2_ifNotState08),
/* 10 */
OPCODE(o5_breakHere),
OPCODE(o_unfreezeScripts),
OPCODE(o2_animateActor),
OPCODE(o2_panCameraTo),
OPCODE(o_unknown13),
@ -64,7 +64,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_print),
OPCODE(o2_actorFromPos),
OPCODE(o5_getRandomNr),
OPCODE(o2_clearState02),
OPCODE(o_clearState08),
/* 18 */
OPCODE(o5_jumpRelative),
OPCODE(o2_doSentence),
@ -114,7 +114,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_stopSound),
OPCODE(o2_setActorElevation),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState01),
OPCODE(o2_ifState02),
/* 40 */
OPCODE(o2_cutscene),
OPCODE(o2_putActor),
@ -123,7 +123,7 @@ void ScummEngine_c64::setupOpcodes() {
/* 44 */
OPCODE(o_isLess),
OPCODE(o2_drawObject),
OPCODE(o5_increment),
OPCODE(o_increment),
OPCODE(o2_getActorX),
/* 48 */
OPCODE(o_isEqual),
@ -144,21 +144,21 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_setObjectName),
OPCODE(o2_actorFromPos),
OPCODE(o5_getActorMoving),
OPCODE(o2_setState02),
OPCODE(o_clearState08),
/* 58 */
OPCODE(o2_beginOverride),
OPCODE(o2_doSentence),
OPCODE(o_add),
OPCODE(o2_setBitVar),
/* 5C */
OPCODE(o2_dummy),
OPCODE(o5_startSound),
OPCODE(o2_ifClassOfIs),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState02),
/* 60 */
OPCODE(o_cursorCommand),
OPCODE(o2_putActor),
OPCODE(o2_stopScript),
OPCODE(o_stopScript),
OPCODE(o5_getActorFacing),
/* 64 */
OPCODE(o2_loadRoomWithEgo),
@ -216,7 +216,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o_putActorAtObject),
OPCODE(o2_ifNotState08),
/* 90 */
OPCODE(o5_getObjectOwner),
OPCODE(o_pickupObject),
OPCODE(o2_animateActor),
OPCODE(o2_panCameraTo),
OPCODE(o_unknown93),
@ -224,7 +224,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_print),
OPCODE(o2_actorFromPos),
OPCODE(o5_getRandomNr),
OPCODE(o2_clearState02),
OPCODE(o_setState08),
/* 98 */
OPCODE(o2_restart),
OPCODE(o2_doSentence),
@ -234,7 +234,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_startSound),
OPCODE(o2_ifClassOfIs),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifState02),
OPCODE(o2_ifNotState04),
/* A0 */
OPCODE(o5_stopObjectCode),
OPCODE(o2_putActor),
@ -242,7 +242,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o2_getActorY),
/* A4 */
OPCODE(o2_loadRoomWithEgo),
OPCODE(o2_drawObject),
OPCODE(o5_loadRoom),
OPCODE(o5_setVarRange),
OPCODE(o2_getActorY),
/* A8 */
@ -254,7 +254,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o2_drawSentence),
OPCODE(o5_putActorInRoom),
OPCODE(o2_waitForMessage),
OPCODE(o2_ifNotState04),
OPCODE(o2_ifNotState08),
/* B0 */
OPCODE(o_loadActor),
OPCODE(o2_getBitVar),
@ -264,7 +264,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o_getDist),
OPCODE(o2_findObject),
OPCODE(o_walkActorToObject),
OPCODE(o2_setState01),
OPCODE(o2_setState04),
/* B8 */
OPCODE(o_isLessEqual),
OPCODE(o2_doSentence),
@ -283,7 +283,7 @@ void ScummEngine_c64::setupOpcodes() {
/* C4 */
OPCODE(o_isLess),
OPCODE(o2_drawObject),
OPCODE(o5_decrement),
OPCODE(o_decrement),
OPCODE(o2_getActorX),
/* C8 */
OPCODE(o_isEqual),
@ -304,21 +304,21 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o5_setObjectName),
OPCODE(o2_actorFromPos),
OPCODE(o5_getActorMoving),
OPCODE(o2_setState02),
OPCODE(o_setState08),
/* D8 */
OPCODE(o5_printEgo),
OPCODE(o2_doSentence),
OPCODE(o_add),
OPCODE(o2_setBitVar),
/* DC */
OPCODE(o2_dummy),
OPCODE(o5_startSound),
OPCODE(o2_ifClassOfIs),
OPCODE(o2_walkActorTo),
OPCODE(o2_ifNotState02),
OPCODE(o2_ifNotState04),
/* E0 */
OPCODE(o2_cursorCommand),
OPCODE(o2_putActor),
OPCODE(o2_stopScript),
OPCODE(o_stopScript),
OPCODE(o5_getActorFacing),
/* E4 */
OPCODE(o2_loadRoomWithEgo),
@ -344,7 +344,7 @@ void ScummEngine_c64::setupOpcodes() {
OPCODE(o_getDist),
OPCODE(o2_findObject),
OPCODE(o_walkActorToObject),
OPCODE(o2_clearState01),
OPCODE(o2_setState04),
/* F8 */
OPCODE(o_isGreater),
OPCODE(o2_doSentence),
@ -403,11 +403,47 @@ void ScummEngine_c64::ifNotStateCommon(byte type) {
ignoreScriptWord();
}
void ScummEngine_c64::o_setState08() {
int obj = getVarOrDirectWord(PARAM_1);
putState(obj, getState(obj) | 0x08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
void ScummEngine_c64::o_clearState08() {
int obj = getVarOrDirectWord(PARAM_1);
putState(obj, getState(obj) & ~0x08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
void ScummEngine_c64::o_stopScript() {
int script;
if (_opcode == 0x05) {
script = 0;
} else {
script = getVarOrDirectByte(PARAM_1);
}
if (script == 0)
script = vm.slot[_currentScript].number;
if (_currentScript != 0 && vm.slot[_currentScript].number == script)
stopObjectCode();
else
stopScript(script);
}
void ScummEngine_c64::o_loadSound() {
int resid = fetchScriptByte();
ensureResourceLoaded(rtSound, resid);
}
void ScummEngine_c64::o_unfreezeScripts() {
unfreezeScripts();
}
void ScummEngine_c64::o_move() {
getResultPos();
setResult(getVarOrDirectByte(PARAM_1));
@ -553,6 +589,16 @@ void ScummEngine_c64::o_subtract() {
_scummVars[_resultVarNumber] -= a;
}
void ScummEngine_c64::o_increment() {
int var = getVarOrDirectByte(PARAM_1);
setResult(readVar(var) + 1);
}
void ScummEngine_c64::o_decrement() {
int var = getVarOrDirectByte(PARAM_1);
setResult(readVar(var) - 1);
}
void ScummEngine_c64::o_unknown93() {
debug(0, "o_unknown93 (Actor %d)", fetchScriptByte());
}
@ -579,6 +625,28 @@ void ScummEngine_c64::o_getDist() {
setResult(r);
}
void ScummEngine_c64::o_pickupObject() {
int obj = fetchScriptByte();
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_putActorAtObject() {
int obj, x, y;
Actor *a;