renamed o2_matrixOps -> o2_setBoxFlags; V2 'objY' fixes; cleanup

svn-id: r7739
This commit is contained in:
Max Horn 2003-05-20 16:13:34 +00:00
parent 93d29f2f9a
commit 3e3d6f1360
4 changed files with 28 additions and 25 deletions

View file

@ -238,7 +238,7 @@ protected:
void o2_getActorX(); void o2_getActorX();
void o2_getActorY(); void o2_getActorY();
void o2_getBitVar(); void o2_getBitVar();
void o2_getObjY(); void o2_getObjUnknown();
void o2_ifClassOfIs(); void o2_ifClassOfIs();
void o2_ifNotState01(); void o2_ifNotState01();
void o2_ifNotState02(); void o2_ifNotState02();
@ -249,7 +249,7 @@ protected:
void o2_ifState04(); void o2_ifState04();
void o2_ifState08(); void o2_ifState08();
void o2_loadRoomWithEgo(); void o2_loadRoomWithEgo();
void o2_matrixOps(); void o2_setBoxFlags();
void o2_panCameraTo(); void o2_panCameraTo();
void o2_pickupObject(); void o2_pickupObject();
void o2_putActor(); void o2_putActor();
@ -262,7 +262,7 @@ protected:
void o2_setBitVar(); void o2_setBitVar();
void o2_setCameraAt(); void o2_setCameraAt();
void o2_setObjectName(); void o2_setObjectName();
void o2_setObjY(); void o2_setObjUnknown();
void o2_setOwnerOf(); void o2_setOwnerOf();
void o2_setState01(); void o2_setState01();
void o2_setState02(); void o2_setState02();

View file

