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:
parent
340f3a650e
commit
f43fb0dab8
3 changed files with 20 additions and 3 deletions
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -193,6 +193,8 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool isInClass(int cls);
|
bool isInClass(int cls);
|
||||||
|
|
||||||
|
bool isPlayer();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue