aboutsummaryrefslogtreecommitdiff
path: root/engines/gnap/character.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/gnap/character.cpp')
-rw-r--r--engines/gnap/character.cpp76
1 files changed, 61 insertions, 15 deletions
diff --git a/engines/gnap/character.cpp b/engines/gnap/character.cpp
index c72f6337fa..4356862756 100644
--- a/engines/gnap/character.cpp
+++ b/engines/gnap/character.cpp
@@ -33,10 +33,14 @@ Character::Character(GnapEngine *vm) : _vm(vm) {
_sequenceId = 0;
_sequenceDatNum = 0;
_id = 0;
+ _gridX = 0;
+ _gridY = 0;
}
Character::~Character() {}
+/************************************************************************************************/
+
PlayerGnap::PlayerGnap(GnapEngine * vm) : Character(vm) {
_brainPulseNum = 0;
_brainPulseRndValue = 0;
@@ -407,7 +411,7 @@ void PlayerGnap::useJointOnPlatypus() {
_vm->_plat->_sequenceDatNum = 1;
_vm->_plat->_sequenceId = 0x876;
_vm->_plat->_idleFacing = kDirNone;
- _vm->_gnap->playSequence(0x107B5);
+ playSequence(0x107B5);
_vm->gnapWalkStep();
while (_vm->_gameSys->getAnimationStatus(0) != 2) {
_vm->updateMouseCursor();
@@ -416,7 +420,7 @@ void PlayerGnap::useJointOnPlatypus() {
_vm->_gameSys->setAnimation(0, 0, 0);
_actionStatus = -1;
} else {
- _vm->_gnap->playSequence(getSequenceId(gskScratchingHead, _vm->_plat->_pos.x, _vm->_plat->_pos.y) | 0x10000);
+ playSequence(getSequenceId(gskScratchingHead, _vm->_plat->_pos.x, _vm->_plat->_pos.y) | 0x10000);
}
}
@@ -432,11 +436,11 @@ void PlayerGnap::kissPlatypus(int callback) {
_sequenceId = 0x847;
_vm->_gameSys->insertSequence(0x107CB, _vm->_plat->_id,
makeRid(_vm->_plat->_sequenceDatNum, _vm->_plat->_sequenceId), _vm->_plat->_id,
- kSeqSyncWait, _vm->getSequenceTotalDuration(0x10847), 75 * _vm->_plat->_pos.x - _vm->_platGridX, 48 * _vm->_plat->_pos.y - _vm->_platGridY);
+ kSeqSyncWait, _vm->getSequenceTotalDuration(0x10847), 75 * _vm->_plat->_pos.x - _vm->_plat->_gridX, 48 * _vm->_plat->_pos.y - _vm->_plat->_gridY);
_vm->_plat->_sequenceDatNum = 1;
_vm->_plat->_sequenceId = 0x7CB;
_vm->_plat->_idleFacing = kDirNone;
- _vm->_gnap->playSequence(0x107B5);
+ playSequence(0x107B5);
while (_vm->_gameSys->getAnimationStatus(0) != 2) {
_vm->updateMouseCursor();
_vm->doCallback(callback);
@@ -445,23 +449,23 @@ void PlayerGnap::kissPlatypus(int callback) {
_vm->_gameSys->setAnimation(0, 0, 0);
_actionStatus = -1;
} else {
- _vm->_gnap->playSequence(getSequenceId(gskScratchingHead, _vm->_plat->_pos.x, _vm->_plat->_pos.y) | 0x10000);
+ playSequence(getSequenceId(gskScratchingHead, _vm->_plat->_pos.x, _vm->_plat->_pos.y) | 0x10000);
}
}
void PlayerGnap::useDeviceOnPlatypus() {
- _vm->_gnap->playSequence(makeRid(1, getSequenceId(gskPullOutDevice, _vm->_plat->_pos.x, _vm->_plat->_pos.y)));
+ playSequence(makeRid(1, getSequenceId(gskPullOutDevice, _vm->_plat->_pos.x, _vm->_plat->_pos.y)));
if (_vm->_plat->_idleFacing != kDirNone) {
_vm->_gameSys->insertSequence(makeRid(1, 0x7D5), _vm->_plat->_id,
makeRid(_vm->_plat->_sequenceDatNum, _vm->_plat->_sequenceId), _vm->_plat->_id,
- kSeqSyncWait, 0, 75 * _vm->_plat->_pos.x - _vm->_platGridX, 48 * _vm->_plat->_pos.y - _vm->_platGridY);
+ kSeqSyncWait, 0, 75 * _vm->_plat->_pos.x - _vm->_plat->_gridX, 48 * _vm->_plat->_pos.y - _vm->_plat->_gridY);
_vm->_plat->_sequenceId = 0x7D5;
_vm->_plat->_sequenceDatNum = 1;
} else {
_vm->_gameSys->insertSequence(makeRid(1, 0x7D4), _vm->_plat->_id,
makeRid(_vm->_plat->_sequenceDatNum, _vm->_plat->_sequenceId), _vm->_plat->_id,
- kSeqSyncWait, 0, 75 * _vm->_plat->_pos.x - _vm->_platGridX, 48 * _vm->_plat->_pos.y - _vm->_platGridY);
+ kSeqSyncWait, 0, 75 * _vm->_plat->_pos.x - _vm->_plat->_gridX, 48 * _vm->_plat->_pos.y - _vm->_plat->_gridY);
_vm->_plat->_sequenceId = 0x7D4;
_vm->_plat->_sequenceDatNum = 1;
}
@@ -469,7 +473,7 @@ void PlayerGnap::useDeviceOnPlatypus() {
int newSequenceId = getSequenceId(gskUseDevice, 0, 0);
_vm->_gameSys->insertSequence(makeRid(1, newSequenceId), _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = newSequenceId;
_sequenceDatNum = 1;
}
@@ -484,7 +488,7 @@ void PlayerGnap::playSequence(int sequenceId) {
_vm->gnapIdle();
_vm->_gameSys->insertSequence(sequenceId, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqScale | kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqScale | kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = ridToEntryIndex(sequenceId);
_sequenceDatNum = ridToDatIndex(sequenceId);
}
@@ -522,13 +526,13 @@ void PlayerGnap::updateIdleSequence() {
if (_idleFacing == kDirBottomRight) {
_vm->_gameSys->insertSequence(0x107BD, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = 0x7BD;
_sequenceDatNum = 1;
} else if (_idleFacing == kDirBottomLeft) {
_vm->_gameSys->insertSequence(0x107BE, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = 0x7BE;
_sequenceDatNum = 1;
}
@@ -556,13 +560,13 @@ void PlayerGnap::updateIdleSequence2() {
if (_idleFacing == kDirBottomRight) {
_vm->_gameSys->insertSequence(0x107BD, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = 0x7BD;
_sequenceDatNum = 1;
} else if (_idleFacing == kDirBottomLeft) {
_vm->_gameSys->insertSequence(0x107BE, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqSyncWait, 0, 75 * _pos.x - _vm->_gnapGridX, 48 * _pos.y - _vm->_gnapGridY);
+ kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = 0x7BE;
_sequenceDatNum = 1;
}
@@ -573,6 +577,27 @@ void PlayerGnap::updateIdleSequence2() {
}
}
+void PlayerGnap::initPos(int gridX, int gridY, Facing facing) {
+ _vm->_timers[2] = 30;
+ _vm->_timers[3] = 300;
+ _pos = Common::Point(gridX, gridY);
+ if (facing == kDirNone)
+ _idleFacing = kDirBottomRight;
+ else
+ _idleFacing = facing;
+ if (_idleFacing == kDirBottomLeft) {
+ _sequenceId = 0x7B8;
+ } else {
+ _sequenceId = 0x7B5;
+ _idleFacing = kDirBottomRight;
+ }
+ _id = 20 * _pos.y;
+ _sequenceDatNum = 1;
+ _vm->_gameSys->insertSequence(makeRid(1, _sequenceId), 20 * _pos.y,
+ 0, 0,
+ kSeqScale, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
+}
+
/************************************************************************************************/
PlayerPlat::PlayerPlat(GnapEngine * vm) : Character(vm) {}
@@ -594,7 +619,7 @@ int PlayerPlat::getSequenceId(int kind, int gridX, int gridY) {
void PlayerPlat::playSequence(int sequenceId) {
_vm->_gameSys->insertSequence(sequenceId, _id,
makeRid(_sequenceDatNum, _sequenceId), _id,
- kSeqScale | kSeqSyncWait, 0, 75 * _pos.x - _vm->_platGridX, 48 * _pos.y - _vm->_platGridY);
+ kSeqScale | kSeqSyncWait, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
_sequenceId = ridToEntryIndex(sequenceId);
_sequenceDatNum = ridToDatIndex(sequenceId);
}
@@ -665,4 +690,25 @@ void PlayerPlat::updateIdleSequence2() {
}
}
+void PlayerPlat::initPos(int gridX, int gridY, Facing facing) {
+ _vm->_timers[0] = 50;
+ _vm->_timers[1] = 20;
+ _pos = Common::Point(gridX, gridY);
+ if (facing == kDirNone)
+ _idleFacing = kDirNone;
+ else
+ _idleFacing = facing;
+ if (_idleFacing == kDirUnk4) {
+ _sequenceId = 0x7D1;
+ } else {
+ _sequenceId = 0x7C1;
+ _idleFacing = kDirNone;
+ }
+ _id = 20 * _pos.y;
+ _sequenceDatNum = 1;
+ _vm->_gameSys->insertSequence(makeRid(1, _sequenceId), 20 * _pos.y,
+ 0, 0,
+ kSeqScale, 0, 75 * _pos.x - _gridX, 48 * _pos.y - _gridY);
+}
+
} // End of namespace Gnap