diff options
-rw-r--r-- | scumm/intern.h | 2 | ||||
-rw-r--r-- | scumm/script_v2.cpp | 59 | ||||
-rw-r--r-- | scumm/script_v5.cpp | 16 | ||||
-rw-r--r-- | scumm/scumm.h | 4 | ||||
-rw-r--r-- | scumm/vars.cpp | 5 |
5 files changed, 24 insertions, 62 deletions
diff --git a/scumm/intern.h b/scumm/intern.h index dc3a4d30d6..e84183af55 100644 --- a/scumm/intern.h +++ b/scumm/intern.h @@ -262,13 +262,11 @@ protected: void o2_matrixOps(); void o2_setCameraAt(); void o2_roomOps(); - void o2_findObject(); void o2_cutscene(); void o2_chainScript(); void o2_pickupObject(); void o2_setObjectName(); void o2_cursorCommand(); - void o2_getClosestObjActor(); void o2_getActorWalkBox(); void o2_endCutscene(); void o2_drawSentence(); diff --git a/scumm/script_v2.cpp b/scumm/script_v2.cpp index b15be089ac..af01a46258 100644 --- a/scumm/script_v2.cpp +++ b/scumm/script_v2.cpp @@ -99,7 +99,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_roomOps), /* 34 */ OPCODE(o5_getDist), - OPCODE(o2_findObject), + OPCODE(o5_findObject), OPCODE(o2_walkActorToObject), OPCODE(o2_setState01), /* 38 */ @@ -160,7 +160,7 @@ void Scumm_v2::setupOpcodes() { /* 64 */ OPCODE(o2_loadRoomWithEgo), OPCODE(o2_drawObject), - OPCODE(o2_getClosestObjActor), + OPCODE(o5_getClosestObjActor), OPCODE(o2_clearState04), /* 68 */ OPCODE(o5_isScriptRunning), @@ -179,7 +179,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_roomOps), /* 74 */ OPCODE(o5_getDist), - OPCODE(o2_findObject), + OPCODE(o5_findObject), OPCODE(o2_walkActorToObject), OPCODE(o2_clearState01), /* 78 */ @@ -259,7 +259,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_roomOps), /* B4 */ OPCODE(o5_getDist), - OPCODE(o2_findObject), + OPCODE(o5_findObject), OPCODE(o2_walkActorToObject), OPCODE(o2_setState02), /* B8 */ @@ -320,7 +320,7 @@ void Scumm_v2::setupOpcodes() { /* E4 */ OPCODE(o2_loadRoomWithEgo), OPCODE(o2_drawObject), - OPCODE(o2_getClosestObjActor), + OPCODE(o5_getClosestObjActor), OPCODE(o2_clearState04), /* E8 */ OPCODE(o5_isScriptRunning), @@ -339,7 +339,7 @@ void Scumm_v2::setupOpcodes() { OPCODE(o2_roomOps), /* F4 */ OPCODE(o5_getDist), - OPCODE(o2_findObject), + OPCODE(o5_findObject), OPCODE(o2_walkActorToObject), OPCODE(o2_clearState01), /* F8 */ @@ -450,9 +450,9 @@ void Scumm_v2::o2_getObjY() { if (whereIsObject(obj) != WIO_NOT_FOUND) { ObjectData *od = &_objs[getObjectIndex(obj)]; - _vars[_resultVarNumber] = od->walk_y >> 5; + setResult(od->walk_y >> 5); } else { - _vars[_resultVarNumber] = 0xFF; + setResult(0xFF); } } @@ -481,7 +481,7 @@ void Scumm_v2::o2_getBitVar() { int bit_offset = bit_var & 0x0f; bit_var >>= 4; - _vars[_resultVarNumber] = (_vars[bit_var] & (1 << bit_offset)) ? 1 : 0; + setResult((_vars[bit_var] & (1 << bit_offset)) ? 1 : 0); } void Scumm_v2::ifStateCommon(byte type) { @@ -944,7 +944,7 @@ void Scumm_v2::o2_actorFromPos() { getResultPos(); x = getVarOrDirectByte(0x80); y = getVarOrDirectByte(0x40); - _vars[_resultVarNumber] = getActorFromPos(x, y); + setResult(getActorFromPos(x, y)); } void Scumm_v2::o2_saveLoadGame() { @@ -952,7 +952,7 @@ void Scumm_v2::o2_saveLoadGame() { byte a = getVarOrDirectByte(0x80); error("TODO: o2_saveLoadGame(%d)", a); - _vars[_resultVarNumber] = 0; + setResult(0); } void Scumm_v2::o2_getActorX() { @@ -960,7 +960,7 @@ void Scumm_v2::o2_getActorX() { getResultPos(); a = getVarOrDirectByte(0x80); - _vars[_resultVarNumber] = getObjX(a); + setResult(getObjX(a)); } void Scumm_v2::o2_getActorY() { @@ -968,7 +968,7 @@ void Scumm_v2::o2_getActorY() { getResultPos(); a = getVarOrDirectByte(0x80); - _vars[_resultVarNumber] = getObjY(a); + setResult(getObjY(a)); } void Scumm_v2::o2_loadRoomWithEgo() { @@ -1053,13 +1053,6 @@ void Scumm_v2::o2_roomOps() { } } -void Scumm_v2::o2_findObject() { - getResultPos(); - int x = getVarOrDirectByte(0x80); - int y = getVarOrDirectByte(0x40); - _vars[_resultVarNumber] = findObject(x, y); -} - void Scumm_v2::o2_cutscene() { warning("TODO o2_cutscene()"); } @@ -1142,36 +1135,14 @@ void Scumm_v2::o2_cursorCommand() { warning("TODO: o2_cursorCommand()"); } -void Scumm_v2::o2_getClosestObjActor() { - int obj; - int act; - int closest_obj = 0xFF, closest_dist = 0xFF; - int dist; - - getResultPos(); - - act = getVarOrDirectWord(0x80); - obj = _vars[VAR_ACTOR_RANGE_MAX]; - - do { - dist = getObjActToObjActDist(act, obj); - if (dist < closest_dist) { - closest_dist = dist; - closest_obj = obj; - } - } while (--obj >= _vars[VAR_ACTOR_RANGE_MIN]); - - _vars[_resultVarNumber] = closest_dist; -} - void Scumm_v2::o2_getActorWalkBox() { Actor *a; getResultPos(); a = derefActorSafe(getVarOrDirectByte(0x80), "o2_getActorWalkbox"); if (a) - _vars[_resultVarNumber] = a->walkbox; + setResult(a->walkbox); else - _vars[_resultVarNumber] = 0; + setResult(0); } void Scumm_v2::o2_drawSentence() { diff --git a/scumm/script_v5.cpp b/scumm/script_v5.cpp index 0916729919..e3bcdaa8a1 100644 --- a/scumm/script_v5.cpp +++ b/scumm/script_v5.cpp @@ -889,17 +889,17 @@ void Scumm_v5::o5_faceActor() { } void Scumm_v5::o5_findInventory() { - int t; getResultPos(); - t = getVarOrDirectByte(0x80); - setResult(findInventory(t, getVarOrDirectByte(0x40))); + int x = getVarOrDirectByte(0x80); + int y = getVarOrDirectByte(0x40); + setResult(findInventory(x, y)); } void Scumm_v5::o5_findObject() { - int t; getResultPos(); - t = getVarOrDirectWord(0x80); - setResult(findObject(t, getVarOrDirectWord(0x40))); + int x = getVarOrDirectByte(0x80); + int y = getVarOrDirectByte(0x40); + setResult(findObject(x, y)); } void Scumm_v5::o5_freezeScripts() { @@ -1078,7 +1078,7 @@ void Scumm_v5::o5_getClosestObjActor() { getResultPos(); act = getVarOrDirectWord(0x80); - obj = _vars[VAR_V5_OBJECT_HI]; + obj = _vars[VAR_ACTOR_RANGE_MAX]; do { dist = getObjActToObjActDist(act, obj); @@ -1086,7 +1086,7 @@ void Scumm_v5::o5_getClosestObjActor() { closest_dist = dist; closest_obj = obj; } - } while (--obj >= _vars[VAR_V5_OBJECT_LO]); + } while (--obj >= _vars[VAR_ACTOR_RANGE_MIN]); setResult(closest_dist); } diff --git a/scumm/scumm.h b/scumm/scumm.h index bfee86cace..a9a6fa1f59 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -615,6 +615,7 @@ public: int _roomResource; // FIXME - should be protected but Sound::pauseSounds accesses it byte *findResourceData(uint32 tag, byte *ptr); int getResourceDataSize(byte *ptr); + void dumpResource(char *tag, int index, byte *ptr, int length = -1); protected: int getArrayId(); @@ -627,7 +628,6 @@ protected: void expireResources(uint32 size); void freeResources(); void destroy(); - void dumpResource(char *tag, int index, byte *ptr, int length = -1); public: /* Should be in Object class */ @@ -1111,8 +1111,6 @@ public: byte VAR_V5_DRAWFLAGS; byte VAR_MI1_TIMER; - byte VAR_V5_OBJECT_LO; - byte VAR_V5_OBJECT_HI; byte VAR_V5_TALK_STRING_Y; byte VAR_V5_CHARFLAG; diff --git a/scumm/vars.cpp b/scumm/vars.cpp index 8fefcfa4bd..07ec86dd97 100644 --- a/scumm/vars.cpp +++ b/scumm/vars.cpp @@ -97,9 +97,6 @@ void Scumm::setupScummVars() { VAR_V5_DRAWFLAGS = 9; VAR_MI1_TIMER = 14; - VAR_V5_OBJECT_LO = 15; - VAR_V5_OBJECT_HI = 16; - VAR_V5_TALK_STRING_Y = 54; VAR_V5_CHARFLAG = 60; @@ -204,8 +201,6 @@ void Scumm_v7::setupScummVars() { //VAR_V5_DRAWFLAGS = 9; VAR_MI1_TIMER = 14; - VAR_V5_OBJECT_LO = 15; - VAR_V5_OBJECT_HI = 16; VAR_V5_TALK_STRING_Y = 54; VAR_V5_CHARFLAG = 60; |