@ -203,6 +203,9 @@ void Scumm::getObjectXYPos(int object, int &x, int &y, int &dir) {
x = od->x_pos + (int16)READ_LE_UINT16(&imhd->old.hotspot[state].x); x = od->x_pos + (int16)READ_LE_UINT16(&imhd->old.hotspot[state].x);
y = od->y_pos + (int16)READ_LE_UINT16(&imhd->old.hotspot[state].y); y = od->y_pos + (int16)READ_LE_UINT16(&imhd->old.hotspot[state].y);
} }
} else if (_features & GF_AFTER_V2){
x = od->walk_x * 8;
y = (od->walk_y & 0x1f) * 8;
} else { } else {
x = od->walk_x; x = od->walk_x;
y = od->walk_y; y = od->walk_y;
@ -656,8 +659,11 @@ void Scumm::setupRoomObject(ObjectData *od, byte *room, byte *searchptr) {
od->parent = *(ptr + 12); od->parent = *(ptr + 12);
if (_features & GF_AFTER_V2) { if (_features & GF_AFTER_V2) {
od->walk_x = *(ptr + 13) * 8; od->walk_x = *(ptr + 13);
od->walk_y = *(ptr + 14) * 8; // V2 stores an as of now unknown value in the upper 3 bits of the Y coordinate.
// Maybe we shoudl add an entry for it to ObjectData. That would be cleaner,
// but requires us to inc the savegame format version.
od->walk_y = *(ptr + 14);
od->actordir = (*(ptr + 15)) & 7; od->actordir = (*(ptr + 15)) & 7;
od->height = *(ptr + 15) & 0xf8; od->height = *(ptr + 15) & 0xf8;
} else { } else {

View file

@ -46,7 +46,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isNotEqual), OPCODE(o5_isNotEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_assignVarWordIndirect), OPCODE(o2_assignVarWordIndirect),
OPCODE(o2_setObjY), OPCODE(o2_setObjUnknown),
/* 0C */ /* 0C */
OPCODE(o2_resourceRoutines), OPCODE(o2_resourceRoutines),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -93,7 +93,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_delay), OPCODE(o2_delay),
OPCODE(o2_ifNotState04), OPCODE(o2_ifNotState04),
/* 30 */ /* 30 */
OPCODE(o2_matrixOps), OPCODE(o2_setBoxFlags),
OPCODE(o2_getBitVar), OPCODE(o2_getBitVar),
OPCODE(o2_setCameraAt), OPCODE(o2_setCameraAt),
OPCODE(o2_roomOps), OPCODE(o2_roomOps),
@ -126,7 +126,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isEqual), OPCODE(o5_isEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_chainScript), OPCODE(o2_chainScript),
OPCODE(o2_setObjY), OPCODE(o2_setObjUnknown),
/* 4C */ /* 4C */
OPCODE(o2_waitForSentence), OPCODE(o2_waitForSentence),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -168,7 +168,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_subIndirect), OPCODE(o2_subIndirect),
OPCODE(o2_dummy), OPCODE(o2_dummy),
/* 6C */ /* 6C */
OPCODE(o2_getObjY), OPCODE(o2_getObjUnknown),
OPCODE(o5_putActorInRoom), OPCODE(o5_putActorInRoom),
OPCODE(o2_dummy), OPCODE(o2_dummy),
OPCODE(o2_ifState04), OPCODE(o2_ifState04),
@ -206,7 +206,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isNotEqual), OPCODE(o5_isNotEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_assignVarWordIndirect), OPCODE(o2_assignVarWordIndirect),
OPCODE(o2_setObjY), OPCODE(o2_setObjUnknown),
/* 8C */ /* 8C */
OPCODE(o2_resourceRoutines), OPCODE(o2_resourceRoutines),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -253,7 +253,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_waitForMessage), OPCODE(o2_waitForMessage),
OPCODE(o2_ifNotState04), OPCODE(o2_ifNotState04),
/* B0 */ /* B0 */
OPCODE(o2_matrixOps), OPCODE(o2_setBoxFlags),
OPCODE(o2_getBitVar), OPCODE(o2_getBitVar),
OPCODE(o2_setCameraAt), OPCODE(o2_setCameraAt),
OPCODE(o2_roomOps), OPCODE(o2_roomOps),
@ -286,7 +286,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o5_isEqual), OPCODE(o5_isEqual),
OPCODE(o5_faceActor), OPCODE(o5_faceActor),
OPCODE(o2_chainScript), OPCODE(o2_chainScript),
OPCODE(o2_setObjY), OPCODE(o2_setObjUnknown),
/* CC */ /* CC */
OPCODE(o5_pseudoRoom), OPCODE(o5_pseudoRoom),
OPCODE(o5_walkActorToActor), OPCODE(o5_walkActorToActor),
@ -328,7 +328,7 @@ void Scumm_v2::setupOpcodes() {
OPCODE(o2_subIndirect), OPCODE(o2_subIndirect),
OPCODE(o2_dummy), OPCODE(o2_dummy),
/* EC */ /* EC */
OPCODE(o2_getObjY), OPCODE(o2_getObjUnknown),
OPCODE(o5_putActorInRoom), OPCODE(o5_putActorInRoom),
OPCODE(o2_dummy), OPCODE(o2_dummy),
OPCODE(o2_ifState04), OPCODE(o2_ifState04),
@ -506,17 +506,17 @@ void Scumm_v2::o2_assignVarByte() {
setResult(fetchScriptByte()); setResult(fetchScriptByte());
} }
void Scumm_v2::o2_setObjY() { void Scumm_v2::o2_setObjUnknown() {
int obj = getVarOrDirectWord(0x80); int obj = getVarOrDirectWord(0x80);
int y = fetchScriptByte(); int unk = fetchScriptByte();
if (whereIsObject(obj) != WIO_NOT_FOUND) { if (whereIsObject(obj) != WIO_NOT_FOUND) {
ObjectData *od = &_objs[getObjectIndex(obj)]; ObjectData *od = &_objs[getObjectIndex(obj)];
od->walk_y = (y << 5) | (od->walk_y & 0x1F); od->walk_y = (unk << 5) | (od->walk_y & 0x1F);
} }
} }
void Scumm_v2::o2_getObjY() { void Scumm_v2::o2_getObjUnknown() {
int obj = getVarOrDirectWord(0x80); int obj = getVarOrDirectWord(0x80);
getResultPos(); getResultPos();
@ -841,6 +841,7 @@ void Scumm_v2::o2_doSentence() {
st->verb = a; st->verb = a;
st->objectA = getVarOrDirectWord(0x40); st->objectA = getVarOrDirectWord(0x40);
st->objectB = getVarOrDirectWord(0x20); st->objectB = getVarOrDirectWord(0x20);
st->unk2 = (st->objectB != 0);
st->freezeCount = 0; st->freezeCount = 0;
// TODO // TODO
@ -1092,7 +1093,7 @@ void Scumm_v2::o2_delay() {
o5_breakHere(); o5_breakHere();
} }
void Scumm_v2::o2_matrixOps() { void Scumm_v2::o2_setBoxFlags() {
int a, b; int a, b;
a = getVarOrDirectByte(0x80); a = getVarOrDirectByte(0x80);

View file

@ -732,7 +732,7 @@ void Scumm_v5::o5_divide() {
} }
void Scumm_v5::o5_doSentence() { void Scumm_v5::o5_doSentence() {
int a, b; int a;
SentenceTab *st; SentenceTab *st;
a = getVarOrDirectByte(0x80); a = getVarOrDirectByte(0x80);
@ -747,12 +747,8 @@ void Scumm_v5::o5_doSentence() {
st->verb = a; st->verb = a;
st->objectA = getVarOrDirectWord(0x40); st->objectA = getVarOrDirectWord(0x40);
b = st->objectB = getVarOrDirectWord(0x20); st->objectB = getVarOrDirectWord(0x20);
if (b == 0) { st->unk2 = (st->objectB != 0);
st->unk2 = 0;
} else {
st->unk2 = 1;
}
st->freezeCount = 0; st->freezeCount = 0;
} }