[Scummvm-cvs-logs] SF.net SVN: scummvm: [24566] scummvm/trunk/engines/scumm
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Sun Oct 29 15:45:43 CET 2006
Revision: 24566
http://svn.sourceforge.net/scummvm/?rev=24566&view=rev
Author: fingolfin
Date: 2006-10-29 06:45:31 -0800 (Sun, 29 Oct 2006)
Log Message:
-----------
Named / documented the V0-V2 object states (we should probably rename the corresponding opcodes here and in descumm to make reading script dumps easier)
Modified Paths:
--------------
scummvm/trunk/engines/scumm/object.cpp
scummvm/trunk/engines/scumm/object.h
scummvm/trunk/engines/scumm/script_c64.cpp
scummvm/trunk/engines/scumm/script_v2.cpp
Modified: scummvm/trunk/engines/scumm/object.cpp
===================================================================
--- scummvm/trunk/engines/scumm/object.cpp 2006-10-29 13:30:20 UTC (rev 24565)
+++ scummvm/trunk/engines/scumm/object.cpp 2006-10-29 14:45:31 UTC (rev 24566)
@@ -278,7 +278,7 @@
// blowing up the mansion, should they feel the urge to.
if (_game.id == GID_MANIAC && (obj == 182 || obj == 193))
- _objectStateTable[obj] |= 0x08;
+ _objectStateTable[obj] |= kObjectState_08;
}
return _objectStateTable[obj];
@@ -466,17 +466,17 @@
int ScummEngine::findObject(int x, int y) {
int i, b;
byte a;
- const int mask = (_game.version <= 2) ? 0x8 : 0xF;
+ const int mask = (_game.version <= 2) ? kObjectState_08 : 0xF;
for (i = 1; i < _numLocalObjects; i++) {
if ((_objs[i].obj_nr < 1) || getClass(_objs[i].obj_nr, kObjectClassUntouchable))
continue;
if (_game.version == 0) {
- if (_objs[i].flags == 0 && _objs[i].state & 0x2)
+ if (_objs[i].flags == 0 && _objs[i].state & kObjectStateUntouchable)
continue;
} else {
- if (_game.version <= 2 && _objs[i].state & 0x2)
+ if (_game.version <= 2 && _objs[i].state & kObjectStateUntouchable)
continue;
}
@@ -505,7 +505,7 @@
void ScummEngine::drawRoomObject(int i, int arg) {
ObjectData *od;
byte a;
- const int mask = (_game.version <= 2) ? 0x8 : 0xF;
+ const int mask = (_game.version <= 2) ? kObjectState_08 : 0xF;
od = &_objs[i];
if ((i < 1) || (od->obj_nr < 1) || !od->state)
@@ -524,7 +524,7 @@
void ScummEngine::drawRoomObjects(int arg) {
int i;
- const int mask = (_game.version <= 2) ? 0x8 : 0xF;
+ const int mask = (_game.version <= 2) ? kObjectState_08 : 0xF;
if (_game.heversion >= 60) {
// In HE games, normal objects are drawn, followed by FlObjects.
Modified: scummvm/trunk/engines/scumm/object.h
===================================================================
--- scummvm/trunk/engines/scumm/object.h 2006-10-29 13:30:20 UTC (rev 24565)
+++ scummvm/trunk/engines/scumm/object.h 2006-10-29 14:45:31 UTC (rev 24566)
@@ -34,6 +34,20 @@
kObjectClassUntouchable = 32
};
+enum ObjectStateV2 {
+ kObjectStatePickupable = 1,
+ kObjectStateUntouchable = 2,
+ kObjectStateLocked = 4,
+
+ // FIXME: Not quite sure how to name state 8. It seems to mark some kind
+ // of "activation state" for the given object. E.g. is a door open?
+ // Is a drawer extended? In addition it is used to toggle the look
+ // of objects that the user can "pick up" (i.e. it is set in
+ // o2_pickupObject together with kObjectStateUntouchable). So in a sense,
+ // it can also mean "invisible" in some situations.
+ kObjectState_08 = 8
+};
+
struct ObjectData {
uint32 OBIMoffset;
uint32 OBCDoffset;
Modified: scummvm/trunk/engines/scumm/script_c64.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_c64.cpp 2006-10-29 13:30:20 UTC (rev 24565)
+++ scummvm/trunk/engines/scumm/script_c64.cpp 2006-10-29 14:45:31 UTC (rev 24566)
@@ -439,23 +439,19 @@
void ScummEngine_c64::ifStateCommon(byte type) {
int obj = getObjectFlag();
- if ((getState(obj) & type) == 0) {
+ if ((getState(obj) & type) != 0)
+ ScummEngine::fetchScriptWord();
+ else
o_jumpRelative();
- } else {
- fetchScriptByte();
- fetchScriptByte();
- }
}
void ScummEngine_c64::ifNotStateCommon(byte type) {
int obj = getObjectFlag();
- if ((getState(obj) & type) != 0) {
+ if ((getState(obj) & type) == 0)
+ ScummEngine::fetchScriptWord();
+ else
o_jumpRelative();
- } else {
- fetchScriptByte();
- fetchScriptByte();
- }
}
void ScummEngine_c64::drawSentence() {
@@ -563,14 +559,14 @@
void ScummEngine_c64::o_setState08() {
int obj = getObjectFlag();
- putState(obj, getState(obj) | 0x08);
+ putState(obj, getState(obj) | kObjectState_08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
void ScummEngine_c64::o_clearState08() {
int obj = getObjectFlag();
- putState(obj, getState(obj) & ~0x08);
+ putState(obj, getState(obj) & ~kObjectState_08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
@@ -775,7 +771,7 @@
addObjectToInventory(obj, _roomResource);
markObjectRectAsDirty(obj);
putOwner(obj, VAR(VAR_EGO));
- putState(obj, getState(obj) | 0xA);
+ putState(obj, getState(obj) | kObjectState_08 | kObjectStateUntouchable);
clearDrawObjectQueue();
runInventoryScript(1);
Modified: scummvm/trunk/engines/scumm/script_v2.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_v2.cpp 2006-10-29 13:30:20 UTC (rev 24565)
+++ scummvm/trunk/engines/scumm/script_v2.cpp 2006-10-29 14:45:31 UTC (rev 24566)
@@ -472,40 +472,40 @@
void ScummEngine_v2::o2_setState08() {
int obj = getVarOrDirectWord(PARAM_1);
- putState(obj, getState(obj) | 0x08);
+ putState(obj, getState(obj) | kObjectState_08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
void ScummEngine_v2::o2_clearState08() {
int obj = getVarOrDirectWord(PARAM_1);
- putState(obj, getState(obj) & ~0x08);
+ putState(obj, getState(obj) & ~kObjectState_08);
markObjectRectAsDirty(obj);
clearDrawObjectQueue();
}
void ScummEngine_v2::o2_setState04() {
- setStateCommon(0x04);
+ setStateCommon(kObjectStateLocked);
}
void ScummEngine_v2::o2_clearState04() {
- clearStateCommon(0x04);
+ clearStateCommon(kObjectStateLocked);
}
void ScummEngine_v2::o2_setState02() {
- setStateCommon(0x02);
+ setStateCommon(kObjectStateUntouchable);
}
void ScummEngine_v2::o2_clearState02() {
- clearStateCommon(0x02);
+ clearStateCommon(kObjectStateUntouchable);
}
void ScummEngine_v2::o2_setState01() {
- setStateCommon(0x01);
+ setStateCommon(kObjectStatePickupable);
}
void ScummEngine_v2::o2_clearState01() {
- clearStateCommon(0x01);
+ clearStateCommon(kObjectStatePickupable);
}
void ScummEngine_v2::o2_assignVarWordIndirect() {
@@ -575,51 +575,51 @@
void ScummEngine_v2::ifStateCommon(byte type) {
int obj = getVarOrDirectWord(PARAM_1);
- if ((getState(obj) & type) == 0)
+ if ((getState(obj) & type) != 0)
+ ignoreScriptWord();
+ else
o5_jumpRelative();
- else
- ignoreScriptWord();
}
void ScummEngine_v2::ifNotStateCommon(byte type) {
int obj = getVarOrDirectWord(PARAM_1);
- if ((getState(obj) & type) != 0)
+ if ((getState(obj) & type) == 0)
+ ignoreScriptWord();
+ else
o5_jumpRelative();
- else
- ignoreScriptWord();
}
void ScummEngine_v2::o2_ifState08() {
- ifStateCommon(0x08);
+ ifStateCommon(kObjectState_08);
}
void ScummEngine_v2::o2_ifNotState08() {
- ifNotStateCommon(0x08);
+ ifNotStateCommon(kObjectState_08);
}
void ScummEngine_v2::o2_ifState04() {
- ifStateCommon(0x04);
+ ifStateCommon(kObjectStateLocked);
}
void ScummEngine_v2::o2_ifNotState04() {
- ifNotStateCommon(0x04);
+ ifNotStateCommon(kObjectStateLocked);
}
void ScummEngine_v2::o2_ifState02() {
- ifStateCommon(0x02);
+ ifStateCommon(kObjectStateUntouchable);
}
void ScummEngine_v2::o2_ifNotState02() {
- ifNotStateCommon(0x02);
+ ifNotStateCommon(kObjectStateUntouchable);
}
void ScummEngine_v2::o2_ifState01() {
- ifStateCommon(0x01);
+ ifStateCommon(kObjectStatePickupable);
}
void ScummEngine_v2::o2_ifNotState01() {
- ifNotStateCommon(0x01);
+ ifNotStateCommon(kObjectStatePickupable);
}
void ScummEngine_v2::o2_addIndirect() {
@@ -753,10 +753,10 @@
i = _numLocalObjects;
while (i--) {
if (_objs[i].obj_nr && _objs[i].x_pos == x && _objs[i].y_pos == y && _objs[i].width == w && _objs[i].height == h)
- putState(_objs[i].obj_nr, getState(_objs[i].obj_nr) & ~0x08);
+ putState(_objs[i].obj_nr, getState(_objs[i].obj_nr) & ~kObjectState_08);
}
- putState(obj, getState(od->obj_nr) | 0x08);
+ putState(obj, getState(od->obj_nr) | kObjectState_08);
}
void ScummEngine_v2::o2_resourceRoutines() {
@@ -1547,7 +1547,7 @@
addObjectToInventory(obj, _roomResource);
markObjectRectAsDirty(obj);
putOwner(obj, VAR(VAR_EGO));
- putState(obj, getState(obj) | 0xA);
+ putState(obj, getState(obj) | kObjectState_08 | kObjectStateUntouchable);
clearDrawObjectQueue();
runInventoryScript(1);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list