freeze scripts & hide mouse during cutscenes; addde Actor::isPlayer method that should work in V2, too; fixed o2_walkActorToObject

svn-id: r7815
This commit is contained in:
Max Horn 2003-05-22 00:51:42 +00:00
parent 340f3a650e
commit f43fb0dab8
3 changed files with 20 additions and 3 deletions

View file

@ -631,7 +631,7 @@ AdjustBoxResult Actor::adjustXYToBeInBox(int dstX, int dstY) {
flags = _vm->getBoxFlags(box); flags = _vm->getBoxFlags(box);
// Skip over invisible boxes // Skip over invisible boxes
if (flags & kBoxInvisible && !(flags & kBoxPlayerOnly && !isInClass(kObjectClassPlayer))) if (flags & kBoxInvisible && !(flags & kBoxPlayerOnly && !isPlayer()))
continue; continue;
// For increased performance, we perform a quick test if // For increased performance, we perform a quick test if
@ -1392,7 +1392,7 @@ void Actor::walkActorOld() {
// FIXME: not sure if this is needed in non-Zak games, but I think it shouldn't // FIXME: not sure if this is needed in non-Zak games, but I think it shouldn't
// hurt there either. // hurt there either.
int flags = _vm->getBoxFlags(next_box); int flags = _vm->getBoxFlags(next_box);
if (flags & kBoxLocked && !(flags & kBoxPlayerOnly && !isInClass(kObjectClassPlayer))) { if (flags & kBoxLocked && !(flags & kBoxPlayerOnly && !isPlayer())) {
moving |= MF_LAST_LEG; moving |= MF_LAST_LEG;
return; return;
} }
@ -1526,3 +1526,12 @@ void Actor::classChanged(int cls, bool value) {
bool Actor::isInClass(int cls) { bool Actor::isInClass(int cls) {
return _vm->getClass(number, cls); return _vm->getClass(number, cls);
} }
bool Actor::isPlayer() {
if (_vm->_features & GF_AFTER_V2)
return _vm->VAR(42) <= number && number <= _vm->VAR(43);
else
return isInClass(kObjectClassPlayer);
}

View file

@ -193,6 +193,8 @@ public:
protected: protected:
bool isInClass(int cls); bool isInClass(int cls);
bool isPlayer();
}; };
#endif #endif

View file

@ -1006,7 +1006,7 @@ void Scumm_v2::o2_walkActorToObject() {
a = derefActorSafe(getVarOrDirectByte(0x80), "o2_walkActorToObject"); a = derefActorSafe(getVarOrDirectByte(0x80), "o2_walkActorToObject");
assert(a); assert(a);
obj = getVarOrDirectByte(0x40); obj = getVarOrDirectWord(0x40);
if (whereIsObject(obj) != WIO_NOT_FOUND) { if (whereIsObject(obj) != WIO_NOT_FOUND) {
int x, y, dir; int x, y, dir;
getObjectXYPos(obj, x, y, dir); getObjectXYPos(obj, x, y, dir);
@ -1191,6 +1191,9 @@ void Scumm_v2::o2_cutscene() {
VAR(VAR_CURSORSTATE) = 200; VAR(VAR_CURSORSTATE) = 200;
// TODO: some cursor command stuff (hide mouse etc maybe?) // TODO: some cursor command stuff (hide mouse etc maybe?)
freezeScripts(0);
_userPut = 0;
_cursor.state = 0;
_sentenceNum = 0; _sentenceNum = 0;
stopScript(SENTENCE_SCRIPT); stopScript(SENTENCE_SCRIPT);
@ -1211,6 +1214,9 @@ void Scumm_v2::o2_endCutscene() {
VAR(VAR_CURSORSTATE) = vm.cutSceneData[1]; VAR(VAR_CURSORSTATE) = vm.cutSceneData[1];
// TODO: some cursor command stuff (probably to reset it to the pre-cutscene state) // TODO: some cursor command stuff (probably to reset it to the pre-cutscene state)
unfreezeScripts();
_userPut = 1;
_cursor.state = 1;
if (_gameId == GID_MANIAC) { if (_gameId == GID_MANIAC) {
camera._mode = (byte) vm.cutSceneData[3]; camera._mode = (byte) vm.cutSceneData[3];