aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche
diff options
context:
space:
mode:
authorStrangerke2013-09-21 22:26:36 +0200
committerStrangerke2013-09-21 22:28:48 +0200
commit4b4f07a7f6e8643080de8048d94e7d22bc7f3753 (patch)
tree49a3150f9069f61192398717af7845baa02d65d2 /engines/avalanche
parent89471e76d1177f2cbe5f2b638fe69559de85b84f (diff)
downloadscummvm-rg350-4b4f07a7f6e8643080de8048d94e7d22bc7f3753.tar.gz
scummvm-rg350-4b4f07a7f6e8643080de8048d94e7d22bc7f3753.tar.bz2
scummvm-rg350-4b4f07a7f6e8643080de8048d94e7d22bc7f3753.zip
AVALANCHE: Merge Gyro, Lucerna and Avalot
Diffstat (limited to 'engines/avalanche')
-rw-r--r--engines/avalanche/animation.cpp418
-rw-r--r--engines/avalanche/avalanche.cpp224
-rw-r--r--engines/avalanche/avalanche.h4
-rw-r--r--engines/avalanche/avalot.cpp1774
-rw-r--r--engines/avalanche/avalot.h392
-rw-r--r--engines/avalanche/background.cpp96
-rw-r--r--engines/avalanche/closing.cpp2
-rw-r--r--engines/avalanche/dialogs.cpp374
-rw-r--r--engines/avalanche/gyro.cpp599
-rw-r--r--engines/avalanche/gyro.h367
-rw-r--r--engines/avalanche/lucerna.cpp1224
-rw-r--r--engines/avalanche/lucerna.h124
-rw-r--r--engines/avalanche/menu.cpp210
-rw-r--r--engines/avalanche/module.mk2
-rw-r--r--engines/avalanche/parser.cpp706
-rw-r--r--engines/avalanche/pingo.cpp8
-rw-r--r--engines/avalanche/sequence.cpp11
-rw-r--r--engines/avalanche/timer.cpp167
18 files changed, 3236 insertions, 3466 deletions
diff --git a/engines/avalanche/animation.cpp b/engines/avalanche/animation.cpp
index d274591fde..0593b046af 100644
--- a/engines/avalanche/animation.cpp
+++ b/engines/avalanche/animation.cpp
@@ -30,8 +30,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/animation.h"
#include "avalanche/dialogs.h"
-#include "avalanche/lucerna.h"
-#include "avalanche/gyro.h"
#include "avalanche/background.h"
#include "avalanche/sequence.h"
#include "avalanche/timer.h"
@@ -149,8 +147,8 @@ void AnimationType::turn(byte whichway) {
void AnimationType::appear(int16 wx, int16 wy, byte wf) {
_x = (wx / 8) * 8;
_y = wy;
- _oldX[_anim->_vm->_gyro->_cp] = wx;
- _oldY[_anim->_vm->_gyro->_cp] = wy;
+ _oldX[_anim->_vm->_avalot->_cp] = wx;
+ _oldY[_anim->_vm->_avalot->_cp] = wy;
turn(wf);
_visible = true;
_moveX = 0;
@@ -182,9 +180,9 @@ void AnimationType::walk() {
r._y2 = _y + _info._yLength + 2;
}
- if (!_anim->_vm->_gyro->_doingSpriteRun) {
- _oldX[_anim->_vm->_gyro->_cp] = _x;
- _oldY[_anim->_vm->_gyro->_cp] = _y;
+ if (!_anim->_vm->_avalot->_doingSpriteRun) {
+ _oldX[_anim->_vm->_avalot->_cp] = _x;
+ _oldY[_anim->_vm->_avalot->_cp] = _y;
if (_homing)
homeStep();
_x += _moveX;
@@ -197,40 +195,40 @@ void AnimationType::walk() {
return;
}
- byte magicColor = _anim->checkFeet(_x, _x + _info._xLength, _oldY[_anim->_vm->_gyro->_cp], _y, _info._yLength) - 1;
+ byte magicColor = _anim->checkFeet(_x, _x + _info._xLength, _oldY[_anim->_vm->_avalot->_cp], _y, _info._yLength) - 1;
// -1 is because the modified array indexes of magics[] compared to Pascal .
- if ((magicColor != 255) & (!_anim->_vm->_gyro->_doingSpriteRun)) {
- MagicType *magic = &_anim->_vm->_gyro->_magics[magicColor];
+ if ((magicColor != 255) & (!_anim->_vm->_avalot->_doingSpriteRun)) {
+ MagicType *magic = &_anim->_vm->_avalot->_magics[magicColor];
switch (magic->_operation) {
- case Gyro::kMagicExclaim:
+ case Avalot::kMagicExclaim:
bounce();
_anim->_mustExclaim = true;
_anim->_sayWhat = magic->_data;
break;
- case Gyro::kMagicBounce:
+ case Avalot::kMagicBounce:
bounce();
break;
- case Gyro::kMagicTransport:
+ case Avalot::kMagicTransport:
_anim->flipRoom(magic->_data >> 8, magic->_data & 0xff);
break;
- case Gyro::kMagicUnfinished: {
+ case Avalot::kMagicUnfinished: {
bounce();
Common::String tmpStr = Common::String::format("%c%cSorry.%cThis place is not available yet!", Dialogs::kControlBell, Dialogs::kControlCenter, Dialogs::kControlRoman);
_anim->_vm->_dialogs->displayText(tmpStr);
}
break;
- case Gyro::kMagicSpecial:
+ case Avalot::kMagicSpecial:
_anim->callSpecial(magic->_data);
break;
- case Gyro::kMagicOpenDoor:
+ case Avalot::kMagicOpenDoor:
_anim->openDoor(magic->_data >> 8, magic->_data & 0xff, magicColor);
break;
}
}
}
- if (!_anim->_vm->_gyro->_doingSpriteRun) {
+ if (!_anim->_vm->_avalot->_doingSpriteRun) {
_count++;
if (((_moveX != 0) || (_moveY != 0)) && (_count > 1)) {
_stepNum++;
@@ -242,13 +240,13 @@ void AnimationType::walk() {
}
void AnimationType::bounce() {
- _x = _oldX[_anim->_vm->_gyro->_cp];
- _y = _oldY[_anim->_vm->_gyro->_cp];
+ _x = _oldX[_anim->_vm->_avalot->_cp];
+ _y = _oldY[_anim->_vm->_avalot->_cp];
if (_doCheck)
_anim->stopWalking();
else
stopWalk();
- _anim->_vm->_lucerna->drawDirection();
+ _anim->_vm->_avalot->drawDirection();
}
int8 AnimationType::getSign(int16 val) {
@@ -261,7 +259,7 @@ int8 AnimationType::getSign(int16 val) {
}
void AnimationType::walkTo(byte pedNum) {
- PedType *curPed = &_anim->_vm->_gyro->_peds[pedNum];
+ PedType *curPed = &_anim->_vm->_avalot->_peds[pedNum];
setSpeed(getSign(curPed->_x - _x) * 4, getSign(curPed->_y - _y));
_homingX = curPed->_x - _info._xLength / 2;
@@ -329,10 +327,10 @@ void AnimationType::stopWalk() {
}
void AnimationType::chatter() {
- _anim->_vm->_gyro->_talkX = _x + _info._xLength / 2;
- _anim->_vm->_gyro->_talkY = _y;
- _anim->_vm->_gyro->_talkFontColor = _stat._fgBubbleCol;
- _anim->_vm->_gyro->_talkBackgroundColor = _stat._bgBubbleCol;
+ _anim->_vm->_avalot->_talkX = _x + _info._xLength / 2;
+ _anim->_vm->_avalot->_talkY = _y;
+ _anim->_vm->_avalot->_talkFontColor = _stat._fgBubbleCol;
+ _anim->_vm->_avalot->_talkBackgroundColor = _stat._bgBubbleCol;
}
void AnimationType::remove() {
@@ -370,7 +368,7 @@ void Animation::loadAnims() {
}
byte Animation::checkFeet(int16 x1, int16 x2, int16 oy, int16 y, byte yl) {
- if (!_vm->_gyro->_alive)
+ if (!_vm->_avalot->_alive)
return 0;
if (x1 < 0)
@@ -415,8 +413,8 @@ void Animation::catacombMove(byte ped) {
// XY_uint16 is cat_x+cat_y*256. Thus, every room in the
// catacombs has a different number for it.
- xy_uint16 = _vm->_gyro->_catacombX + _vm->_gyro->_catacombY * 256;
- _vm->_gyro->_geidaSpin = 0;
+ xy_uint16 = _vm->_avalot->_catacombX + _vm->_avalot->_catacombY * 256;
+ _vm->_avalot->_geidaSpin = 0;
switch (xy_uint16) {
case 1801: // Exit catacombs
@@ -435,78 +433,78 @@ void Animation::catacombMove(byte ped) {
case 2307:
flipRoom(kRoomLusties, 5);
_vm->_dialogs->displayText("Oh no... here we go again...");
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_userMovesAvvy = false;
_sprites[0]._moveY = 1;
_sprites[0]._moveX = 0;
return;
}
- if (!_vm->_gyro->_enterCatacombsFromLustiesRoom)
- _vm->_lucerna->loadRoom(29);
- here = _vm->_gyro->kCatacombMap[_vm->_gyro->_catacombY - 1][_vm->_gyro->_catacombX - 1];
+ if (!_vm->_avalot->_enterCatacombsFromLustiesRoom)
+ _vm->_avalot->loadRoom(29);
+ here = _vm->_avalot->kCatacombMap[_vm->_avalot->_catacombY - 1][_vm->_avalot->_catacombX - 1];
switch (here & 0xf) { // West.
case 0: // no connection (wall)
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27);
break;
case 0x1: // no connection (wall + shield),
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 28); // ...shield.
break;
case 0x2: // wall with door
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 29); // ...door.
break;
case 0x3: // wall with door and shield
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 29); // ...door, and...
_vm->_background->drawBackgroundSprite(-1, -1, 28); // ...shield.
break;
case 0x4: // no connection (wall + window),
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 4); // ...window.
break;
case 0x5: // wall with door and window
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 29); // ...door, and...
_vm->_background->drawBackgroundSprite(-1, -1, 4); // ...window.
break;
case 0x6: // no connection (wall + torches),
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicNothing; // No door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicNothing; // No door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 6); // ...torches.
break;
case 0x7: // wall with door and torches
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[4]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[4]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 27); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 29); // ...door, and...
_vm->_background->drawBackgroundSprite(-1, -1, 6); // ...torches.
break;
case 0xf: // straight-through corridor.
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicNothing; // Sloping wall.
- _vm->_gyro->_magics[2]._operation = Gyro::kMagicSpecial; // Straight wall.
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicNothing; // Sloping wall.
+ _vm->_avalot->_magics[2]._operation = Avalot::kMagicSpecial; // Straight wall.
break;
}
@@ -514,127 +512,127 @@ void Animation::catacombMove(byte ped) {
switch ((here & 0xf0) >> 4) { // East
case 0: // no connection (wall)
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 18);
break;
case 0x1: // no connection (wall + window),
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 18); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 19); // ...window.
break;
case 0x2: // wall with door
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 18); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 20); // ...door.
break;
case 0x3: // wall with door and window
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 18); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 19); // ...door, and...
_vm->_background->drawBackgroundSprite(-1, -1, 20); // ...window.
break;
case 0x6: // no connection (wall + torches),
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicNothing; // No door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicNothing; // No door.
_vm->_background->drawBackgroundSprite(-1, -1, 18); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 17); // ...torches.
break;
case 0x7: // wall with door and torches
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicSpecial; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 18); // Wall, plus...
_vm->_background->drawBackgroundSprite(-1, -1, 20); // ...door, and...
_vm->_background->drawBackgroundSprite(-1, -1, 17); // ...torches.
break;
case 0xf: // straight-through corridor.
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicNothing; // Sloping wall.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicSpecial; // Straight wall.
- _vm->_gyro->_portals[6]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicNothing; // Sloping wall.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicSpecial; // Straight wall.
+ _vm->_avalot->_portals[6]._operation = Avalot::kMagicNothing; // Door.
break;
}
switch ((here & 0xf00) >> 8) { // South
case 0: // No connection.
- _vm->_gyro->_magics[6]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_magics[12]._operation = Gyro::kMagicBounce;
+ _vm->_avalot->_magics[6]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_magics[12]._operation = Avalot::kMagicBounce;
break;
case 0x1:
_vm->_background->drawBackgroundSprite(-1, -1, 21);
- if ((xy_uint16 == 2051) && (_vm->_gyro->_geidaFollows))
- _vm->_gyro->_magics[12]._operation = Gyro::kMagicExclaim;
+ if ((xy_uint16 == 2051) && (_vm->_avalot->_geidaFollows))
+ _vm->_avalot->_magics[12]._operation = Avalot::kMagicExclaim;
else
- _vm->_gyro->_magics[12]._operation = Gyro::kMagicSpecial; // Right exit south.
+ _vm->_avalot->_magics[12]._operation = Avalot::kMagicSpecial; // Right exit south.
- _vm->_gyro->_magics[6]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicBounce;
+ _vm->_avalot->_magics[6]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicBounce;
break;
case 0x2:
_vm->_background->drawBackgroundSprite(-1, -1, 22);
- _vm->_gyro->_magics[6]._operation = Gyro::kMagicSpecial; // Middle exit south.
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_magics[12]._operation = Gyro::kMagicBounce;
+ _vm->_avalot->_magics[6]._operation = Avalot::kMagicSpecial; // Middle exit south.
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_magics[12]._operation = Avalot::kMagicBounce;
break;
case 0x3:
_vm->_background->drawBackgroundSprite(-1, -1, 23);
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicSpecial; // Left exit south.
- _vm->_gyro->_magics[6]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_magics[12]._operation = Gyro::kMagicBounce;
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicSpecial; // Left exit south.
+ _vm->_avalot->_magics[6]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_magics[12]._operation = Avalot::kMagicBounce;
break;
}
switch ((here & 0xf000) >> 12) { // North
case 0: // No connection
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicNothing; // Door.
break;
// LEFT handles:
#if 0
case 0x1:
_vm->_celer->show_one(-1, -1, 4);
- _vm->_gyro->magics[1].op = _vm->_gyro->bounces; // { Left exit north. } { Change magic number! }
- _vm->_gyro->portals[12].op = _vm->_gyro->special; // { Door. }
+ _vm->_avalot->magics[1].op = _vm->_avalot->bounces; // { Left exit north. } { Change magic number! }
+ _vm->_avalot->portals[12].op = _vm->_avalot->special; // { Door. }
break;
#endif
case 0x2:
_vm->_background->drawBackgroundSprite(-1, -1, 3);
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicBounce; // Middle exit north.
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicBounce; // Middle exit north.
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicSpecial; // Door.
break;
#if 0
case 0x3:
_vm->_celer->show_one(-1, -1, 4);
- _vm->_gyro->magics[1].op = _vm->_gyro->bounces; // { Right exit north. } { Change magic number! }
- _vm->_gyro->portals[12].op = _vm->_gyro->special; // { Door. }
+ _vm->_avalot->magics[1].op = _vm->_avalot->bounces; // { Right exit north. } { Change magic number! }
+ _vm->_avalot->portals[12].op = _vm->_avalot->special; // { Door. }
break;
// RIGHT handles:
case 0x4:
_vm->_celer->show_one(-1, -1, 3);
- _vm->_gyro->magics[1].op = _vm->_gyro->bounces; // { Left exit north. } { Change magic number! }
- _vm->_gyro->portals[12].op = _vm->_gyro->special; // { Door. }
+ _vm->_avalot->magics[1].op = _vm->_avalot->bounces; // { Left exit north. } { Change magic number! }
+ _vm->_avalot->portals[12].op = _vm->_avalot->special; // { Door. }
break;
#endif
case 0x5:
_vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicBounce; // Middle exit north.
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicBounce; // Middle exit north.
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicSpecial; // Door.
break;
#if 0
case 0x6:
_vm->_celer->show_one(-1, -1, 3);
- _vm->_gyro->magics[1].op = _vm->_gyro->bounces; // { Right exit north. }
- _vm->_gyro->portals[12].op = _vm->_gyro->special; // { Door. }
+ _vm->_avalot->magics[1].op = _vm->_avalot->bounces; // { Right exit north. }
+ _vm->_avalot->portals[12].op = _vm->_avalot->special; // { Door. }
break;
#endif
// ARCHWAYS:
@@ -648,25 +646,25 @@ void Animation::catacombMove(byte ped) {
if (((here & 0xf000) >> 12) == 0x9)
_vm->_background->drawBackgroundSprite(-1, -1, 31);
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicSpecial; // Middle arch north.
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicSpecial; // Middle arch north.
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicNothing; // Door.
break;
// DECORATIONS:
case 0xd: // No connection + WINDOW
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 13);
break;
case 0xe: // No connection + TORCH
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicBounce;
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicNothing; // Door.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicBounce;
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicNothing; // Door.
_vm->_background->drawBackgroundSprite(-1, -1, 7);
break;
// Recessed door:
case 0xf:
- _vm->_gyro->_magics[0]._operation = Gyro::kMagicNothing; // Door to Geida's room.
+ _vm->_avalot->_magics[0]._operation = Avalot::kMagicNothing; // Door to Geida's room.
_vm->_background->drawBackgroundSprite(-1, -1, 0);
- _vm->_gyro->_portals[3]._operation = Gyro::kMagicSpecial; // Door.
+ _vm->_avalot->_portals[3]._operation = Avalot::kMagicSpecial; // Door.
break;
}
@@ -702,7 +700,7 @@ void Animation::catacombMove(byte ped) {
break; // [1,1] : the other two.
}
- if ((_vm->_gyro->_geidaFollows) && (ped > 0)) {
+ if ((_vm->_avalot->_geidaFollows) && (ped > 0)) {
if (!_sprites[1]._quick) // If we don't already have her...
_sprites[1].init(5, true, this); // ...Load Geida.
appearPed(1, geidaPed(ped));
@@ -711,36 +709,36 @@ void Animation::catacombMove(byte ped) {
}
}
-// This proc gets called whenever you touch a line defined as _vm->_gyro->special.
+// This proc gets called whenever you touch a line defined as _vm->_avalot->special.
void Animation::dawnDelay() {
_vm->_timer->addTimer(2, Timer::kProcDawnDelay, Timer::kReasonDawndelay);
}
void Animation::callSpecial(uint16 which) {
switch (which) {
- case 1: // _vm->_gyro->special 1: Room 22: top of stairs.
+ case 1: // _vm->_avalot->special 1: Room 22: top of stairs.
_vm->_background->drawBackgroundSprite(-1, -1, 0);
- _vm->_gyro->_brummieStairs = 1;
- _vm->_gyro->_magics[9]._operation = Gyro::kMagicNothing;
+ _vm->_avalot->_brummieStairs = 1;
+ _vm->_avalot->_magics[9]._operation = Avalot::kMagicNothing;
_vm->_timer->addTimer(10, Timer::kProcStairs, Timer::kReasonBrummieStairs);
stopWalking();
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_userMovesAvvy = false;
break;
- case 2: // _vm->_gyro->special 2: Room 22: bottom of stairs.
- _vm->_gyro->_brummieStairs = 3;
- _vm->_gyro->_magics[10]._operation = Gyro::kMagicNothing;
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicExclaim;
- _vm->_gyro->_magics[11]._data = 5;
- _vm->_gyro->_magics[3]._operation = Gyro::kMagicBounce; // Now works as planned!
+ case 2: // _vm->_avalot->special 2: Room 22: bottom of stairs.
+ _vm->_avalot->_brummieStairs = 3;
+ _vm->_avalot->_magics[10]._operation = Avalot::kMagicNothing;
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicExclaim;
+ _vm->_avalot->_magics[11]._data = 5;
+ _vm->_avalot->_magics[3]._operation = Avalot::kMagicBounce; // Now works as planned!
stopWalking();
_vm->_dialogs->displayScrollChain('q', 26);
- _vm->_gyro->_userMovesAvvy = true;
+ _vm->_avalot->_userMovesAvvy = true;
break;
- case 3: // _vm->_gyro->special 3: Room 71: triggers dart.
+ case 3: // _vm->_avalot->special 3: Room 71: triggers dart.
_sprites[0].bounce(); // Must include that.
- if (!_vm->_gyro->_arrowTriggered) {
- _vm->_gyro->_arrowTriggered = true;
+ if (!_vm->_avalot->_arrowTriggered) {
+ _vm->_avalot->_arrowTriggered = true;
appearPed(1, 3); // The dart starts at ped 4, and...
_sprites[1].walkTo(4); // flies to ped 5 (- 1 for pascal to C conversion).
_sprites[1]._facingDir = kDirUp; // Only face.
@@ -754,80 +752,80 @@ void Animation::callSpecial(uint16 which) {
}
break;
case 4: // This is the ghost room link.
- _vm->_lucerna->dusk();
+ _vm->_avalot->dusk();
_sprites[0].turn(kDirRight); // you'll see this after we get back from bootstrap
_vm->_timer->addTimer(1, Timer::kProcGhostRoomPhew, Timer::kReasonGhostRoomPhew);
//_vm->_enid->backToBootstrap(3); TODO: Replace it with proper ScummVM-friendly function(s)! Do not remove until then!
break;
case 5:
- if (_vm->_gyro->_friarWillTieYouUp) {
- // _vm->_gyro->special 5: Room 42: touched tree, and get tied up.
- _vm->_gyro->_magics[4]._operation = Gyro::kMagicBounce; // Boundary effect is now working again.
+ if (_vm->_avalot->_friarWillTieYouUp) {
+ // _vm->_avalot->special 5: Room 42: touched tree, and get tied up.
+ _vm->_avalot->_magics[4]._operation = Avalot::kMagicBounce; // Boundary effect is now working again.
_vm->_dialogs->displayScrollChain('q', 35);
_sprites[0].remove();
//tr[1].vanishifstill:=true;
_vm->_background->drawBackgroundSprite(-1, -1, 1);
_vm->_dialogs->displayScrollChain('q', 36);
- _vm->_gyro->_tiedUp = true;
- _vm->_gyro->_friarWillTieYouUp = false;
+ _vm->_avalot->_tiedUp = true;
+ _vm->_avalot->_friarWillTieYouUp = false;
_sprites[1].walkTo(2);
_sprites[1]._vanishIfStill = true;
_sprites[1]._doCheck = true; // One of them must have Check_Me switched on.
- _vm->_gyro->_whereIs[Gyro::kPeopleFriarTuck - 150] = kRoomDummy; // Not here, then.
+ _vm->_avalot->_whereIs[Avalot::kPeopleFriarTuck - 150] = kRoomDummy; // Not here, then.
_vm->_timer->addTimer(364, Timer::kProcHangAround, Timer::kReasonHangingAround);
}
break;
- case 6: // _vm->_gyro->special 6: fall down oubliette.
- _vm->_gyro->_userMovesAvvy = false;
+ case 6: // _vm->_avalot->special 6: fall down oubliette.
+ _vm->_avalot->_userMovesAvvy = false;
_sprites[0]._moveX = 3;
_sprites[0]._moveY = 0;
_sprites[0]._facingDir = kDirRight;
_vm->_timer->addTimer(1, Timer::kProcFallDownOubliette, Timer::kReasonFallingDownOubliette);
break;
- case 7: // _vm->_gyro->special 7: stop falling down oubliette.
+ case 7: // _vm->_avalot->special 7: stop falling down oubliette.
_sprites[0]._visible = false;
- _vm->_gyro->_magics[9]._operation = Gyro::kMagicNothing;
+ _vm->_avalot->_magics[9]._operation = Avalot::kMagicNothing;
stopWalking();
_vm->_timer->loseTimer(Timer::kReasonFallingDownOubliette);
- //_vm->_lucerna->mblit(12, 80, 38, 160, 3, 0);
- //_vm->_lucerna->mblit(12, 80, 38, 160, 3, 1);
+ //_vm->_avalot->mblit(12, 80, 38, 160, 3, 0);
+ //_vm->_avalot->mblit(12, 80, 38, 160, 3, 1);
_vm->_dialogs->displayText("Oh dear, you seem to be down the bottom of an oubliette.");
_vm->_timer->addTimer(200, Timer::kProcMeetAvaroid, Timer::kReasonMeetingAvaroid);
break;
- case 8: // _vm->_gyro->special 8: leave du Lustie's room.
- if ((_vm->_gyro->_geidaFollows) && (!_vm->_gyro->_lustieIsAsleep)) {
+ case 8: // _vm->_avalot->special 8: leave du Lustie's room.
+ if ((_vm->_avalot->_geidaFollows) && (!_vm->_avalot->_lustieIsAsleep)) {
_vm->_dialogs->displayScrollChain('q', 63);
_sprites[1].turn(kDirDown);
_sprites[1].stopWalk();
_sprites[1]._callEachStepFl = false; // Geida
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
}
break;
- case 9: // _vm->_gyro->special 9: lose Geida to Robin Hood...
- if (!_vm->_gyro->_geidaFollows)
+ case 9: // _vm->_avalot->special 9: lose Geida to Robin Hood...
+ if (!_vm->_avalot->_geidaFollows)
return; // DOESN'T COUNT: no Geida.
_sprites[1]._callEachStepFl = false; // She no longer follows Avvy around.
_sprites[1].walkTo(3); // She walks to somewhere...
_sprites[0].remove(); // Lose Avvy.
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_userMovesAvvy = false;
_vm->_timer->addTimer(40, Timer::kProcRobinHoodAndGeida, Timer::kReasonRobinHoodAndGeida);
break;
- case 10: // _vm->_gyro->special 10: transfer north in catacombs.
- if ((_vm->_gyro->_catacombX == 4) && (_vm->_gyro->_catacombY == 1)) {
+ case 10: // _vm->_avalot->special 10: transfer north in catacombs.
+ if ((_vm->_avalot->_catacombX == 4) && (_vm->_avalot->_catacombY == 1)) {
// Into Geida's room.
- if (_vm->_gyro->_objects[Gyro::kObjectKey - 1])
+ if (_vm->_avalot->_objects[Avalot::kObjectKey - 1])
_vm->_dialogs->displayScrollChain('q', 62);
else {
_vm->_dialogs->displayScrollChain('q', 61);
return;
}
}
- _vm->_lucerna->dusk();
- _vm->_gyro->_catacombY--;
+ _vm->_avalot->dusk();
+ _vm->_avalot->_catacombY--;
catacombMove(4);
- if (_vm->_gyro->_room != kRoomCatacombs)
+ if (_vm->_avalot->_room != kRoomCatacombs)
return;
- switch ((_vm->_gyro->kCatacombMap[_vm->_gyro->_catacombY - 1][_vm->_gyro->_catacombX - 1] & 0xf00) >> 8) {
+ switch ((_vm->_avalot->kCatacombMap[_vm->_avalot->_catacombY - 1][_vm->_avalot->_catacombX - 1] & 0xf00) >> 8) {
case 0x1:
appearPed(0, 11);
break;
@@ -839,29 +837,29 @@ void Animation::callSpecial(uint16 which) {
}
dawnDelay();
break;
- case 11: // _vm->_gyro->special 11: transfer east in catacombs.
- _vm->_lucerna->dusk();
- _vm->_gyro->_catacombX++;
+ case 11: // _vm->_avalot->special 11: transfer east in catacombs.
+ _vm->_avalot->dusk();
+ _vm->_avalot->_catacombX++;
catacombMove(1);
- if (_vm->_gyro->_room != kRoomCatacombs)
+ if (_vm->_avalot->_room != kRoomCatacombs)
return;
appearPed(0, 0);
dawnDelay();
break;
- case 12: // _vm->_gyro->special 12: transfer south in catacombs.
- _vm->_lucerna->dusk();
- _vm->_gyro->_catacombY += 1;
+ case 12: // _vm->_avalot->special 12: transfer south in catacombs.
+ _vm->_avalot->dusk();
+ _vm->_avalot->_catacombY += 1;
catacombMove(2);
- if (_vm->_gyro->_room != kRoomCatacombs)
+ if (_vm->_avalot->_room != kRoomCatacombs)
return;
appearPed(0, 1);
dawnDelay();
break;
- case 13: // _vm->_gyro->special 13: transfer west in catacombs.
- _vm->_lucerna->dusk();
- _vm->_gyro->_catacombX--;
+ case 13: // _vm->_avalot->special 13: transfer west in catacombs.
+ _vm->_avalot->dusk();
+ _vm->_avalot->_catacombX--;
catacombMove(3);
- if (_vm->_gyro->_room != kRoomCatacombs)
+ if (_vm->_avalot->_room != kRoomCatacombs)
return;
appearPed(0, 2);
dawnDelay();
@@ -877,7 +875,7 @@ void Animation::callSpecial(uint16 which) {
* @remarks Originally called 'open_the_door'
*/
void Animation::openDoor(byte whither, byte ped, byte magicnum) {
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomOutsideYours:
case kRoomOutsideNottsPub:
case kRoomOutsideDucks:
@@ -904,7 +902,7 @@ void Animation::openDoor(byte whither, byte ped, byte magicnum) {
case kRoomLusties:
switch (magicnum) {
case 14:
- if (_vm->_gyro->_avvysInTheCupboard) {
+ if (_vm->_avalot->_avvysInTheCupboard) {
hideInCupboard();
_vm->_sequence->firstShow(8);
_vm->_sequence->thenShow(7);
@@ -935,12 +933,12 @@ void Animation::updateSpeed() {
_sprites[0]._moveX = (_sprites[0]._moveX / 3) * _sprites[0]._speedX;
- if (_sprites[0]._speedX == _vm->_gyro->kRun)
+ if (_sprites[0]._speedX == _vm->_avalot->kRun)
_vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorYellow);
else
_vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorYellow);
- if (_sprites[0]._speedX == _vm->_gyro->kRun)
+ if (_sprites[0]._speedX == _vm->_avalot->kRun)
_vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorLightblue);
else
_vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorLightblue);
@@ -977,7 +975,7 @@ void Animation::changeDirection(byte t, byte dir) {
void Animation::appearPed(byte sprNum, byte pedNum) {
AnimationType *curSpr = &_sprites[sprNum];
- PedType *curPed = &_vm->_gyro->_peds[pedNum];
+ PedType *curPed = &_vm->_avalot->_peds[pedNum];
curSpr->appear(curPed->_x - curSpr->_info._xLength / 2, curPed->_y - curSpr->_info._yLength, curPed->_direction);
changeDirection(sprNum, curPed->_direction);
}
@@ -1037,15 +1035,15 @@ void Animation::arrowProcs(byte tripnum) {
_vm->_dialogs->displayScrollChain('Q', 47); // Complaint!
_sprites[tripnum].remove(); // Deallocate the arrow.
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
- _vm->_gyro->_userMovesAvvy = false; // Stop the user from moving him.
+ _vm->_avalot->_userMovesAvvy = false; // Stop the user from moving him.
_vm->_timer->addTimer(55, Timer::kProcNaughtyDuke, Timer::kReasonNaughtyDuke);
}
} else { // Arrow has hit the wall!
_sprites[tripnum].remove(); // Deallocate the arrow.
_vm->_background->drawBackgroundSprite(-1, -1, 2); // Show pic of arrow stuck into the door.
- _vm->_gyro->_arrowInTheDoor = true; // So that we can pick it up.
+ _vm->_avalot->_arrowInTheDoor = true; // So that we can pick it up.
}
}
@@ -1088,21 +1086,21 @@ void Animation::spin(byte whichway, byte &tripnum) {
if (_sprites[tripnum]._id == 2)
return; // Not for Spludwick
- _vm->_gyro->_geidaSpin += 1;
- _vm->_gyro->_geidaTime = 20;
- if (_vm->_gyro->_geidaSpin == 5) {
+ _vm->_avalot->_geidaSpin += 1;
+ _vm->_avalot->_geidaTime = 20;
+ if (_vm->_avalot->_geidaSpin == 5) {
_vm->_dialogs->displayText("Steady on, Avvy, you'll make the poor girl dizzy!");
- _vm->_gyro->_geidaSpin = 0;
- _vm->_gyro->_geidaTime = 0; // knock out records
+ _vm->_avalot->_geidaSpin = 0;
+ _vm->_avalot->_geidaTime = 0; // knock out records
}
}
}
void Animation::geidaProcs(byte tripnum) {
- if (_vm->_gyro->_geidaTime > 0) {
- _vm->_gyro->_geidaTime--;
- if (_vm->_gyro->_geidaTime == 0)
- _vm->_gyro->_geidaSpin = 0;
+ if (_vm->_avalot->_geidaTime > 0) {
+ _vm->_avalot->_geidaTime--;
+ if (_vm->_avalot->_geidaTime == 0)
+ _vm->_avalot->_geidaSpin = 0;
}
if (_sprites[tripnum]._y < (_sprites[0]._y - 2)) {
@@ -1178,7 +1176,7 @@ void Animation::drawSprites() {
* @remarks Originally called 'trippancy_link'
*/
void Animation::animLink() {
- if (_vm->_menu->isActive() | _vm->_gyro->_onToolbar | _vm->_gyro->_seeScroll)
+ if (_vm->_menu->isActive() | _vm->_avalot->_onToolbar | _vm->_avalot->_seeScroll)
return;
for (int16 i = 0; i < kSpriteNumbMax; i++) {
if (_sprites[i]._quick && _sprites[i]._visible)
@@ -1222,7 +1220,7 @@ void Animation::animLink() {
void Animation::stopWalking() {
_sprites[0].stopWalk();
_direction = kDirStopped;
- if (_vm->_gyro->_alive)
+ if (_vm->_avalot->_alive)
_sprites[0]._stepNum = 1;
}
@@ -1231,16 +1229,16 @@ void Animation::stopWalking() {
* @remarks Originally called 'hide_in_the_cupboard'
*/
void Animation::hideInCupboard() {
- if (_vm->_gyro->_avvysInTheCupboard) {
- if (_vm->_gyro->_wearing == Parser::kNothing) {
+ if (_vm->_avalot->_avvysInTheCupboard) {
+ if (_vm->_avalot->_wearing == Parser::kNothing) {
Common::String tmpStr = Common::String::format("%cAVVY!%cGet dressed first!", Dialogs::kControlItalic, Dialogs::kControlRoman);
_vm->_dialogs->displayText(tmpStr);
} else {
_sprites[0]._visible = true;
- _vm->_gyro->_userMovesAvvy = true;
+ _vm->_avalot->_userMovesAvvy = true;
appearPed(0, 2); // Walk out of the cupboard.
_vm->_dialogs->displayText("You leave the cupboard. Nice to be out of there!");
- _vm->_gyro->_avvysInTheCupboard = false;
+ _vm->_avalot->_avvysInTheCupboard = false;
_vm->_sequence->firstShow(8);
_vm->_sequence->thenShow(7);
_vm->_sequence->startToClose();
@@ -1248,65 +1246,65 @@ void Animation::hideInCupboard() {
} else {
// Not hiding in the cupboard
_sprites[0]._visible = false;
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_userMovesAvvy = false;
Common::String tmpStr = Common::String::format("You walk into the room...%cIt seems to be an empty, " \
"but dusty, cupboard. Hmmmm... you leave the door slightly open to avoid suffocation.", Dialogs::kControlParagraph);
_vm->_dialogs->displayText(tmpStr);
- _vm->_gyro->_avvysInTheCupboard = true;
+ _vm->_avalot->_avvysInTheCupboard = true;
_vm->_background->drawBackgroundSprite(-1, -1, 7);
}
}
void Animation::flipRoom(byte room, byte ped) {
assert((ped > 0) && (ped < 15));
- if (!_vm->_gyro->_alive) {
+ if (!_vm->_avalot->_alive) {
// You can't leave the room if you're dead.
_sprites[0]._moveX = 0;
_sprites[0]._moveY = 0; // Stop him from moving.
return;
}
- if ((room == kRoomDummy) && (_vm->_gyro->_room == kRoomLusties)) {
+ if ((room == kRoomDummy) && (_vm->_avalot->_room == kRoomLusties)) {
hideInCupboard();
return;
}
- if ((_vm->_gyro->_jumpStatus > 0) && (_vm->_gyro->_room == kRoomInsideCardiffCastle)) {
+ if ((_vm->_avalot->_jumpStatus > 0) && (_vm->_avalot->_room == kRoomInsideCardiffCastle)) {
// You can't *jump* out of Cardiff Castle!
_sprites[0]._moveX = 0;
return;
}
- _vm->_lucerna->exitRoom(_vm->_gyro->_room);
- _vm->_lucerna->dusk();
+ _vm->_avalot->exitRoom(_vm->_avalot->_room);
+ _vm->_avalot->dusk();
for (int16 i = 1; i < kSpriteNumbMax; i++) {
if (_sprites[i]._quick)
_sprites[i].remove();
} // Deallocate sprite
- if (_vm->_gyro->_room == kRoomLustiesRoom)
- _vm->_gyro->_enterCatacombsFromLustiesRoom = true;
+ if (_vm->_avalot->_room == kRoomLustiesRoom)
+ _vm->_avalot->_enterCatacombsFromLustiesRoom = true;
- _vm->_lucerna->enterRoom(room, ped);
+ _vm->_avalot->enterRoom(room, ped);
appearPed(0, ped - 1);
- _vm->_gyro->_enterCatacombsFromLustiesRoom = false;
+ _vm->_avalot->_enterCatacombsFromLustiesRoom = false;
_oldDirection = _direction;
_direction = _sprites[0]._facingDir;
- _vm->_lucerna->drawDirection();
+ _vm->_avalot->drawDirection();
- _vm->_lucerna->dawn();
+ _vm->_avalot->dawn();
}
bool Animation::inField(byte which) {
- FieldType *curField = &_vm->_gyro->_fields[which];
+ FieldType *curField = &_vm->_avalot->_fields[which];
int16 yy = _sprites[0]._y + _sprites[0]._info._yLength;
return (_sprites[0]._x >= curField->_x1) && (_sprites[0]._x <= curField->_x2) && (yy >= curField->_y1) && (yy <= curField->_y2);
}
bool Animation::nearDoor() {
- if (_vm->_gyro->_fieldNum < 8) {
+ if (_vm->_avalot->_fieldNum < 8) {
// there ARE no doors here!
return false;
}
@@ -1314,8 +1312,8 @@ bool Animation::nearDoor() {
int16 ux = _sprites[0]._x;
int16 uy = _sprites[0]._y + _sprites[0]._info._yLength;
- for (int i = 8; i < _vm->_gyro->_fieldNum; i++) {
- FieldType *curField = &_vm->_gyro->_fields[i];
+ for (int i = 8; i < _vm->_avalot->_fieldNum; i++) {
+ FieldType *curField = &_vm->_avalot->_fields[i];
if ((ux >= curField->_x1) && (ux <= curField->_x2) && (uy >= curField->_y1) && (uy <= curField->_y2))
return true;
}
@@ -1324,7 +1322,7 @@ bool Animation::nearDoor() {
}
void Animation::handleMoveKey(const Common::Event &event) {
- if (!_vm->_gyro->_userMovesAvvy)
+ if (!_vm->_avalot->_userMovesAvvy)
return;
if (_vm->_menu->_activeMenuItem._activeNow)
diff --git a/engines/avalanche/avalanche.cpp b/engines/avalanche/avalanche.cpp
index 7dcf4a0e1f..673280cb4b 100644
--- a/engines/avalanche/avalanche.cpp
+++ b/engines/avalanche/avalanche.cpp
@@ -64,14 +64,12 @@ AvalancheEngine::~AvalancheEngine() {
delete _avalot;
delete _pingo;
delete _dialogs;
- delete _lucerna;
delete _background;
delete _sequence;
delete _timer;
delete _animation;
delete _menu;
delete _closing;
- delete _gyro;
delete _sound;
}
@@ -80,10 +78,8 @@ Common::ErrorCode AvalancheEngine::initialize() {
_parser = new Parser(this);
_avalot = new Avalot(this);
- _gyro = new Gyro(this);
_pingo = new Pingo(this);
_dialogs = new Dialogs(this);
- _lucerna = new Lucerna(this);
_background = new Background(this);
_sequence = new Sequence(this);
_timer = new Timer(this);
@@ -94,7 +90,7 @@ Common::ErrorCode AvalancheEngine::initialize() {
_graphics->init();
_dialogs->init();
- _lucerna->init();
+ _avalot->init();
_parser->init();
return Common::kNoError;
@@ -119,145 +115,145 @@ const char *AvalancheEngine::getCopyrightString() const {
void AvalancheEngine::synchronize(Common::Serializer &sz) {
//blockwrite(f, dna, sizeof(dna));
sz.syncAsByte(_animation->_direction);
- sz.syncAsByte(_gyro->_carryNum);
+ sz.syncAsByte(_avalot->_carryNum);
for (int i = 0; i < kObjectNum; i++)
- sz.syncAsByte(_gyro->_objects[i]);
- sz.syncAsSint16LE(_gyro->_dnascore);
- sz.syncAsSint32LE(_gyro->_money);
- sz.syncAsByte(_gyro->_room);
- sz.syncAsByte(_gyro->_wearing);
- sz.syncAsByte(_gyro->_sworeNum);
- sz.syncAsByte(_gyro->_saveNum);
- sz.syncBytes(_gyro->_roomCount, 100);
- sz.syncAsByte(_gyro->_alcoholLevel);
- sz.syncAsByte(_gyro->_playedNim);
- sz.syncAsByte(_gyro->_wonNim);
- sz.syncAsByte(_gyro->_wineState);
- sz.syncAsByte(_gyro->_cwytalotGone);
- sz.syncAsByte(_gyro->_passwordNum);
- sz.syncAsByte(_gyro->_aylesIsAwake);
- sz.syncAsByte(_gyro->_drawbridgeOpen);
- sz.syncAsByte(_gyro->_avariciusTalk);
- sz.syncAsByte(_gyro->_boughtOnion);
- sz.syncAsByte(_gyro->_rottenOnion);
- sz.syncAsByte(_gyro->_onionInVinegar);
- sz.syncAsByte(_gyro->_givenToSpludwick);
- sz.syncAsByte(_gyro->_brummieStairs);
- sz.syncAsByte(_gyro->_cardiffQuestionNum);
- sz.syncAsByte(_gyro->_passedCwytalotInHerts);
- sz.syncAsByte(_gyro->_avvyIsAwake);
- sz.syncAsByte(_gyro->_avvyInBed);
- sz.syncAsByte(_gyro->_userMovesAvvy);
- sz.syncAsByte(_gyro->_npcFacing);
- sz.syncAsByte(_gyro->_givenBadgeToIby);
- sz.syncAsByte(_gyro->_friarWillTieYouUp);
- sz.syncAsByte(_gyro->_tiedUp);
- sz.syncAsByte(_gyro->_boxContent);
- sz.syncAsByte(_gyro->_talkedToCrapulus);
- sz.syncAsByte(_gyro->_jacquesState);
- sz.syncAsByte(_gyro->_bellsAreRinging);
- sz.syncAsByte(_gyro->_standingOnDais);
- sz.syncAsByte(_gyro->_takenPen);
- sz.syncAsByte(_gyro->_arrowTriggered);
- sz.syncAsByte(_gyro->_arrowInTheDoor);
+ sz.syncAsByte(_avalot->_objects[i]);
+ sz.syncAsSint16LE(_avalot->_dnascore);
+ sz.syncAsSint32LE(_avalot->_money);
+ sz.syncAsByte(_avalot->_room);
+ sz.syncAsByte(_avalot->_wearing);
+ sz.syncAsByte(_avalot->_sworeNum);
+ sz.syncAsByte(_avalot->_saveNum);
+ sz.syncBytes(_avalot->_roomCount, 100);
+ sz.syncAsByte(_avalot->_alcoholLevel);
+ sz.syncAsByte(_avalot->_playedNim);
+ sz.syncAsByte(_avalot->_wonNim);
+ sz.syncAsByte(_avalot->_wineState);
+ sz.syncAsByte(_avalot->_cwytalotGone);
+ sz.syncAsByte(_avalot->_passwordNum);
+ sz.syncAsByte(_avalot->_aylesIsAwake);
+ sz.syncAsByte(_avalot->_drawbridgeOpen);
+ sz.syncAsByte(_avalot->_avariciusTalk);
+ sz.syncAsByte(_avalot->_boughtOnion);
+ sz.syncAsByte(_avalot->_rottenOnion);
+ sz.syncAsByte(_avalot->_onionInVinegar);
+ sz.syncAsByte(_avalot->_givenToSpludwick);
+ sz.syncAsByte(_avalot->_brummieStairs);
+ sz.syncAsByte(_avalot->_cardiffQuestionNum);
+ sz.syncAsByte(_avalot->_passedCwytalotInHerts);
+ sz.syncAsByte(_avalot->_avvyIsAwake);
+ sz.syncAsByte(_avalot->_avvyInBed);
+ sz.syncAsByte(_avalot->_userMovesAvvy);
+ sz.syncAsByte(_avalot->_npcFacing);
+ sz.syncAsByte(_avalot->_givenBadgeToIby);
+ sz.syncAsByte(_avalot->_friarWillTieYouUp);
+ sz.syncAsByte(_avalot->_tiedUp);
+ sz.syncAsByte(_avalot->_boxContent);
+ sz.syncAsByte(_avalot->_talkedToCrapulus);
+ sz.syncAsByte(_avalot->_jacquesState);
+ sz.syncAsByte(_avalot->_bellsAreRinging);
+ sz.syncAsByte(_avalot->_standingOnDais);
+ sz.syncAsByte(_avalot->_takenPen);
+ sz.syncAsByte(_avalot->_arrowTriggered);
+ sz.syncAsByte(_avalot->_arrowInTheDoor);
if (sz.isSaving()) {
- uint16 like2drinkSize = _gyro->_favouriteDrink.size();
+ uint16 like2drinkSize = _avalot->_favouriteDrink.size();
sz.syncAsUint16LE(like2drinkSize);
for (uint16 i = 0; i < like2drinkSize; i++) {
- char actChr = _gyro->_favouriteDrink[i];
+ char actChr = _avalot->_favouriteDrink[i];
sz.syncAsByte(actChr);
}
- uint16 favourite_songSize = _gyro->_favouriteSong.size();
+ uint16 favourite_songSize = _avalot->_favouriteSong.size();
sz.syncAsUint16LE(favourite_songSize);
for (uint16 i = 0; i < favourite_songSize; i++) {
- char actChr = _gyro->_favouriteSong[i];
+ char actChr = _avalot->_favouriteSong[i];
sz.syncAsByte(actChr);
}
- uint16 worst_place_on_earthSize = _gyro->_worstPlaceOnEarth.size();
+ uint16 worst_place_on_earthSize = _avalot->_worstPlaceOnEarth.size();
sz.syncAsUint16LE(worst_place_on_earthSize);
for (uint16 i = 0; i < worst_place_on_earthSize; i++) {
- char actChr = _gyro->_worstPlaceOnEarth[i];
+ char actChr = _avalot->_worstPlaceOnEarth[i];
sz.syncAsByte(actChr);
}
- uint16 spare_eveningSize = _gyro->_spareEvening.size();
+ uint16 spare_eveningSize = _avalot->_spareEvening.size();
sz.syncAsUint16LE(spare_eveningSize);
for (uint16 i = 0; i < spare_eveningSize; i++) {
- char actChr = _gyro->_spareEvening[i];
+ char actChr = _avalot->_spareEvening[i];
sz.syncAsByte(actChr);
}
} else {
- if (!_gyro->_favouriteDrink.empty())
- _gyro->_favouriteDrink.clear();
+ if (!_avalot->_favouriteDrink.empty())
+ _avalot->_favouriteDrink.clear();
uint16 like2drinkSize = 0;
char actChr = ' ';
sz.syncAsUint16LE(like2drinkSize);
for (uint16 i = 0; i < like2drinkSize; i++) {
sz.syncAsByte(actChr);
- _gyro->_favouriteDrink += actChr;
+ _avalot->_favouriteDrink += actChr;
}
- if (!_gyro->_favouriteSong.empty())
- _gyro->_favouriteSong.clear();
+ if (!_avalot->_favouriteSong.empty())
+ _avalot->_favouriteSong.clear();
uint16 favourite_songSize = 0;
sz.syncAsUint16LE(favourite_songSize);
for (uint16 i = 0; i < favourite_songSize; i++) {
sz.syncAsByte(actChr);
- _gyro->_favouriteSong += actChr;
+ _avalot->_favouriteSong += actChr;
}
- if (!_gyro->_worstPlaceOnEarth.empty())
- _gyro->_worstPlaceOnEarth.clear();
+ if (!_avalot->_worstPlaceOnEarth.empty())
+ _avalot->_worstPlaceOnEarth.clear();
uint16 worst_place_on_earthSize = 0;
sz.syncAsUint16LE(worst_place_on_earthSize);
for (uint16 i = 0; i < worst_place_on_earthSize; i++) {
sz.syncAsByte(actChr);
- _gyro->_worstPlaceOnEarth += actChr;
+ _avalot->_worstPlaceOnEarth += actChr;
}
- if (!_gyro->_spareEvening.empty())
- _gyro->_spareEvening.clear();
+ if (!_avalot->_spareEvening.empty())
+ _avalot->_spareEvening.clear();
uint16 spare_eveningSize = 0;
sz.syncAsUint16LE(spare_eveningSize);
for (uint16 i = 0; i < spare_eveningSize; i++) {
sz.syncAsByte(actChr);
- _gyro->_spareEvening += actChr;
+ _avalot->_spareEvening += actChr;
}
}
- sz.syncAsSint32LE(_gyro->_totalTime);
- sz.syncAsByte(_gyro->_jumpStatus);
- sz.syncAsByte(_gyro->_mushroomGrowing);
- sz.syncAsByte(_gyro->_spludwickAtHome);
- sz.syncAsByte(_gyro->_lastRoom);
- sz.syncAsByte(_gyro->_lastRoomNotMap);
- sz.syncAsByte(_gyro->_crapulusWillTell);
- sz.syncAsByte(_gyro->_enterCatacombsFromLustiesRoom);
- sz.syncAsByte(_gyro->_teetotal);
- sz.syncAsByte(_gyro->_malagauche);
- sz.syncAsByte(_gyro->_drinking);
- sz.syncAsByte(_gyro->_enteredLustiesRoomAsMonk);
- sz.syncAsByte(_gyro->_catacombX);
- sz.syncAsByte(_gyro->_catacombY);
- sz.syncAsByte(_gyro->_avvysInTheCupboard);
- sz.syncAsByte(_gyro->_geidaFollows);
- sz.syncAsByte(_gyro->_geidaSpin);
- sz.syncAsByte(_gyro->_geidaTime);
- sz.syncAsByte(_gyro->_nextBell);
- sz.syncAsByte(_gyro->_givenPotionToGeida);
- sz.syncAsByte(_gyro->_lustieIsAsleep);
- sz.syncAsByte(_gyro->_flipToWhere);
- sz.syncAsByte(_gyro->_flipToPed);
- sz.syncAsByte(_gyro->_beenTiedUp);
- sz.syncAsByte(_gyro->_sittingInPub);
- sz.syncAsByte(_gyro->_spurgeTalkCount);
- sz.syncAsByte(_gyro->_metAvaroid);
- sz.syncAsByte(_gyro->_takenMushroom);
- sz.syncAsByte(_gyro->_givenPenToAyles);
- sz.syncAsByte(_gyro->_askedDogfoodAboutNim);
+ sz.syncAsSint32LE(_avalot->_totalTime);
+ sz.syncAsByte(_avalot->_jumpStatus);
+ sz.syncAsByte(_avalot->_mushroomGrowing);
+ sz.syncAsByte(_avalot->_spludwickAtHome);
+ sz.syncAsByte(_avalot->_lastRoom);
+ sz.syncAsByte(_avalot->_lastRoomNotMap);
+ sz.syncAsByte(_avalot->_crapulusWillTell);
+ sz.syncAsByte(_avalot->_enterCatacombsFromLustiesRoom);
+ sz.syncAsByte(_avalot->_teetotal);
+ sz.syncAsByte(_avalot->_malagauche);
+ sz.syncAsByte(_avalot->_drinking);
+ sz.syncAsByte(_avalot->_enteredLustiesRoomAsMonk);
+ sz.syncAsByte(_avalot->_catacombX);
+ sz.syncAsByte(_avalot->_catacombY);
+ sz.syncAsByte(_avalot->_avvysInTheCupboard);
+ sz.syncAsByte(_avalot->_geidaFollows);
+ sz.syncAsByte(_avalot->_geidaSpin);
+ sz.syncAsByte(_avalot->_geidaTime);
+ sz.syncAsByte(_avalot->_nextBell);
+ sz.syncAsByte(_avalot->_givenPotionToGeida);
+ sz.syncAsByte(_avalot->_lustieIsAsleep);
+ sz.syncAsByte(_avalot->_flipToWhere);
+ sz.syncAsByte(_avalot->_flipToPed);
+ sz.syncAsByte(_avalot->_beenTiedUp);
+ sz.syncAsByte(_avalot->_sittingInPub);
+ sz.syncAsByte(_avalot->_spurgeTalkCount);
+ sz.syncAsByte(_avalot->_metAvaroid);
+ sz.syncAsByte(_avalot->_takenMushroom);
+ sz.syncAsByte(_avalot->_givenPenToAyles);
+ sz.syncAsByte(_avalot->_askedDogfoodAboutNim);
#if 0
@@ -334,7 +330,7 @@ void AvalancheEngine::synchronize(Common::Serializer &sz) {
}
bool AvalancheEngine::canSaveGameStateCurrently() { // TODO: Refine these!!!
- return (!_gyro->_seeScroll && _gyro->_alive);
+ return (!_avalot->_seeScroll && _avalot->_alive);
}
Common::Error AvalancheEngine::saveGameState(int slot, const Common::String &desc) {
@@ -380,7 +376,7 @@ Common::String AvalancheEngine::getSaveFileName(const int slot) {
}
bool AvalancheEngine::canLoadGameStateCurrently() { // TODO: Refine these!!!
- return (!_gyro->_seeScroll);
+ return (!_avalot->_seeScroll);
}
Common::Error AvalancheEngine::loadGameState(int slot) {
@@ -429,29 +425,29 @@ bool AvalancheEngine::loadGame(const int16 slot) {
synchronize(sz);
delete f;
- _gyro->_isLoaded = true;
- _gyro->_seeScroll = true; // This prevents display of the new sprites before the new picture is loaded.
+ _avalot->_isLoaded = true;
+ _avalot->_seeScroll = true; // This prevents display of the new sprites before the new picture is loaded.
- if (_gyro->_holdTheDawn) {
- _gyro->_holdTheDawn = false;
- _lucerna->dawn();
+ if (_avalot->_holdTheDawn) {
+ _avalot->_holdTheDawn = false;
+ _avalot->dawn();
}
_background->forgetBackgroundSprites();
- _lucerna->minorRedraw();
+ _avalot->minorRedraw();
_menu->setup();
- _gyro->_whereIs[Gyro::kPeopleAvalot - 150] = _gyro->_room;
- _gyro->_alive = true;
- _lucerna->refreshObjectList();
+ _avalot->_whereIs[Avalot::kPeopleAvalot - 150] = _avalot->_room;
+ _avalot->_alive = true;
+ _avalot->refreshObjectList();
_animation->updateSpeed();
- _lucerna->drawDirection();
- _gyro->_onToolbar = false;
+ _avalot->drawDirection();
+ _avalot->_onToolbar = false;
_animation->animLink();
_background->updateBackgroundSprites();
Common::String tmpStr = Common::String::format("%cLoaded: %c%s.ASG%c%c%c%s%c%csaved on %s.",
Dialogs::kControlItalic, Dialogs::kControlRoman, description.c_str(), Dialogs::kControlCenter,
- Dialogs::kControlNewLine, Dialogs::kControlNewLine, _gyro->_roomnName.c_str(), Dialogs::kControlNewLine,
+ Dialogs::kControlNewLine, Dialogs::kControlNewLine, _avalot->_roomnName.c_str(), Dialogs::kControlNewLine,
Dialogs::kControlNewLine, expandDate(t.tm_mday, t.tm_mon, t.tm_year).c_str());
_dialogs->displayText(tmpStr);
@@ -468,7 +464,7 @@ Common::String AvalancheEngine::expandDate(int d, int m, int y) {
};
Common::String month = months[m];
- Common::String day = _gyro->intToStr(d);
+ Common::String day = _avalot->intToStr(d);
if (((1 <= d) && (d <= 9)) || ((21 <= d) && (d <= 31)))
switch (d % 10) {
@@ -485,7 +481,7 @@ Common::String AvalancheEngine::expandDate(int d, int m, int y) {
day += "th";
}
- return day + ' ' + month + ' ' + _gyro->intToStr(y + 1900);
+ return day + ' ' + month + ' ' + _avalot->intToStr(y + 1900);
}
void AvalancheEngine::updateEvents() {
@@ -494,10 +490,10 @@ void AvalancheEngine::updateEvents() {
while (_eventMan->pollEvent(event)) {
switch (event.type) {
case Common::EVENT_LBUTTONDOWN:
- _lucerna->_holdLeftMouse = true; // Used in Lucerna::checkclick() and Dropdown::menu_link().
+ _avalot->_holdLeftMouse = true; // Used in Lucerna::checkclick() and Dropdown::menu_link().
break;
case Common::EVENT_LBUTTONUP:
- _lucerna->_holdLeftMouse = false; // Same as above.
+ _avalot->_holdLeftMouse = false; // Same as above.
break;
case Common::EVENT_KEYDOWN:
_avalot->handleKeyDown(event);
@@ -541,7 +537,7 @@ Common::Error AvalancheEngine::run() {
//}
#endif
- } while (!_gyro->_letMeOut && !shouldQuit());
+ } while (!_avalot->_letMeOut && !shouldQuit());
return Common::kNoError;
}
diff --git a/engines/avalanche/avalanche.h b/engines/avalanche/avalanche.h
index 781031c9c1..289cf60d30 100644
--- a/engines/avalanche/avalanche.h
+++ b/engines/avalanche/avalanche.h
@@ -32,10 +32,8 @@
#include "avalanche/graphics.h"
#include "avalanche/parser.h"
#include "avalanche/avalot.h"
-#include "avalanche/gyro.h"
#include "avalanche/pingo.h"
#include "avalanche/dialogs.h"
-#include "avalanche/lucerna.h"
#include "avalanche/background.h"
#include "avalanche/sequence.h"
#include "avalanche/timer.h"
@@ -67,10 +65,8 @@ public:
Parser *_parser;
Avalot *_avalot;
- Gyro *_gyro;
Pingo *_pingo;
Dialogs *_dialogs;
- Lucerna *_lucerna;
Background *_background;
Sequence *_sequence;
Timer *_timer;
diff --git a/engines/avalanche/avalot.cpp b/engines/avalanche/avalot.cpp
index 5dc7fcfcba..e514d7933d 100644
--- a/engines/avalanche/avalot.cpp
+++ b/engines/avalanche/avalot.cpp
@@ -30,10 +30,7 @@
#include "avalanche/avalanche.h"
#include "avalanche/graphics.h"
#include "avalanche/avalot.h"
-#include "avalanche/gyro.h"
#include "avalanche/animation.h"
-#include "avalanche/gyro.h"
-#include "avalanche/lucerna.h"
#include "avalanche/dialogs.h"
#include "avalanche/menu.h"
#include "avalanche/pingo.h"
@@ -41,14 +38,232 @@
#include "avalanche/background.h"
#include "avalanche/closing.h"
+#include "common/file.h"
+#include "common/random.h"
#include "common/str.h"
#include "common/textconsole.h"
#include "common/config-manager.h"
namespace Avalanche {
-Avalot::Avalot(AvalancheEngine *vm) {
+const char *Avalot::kVersionNum = "1.30";
+const char *Avalot::kCopyright = "1995";
+
+const MouseHotspotType Avalot::kMouseHotSpots[9] = {
+ {8,0}, // 1 - up-arrow
+ {0,0}, // 2 - screwdriver
+ {15,6}, // 3 - right-arrow
+ {0,0}, // 4 - fletch
+ {8,7}, // 5 - hourglass
+ {4,0}, // 6 - TTHand
+ {8,5}, // 7- Mark's crosshairs
+ {8,7}, // 8- I-beam
+ {0,0} // 9 - question mark
+};
+
+// Art gallery at 2,1; notice about this at 2,2.
+const int32 Avalot::kCatacombMap[8][8] = {
+ // Geida's room
+ // 1 2 3 | 4 5 6 7 8
+ {0x204, 0x200, 0xd0f0, 0xf0ff, 0xff, 0xd20f, 0xd200, 0x200},
+ {0x50f1, 0x20ff, 0x2ff, 0xff, 0xe0ff, 0x20ff, 0x200f, 0x7210},
+ {0xe3f0, 0xe10f, 0x72f0, 0xff, 0xe0ff, 0xff, 0xff, 0x800f},
+ {0x2201, 0x2030, 0x800f, 0x220, 0x20f, 0x30, 0xff, 0x23f}, // >> Oubliette
+ {0x5024, 0xf3, 0xff, 0x200f, 0x22f0, 0x20f, 0x200, 0x7260},
+ {0xf0, 0x2ff, 0xe2ff, 0xff, 0x200f, 0x50f0, 0x72ff, 0x201f},
+ {0xf6, 0x220f, 0x22f0, 0x30f, 0xf0, 0x20f, 0x8200, 0x2f0}, // <<< In here
+ {0x34, 0x200f, 0x51f0, 0x201f, 0xf1, 0x50ff, 0x902f, 0x2062}
+};
+// vv Stairs trap.
+
+/* Explanation: $NSEW.
+ Nibble N: North.
+ 0 = no connection,
+ 2 = (left,) middle(, right) door with left-hand handle,
+ 5 = (left,) middle(, right) door with right-hand handle,
+ 7 = arch,
+ 8 = arch and 1 north of it,
+ 9 = arch and 2 north of it,
+ D = no connection + WINDOW,
+ E = no connection + TORCH,
+ F = recessed door (to Geida's room.)
+
+ Nibble S: South.
+ 0 = no connection,
+ 1,2,3 = left, middle, right door.
+
+ Nibble E: East.
+ 0 = no connection (wall),
+ 1 = no connection (wall + window),
+ 2 = wall with door,
+ 3 = wall with door and window,
+ 6 = wall with candles,
+ 7 = wall with door and candles,
+ F = straight-through corridor.
+
+ Nibble W: West.
+ 0 = no connection (wall),
+ 1 = no connection (wall + shield),
+ 2 = wall with door,
+ 3 = wall with door and shield,
+ 4 = no connection (window),
+ 5 = wall with door and window,
+ 6 = wall with candles,
+ 7 = wall with door and candles,
+ F = straight-through corridor. */
+
+const char Avalot::kSpludwicksOrder[3] = {kObjectOnion, kObjectInk, kObjectMushroom};
+
+// A quasiped defines how people who aren't sprites talk. For example, quasiped
+// "A" is Dogfood. The rooms aren't stored because I'm leaving that to context.
+const QuasipedType Avalot::kQuasipeds[16] = {
+//_whichPed, _foregroundColor, _room, _backgroundColor, _who
+ {1, kColorLightgray, kRoomArgentPub, kColorBrown, kPeopleDogfood}, // A: Dogfood (screen 19).
+ {2, kColorGreen, kRoomArgentPub, kColorWhite, kPeopleIbythneth}, // B: Ibythneth (screen 19).
+ {2, kColorWhite, kRoomYours, kColorMagenta, kPeopleArkata}, // C: Arkata (screen 1).
+ {2, kColorBlack, kRoomLustiesRoom, kColorRed, kPeopleInvisible}, // D: Hawk (screen 23).
+ {2, kColorLightgreen, kRoomOutsideDucks, kColorBrown, kPeopleTrader}, // E: Trader (screen 50).
+ {5, kColorYellow, kRoomRobins, kColorRed, kPeopleAvalot}, // F: Avvy, tied up (scr.42)
+ {1, kColorBlue, kRoomAylesOffice, kColorWhite, kPeopleAyles}, // G: Ayles (screen 16).
+ {1, kColorBrown, kRoomMusicRoom, kColorWhite, kPeopleJacques}, // H: Jacques (screen 7).
+ {1, kColorLightgreen, kRoomNottsPub, kColorGreen, kPeopleSpurge}, // I: Spurge (screen 47).
+ {2, kColorYellow, kRoomNottsPub, kColorRed, kPeopleAvalot}, // J: Avalot (screen 47).
+ {1, kColorLightgray, kRoomLustiesRoom, kColorBlack, kPeopleDuLustie}, // K: du Lustie (screen 23).
+ {1, kColorYellow, kRoomOubliette, kColorRed, kPeopleAvalot}, // L: Avalot (screen 27).
+ {2, kColorWhite, kRoomOubliette, kColorRed, kPeopleInvisible}, // M: Avaroid (screen 27).
+ {3, kColorLightgray, kRoomArgentPub, kColorDarkgray, kPeopleMalagauche},// N: Malagauche (screen 19).
+ {4, kColorLightmagenta, kRoomNottsPub, kColorRed, kPeoplePort}, // O: Port (screen 47).
+ {1, kColorLightgreen, kRoomDucks, kColorDarkgray, kPeopleDrDuck} // P: Duck (screen 51).
+};
+
+const uint16 Avalot::kNotes[12] = {196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587};
+
+const TuneType Avalot::kTune = {
+ kPitchHigher, kPitchHigher, kPitchLower, kPitchSame, kPitchHigher, kPitchHigher, kPitchLower, kPitchHigher, kPitchHigher, kPitchHigher,
+ kPitchLower, kPitchHigher, kPitchHigher, kPitchSame, kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchHigher,
+ kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchSame, kPitchLower, kPitchHigher, kPitchSame, kPitchLower, kPitchHigher
+};
+
+byte Avalot::_whereIs[29] = {
+ // The Lads
+ kRoomYours, // Avvy
+ kRoomSpludwicks, // Spludwick
+ kRoomOutsideYours, // Crapulus
+ kRoomDucks, // Duck - r__DucksRoom's not defined yet.
+ kRoomArgentPub, // Malagauche
+ kRoomRobins, // Friar Tuck.
+ kRoomDummy, // Robin Hood - can't meet him at the start.
+ kRoomBrummieRoad, // Cwytalot
+ kRoomLustiesRoom, // Baron du Lustie.
+ kRoomOutsideCardiffCastle, // The Duke of Cardiff.
+ kRoomArgentPub, // Dogfood
+ kRoomOutsideDucks, // Trader
+ kRoomArgentPub, // Ibythneth
+ kRoomAylesOffice, // Ayles
+ kRoomNottsPub, // Port
+ kRoomNottsPub, // Spurge
+ kRoomMusicRoom, // Jacques
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ // The Lasses
+ kRoomYours, // Arkata
+ kRoomGeidas, // Geida
+ kRoomDummy, // nobody allocated here!
+ kRoomWiseWomans // The Wise Woman.
+};
+
+Clock::Clock(AvalancheEngine *vm) {
+ _vm = vm;
+ _oldHour = _oldHourAngle = _oldMinute = 17717;
+}
+
+void Clock::update() { // TODO: Move variables from Gyro to here (or at least somewhere nearby), rename them.
+ TimeDate t;
+ _vm->_system->getTimeAndDate(t);
+ _hour = t.tm_hour;
+ _minute = t.tm_min;
+ _second = t.tm_sec;
+
+ _hourAngle = (_hour % 12) * 30 + _minute / 2;
+
+ if (_oldHour != _hour) {
+ plotHands();
+ chime();
+ }
+
+ if (_oldMinute != _minute)
+ plotHands();
+
+ if ((_hour == 0) && (_oldHour != 0) && (_oldHour != 17717)) {
+ Common::String tmpStr = Common::String::format("Good morning!%c%cYes, it's just past " \
+ "midnight. Are you having an all-night Avvy session? Glad you like the game that much!",
+ Dialogs::kControlNewLine, Dialogs::kControlNewLine);
+ _vm->_dialogs->displayText(tmpStr);
+ }
+ _oldHour = _hour;
+ _oldHourAngle = _hourAngle;
+ _oldMinute = _minute;
+}
+
+void Clock::calcHand(uint16 angle, uint16 length, Common::Point &endPoint, byte color) {
+ if (angle > 900) {
+ endPoint.x = 177;
+ return;
+ }
+
+ endPoint = _vm->_graphics->drawArc(_vm->_graphics->_surface, kCenterX, kCenterY, 449 - angle, 450 - angle, length, color);
+}
+
+void Clock::drawHand(const Common::Point &endPoint, byte color) {
+ if (endPoint.x == 177)
+ return;
+
+ _vm->_graphics->_surface.drawLine(kCenterX, kCenterY, endPoint.x, endPoint.y, color);
+}
+
+void Clock::plotHands() {
+ calcHand(_oldHourAngle, 14, _clockHandHour, kColorYellow);
+ calcHand(_oldMinute * 6, 17, _clockHandMinute, kColorYellow);
+ drawHand(_clockHandHour, kColorBrown);
+ drawHand(_clockHandMinute, kColorBrown);
+
+ calcHand(_hourAngle, 14, _clockHandHour, kColorBrown);
+ calcHand(_minute * 6, 17, _clockHandMinute, kColorBrown);
+ drawHand(_clockHandHour, kColorYellow);
+ drawHand(_clockHandMinute, kColorYellow);
+}
+
+void Clock::chime() {
+ warning("STUB: Clock::chime()");
+}
+
+
+Avalot::Avalot(AvalancheEngine *vm) : _fxHidden(false), _clock(vm), _interrogation(0) {
_vm = vm;
+
+ // Needed because of Lucerna::load_also()
+ for (int i = 0; i < 31; i++) {
+ for (int j = 0; j < 2; j++)
+ _also[i][j] = 0;
+ }
+
+ _totalTime = 0;
+}
+
+Avalot::~Avalot() {
+ for (int i = 0; i < 31; i++) {
+ for (int j = 0; j < 2; j++) {
+ if (_also[i][j] != 0) {
+ delete _also[i][j];
+ _also[i][j] = 0;
+ }
+ }
+ }
+
+ for (int i = 0; i < 9; i++) {
+ _digits[i].free();
+ _directions[i].free();
+ }
+ _digits[9].free();
}
void Avalot::handleKeyDown(Common::Event &event) {
@@ -99,9 +314,9 @@ void Avalot::handleKeyDown(Common::Event &event) {
case Common::KEYCODE_HOME:
case Common::KEYCODE_END:
case Common::KEYCODE_KP5:
- if (_vm->_gyro->_alive && _vm->_gyro->_avvyIsAwake) {
+ if (_alive && _avvyIsAwake) {
_vm->_animation->handleMoveKey(event); // Fallthroughs are intended.
- _vm->_lucerna->drawDirection();
+ drawDirection();
return;
}
case Common::KEYCODE_BACKSPACE:
@@ -114,46 +329,46 @@ void Avalot::handleKeyDown(Common::Event &event) {
break;
}
- _vm->_lucerna->drawDirection();
+ drawDirection();
}
void Avalot::setup() {
- _vm->_gyro->init();
+ init();
_vm->_dialogs->reset();
- _vm->_lucerna->dusk();
- _vm->_lucerna->loadDigits();
+ dusk();
+ loadDigits();
_vm->_parser->_inputTextPos = 0;
_vm->_parser->_quote = true;
- _vm->_lucerna->drawToolbar();
+ drawToolbar();
_vm->_dialogs->setReadyLight(2);
_vm->_animation->_direction = Animation::kDirStopped;
_vm->_animation->loadAnims();
- _vm->_lucerna->dawn();
+ dawn();
_vm->_parser->_cursorState = false;
_vm->_parser->cursorOn();
- _vm->_animation->_sprites[0]._speedX = _vm->_gyro->kWalk;
+ _vm->_animation->_sprites[0]._speedX = kWalk;
_vm->_animation->updateSpeed();
_vm->_menu->init();
int16 loadSlot = Common::ConfigManager::instance().getInt("save_slot");
if (loadSlot >= 0) {
- _vm->_gyro->_thinks = 2; // You always have money.
- _vm->_lucerna->thinkAbout(Gyro::kObjectMoney, Gyro::kThing);
+ _thinks = 2; // You always have money.
+ thinkAbout(Avalot::kObjectMoney, Avalot::kThing);
_vm->loadGame(loadSlot);
} else {
- _vm->_gyro->_isLoaded = false; // Set to true in _vm->loadGame().
- _vm->_gyro->newGame();
+ _isLoaded = false; // Set to true in _vm->loadGame().
+ newGame();
- _vm->_gyro->_soundFx = !_vm->_gyro->_soundFx;
- _vm->_lucerna->fxToggle();
- _vm->_lucerna->thinkAbout(Gyro::kObjectMoney, Gyro::kThing);
+ _soundFx = !_soundFx;
+ fxToggle();
+ thinkAbout(Avalot::kObjectMoney, Avalot::kThing);
_vm->_dialogs->displayScrollChain('q', 83); // Info on the game, etc.
}
@@ -167,21 +382,21 @@ void Avalot::runAvalot() {
_vm->updateEvents(); // The event handler.
- _vm->_lucerna->_clock.update();
+ _clock.update();
_vm->_menu->update();
_vm->_background->updateBackgroundSprites();
_vm->_animation->animLink();
- _vm->_lucerna->checkClick();
+ checkClick();
_vm->_timer->updateTimer();
#ifdef DEBUG
- for (int i = 0; i < _vm->_gyro->_lineNum; i++) {
- LineType *curLine = &_vm->_gyro->_lines[i];
+ for (int i = 0; i < _lineNum; i++) {
+ LineType *curLine = &_lines[i];
_vm->_graphics->_surface.drawLine(curLine->_x1, curLine->_y1, curLine->_x2, curLine->_y2, curLine->col);
}
- for (int i = 0; i < _vm->_gyro->_fieldNum; i++) {
- FieldType *curField = &_vm->_gyro->_fields[i];
+ for (int i = 0; i < _fieldNum; i++) {
+ FieldType *curField = &_fields[i];
if (curField->_x1 < 640)
_vm->_graphics->_surface.frameRect(Common::Rect(curField->_x1, curField->_y1, curField->_x2, curField->_y2), kColorLightmagenta);
}
@@ -191,8 +406,8 @@ void Avalot::runAvalot() {
uint32 delay = _vm->_system->getMillis() - beginLoop;
if (delay <= 55)
- _vm->_system->delayMillis(55 - delay); // Replaces _vm->_gyro->slowdown(); 55 comes from 18.2 Hz (B Flight).
- } while (!_vm->_gyro->_letMeOut && !_vm->shouldQuit());
+ _vm->_system->delayMillis(55 - delay); // Replaces slowdown(); 55 comes from 18.2 Hz (B Flight).
+ } while (!_letMeOut && !_vm->shouldQuit());
//if (logging)
// close(logfile);
@@ -201,4 +416,1507 @@ void Avalot::runAvalot() {
_vm->_closing->exitGame();
}
+void Avalot::init() {
+ for (int i = 0; i < 31; i++) {
+ for (int j = 0; j < 2; j++)
+ _also[i][j] = 0;
+ }
+
+#if 0
+ if (_vm->_enhanced->atbios)
+ atkey = "f1";
+ else
+ atkey = "alt-";
+#endif
+
+ _mouse = kMouseStateNo;
+ _letMeOut = false;
+ _holdTheDawn = true;
+ _currentMouse = 177;
+ _dropsOk = true;
+ _mouseText = "";
+ _cheat = false;
+ _cp = 0;
+ _ledStatus = 177;
+ _defaultLed = 2;
+ _enidFilename = ""; // Undefined.
+ for (int i = 0; i < 3; i++)
+ _scoreToDisplay[i] = -1; // Impossible digits.
+ _holdTheDawn = false;
+
+ setMousePointerWait();
+ CursorMan.showMouse(true);
+}
+
+/**
+ * Call a given Verb
+ * @remarks Originally called 'callverb'
+ */
+void Avalot::callVerb(byte id) {
+ if (id == _vm->_parser->kPardon) {
+ Common::String tmpStr = Common::String::format("The f5 key lets you do a particular action in certain " \
+ "situations. However, at the moment there is nothing assigned to it. You may press alt-A to see " \
+ "what the current setting of this key is.");
+ _vm->_dialogs->displayText(tmpStr);
+ } else {
+ _weirdWord = false;
+ _vm->_parser->_polite = true;
+ _vm->_parser->_verb = id;
+ _vm->_parser->doThat();
+ }
+}
+
+void Avalot::drawAlsoLines() {
+ CursorMan.showMouse(false);
+
+ _vm->_graphics->_magics.fillRect(Common::Rect(0, 0, 640, 200), 0);
+ _vm->_graphics->_magics.frameRect(Common::Rect(0, 45, 640, 161), 15);
+
+ for (int i = 0; i < _lineNum; i++) {
+ // We had to check if the lines are within the borders of the screen.
+ if ((_lines[i]._x1 >= 0) && (_lines[i]._x1 < _vm->_graphics->kScreenWidth) && (_lines[i]._y1 >= 0) && (_lines[i]._y1 < _vm->_graphics->kScreenHeight)
+ && (_lines[i]._x2 >= 0) && (_lines[i]._x2 < _vm->_graphics->kScreenWidth) && (_lines[i]._y2 >= 0) && (_lines[i]._y2 < _vm->_graphics->kScreenHeight))
+ _vm->_graphics->_magics.drawLine(_lines[i]._x1, _lines[i]._y1, _lines[i]._x2, _lines[i]._y2, _lines[i]._color);
+ }
+
+ CursorMan.showMouse(true);
+}
+
+/**
+ * Check is it's possible to give something to Spludwick
+ * @remarks Originally called 'nextstring'
+ */
+Common::String Avalot::readAlsoStringFromFile() {
+ Common::String str;
+ byte length = file.readByte();
+ for (int i = 0; i < length; i++)
+ str += file.readByte();
+ return str;
+}
+
+void Avalot::scram(Common::String &str) {
+ for (uint i = 0; i < str.size(); i++)
+ str.setChar(str[i] ^ 177, i);
+}
+
+void Avalot::unScramble() {
+ for (int i = 0; i < 31; i++) {
+ for (int j = 0; j < 2; j++) {
+ if (_also[i][j] != 0)
+ scram(*_also[i][j]);
+ }
+ }
+ scram(_listen);
+ scram(_flags);
+}
+
+void Avalot::loadAlso(byte num) {
+ for (int i = 0; i < 31; i++) {
+ for (int j = 0; j < 2; j++) {
+ if (_also[i][j] != 0) {
+ delete _also[i][j];
+ _also[i][j] = 0;
+ }
+ }
+ }
+ Common::String filename;
+ filename = Common::String::format("also%d.avd", num);
+ if (!file.open(filename))
+ error("AVALANCHE: Lucerna: File not found: %s", filename.c_str());
+
+ file.seek(128);
+
+ byte alsoNum = file.readByte();
+ Common::String tmpStr;
+ for (int i = 0; i <= alsoNum; i++) {
+ for (int j = 0; j < 2; j++) {
+ _also[i][j] = new Common::String;
+ *_also[i][j] = readAlsoStringFromFile();
+ }
+ tmpStr = Common::String::format("\x9D%s\x9D", _also[i][0]->c_str());
+ *_also[i][0] = tmpStr;
+ }
+
+ memset(_lines, 0xFF, sizeof(_lines));
+
+ _lineNum = file.readByte();
+ for (int i = 0; i < _lineNum; i++) {
+ LineType *curLine = &_lines[i];
+ curLine->_x1 = file.readSint16LE();
+ curLine->_y1 = file.readSint16LE();
+ curLine->_x2 = file.readSint16LE();
+ curLine->_y2 = file.readSint16LE();
+ curLine->_color = file.readByte();
+ }
+
+ memset(_peds, 177, sizeof(_peds));
+ byte pedNum = file.readByte();
+ for (int i = 0; i < pedNum; i++) {
+ PedType *curPed = &_peds[i];
+ curPed->_x = file.readSint16LE();
+ curPed->_y = file.readSint16LE();
+ curPed->_direction = file.readByte();
+ }
+
+ _fieldNum = file.readByte();
+ for (int i = 0; i < _fieldNum; i++) {
+ FieldType *curField = &_fields[i];
+ curField->_x1 = file.readSint16LE();
+ curField->_y1 = file.readSint16LE();
+ curField->_x2 = file.readSint16LE();
+ curField->_y2 = file.readSint16LE();
+ }
+
+ for (int i = 0; i < 15; i++) {
+ MagicType *magic = &_magics[i];
+ magic->_operation = file.readByte();
+ magic->_data = file.readUint16LE();
+ }
+
+ for (int i = 0; i < 7; i++) {
+ MagicType *portal = &_portals[i];
+ portal->_operation = file.readByte();
+ portal->_data = file.readUint16LE();
+ }
+
+ _flags.clear();
+ for (int i = 0; i < 26; i++)
+ _flags += file.readByte();
+
+ int16 listen_length = file.readByte();
+ _listen.clear();
+ for (int i = 0; i < listen_length; i++)
+ _listen += file.readByte();
+
+ drawAlsoLines();
+
+ file.close();
+ unScramble();
+ for (int i = 0; i <= alsoNum; i++) {
+ tmpStr = Common::String::format(",%s,", _also[i][0]->c_str());
+ *_also[i][0] = tmpStr;
+ }
+}
+
+void Avalot::loadRoom(byte num) {
+ CursorMan.showMouse(false);
+
+ _vm->_graphics->fleshColors();
+
+ Common::String filename = Common::String::format("place%d.avd", num);
+ if (!file.open(filename))
+ error("AVALANCHE: Lucerna: File not found: %s", filename.c_str());
+
+ file.seek(146);
+ if (!_roomnName.empty())
+ _roomnName.clear();
+ for (int i = 0; i < 30; i++) {
+ char actChar = file.readByte();
+ if ((32 <= actChar) && (actChar <= 126))
+ _roomnName += actChar;
+ }
+ // Compression method byte follows this...
+
+ file.seek(177);
+
+ _vm->_graphics->_background = _vm->_graphics->loadPictureRow(file, _vm->_graphics->kBackgroundWidth, _vm->_graphics->kBackgroundHeight);
+ _vm->_graphics->refreshBackground();
+
+ file.close();
+
+ loadAlso(num);
+ _vm->_background->loadBackgroundSprites(num);
+ CursorMan.showMouse(true);
+}
+
+void Avalot::zoomOut(int16 x, int16 y) {
+ warning("STUB: Avalot::zoomout()");
+}
+
+void Avalot::findPeople(byte room) {
+ for (int i = 1; i < 29; i++) {
+ if (_whereIs[i] == room) {
+ if (i < 25)
+ _him = i + 150;
+ else
+ _her = i + 150;
+ }
+ }
+}
+
+void Avalot::exitRoom(byte x) {
+ _vm->_sound->stopSound();
+ _vm->_background->forgetBackgroundSprites();
+ _seeScroll = true; // This stops the trippancy system working over the length of this procedure.
+
+ switch (x) {
+ case kRoomSpludwicks:
+ _vm->_timer->loseTimer(Timer::kReasonAvariciusTalks);
+ _avariciusTalk = 0;
+ // He doesn't HAVE to be talking for this to work. It just deletes it IF it exists.
+ break;
+ case kRoomBridge:
+ if (_drawbridgeOpen > 0) {
+ _drawbridgeOpen = 4; // Fully open.
+ _vm->_timer->loseTimer(Timer::kReasonDrawbridgeFalls);
+ }
+ break;
+ case kRoomOutsideCardiffCastle:
+ _vm->_timer->loseTimer(Timer::kReasonCardiffsurvey);
+ break;
+ case kRoomRobins:
+ _vm->_timer->loseTimer(Timer::kReasonGettingTiedUp);
+ break;
+ }
+
+ _interrogation = 0; // Leaving the room cancels all the questions automatically.
+ _seeScroll = false; // Now it can work again!
+
+ _lastRoom = _room;
+ if (_room != kRoomMap)
+ _lastRoomNotMap = _room;
+}
+
+
+/**
+ * Only when entering a NEW town! Not returning to the last one,
+ * but choosing another from the map.
+ * @remarks Originally called 'new_town'
+ */
+void Avalot::enterNewTown() {
+ _vm->_menu->setup();
+
+ switch (_room) {
+ case kRoomOutsideNottsPub: // Entry into Nottingham.
+ if ((_roomCount[kRoomRobins] > 0) && (_beenTiedUp) && (!_takenMushroom))
+ _mushroomGrowing = true;
+ break;
+ case kRoomWiseWomans: // Entry into Argent.
+ if (_talkedToCrapulus && (!_lustieIsAsleep)) {
+ _spludwickAtHome = !((_roomCount[kRoomWiseWomans] % 3) == 1);
+ _crapulusWillTell = !_spludwickAtHome;
+ } else {
+ _spludwickAtHome = true;
+ _crapulusWillTell = false;
+ }
+ if (_boxContent == Avalot::kObjectWine)
+ _wineState = 3; // Vinegar
+ break;
+ }
+
+ if ((_room != kRoomOutsideDucks) && (_objects[Avalot::kObjectOnion - 1]) && !(_onionInVinegar))
+ _rottenOnion = true; // You're holding the onion
+}
+
+void Avalot::putGeidaAt(byte whichPed, byte ped) {
+ if (ped == 0)
+ return;
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+
+ spr1->init(5, false, _vm->_animation); // load Geida
+ _vm->_animation->appearPed(1, whichPed);
+ spr1->_callEachStepFl = true;
+ spr1->_eachStepProc = Animation::kProcGeida;
+}
+
+void Avalot::enterRoom(byte room, byte ped) {
+ _seeScroll = true; // This stops the trippancy system working over the length of this procedure.
+
+ findPeople(room);
+ _room = room;
+ if (ped != 0)
+ _roomCount[room]++;
+
+ loadRoom(room);
+
+ if ((_roomCount[room] == 0) && (!setFlag('S')))
+ incScore(1);
+
+ _whereIs[Avalot::kPeopleAvalot - 150] = _room;
+
+ if (_geidaFollows)
+ _whereIs[Avalot::kPeopleGeida - 150] = room;
+
+ _roomTime = 0;
+
+
+ if ((_lastRoom == kRoomMap) && (_lastRoomNotMap != _room))
+ enterNewTown();
+
+ switch (room) {
+ case kRoomYours:
+ if (_avvyInBed) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ _vm->_graphics->refreshBackground();
+ _vm->_timer->addTimer(100, Timer::kProcArkataShouts, Timer::kReasonArkataShouts);
+ }
+ break;
+
+ case kRoomOutsideYours:
+ if (ped > 0) {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ if (!_talkedToCrapulus) {
+ _whereIs[Avalot::kPeopleCrapulus - 150] = kRoomOutsideYours;
+ spr1->init(8, false, _vm->_animation); // load Crapulus
+
+ if (_roomCount[kRoomOutsideYours] == 1) {
+ _vm->_animation->appearPed(1, 3); // Start on the right-hand side of the screen.
+ spr1->walkTo(4); // Walks up to greet you.
+ } else {
+ _vm->_animation->appearPed(1, 4); // Starts where he was before.
+ spr1->_facingDir = Animation::kDirLeft;
+ }
+
+ spr1->_callEachStepFl = true;
+ spr1->_eachStepProc = Animation::kProcFaceAvvy; // He always faces Avvy.
+
+ } else
+ _whereIs[Avalot::kPeopleCrapulus - 150] = kRoomNowhere;
+
+ if (_crapulusWillTell) {
+ spr1->init(8, false, _vm->_animation);
+ _vm->_animation->appearPed(1, 1);
+ spr1->walkTo(3);
+ _vm->_timer->addTimer(20, Timer::kProcCrapulusSpludOut, Timer::kReasonCrapulusSaysSpludwickOut);
+ _crapulusWillTell = false;
+ }
+ }
+ break;
+
+ case kRoomOutsideSpludwicks:
+ if ((_roomCount[kRoomOutsideSpludwicks] == 1) && (ped == 1)) {
+ _vm->_timer->addTimer(20, Timer::kProcBang, Timer::kReasonExplosion);
+ _spludwickAtHome = true;
+ }
+ break;
+
+ case kRoomSpludwicks:
+ if (_spludwickAtHome) {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ if (ped > 0) {
+ spr1->init(2, false, _vm->_animation); // load Spludwick
+ _vm->_animation->appearPed(1, 1);
+ _whereIs[Avalot::kPeopleSpludwick - 150] = kRoomSpludwicks;
+ }
+
+ spr1->_callEachStepFl = true;
+ spr1->_eachStepProc = Animation::kProcGeida;
+ } else
+ _whereIs[Avalot::kPeopleSpludwick - 150] = kRoomNowhere;
+ break;
+
+ case kRoomBrummieRoad:
+ if (_geidaFollows)
+ putGeidaAt(4, ped);
+ if (_cwytalotGone) {
+ _magics[kColorLightred - 1]._operation = Avalot::kMagicNothing;
+ _whereIs[Avalot::kPeopleCwytalot - 150] = kRoomNowhere;
+ } else {
+ if (ped > 0) {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ spr1->init(4, false, _vm->_animation); // 4 = Cwytalot
+ spr1->_callEachStepFl = true;
+ spr1->_eachStepProc = Animation::kProcFollowAvvyY;
+ _whereIs[Avalot::kPeopleCwytalot - 150] = kRoomBrummieRoad;
+
+ if (_roomCount[kRoomBrummieRoad] == 1) { // First time here...
+ _vm->_animation->appearPed(1, 1); // He appears on the right of the screen...
+ spr1->walkTo(3); // ...and he walks up...
+ } else {
+ // You've been here before.
+ _vm->_animation->appearPed(1, 3); // He's standing in your way straight away...
+ spr1->_facingDir = Animation::kDirLeft;
+ }
+ }
+ }
+ break;
+
+ case kRoomArgentRoad:
+ if ((_cwytalotGone) && (!_passedCwytalotInHerts) && (ped == 2) && (_roomCount[kRoomArgentRoad] > 3)) {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ spr1->init(4, false, _vm->_animation); // 4 = Cwytalot again
+ _vm->_animation->appearPed(1, 0);
+ spr1->walkTo(1);
+ spr1->_vanishIfStill = true;
+ _passedCwytalotInHerts = true;
+ // whereis[#157] = r__Nowhere; // can we fit this in?
+ _vm->_timer->addTimer(20, Timer::kProcCwytalotInHerts, Timer::kReasonCwytalotInHerts);
+ }
+ break;
+
+ case kRoomBridge:
+ if (_drawbridgeOpen == 4) { // open
+ _vm->_background->drawBackgroundSprite(-1, -1, 2); // Position of drawbridge
+ _vm->_graphics->refreshBackground();
+ _magics[kColorGreen - 1]._operation = Avalot::kMagicNothing; // You may enter the drawbridge.
+ }
+ if (_geidaFollows)
+ putGeidaAt(ped + 2, ped); // load Geida
+ break;
+
+ case kRoomRobins:
+ if (ped > 0) {
+ if (!_beenTiedUp) {
+ // A welcome party... or maybe not...
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ spr1->init(6, false, _vm->_animation);
+ _vm->_animation->appearPed(1, 1);
+ spr1->walkTo(2);
+ _vm->_timer->addTimer(36, Timer::kProcGetTiedUp, Timer::kReasonGettingTiedUp);
+ }
+ }
+
+ if (_beenTiedUp) {
+ _whereIs[Avalot::kPeopleRobinHood - 150] = 0;
+ _whereIs[Avalot::kPeopleFriarTuck - 150] = 0;
+ }
+
+ if (_tiedUp)
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+
+ if (!_mushroomGrowing)
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ _vm->_graphics->refreshBackground();
+ break;
+
+ case kRoomOutsideCardiffCastle:
+ if (ped > 0) {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ switch (_cardiffQuestionNum) {
+ case 0 : // You've answered NONE of his questions.
+ spr1->init(9, false, _vm->_animation);
+ _vm->_animation->appearPed(1, 1);
+ spr1->walkTo(2);
+ _vm->_timer->addTimer(47, Timer::kProcCardiffSurvey, Timer::kReasonCardiffsurvey);
+ break;
+ case 5 :
+ _magics[1]._operation = Avalot::kMagicNothing;
+ break; // You've answered ALL his questions. => nothing happens.
+ default: // You've answered SOME of his questions.
+ spr1->init(9, false, _vm->_animation);
+ _vm->_animation->appearPed(1, 2);
+ spr1->_facingDir = Animation::kDirRight;
+ _vm->_timer->addTimer(3, Timer::kProcCardiffReturn, Timer::kReasonCardiffsurvey);
+ }
+ }
+
+ if (_cardiffQuestionNum < 5)
+ _interrogation = _cardiffQuestionNum;
+ else
+ _interrogation = 0;
+ break;
+
+ case kRoomMap:
+ // You're entering the map.
+ dawn();
+ if (ped > 0)
+ zoomOut(_peds[ped]._x, _peds[ped]._y);
+
+ if ((_objects[Avalot::kObjectWine - 1]) && (_wineState != 3)) {
+ _vm->_dialogs->displayScrollChain('q', 9); // Don't want to waste the wine!
+ _objects[Avalot::kObjectWine - 1] = false;
+ refreshObjectList();
+ }
+
+ _vm->_dialogs->displayScrollChain('q', 69);
+ break;
+
+ case kRoomCatacombs:
+ if ((ped == 0) || (ped == 3) || (ped == 5) || (ped == 6)) {
+
+ switch (ped) {
+ case 3: // Enter from oubliette
+ _catacombX = 8;
+ _catacombY = 4;
+ break;
+ case 5: // Enter from du Lustie's
+ _catacombX = 8;
+ _catacombY = 7;
+ break;
+ case 6: // Enter from Geida's
+ _catacombX = 4;
+ _catacombY = 1;
+ break;
+ }
+
+ _enterCatacombsFromLustiesRoom = true;
+ _vm->_animation->catacombMove(ped);
+ _enterCatacombsFromLustiesRoom = false;
+ }
+ break;
+
+ case kRoomArgentPub:
+ if (_wonNim)
+ _vm->_background->drawBackgroundSprite(-1, -1, 0); // No lute by the settle.
+ _malagauche = 0; // Ready to boot Malagauche
+ if (_givenBadgeToIby) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 7);
+ _vm->_background->drawBackgroundSprite(-1, -1, 8);
+ }
+ _vm->_graphics->refreshBackground();
+ break;
+
+ case kRoomLustiesRoom:
+ _npcFacing = 1; // du Lustie.
+ if (_vm->_animation->_sprites[0]._id == 0) // Avvy in his normal clothes
+ _vm->_timer->addTimer(3, Timer::kProcCallsGuards, Timer::kReasonDuLustieTalks);
+ else if (!_enteredLustiesRoomAsMonk) // already
+ // Presumably, Avvy dressed as a monk.
+ _vm->_timer->addTimer(3, Timer::kProcGreetsMonk, Timer::kReasonDuLustieTalks);
+
+ if (_geidaFollows) {
+ putGeidaAt(4, ped);
+ if (_lustieIsAsleep) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 4);
+ _vm->_graphics->refreshBackground();
+ }
+ }
+ break;
+
+ case kRoomMusicRoom:
+ if (_jacquesState > 0) {
+ _jacquesState = 5;
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+ _vm->_graphics->refreshBackground();
+ _vm->_background->drawBackgroundSprite(-1, -1, 3);
+ _magics[kColorBrown - 1]._operation = Avalot::kMagicNothing;
+ _whereIs[Avalot::kPeopleJacques - 150] = 0;
+ }
+ if (ped != 0) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 5);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(6);
+ _vm->_sequence->thenShow(5);
+ _vm->_sequence->thenShow(7);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomOutsideNottsPub:
+ if (ped == 2) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(3);
+ _vm->_sequence->thenShow(2);
+ _vm->_sequence->thenShow(1);
+ _vm->_sequence->thenShow(4);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomOutsideArgentPub:
+ if (ped == 2) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 5);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(6);
+ _vm->_sequence->thenShow(5);
+ _vm->_sequence->thenShow(7);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomWiseWomans: {
+ AnimationType *spr1 = &_vm->_animation->_sprites[1];
+ spr1->init(11, false, _vm->_animation);
+ if ((_roomCount[kRoomWiseWomans] == 1) && (ped > 0)) {
+ _vm->_animation->appearPed(1, 1); // Start on the right-hand side of the screen.
+ spr1->walkTo(3); // Walks up to greet you.
+ } else {
+ _vm->_animation->appearPed(1, 3); // Starts where she was before.
+ spr1->_facingDir = Animation::kDirLeft;
+ }
+
+ spr1->_callEachStepFl = true;
+ spr1->_eachStepProc = Animation::kProcFaceAvvy; // She always faces Avvy.
+ }
+ break;
+
+ case kRoomInsideCardiffCastle:
+ if (ped > 0) {
+ _vm->_animation->_sprites[1].init(10, false, _vm->_animation); // Define the dart.
+ _vm->_background->drawBackgroundSprite(-1, -1, 0);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(1);
+ if (_arrowInTheDoor)
+ _vm->_sequence->thenShow(3);
+ else
+ _vm->_sequence->thenShow(2);
+
+ if (_takenPen)
+ _vm->_background->drawBackgroundSprite(-1, -1, 3);
+
+ _vm->_sequence->startToClose();
+ } else {
+ _vm->_background->drawBackgroundSprite(-1, -1, 0);
+ if (_arrowInTheDoor)
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ else
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+ _vm->_graphics->refreshBackground();
+ }
+ break;
+
+ case kRoomAvvysGarden:
+ if (ped == 1) {
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(2);
+ _vm->_sequence->thenShow(1);
+ _vm->_sequence->thenShow(3);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomEntranceHall:
+ case kRoomInsideAbbey:
+ case kRoomYourHall:
+ if (ped == 2) {
+#if 0
+ // It was the original:
+ _vm->_celer->show_one(-1, -1, 2);
+ _vm->_sequence->first_show(1);
+ _vm->_sequence->then_show(3);
+ _vm->_sequence->start_to_close();
+#endif
+
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(2);
+ _vm->_sequence->thenShow(1);
+ _vm->_sequence->thenShow(3);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomAylesOffice:
+ if (_aylesIsAwake)
+ _vm->_background->drawBackgroundSprite(-1, -1, 1);
+ _vm->_graphics->refreshBackground();
+ break; // Ayles awake.
+
+ case kRoomGeidas:
+ putGeidaAt(1, ped);
+ break; // load Geida
+
+ case kRoomEastHall:
+ case kRoomWestHall:
+ if (_geidaFollows)
+ putGeidaAt(ped + 1, ped);
+ break;
+
+ case kRoomLusties:
+ if (_geidaFollows)
+ putGeidaAt(ped + 5, ped);
+ break;
+
+ case kRoomNottsPub:
+ if (_sittingInPub)
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ _npcFacing = 1; // Port.
+ break;
+
+ case kRoomOutsideDucks:
+ if (ped == 2) {
+ // Shut the door
+ _vm->_background->drawBackgroundSprite(-1, -1, 2);
+ _vm->_graphics->refreshBackground();
+ _vm->_sequence->firstShow(3);
+ _vm->_sequence->firstShow(2);
+ _vm->_sequence->thenShow(1);
+ _vm->_sequence->thenShow(4);
+ _vm->_sequence->startToClose();
+ }
+ break;
+
+ case kRoomDucks:
+ _npcFacing = 1; // Duck.
+ break;
+ }
+
+ _seeScroll = false; // Now it can work again!
+ _isLoaded = false;
+}
+
+void Avalot::thinkAbout(byte object, bool type) {
+ const int16 picSize = 966;
+
+ _thinks = object;
+ object--;
+
+ setMousePointerWait();
+
+ if (type == Avalot::kThing) {
+ if (!file.open("thinks.avd"))
+ error("AVALANCHE: Lucerna: File not found: thinks.avd");
+ } else { // Avalot::kPerson
+ if (!file.open("folk.avd"))
+ error("AVALANCHE: Lucerna: File not found: folk.avd");
+
+ object -= 149;
+ if (object >= 25)
+ object -= 8;
+ if (object == 20)
+ object--; // Last time...
+ }
+
+ CursorMan.showMouse(false);
+
+ file.seek(object * picSize + 65);
+ ::Graphics::Surface picture = _vm->_graphics->loadPictureGraphic(file);
+ _vm->_graphics->drawPicture(_vm->_graphics->_surface, picture, 205, 170);
+
+ picture.free();
+ file.close();
+
+ CursorMan.showMouse(true);
+ _thinkThing = type;
+}
+
+void Avalot::loadDigits() { // Load the scoring digits & rwlites
+ const byte digitsize = 134;
+ const byte rwlitesize = 126;
+
+ if (!file.open("digit.avd"))
+ error("AVALANCHE: Lucerna: File not found: digit.avd");
+
+ for (int i = 0; i < 10; i++) {
+ file.seek(i * digitsize);
+ _digits[i] = _vm->_graphics->loadPictureGraphic(file);
+ }
+
+ for (int i = 0; i < 9; i++) {
+ file.seek(10 * digitsize + i * rwlitesize);
+ _directions[i] = _vm->_graphics->loadPictureGraphic(file);
+ }
+
+ file.close();
+}
+
+void Avalot::drawToolbar() {
+ if (!file.open("useful.avd"))
+ error("AVALANCHE: Lucerna: File not found: useful.avd");
+
+ file.seek(40);
+
+ CursorMan.showMouse(false);
+ ::Graphics::Surface picture = _vm->_graphics->loadPictureGraphic(file);
+ _vm->_graphics->drawPicture(_vm->_graphics->_surface, picture, 5, 169);
+
+ picture.free();
+ file.close();
+
+ CursorMan.showMouse(true);
+ _vm->_animation->_oldDirection = 177;
+ drawDirection();
+}
+
+void Avalot::drawScore() {
+ uint16 score = _dnascore;
+ int8 numbers[3] = {0, 0, 0};
+ for (int i = 0; i < 2; i++) {
+ byte divisor = 1;
+ for (int j = 0; j < (2 - i); j++)
+ divisor *= 10;
+ numbers[i] = score / divisor;
+ score -= numbers[i] * divisor;
+ }
+ numbers[2] = score;
+
+ CursorMan.showMouse(false);
+
+ for (int i = 0; i < 3; i++) {
+ if (_scoreToDisplay[i] != numbers[i])
+ _vm->_graphics->drawPicture(_vm->_graphics->_surface, _digits[numbers[i]], 250 + (i + 1) * 15, 177);
+ }
+
+ CursorMan.showMouse(true);
+
+ for (int i = 0; i < 3; i++)
+ _scoreToDisplay[i] = numbers[i];
+}
+
+void Avalot::incScore(byte num) {
+ for (int i = 1; i <= num; i++) {
+ _dnascore++;
+
+// if (soundfx) {
+ for (int j = 1; j <= 97; j++)
+ // Length os 2 is a guess, the original doesn't have a delay specified
+ _vm->_sound->playNote(177 + _dnascore * 3, 2);
+// }
+ }
+ warning("STUB: Avalot::points()");
+
+ drawScore();
+}
+
+void Avalot::useCompass(const Common::Point &cursorPos) {
+ byte color = *(byte *)_vm->_graphics->_surface.getBasePtr(cursorPos.x, cursorPos.y / 2);
+
+ switch (color) {
+ case kColorGreen:
+ _vm->_animation->_direction = Animation::kDirUp;
+ _vm->_animation->changeDirection(0, Animation::kDirUp);
+ drawDirection();
+ break;
+ case kColorBrown:
+ _vm->_animation->_direction = Animation::kDirDown;
+ _vm->_animation->changeDirection(0, Animation::kDirDown);
+ drawDirection();
+ break;
+ case kColorCyan:
+ _vm->_animation->_direction = Animation::kDirLeft;
+ _vm->_animation->changeDirection(0, Animation::kDirLeft);
+ drawDirection();
+ break;
+ case kColorLightmagenta:
+ _vm->_animation->_direction = Animation::kDirRight;
+ _vm->_animation->changeDirection(0, Animation::kDirRight);
+ drawDirection();
+ break;
+ case kColorRed:
+ case kColorWhite:
+ case kColorLightcyan:
+ case kColorYellow: // Fall-throughs are intended.
+ _vm->_animation->stopWalking();
+ drawDirection();
+ break;
+ }
+}
+
+void Avalot::fxToggle() {
+ warning("STUB: Avalot::fxtoggle()");
+}
+
+void Avalot::refreshObjectList() {
+ _carryNum = 0;
+ if (_thinkThing && !_objects[_thinks - 1])
+ thinkAbout(Avalot::kObjectMoney, Avalot::kThing); // you always have money
+
+ for (int i = 0; i < kObjectNum; i++) {
+ if (_objects[i]) {
+ _objectList[_carryNum] = i + 1;
+ _carryNum++;
+ }
+ }
+}
+
+/**
+ * @remarks Originally called 'verte'
+ */
+void Avalot::guideAvvy(Common::Point cursorPos) {
+ if (!_userMovesAvvy)
+ return;
+
+ cursorPos.y /= 2;
+ byte what;
+
+ // _vm->_animation->tr[0] is Avalot.)
+ AnimationType *avvy = &_vm->_animation->_sprites[0];
+ if (cursorPos.x < avvy->_x)
+ what = 1;
+ else if (cursorPos.x > (avvy->_x + avvy->_info._xLength))
+ what = 2;
+ else
+ what = 0; // On top
+
+ if (cursorPos.y < avvy->_y)
+ what += 3;
+ else if (cursorPos.y > (avvy->_y + avvy->_info._yLength))
+ what += 6;
+
+ switch (what) {
+ case 0:
+ _vm->_animation->stopWalking();
+ break; // Clicked on Avvy: no movement.
+ case 1:
+ _vm->_animation->changeDirection(0, Animation::kDirLeft);
+ break;
+ case 2:
+ _vm->_animation->changeDirection(0, Animation::kDirRight);
+ break;
+ case 3:
+ _vm->_animation->changeDirection(0, Animation::kDirUp);
+ break;
+ case 4:
+ _vm->_animation->changeDirection(0, Animation::kDirUpLeft);
+ break;
+ case 5:
+ _vm->_animation->changeDirection(0, Animation::kDirUpRight);
+ break;
+ case 6:
+ _vm->_animation->changeDirection(0, Animation::kDirDown);
+ break;
+ case 7:
+ _vm->_animation->changeDirection(0, Animation::kDirDownLeft);
+ break;
+ case 8:
+ _vm->_animation->changeDirection(0, Animation::kDirDownRight);
+ break;
+ } // No other values are possible.
+
+ drawDirection();
+}
+
+void Avalot::checkClick() {
+ Common::Point cursorPos = _vm->getMousePos();
+ _onToolbar = kSlowComputer && ((cursorPos.y >= 169) || (cursorPos.y <= 10));
+
+ /*if (mrelease > 0)
+ after_the_scroll = false;*/
+
+ if ((0 <= cursorPos.y) && (cursorPos.y <= 21))
+ newMouse(0); // up arrow
+ else if ((317 <= cursorPos.y) && (cursorPos.y <= 339))
+ newMouse(7); //I-beam
+ else if ((340 <= cursorPos.y) && (cursorPos.y <= 399))
+ newMouse(1); // screwdriver
+ else if (!_vm->_menu->isActive()) { // Dropdown can handle its own pointers.
+ if (_holdLeftMouse) {
+ newMouse(6); // Mark's crosshairs
+ guideAvvy(cursorPos); // Normally, if you click on the picture, you're guiding Avvy around.
+ } else
+ newMouse(3); // fletch
+ }
+
+ if (_holdLeftMouse) {
+ if ((0 <= cursorPos.y) && (cursorPos.y <= 21)) { // Click on the dropdown menu.
+ if (_dropsOk)
+ _vm->_menu->update();
+ } else if ((317 <= cursorPos.y) && (cursorPos.y <= 339)) { // Click on the command line.
+ _vm->_parser->_inputTextPos = (cursorPos.x - 23) / 8;
+ if (_vm->_parser->_inputTextPos > _vm->_parser->_inputText.size() + 1)
+ _vm->_parser->_inputTextPos = _vm->_parser->_inputText.size() + 1;
+ if (_vm->_parser->_inputTextPos < 1)
+ _vm->_parser->_inputTextPos = 1;
+ _vm->_parser->_inputTextPos--;
+ _vm->_parser->plotText();
+ } else if ((340 <= cursorPos.y) && (cursorPos.y <= 399)) { // Check the toolbar.
+ if ((137 <= cursorPos.x) && (cursorPos.x <= 207)) { // Control Avvy with the compass.
+ if (_alive && _avvyIsAwake)
+ useCompass(cursorPos);
+ } else if ((208 <= cursorPos.x) && (cursorPos.x <= 260)) { // Examine the _thing.
+ do {
+ _vm->updateEvents();
+ } while (_holdLeftMouse);
+
+ if (_thinkThing) {
+ _vm->_parser->_thing = _thinks;
+ _vm->_parser->_thing += 49;
+ _vm->_parser->_person = _vm->_parser->kPardon;
+ } else {
+ _vm->_parser->_person = _thinks;
+ _vm->_parser->_thing = _vm->_parser->kPardon;
+ }
+ callVerb(Parser::kVerbCodeExam);
+ } else if ((261 <= cursorPos.x) && (cursorPos.x <= 319)) { // Display the score.
+ do {
+ _vm->updateEvents();
+ } while (_holdLeftMouse);
+
+ callVerb(Parser::kVerbCodeScore);
+ } else if ((320 <= cursorPos.x) && (cursorPos.x <= 357)) { // Change speed.
+ _vm->_animation->_sprites[0]._speedX = kWalk;
+ _vm->_animation->updateSpeed();
+ } else if ((358 <= cursorPos.x) && (cursorPos.x <= 395)) { // Change speed.
+ _vm->_animation->_sprites[0]._speedX = kRun;
+ _vm->_animation->updateSpeed();
+ } else if ((396 <= cursorPos.x) && (cursorPos.x <= 483))
+ fxToggle();
+ else if ((535 <= cursorPos.x) && (cursorPos.x <= 640))
+ _mouseText.insertChar(Dialogs::kControlNewLine, 0);
+ } else if (!_dropsOk)
+ _mouseText = Common::String(13) + _mouseText;
+ }
+}
+
+void Avalot::errorLed() {
+ warning("STUB: Avalot::errorled()");
+}
+
+int8 Avalot::fades(int8 x) {
+ warning("STUB: Avalot::fades()");
+ return 0;
+}
+
+void Avalot::fadeOut(byte n) {
+ warning("STUB: Avalot::fadeOut()");
+}
+
+void Avalot::dusk() {
+ warning("STUB: Avalot::dusk()");
+}
+
+void Avalot::fadeIn(byte n) {
+ warning("STUB: Avalot::fadeIn()");
+}
+
+void Avalot::dawn() {
+ warning("STUB: Avalot::dawn()");
+}
+
+void Avalot::drawDirection() { // It's data is loaded in load_digits().
+ if (_vm->_animation->_oldDirection == _vm->_animation->_direction)
+ return;
+
+ _vm->_animation->_oldDirection = _vm->_animation->_direction;
+
+ CursorMan.showMouse(false);
+ _vm->_graphics->drawPicture(_vm->_graphics->_surface, _directions[_vm->_animation->_direction], 0, 161);
+ CursorMan.showMouse(true);
+}
+
+
+void Avalot::gameOver() {
+ _userMovesAvvy = false;
+
+ AnimationType *avvy = &_vm->_animation->_sprites[0];
+ int16 sx = avvy->_x;
+ int16 sy = avvy->_y;
+
+ avvy->remove();
+ avvy->init(12, true, _vm->_animation); // 12 = Avalot falls
+ avvy->_stepNum = 0;
+ avvy->appear(sx, sy, 0);
+
+ _vm->_timer->addTimer(3, Timer::kProcAvalotFalls, Timer::kReasonFallingOver);
+ _alive = false;
+}
+
+void Avalot::minorRedraw() {
+ dusk();
+
+ enterRoom(_room, 0); // Ped unknown or non-existant.
+
+ for (int i = 0; i < 3; i++)
+ _scoreToDisplay[i] = -1; // impossible digits
+ drawScore();
+
+ dawn();
+}
+
+void Avalot::majorRedraw() {
+ warning("STUB: Avalot::major_redraw()");
+}
+
+uint16 Avalot::bearing(byte whichPed) {
+ static const double rad2deg = 180 / 3.14; // Pi
+ AnimationType *avvy = &_vm->_animation->_sprites[0];
+ PedType *curPed = &_peds[whichPed];
+
+ if (avvy->_x == curPed->_x)
+ return 0;
+ else if (avvy->_x < curPed->_x) {
+ return (uint16)((atan(double((avvy->_y - curPed->_y)) / (avvy->_x - curPed->_x)) * rad2deg) + 90);
+ } else {
+ return (uint16)((atan(double((avvy->_y - curPed->_y)) / (avvy->_x - curPed->_x)) * rad2deg) + 270);
+ }
+}
+
+/**
+ * @remarks Originally called 'sprite_run'
+ */
+void Avalot::spriteRun() {
+ _doingSpriteRun = true;
+ _vm->_animation->animLink();
+ _doingSpriteRun = false;
+}
+
+void Avalot::fixFlashers() {
+ _ledStatus = 177;
+ _vm->_animation->_oldDirection = 177;
+ _vm->_dialogs->setReadyLight(2);
+ drawDirection();
+}
+
+Common::String Avalot::intToStr(int32 num) {
+ return Common::String::format("%d", num);
+}
+
+void Avalot::newMouse(byte id) {
+ if (id == _currentMouse)
+ return;
+
+ _currentMouse = id;
+ loadMouse(id);
+}
+
+/**
+ * Set the mouse pointer to 'HourGlass"
+ * @remarks Originally called 'wait'
+ */
+void Avalot::setMousePointerWait() {
+ newMouse(4);
+}
+
+void Avalot::drawShadow(int16 x1, int16 y1, int16 x2, int16 y2, byte hc, byte sc) {
+ warning("STUB: Avalot::shadow()");
+}
+
+void Avalot::drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::String t) {
+ warning("STUB: Avalot::shbox()");
+}
+
+void Avalot::resetVariables() {
+// Replaces memset(&_dna, 0, sizeof(DnaType));
+ _vm->_animation->_direction = 0;
+ _carryNum = 0;
+ for (int i = 0; i < kObjectNum; i++)
+ _objects[i] = false;
+
+ _dnascore = 0;
+ _money = 0;
+ _room = kRoomNowhere;
+ _wearing = 0;
+ _sworeNum = 0;
+ _saveNum = 0;
+ for (int i = 0; i < 100; i++)
+ _roomCount[i] = 0;
+
+ _alcoholLevel = 0;
+ _playedNim = 0;
+ _wonNim = false;
+ _wineState = 0;
+ _cwytalotGone = false;
+ _passwordNum = 0;
+ _aylesIsAwake = false;
+ _drawbridgeOpen = 0;
+ _avariciusTalk = 0;
+ _boughtOnion = false;
+ _rottenOnion = false;
+ _onionInVinegar = false;
+ _givenToSpludwick = 0;
+ _brummieStairs = 0;
+ _cardiffQuestionNum = 0;
+ _passedCwytalotInHerts = false;
+ _avvyIsAwake = false;
+ _avvyInBed = false;
+ _userMovesAvvy = false;
+ _npcFacing = 0;
+ _givenBadgeToIby = false;
+ _friarWillTieYouUp = false;
+ _tiedUp = false;
+ _boxContent = 0;
+ _talkedToCrapulus = false;
+ _jacquesState = 0;
+ _bellsAreRinging = false;
+ _standingOnDais = false;
+ _takenPen = false;
+ _arrowTriggered = false;
+ _arrowInTheDoor = false;
+ _favouriteDrink = "";
+ _favouriteSong = "";
+ _worstPlaceOnEarth = "";
+ _spareEvening = "";
+ _totalTime = 0;
+ _jumpStatus = 0;
+ _mushroomGrowing = false;
+ _spludwickAtHome = false;
+ _lastRoom = 0;
+ _lastRoomNotMap = 0;
+ _crapulusWillTell = false;
+ _enterCatacombsFromLustiesRoom = false;
+ _teetotal = false;
+ _malagauche = 0;
+ _drinking = 0;
+ _enteredLustiesRoomAsMonk = false;
+ _catacombX = 0;
+ _catacombY = 0;
+ _avvysInTheCupboard = false;
+ _geidaFollows = false;
+ _geidaSpin = 0;
+ _geidaTime = 0;
+ _nextBell = 0;
+ _givenPotionToGeida = false;
+ _lustieIsAsleep = false;
+ _flipToWhere = 0;
+ _flipToPed = 0;
+ _beenTiedUp = false;
+ _sittingInPub = false;
+ _spurgeTalkCount = 0;
+ _metAvaroid = false;
+ _takenMushroom = false;
+ _givenPenToAyles = false;
+ _askedDogfoodAboutNim = false;
+}
+
+void Avalot::newGame() {
+ for (int i = 0; i < kMaxSprites; i++) {
+ AnimationType *spr = &_vm->_animation->_sprites[i];
+ if (spr->_quick)
+ spr->remove();
+ }
+ // Deallocate sprite. Sorry, beta testers!
+
+ AnimationType *avvy = &_vm->_animation->_sprites[0];
+ avvy->init(0, true, _vm->_animation);
+
+ _alive = true;
+ resetVariables();
+
+ _vm->_dialogs->setBubbleStateNatural();
+
+ _spareEvening = "answer a questionnaire";
+ _favouriteDrink = "beer";
+ _money = 30; // 2/6
+ _vm->_animation->_direction = Animation::kDirStopped;
+ _wearing = kObjectClothes;
+ _objects[kObjectMoney - 1] = true;
+ _objects[kObjectBodkin - 1] = true;
+ _objects[kObjectBell - 1] = true;
+ _objects[kObjectClothes - 1] = true;
+
+ _thinkThing = true;
+ _thinks = 2;
+ refreshObjectList();
+ _onToolbar = false;
+ _seeScroll = false;
+
+ avvy->appear(300, 117, Animation::kDirRight); // Needed to initialize Avalot.
+ //for (gd = 0; gd <= 30; gd++) for (gm = 0; gm <= 1; gm++) also[gd][gm] = nil;
+ // fillchar(previous^,sizeof(previous^),#0); { blank out array }
+ _him = Parser::kPardon;
+ _her = Parser::kPardon;
+ _it = Parser::kPardon;
+ _lastPerson = Parser::kPardon; // = Pardon?
+ _passwordNum = _vm->_rnd->getRandomNumber(30) + 1; //Random(30) + 1;
+ _userMovesAvvy = false;
+ _doingSpriteRun = false;
+ _avvyInBed = true;
+ _enidFilename = "";
+
+ enterRoom(1, 1);
+ avvy->_visible = false;
+ drawScore();
+ _vm->_menu->setup();
+ _clock.update();
+ spriteRun();
+}
+
+void Avalot::slowDown() {
+ warning("STUB: Avalot::slowdown()");
+}
+
+bool Avalot::setFlag(char x) {
+ for (uint16 i = 0; i < _flags.size(); i++) {
+ if (_flags[i] == x)
+ return true;
+ }
+
+ return false;
+}
+
+bool Avalot::decreaseMoney(uint16 howmuchby) {
+ _money -= howmuchby;
+ if (_money < 0) {
+ _vm->_dialogs->displayScrollChain('Q', 2); // "You are now denariusless!"
+ gameOver();
+ return false;
+ } else
+ return true;
+}
+
+Common::String Avalot::getName(byte whose) {
+ static const Common::String kLads[17] = {
+ "Avalot", "Spludwick", "Crapulus", "Dr. Duck", "Malagauche", "Friar Tuck",
+ "Robin Hood", "Cwytalot", "du Lustie", "the Duke of Cardiff", "Dogfood",
+ "A trader", "Ibythneth", "Ayles", "Port", "Spurge", "Jacques"
+ };
+
+ static const Common::String kLasses[4] = {"Arkata", "Geida", "\0xB1", "the Wise Woman"};
+
+ if (whose < 175)
+ return kLads[whose - 150];
+ else
+ return kLasses[whose - 175];
+}
+
+byte Avalot::getNameChar(byte whose) {
+ static const char kLadChar[] = "ASCDMTRwLfgeIyPu";
+ static const char kLassChar[] = "kG\0xB1o";
+
+ if (whose < 175)
+ return kLadChar[whose - 150];
+ else
+ return kLassChar[whose - 175];
+}
+
+Common::String Avalot::getThing(byte which) {
+ static const Common::String kThings[kObjectNum] = {
+ "Wine", "Money-bag", "Bodkin", "Potion", "Chastity belt",
+ "Crossbow bolt", "Crossbow", "Lute", "Pilgrim's badge", "Mushroom", "Key",
+ "Bell", "Scroll", "Pen", "Ink", "Clothes", "Habit", "Onion"
+ };
+
+ Common::String get_thing_result;
+ switch (which) {
+ case kObjectWine:
+ switch (_wineState) {
+ case 1:
+ case 4:
+ get_thing_result = kThings[which - 1];
+ break;
+ case 3:
+ get_thing_result = "Vinegar";
+ break;
+ }
+ break;
+ case kObjectOnion:
+ if (_rottenOnion)
+ get_thing_result = "rotten onion";
+ else
+ get_thing_result = kThings[which - 1];
+ break;
+ default:
+ get_thing_result = kThings[which - 1];
+ }
+ return get_thing_result;
+}
+
+char Avalot::getThingChar(byte which) {
+ static const char kThingsChar[] = "WMBParCLguKeSnIohn"; // V=Vinegar
+
+ char get_thingchar_result;
+ switch (which) {
+ case kObjectWine:
+ if (_wineState == 3)
+ get_thingchar_result = 'V'; // Vinegar
+ else
+ get_thingchar_result = kThingsChar[which - 1];
+ break;
+ default:
+ get_thingchar_result = kThingsChar[which - 1];
+ }
+ return get_thingchar_result;
+}
+
+Common::String Avalot::getItem(byte which) {
+ static const Common::String kItems[kObjectNum] = {
+ "some wine", "your money-bag", "your bodkin", "a potion", "a chastity belt",
+ "a crossbow bolt", "a crossbow", "a lute", "a pilgrim's badge", "a mushroom",
+ "a key", "a bell", "a scroll", "a pen", "some ink", "your clothes", "a habit",
+ "an onion"
+ };
+
+ Common::String get_better_result;
+ if (which > 150)
+ which -= 149;
+
+ switch (which) {
+ case kObjectWine:
+ switch (_wineState) {
+ case 0:
+ case 1:
+ case 4:
+ get_better_result = kItems[which - 1];
+ break;
+ case 3:
+ get_better_result = "some vinegar";
+ break;
+ }
+ break;
+ case kObjectOnion:
+ if (_rottenOnion)
+ get_better_result = "a rotten onion";
+ else if (_onionInVinegar)
+ get_better_result = "a pickled onion (in the vinegar)";
+ else
+ get_better_result = kItems[which - 1];
+ break;
+ default:
+ if ((which < kObjectNum) && (which > 0))
+ get_better_result = kItems[which - 1];
+ else
+ get_better_result = "";
+ }
+ return get_better_result;
+}
+
+
+Common::String Avalot::f5Does() {
+ switch (_room) {
+ case kRoomYours:
+ if (!_avvyIsAwake)
+ return Common::String::format("%cWWake up", Parser::kVerbCodeWake);
+ else if (_avvyInBed)
+ return Common::String::format("%cGGet up", Parser::kVerbCodeStand);
+ break;
+ case kRoomInsideCardiffCastle:
+ if (_standingOnDais)
+ return Common::String::format("%cCClimb down", Parser::kVerbCodeClimb);
+ else
+ return Common::String::format("%cCClimb up", Parser::kVerbCodeClimb);
+ break;
+ case kRoomNottsPub:
+ if (_sittingInPub)
+ return Common::String::format("%cSStand up", Parser::kVerbCodeStand);
+ else
+ return Common::String::format("%cSSit down", Parser::kVerbCodeSit);
+ break;
+ case kRoomMusicRoom:
+ if (_vm->_animation->inField(5))
+ return Common::String::format("%cPPlay the harp", Parser::kVerbCodePlay);
+ break;
+ }
+
+ return Common::String::format("%c", _vm->_parser->kPardon); // If all else fails...
+}
+
+void Avalot::loadMouse(byte which) {
+ Common::File f;
+
+ if (!f.open("mice.avd"))
+ error("AVALANCHE: Gyro: File not found: mice.avd");
+
+ ::Graphics::Surface cursor;
+ cursor.create(16, 32, ::Graphics::PixelFormat::createFormatCLUT8());
+ cursor.fillRect(Common::Rect(0, 0, 16, 32), 255);
+
+
+ // The AND mask.
+ f.seek(kMouseSize * 2 * which + 134);
+
+ ::Graphics::Surface mask = _vm->_graphics->loadPictureGraphic(f);
+
+ for (int j = 0; j < mask.h; j++) {
+ for (int i = 0; i < mask.w; i++) {
+ for (int k = 0; k < 2; k++) {
+ if (*(byte *)mask.getBasePtr(i, j) == 0)
+ *(byte *)cursor.getBasePtr(i, j * 2 + k) = 0;
+ }
+ }
+ }
+
+ mask.free();
+
+ // The OR mask.
+ f.seek(kMouseSize * 2 * which + 134 * 2);
+
+ mask = _vm->_graphics->loadPictureGraphic(f);
+
+ for (int j = 0; j < mask.h; j++) {
+ for (int i = 0; i < mask.w; i++) {
+ for (int k = 0; k < 2; k++) {
+ byte pixel = *(byte *)mask.getBasePtr(i, j);
+ if (pixel != 0)
+ *(byte *)cursor.getBasePtr(i, j * 2 + k) = pixel;
+ }
+ }
+ }
+
+ mask.free();
+ f.close();
+
+ CursorMan.replaceCursor(cursor.getPixels(), 16, 32, kMouseHotSpots[which]._horizontal, kMouseHotSpots[which]._vertical * 2, 255, false);
+ cursor.free();
+}
+
+void Avalot::setBackgroundColor(byte x) {
+ warning("STUB: Avalot::background()");
+}
+
+void Avalot::hangAroundForAWhile() {
+ for (int i = 0; i < 28; i++)
+ slowDown();
+}
} // End of namespace Avalanche
diff --git a/engines/avalanche/avalot.h b/engines/avalanche/avalot.h
index 1f2046604f..51be1a3dd4 100644
--- a/engines/avalanche/avalot.h
+++ b/engines/avalanche/avalot.h
@@ -32,20 +32,412 @@
#include "common/events.h"
#include "common/system.h"
+#include "common/str.h"
+#include "common/scummsys.h"
+#include "common/file.h"
+#include "graphics/surface.h"
namespace Avalanche {
class AvalancheEngine;
+class Clock {
+public:
+ Clock(AvalancheEngine *vm);
+
+ void update();
+
+private:
+ static const int kCenterX = 510;
+ static const int kCenterY = 183;
+
+ AvalancheEngine *_vm;
+
+ uint16 _hour, _minute, _second, _hourAngle, _oldHour, _oldMinute, _oldHourAngle;
+ Common::Point _clockHandHour, _clockHandMinute;
+
+ void calcHand(uint16 angle, uint16 length, Common::Point &endPoint, byte color);
+ void drawHand(const Common::Point &endPoint, byte color);
+ void plotHands();
+ void chime();
+};
+
+enum Color {
+ kColorBlack, kColorBlue, kColorGreen, kColorCyan, kColorRed,
+ kColorMagenta, kColorBrown, kColorLightgray, kColorDarkgray, kColorLightblue,
+ kColorLightgreen, kColorLightcyan, kColorLightred, kColorLightmagenta, kColorYellow,
+ kColorWhite
+};
+
+// CHECKME: kRoomBossKey is a guess
+enum Room {
+ kRoomNowhere = 0, kRoomYours = 1, kRoomOutsideYours = 2, kRoomOutsideSpludwicks = 3,
+ kRoomYourHall = 5, kRoomMusicRoom = 7, kRoomOutsideArgentPub = 9, kRoomArgentRoad = 10,
+ kRoomWiseWomans = 11, kRoomSpludwicks = 12, kRoomInsideAbbey = 13, kRoomOutsideAbbey = 14,
+ kRoomAvvysGarden = 15, kRoomAylesOffice = 16, kRoomArgentPub = 19, kRoomBrummieRoad = 20,
+ kRoomBridge = 21, kRoomLusties = 22, kRoomLustiesRoom = 23, kRoomWestHall = 25,
+ kRoomEastHall = 26, kRoomOubliette = 27, kRoomGeidas = 28, kRoomCatacombs = 29,
+ kRoomEntranceHall = 40, kRoomRobins = 42, kRoomOutsideNottsPub = 46, kRoomNottsPub = 47,
+ kRoomOutsideDucks = 50, kRoomDucks = 51, kRoomOutsideCardiffCastle = 70, kRoomInsideCardiffCastle = 71,
+ kRoomBossKey = 98, kRoomMap = 99, kRoomDummy = 177 // Dummy room
+};
+
+static const byte kObjectNum = 18; // always preface with a #
+static const int16 kCarryLimit = 12; // carry limit
+
+static const int16 kNumlockCode = 32; // Code for Num Lock
+static const int16 kMouseSize = 134;
+
+struct MouseHotspotType { // mouse-void
+ int16 _horizontal, _vertical;
+};
+
+struct PedType {
+ int16 _x, _y;
+ byte _direction;
+};
+
+struct MagicType {
+ byte _operation; // one of the operations
+ uint16 _data; // data for them
+};
+
+class FieldType {
+public:
+ int16 _x1, _y1, _x2, _y2;
+};
+
+struct ByteField {
+ byte _x1, _y1, _x2, _y2;
+};
+
+class LineType : public FieldType {
+public:
+ byte _color;
+};
+
+typedef int8 TuneType[31];
+
+struct QuasipedType {
+ byte _whichPed, _foregroundColor, _room, _backgroundColor;
+ uint16 _who;
+};
+
+#if 0
+struct Sundry { // Things which must be saved over a backtobootstrap, outside DNA.
+ Common::String _qEnidFilename;
+ bool _qSoundFx;
+ byte _qThinks;
+ bool _qThinkThing;
+};
+#endif
+
class Avalot {
public:
+ // Objects you can hold:
+ enum Object {
+ kObjectWine = 1,
+ kObjectMoney,
+ kObjectBodkin,
+ kObjectPotion,
+ kObjectChastity,
+ kObjectBolt,
+ kObjectCrossbow,
+ kObjectLute,
+ kObjectBadge,
+ kObjectMushroom,
+ kObjectKey,
+ kObjectBell,
+ kObjectPrescription,
+ kObjectPen,
+ kObjectInk,
+ kObjectClothes,
+ kObjectHabit,
+ kObjectOnion
+ };
+
+ // People who hang around this game.
+ enum People {
+ // Boys:
+ kPeopleAvalot = 150,
+ kPeopleSpludwick = 151,
+ kPeopleCrapulus = 152,
+ kPeopleDrDuck = 153,
+ kPeopleMalagauche = 154,
+ kPeopleFriarTuck = 155,
+ kPeopleRobinHood = 156,
+ kPeopleCwytalot = 157,
+ kPeopleDuLustie = 158,
+ kPeopleDuke = 159,
+ kPeopleDogfood = 160,
+ kPeopleTrader = 161,
+ kPeopleIbythneth = 162,
+ kPeopleAyles = 163,
+ kPeoplePort = 164,
+ kPeopleSpurge = 165,
+ kPeopleJacques = 166,
+ // Girls:
+ kPeopleArkata = 175,
+ kPeopleGeida = 176,
+ kPeopleInvisible = 177,
+ kPeopleWisewoman = 178
+ };
+
+ static const int16 kXW = 30;
+ static const int16 kYW = 36; // x width & y whatsit
+ static const int16 kMargin = 5;
+ static const MouseHotspotType kMouseHotSpots[9];
+ static const int16 kMaxSprites = 2; // Current max no. of sprites.
+
+ // For Thinkabout:
+ static const bool kThing = true;
+ static const bool kPerson = false;
+
+ // Magic/portal constants:
+ enum Magics {
+ kMagicNothing, // Ignore it if this line is touched.
+ kMagicBounce, // Bounce off this line. Not valid for portals.
+ kMagicExclaim, // Put up a chain of scrolls.
+ kMagicTransport, // Enter new room.
+ kMagicUnfinished, // Unfinished connection.
+ kMagicSpecial, // Special function.
+ kMagicOpenDoor // Opening door.
+ };
+
+ // These following static constants should be included in CFG when it's written.
+
+ static const bool kSlowComputer = false; // Stops walking when mouse touches toolbar.
+ static const int16 kBorder = 1; // size of border on shadowboxes
+ static const int16 kWalk = 3;
+ static const int16 kRun = 5;
+ static const int32 kCatacombMap[8][8];
+ static const char kSpludwicksOrder[3];
+ static const QuasipedType kQuasipeds[16];
+
+ enum Pitch {
+ kPitchInvalid,
+ kPitchLower,
+ kPitchSame,
+ kPitchHigher
+ };
+
+ static const uint16 kNotes[12];
+ static const TuneType kTune;
+
+ static const char *kVersionNum;
+ static const char *kCopyright;
+ static const int16 kVersionCode = 130; // Same as kVersionCode, but numerically & without the ".".
+ static const int16 kGameCode = 2; // Avalot's code number
+
+
+
Avalot(AvalancheEngine *vm);
+ ~Avalot();
+
+ bool _holdLeftMouse;
+ Clock _clock;
+
+ // If this is greater than zero, the next line you type is stored in the DNA in a position dictated by the value.
+ // If a scroll comes up, or you leave the room, it's automatically set to zero.
+ byte _interrogation;
+ static byte _whereIs[29];
+
+ // Former DNA structure
+ byte _carryNum; // How many objects you're carrying...
+ bool _objects[kObjectNum]; // ...and which ones they are.
+ int16 _dnascore; // your score, of course
+ int32 _money; // your current amount of dosh
+ byte _room; // your current room
+ byte _wearing; // what you're wearing
+ byte _sworeNum; // number of times you've sworn
+ byte _saveNum; // number of times this game has been saved
+ byte _roomCount[100]; // Add one to each every time you enter a room
+ byte _alcoholLevel; // Your blood alcohol level.
+ byte _playedNim; // How many times you've played Nim.
+ bool _wonNim; // Have you *won* Nim? (That's harder.)
+ byte _wineState; // 0=good (Notts), 1=passable(Argent) ... 3=vinegar.
+ bool _cwytalotGone; // Has Cwytalot rushed off to Jerusalem yet?
+ byte _passwordNum; // Number of the passw for this game.
+ bool _aylesIsAwake; // pretty obvious!
+ byte _drawbridgeOpen; // Between 0 (shut) and 4 (open).
+ byte _avariciusTalk; // How much Avaricius has said to you.
+ bool _boughtOnion; // Have you bought an onion yet?
+ bool _rottenOnion; // And has it rotted?
+ bool _onionInVinegar; // Is the onion in the vinegar?
+ byte _givenToSpludwick; // 0 = nothing given, 1 = onion...
+ byte _brummieStairs; // Progression through the stairs trick.
+ byte _cardiffQuestionNum; // Things you get asked in Cardiff.
+ bool _passedCwytalotInHerts; // Have you passed Cwytalot in Herts?
+ bool _avvyIsAwake; // Well? Is Avvy awake? (Screen 1 only.)
+ bool _avvyInBed; // True if Avvy's in bed, but awake.
+ bool _userMovesAvvy; // If this is false, the user has no control over Avvy's movements.
+ byte _npcFacing; // If there's an NPC in the current room which turns it's head according to Avvy's movement (keep looking at him), this variable tells which way it's facing at the moment.
+ bool _givenBadgeToIby; // Have you given the badge to Iby yet?
+ bool _friarWillTieYouUp; // If you're going to get tied up.
+ bool _tiedUp; // You ARE tied up!
+ byte _boxContent; // 0 = money (sixpence), 254 = empty, any other number implies the contents of the box.
+ bool _talkedToCrapulus; // Pretty self-explanatory.
+ byte _jacquesState; // 0=asleep, 1=awake, 2=gets up, 3=gone.
+ bool _bellsAreRinging; // Is Jacques ringing the bells?
+ bool _standingOnDais; // In room 71, inside Cardiff Castle.
+ bool _takenPen; // Have you taken the pen (in Cardiff?)
+ bool _arrowTriggered; // And has the arrow been triggered?
+ bool _arrowInTheDoor; // Did the arrow hit the wall?
+ Common::String _favouriteDrink, _favouriteSong, _worstPlaceOnEarth, _spareEvening; // Personalisation str's
+ uint32 _totalTime; // Your total time playing this game, in ticks.
+ byte _jumpStatus; // Fixes how high you're jumping.
+ bool _mushroomGrowing; // Is the mushroom growing in 42?
+ bool _spludwickAtHome; // Is Spludwick at home?
+ byte _lastRoom;
+ byte _lastRoomNotMap;
+ bool _crapulusWillTell; // Will Crapulus tell you about Spludwick being away?
+ bool _enterCatacombsFromLustiesRoom;
+ bool _teetotal; // Are we touching any more drinks?
+ byte _malagauche; // Position of Malagauche. See Celer for more info.
+ char _drinking; // What's he getting you?
+ bool _enteredLustiesRoomAsMonk;
+ byte _catacombX, _catacombY; // XY coords in the catacombs.
+ bool _avvysInTheCupboard; // On screen 22.
+ bool _geidaFollows; // Is Geida following you?
+ byte _geidaSpin, _geidaTime; // For the making "Geida dizzy" joke.
+ byte _nextBell; // For the ringing.
+ bool _givenPotionToGeida; // Does Geida have the potion?
+ bool _lustieIsAsleep; // Is BDL asleep?
+ byte _flipToWhere, _flipToPed; // For the sequencer.
+ bool _beenTiedUp; // In r__Robins.
+ bool _sittingInPub; // Are you sitting down in the pub?
+ byte _spurgeTalkCount; // Count for talking to Spurge.
+ bool _metAvaroid;
+ bool _takenMushroom, _givenPenToAyles, _askedDogfoodAboutNim;
+ // End of former DNA Structure
+
+ byte _lineNum; // Number of lines.
+ LineType _lines[50]; // For Also.
+ enum MouseState { kMouseStateNo, kMouseStateYes, kMouseStateVirtual } _mouse;
+ bool _dropsOk, _scReturn, _soundFx, _cheat;
+ Common::String _mouseText;
+ bool _weirdWord;
+ bool _letMeOut;
+ Common::String _scroll[15];
+ byte _scrollNum, _whichwas;
+ byte _thinks;
+ bool _thinkThing;
+ int16 _talkX, _talkY;
+ byte _talkBackgroundColor, _talkFontColor;
+ byte _scrollBells; // no. of times to ring the bell
+ bool _onToolbar, _seeScroll; // TODO: maybe this means we're interacting with the toolbar / a scroll?
+ char _objectList[10];
+ ::Graphics::Surface _digits[10]; // digitsize and rwlitesize are defined in Lucerna::load_digits() !!!
+ ::Graphics::Surface _directions[9]; // Maybe it will be needed to move them to the class itself instead.
+ // Called .free() for them in ~Gyro().
+ int8 _scoreToDisplay[3];
+ byte _currentMouse; // current mouse-void
+ Common::String _verbStr; // what you can do with your object. :-)
+ Common::String *_also[31][2];
+ PedType _peds[15];
+ MagicType _magics[15];
+ MagicType _portals[7];
+ FieldType _fields[30];
+ byte _fieldNum;
+ Common::String _flags;
+ Common::String _listen;
+ Common::String _atKey; // For XTs, set to "alt-". For ATs, set to "f1".
+ byte _cp, _ledStatus, _defaultLed;
+ FontType _font;
+ bool _alive;
+ byte _buffer[2000];
+ uint16 _bufSize;
+ int16 _underScroll; // Y-coord of just under the scroll text.
+ Common::String _roomnName; // Name of actual room
+ Common::String _subject; // What you're talking to them about.
+ byte _subjectNum; // The same thing.
+ bool _keyboardClick; // Is a keyboard click noise wanted?
+ byte _him, _her, _it;
+ int32 _roomTime; // Set to 0 when you enter a room, added to in every loop.
+
+ byte _lastPerson; // Last person to have been selected using the People menu.
+ bool _doingSpriteRun; // Only set to True if we're doing a sprite_run at this moment. This stops the trippancy system from moving any of the sprites.
+ bool _holdTheDawn; // If this is true, calling Dawn will do nothing. It's used, for example, at the start, to stop Load from dawning.
+ bool _isLoaded; // Is it a loaded gamestate?
+ Common::String _enidFilename;
void handleKeyDown(Common::Event &event); // To replace Basher::keyboard_link() and Basher::typein().
void setup();
void runAvalot();
+ void init();
+ void callVerb(byte id);
+ void drawAlsoLines();
+ void loadRoom(byte num);
+ void exitRoom(byte x);
+ void enterRoom(byte room, byte ped);
+ void thinkAbout(byte object, bool type); // Hey!!! Get it and put it!!!
+ void loadDigits(); // Load the scoring digits & rwlites
+ void drawToolbar();
+ void drawScore();
+ void incScore(byte num); // Add on no. of points
+ void useCompass(const Common::Point &cursorPos); // Click on the compass on the toolbar to control Avvy's movement.
+ void fxToggle();
+ void refreshObjectList();
+ void checkClick();
+ void errorLed();
+ void dusk();
+ void dawn();
+ void drawDirection(); // Draws the little icon at the left end of the text input field.
+ void gameOver();
+ uint16 bearing(byte whichPed); // Returns the bearing from ped 'whichped' to Avvy, in degrees.
+ void fixFlashers();
+ void loadAlso(byte num);
+
+ // There are two kinds of redraw: Major and Minor. Minor is what happens when you load a game, etc. Major redraws EVERYTHING.
+ void minorRedraw();
+ void majorRedraw();
+
+ void spriteRun();
+
+ Common::String intToStr(int32 num);
+ void newMouse(byte id);
+ void setMousePointerWait(); // Makes hourglass.
+ void loadMouse(byte which);
+
+ void setBackgroundColor(byte x);
+ void drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::String t);
+
+ void resetVariables();
+ void newGame(); // This sets up the DNA for a completely new game.
+ void slowDown();
+ bool setFlag(char x);
+ bool decreaseMoney(uint16 howmuchby); // Called pennycheck in the original.
+ void hangAroundForAWhile();
+
+ Common::String getName(byte whose);
+ byte getNameChar(byte whose);
+ Common::String getThing(byte which);
+ char getThingChar(byte which);
+ Common::String getItem(byte which); // Called get_better in the original.
+ Common::String f5Does(); // This procedure determines what f5 does.
+
private:
AvalancheEngine *_vm;
+
+ Common::File file;
+ Common::String readAlsoStringFromFile();
+ void scram(Common::String &str);
+ void unScramble();
+
+ void zoomOut(int16 x, int16 y); // Only used when entering the map.
+ void enterNewTown();
+ void findPeople(byte room);
+ void putGeidaAt(byte whichPed, byte ped);
+ void guideAvvy(Common::Point cursorPos);
+
+ // Will be used in dusk() and dawn().
+ bool _fxHidden;
+
+ int8 fades(int8 x);
+ void fadeOut(byte n);
+ void fadeIn(byte n);
+
+ void drawShadow(int16 x1, int16 y1, int16 x2, int16 y2, byte hc, byte sc);
};
} // End of namespace Avalanche
diff --git a/engines/avalanche/background.cpp b/engines/avalanche/background.cpp
index 3a70fd7915..9da9161110 100644
--- a/engines/avalanche/background.cpp
+++ b/engines/avalanche/background.cpp
@@ -30,8 +30,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/background.h"
#include "avalanche/animation.h"
-#include "avalanche/lucerna.h"
-#include "avalanche/gyro.h"
#include "common/textconsole.h"
@@ -55,28 +53,28 @@ void Background::updateBackgroundSprites() {
if (_vm->_menu->isActive())
return; // No animation when the menus are up.
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomOutsideArgentPub:
- if ((_vm->_gyro->_roomTime % 12) == 0)
- drawBackgroundSprite(-1, -1, (_vm->_gyro->_roomTime / 12) % 4);
+ if ((_vm->_avalot->_roomTime % 12) == 0)
+ drawBackgroundSprite(-1, -1, (_vm->_avalot->_roomTime / 12) % 4);
break;
case kRoomBrummieRoad:
- if ((_vm->_gyro->_roomTime % 2) == 0)
- drawBackgroundSprite(-1, -1, (_vm->_gyro->_roomTime / 2) % 4);
+ if ((_vm->_avalot->_roomTime % 2) == 0)
+ drawBackgroundSprite(-1, -1, (_vm->_avalot->_roomTime / 2) % 4);
break;
case kRoomBridge:
- if ((_vm->_gyro->_roomTime % 2) == 0)
- drawBackgroundSprite(-1, -1, 3 + (_vm->_gyro->_roomTime / 2) % 4);
+ if ((_vm->_avalot->_roomTime % 2) == 0)
+ drawBackgroundSprite(-1, -1, 3 + (_vm->_avalot->_roomTime / 2) % 4);
break;
case kRoomYours:
- if ((!_vm->_gyro->_avvyIsAwake) && ((_vm->_gyro->_roomTime % 4) == 0))
- drawBackgroundSprite(-1, -1, (_vm->_gyro->_roomTime / 12) % 2);
+ if ((!_vm->_avalot->_avvyIsAwake) && ((_vm->_avalot->_roomTime % 4) == 0))
+ drawBackgroundSprite(-1, -1, (_vm->_avalot->_roomTime / 12) % 2);
break;
case kRoomArgentPub:
- if (((_vm->_gyro->_roomTime % 7) == 1) && (_vm->_gyro->_malagauche != 177)) {
+ if (((_vm->_avalot->_roomTime % 7) == 1) && (_vm->_avalot->_malagauche != 177)) {
// Malagauche cycle.
- _vm->_gyro->_malagauche += 1;
- switch (_vm->_gyro->_malagauche) {
+ _vm->_avalot->_malagauche += 1;
+ switch (_vm->_avalot->_malagauche) {
case 1:
case 11:
case 21:
@@ -92,12 +90,12 @@ void Background::updateBackgroundSprites() {
drawBackgroundSprite(-1, -1, 12); // Winks.
break;
case 33:
- _vm->_gyro->_malagauche = 0;
+ _vm->_avalot->_malagauche = 0;
break;
}
}
- switch (_vm->_gyro->_roomTime % 200) {
+ switch (_vm->_avalot->_roomTime % 200) {
case 179:
case 197:
drawBackgroundSprite(-1, -1, 4); // Dogfood's drinking cycle.
@@ -110,13 +108,13 @@ void Background::updateBackgroundSprites() {
drawBackgroundSprite(-1, -1, 6);
break;
case 199:
- _vm->_gyro->_npcFacing = 177; // Impossible value for this.
+ _vm->_avalot->_npcFacing = 177; // Impossible value for this.
break;
}
- if ((_vm->_gyro->_roomTime % 200 >= 0) && (_vm->_gyro->_roomTime % 200 <= 178)) { // Normally.
+ if ((_vm->_avalot->_roomTime % 200 >= 0) && (_vm->_avalot->_roomTime % 200 <= 178)) { // Normally.
byte direction = 0;
- uint16 angle = _vm->_lucerna->bearing(1);
+ uint16 angle = _vm->_avalot->bearing(1);
if (((angle >= 1) && (angle <= 90)) || ((angle >= 358) && (angle <= 360)))
direction = 3;
else if ((angle >= 293) && (angle <= 357))
@@ -124,15 +122,15 @@ void Background::updateBackgroundSprites() {
else if ((angle >= 271) && (angle <= 292))
direction = 4;
- if (direction != _vm->_gyro->_npcFacing) { // Dogfood.
+ if (direction != _vm->_avalot->_npcFacing) { // Dogfood.
drawBackgroundSprite(-1, -1, direction - 1);
- _vm->_gyro->_npcFacing = direction;
+ _vm->_avalot->_npcFacing = direction;
}
}
break;
case kRoomWestHall:
- if ((_vm->_gyro->_roomTime % 3) == 0) {
- switch ((_vm->_gyro->_roomTime / int32(3)) % int32(6)) {
+ if ((_vm->_avalot->_roomTime % 3) == 0) {
+ switch ((_vm->_avalot->_roomTime / int32(3)) % int32(6)) {
case 4:
drawBackgroundSprite(-1, -1, 0);
break;
@@ -149,10 +147,10 @@ void Background::updateBackgroundSprites() {
}
break;
case kRoomLustiesRoom:
- if (!(_vm->_gyro->_lustieIsAsleep)) {
+ if (!(_vm->_avalot->_lustieIsAsleep)) {
byte direction = 0;
- uint16 angle = _vm->_lucerna->bearing(1);
- if ((_vm->_gyro->_roomTime % 45) > 42)
+ uint16 angle = _vm->_avalot->bearing(1);
+ if ((_vm->_avalot->_roomTime % 45) > 42)
direction = 4; // du Lustie blinks.
// Bearing of Avvy from du Lustie.
else if ((angle <= 45) || ((angle >= 315) && (angle <= 360)))
@@ -162,15 +160,15 @@ void Background::updateBackgroundSprites() {
else if ((angle >= 181) && (angle <= 314))
direction = 3; // Right.
- if (direction != _vm->_gyro->_npcFacing) { // du Lustie.
+ if (direction != _vm->_avalot->_npcFacing) { // du Lustie.
drawBackgroundSprite(-1, -1, direction - 1);
- _vm->_gyro->_npcFacing = direction;
+ _vm->_avalot->_npcFacing = direction;
}
}
break;
case kRoomAylesOffice:
- if ((!_vm->_gyro->_aylesIsAwake) && (_vm->_gyro->_roomTime % 14 == 0)) {
- switch ((_vm->_gyro->_roomTime / 14) % 2) {
+ if ((!_vm->_avalot->_aylesIsAwake) && (_vm->_avalot->_roomTime % 14 == 0)) {
+ switch ((_vm->_avalot->_roomTime / 14) % 2) {
case 0:
drawBackgroundSprite(-1, -1, 0); // Frame 2: EGA.
break;
@@ -181,8 +179,8 @@ void Background::updateBackgroundSprites() {
}
break;
case kRoomRobins:
- if (_vm->_gyro->_tiedUp) {
- switch (_vm->_gyro->_roomTime % 54) {
+ if (_vm->_avalot->_tiedUp) {
+ switch (_vm->_avalot->_roomTime % 54) {
case 20:
drawBackgroundSprite(-1, -1, 3); // Frame 4: Avalot blinks.
break;
@@ -195,7 +193,7 @@ void Background::updateBackgroundSprites() {
case kRoomNottsPub: {
// Bearing of Avvy from Port.
byte direction = 0;
- uint16 angle = _vm->_lucerna->bearing(4);
+ uint16 angle = _vm->_avalot->bearing(4);
if ((angle <= 45) || ((angle >= 315) && (angle <= 360)))
direction = 2; // Middle.
else if ((angle >= 45) && (angle <= 180))
@@ -203,15 +201,15 @@ void Background::updateBackgroundSprites() {
else if ((angle >= 181) && (angle <= 314))
direction = 8; // Right.
- if ((_vm->_gyro->_roomTime % 60) > 57)
+ if ((_vm->_avalot->_roomTime % 60) > 57)
direction--; // Blinks.
- if (direction != _vm->_gyro->_npcFacing) { // Port.
+ if (direction != _vm->_avalot->_npcFacing) { // Port.
drawBackgroundSprite(-1, -1, direction - 1);
- _vm->_gyro->_npcFacing = direction;
+ _vm->_avalot->_npcFacing = direction;
}
- switch (_vm->_gyro->_roomTime % 50) {
+ switch (_vm->_avalot->_roomTime % 50) {
case 45 :
drawBackgroundSprite(-1, -1, 8); // Spurge blinks.
break;
@@ -222,12 +220,12 @@ void Background::updateBackgroundSprites() {
break;
}
case kRoomDucks: {
- if ((_vm->_gyro->_roomTime % 3) == 0) // The fire flickers.
- drawBackgroundSprite(-1, -1, (_vm->_gyro->_roomTime / 3) % 3);
+ if ((_vm->_avalot->_roomTime % 3) == 0) // The fire flickers.
+ drawBackgroundSprite(-1, -1, (_vm->_avalot->_roomTime / 3) % 3);
// Bearing of Avvy from Duck.
byte direction = 0;
- uint16 angle = _vm->_lucerna->bearing(1);
+ uint16 angle = _vm->_avalot->bearing(1);
if ((angle <= 45) || ((angle >= 315) && (angle <= 360)))
direction = 4; // Middle.
else if ((angle >= 45) && (angle <= 180))
@@ -235,26 +233,26 @@ void Background::updateBackgroundSprites() {
else if ((angle >= 181) && (angle <= 314))
direction = 8; // Right.
- if ((_vm->_gyro->_roomTime % 45) > 42)
+ if ((_vm->_avalot->_roomTime % 45) > 42)
direction++; // Duck blinks.
- if (direction != _vm->_gyro->_npcFacing) { // Duck.
+ if (direction != _vm->_avalot->_npcFacing) { // Duck.
drawBackgroundSprite(-1, -1, direction - 1);
- _vm->_gyro->_npcFacing = direction;
+ _vm->_avalot->_npcFacing = direction;
}
break;
}
}
- if ((_vm->_gyro->_bellsAreRinging) && (_vm->_gyro->setFlag('B'))) {
+ if ((_vm->_avalot->_bellsAreRinging) && (_vm->_avalot->setFlag('B'))) {
// They're ringing the bells.
- switch (_vm->_gyro->_roomTime % 4) {
+ switch (_vm->_avalot->_roomTime % 4) {
case 1:
- if (_vm->_gyro->_nextBell < 5)
- _vm->_gyro->_nextBell = 12;
- _vm->_gyro->_nextBell--;
+ if (_vm->_avalot->_nextBell < 5)
+ _vm->_avalot->_nextBell = 12;
+ _vm->_avalot->_nextBell--;
// CHECKME: 2 is a guess. No length in the original?
- _vm->_sound->playNote(_vm->_gyro->kNotes[_vm->_gyro->_nextBell], 2);
+ _vm->_sound->playNote(_vm->_avalot->kNotes[_vm->_avalot->_nextBell], 2);
break;
case 2:
_vm->_sound->stopSound();
diff --git a/engines/avalanche/closing.cpp b/engines/avalanche/closing.cpp
index 39f177e6aa..822148499a 100644
--- a/engines/avalanche/closing.cpp
+++ b/engines/avalanche/closing.cpp
@@ -29,8 +29,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/closing.h"
-#include "avalanche/gyro.h"
-#include "avalanche/lucerna.h"
#include "common/textconsole.h"
#include "common/random.h"
diff --git a/engines/avalanche/dialogs.cpp b/engines/avalanche/dialogs.cpp
index 69a398439a..3004f621a4 100644
--- a/engines/avalanche/dialogs.cpp
+++ b/engines/avalanche/dialogs.cpp
@@ -29,8 +29,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/dialogs.h"
-#include "avalanche/gyro.h"
-#include "avalanche/lucerna.h"
#include "avalanche/animation.h"
#include "avalanche/timer.h"
@@ -50,7 +48,7 @@ void Dialogs::init() {
}
void Dialogs::setReadyLight(byte state) { // Sets "Ready" light to whatever
- if (_vm->_gyro->_ledStatus == state)
+ if (_vm->_avalot->_ledStatus == state)
return; // Already like that!
byte color = kColorBlack;
@@ -71,7 +69,7 @@ void Dialogs::setReadyLight(byte state) { // Sets "Ready" light to whatever
_vm->_graphics->_surface.fillRect(Common::Rect(419, 195, 438, 197), color);
CursorMan.showMouse(true);
- _vm->_gyro->_ledStatus = state;
+ _vm->_avalot->_ledStatus = state;
}
void Dialogs::easterEgg() {
@@ -116,8 +114,8 @@ void Dialogs::scrollModeNormal() {
Common::String e = "(c) 1994";
setReadyLight(3);
- _vm->_gyro->_seeScroll = true;
- _vm->_gyro->newMouse(3);
+ _vm->_avalot->_seeScroll = true;
+ _vm->_avalot->newMouse(3);
::Graphics::Surface temp;
temp.copyFrom(_vm->_graphics->_surface);
@@ -145,7 +143,7 @@ void Dialogs::scrollModeNormal() {
bool oktoexit;
do {
do {
- _vm->_gyro->check(); // was "checkclick;"
+ _vm->_avalot->check(); // was "checkclick;"
//#ifdef RECORD slowdown(); basher::count += 1; #endif
@@ -170,12 +168,12 @@ void Dialogs::scrollModeNormal() {
//#ifdef RECORD record_one(); #endif
- _vm->_gyro->screturn = r == '#'; // "back door"
+ _vm->_avalot->screturn = r == '#'; // "back door"
#endif
setReadyLight(0);
- _vm->_gyro->_seeScroll = false;
- _vm->_lucerna->_holdLeftMouse = false; // Used in Lucerna::checkclick().
+ _vm->_avalot->_seeScroll = false;
+ _vm->_avalot->_holdLeftMouse = false; // Used in Lucerna::checkclick().
warning("STUB: Scrolls::scrollModeNormal()");
}
@@ -193,7 +191,7 @@ bool Dialogs::theyMatch(TuneType &played) {
byte mistakes = 0;
for (unsigned int i = 0; i < sizeof(played); i++) {
- if (played[i] != _vm->_gyro->kTune[i])
+ if (played[i] != _vm->_avalot->kTune[i])
mistakes += 1;
}
@@ -202,16 +200,16 @@ bool Dialogs::theyMatch(TuneType &played) {
void Dialogs::scrollModeMusic() {
setReadyLight(3);
- _vm->_gyro->_seeScroll = true;
+ _vm->_avalot->_seeScroll = true;
CursorMan.showMouse(false);
- _vm->_gyro->newMouse(3);
+ _vm->_avalot->newMouse(3);
TuneType played;
for (unsigned int i = 0; i < sizeof(played); i++)
- played[i] = Gyro::kPitchInvalid;
+ played[i] = Avalot::kPitchInvalid;
int8 lastOne = -1, thisOne = -1; // Invalid values.
- _vm->_gyro->_seeScroll = true;
+ _vm->_avalot->_seeScroll = true;
::Graphics::Surface temp;
temp.copyFrom(_vm->_graphics->_surface);
@@ -282,16 +280,16 @@ void Dialogs::scrollModeMusic() {
lastOne = thisOne;
thisOne = value;
- _vm->_sound->playNote(_vm->_gyro->kNotes[thisOne], 100);
+ _vm->_sound->playNote(_vm->_avalot->kNotes[thisOne], 100);
_vm->_system->delayMillis(200);
- if (!_vm->_gyro->_bellsAreRinging) { // These handle playing the right tune.
+ if (!_vm->_avalot->_bellsAreRinging) { // These handle playing the right tune.
if (thisOne < lastOne)
- store(Gyro::kPitchLower, played);
+ store(Avalot::kPitchLower, played);
else if (thisOne == lastOne)
- store(Gyro::kPitchSame, played);
+ store(Avalot::kPitchSame, played);
else
- store(Gyro::kPitchHigher, played);
+ store(Avalot::kPitchHigher, played);
}
if (theyMatch(played)) {
@@ -304,30 +302,30 @@ void Dialogs::scrollModeMusic() {
_vm->_graphics->_surface.copyFrom(temp);
temp.free();
- _vm->_gyro->_seeScroll = false;
+ _vm->_avalot->_seeScroll = false;
CursorMan.showMouse(true);
}
void Dialogs::resetScrollDriver() {
- _vm->_gyro->_scrollBells = 0;
+ _vm->_avalot->_scrollBells = 0;
_currentFont = kFontStyleRoman;
_useIcon = 0;
- _vm->_gyro->_interrogation = 0; // Always reset after a scroll comes up.
+ _vm->_avalot->_interrogation = 0; // Always reset after a scroll comes up.
}
void Dialogs::ringBell() { // Pussy's in the well. Who put her in? Little...
- for (int i = 0; i < _vm->_gyro->_scrollBells; i++)
- _vm->_lucerna->errorLed(); // Ring the bell "x" times.
+ for (int i = 0; i < _vm->_avalot->_scrollBells; i++)
+ _vm->_avalot->errorLed(); // Ring the bell "x" times.
}
void Dialogs::dodgem() {
_dodgeCoord = _vm->getMousePos();
- g_system->warpMouse(_dodgeCoord.x, _vm->_gyro->_underScroll); // Move the pointer off the scroll.
+ g_system->warpMouse(_dodgeCoord.x, _vm->_avalot->_underScroll); // Move the pointer off the scroll.
}
void Dialogs::unDodgem() {
Common::Point actCoord = _vm->getMousePos();
- if ((actCoord.x == _dodgeCoord.x) && (actCoord.y == _vm->_gyro->_underScroll))
+ if ((actCoord.x == _dodgeCoord.x) && (actCoord.y == _vm->_avalot->_underScroll))
g_system->warpMouse(_dodgeCoord.x, _dodgeCoord.y); // No change, so restore the pointer's original position.
}
@@ -358,7 +356,7 @@ void Dialogs::drawSign(Common::String fn, int16 xl, int16 yl, int16 y) {
error("AVALANCHE: Scrolls: File not found: %s", filename.c_str());
#if 0
- uint16 st = (y - 1) * 80 + (40 - xl / 2) + ((1 - _vm->_gyro->cp) * _vm->_gyro->pagetop);
+ uint16 st = (y - 1) * 80 + (40 - xl / 2) + ((1 - _vm->_avalot->cp) * _vm->_avalot->pagetop);
byte bit;
for (uint16 i = 1; i <= yl; i++)
for (bit = 0; bit <= 3; bit++) {
@@ -378,10 +376,10 @@ void Dialogs::drawSign(Common::String fn, int16 xl, int16 yl, int16 y) {
void Dialogs::drawScroll(DialogFunctionType modeFunc) {
int16 lx = 0;
- int16 ly = (_vm->_gyro->_scrollNum) * 6;
+ int16 ly = (_vm->_avalot->_scrollNum) * 6;
int16 ex;
- for (int i = 0; i < _vm->_gyro->_scrollNum; i++) {
- ex = _vm->_gyro->_scroll[i].size() * 8;
+ for (int i = 0; i < _vm->_avalot->_scrollNum; i++) {
+ ex = _vm->_avalot->_scroll[i].size() * 8;
if (lx < ex)
lx = ex;
}
@@ -447,47 +445,47 @@ void Dialogs::drawScroll(DialogFunctionType modeFunc) {
iconIndent = 53;
}
- for (int i = 0; i < _vm->_gyro->_scrollNum; i++) {
- if (!_vm->_gyro->_scroll[i].empty())
- switch (_vm->_gyro->_scroll[i][_vm->_gyro->_scroll[i].size() - 1]) {
+ for (int i = 0; i < _vm->_avalot->_scrollNum; i++) {
+ if (!_vm->_avalot->_scroll[i].empty())
+ switch (_vm->_avalot->_scroll[i][_vm->_avalot->_scroll[i].size() - 1]) {
case kControlCenter:
centre = true;
- _vm->_gyro->_scroll[i].deleteLastChar();
+ _vm->_avalot->_scroll[i].deleteLastChar();
break;
case kControlLeftJustified:
centre = false;
- _vm->_gyro->_scroll[i].deleteLastChar();
+ _vm->_avalot->_scroll[i].deleteLastChar();
break;
case kControlQuestion:
//settextjustify(1, 1);
_shadowBoxX = mx + lx;
_shadowBoxY = my + ly;
- _vm->_gyro->_scroll[i].setChar(' ', 0);
+ _vm->_avalot->_scroll[i].setChar(' ', 0);
// byte groi = *_vm->_graphics->getPixel(0, 0);
// inc(diy,14);
- _vm->_gyro->drawShadowBox(_shadowBoxX - 65, _shadowBoxY - 24, _shadowBoxX - 5, _shadowBoxY - 10, "Yes.");
- _vm->_gyro->drawShadowBox(_shadowBoxX + 5, _shadowBoxY - 24, _shadowBoxX + 65, _shadowBoxY - 10, "No.");
+ _vm->_avalot->drawShadowBox(_shadowBoxX - 65, _shadowBoxY - 24, _shadowBoxX - 5, _shadowBoxY - 10, "Yes.");
+ _vm->_avalot->drawShadowBox(_shadowBoxX + 5, _shadowBoxY - 24, _shadowBoxX + 65, _shadowBoxY - 10, "No.");
break;
}
if (centre)
- say(320 - _vm->_gyro->_scroll[i].size() * 4 + iconIndent, my, _vm->_gyro->_scroll[i]);
+ say(320 - _vm->_avalot->_scroll[i].size() * 4 + iconIndent, my, _vm->_avalot->_scroll[i]);
else
- say(mx + iconIndent, my, _vm->_gyro->_scroll[i]);
+ say(mx + iconIndent, my, _vm->_avalot->_scroll[i]);
my += 12;
}
- _vm->_gyro->_underScroll = my * 2 + 6; // Multiplying because of the doubled screen height.
+ _vm->_avalot->_underScroll = my * 2 + 6; // Multiplying because of the doubled screen height.
ringBell();
- _vm->_gyro->_dropsOk = false;
+ _vm->_avalot->_dropsOk = false;
dodgem();
(this->*modeFunc)();
unDodgem();
- _vm->_gyro->_dropsOk = true;
+ _vm->_avalot->_dropsOk = true;
resetScrollDriver();
}
@@ -497,9 +495,9 @@ void Dialogs::drawBubble(DialogFunctionType modeFunc) {
CursorMan.showMouse(false);
int16 xl = 0;
- int16 yl = _vm->_gyro->_scrollNum * 5;
- for (int i = 0; i < _vm->_gyro->_scrollNum; i++) {
- uint16 textWidth = _vm->_gyro->_scroll[i].size() * 8;
+ int16 yl = _vm->_avalot->_scrollNum * 5;
+ for (int i = 0; i < _vm->_avalot->_scrollNum; i++) {
+ uint16 textWidth = _vm->_avalot->_scroll[i].size() * 8;
if (textWidth > xl)
xl = textWidth;
}
@@ -510,55 +508,55 @@ void Dialogs::drawBubble(DialogFunctionType modeFunc) {
int16 my = yw * 2 - 2;
int16 xc = 0;
- if ((_vm->_gyro->_talkX - xw) < 0)
- xc = -(_vm->_gyro->_talkX - xw);
- if ((_vm->_gyro->_talkX + xw) > 639)
- xc = 639 - (_vm->_gyro->_talkX + xw);
+ if ((_vm->_avalot->_talkX - xw) < 0)
+ xc = -(_vm->_avalot->_talkX - xw);
+ if ((_vm->_avalot->_talkX + xw) > 639)
+ xc = 639 - (_vm->_avalot->_talkX + xw);
- points[0].x = _vm->_gyro->_talkX - 10;
+ points[0].x = _vm->_avalot->_talkX - 10;
points[0].y = yw;
- points[1].x = _vm->_gyro->_talkX + 10;
+ points[1].x = _vm->_avalot->_talkX + 10;
points[1].y = yw;
- points[2].x = _vm->_gyro->_talkX;
- points[2].y = _vm->_gyro->_talkY;
+ points[2].x = _vm->_avalot->_talkX;
+ points[2].y = _vm->_avalot->_talkY;
// Backup the screen before drawing the bubble.
_vm->_graphics->_scrolls.copyFrom(_vm->_graphics->_surface);
// The body of the bubble.
- _vm->_graphics->_scrolls.fillRect(Common::Rect(xc + _vm->_gyro->_talkX - xw + 9, 7, _vm->_gyro->_talkX + xw - 8 + xc, my + 1), _vm->_gyro->_talkBackgroundColor);
- _vm->_graphics->_scrolls.fillRect(Common::Rect(xc + _vm->_gyro->_talkX - xw - 1, 12, _vm->_gyro->_talkX + xw + xc + 2, my - 4), _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->_scrolls.fillRect(Common::Rect(xc + _vm->_avalot->_talkX - xw + 9, 7, _vm->_avalot->_talkX + xw - 8 + xc, my + 1), _vm->_avalot->_talkBackgroundColor);
+ _vm->_graphics->_scrolls.fillRect(Common::Rect(xc + _vm->_avalot->_talkX - xw - 1, 12, _vm->_avalot->_talkX + xw + xc + 2, my - 4), _vm->_avalot->_talkBackgroundColor);
// Top right corner of the bubble.
- _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_gyro->_talkX + xw - 10, 11, 0, 90, 9, _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_avalot->_talkX + xw - 10, 11, 0, 90, 9, _vm->_avalot->_talkBackgroundColor);
// Bottom right corner of the bubble.
- _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_gyro->_talkX + xw - 10, my - 4, 270, 360, 9, _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_avalot->_talkX + xw - 10, my - 4, 270, 360, 9, _vm->_avalot->_talkBackgroundColor);
// Top left corner of the bubble.
- _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_gyro->_talkX - xw + 10, 11, 90, 180, 9, _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_avalot->_talkX - xw + 10, 11, 90, 180, 9, _vm->_avalot->_talkBackgroundColor);
// Bottom left corner of the bubble.
- _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_gyro->_talkX - xw + 10, my - 4, 180, 270, 9, _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->drawPieSlice(_vm->_graphics->_scrolls, xc + _vm->_avalot->_talkX - xw + 10, my - 4, 180, 270, 9, _vm->_avalot->_talkBackgroundColor);
// "Tail" of the speech bubble.
- _vm->_graphics->drawTriangle(_vm->_graphics->_scrolls, points, _vm->_gyro->_talkBackgroundColor);
+ _vm->_graphics->drawTriangle(_vm->_graphics->_scrolls, points, _vm->_avalot->_talkBackgroundColor);
// Draw the text of the bubble. The centering of the text was improved here compared to Pascal's settextjustify().
- // The font is not the same that outtextxy() uses in Pascal. I don't have that, so I used Gyro::characters instead.
+ // The font is not the same that outtextxy() uses in Pascal. I don't have that, so I used Avalot::characters instead.
// It's almost the same, only notable differences are '?', '!', etc.
- for (int i = 0; i < _vm->_gyro->_scrollNum; i++) {
- int16 x = xc + _vm->_gyro->_talkX - _vm->_gyro->_scroll[i].size() / 2 * 8;
- bool offset = _vm->_gyro->_scroll[i].size() % 2;
- _vm->_graphics->drawText(_vm->_graphics->_scrolls, _vm->_gyro->_scroll[i], _vm->_gyro->_font, 8, x - offset * 4, (i * 10) + 12, _vm->_gyro->_talkFontColor);
+ for (int i = 0; i < _vm->_avalot->_scrollNum; i++) {
+ int16 x = xc + _vm->_avalot->_talkX - _vm->_avalot->_scroll[i].size() / 2 * 8;
+ bool offset = _vm->_avalot->_scroll[i].size() % 2;
+ _vm->_graphics->drawText(_vm->_graphics->_scrolls, _vm->_avalot->_scroll[i], _vm->_avalot->_font, 8, x - offset * 4, (i * 10) + 12, _vm->_avalot->_talkFontColor);
}
ringBell();
CursorMan.showMouse(false);
- _vm->_gyro->_dropsOk = false;
+ _vm->_avalot->_dropsOk = false;
// This does the actual drawing to the screen.
(this->*modeFunc)();
- _vm->_gyro->_dropsOk = true;
+ _vm->_avalot->_dropsOk = true;
CursorMan.showMouse(true); // sink;
resetScrollDriver();
}
@@ -569,36 +567,36 @@ bool Dialogs::displayQuestion(Common::String question) {
}
void Dialogs::reset() {
- _vm->_gyro->_scrollNum = 1;
+ _vm->_avalot->_scrollNum = 1;
for (int i = 0; i < 15; i++) {
- if (!_vm->_gyro->_scroll[i].empty())
- _vm->_gyro->_scroll[i].clear();
+ if (!_vm->_avalot->_scroll[i].empty())
+ _vm->_avalot->_scroll[i].clear();
}
}
void Dialogs::setBubbleStateNatural() {
- _vm->_gyro->_talkX = 320;
- _vm->_gyro->_talkY = 200;
- _vm->_gyro->_talkBackgroundColor = 8;
- _vm->_gyro->_talkFontColor = 15;
+ _vm->_avalot->_talkX = 320;
+ _vm->_avalot->_talkY = 200;
+ _vm->_avalot->_talkBackgroundColor = 8;
+ _vm->_avalot->_talkFontColor = 15;
}
Common::String Dialogs::displayMoney() {
Common::String result;
- if (_vm->_gyro->_money < 12) { // just pence
- result = Common::String::format("%dd", _vm->_gyro->_money);
- } else if (_vm->_gyro->_money < 240) { // shillings & pence
- if ((_vm->_gyro->_money % 12) == 0)
- result = Common::String::format("%d/-", _vm->_gyro->_money / 12);
+ if (_vm->_avalot->_money < 12) { // just pence
+ result = Common::String::format("%dd", _vm->_avalot->_money);
+ } else if (_vm->_avalot->_money < 240) { // shillings & pence
+ if ((_vm->_avalot->_money % 12) == 0)
+ result = Common::String::format("%d/-", _vm->_avalot->_money / 12);
else
- result = Common::String::format("%d/%d", _vm->_gyro->_money / 12, _vm->_gyro->_money % 12);
+ result = Common::String::format("%d/%d", _vm->_avalot->_money / 12, _vm->_avalot->_money % 12);
} else { // L, s & d
- result = Common::String::format("\x9C%d.%d.%d", _vm->_gyro->_money / 240, (_vm->_gyro->_money / 12) % 20,
- _vm->_gyro->_money % 12);
+ result = Common::String::format("\x9C%d.%d.%d", _vm->_avalot->_money / 240, (_vm->_avalot->_money / 12) % 20,
+ _vm->_avalot->_money % 12);
}
- if (_vm->_gyro->_money > 12) {
- Common::String extraStr = Common::String::format(" (that's %dd)", _vm->_gyro->_money);
+ if (_vm->_avalot->_money > 12) {
+ Common::String extraStr = Common::String::format(" (that's %dd)", _vm->_avalot->_money);
result += extraStr;
}
@@ -611,16 +609,16 @@ void Dialogs::stripTrailingSpaces(Common::String &str) {
}
void Dialogs::solidify(byte n) {
- if (!_vm->_gyro->_scroll[n].contains(' '))
+ if (!_vm->_avalot->_scroll[n].contains(' '))
return; // No spaces.
// So there MUST be a space there, somewhere...
do {
- _vm->_gyro->_scroll[n + 1] = _vm->_gyro->_scroll[n][_vm->_gyro->_scroll[n].size() - 1] + _vm->_gyro->_scroll[n + 1];
- _vm->_gyro->_scroll[n].deleteLastChar();
- } while (_vm->_gyro->_scroll[n][_vm->_gyro->_scroll[n].size() - 1] != ' ');
+ _vm->_avalot->_scroll[n + 1] = _vm->_avalot->_scroll[n][_vm->_avalot->_scroll[n].size() - 1] + _vm->_avalot->_scroll[n + 1];
+ _vm->_avalot->_scroll[n].deleteLastChar();
+ } while (_vm->_avalot->_scroll[n][_vm->_avalot->_scroll[n].size() - 1] != ' ');
- stripTrailingSpaces(_vm->_gyro->_scroll[n]);
+ stripTrailingSpaces(_vm->_avalot->_scroll[n]);
}
void Dialogs::callDialogDriver() {
@@ -630,60 +628,60 @@ void Dialogs::callDialogDriver() {
_vm->_sound->stopSound();
setReadyLight(0);
- _vm->_gyro->_scReturn = false;
+ _vm->_avalot->_scReturn = false;
bool mouthnext = false;
bool call_spriterun = true; // Only call sprite_run the FIRST time.
- switch (_vm->_gyro->_buffer[_vm->_gyro->_bufSize - 1]) {
+ switch (_vm->_avalot->_buffer[_vm->_avalot->_bufSize - 1]) {
case kControlToBuffer:
- _vm->_gyro->_bufSize--;
+ _vm->_avalot->_bufSize--;
break; // ^D = (D)on't include pagebreak
case kControlSpeechBubble:
case kControlQuestion:
break; // ^B = speech (B)ubble, ^Q = (Q)uestion in dialogue box
default:
- _vm->_gyro->_buffer[_vm->_gyro->_bufSize] = kControlParagraph;
- _vm->_gyro->_bufSize++;
+ _vm->_avalot->_buffer[_vm->_avalot->_bufSize] = kControlParagraph;
+ _vm->_avalot->_bufSize++;
}
- uint16 size = _vm->_gyro->_bufSize;
+ uint16 size = _vm->_avalot->_bufSize;
for (uint16 i = 0; i < size; i++) {
if (mouthnext) {
- if (_vm->_gyro->_buffer[i] == kControlRegister)
+ if (_vm->_avalot->_buffer[i] == kControlRegister)
_param = 0;
- else if (('0' <= _vm->_gyro->_buffer[i]) && (_vm->_gyro->_buffer[i] <= '9'))
- _param = _vm->_gyro->_buffer[i] - 48;
- else if (('A' <= _vm->_gyro->_buffer[i]) && (_vm->_gyro->_buffer[i] <= 'Z'))
- _param = _vm->_gyro->_buffer[i] - 55;
+ else if (('0' <= _vm->_avalot->_buffer[i]) && (_vm->_avalot->_buffer[i] <= '9'))
+ _param = _vm->_avalot->_buffer[i] - 48;
+ else if (('A' <= _vm->_avalot->_buffer[i]) && (_vm->_avalot->_buffer[i] <= 'Z'))
+ _param = _vm->_avalot->_buffer[i] - 55;
mouthnext = false;
} else {
- switch (_vm->_gyro->_buffer[i]) {
+ switch (_vm->_avalot->_buffer[i]) {
case kControlParagraph:
- if ((_vm->_gyro->_scrollNum == 1) && (_vm->_gyro->_scroll[0].empty()))
+ if ((_vm->_avalot->_scrollNum == 1) && (_vm->_avalot->_scroll[0].empty()))
break;
if (call_spriterun)
- _vm->_lucerna->spriteRun();
+ _vm->_avalot->spriteRun();
call_spriterun = false;
drawScroll(&Avalanche::Dialogs::scrollModeNormal);
reset();
- if (_vm->_gyro->_scReturn)
+ if (_vm->_avalot->_scReturn)
return;
break;
case kControlBell:
- _vm->_gyro->_scrollBells++;
+ _vm->_avalot->_scrollBells++;
break; // #7 = "Bel"
case kControlSpeechBubble:
- if ((_vm->_gyro->_scrollNum == 1) && (_vm->_gyro->_scroll[0].empty()))
+ if ((_vm->_avalot->_scrollNum == 1) && (_vm->_avalot->_scroll[0].empty()))
break;
if (call_spriterun)
- _vm->_lucerna->spriteRun();
+ _vm->_avalot->spriteRun();
call_spriterun = false;
if (_param == 0)
@@ -691,7 +689,7 @@ void Dialogs::callDialogDriver() {
else if ((1 <= _param) && (_param <= 9)) {
AnimationType *spr = &_vm->_animation->_sprites[_param - 1];
if ((_param > _vm->_animation->kSpriteNumbMax) || (!spr->_quick)) { // Not valid.
- _vm->_lucerna->errorLed();
+ _vm->_avalot->errorLed();
setBubbleStateNatural();
} else
spr->chatter(); // Normal sprite talking routine.
@@ -699,14 +697,14 @@ void Dialogs::callDialogDriver() {
// Quasi-peds. (This routine performs the same
// thing with QPs as triptype.chatter does with the
// sprites.)
- PedType *quasiPed = &_vm->_gyro->_peds[_vm->_gyro->kQuasipeds[_param - 10]._whichPed];
- _vm->_gyro->_talkX = quasiPed->_x;
- _vm->_gyro->_talkY = quasiPed->_y; // Position.
+ PedType *quasiPed = &_vm->_avalot->_peds[_vm->_avalot->kQuasipeds[_param - 10]._whichPed];
+ _vm->_avalot->_talkX = quasiPed->_x;
+ _vm->_avalot->_talkY = quasiPed->_y; // Position.
- _vm->_gyro->_talkFontColor = _vm->_gyro->kQuasipeds[_param - 10]._foregroundColor;
- _vm->_gyro->_talkBackgroundColor = _vm->_gyro->kQuasipeds[_param - 10]._backgroundColor; // Colors.
+ _vm->_avalot->_talkFontColor = _vm->_avalot->kQuasipeds[_param - 10]._foregroundColor;
+ _vm->_avalot->_talkBackgroundColor = _vm->_avalot->kQuasipeds[_param - 10]._backgroundColor; // Colors.
} else {
- _vm->_lucerna->errorLed(); // Not valid.
+ _vm->_avalot->errorLed(); // Not valid.
setBubbleStateNatural();
}
@@ -714,7 +712,7 @@ void Dialogs::callDialogDriver() {
reset();
- if (_vm->_gyro->_scReturn)
+ if (_vm->_avalot->_scReturn)
return;
break;
@@ -725,46 +723,46 @@ void Dialogs::callDialogDriver() {
displayText(displayMoney() + kControlToBuffer); // Insert cash balance. (Recursion)
break;
case 2: {
- int pwdId = _vm->_parser->kFirstPassword + _vm->_gyro->_passwordNum;
+ int pwdId = _vm->_parser->kFirstPassword + _vm->_avalot->_passwordNum;
displayText(_vm->_parser->_vocabulary[pwdId]._word + kControlToBuffer);
}
break;
case 3:
- displayText(_vm->_gyro->_favouriteDrink + kControlToBuffer);
+ displayText(_vm->_avalot->_favouriteDrink + kControlToBuffer);
break;
case 4:
- displayText(_vm->_gyro->_favouriteSong + kControlToBuffer);
+ displayText(_vm->_avalot->_favouriteSong + kControlToBuffer);
break;
case 5:
- displayText(_vm->_gyro->_worstPlaceOnEarth + kControlToBuffer);
+ displayText(_vm->_avalot->_worstPlaceOnEarth + kControlToBuffer);
break;
case 6:
- displayText(_vm->_gyro->_spareEvening + kControlToBuffer);
+ displayText(_vm->_avalot->_spareEvening + kControlToBuffer);
break;
case 9: {
- Common::String tmpStr = Common::String::format("%d,%d%c",_vm->_gyro->_catacombX, _vm->_gyro->_catacombY, kControlToBuffer);
+ Common::String tmpStr = Common::String::format("%d,%d%c",_vm->_avalot->_catacombX, _vm->_avalot->_catacombY, kControlToBuffer);
displayText(tmpStr);
}
break;
case 10:
- switch (_vm->_gyro->_boxContent) {
+ switch (_vm->_avalot->_boxContent) {
case 0: // Sixpence.
displayScrollChain('q', 37); // You find the sixpence.
- _vm->_gyro->_money += 6;
- _vm->_gyro->_boxContent = _vm->_parser->kNothing;
- _vm->_lucerna->incScore(2);
+ _vm->_avalot->_money += 6;
+ _vm->_avalot->_boxContent = _vm->_parser->kNothing;
+ _vm->_avalot->incScore(2);
return;
case Parser::kNothing:
displayText("nothing at all. It's completely empty.");
break;
default:
- displayText(_vm->_gyro->getItem(_vm->_gyro->_boxContent) + '.');
+ displayText(_vm->_avalot->getItem(_vm->_avalot->_boxContent) + '.');
}
break;
case 11:
for (int j = 0; j < kObjectNum; j++) {
- if (_vm->_gyro->_objects[j])
- displayText(_vm->_gyro->getItem(j) + ", " + kControlToBuffer);
+ if (_vm->_avalot->_objects[j])
+ displayText(_vm->_avalot->getItem(j) + ", " + kControlToBuffer);
}
break;
}
@@ -773,15 +771,15 @@ void Dialogs::callDialogDriver() {
_useIcon = _param;
break;
case kControlNewLine:
- _vm->_gyro->_scrollNum++;
+ _vm->_avalot->_scrollNum++;
break;
case kControlQuestion:
if (call_spriterun)
- _vm->_lucerna->spriteRun();
+ _vm->_avalot->spriteRun();
call_spriterun = false;
- _vm->_gyro->_scroll[_vm->_gyro->_scrollNum] = kControlQuestion;
- _vm->_gyro->_scrollNum++;
+ _vm->_avalot->_scroll[_vm->_avalot->_scrollNum] = kControlQuestion;
+ _vm->_avalot->_scrollNum++;
drawScroll(&Avalanche::Dialogs::scrollModeDialogue);
reset();
@@ -791,14 +789,14 @@ void Dialogs::callDialogDriver() {
break;
case kControlInsertSpaces:
for (int j = 0; j < 9; j++)
- _vm->_gyro->_scroll[_vm->_gyro->_scrollNum - 1] += ' ';
+ _vm->_avalot->_scroll[_vm->_avalot->_scrollNum - 1] += ' ';
break;
default: // Add new char.
- if (_vm->_gyro->_scroll[_vm->_gyro->_scrollNum - 1].size() == 50) {
- solidify(_vm->_gyro->_scrollNum - 1);
- _vm->_gyro->_scrollNum++;
+ if (_vm->_avalot->_scroll[_vm->_avalot->_scrollNum - 1].size() == 50) {
+ solidify(_vm->_avalot->_scrollNum - 1);
+ _vm->_avalot->_scrollNum++;
}
- _vm->_gyro->_scroll[_vm->_gyro->_scrollNum - 1] += _vm->_gyro->_buffer[i];
+ _vm->_avalot->_scroll[_vm->_avalot->_scrollNum - 1] += _vm->_avalot->_buffer[i];
break;
}
}
@@ -806,8 +804,8 @@ void Dialogs::callDialogDriver() {
}
void Dialogs::displayText(Common::String text) { // TODO: REPLACE BUFFER WITH A STRING!!!!!!!!!!
- _vm->_gyro->_bufSize = text.size();
- memcpy(_vm->_gyro->_buffer, text.c_str(), _vm->_gyro->_bufSize);
+ _vm->_avalot->_bufSize = text.size();
+ memcpy(_vm->_avalot->_buffer, text.c_str(), _vm->_avalot->_bufSize);
callDialogDriver();
}
@@ -832,7 +830,7 @@ void Dialogs::loadFont() {
error("AVALANCHE: Scrolls: File not found: ttsmall.fnt");
for (int16 i = 0; i < 256; i++)
- file.read(_vm->_gyro->_font[i],16);
+ file.read(_vm->_avalot->_font[i],16);
file.close();
}
@@ -841,7 +839,7 @@ void Dialogs::displayMusicalScroll() {
kControlNewLine, kControlNewLine, kControlNewLine, kControlInsertSpaces, kControlNewLine, kControlNewLine, kControlToBuffer);
displayText(tmpStr);
- _vm->_lucerna->spriteRun();
+ _vm->_avalot->spriteRun();
CursorMan.showMouse(false);
drawScroll(&Avalanche::Dialogs::scrollModeMusic);
CursorMan.showMouse(true);
@@ -851,13 +849,13 @@ void Dialogs::displayMusicalScroll() {
// From Visa:
void Dialogs::unSkrimble() {
- for (uint16 i = 0; i < _vm->_gyro->_bufSize; i++)
- _vm->_gyro->_buffer[i] = (~(_vm->_gyro->_buffer[i] - (i + 1))) % 256;
+ for (uint16 i = 0; i < _vm->_avalot->_bufSize; i++)
+ _vm->_avalot->_buffer[i] = (~(_vm->_avalot->_buffer[i] - (i + 1))) % 256;
}
void Dialogs::doTheBubble() {
- _vm->_gyro->_buffer[_vm->_gyro->_bufSize] = 2;
- _vm->_gyro->_bufSize++;
+ _vm->_avalot->_buffer[_vm->_avalot->_bufSize] = 2;
+ _vm->_avalot->_bufSize++;
}
/**
@@ -898,8 +896,8 @@ void Dialogs::displayScrollChain(char block, byte point, bool report, bool bubbl
::error("AVALANCHE: Visa: File not found: avalot.sez");
sezfile.seek(sez_offset);
- _vm->_gyro->_bufSize = sezfile.readUint16LE();
- sezfile.read(_vm->_gyro->_buffer, _vm->_gyro->_bufSize);
+ _vm->_avalot->_bufSize = sezfile.readUint16LE();
+ sezfile.read(_vm->_avalot->_buffer, _vm->_avalot->_bufSize);
sezfile.close();
unSkrimble();
@@ -944,8 +942,8 @@ void Dialogs::speak(byte who, byte subject) {
error("AVALANCHE: Visa: File not found: avalot.sez");
sezfile.seek(sez_offset);
- _vm->_gyro->_bufSize = sezfile.readUint16LE();
- sezfile.read(_vm->_gyro->_buffer, _vm->_gyro->_bufSize);
+ _vm->_avalot->_bufSize = sezfile.readUint16LE();
+ sezfile.read(_vm->_avalot->_buffer, _vm->_avalot->_bufSize);
sezfile.close();
unSkrimble();
@@ -957,26 +955,26 @@ void Dialogs::speak(byte who, byte subject) {
void Dialogs::talkTo(byte whom) {
if (_vm->_parser->_person == _vm->_parser->kPardon) {
- _vm->_parser->_person = _vm->_gyro->_subjectNum;
- _vm->_gyro->_subjectNum = 0;
+ _vm->_parser->_person = _vm->_avalot->_subjectNum;
+ _vm->_avalot->_subjectNum = 0;
}
- if (_vm->_gyro->_subjectNum == 0) {
+ if (_vm->_avalot->_subjectNum == 0) {
switch (whom) {
- case Gyro::kPeopleSpludwick:
- if ((_vm->_gyro->_lustieIsAsleep) & (!_vm->_gyro->_objects[Gyro::kObjectPotion - 1])) {
+ case Avalot::kPeopleSpludwick:
+ if ((_vm->_avalot->_lustieIsAsleep) & (!_vm->_avalot->_objects[Avalot::kObjectPotion - 1])) {
displayScrollChain('q', 68);
- _vm->_gyro->_objects[Gyro::kObjectPotion - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->_objects[Avalot::kObjectPotion - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->incScore(3);
return;
- } else if (_vm->_gyro->_talkedToCrapulus) {
+ } else if (_vm->_avalot->_talkedToCrapulus) {
// Spludwick - what does he need?
// 0 - let it through to use normal routine.
- switch (_vm->_gyro->_givenToSpludwick) {
+ switch (_vm->_avalot->_givenToSpludwick) {
case 1: // Fallthrough is intended.
case 2: {
- Common::String objStr = _vm->_gyro->getItem(Gyro::kSpludwicksOrder[_vm->_gyro->_givenToSpludwick]);
+ Common::String objStr = _vm->_avalot->getItem(Avalot::kSpludwicksOrder[_vm->_avalot->_givenToSpludwick]);
Common::String tmpStr = Common::String::format("Can you get me %s, please?%c2%c", objStr.c_str(), Dialogs::kControlRegister, Dialogs::kControlSpeechBubble);
displayText(tmpStr);
}
@@ -990,57 +988,57 @@ void Dialogs::talkTo(byte whom) {
return;
}
break;
- case Gyro::kPeopleIbythneth:
- if (_vm->_gyro->_givenBadgeToIby) {
+ case Avalot::kPeopleIbythneth:
+ if (_vm->_avalot->_givenBadgeToIby) {
displayScrollChain('q', 33); // Thanks a lot!
return; // And leave the proc.
}
break; // Or... just continue, 'cos he hasn't got it.
- case Gyro::kPeopleDogfood:
- if (_vm->_gyro->_wonNim) { // We've won the game.
+ case Avalot::kPeopleDogfood:
+ if (_vm->_avalot->_wonNim) { // We've won the game.
displayScrollChain('q', 6); // "I'm Not Playing!"
return; // Zap back.
} else
- _vm->_gyro->_askedDogfoodAboutNim = true;
+ _vm->_avalot->_askedDogfoodAboutNim = true;
break;
- case Gyro::kPeopleAyles:
- if (!_vm->_gyro->_aylesIsAwake) {
+ case Avalot::kPeopleAyles:
+ if (!_vm->_avalot->_aylesIsAwake) {
displayScrollChain('q', 43); // He's fast asleep!
return;
- } else if (!_vm->_gyro->_givenPenToAyles) {
+ } else if (!_vm->_avalot->_givenPenToAyles) {
displayScrollChain('q', 44); // Can you get me a pen, Avvy?
return;
}
break;
- case Gyro::kPeopleJacques:
+ case Avalot::kPeopleJacques:
displayScrollChain('q', 43);
return;
- case Gyro::kPeopleGeida:
- if (_vm->_gyro->_givenPotionToGeida)
- _vm->_gyro->_geidaFollows = true;
+ case Avalot::kPeopleGeida:
+ if (_vm->_avalot->_givenPotionToGeida)
+ _vm->_avalot->_geidaFollows = true;
else {
displayScrollChain('u', 17);
return;
}
break;
- case Gyro::kPeopleSpurge:
- if (!_vm->_gyro->_sittingInPub) {
+ case Avalot::kPeopleSpurge:
+ if (!_vm->_avalot->_sittingInPub) {
displayScrollChain('q', 71); // Try going over and sitting down.
return;
} else {
- if (_vm->_gyro->_spurgeTalkCount < 5)
- _vm->_gyro->_spurgeTalkCount++;
- if (_vm->_gyro->_spurgeTalkCount > 1) { // no. 1 falls through
- displayScrollChain('q', 70 + _vm->_gyro->_spurgeTalkCount);
+ if (_vm->_avalot->_spurgeTalkCount < 5)
+ _vm->_avalot->_spurgeTalkCount++;
+ if (_vm->_avalot->_spurgeTalkCount > 1) { // no. 1 falls through
+ displayScrollChain('q', 70 + _vm->_avalot->_spurgeTalkCount);
return;
}
}
break;
}
// On a subject. Is there any reason to block it?
- } else if ((whom == Gyro::kPeopleAyles) && (!_vm->_gyro->_aylesIsAwake)) {
+ } else if ((whom == Avalot::kPeopleAyles) && (!_vm->_avalot->_aylesIsAwake)) {
displayScrollChain('q', 43); // He's fast asleep!
return;
}
@@ -1063,23 +1061,23 @@ void Dialogs::talkTo(byte whom) {
displayText(tmpStr);
}
- speak(whom, _vm->_gyro->_subjectNum);
+ speak(whom, _vm->_avalot->_subjectNum);
if (!_noError)
displayScrollChain('n', whom); // File not found!
- if ((_vm->_gyro->_subjectNum == 0) && ((whom + 149) == Gyro::kPeopleCrapulus)) { // Crapulus: get the badge - first time only
- _vm->_gyro->_objects[Gyro::kObjectBadge - 1] = true;
- _vm->_lucerna->refreshObjectList();
+ if ((_vm->_avalot->_subjectNum == 0) && ((whom + 149) == Avalot::kPeopleCrapulus)) { // Crapulus: get the badge - first time only
+ _vm->_avalot->_objects[Avalot::kObjectBadge - 1] = true;
+ _vm->_avalot->refreshObjectList();
displayScrollChain('q', 1); // Circular from Cardiff.
- _vm->_gyro->_talkedToCrapulus = true;
- _vm->_gyro->_whereIs[Gyro::kPeopleCrapulus - 150] = kRoomDummy; // Crapulus walks off.
+ _vm->_avalot->_talkedToCrapulus = true;
+ _vm->_avalot->_whereIs[Avalot::kPeopleCrapulus - 150] = kRoomDummy; // Crapulus walks off.
AnimationType *spr = &_vm->_animation->_sprites[1];
spr->_vanishIfStill = true;
spr->walkTo(2); // Walks away.
- _vm->_lucerna->incScore(2);
+ _vm->_avalot->incScore(2);
}
}
diff --git a/engines/avalanche/gyro.cpp b/engines/avalanche/gyro.cpp
deleted file mode 100644
index 99608399d8..0000000000
--- a/engines/avalanche/gyro.cpp
+++ /dev/null
@@ -1,599 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-/* GYRO It all revolves around this bit! */
-
-#include "avalanche/avalanche.h"
-#include "avalanche/gyro.h"
-#include "avalanche/pingo.h"
-#include "avalanche/dialogs.h"
-#include "avalanche/lucerna.h"
-#include "avalanche/animation.h"
-
-#include "common/file.h"
-#include "common/random.h"
-#include "common/textconsole.h"
-
-namespace Avalanche {
-
-const char *Gyro::kVersionNum = "1.30";
-const char *Gyro::kCopyright = "1995";
-
-const MouseHotspotType Gyro::kMouseHotSpots[9] = {
- {8,0}, // 1 - up-arrow
- {0,0}, // 2 - screwdriver
- {15,6}, // 3 - right-arrow
- {0,0}, // 4 - fletch
- {8,7}, // 5 - hourglass
- {4,0}, // 6 - TTHand
- {8,5}, // 7- Mark's crosshairs
- {8,7}, // 8- I-beam
- {0,0} // 9 - question mark
-};
-
-// Art gallery at 2,1; notice about this at 2,2.
-const int32 Gyro::kCatacombMap[8][8] = {
- // Geida's room
- // 1 2 3 | 4 5 6 7 8
- {0x204, 0x200, 0xd0f0, 0xf0ff, 0xff, 0xd20f, 0xd200, 0x200},
- {0x50f1, 0x20ff, 0x2ff, 0xff, 0xe0ff, 0x20ff, 0x200f, 0x7210},
- {0xe3f0, 0xe10f, 0x72f0, 0xff, 0xe0ff, 0xff, 0xff, 0x800f},
- {0x2201, 0x2030, 0x800f, 0x220, 0x20f, 0x30, 0xff, 0x23f}, // >> Oubliette
- {0x5024, 0xf3, 0xff, 0x200f, 0x22f0, 0x20f, 0x200, 0x7260},
- {0xf0, 0x2ff, 0xe2ff, 0xff, 0x200f, 0x50f0, 0x72ff, 0x201f},
- {0xf6, 0x220f, 0x22f0, 0x30f, 0xf0, 0x20f, 0x8200, 0x2f0}, // <<< In here
- {0x34, 0x200f, 0x51f0, 0x201f, 0xf1, 0x50ff, 0x902f, 0x2062}
-};
-// vv Stairs trap.
-
-/* Explanation: $NSEW.
- Nibble N: North.
- 0 = no connection,
- 2 = (left,) middle(, right) door with left-hand handle,
- 5 = (left,) middle(, right) door with right-hand handle,
- 7 = arch,
- 8 = arch and 1 north of it,
- 9 = arch and 2 north of it,
- D = no connection + WINDOW,
- E = no connection + TORCH,
- F = recessed door (to Geida's room.)
-
- Nibble S: South.
- 0 = no connection,
- 1,2,3 = left, middle, right door.
-
- Nibble E: East.
- 0 = no connection (wall),
- 1 = no connection (wall + window),
- 2 = wall with door,
- 3 = wall with door and window,
- 6 = wall with candles,
- 7 = wall with door and candles,
- F = straight-through corridor.
-
- Nibble W: West.
- 0 = no connection (wall),
- 1 = no connection (wall + shield),
- 2 = wall with door,
- 3 = wall with door and shield,
- 4 = no connection (window),
- 5 = wall with door and window,
- 6 = wall with candles,
- 7 = wall with door and candles,
- F = straight-through corridor. */
-
-const char Gyro::kSpludwicksOrder[3] = {kObjectOnion, kObjectInk, kObjectMushroom};
-
-// A quasiped defines how people who aren't sprites talk. For example, quasiped
-// "A" is Dogfood. The rooms aren't stored because I'm leaving that to context.
-const QuasipedType Gyro::kQuasipeds[16] = {
-//_whichPed, _foregroundColor, _room, _backgroundColor, _who
- {1, kColorLightgray, kRoomArgentPub, kColorBrown, kPeopleDogfood}, // A: Dogfood (screen 19).
- {2, kColorGreen, kRoomArgentPub, kColorWhite, kPeopleIbythneth}, // B: Ibythneth (screen 19).
- {2, kColorWhite, kRoomYours, kColorMagenta, kPeopleArkata}, // C: Arkata (screen 1).
- {2, kColorBlack, kRoomLustiesRoom, kColorRed, kPeopleInvisible}, // D: Hawk (screen 23).
- {2, kColorLightgreen, kRoomOutsideDucks, kColorBrown, kPeopleTrader}, // E: Trader (screen 50).
- {5, kColorYellow, kRoomRobins, kColorRed, kPeopleAvalot}, // F: Avvy, tied up (scr.42)
- {1, kColorBlue, kRoomAylesOffice, kColorWhite, kPeopleAyles}, // G: Ayles (screen 16).
- {1, kColorBrown, kRoomMusicRoom, kColorWhite, kPeopleJacques}, // H: Jacques (screen 7).
- {1, kColorLightgreen, kRoomNottsPub, kColorGreen, kPeopleSpurge}, // I: Spurge (screen 47).
- {2, kColorYellow, kRoomNottsPub, kColorRed, kPeopleAvalot}, // J: Avalot (screen 47).
- {1, kColorLightgray, kRoomLustiesRoom, kColorBlack, kPeopleDuLustie}, // K: du Lustie (screen 23).
- {1, kColorYellow, kRoomOubliette, kColorRed, kPeopleAvalot}, // L: Avalot (screen 27).
- {2, kColorWhite, kRoomOubliette, kColorRed, kPeopleInvisible}, // M: Avaroid (screen 27).
- {3, kColorLightgray, kRoomArgentPub, kColorDarkgray, kPeopleMalagauche},// N: Malagauche (screen 19).
- {4, kColorLightmagenta, kRoomNottsPub, kColorRed, kPeoplePort}, // O: Port (screen 47).
- {1, kColorLightgreen, kRoomDucks, kColorDarkgray, kPeopleDrDuck} // P: Duck (screen 51).
-};
-
-const uint16 Gyro::kNotes[12] = {196, 220, 247, 262, 294, 330, 350, 392, 440, 494, 523, 587};
-
-const TuneType Gyro::kTune = {
- kPitchHigher, kPitchHigher, kPitchLower, kPitchSame, kPitchHigher, kPitchHigher, kPitchLower, kPitchHigher, kPitchHigher, kPitchHigher,
- kPitchLower, kPitchHigher, kPitchHigher, kPitchSame, kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchHigher,
- kPitchHigher, kPitchLower, kPitchLower, kPitchLower, kPitchLower, kPitchSame, kPitchLower, kPitchHigher, kPitchSame, kPitchLower, kPitchHigher
-};
-
-byte Gyro::_whereIs[29] = {
- // The Lads
- kRoomYours, // Avvy
- kRoomSpludwicks, // Spludwick
- kRoomOutsideYours, // Crapulus
- kRoomDucks, // Duck - r__DucksRoom's not defined yet.
- kRoomArgentPub, // Malagauche
- kRoomRobins, // Friar Tuck.
- kRoomDummy, // Robin Hood - can't meet him at the start.
- kRoomBrummieRoad, // Cwytalot
- kRoomLustiesRoom, // Baron du Lustie.
- kRoomOutsideCardiffCastle, // The Duke of Cardiff.
- kRoomArgentPub, // Dogfood
- kRoomOutsideDucks, // Trader
- kRoomArgentPub, // Ibythneth
- kRoomAylesOffice, // Ayles
- kRoomNottsPub, // Port
- kRoomNottsPub, // Spurge
- kRoomMusicRoom, // Jacques
- 0, 0, 0, 0, 0, 0, 0, 0,
- // The Lasses
- kRoomYours, // Arkata
- kRoomGeidas, // Geida
- kRoomDummy, // nobody allocated here!
- kRoomWiseWomans // The Wise Woman.
-};
-
-Gyro::Gyro(AvalancheEngine *vm) : _interrogation(0) {
- _vm = vm;
-
- // Needed because of Lucerna::load_also()
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 2; j++)
- _also[i][j] = 0;
- }
-
- _totalTime = 0;
-}
-
-Gyro::~Gyro() {
- for (int i = 0; i < 9; i++) {
- _digits[i].free();
- _directions[i].free();
- }
- _digits[9].free();
-}
-
-Common::String Gyro::intToStr(int32 num) {
- return Common::String::format("%d", num);
-}
-
-void Gyro::newMouse(byte id) {
- if (id == _currentMouse)
- return;
-
- _currentMouse = id;
- loadMouse(id);
-}
-
-/**
- * Set the mouse pointer to 'HourGlass"
- * @remarks Originally called 'wait'
- */
-void Gyro::setMousePointerWait() {
- newMouse(4);
-}
-
-void Gyro::drawShadow(int16 x1, int16 y1, int16 x2, int16 y2, byte hc, byte sc) {
- warning("STUB: Gyro::shadow()");
-}
-
-void Gyro::drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::String t) {
- warning("STUB: Gyro::shbox()");
-}
-
-void Gyro::resetVariables() {
-// Replaces memset(&_vm->_gyro->_dna, 0, sizeof(DnaType));
- _vm->_animation->_direction = 0;
- _carryNum = 0;
- for (int i = 0; i < kObjectNum; i++)
- _objects[i] = false;
-
- _dnascore = 0;
- _money = 0;
- _room = kRoomNowhere;
- _wearing = 0;
- _sworeNum = 0;
- _saveNum = 0;
- for (int i = 0; i < 100; i++)
- _roomCount[i] = 0;
-
- _alcoholLevel = 0;
- _playedNim = 0;
- _wonNim = false;
- _wineState = 0;
- _cwytalotGone = false;
- _passwordNum = 0;
- _aylesIsAwake = false;
- _drawbridgeOpen = 0;
- _avariciusTalk = 0;
- _boughtOnion = false;
- _rottenOnion = false;
- _onionInVinegar = false;
- _givenToSpludwick = 0;
- _brummieStairs = 0;
- _cardiffQuestionNum = 0;
- _passedCwytalotInHerts = false;
- _avvyIsAwake = false;
- _avvyInBed = false;
- _userMovesAvvy = false;
- _npcFacing = 0;
- _givenBadgeToIby = false;
- _friarWillTieYouUp = false;
- _tiedUp = false;
- _boxContent = 0;
- _talkedToCrapulus = false;
- _jacquesState = 0;
- _bellsAreRinging = false;
- _standingOnDais = false;
- _takenPen = false;
- _arrowTriggered = false;
- _arrowInTheDoor = false;
- _favouriteDrink = "";
- _favouriteSong = "";
- _worstPlaceOnEarth = "";
- _spareEvening = "";
- _totalTime = 0;
- _jumpStatus = 0;
- _mushroomGrowing = false;
- _spludwickAtHome = false;
- _lastRoom = 0;
- _lastRoomNotMap = 0;
- _crapulusWillTell = false;
- _enterCatacombsFromLustiesRoom = false;
- _teetotal = false;
- _malagauche = 0;
- _drinking = 0;
- _enteredLustiesRoomAsMonk = false;
- _catacombX = 0;
- _catacombY = 0;
- _avvysInTheCupboard = false;
- _geidaFollows = false;
- _geidaSpin = 0;
- _geidaTime = 0;
- _nextBell = 0;
- _givenPotionToGeida = false;
- _lustieIsAsleep = false;
- _flipToWhere = 0;
- _flipToPed = 0;
- _beenTiedUp = false;
- _sittingInPub = false;
- _spurgeTalkCount = 0;
- _metAvaroid = false;
- _takenMushroom = false;
- _givenPenToAyles = false;
- _askedDogfoodAboutNim = false;
-}
-
-void Gyro::newGame() {
- for (int i = 0; i < kMaxSprites; i++) {
- AnimationType *spr = &_vm->_animation->_sprites[i];
- if (spr->_quick)
- spr->remove();
- }
- // Deallocate sprite. Sorry, beta testers!
-
- AnimationType *avvy = &_vm->_animation->_sprites[0];
- avvy->init(0, true, _vm->_animation);
-
- _alive = true;
- resetVariables();
-
- _vm->_dialogs->setBubbleStateNatural();
-
- _spareEvening = "answer a questionnaire";
- _favouriteDrink = "beer";
- _money = 30; // 2/6
- _vm->_animation->_direction = Animation::kDirStopped;
- _wearing = kObjectClothes;
- _objects[kObjectMoney - 1] = true;
- _objects[kObjectBodkin - 1] = true;
- _objects[kObjectBell - 1] = true;
- _objects[kObjectClothes - 1] = true;
-
- _thinkThing = true;
- _thinks = 2;
- _vm->_lucerna->refreshObjectList();
- _onToolbar = false;
- _seeScroll = false;
-
- avvy->appear(300, 117, Animation::kDirRight); // Needed to initialize Avalot.
- //for (gd = 0; gd <= 30; gd++) for (gm = 0; gm <= 1; gm++) also[gd][gm] = nil;
- // fillchar(previous^,sizeof(previous^),#0); { blank out array }
- _him = Parser::kPardon;
- _her = Parser::kPardon;
- _it = Parser::kPardon;
- _lastPerson = Parser::kPardon; // = Pardon?
- _passwordNum = _vm->_rnd->getRandomNumber(30) + 1; //Random(30) + 1;
- _userMovesAvvy = false;
- _doingSpriteRun = false;
- _avvyInBed = true;
- _enidFilename = "";
-
- _vm->_lucerna->enterRoom(1, 1);
- avvy->_visible = false;
- _vm->_lucerna->drawScore();
- _vm->_menu->setup();
- _vm->_lucerna->_clock.update();
- _vm->_lucerna->spriteRun();
-}
-
-void Gyro::slowDown() {
- warning("STUB: Gyro::slowdown()");
-}
-
-bool Gyro::setFlag(char x) {
- for (uint16 i = 0; i < _flags.size(); i++) {
- if (_flags[i] == x)
- return true;
- }
-
- return false;
-}
-
-bool Gyro::decreaseMoney(uint16 howmuchby) {
- _money -= howmuchby;
- if (_money < 0) {
- _vm->_dialogs->displayScrollChain('Q', 2); // "You are now denariusless!"
- _vm->_lucerna->gameOver();
- return false;
- } else
- return true;
-}
-
-Common::String Gyro::getName(byte whose) {
- static const Common::String kLads[17] = {
- "Avalot", "Spludwick", "Crapulus", "Dr. Duck", "Malagauche", "Friar Tuck",
- "Robin Hood", "Cwytalot", "du Lustie", "the Duke of Cardiff", "Dogfood",
- "A trader", "Ibythneth", "Ayles", "Port", "Spurge", "Jacques"
- };
-
- static const Common::String kLasses[4] = {"Arkata", "Geida", "\0xB1", "the Wise Woman"};
-
- if (whose < 175)
- return kLads[whose - 150];
- else
- return kLasses[whose - 175];
-}
-
-byte Gyro::getNameChar(byte whose) {
- static const char kLadChar[] = "ASCDMTRwLfgeIyPu";
- static const char kLassChar[] = "kG\0xB1o";
-
- if (whose < 175)
- return kLadChar[whose - 150];
- else
- return kLassChar[whose - 175];
-}
-
-Common::String Gyro::getThing(byte which) {
- static const Common::String kThings[kObjectNum] = {
- "Wine", "Money-bag", "Bodkin", "Potion", "Chastity belt",
- "Crossbow bolt", "Crossbow", "Lute", "Pilgrim's badge", "Mushroom", "Key",
- "Bell", "Scroll", "Pen", "Ink", "Clothes", "Habit", "Onion"
- };
-
- Common::String get_thing_result;
- switch (which) {
- case kObjectWine:
- switch (_wineState) {
- case 1:
- case 4:
- get_thing_result = kThings[which - 1];
- break;
- case 3:
- get_thing_result = "Vinegar";
- break;
- }
- break;
- case kObjectOnion:
- if (_rottenOnion)
- get_thing_result = "rotten onion";
- else
- get_thing_result = kThings[which - 1];
- break;
- default:
- get_thing_result = kThings[which - 1];
- }
- return get_thing_result;
-}
-
-char Gyro::getThingChar(byte which) {
- static const char kThingsChar[] = "WMBParCLguKeSnIohn"; // V=Vinegar
-
- char get_thingchar_result;
- switch (which) {
- case kObjectWine:
- if (_wineState == 3)
- get_thingchar_result = 'V'; // Vinegar
- else
- get_thingchar_result = kThingsChar[which - 1];
- break;
- default:
- get_thingchar_result = kThingsChar[which - 1];
- }
- return get_thingchar_result;
-}
-
-Common::String Gyro::getItem(byte which) {
- static const Common::String kItems[kObjectNum] = {
- "some wine", "your money-bag", "your bodkin", "a potion", "a chastity belt",
- "a crossbow bolt", "a crossbow", "a lute", "a pilgrim's badge", "a mushroom",
- "a key", "a bell", "a scroll", "a pen", "some ink", "your clothes", "a habit",
- "an onion"
- };
-
- Common::String get_better_result;
- if (which > 150)
- which -= 149;
-
- switch (which) {
- case kObjectWine:
- switch (_wineState) {
- case 0:
- case 1:
- case 4:
- get_better_result = kItems[which - 1];
- break;
- case 3:
- get_better_result = "some vinegar";
- break;
- }
- break;
- case kObjectOnion:
- if (_rottenOnion)
- get_better_result = "a rotten onion";
- else if (_onionInVinegar)
- get_better_result = "a pickled onion (in the vinegar)";
- else
- get_better_result = kItems[which - 1];
- break;
- default:
- if ((which < kObjectNum) && (which > 0))
- get_better_result = kItems[which - 1];
- else
- get_better_result = "";
- }
- return get_better_result;
-}
-
-
-Common::String Gyro::f5Does() {
- switch (_room) {
- case kRoomYours:
- if (!_avvyIsAwake)
- return Common::String::format("%cWWake up", Parser::kVerbCodeWake);
- else if (_avvyInBed)
- return Common::String::format("%cGGet up", Parser::kVerbCodeStand);
- break;
- case kRoomInsideCardiffCastle:
- if (_standingOnDais)
- return Common::String::format("%cCClimb down", Parser::kVerbCodeClimb);
- else
- return Common::String::format("%cCClimb up", Parser::kVerbCodeClimb);
- break;
- case kRoomNottsPub:
- if (_sittingInPub)
- return Common::String::format("%cSStand up", Parser::kVerbCodeStand);
- else
- return Common::String::format("%cSSit down", Parser::kVerbCodeSit);
- break;
- case kRoomMusicRoom:
- if (_vm->_animation->inField(5))
- return Common::String::format("%cPPlay the harp", Parser::kVerbCodePlay);
- break;
- }
-
- return Common::String::format("%c", _vm->_parser->kPardon); // If all else fails...
-}
-
-void Gyro::loadMouse(byte which) {
- Common::File f;
-
- if (!f.open("mice.avd"))
- error("AVALANCHE: Gyro: File not found: mice.avd");
-
- ::Graphics::Surface cursor;
- cursor.create(16, 32, ::Graphics::PixelFormat::createFormatCLUT8());
- cursor.fillRect(Common::Rect(0, 0, 16, 32), 255);
-
-
- // The AND mask.
- f.seek(kMouseSize * 2 * which + 134);
-
- ::Graphics::Surface mask = _vm->_graphics->loadPictureGraphic(f);
-
- for (int j = 0; j < mask.h; j++) {
- for (int i = 0; i < mask.w; i++) {
- for (int k = 0; k < 2; k++) {
- if (*(byte *)mask.getBasePtr(i, j) == 0)
- *(byte *)cursor.getBasePtr(i, j * 2 + k) = 0;
- }
- }
- }
-
- mask.free();
-
- // The OR mask.
- f.seek(kMouseSize * 2 * which + 134 * 2);
-
- mask = _vm->_graphics->loadPictureGraphic(f);
-
- for (int j = 0; j < mask.h; j++) {
- for (int i = 0; i < mask.w; i++) {
- for (int k = 0; k < 2; k++) {
- byte pixel = *(byte *)mask.getBasePtr(i, j);
- if (pixel != 0)
- *(byte *)cursor.getBasePtr(i, j * 2 + k) = pixel;
- }
- }
- }
-
- mask.free();
- f.close();
-
- CursorMan.replaceCursor(cursor.getPixels(), 16, 32, kMouseHotSpots[which]._horizontal, kMouseHotSpots[which]._vertical * 2, 255, false);
- cursor.free();
-}
-
-void Gyro::setBackgroundColor(byte x) {
- warning("STUB: Gyro::background()");
-}
-
-void Gyro::hangAroundForAWhile() {
- for (int i = 0; i < 28; i++)
- slowDown();
-}
-
-void Gyro::init() {
- _mouse = kMouseStateNo;
- _letMeOut = false;
- _holdTheDawn = true;
- _currentMouse = 177;
- _dropsOk = true;
- _mouseText = "";
- _cheat = false;
- _cp = 0;
- _ledStatus = 177;
- _defaultLed = 2;
- _enidFilename = ""; // Undefined.
- for (int i = 0; i < 3; i++)
- _scoreToDisplay[i] = -1; // Impossible digits.
- _holdTheDawn = false;
-
- setMousePointerWait();
- CursorMan.showMouse(true);
-}
-
-} // End of namespace Avalanche
diff --git a/engines/avalanche/gyro.h b/engines/avalanche/gyro.h
deleted file mode 100644
index 99fe6f7142..0000000000
--- a/engines/avalanche/gyro.h
+++ /dev/null
@@ -1,367 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-/* GYRO It all revolves around this bit! */
-
-#ifndef AVALANCHE_GYRO2_H
-#define AVALANCHE_GYRO2_H
-
-#include "common/str.h"
-#include "common/scummsys.h"
-#include "common/file.h"
-
-#include "graphics/surface.h"
-
-namespace Avalanche {
-class AvalancheEngine;
-
-enum Color {
- kColorBlack, kColorBlue, kColorGreen, kColorCyan, kColorRed,
- kColorMagenta, kColorBrown, kColorLightgray, kColorDarkgray, kColorLightblue,
- kColorLightgreen, kColorLightcyan, kColorLightred, kColorLightmagenta, kColorYellow,
- kColorWhite
-};
-
-// CHECKME: kRoomBossKey is a guess
-enum Room {
- kRoomNowhere = 0, kRoomYours = 1, kRoomOutsideYours = 2, kRoomOutsideSpludwicks = 3,
- kRoomYourHall = 5, kRoomMusicRoom = 7, kRoomOutsideArgentPub = 9, kRoomArgentRoad = 10,
- kRoomWiseWomans = 11, kRoomSpludwicks = 12, kRoomInsideAbbey = 13, kRoomOutsideAbbey = 14,
- kRoomAvvysGarden = 15, kRoomAylesOffice = 16, kRoomArgentPub = 19, kRoomBrummieRoad = 20,
- kRoomBridge = 21, kRoomLusties = 22, kRoomLustiesRoom = 23, kRoomWestHall = 25,
- kRoomEastHall = 26, kRoomOubliette = 27, kRoomGeidas = 28, kRoomCatacombs = 29,
- kRoomEntranceHall = 40, kRoomRobins = 42, kRoomOutsideNottsPub = 46, kRoomNottsPub = 47,
- kRoomOutsideDucks = 50, kRoomDucks = 51, kRoomOutsideCardiffCastle = 70, kRoomInsideCardiffCastle = 71,
- kRoomBossKey = 98, kRoomMap = 99, kRoomDummy = 177 // Dummy room
-};
-
-static const byte kObjectNum = 18; // always preface with a #
-static const int16 kCarryLimit = 12; // carry limit
-
-static const int16 kNumlockCode = 32; // Code for Num Lock
-static const int16 kMouseSize = 134;
-
-struct MouseHotspotType { // mouse-void
- int16 _horizontal, _vertical;
-};
-
-struct PedType {
- int16 _x, _y;
- byte _direction;
-};
-
-struct MagicType {
- byte _operation; // one of the operations
- uint16 _data; // data for them
-};
-
-class FieldType {
-public:
- int16 _x1, _y1, _x2, _y2;
-};
-
-struct ByteField {
- byte _x1, _y1, _x2, _y2;
-};
-
-class LineType : public FieldType {
-public:
- byte _color;
-};
-
-typedef int8 TuneType[31];
-
-struct QuasipedType {
- byte _whichPed, _foregroundColor, _room, _backgroundColor;
- uint16 _who;
-};
-
-#if 0
-struct Sundry { // Things which must be saved over a backtobootstrap, outside DNA.
- Common::String _qEnidFilename;
- bool _qSoundFx;
- byte _qThinks;
- bool _qThinkThing;
-};
-#endif
-
-class Gyro {
-public:
- static const char *kVersionNum;
- static const char *kCopyright;
- static const int16 kVersionCode = 130; // Same as kVersionCode, but numerically & without the ".".
- static const int16 kGameCode = 2; // Avalot's code number
-
- // Objects you can hold:
- enum Object {
- kObjectWine = 1,
- kObjectMoney,
- kObjectBodkin,
- kObjectPotion,
- kObjectChastity,
- kObjectBolt,
- kObjectCrossbow,
- kObjectLute,
- kObjectBadge,
- kObjectMushroom,
- kObjectKey,
- kObjectBell,
- kObjectPrescription,
- kObjectPen,
- kObjectInk,
- kObjectClothes,
- kObjectHabit,
- kObjectOnion
- };
-
- // People who hang around this game.
- enum People {
- // Boys:
- kPeopleAvalot = 150,
- kPeopleSpludwick = 151,
- kPeopleCrapulus = 152,
- kPeopleDrDuck = 153,
- kPeopleMalagauche = 154,
- kPeopleFriarTuck = 155,
- kPeopleRobinHood = 156,
- kPeopleCwytalot = 157,
- kPeopleDuLustie = 158,
- kPeopleDuke = 159,
- kPeopleDogfood = 160,
- kPeopleTrader = 161,
- kPeopleIbythneth = 162,
- kPeopleAyles = 163,
- kPeoplePort = 164,
- kPeopleSpurge = 165,
- kPeopleJacques = 166,
- // Girls:
- kPeopleArkata = 175,
- kPeopleGeida = 176,
- kPeopleInvisible = 177,
- kPeopleWisewoman = 178
- };
-
- static const int16 kXW = 30;
- static const int16 kYW = 36; // x width & y whatsit
- static const int16 kMargin = 5;
- static const MouseHotspotType kMouseHotSpots[9];
- static const int16 kMaxSprites = 2; // Current max no. of sprites.
-
- // For Thinkabout:
- static const bool kThing = true;
- static const bool kPerson = false;
-
- // Magic/portal constants:
- enum Magics {
- kMagicNothing, // Ignore it if this line is touched.
- kMagicBounce, // Bounce off this line. Not valid for portals.
- kMagicExclaim, // Put up a chain of scrolls.
- kMagicTransport, // Enter new room.
- kMagicUnfinished, // Unfinished connection.
- kMagicSpecial, // Special function.
- kMagicOpenDoor // Opening door.
- };
-
- // These following static constants should be included in CFG when it's written.
-
- static const bool kSlowComputer = false; // Stops walking when mouse touches toolbar.
- static const int16 kBorder = 1; // size of border on shadowboxes
- static const int16 kWalk = 3;
- static const int16 kRun = 5;
- static const int32 kCatacombMap[8][8];
- static const char kSpludwicksOrder[3];
- static const QuasipedType kQuasipeds[16];
-
- enum Pitch {
- kPitchInvalid,
- kPitchLower,
- kPitchSame,
- kPitchHigher
- };
-
- static const uint16 kNotes[12];
- static const TuneType kTune;
-
- // If this is greater than zero, the next line you type is stored in the DNA in a position dictated by the value.
- // If a scroll comes up, or you leave the room, it's automatically set to zero.
- byte _interrogation;
- static byte _whereIs[29];
-
- // Former DNA structure
- byte _carryNum; // How many objects you're carrying...
- bool _objects[kObjectNum]; // ...and which ones they are.
- int16 _dnascore; // your score, of course
- int32 _money; // your current amount of dosh
- byte _room; // your current room
- byte _wearing; // what you're wearing
- byte _sworeNum; // number of times you've sworn
- byte _saveNum; // number of times this game has been saved
- byte _roomCount[100]; // Add one to each every time you enter a room
- byte _alcoholLevel; // Your blood alcohol level.
- byte _playedNim; // How many times you've played Nim.
- bool _wonNim; // Have you *won* Nim? (That's harder.)
- byte _wineState; // 0=good (Notts), 1=passable(Argent) ... 3=vinegar.
- bool _cwytalotGone; // Has Cwytalot rushed off to Jerusalem yet?
- byte _passwordNum; // Number of the passw for this game.
- bool _aylesIsAwake; // pretty obvious!
- byte _drawbridgeOpen; // Between 0 (shut) and 4 (open).
- byte _avariciusTalk; // How much Avaricius has said to you.
- bool _boughtOnion; // Have you bought an onion yet?
- bool _rottenOnion; // And has it rotted?
- bool _onionInVinegar; // Is the onion in the vinegar?
- byte _givenToSpludwick; // 0 = nothing given, 1 = onion...
- byte _brummieStairs; // Progression through the stairs trick.
- byte _cardiffQuestionNum; // Things you get asked in Cardiff.
- bool _passedCwytalotInHerts; // Have you passed Cwytalot in Herts?
- bool _avvyIsAwake; // Well? Is Avvy awake? (Screen 1 only.)
- bool _avvyInBed; // True if Avvy's in bed, but awake.
- bool _userMovesAvvy; // If this is false, the user has no control over Avvy's movements.
- byte _npcFacing; // If there's an NPC in the current room which turns it's head according to Avvy's movement (keep looking at him), this variable tells which way it's facing at the moment.
- bool _givenBadgeToIby; // Have you given the badge to Iby yet?
- bool _friarWillTieYouUp; // If you're going to get tied up.
- bool _tiedUp; // You ARE tied up!
- byte _boxContent; // 0 = money (sixpence), 254 = empty, any other number implies the contents of the box.
- bool _talkedToCrapulus; // Pretty self-explanatory.
- byte _jacquesState; // 0=asleep, 1=awake, 2=gets up, 3=gone.
- bool _bellsAreRinging; // Is Jacques ringing the bells?
- bool _standingOnDais; // In room 71, inside Cardiff Castle.
- bool _takenPen; // Have you taken the pen (in Cardiff?)
- bool _arrowTriggered; // And has the arrow been triggered?
- bool _arrowInTheDoor; // Did the arrow hit the wall?
- Common::String _favouriteDrink, _favouriteSong, _worstPlaceOnEarth, _spareEvening; // Personalisation str's
- uint32 _totalTime; // Your total time playing this game, in ticks.
- byte _jumpStatus; // Fixes how high you're jumping.
- bool _mushroomGrowing; // Is the mushroom growing in 42?
- bool _spludwickAtHome; // Is Spludwick at home?
- byte _lastRoom;
- byte _lastRoomNotMap;
- bool _crapulusWillTell; // Will Crapulus tell you about Spludwick being away?
- bool _enterCatacombsFromLustiesRoom;
- bool _teetotal; // Are we touching any more drinks?
- byte _malagauche; // Position of Malagauche. See Celer for more info.
- char _drinking; // What's he getting you?
- bool _enteredLustiesRoomAsMonk;
- byte _catacombX, _catacombY; // XY coords in the catacombs.
- bool _avvysInTheCupboard; // On screen 22.
- bool _geidaFollows; // Is Geida following you?
- byte _geidaSpin, _geidaTime; // For the making "Geida dizzy" joke.
- byte _nextBell; // For the ringing.
- bool _givenPotionToGeida; // Does Geida have the potion?
- bool _lustieIsAsleep; // Is BDL asleep?
- byte _flipToWhere, _flipToPed; // For the sequencer.
- bool _beenTiedUp; // In r__Robins.
- bool _sittingInPub; // Are you sitting down in the pub?
- byte _spurgeTalkCount; // Count for talking to Spurge.
- bool _metAvaroid;
- bool _takenMushroom, _givenPenToAyles, _askedDogfoodAboutNim;
- // End of former DNA Structure
-
- byte _lineNum; // Number of lines.
- LineType _lines[50]; // For Also.
- enum MouseState { kMouseStateNo, kMouseStateYes, kMouseStateVirtual } _mouse;
- bool _dropsOk, _scReturn, _soundFx, _cheat;
- Common::String _mouseText;
- bool _weirdWord;
- bool _letMeOut;
- Common::String _scroll[15];
- byte _scrollNum, _whichwas;
- byte _thinks;
- bool _thinkThing;
- int16 _talkX, _talkY;
- byte _talkBackgroundColor, _talkFontColor;
- byte _scrollBells; // no. of times to ring the bell
- bool _onToolbar, _seeScroll; // TODO: maybe this means we're interacting with the toolbar / a scroll?
- char _objectList[10];
- ::Graphics::Surface _digits[10]; // digitsize and rwlitesize are defined in Lucerna::load_digits() !!!
- ::Graphics::Surface _directions[9]; // Maybe it will be needed to move them to the class itself instead.
- // Called .free() for them in ~Gyro().
- int8 _scoreToDisplay[3];
- byte _currentMouse; // current mouse-void
- Common::String _verbStr; // what you can do with your object. :-)
- Common::String *_also[31][2];
- PedType _peds[15];
- MagicType _magics[15];
- MagicType _portals[7];
- FieldType _fields[30];
- byte _fieldNum;
- Common::String _flags;
- Common::String _listen;
- Common::String _atKey; // For XTs, set to "alt-". For ATs, set to "f1".
- byte _cp, _ledStatus, _defaultLed;
- FontType _font;
- bool _alive;
- byte _buffer[2000];
- uint16 _bufSize;
- int16 _underScroll; // Y-coord of just under the scroll text.
- Common::String _roomnName; // Name of actual room
- Common::String _subject; // What you're talking to them about.
- byte _subjectNum; // The same thing.
- bool _keyboardClick; // Is a keyboard click noise wanted?
- byte _him, _her, _it;
- int32 _roomTime; // Set to 0 when you enter a room, added to in every loop.
-
- byte _lastPerson; // Last person to have been selected using the People menu.
- bool _doingSpriteRun; // Only set to True if we're doing a sprite_run at this moment. This stops the trippancy system from moving any of the sprites.
- bool _holdTheDawn; // If this is true, calling Dawn will do nothing. It's used, for example, at the start, to stop Load from dawning.
- bool _isLoaded; // Is it a loaded gamestate?
- Common::String _enidFilename;
-
- Gyro(AvalancheEngine *vm);
- ~Gyro();
-
- Common::String intToStr(int32 num);
- void newMouse(byte id);
- void setMousePointerWait(); // Makes hourglass.
- void loadMouse(byte which);
-
- void setBackgroundColor(byte x);
- void drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::String t);
-
- void resetVariables();
- void newGame(); // This sets up the DNA for a completely new game.
- void slowDown();
- bool setFlag(char x);
- bool decreaseMoney(uint16 howmuchby); // Called pennycheck in the original.
- void hangAroundForAWhile();
-
- Common::String getName(byte whose);
- byte getNameChar(byte whose);
- Common::String getThing(byte which);
- char getThingChar(byte which);
- Common::String getItem(byte which); // Called get_better in the original.
- Common::String f5Does(); // This procedure determines what f5 does.
-
- void init();
-private:
- AvalancheEngine *_vm;
-
- void drawShadow(int16 x1, int16 y1, int16 x2, int16 y2, byte hc, byte sc);
-};
-
-} // End of namespace Avalanche
-
-#endif // AVALANCHE_GYRO2_H
diff --git a/engines/avalanche/lucerna.cpp b/engines/avalanche/lucerna.cpp
deleted file mode 100644
index 88c13571a0..0000000000
--- a/engines/avalanche/lucerna.cpp
+++ /dev/null
@@ -1,1224 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-/* LUCERNA The screen, [keyboard] and mouse handler.*/
-
-#include "avalanche/avalanche.h"
-#include "avalanche/lucerna.h"
-#include "avalanche/gyro.h"
-#include "avalanche/dialogs.h"
-#include "avalanche/timer.h"
-#include "avalanche/animation.h"
-#include "avalanche/background.h"
-#include "avalanche/pingo.h"
-#include "avalanche/sequence.h"
-
-#include "common/rect.h"
-#include "common/system.h"
-
-#include "graphics/palette.h"
-
-namespace Avalanche {
-
-Clock::Clock(AvalancheEngine *vm) {
- _vm = vm;
- _oldHour = _oldHourAngle = _oldMinute = 17717;
-}
-
-void Clock::update() { // TODO: Move variables from Gyro to here (or at least somewhere nearby), rename them.
- TimeDate t;
- _vm->_system->getTimeAndDate(t);
- _hour = t.tm_hour;
- _minute = t.tm_min;
- _second = t.tm_sec;
-
- _hourAngle = (_hour % 12) * 30 + _minute / 2;
-
- if (_oldHour != _hour) {
- plotHands();
- chime();
- }
-
- if (_oldMinute != _minute)
- plotHands();
-
- if ((_hour == 0) && (_oldHour != 0) && (_oldHour != 17717)) {
- Common::String tmpStr = Common::String::format("Good morning!%c%cYes, it's just past " \
- "midnight. Are you having an all-night Avvy session? Glad you like the game that much!",
- Dialogs::kControlNewLine, Dialogs::kControlNewLine);
- _vm->_dialogs->displayText(tmpStr);
- }
- _oldHour = _hour;
- _oldHourAngle = _hourAngle;
- _oldMinute = _minute;
-}
-
-void Clock::calcHand(uint16 angle, uint16 length, Common::Point &endPoint, byte color) {
- if (angle > 900) {
- endPoint.x = 177;
- return;
- }
-
- endPoint = _vm->_graphics->drawArc(_vm->_graphics->_surface, kCenterX, kCenterY, 449 - angle, 450 - angle, length, color);
-}
-
-void Clock::drawHand(const Common::Point &endPoint, byte color) {
- if (endPoint.x == 177)
- return;
-
- _vm->_graphics->_surface.drawLine(kCenterX, kCenterY, endPoint.x, endPoint.y, color);
-}
-
-void Clock::plotHands() {
- calcHand(_oldHourAngle, 14, _clockHandHour, kColorYellow);
- calcHand(_oldMinute * 6, 17, _clockHandMinute, kColorYellow);
- drawHand(_clockHandHour, kColorBrown);
- drawHand(_clockHandMinute, kColorBrown);
-
- calcHand(_hourAngle, 14, _clockHandHour, kColorBrown);
- calcHand(_minute * 6, 17, _clockHandMinute, kColorBrown);
- drawHand(_clockHandHour, kColorYellow);
- drawHand(_clockHandMinute, kColorYellow);
-}
-
-void Clock::chime() {
- warning("STUB: Clock::chime()");
-}
-
-Lucerna::Lucerna(AvalancheEngine *vm) : _fxHidden(false), _clock(vm) {
- _vm = vm;
-}
-
-Lucerna::~Lucerna() {
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 2; j++) {
- if (_vm->_gyro->_also[i][j] != 0) {
- delete _vm->_gyro->_also[i][j];
- _vm->_gyro->_also[i][j] = 0;
- }
- }
- }
-}
-
-void Lucerna::init() {
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 2; j++)
- _vm->_gyro->_also[i][j] = 0;
- }
-
-#if 0
- if (_vm->_enhanced->atbios)
- _vm->_gyro->atkey = "f1";
- else
- _vm->_gyro->atkey = "alt-";
-#endif
-}
-
-/**
- * Call a given Verb
- * @remarks Originally called 'callverb'
- */
-void Lucerna::callVerb(byte id) {
- if (id == _vm->_parser->kPardon) {
- Common::String tmpStr = Common::String::format("The f5 key lets you do a particular action in certain " \
- "situations. However, at the moment there is nothing assigned to it. You may press alt-A to see " \
- "what the current setting of this key is.");
- _vm->_dialogs->displayText(tmpStr);
- } else {
- _vm->_gyro->_weirdWord = false;
- _vm->_parser->_polite = true;
- _vm->_parser->_verb = id;
- _vm->_parser->doThat();
- }
-}
-
-void Lucerna::drawAlsoLines() {
- CursorMan.showMouse(false);
-
- _vm->_graphics->_magics.fillRect(Common::Rect(0, 0, 640, 200), 0);
- _vm->_graphics->_magics.frameRect(Common::Rect(0, 45, 640, 161), 15);
-
- for (int i = 0; i < _vm->_gyro->_lineNum; i++) {
- // We had to check if the lines are within the borders of the screen.
- if ((_vm->_gyro->_lines[i]._x1 >= 0) && (_vm->_gyro->_lines[i]._x1 < _vm->_graphics->kScreenWidth) && (_vm->_gyro->_lines[i]._y1 >= 0) && (_vm->_gyro->_lines[i]._y1 < _vm->_graphics->kScreenHeight)
- && (_vm->_gyro->_lines[i]._x2 >= 0) && (_vm->_gyro->_lines[i]._x2 < _vm->_graphics->kScreenWidth) && (_vm->_gyro->_lines[i]._y2 >= 0) && (_vm->_gyro->_lines[i]._y2 < _vm->_graphics->kScreenHeight))
- _vm->_graphics->_magics.drawLine(_vm->_gyro->_lines[i]._x1, _vm->_gyro->_lines[i]._y1, _vm->_gyro->_lines[i]._x2, _vm->_gyro->_lines[i]._y2, _vm->_gyro->_lines[i]._color);
- }
-
- CursorMan.showMouse(true);
-}
-
-/**
- * Check is it's possible to give something to Spludwick
- * @remarks Originally called 'nextstring'
- */
-Common::String Lucerna::readAlsoStringFromFile() {
- Common::String str;
- byte length = file.readByte();
- for (int i = 0; i < length; i++)
- str += file.readByte();
- return str;
-}
-
-void Lucerna::scram(Common::String &str) {
- for (uint i = 0; i < str.size(); i++)
- str.setChar(str[i] ^ 177, i);
-}
-
-void Lucerna::unScramble() {
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 2; j++) {
- if (_vm->_gyro->_also[i][j] != 0)
- scram(*_vm->_gyro->_also[i][j]);
- }
- }
- scram(_vm->_gyro->_listen);
- scram(_vm->_gyro->_flags);
-}
-
-void Lucerna::loadAlso(byte num) {
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 2; j++) {
- if (_vm->_gyro->_also[i][j] != 0) {
- delete _vm->_gyro->_also[i][j];
- _vm->_gyro->_also[i][j] = 0;
- }
- }
- }
- Common::String filename;
- filename = Common::String::format("also%d.avd", num);
- if (!file.open(filename))
- error("AVALANCHE: Lucerna: File not found: %s", filename.c_str());
-
- file.seek(128);
-
- byte alsoNum = file.readByte();
- Common::String tmpStr;
- for (int i = 0; i <= alsoNum; i++) {
- for (int j = 0; j < 2; j++) {
- _vm->_gyro->_also[i][j] = new Common::String;
- *_vm->_gyro->_also[i][j] = readAlsoStringFromFile();
- }
- tmpStr = Common::String::format("\x9D%s\x9D", _vm->_gyro->_also[i][0]->c_str());
- *_vm->_gyro->_also[i][0] = tmpStr;
- }
-
- memset(_vm->_gyro->_lines, 0xFF, sizeof(_vm->_gyro->_lines));
-
- _vm->_gyro->_lineNum = file.readByte();
- for (int i = 0; i < _vm->_gyro->_lineNum; i++) {
- LineType *curLine = &_vm->_gyro->_lines[i];
- curLine->_x1 = file.readSint16LE();
- curLine->_y1 = file.readSint16LE();
- curLine->_x2 = file.readSint16LE();
- curLine->_y2 = file.readSint16LE();
- curLine->_color = file.readByte();
- }
-
- memset(_vm->_gyro->_peds, 177, sizeof(_vm->_gyro->_peds));
- byte pedNum = file.readByte();
- for (int i = 0; i < pedNum; i++) {
- PedType *curPed = &_vm->_gyro->_peds[i];
- curPed->_x = file.readSint16LE();
- curPed->_y = file.readSint16LE();
- curPed->_direction = file.readByte();
- }
-
- _vm->_gyro->_fieldNum = file.readByte();
- for (int i = 0; i < _vm->_gyro->_fieldNum; i++) {
- FieldType *curField = &_vm->_gyro->_fields[i];
- curField->_x1 = file.readSint16LE();
- curField->_y1 = file.readSint16LE();
- curField->_x2 = file.readSint16LE();
- curField->_y2 = file.readSint16LE();
- }
-
- for (int i = 0; i < 15; i++) {
- MagicType *magic = &_vm->_gyro->_magics[i];
- magic->_operation = file.readByte();
- magic->_data = file.readUint16LE();
- }
-
- for (int i = 0; i < 7; i++) {
- MagicType *portal = &_vm->_gyro->_portals[i];
- portal->_operation = file.readByte();
- portal->_data = file.readUint16LE();
- }
-
- _vm->_gyro->_flags.clear();
- for (int i = 0; i < 26; i++)
- _vm->_gyro->_flags += file.readByte();
-
- int16 listen_length = file.readByte();
- _vm->_gyro->_listen.clear();
- for (int i = 0; i < listen_length; i++)
- _vm->_gyro->_listen += file.readByte();
-
- drawAlsoLines();
-
- file.close();
- unScramble();
- for (int i = 0; i <= alsoNum; i++) {
- tmpStr = Common::String::format(",%s,", _vm->_gyro->_also[i][0]->c_str());
- *_vm->_gyro->_also[i][0] = tmpStr;
- }
-}
-
-void Lucerna::loadRoom(byte num) {
- CursorMan.showMouse(false);
-
- _vm->_graphics->fleshColors();
-
- Common::String filename = Common::String::format("place%d.avd", num);
- if (!file.open(filename))
- error("AVALANCHE: Lucerna: File not found: %s", filename.c_str());
-
- file.seek(146);
- if (!_vm->_gyro->_roomnName.empty())
- _vm->_gyro->_roomnName.clear();
- for (int i = 0; i < 30; i++) {
- char actChar = file.readByte();
- if ((32 <= actChar) && (actChar <= 126))
- _vm->_gyro->_roomnName += actChar;
- }
- // Compression method byte follows this...
-
- file.seek(177);
-
- _vm->_graphics->_background = _vm->_graphics->loadPictureRow(file, _vm->_graphics->kBackgroundWidth, _vm->_graphics->kBackgroundHeight);
- _vm->_graphics->refreshBackground();
-
- file.close();
-
- loadAlso(num);
- _vm->_background->loadBackgroundSprites(num);
- CursorMan.showMouse(true);
-}
-
-void Lucerna::zoomOut(int16 x, int16 y) {
- warning("STUB: Lucerna::zoomout()");
-}
-
-void Lucerna::findPeople(byte room) {
- for (int i = 1; i < 29; i++) {
- if (_vm->_gyro->_whereIs[i] == room) {
- if (i < 25)
- _vm->_gyro->_him = i + 150;
- else
- _vm->_gyro->_her = i + 150;
- }
- }
-}
-
-void Lucerna::exitRoom(byte x) {
- _vm->_sound->stopSound();
- _vm->_background->forgetBackgroundSprites();
- _vm->_gyro->_seeScroll = true; // This stops the trippancy system working over the length of this procedure.
-
- switch (x) {
- case kRoomSpludwicks:
- _vm->_timer->loseTimer(Timer::kReasonAvariciusTalks);
- _vm->_gyro->_avariciusTalk = 0;
- // He doesn't HAVE to be talking for this to work. It just deletes it IF it exists.
- break;
- case kRoomBridge:
- if (_vm->_gyro->_drawbridgeOpen > 0) {
- _vm->_gyro->_drawbridgeOpen = 4; // Fully open.
- _vm->_timer->loseTimer(Timer::kReasonDrawbridgeFalls);
- }
- break;
- case kRoomOutsideCardiffCastle:
- _vm->_timer->loseTimer(Timer::kReasonCardiffsurvey);
- break;
- case kRoomRobins:
- _vm->_timer->loseTimer(Timer::kReasonGettingTiedUp);
- break;
- }
-
- _vm->_gyro->_interrogation = 0; // Leaving the room cancels all the questions automatically.
- _vm->_gyro->_seeScroll = false; // Now it can work again!
-
- _vm->_gyro->_lastRoom = _vm->_gyro->_room;
- if (_vm->_gyro->_room != kRoomMap)
- _vm->_gyro->_lastRoomNotMap = _vm->_gyro->_room;
-}
-
-
-/**
- * Only when entering a NEW town! Not returning to the last one,
- * but choosing another from the map.
- * @remarks Originally called 'new_town'
- */
-void Lucerna::enterNewTown() {
- _vm->_menu->setup();
-
- switch (_vm->_gyro->_room) {
- case kRoomOutsideNottsPub: // Entry into Nottingham.
- if ((_vm->_gyro->_roomCount[kRoomRobins] > 0) && (_vm->_gyro->_beenTiedUp) && (!_vm->_gyro->_takenMushroom))
- _vm->_gyro->_mushroomGrowing = true;
- break;
- case kRoomWiseWomans: // Entry into Argent.
- if (_vm->_gyro->_talkedToCrapulus && (!_vm->_gyro->_lustieIsAsleep)) {
- _vm->_gyro->_spludwickAtHome = !((_vm->_gyro->_roomCount[kRoomWiseWomans] % 3) == 1);
- _vm->_gyro->_crapulusWillTell = !_vm->_gyro->_spludwickAtHome;
- } else {
- _vm->_gyro->_spludwickAtHome = true;
- _vm->_gyro->_crapulusWillTell = false;
- }
- if (_vm->_gyro->_boxContent == Gyro::kObjectWine)
- _vm->_gyro->_wineState = 3; // Vinegar
- break;
- }
-
- if (_vm->_gyro->_room != kRoomOutsideDucks) {
- if ((_vm->_gyro->_objects[Gyro::kObjectOnion - 1]) && !(_vm->_gyro->_onionInVinegar))
- _vm->_gyro->_rottenOnion = true; // You're holding the onion
- }
-}
-
-void Lucerna::putGeidaAt(byte whichPed, byte ped) {
- if (ped == 0)
- return;
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
-
- spr1->init(5, false, _vm->_animation); // load Geida
- _vm->_animation->appearPed(1, whichPed);
- spr1->_callEachStepFl = true;
- spr1->_eachStepProc = Animation::kProcGeida;
-}
-
-void Lucerna::enterRoom(byte room, byte ped) {
- _vm->_gyro->_seeScroll = true; // This stops the trippancy system working over the length of this procedure.
-
- findPeople(room);
- _vm->_gyro->_room = room;
- if (ped != 0)
- _vm->_gyro->_roomCount[room]++;
-
- loadRoom(room);
-
- if ((_vm->_gyro->_roomCount[room] == 0) && (!_vm->_gyro->setFlag('S')))
- incScore(1);
-
- _vm->_gyro->_whereIs[Gyro::kPeopleAvalot - 150] = _vm->_gyro->_room;
-
- if (_vm->_gyro->_geidaFollows)
- _vm->_gyro->_whereIs[Gyro::kPeopleGeida - 150] = room;
-
- _vm->_gyro->_roomTime = 0;
-
-
- if ((_vm->_gyro->_lastRoom == kRoomMap) && (_vm->_gyro->_lastRoomNotMap != _vm->_gyro->_room))
- enterNewTown();
-
- switch (room) {
- case kRoomYours:
- if (_vm->_gyro->_avvyInBed) {
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_graphics->refreshBackground();
- _vm->_timer->addTimer(100, Timer::kProcArkataShouts, Timer::kReasonArkataShouts);
- }
- break;
-
- case kRoomOutsideYours:
- if (ped > 0) {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- if (!_vm->_gyro->_talkedToCrapulus) {
- _vm->_gyro->_whereIs[Gyro::kPeopleCrapulus - 150] = kRoomOutsideYours;
- spr1->init(8, false, _vm->_animation); // load Crapulus
-
- if (_vm->_gyro->_roomCount[kRoomOutsideYours] == 1) {
- _vm->_animation->appearPed(1, 3); // Start on the right-hand side of the screen.
- spr1->walkTo(4); // Walks up to greet you.
- } else {
- _vm->_animation->appearPed(1, 4); // Starts where he was before.
- spr1->_facingDir = Animation::kDirLeft;
- }
-
- spr1->_callEachStepFl = true;
- spr1->_eachStepProc = Animation::kProcFaceAvvy; // He always faces Avvy.
-
- } else
- _vm->_gyro->_whereIs[Gyro::kPeopleCrapulus - 150] = kRoomNowhere;
-
- if (_vm->_gyro->_crapulusWillTell) {
- spr1->init(8, false, _vm->_animation);
- _vm->_animation->appearPed(1, 1);
- spr1->walkTo(3);
- _vm->_timer->addTimer(20, Timer::kProcCrapulusSpludOut, Timer::kReasonCrapulusSaysSpludwickOut);
- _vm->_gyro->_crapulusWillTell = false;
- }
- }
- break;
-
- case kRoomOutsideSpludwicks:
- if ((_vm->_gyro->_roomCount[kRoomOutsideSpludwicks] == 1) && (ped == 1)) {
- _vm->_timer->addTimer(20, Timer::kProcBang, Timer::kReasonExplosion);
- _vm->_gyro->_spludwickAtHome = true;
- }
- break;
-
- case kRoomSpludwicks:
- if (_vm->_gyro->_spludwickAtHome) {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- if (ped > 0) {
- spr1->init(2, false, _vm->_animation); // load Spludwick
- _vm->_animation->appearPed(1, 1);
- _vm->_gyro->_whereIs[Gyro::kPeopleSpludwick - 150] = kRoomSpludwicks;
- }
-
- spr1->_callEachStepFl = true;
- spr1->_eachStepProc = Animation::kProcGeida;
- } else
- _vm->_gyro->_whereIs[Gyro::kPeopleSpludwick - 150] = kRoomNowhere;
- break;
-
- case kRoomBrummieRoad:
- if (_vm->_gyro->_geidaFollows)
- putGeidaAt(4, ped);
- if (_vm->_gyro->_cwytalotGone) {
- _vm->_gyro->_magics[kColorLightred - 1]._operation = Gyro::kMagicNothing;
- _vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] = kRoomNowhere;
- } else {
- if (ped > 0) {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- spr1->init(4, false, _vm->_animation); // 4 = Cwytalot
- spr1->_callEachStepFl = true;
- spr1->_eachStepProc = Animation::kProcFollowAvvyY;
- _vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] = kRoomBrummieRoad;
-
- if (_vm->_gyro->_roomCount[kRoomBrummieRoad] == 1) { // First time here...
- _vm->_animation->appearPed(1, 1); // He appears on the right of the screen...
- spr1->walkTo(3); // ...and he walks up...
- } else {
- // You've been here before.
- _vm->_animation->appearPed(1, 3); // He's standing in your way straight away...
- spr1->_facingDir = Animation::kDirLeft;
- }
- }
- }
- break;
-
- case kRoomArgentRoad:
- if ((_vm->_gyro->_cwytalotGone) && (!_vm->_gyro->_passedCwytalotInHerts) && (ped == 2) && (_vm->_gyro->_roomCount[kRoomArgentRoad] > 3)) {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- spr1->init(4, false, _vm->_animation); // 4 = Cwytalot again
- _vm->_animation->appearPed(1, 0);
- spr1->walkTo(1);
- spr1->_vanishIfStill = true;
- _vm->_gyro->_passedCwytalotInHerts = true;
- // _vm->_gyro->whereis[#157] = r__Nowhere; // can we fit this in?
- _vm->_timer->addTimer(20, Timer::kProcCwytalotInHerts, Timer::kReasonCwytalotInHerts);
- }
- break;
-
- case kRoomBridge:
- if (_vm->_gyro->_drawbridgeOpen == 4) { // open
- _vm->_background->drawBackgroundSprite(-1, -1, 2); // Position of drawbridge
- _vm->_graphics->refreshBackground();
- _vm->_gyro->_magics[kColorGreen - 1]._operation = Gyro::kMagicNothing; // You may enter the drawbridge.
- }
- if (_vm->_gyro->_geidaFollows)
- putGeidaAt(ped + 2, ped); // load Geida
- break;
-
- case kRoomRobins:
- if (ped > 0) {
- if (!_vm->_gyro->_beenTiedUp) {
- // A welcome party... or maybe not...
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- spr1->init(6, false, _vm->_animation);
- _vm->_animation->appearPed(1, 1);
- spr1->walkTo(2);
- _vm->_timer->addTimer(36, Timer::kProcGetTiedUp, Timer::kReasonGettingTiedUp);
- }
- }
-
- if (_vm->_gyro->_beenTiedUp) {
- _vm->_gyro->_whereIs[Gyro::kPeopleRobinHood - 150] = 0;
- _vm->_gyro->_whereIs[Gyro::kPeopleFriarTuck - 150] = 0;
- }
-
- if (_vm->_gyro->_tiedUp)
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
-
- if (!_vm->_gyro->_mushroomGrowing)
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_graphics->refreshBackground();
- break;
-
- case kRoomOutsideCardiffCastle:
- if (ped > 0) {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- switch (_vm->_gyro->_cardiffQuestionNum) {
- case 0 : // You've answered NONE of his questions.
- spr1->init(9, false, _vm->_animation);
- _vm->_animation->appearPed(1, 1);
- spr1->walkTo(2);
- _vm->_timer->addTimer(47, Timer::kProcCardiffSurvey, Timer::kReasonCardiffsurvey);
- break;
- case 5 :
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicNothing;
- break; // You've answered ALL his questions. => nothing happens.
- default: // You've answered SOME of his questions.
- spr1->init(9, false, _vm->_animation);
- _vm->_animation->appearPed(1, 2);
- spr1->_facingDir = Animation::kDirRight;
- _vm->_timer->addTimer(3, Timer::kProcCardiffReturn, Timer::kReasonCardiffsurvey);
- }
- }
-
- if (_vm->_gyro->_cardiffQuestionNum < 5)
- _vm->_gyro->_interrogation = _vm->_gyro->_cardiffQuestionNum;
- else
- _vm->_gyro->_interrogation = 0;
- break;
-
- case kRoomMap:
- // You're entering the map.
- dawn();
- if (ped > 0)
- zoomOut(_vm->_gyro->_peds[ped]._x, _vm->_gyro->_peds[ped]._y);
-
- if ((_vm->_gyro->_objects[Gyro::kObjectWine - 1]) && (_vm->_gyro->_wineState != 3)) {
- _vm->_dialogs->displayScrollChain('q', 9); // Don't want to waste the wine!
- _vm->_gyro->_objects[Gyro::kObjectWine - 1] = false;
- refreshObjectList();
- }
-
- _vm->_dialogs->displayScrollChain('q', 69);
- break;
-
- case kRoomCatacombs:
- if ((ped == 0) || (ped == 3) || (ped == 5) || (ped == 6)) {
-
- switch (ped) {
- case 3: // Enter from oubliette
- _vm->_gyro->_catacombX = 8;
- _vm->_gyro->_catacombY = 4;
- break;
- case 5: // Enter from du Lustie's
- _vm->_gyro->_catacombX = 8;
- _vm->_gyro->_catacombY = 7;
- break;
- case 6: // Enter from Geida's
- _vm->_gyro->_catacombX = 4;
- _vm->_gyro->_catacombY = 1;
- break;
- }
-
- _vm->_gyro->_enterCatacombsFromLustiesRoom = true;
- _vm->_animation->catacombMove(ped);
- _vm->_gyro->_enterCatacombsFromLustiesRoom = false;
- }
- break;
-
- case kRoomArgentPub:
- if (_vm->_gyro->_wonNim)
- _vm->_background->drawBackgroundSprite(-1, -1, 0); // No lute by the settle.
- _vm->_gyro->_malagauche = 0; // Ready to boot Malagauche
- if (_vm->_gyro->_givenBadgeToIby) {
- _vm->_background->drawBackgroundSprite(-1, -1, 7);
- _vm->_background->drawBackgroundSprite(-1, -1, 8);
- }
- _vm->_graphics->refreshBackground();
- break;
-
- case kRoomLustiesRoom:
- _vm->_gyro->_npcFacing = 1; // du Lustie.
- if (_vm->_animation->_sprites[0]._id == 0) // Avvy in his normal clothes
- _vm->_timer->addTimer(3, Timer::kProcCallsGuards, Timer::kReasonDuLustieTalks);
- else if (!_vm->_gyro->_enteredLustiesRoomAsMonk) // already
- // Presumably, Avvy dressed as a monk.
- _vm->_timer->addTimer(3, Timer::kProcGreetsMonk, Timer::kReasonDuLustieTalks);
-
- if (_vm->_gyro->_geidaFollows) {
- putGeidaAt(4, ped);
- if (_vm->_gyro->_lustieIsAsleep) {
- _vm->_background->drawBackgroundSprite(-1, -1, 4);
- _vm->_graphics->refreshBackground();
- }
- }
- break;
-
- case kRoomMusicRoom:
- if (_vm->_gyro->_jacquesState > 0) {
- _vm->_gyro->_jacquesState = 5;
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_graphics->refreshBackground();
- _vm->_background->drawBackgroundSprite(-1, -1, 3);
- _vm->_gyro->_magics[kColorBrown - 1]._operation = Gyro::kMagicNothing;
- _vm->_gyro->_whereIs[Gyro::kPeopleJacques - 150] = 0;
- }
- if (ped != 0) {
- _vm->_background->drawBackgroundSprite(-1, -1, 5);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(6);
- _vm->_sequence->thenShow(5);
- _vm->_sequence->thenShow(7);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomOutsideNottsPub:
- if (ped == 2) {
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(3);
- _vm->_sequence->thenShow(2);
- _vm->_sequence->thenShow(1);
- _vm->_sequence->thenShow(4);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomOutsideArgentPub:
- if (ped == 2) {
- _vm->_background->drawBackgroundSprite(-1, -1, 5);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(6);
- _vm->_sequence->thenShow(5);
- _vm->_sequence->thenShow(7);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomWiseWomans: {
- AnimationType *spr1 = &_vm->_animation->_sprites[1];
- spr1->init(11, false, _vm->_animation);
- if ((_vm->_gyro->_roomCount[kRoomWiseWomans] == 1) && (ped > 0)) {
- _vm->_animation->appearPed(1, 1); // Start on the right-hand side of the screen.
- spr1->walkTo(3); // Walks up to greet you.
- } else {
- _vm->_animation->appearPed(1, 3); // Starts where she was before.
- spr1->_facingDir = Animation::kDirLeft;
- }
-
- spr1->_callEachStepFl = true;
- spr1->_eachStepProc = Animation::kProcFaceAvvy; // She always faces Avvy.
- }
- break;
-
- case kRoomInsideCardiffCastle:
- if (ped > 0) {
- _vm->_animation->_sprites[1].init(10, false, _vm->_animation); // Define the dart.
- _vm->_background->drawBackgroundSprite(-1, -1, 0);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(1);
- if (_vm->_gyro->_arrowInTheDoor)
- _vm->_sequence->thenShow(3);
- else
- _vm->_sequence->thenShow(2);
-
- if (_vm->_gyro->_takenPen)
- _vm->_background->drawBackgroundSprite(-1, -1, 3);
-
- _vm->_sequence->startToClose();
- } else {
- _vm->_background->drawBackgroundSprite(-1, -1, 0);
- if (_vm->_gyro->_arrowInTheDoor)
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- else
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_graphics->refreshBackground();
- }
- break;
-
- case kRoomAvvysGarden:
- if (ped == 1) {
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(2);
- _vm->_sequence->thenShow(1);
- _vm->_sequence->thenShow(3);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomEntranceHall:
- case kRoomInsideAbbey:
- case kRoomYourHall:
- if (ped == 2) {
-#if 0
- // It was the original:
- _vm->_celer->show_one(-1, -1, 2);
- _vm->_sequence->first_show(1);
- _vm->_sequence->then_show(3);
- _vm->_sequence->start_to_close();
-#endif
-
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(2);
- _vm->_sequence->thenShow(1);
- _vm->_sequence->thenShow(3);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomAylesOffice:
- if (_vm->_gyro->_aylesIsAwake)
- _vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_graphics->refreshBackground();
- break; // Ayles awake.
-
- case kRoomGeidas:
- putGeidaAt(1, ped);
- break; // load Geida
-
- case kRoomEastHall:
- case kRoomWestHall:
- if (_vm->_gyro->_geidaFollows)
- putGeidaAt(ped + 1, ped);
- break;
-
- case kRoomLusties:
- if (_vm->_gyro->_geidaFollows)
- putGeidaAt(ped + 5, ped);
- break;
-
- case kRoomNottsPub:
- if (_vm->_gyro->_sittingInPub)
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_gyro->_npcFacing = 1; // Port.
- break;
-
- case kRoomOutsideDucks:
- if (ped == 2) {
- // Shut the door
- _vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_graphics->refreshBackground();
- _vm->_sequence->firstShow(3);
- _vm->_sequence->firstShow(2);
- _vm->_sequence->thenShow(1);
- _vm->_sequence->thenShow(4);
- _vm->_sequence->startToClose();
- }
- break;
-
- case kRoomDucks:
- _vm->_gyro->_npcFacing = 1; // Duck.
- break;
- }
-
- _vm->_gyro->_seeScroll = false; // Now it can work again!
- _vm->_gyro->_isLoaded = false;
-}
-
-void Lucerna::thinkAbout(byte object, bool type) {
- const int16 picSize = 966;
-
- _vm->_gyro->_thinks = object;
- object--;
-
- _vm->_gyro->setMousePointerWait();
-
- if (type == Gyro::kThing) {
- if (!file.open("thinks.avd"))
- error("AVALANCHE: Lucerna: File not found: thinks.avd");
- } else { // Gyro::kPerson
- if (!file.open("folk.avd"))
- error("AVALANCHE: Lucerna: File not found: folk.avd");
-
- object -= 149;
- if (object >= 25)
- object -= 8;
- if (object == 20)
- object--; // Last time...
- }
-
- CursorMan.showMouse(false);
-
- file.seek(object * picSize + 65);
- ::Graphics::Surface picture = _vm->_graphics->loadPictureGraphic(file);
- _vm->_graphics->drawPicture(_vm->_graphics->_surface, picture, 205, 170);
-
- picture.free();
- file.close();
-
- CursorMan.showMouse(true);
- _vm->_gyro->_thinkThing = type;
-}
-
-void Lucerna::loadDigits() { // Load the scoring digits & rwlites
- const byte digitsize = 134;
- const byte rwlitesize = 126;
-
- if (!file.open("digit.avd"))
- error("AVALANCHE: Lucerna: File not found: digit.avd");
-
- for (int i = 0; i < 10; i++) {
- file.seek(i * digitsize);
- _vm->_gyro->_digits[i] = _vm->_graphics->loadPictureGraphic(file);
- }
-
- for (int i = 0; i < 9; i++) {
- file.seek(10 * digitsize + i * rwlitesize);
- _vm->_gyro->_directions[i] = _vm->_graphics->loadPictureGraphic(file);
- }
-
- file.close();
-}
-
-void Lucerna::drawToolbar() {
- if (!file.open("useful.avd"))
- error("AVALANCHE: Lucerna: File not found: useful.avd");
-
- file.seek(40);
-
- CursorMan.showMouse(false);
- ::Graphics::Surface picture = _vm->_graphics->loadPictureGraphic(file);
- _vm->_graphics->drawPicture(_vm->_graphics->_surface, picture, 5, 169);
-
- picture.free();
- file.close();
-
- CursorMan.showMouse(true);
- _vm->_animation->_oldDirection = 177;
- drawDirection();
-}
-
-void Lucerna::drawScore() {
- uint16 score = _vm->_gyro->_dnascore;
- int8 numbers[3] = {0, 0, 0};
- for (int i = 0; i < 2; i++) {
- byte divisor = 1;
- for (int j = 0; j < (2 - i); j++)
- divisor *= 10;
- numbers[i] = score / divisor;
- score -= numbers[i] * divisor;
- }
- numbers[2] = score;
-
- CursorMan.showMouse(false);
-
- for (int i = 0; i < 3; i++) {
- if (_vm->_gyro->_scoreToDisplay[i] != numbers[i])
- _vm->_graphics->drawPicture(_vm->_graphics->_surface, _vm->_gyro->_digits[numbers[i]], 250 + (i + 1) * 15, 177);
- }
-
- CursorMan.showMouse(true);
-
- for (int i = 0; i < 3; i++)
- _vm->_gyro->_scoreToDisplay[i] = numbers[i];
-}
-
-void Lucerna::incScore(byte num) {
- for (int i = 1; i <= num; i++) {
- _vm->_gyro->_dnascore++;
-
-// if (soundfx) {
- for (int j = 1; j <= 97; j++)
- // Length os 2 is a guess, the original doesn't have a delay specified
- _vm->_sound->playNote(177 + _vm->_gyro->_dnascore * 3, 2);
-// }
- }
- warning("STUB: Lucerna::points()");
-
- drawScore();
-}
-
-void Lucerna::useCompass(const Common::Point &cursorPos) {
- byte color = *(byte *)_vm->_graphics->_surface.getBasePtr(cursorPos.x, cursorPos.y / 2);
-
- switch (color) {
- case kColorGreen:
- _vm->_animation->_direction = Animation::kDirUp;
- _vm->_animation->changeDirection(0, Animation::kDirUp);
- drawDirection();
- break;
- case kColorBrown:
- _vm->_animation->_direction = Animation::kDirDown;
- _vm->_animation->changeDirection(0, Animation::kDirDown);
- drawDirection();
- break;
- case kColorCyan:
- _vm->_animation->_direction = Animation::kDirLeft;
- _vm->_animation->changeDirection(0, Animation::kDirLeft);
- drawDirection();
- break;
- case kColorLightmagenta:
- _vm->_animation->_direction = Animation::kDirRight;
- _vm->_animation->changeDirection(0, Animation::kDirRight);
- drawDirection();
- break;
- case kColorRed:
- case kColorWhite:
- case kColorLightcyan:
- case kColorYellow: // Fall-throughs are intended.
- _vm->_animation->stopWalking();
- drawDirection();
- break;
- }
-}
-
-void Lucerna::fxToggle() {
- warning("STUB: Lucerna::fxtoggle()");
-}
-
-void Lucerna::refreshObjectList() {
- _vm->_gyro->_carryNum = 0;
- if (_vm->_gyro->_thinkThing && !_vm->_gyro->_objects[_vm->_gyro->_thinks - 1])
- thinkAbout(Gyro::kObjectMoney, Gyro::kThing); // you always have money
-
- for (int i = 0; i < kObjectNum; i++) {
- if (_vm->_gyro->_objects[i]) {
- _vm->_gyro->_objectList[_vm->_gyro->_carryNum] = i + 1;
- _vm->_gyro->_carryNum++;
- }
- }
-}
-
-/**
- * @remarks Originally called 'verte'
- */
-void Lucerna::guideAvvy(Common::Point cursorPos) {
- if (!_vm->_gyro->_userMovesAvvy)
- return;
-
- cursorPos.y /= 2;
- byte what;
-
- // _vm->_animation->tr[0] is Avalot.)
- AnimationType *avvy = &_vm->_animation->_sprites[0];
- if (cursorPos.x < avvy->_x)
- what = 1;
- else if (cursorPos.x > (avvy->_x + avvy->_info._xLength))
- what = 2;
- else
- what = 0; // On top
-
- if (cursorPos.y < avvy->_y)
- what += 3;
- else if (cursorPos.y > (avvy->_y + avvy->_info._yLength))
- what += 6;
-
- switch (what) {
- case 0:
- _vm->_animation->stopWalking();
- break; // Clicked on Avvy: no movement.
- case 1:
- _vm->_animation->changeDirection(0, Animation::kDirLeft);
- break;
- case 2:
- _vm->_animation->changeDirection(0, Animation::kDirRight);
- break;
- case 3:
- _vm->_animation->changeDirection(0, Animation::kDirUp);
- break;
- case 4:
- _vm->_animation->changeDirection(0, Animation::kDirUpLeft);
- break;
- case 5:
- _vm->_animation->changeDirection(0, Animation::kDirUpRight);
- break;
- case 6:
- _vm->_animation->changeDirection(0, Animation::kDirDown);
- break;
- case 7:
- _vm->_animation->changeDirection(0, Animation::kDirDownLeft);
- break;
- case 8:
- _vm->_animation->changeDirection(0, Animation::kDirDownRight);
- break;
- } // No other values are possible.
-
- drawDirection();
-}
-
-void Lucerna::checkClick() {
- Common::Point cursorPos = _vm->getMousePos();
- _vm->_gyro->_onToolbar = _vm->_gyro->kSlowComputer && ((cursorPos.y >= 169) || (cursorPos.y <= 10));
-
- /*if (_vm->_gyro->mrelease > 0)
- _vm->_gyro->after_the_scroll = false;*/
-
- if ((0 <= cursorPos.y) && (cursorPos.y <= 21))
- _vm->_gyro->newMouse(0); // up arrow
- else if ((317 <= cursorPos.y) && (cursorPos.y <= 339))
- _vm->_gyro->newMouse(7); //I-beam
- else if ((340 <= cursorPos.y) && (cursorPos.y <= 399))
- _vm->_gyro->newMouse(1); // screwdriver
- else if (!_vm->_menu->isActive()) { // Dropdown can handle its own pointers.
- if (_holdLeftMouse) {
- _vm->_gyro->newMouse(6); // Mark's crosshairs
- guideAvvy(cursorPos); // Normally, if you click on the picture, you're guiding Avvy around.
- } else
- _vm->_gyro->newMouse(3); // fletch
- }
-
- if (_holdLeftMouse) {
- if ((0 <= cursorPos.y) && (cursorPos.y <= 21)) { // Click on the dropdown menu.
- if (_vm->_gyro->_dropsOk)
- _vm->_menu->update();
- } else if ((317 <= cursorPos.y) && (cursorPos.y <= 339)) { // Click on the command line.
- _vm->_parser->_inputTextPos = (cursorPos.x - 23) / 8;
- if (_vm->_parser->_inputTextPos > _vm->_parser->_inputText.size() + 1)
- _vm->_parser->_inputTextPos = _vm->_parser->_inputText.size() + 1;
- if (_vm->_parser->_inputTextPos < 1)
- _vm->_parser->_inputTextPos = 1;
- _vm->_parser->_inputTextPos--;
- _vm->_parser->plotText();
- } else if ((340 <= cursorPos.y) && (cursorPos.y <= 399)) { // Check the toolbar.
- if ((137 <= cursorPos.x) && (cursorPos.x <= 207)) { // Control Avvy with the compass.
- if (_vm->_gyro->_alive && _vm->_gyro->_avvyIsAwake)
- useCompass(cursorPos);
- } else if ((208 <= cursorPos.x) && (cursorPos.x <= 260)) { // Examine the _thing.
- do {
- _vm->updateEvents();
- } while (_holdLeftMouse);
-
- if (_vm->_gyro->_thinkThing) {
- _vm->_parser->_thing = _vm->_gyro->_thinks;
- _vm->_parser->_thing += 49;
- _vm->_parser->_person = _vm->_parser->kPardon;
- } else {
- _vm->_parser->_person = _vm->_gyro->_thinks;
- _vm->_parser->_thing = _vm->_parser->kPardon;
- }
- callVerb(Parser::kVerbCodeExam);
- } else if ((261 <= cursorPos.x) && (cursorPos.x <= 319)) { // Display the score.
- do {
- _vm->updateEvents();
- } while (_holdLeftMouse);
-
- callVerb(Parser::kVerbCodeScore);
- } else if ((320 <= cursorPos.x) && (cursorPos.x <= 357)) { // Change speed.
- _vm->_animation->_sprites[0]._speedX = _vm->_gyro->kWalk;
- _vm->_animation->updateSpeed();
- } else if ((358 <= cursorPos.x) && (cursorPos.x <= 395)) { // Change speed.
- _vm->_animation->_sprites[0]._speedX = _vm->_gyro->kRun;
- _vm->_animation->updateSpeed();
- } else if ((396 <= cursorPos.x) && (cursorPos.x <= 483))
- fxToggle();
- else if ((535 <= cursorPos.x) && (cursorPos.x <= 640))
- _vm->_gyro->_mouseText.insertChar(Dialogs::kControlNewLine, 0);
- } else if (!_vm->_gyro->_dropsOk)
- _vm->_gyro->_mouseText = Common::String(13) + _vm->_gyro->_mouseText;
- }
-}
-
-void Lucerna::errorLed() {
- warning("STUB: Lucerna::errorled()");
-}
-
-int8 Lucerna::fades(int8 x) {
- warning("STUB: Lucerna::fades()");
- return 0;
-}
-
-void Lucerna::fadeOut(byte n) {
- warning("STUB: Lucerna::fadeOut()");
-}
-
-void Lucerna::dusk() {
- warning("STUB: Lucerna::dusk()");
-}
-
-void Lucerna::fadeIn(byte n) {
- warning("STUB: Lucerna::fadeIn()");
-}
-
-void Lucerna::dawn() {
- warning("STUB: Lucerna::dawn()");
-}
-
-void Lucerna::drawDirection() { // It's data is loaded in load_digits().
- if (_vm->_animation->_oldDirection == _vm->_animation->_direction)
- return;
-
- _vm->_animation->_oldDirection = _vm->_animation->_direction;
-
- CursorMan.showMouse(false);
- _vm->_graphics->drawPicture(_vm->_graphics->_surface, _vm->_gyro->_directions[_vm->_animation->_direction], 0, 161);
- CursorMan.showMouse(true);
-}
-
-
-void Lucerna::gameOver() {
- _vm->_gyro->_userMovesAvvy = false;
-
- AnimationType *avvy = &_vm->_animation->_sprites[0];
- int16 sx = avvy->_x;
- int16 sy = avvy->_y;
-
- avvy->remove();
- avvy->init(12, true, _vm->_animation); // 12 = Avalot falls
- avvy->_stepNum = 0;
- avvy->appear(sx, sy, 0);
-
- _vm->_timer->addTimer(3, Timer::kProcAvalotFalls, Timer::kReasonFallingOver);
- _vm->_gyro->_alive = false;
-}
-
-void Lucerna::minorRedraw() {
- dusk();
-
- enterRoom(_vm->_gyro->_room, 0); // Ped unknown or non-existant.
-
- for (int i = 0; i < 3; i++)
- _vm->_gyro->_scoreToDisplay[i] = -1; // impossible digits
- drawScore();
-
- dawn();
-}
-
-void Lucerna::majorRedraw() {
- warning("STUB: Lucerna::major_redraw()");
-}
-
-uint16 Lucerna::bearing(byte whichPed) {
- static const double rad2deg = 180 / 3.14; // Pi
- AnimationType *avvy = &_vm->_animation->_sprites[0];
- PedType *curPed = &_vm->_gyro->_peds[whichPed];
-
- if (avvy->_x == curPed->_x)
- return 0;
- else if (avvy->_x < curPed->_x) {
- return (uint16)((atan(double((avvy->_y - curPed->_y)) / (avvy->_x - curPed->_x)) * rad2deg) + 90);
- } else {
- return (uint16)((atan(double((avvy->_y - curPed->_y)) / (avvy->_x - curPed->_x)) * rad2deg) + 270);
- }
-}
-
-/**
- * @remarks Originally called 'sprite_run'
- */
-void Lucerna::spriteRun() {
- _vm->_gyro->_doingSpriteRun = true;
- _vm->_animation->animLink();
- _vm->_gyro->_doingSpriteRun = false;
-}
-
-void Lucerna::fixFlashers() {
- _vm->_gyro->_ledStatus = 177;
- _vm->_animation->_oldDirection = 177;
- _vm->_dialogs->setReadyLight(2);
- drawDirection();
-}
-
-} // End of namespace Avalanche
diff --git a/engines/avalanche/lucerna.h b/engines/avalanche/lucerna.h
deleted file mode 100644
index 87b1931e25..0000000000
--- a/engines/avalanche/lucerna.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
- * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
- */
-
-/* LUCERNA The screen, [keyboard] and mouse handler.*/
-
-#ifndef AVALANCHE_LUCERNA2_H
-#define AVALANCHE_LUCERNA2_H
-
-#include "common/scummsys.h"
-#include "common/file.h"
-
-namespace Avalanche {
-class AvalancheEngine;
-
-class Clock {
-public:
- Clock(AvalancheEngine *vm);
-
- void update();
-
-private:
- static const int kCenterX = 510;
- static const int kCenterY = 183;
-
- AvalancheEngine *_vm;
-
- uint16 _hour, _minute, _second, _hourAngle, _oldHour, _oldMinute, _oldHourAngle;
- Common::Point _clockHandHour, _clockHandMinute;
-
- void calcHand(uint16 angle, uint16 length, Common::Point &endPoint, byte color);
- void drawHand(const Common::Point &endPoint, byte color);
- void plotHands();
- void chime();
-};
-
-class Lucerna {
-public:
- bool _holdLeftMouse;
- Clock _clock;
-
- Lucerna(AvalancheEngine *vm);
- ~Lucerna();
-
- void init();
- void callVerb(byte id);
- void drawAlsoLines();
- void loadRoom(byte num);
- void exitRoom(byte x);
- void enterRoom(byte room, byte ped);
- void thinkAbout(byte object, bool type); // Hey!!! Get it and put it!!!
- void loadDigits(); // Load the scoring digits & rwlites
- void drawToolbar();
- void drawScore();
- void incScore(byte num); // Add on no. of points
- void useCompass(const Common::Point &cursorPos); // Click on the compass on the toolbar to control Avvy's movement.
- void fxToggle();
- void refreshObjectList();
- void checkClick();
- void errorLed();
- void dusk();
- void dawn();
- void drawDirection(); // Draws the little icon at the left end of the text input field.
- void gameOver();
- uint16 bearing(byte whichPed); // Returns the bearing from ped 'whichped' to Avvy, in degrees.
- void fixFlashers();
- void loadAlso(byte num);
-
- // There are two kinds of redraw: Major and Minor. Minor is what happens when you load a game, etc. Major redraws EVERYTHING.
- void minorRedraw();
- void majorRedraw();
-
- void spriteRun();
-
-private:
- AvalancheEngine *_vm;
-
- Common::File file;
-
- Common::String readAlsoStringFromFile();
- void scram(Common::String &str);
- void unScramble();
-
- void zoomOut(int16 x, int16 y); // Only used when entering the map.
- void enterNewTown();
- void findPeople(byte room);
- void putGeidaAt(byte whichPed, byte ped);
- void guideAvvy(Common::Point cursorPos);
-
- // Will be used in dusk() and dawn().
- bool _fxHidden;
-
- int8 fades(int8 x);
- void fadeOut(byte n);
- void fadeIn(byte n);
-
-};
-
-} // End of namespace Avalanche
-
-#endif // AVALANCHE_LUCERNA2_H
diff --git a/engines/avalanche/menu.cpp b/engines/avalanche/menu.cpp
index 64b3b97eca..0fb1f62ca5 100644
--- a/engines/avalanche/menu.cpp
+++ b/engines/avalanche/menu.cpp
@@ -29,8 +29,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/menu.h"
-#include "avalanche/lucerna.h"
-#include "avalanche/gyro.h"
#include "avalanche/animation.h"
#include "common/textconsole.h"
@@ -67,7 +65,7 @@ void HeadType::highlight() {
_menu->_activeMenuItem._activeNum = _position;
_menu->_menuActive = true;
- _menu->_vm->_gyro->_currentMouse = 177; // Force redraw of cursor.
+ _menu->_vm->_avalot->_currentMouse = 177; // Force redraw of cursor.
}
bool HeadType::parseAltTrigger(char key) {
@@ -137,8 +135,8 @@ void MenuItem::display() {
for (int y = 1; y < _optionNum; y++)
displayOption(y, false);
- _dr->_vm->_gyro->_defaultLed = 1;
- _dr->_vm->_gyro->_currentMouse = 177;
+ _dr->_vm->_avalot->_defaultLed = 1;
+ _dr->_vm->_avalot->_currentMouse = 177;
CursorMan.showMouse(true); // 4 = fletch
}
@@ -151,7 +149,7 @@ void MenuItem::wipe() {
_activeNow = false;
_dr->_menuActive = false;
_firstlix = false;
- _dr->_vm->_gyro->_defaultLed = 2;
+ _dr->_vm->_avalot->_defaultLed = 2;
CursorMan.showMouse(true);
}
@@ -220,13 +218,13 @@ void MenuBar::createMenuItem(char trig, Common::String title, char altTrig, Menu
void MenuBar::draw() {
_dr->_vm->_graphics->_surface.fillRect(Common::Rect(0, 0, 640, 10), _dr->kMenuBackgroundColor);
- byte savecp = _dr->_vm->_gyro->_cp;
- _dr->_vm->_gyro->_cp = 3;
+ byte savecp = _dr->_vm->_avalot->_cp;
+ _dr->_vm->_avalot->_cp = 3;
for (int i = 0; i < _menuNum; i++)
_menuItems[i].draw();
- _dr->_vm->_gyro->_cp = savecp;
+ _dr->_vm->_avalot->_cp = savecp;
}
void MenuBar::parseAltTrigger(char c) {
@@ -264,30 +262,30 @@ Menu::Menu(AvalancheEngine *vm) {
}
void Menu::findWhatYouCanDoWithIt() {
- switch (_vm->_gyro->_thinks) {
- case Gyro::kObjectWine:
- case Gyro::kObjectPotion:
- case Gyro::kObjectInk:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeDrink;
+ switch (_vm->_avalot->_thinks) {
+ case Avalot::kObjectWine:
+ case Avalot::kObjectPotion:
+ case Avalot::kObjectInk:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeDrink;
break;
- case Gyro::kObjectBell:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeRing;
+ case Avalot::kObjectBell:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeRing;
break;
- case Gyro::kObjectChastity:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeWear;
+ case Avalot::kObjectChastity:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeWear;
break;
- case Gyro::kObjectLute:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodePlay;
+ case Avalot::kObjectLute:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodePlay;
break;
- case Gyro::kObjectMushroom:
- case Gyro::kObjectOnion:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeEat;
+ case Avalot::kObjectMushroom:
+ case Avalot::kObjectOnion:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeEat;
break;
- case Gyro::kObjectClothes:
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeWear;
+ case Avalot::kObjectClothes:
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeWear;
break;
default:
- _vm->_gyro->_verbStr = Parser::kVerbCodeExam; // Anything else.
+ _vm->_avalot->_verbStr = Parser::kVerbCodeExam; // Anything else.
}
}
@@ -312,7 +310,7 @@ void Menu::drawMenuText(int16 x, int16 y, char trigger, Common::String text, boo
for (uint i = 0; i < text.size(); i++) {
for (int j = 0; j < 8; j++) {
byte idx = text[i];
- font[idx][j] = _vm->_gyro->_font[idx][j] & ander; // Set the font.
+ font[idx][j] = _vm->_avalot->_font[idx][j] & ander; // Set the font.
// And set the background of the text to the desired color.
for (int k = 0; k < 8; k++)
*(byte *)_vm->_graphics->_surface.getBasePtr(x * 8 + i * 8 + k, y + j) = backgroundColor;
@@ -414,9 +412,9 @@ void Menu::setupMenuFile() {
_activeMenuItem.reset();
_activeMenuItem.setupOption("New game", 'N', "f4", true);
_activeMenuItem.setupOption("Load...", 'L', "^f3", true);
- _activeMenuItem.setupOption("Save", 'S', "^f2", _vm->_gyro->_alive);
- _activeMenuItem.setupOption("Save As...", 'v', "", _vm->_gyro->_alive);
- _activeMenuItem.setupOption("DOS Shell", 'D', _vm->_gyro->_atKey + '1', true);
+ _activeMenuItem.setupOption("Save", 'S', "^f2", _vm->_avalot->_alive);
+ _activeMenuItem.setupOption("Save As...", 'v', "", _vm->_avalot->_alive);
+ _activeMenuItem.setupOption("DOS Shell", 'D', _vm->_avalot->_atKey + '1', true);
_activeMenuItem.setupOption("Quit", 'Q', "alt-X", true);
_activeMenuItem.display();
}
@@ -424,7 +422,7 @@ void Menu::setupMenuFile() {
void Menu::setupMenuAction() {
_activeMenuItem.reset();
- Common::String f5Does = _vm->_gyro->f5Does();
+ Common::String f5Does = _vm->_avalot->f5Does();
for (int i = 0; i < 2; i++)
if (!f5Does.empty())
f5Does.deleteChar(0);
@@ -433,13 +431,13 @@ void Menu::setupMenuAction() {
else
_activeMenuItem.setupOption(f5Does, f5Does[0], "f5", true);
_activeMenuItem.setupOption("Pause game", 'P', "f6", true);
- if (_vm->_gyro->_room == kRoomMap)
+ if (_vm->_avalot->_room == kRoomMap)
_activeMenuItem.setupOption("Journey thither", 'J', "f7", _vm->_animation->nearDoor());
else
_activeMenuItem.setupOption("Open the door", 'O', "f7", _vm->_animation->nearDoor());
_activeMenuItem.setupOption("Look around", 'L', "f8", true);
_activeMenuItem.setupOption("Inventory", 'I', "Tab", true);
- if (_vm->_animation->_sprites[0]._speedX == _vm->_gyro->kWalk)
+ if (_vm->_animation->_sprites[0]._speedX == _vm->_avalot->kWalk)
_activeMenuItem.setupOption("Run fast", 'R', "^R", true);
else
_activeMenuItem.setupOption("Walk slowly", 'W', "^W", true);
@@ -454,8 +452,8 @@ void Menu::setupMenuPeople() {
_activeMenuItem.reset();
for (int i = 150; i <= 178; i++) {
- if (_vm->_gyro->_whereIs[i - 150] == _vm->_gyro->_room) {
- _activeMenuItem.setupOption(_vm->_gyro->getName(i), _vm->_gyro->getNameChar(i), "", true);
+ if (_vm->_avalot->_whereIs[i - 150] == _vm->_avalot->_room) {
+ _activeMenuItem.setupOption(_vm->_avalot->getName(i), _vm->_avalot->getNameChar(i), "", true);
people += i;
}
}
@@ -466,8 +464,8 @@ void Menu::setupMenuPeople() {
void Menu::setupMenuObjects() {
_activeMenuItem.reset();
for (int i = 0; i < kObjectNum; i++) {
- if (_vm->_gyro->_objects[i])
- _activeMenuItem.setupOption(_vm->_gyro->getThing(i + 1), _vm->_gyro->getThingChar(i + 1), "", true);
+ if (_vm->_avalot->_objects[i])
+ _activeMenuItem.setupOption(_vm->_avalot->getThing(i + 1), _vm->_avalot->getThingChar(i + 1), "", true);
}
_activeMenuItem.display();
}
@@ -475,54 +473,54 @@ void Menu::setupMenuObjects() {
void Menu::setupMenuWith() {
_activeMenuItem.reset();
- if (_vm->_gyro->_thinkThing) {
+ if (_vm->_avalot->_thinkThing) {
findWhatYouCanDoWithIt();
- for (uint i = 0; i < _vm->_gyro->_verbStr.size(); i++) {
+ for (uint i = 0; i < _vm->_avalot->_verbStr.size(); i++) {
char vbchar;
Common::String verb;
- _vm->_parser->verbOpt(_vm->_gyro->_verbStr[i], verb, vbchar);
+ _vm->_parser->verbOpt(_vm->_avalot->_verbStr[i], verb, vbchar);
_activeMenuItem.setupOption(verb, vbchar, "", true);
}
// We disable the "give" option if: (a), you haven't selected anybody, (b), the _person you've selected isn't in the room,
// or (c), the _person you've selected is YOU!
- if ((_vm->_gyro->_lastPerson == Gyro::kPeopleAvalot) || (_vm->_gyro->_lastPerson == _vm->_parser->kNothing)
- || (_vm->_gyro->_whereIs[_vm->_gyro->_lastPerson - 150] != _vm->_gyro->_room))
+ if ((_vm->_avalot->_lastPerson == Avalot::kPeopleAvalot) || (_vm->_avalot->_lastPerson == _vm->_parser->kNothing)
+ || (_vm->_avalot->_whereIs[_vm->_avalot->_lastPerson - 150] != _vm->_avalot->_room))
_activeMenuItem.setupOption("Give to...", 'G', "", false); // Not here.
else {
- _activeMenuItem.setupOption(Common::String("Give to ") + _vm->_gyro->getName(_vm->_gyro->_lastPerson), 'G', "", true);
- _vm->_gyro->_verbStr = _vm->_gyro->_verbStr + Parser::kVerbCodeGive;
+ _activeMenuItem.setupOption(Common::String("Give to ") + _vm->_avalot->getName(_vm->_avalot->_lastPerson), 'G', "", true);
+ _vm->_avalot->_verbStr = _vm->_avalot->_verbStr + Parser::kVerbCodeGive;
}
} else {
_activeMenuItem.setupOption("Examine", 'x', "", true);
- _activeMenuItem.setupOption(Common::String("Talk to h") + selectGender(_vm->_gyro->_thinks), 'T', "", true);
- _vm->_gyro->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeTalk;
- switch (_vm->_gyro->_thinks) {
- case Gyro::kPeopleGeida:
- case Gyro::kPeopleArkata:
+ _activeMenuItem.setupOption(Common::String("Talk to h") + selectGender(_vm->_avalot->_thinks), 'T', "", true);
+ _vm->_avalot->_verbStr = Common::String(Parser::kVerbCodeExam) + Parser::kVerbCodeTalk;
+ switch (_vm->_avalot->_thinks) {
+ case Avalot::kPeopleGeida:
+ case Avalot::kPeopleArkata:
_activeMenuItem.setupOption("Kiss her", 'K', "", true);
- _vm->_gyro->_verbStr = _vm->_gyro->_verbStr + Parser::kVerbCodeKiss;
+ _vm->_avalot->_verbStr = _vm->_avalot->_verbStr + Parser::kVerbCodeKiss;
break;
- case Gyro::kPeopleDogfood:
- _activeMenuItem.setupOption("Play his game", 'P', "", !_vm->_gyro->_wonNim); // True if you HAVEN'T won.
- _vm->_gyro->_verbStr = _vm->_gyro->_verbStr + Parser::kVerbCodePlay;
+ case Avalot::kPeopleDogfood:
+ _activeMenuItem.setupOption("Play his game", 'P', "", !_vm->_avalot->_wonNim); // True if you HAVEN'T won.
+ _vm->_avalot->_verbStr = _vm->_avalot->_verbStr + Parser::kVerbCodePlay;
break;
- case Gyro::kPeopleMalagauche: {
- bool isSober = !_vm->_gyro->_teetotal;
- _activeMenuItem.setupOption("Buy some wine", 'w', "", !_vm->_gyro->_objects[Gyro::kObjectWine - 1]);
+ case Avalot::kPeopleMalagauche: {
+ bool isSober = !_vm->_avalot->_teetotal;
+ _activeMenuItem.setupOption("Buy some wine", 'w', "", !_vm->_avalot->_objects[Avalot::kObjectWine - 1]);
_activeMenuItem.setupOption("Buy some beer", 'b', "", isSober);
_activeMenuItem.setupOption("Buy some whisky", 'h', "", isSober);
_activeMenuItem.setupOption("Buy some cider", 'c', "", isSober);
_activeMenuItem.setupOption("Buy some mead", 'm', "", isSober);
- _vm->_gyro->_verbStr = _vm->_gyro->_verbStr + 101 + 100 + 102 + 103 + 104;
+ _vm->_avalot->_verbStr = _vm->_avalot->_verbStr + 101 + 100 + 102 + 103 + 104;
}
break;
- case Gyro::kPeopleTrader:
- _activeMenuItem.setupOption("Buy an onion", 'o', "", !_vm->_gyro->_objects[Gyro::kObjectOnion - 1]);
- _vm->_gyro->_verbStr = _vm->_gyro->_verbStr + 105;
+ case Avalot::kPeopleTrader:
+ _activeMenuItem.setupOption("Buy an onion", 'o', "", !_vm->_avalot->_objects[Avalot::kObjectOnion - 1]);
+ _vm->_avalot->_verbStr = _vm->_avalot->_verbStr + 105;
break;
}
}
@@ -533,19 +531,19 @@ void Menu::runMenuGame() {
// Help, boss, untrash screen.
switch (_activeMenuItem._choiceNum) {
case 0:
- _vm->_lucerna->callVerb(Parser::kVerbCodeHelp);
+ _vm->_avalot->callVerb(Parser::kVerbCodeHelp);
break;
case 1:
- _vm->_lucerna->callVerb(Parser::kVerbCodeBoss);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBoss);
break;
case 2:
- _vm->_lucerna->majorRedraw();
+ _vm->_avalot->majorRedraw();
break;
case 3:
- _vm->_lucerna->callVerb(Parser::kVerbCodeScore);
+ _vm->_avalot->callVerb(Parser::kVerbCodeScore);
break;
case 4:
- _vm->_lucerna->callVerb(Parser::kVerbCodeInfo);
+ _vm->_avalot->callVerb(Parser::kVerbCodeInfo);
break;
}
}
@@ -554,17 +552,17 @@ void Menu::runMenuFile() {
// New game, load, save, save as, DOS shell, about, quit.
switch (_activeMenuItem._choiceNum) {
case 0:
- _vm->_lucerna->callVerb(Parser::kVerbCodeRestart);
+ _vm->_avalot->callVerb(Parser::kVerbCodeRestart);
break;
case 1:
if (!_vm->_parser->_realWords[1].empty())
_vm->_parser->_realWords[1].clear();
- _vm->_lucerna->callVerb(Parser::kVerbCodeLoad);
+ _vm->_avalot->callVerb(Parser::kVerbCodeLoad);
break;
case 2:
if (!_vm->_parser->_realWords[1].empty())
_vm->_parser->_realWords[1].clear();
- _vm->_lucerna->callVerb(Parser::kVerbCodeSave);
+ _vm->_avalot->callVerb(Parser::kVerbCodeSave);
break;
case 3:
//_vm->_basher->filename_edit();
@@ -574,7 +572,7 @@ void Menu::runMenuFile() {
//_vm->_enid->backToBootstrap(2); TODO: Replace it with proper ScummVM-friendly function(s)! Do not remove until then!
break;
case 5:
- _vm->_lucerna->callVerb(Parser::kVerbCodeQuit);
+ _vm->_avalot->callVerb(Parser::kVerbCodeQuit);
break;
}
}
@@ -586,29 +584,29 @@ void Menu::runMenuAction() {
case 0:
_vm->_parser->_person = _vm->_parser->kPardon;
_vm->_parser->_thing = _vm->_parser->kPardon;
- f5Does = _vm->_gyro->f5Does();
- _vm->_lucerna->callVerb(f5Does[0]);
+ f5Does = _vm->_avalot->f5Does();
+ _vm->_avalot->callVerb(f5Does[0]);
break;
case 1:
_vm->_parser->_thing = _vm->_parser->kPardon;
- _vm->_lucerna->callVerb(Parser::kVerbCodePause);
+ _vm->_avalot->callVerb(Parser::kVerbCodePause);
break;
case 2:
- _vm->_lucerna->callVerb(Parser::kVerbCodeOpen);
+ _vm->_avalot->callVerb(Parser::kVerbCodeOpen);
break;
case 3:
_vm->_parser->_thing = _vm->_parser->kPardon;
- _vm->_lucerna->callVerb(Parser::kVerbCodeLook);
+ _vm->_avalot->callVerb(Parser::kVerbCodeLook);
break;
case 4:
- _vm->_lucerna->callVerb(Parser::kVerbCodeInv);
+ _vm->_avalot->callVerb(Parser::kVerbCodeInv);
break;
case 5: {
AnimationType *avvy = &_vm->_animation->_sprites[0];
- if (avvy->_speedX == _vm->_gyro->kWalk)
- avvy->_speedX = _vm->_gyro->kRun;
+ if (avvy->_speedX == _vm->_avalot->kWalk)
+ avvy->_speedX = _vm->_avalot->kRun;
else
- avvy->_speedX = _vm->_gyro->kWalk;
+ avvy->_speedX = _vm->_avalot->kWalk;
_vm->_animation->updateSpeed();
}
break;
@@ -616,57 +614,57 @@ void Menu::runMenuAction() {
}
void Menu::runMenuObjects() {
- _vm->_lucerna->thinkAbout(_vm->_gyro->_objectList[_activeMenuItem._choiceNum], Gyro::kThing);
+ _vm->_avalot->thinkAbout(_vm->_avalot->_objectList[_activeMenuItem._choiceNum], Avalot::kThing);
}
void Menu::runMenuPeople() {
- _vm->_lucerna->thinkAbout(people[_activeMenuItem._choiceNum], Gyro::kPerson);
- _vm->_gyro->_lastPerson = people[_activeMenuItem._choiceNum];
+ _vm->_avalot->thinkAbout(people[_activeMenuItem._choiceNum], Avalot::kPerson);
+ _vm->_avalot->_lastPerson = people[_activeMenuItem._choiceNum];
}
void Menu::runMenuWith() {
- _vm->_parser->_thing = _vm->_gyro->_thinks;
+ _vm->_parser->_thing = _vm->_avalot->_thinks;
- if (_vm->_gyro->_thinkThing) {
+ if (_vm->_avalot->_thinkThing) {
_vm->_parser->_thing += 49;
- if (_vm->_gyro->_verbStr[_activeMenuItem._choiceNum] == Parser::kVerbCodeGive)
- _vm->_parser->_person = _vm->_gyro->_lastPerson;
+ if (_vm->_avalot->_verbStr[_activeMenuItem._choiceNum] == Parser::kVerbCodeGive)
+ _vm->_parser->_person = _vm->_avalot->_lastPerson;
else
_vm->_parser->_person = Parser::kPardon;
} else {
- switch (_vm->_gyro->_verbStr[_activeMenuItem._choiceNum]) {
+ switch (_vm->_avalot->_verbStr[_activeMenuItem._choiceNum]) {
case 100: // Beer
_vm->_parser->_thing = 100;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
case 101: // Wine
_vm->_parser->_thing = 50;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
case 102: // Whisky
_vm->_parser->_thing = 102;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
case 103: // Cider
_vm->_parser->_thing = 103;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
case 104: // Mead
_vm->_parser->_thing = 107;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
case 105: // Onion (trader)
_vm->_parser->_thing = 67;
- _vm->_lucerna->callVerb(Parser::kVerbCodeBuy);
+ _vm->_avalot->callVerb(Parser::kVerbCodeBuy);
return;
default:
_vm->_parser->_person = _vm->_parser->_thing;
_vm->_parser->_thing = Parser::kPardon;
- _vm->_gyro->_subjectNum = 0;
+ _vm->_avalot->_subjectNum = 0;
}
}
- _vm->_lucerna->callVerb(_vm->_gyro->_verbStr[_activeMenuItem._choiceNum]);
+ _vm->_avalot->callVerb(_vm->_avalot->_verbStr[_activeMenuItem._choiceNum]);
}
void Menu::setup() {
@@ -688,11 +686,11 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
::Graphics::Surface backup;
backup.copyFrom(_vm->_graphics->_surface);
- while (!_activeMenuItem._activeNow && (cursorPos.y <= 21) && _vm->_lucerna->_holdLeftMouse) {
+ while (!_activeMenuItem._activeNow && (cursorPos.y <= 21) && _vm->_avalot->_holdLeftMouse) {
_menuBar.chooseMenuItem(cursorPos.x);
do
_vm->updateEvents();
- while (_vm->_lucerna->_holdLeftMouse);
+ while (_vm->_avalot->_holdLeftMouse);
while (!_vm->shouldQuit()) {
do {
@@ -702,28 +700,28 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
cursorPos = _vm->getMousePos();
// Change arrow...
if ((0 <= cursorPos.y) && (cursorPos.y <= 21))
- _vm->_gyro->newMouse(0); // Up arrow
+ _vm->_avalot->newMouse(0); // Up arrow
else if ((22 <= cursorPos.y) && (cursorPos.y <= 339)) {
if ((cursorPos.x >= _activeMenuItem._flx1 * 8) && (cursorPos.x <= _activeMenuItem._flx2 * 8) && (cursorPos.y > 21) && (cursorPos.y <= _activeMenuItem._fly * 2 + 1))
- _vm->_gyro->newMouse(2); // Right-arrow
+ _vm->_avalot->newMouse(2); // Right-arrow
else
- _vm->_gyro->newMouse(3); // Fletch
+ _vm->_avalot->newMouse(3); // Fletch
} else if ((340 <= cursorPos.y) && (cursorPos.y <= 399))
- _vm->_gyro->newMouse(1); // Screwdriver
+ _vm->_avalot->newMouse(1); // Screwdriver
_activeMenuItem.lightUp(cursorPos);
_vm->_graphics->refreshScreen();
- } while (!_vm->_lucerna->_holdLeftMouse);
+ } while (!_vm->_avalot->_holdLeftMouse);
- if (_vm->_lucerna->_holdLeftMouse) {
+ if (_vm->_avalot->_holdLeftMouse) {
if (cursorPos.y > 21) {
if (!((_activeMenuItem._firstlix) && ((cursorPos.x >= _activeMenuItem._flx1 * 8) && (cursorPos.x <= _activeMenuItem._flx2 * 8)
&& (cursorPos.y >= 24) && (cursorPos.y <= (_activeMenuItem._fly * 2 + 1))))) {
// Clicked OUTSIDE the menu.
if (_activeMenuItem._activeNow) {
_activeMenuItem.wipe();
- _vm->_lucerna->_holdLeftMouse = false;
+ _vm->_avalot->_holdLeftMouse = false;
backup.free();
return;
} // No "else"- clicking on menu has no effect (only releasing).
@@ -737,11 +735,11 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
if (((_activeMenuItem._left * 8) <= cursorPos.x) && (cursorPos.x <= (_activeMenuItem._left * 8 + 80))) { // 80: the width of one menu item on the bar in pixels.
// If we clicked on the same menu item (the one that is already active) on the bar...
- _vm->_lucerna->_holdLeftMouse = false;
+ _vm->_avalot->_holdLeftMouse = false;
backup.free();
return;
} else {
- _vm->_lucerna->_holdLeftMouse = true;
+ _vm->_avalot->_holdLeftMouse = true;
break;
}
}
@@ -758,7 +756,7 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
_vm->_graphics->refreshScreen();
_vm->updateEvents();
- if (!_vm->_lucerna->_holdLeftMouse)
+ if (!_vm->_avalot->_holdLeftMouse)
break;
}
diff --git a/engines/avalanche/module.mk b/engines/avalanche/module.mk
index 541123f24f..9c1205df02 100644
--- a/engines/avalanche/module.mk
+++ b/engines/avalanche/module.mk
@@ -9,8 +9,6 @@ MODULE_OBJS = \
console.o \
detection.o \
graphics.o \
- gyro.o \
- lucerna.o \
menu.o \
parser.o \
pingo.o \
diff --git a/engines/avalanche/parser.cpp b/engines/avalanche/parser.cpp
index 29fadda330..4a58763d0c 100644
--- a/engines/avalanche/parser.cpp
+++ b/engines/avalanche/parser.cpp
@@ -27,8 +27,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/parser.h"
-#include "avalanche/gyro.h"
-#include "avalanche/lucerna.h"
#include "avalanche/dialogs.h"
#include "avalanche/timer.h"
#include "avalanche/animation.h"
@@ -53,7 +51,7 @@ void Parser::init() {
_inputText.clear();
_inputTextPos = 0;
- _vm->_gyro->_weirdWord = false;
+ _vm->_avalot->_weirdWord = false;
// Initailaze the vocabulary.
// Verbs: 1-49
@@ -425,10 +423,10 @@ void Parser::handleFunctionKey(const Common::Event &event) {
case Common::KEYCODE_F5:
_person = kPardon;
_thing = kPardon;
- _vm->_lucerna->callVerb(_vm->_gyro->f5Does()[0]);
+ _vm->_avalot->callVerb(_vm->_avalot->f5Does()[0]);
break;
case Common::KEYCODE_F7:
- _vm->_lucerna->callVerb(Parser::kVerbCodeOpen);
+ _vm->_avalot->callVerb(Parser::kVerbCodeOpen);
break;
default:
break;
@@ -440,7 +438,7 @@ void Parser::plotText() {
cursorOff();
_vm->_graphics->_surface.fillRect(Common::Rect(24, 161, 640, 169), kColorBlack); // Black out the line of the text.
- _vm->_graphics->drawText(_vm->_graphics->_surface, _inputText, _vm->_gyro->_font, 8, 24, 161, kColorWhite);
+ _vm->_graphics->drawText(_vm->_graphics->_surface, _inputText, _vm->_avalot->_font, 8, 24, 161, kColorWhite);
cursorOn();
CursorMan.showMouse(true);
@@ -539,7 +537,7 @@ Common::String Parser::rank() {
};
for (int i = 0; i < 8; i++) {
- if ((_vm->_gyro->_dnascore >= kRanks[i]._score) && (_vm->_gyro->_dnascore < kRanks[i + 1]._score)) {
+ if ((_vm->_avalot->_dnascore >= kRanks[i]._score) && (_vm->_avalot->_dnascore < kRanks[i + 1]._score)) {
return kRanks[i]._title;
}
}
@@ -551,7 +549,7 @@ Common::String Parser::totalTime() {
const double ticksInOneSec = (double)(65535) / 3600;
uint16 h, m, s;
- h = floor(_vm->_gyro->_totalTime / ticksInOneSec); // No. of seconds.
+ h = floor(_vm->_avalot->_totalTime / ticksInOneSec); // No. of seconds.
m = h % 3600;
h /= 3600;
s = m % 60;
@@ -593,10 +591,10 @@ void Parser::displayWhat(byte target, bool animate, bool &ambiguous) {
_vm->_dialogs->displayText("What?");
} else {
if (animate) {
- Common::String tmpStr = Common::String::format("{ %s }", _vm->_gyro->getName(target).c_str());
+ Common::String tmpStr = Common::String::format("{ %s }", _vm->_avalot->getName(target).c_str());
_vm->_dialogs->displayText(tmpStr);
} else {
- Common::String z = _vm->_gyro->getItem(target);
+ Common::String z = _vm->_avalot->getItem(target);
if (z != "") {
Common::String tmpStr = Common::String::format("{ %s }", z.c_str());
_vm->_dialogs->displayText(tmpStr);
@@ -612,16 +610,16 @@ bool Parser::doPronouns() {
byte wordCode = _thats[i];
switch (wordCode) {
case 200:
- displayWhat(_vm->_gyro->_him, true, ambiguous);
- _thats.setChar(_vm->_gyro->_him, i);
+ displayWhat(_vm->_avalot->_him, true, ambiguous);
+ _thats.setChar(_vm->_avalot->_him, i);
break;
case 201:
- displayWhat(_vm->_gyro->_her, true, ambiguous);
- _thats.setChar(_vm->_gyro->_her, i);
+ displayWhat(_vm->_avalot->_her, true, ambiguous);
+ _thats.setChar(_vm->_avalot->_her, i);
break;
case 202:
- displayWhat(_vm->_gyro->_it, false, ambiguous);
- _thats.setChar(_vm->_gyro->_it, i);
+ displayWhat(_vm->_avalot->_it, false, ambiguous);
+ _thats.setChar(_vm->_avalot->_it, i);
break;
}
}
@@ -666,32 +664,32 @@ void Parser::storeInterrogation(byte interrogation) {
case 1:
_inputText.toLowercase();
sayIt();
- _vm->_gyro->_favouriteDrink = _inputText;
- _vm->_gyro->_cardiffQuestionNum = 2;
+ _vm->_avalot->_favouriteDrink = _inputText;
+ _vm->_avalot->_cardiffQuestionNum = 2;
break;
case 2:
properNouns();
sayIt();
- _vm->_gyro->_favouriteSong = _inputText;
- _vm->_gyro->_cardiffQuestionNum = 3;
+ _vm->_avalot->_favouriteSong = _inputText;
+ _vm->_avalot->_cardiffQuestionNum = 3;
break;
case 3:
properNouns();
sayIt();
- _vm->_gyro->_worstPlaceOnEarth = _inputText;
- _vm->_gyro->_cardiffQuestionNum = 4;
+ _vm->_avalot->_worstPlaceOnEarth = _inputText;
+ _vm->_avalot->_cardiffQuestionNum = 4;
break;
case 4:
_inputText.toLowercase();
sayIt();
- if (!_vm->_gyro->_spareEvening.empty())
- _vm->_gyro->_spareEvening.clear();
- _vm->_gyro->_spareEvening = _inputText;
+ if (!_vm->_avalot->_spareEvening.empty())
+ _vm->_avalot->_spareEvening.clear();
+ _vm->_avalot->_spareEvening = _inputText;
_vm->_dialogs->displayScrollChain('z', 5); // His closing statement...
_vm->_animation->_sprites[1].walkTo(3); // The end of the drawbridge
_vm->_animation->_sprites[1]._vanishIfStill = true; // Then go away!
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicNothing;
- _vm->_gyro->_cardiffQuestionNum = 5;
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicNothing;
+ _vm->_avalot->_cardiffQuestionNum = 5;
break;
case 99:
//store_high(_inputText);
@@ -727,9 +725,9 @@ void Parser::parse() {
}
// Are we being interrogated right now?
- if (_vm->_gyro->_interrogation > 0) {
- storeInterrogation(_vm->_gyro->_interrogation);
- _vm->_gyro->_weirdWord = true;
+ if (_vm->_avalot->_interrogation > 0) {
+ storeInterrogation(_vm->_avalot->_interrogation);
+ _vm->_avalot->_weirdWord = true;
return;
}
@@ -761,7 +759,7 @@ void Parser::parse() {
// Check also[] first, which contains words about the actual room.
if (!thisword.empty()) {
for (int i = 0; i < 31; i++) {
- if ((_vm->_gyro->_also[i][0] != 0) && (getPos(',' + thisword, *_vm->_gyro->_also[i][0]) > -1)) {
+ if ((_vm->_avalot->_also[i][0] != 0) && (getPos(',' + thisword, *_vm->_avalot->_also[i][0]) > -1)) {
_thats += Common::String(99 + i);
notfound = false;
}
@@ -813,12 +811,12 @@ void Parser::parse() {
replace(Common::String("\x4\xE5"), 20); // "take off" = "doff"
// Words that could mean more than one _person
- if (_vm->_gyro->_room == kRoomNottsPub)
+ if (_vm->_avalot->_room == kRoomNottsPub)
replace(Common::String('\xCC'), 164); // Barman = Port
else
replace(Common::String('\xCC'), 154); // Barman = Malagauche
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomAylesOffice:
replace(Common::String('\xCB'), 163); // Monk = Ayles
break;
@@ -830,39 +828,39 @@ void Parser::parse() {
}
if (doPronouns()) {
- _vm->_gyro->_weirdWord = true;
+ _vm->_avalot->_weirdWord = true;
_thats = kNothing;
return;
}
// Second parsing.
- if (!_vm->_gyro->_subject.empty())
- _vm->_gyro->_subject.clear();
- _vm->_gyro->_subjectNum = 0; // Find subject of conversation.
+ if (!_vm->_avalot->_subject.empty())
+ _vm->_avalot->_subject.clear();
+ _vm->_avalot->_subjectNum = 0; // Find subject of conversation.
for (int i = 0; (i < 11) && !_realWords[i].empty(); i++) {
if ((_realWords[i][0] == '\'') || (_realWords[i][0] == '\"')) {
- _vm->_gyro->_subjectNum = (byte)_thats[i];
+ _vm->_avalot->_subjectNum = (byte)_thats[i];
_thats.setChar(kMoved, i);
break;
}
}
- if ((_vm->_gyro->_subjectNum == 0) && !_thats.empty()) { // Still not found.
+ if ((_vm->_avalot->_subjectNum == 0) && !_thats.empty()) { // Still not found.
for (uint16 i = 0; i < _thats.size() - 1; i++) {
if ((byte)_thats[i] == 252) { // The word is "about", or something similar.
- _vm->_gyro->_subjectNum = (byte)_thats[i + 1];
+ _vm->_avalot->_subjectNum = (byte)_thats[i + 1];
_thats.setChar(0, i + 1);
break;
}
}
}
- if ((_vm->_gyro->_subjectNum == 0) && !_thats.empty()) { // STILL not found! Must be the word after "say".
+ if ((_vm->_avalot->_subjectNum == 0) && !_thats.empty()) { // STILL not found! Must be the word after "say".
for (uint16 i = 0; i < _thats.size() - 1; i++) {
if (((byte)_thats[i] == 7) && ((byte)_thats[i + 1] != 0) && !((225 <= (byte)_thats[i + 1]) && ((byte)_thats[i + 1] <= 229))) {
// SAY not followed by a preposition
- _vm->_gyro->_subjectNum = (byte)_thats[i + 1];
+ _vm->_avalot->_subjectNum = (byte)_thats[i + 1];
_thats.setChar(0, i + 1);
break;
}
@@ -884,30 +882,30 @@ void Parser::parse() {
if ((!unkString.empty()) && (_verb != kVerbCodeExam) && (_verb != kVerbCodeTalk) && (_verb != kVerbCodeSave) && (_verb != kVerbCodeLoad) && (_verb != kVerbCodeDir)) {
Common::String tmpStr = Common::String::format("Sorry, but I have no idea what \"%s\" means. Can you rephrase it?", unkString.c_str());
_vm->_dialogs->displayText(tmpStr);
- _vm->_gyro->_weirdWord = true;
+ _vm->_avalot->_weirdWord = true;
} else
- _vm->_gyro->_weirdWord = false;
+ _vm->_avalot->_weirdWord = false;
if (_thats.empty())
_thats = kNothing;
if (_thing != kPardon)
- _vm->_gyro->_it = _thing;
+ _vm->_avalot->_it = _thing;
if (_person != kPardon) {
- if (_person < Gyro::kPeopleArkata)
- _vm->_gyro->_him = _person;
+ if (_person < Avalot::kPeopleArkata)
+ _vm->_avalot->_him = _person;
else
- _vm->_gyro->_her = _person;
+ _vm->_avalot->_her = _person;
}
}
void Parser::examineObject() {
- if (_thing != _vm->_gyro->_thinks)
- _vm->_lucerna->thinkAbout(_thing, Gyro::kThing);
+ if (_thing != _vm->_avalot->_thinks)
+ _vm->_avalot->thinkAbout(_thing, Avalot::kThing);
switch (_thing) {
- case Gyro::kObjectWine :
- switch (_vm->_gyro->_wineState) {// 4 is perfect wine. 0 is not holding the wine.
+ case Avalot::kObjectWine :
+ switch (_vm->_avalot->_wineState) {// 4 is perfect wine. 0 is not holding the wine.
case 1:
_vm->_dialogs->displayScrollChain('t', 1); // Normal examine wine scroll
break;
@@ -919,8 +917,8 @@ void Parser::examineObject() {
break;
}
break;
- case Gyro::kObjectOnion:
- if (_vm->_gyro->_rottenOnion)
+ case Avalot::kObjectOnion:
+ if (_vm->_avalot->_rottenOnion)
_vm->_dialogs->displayScrollChain('q', 21); // Yucky onion
else
_vm->_dialogs->displayScrollChain('t', 18); // Normal onion
@@ -931,11 +929,11 @@ void Parser::examineObject() {
}
bool Parser::isPersonHere() { // Person equivalent of "holding".
- if ((_person == kPardon) || (_person == 0) || (_vm->_gyro->_whereIs[_person - 150] == _vm->_gyro->_room))
+ if ((_person == kPardon) || (_person == 0) || (_vm->_avalot->_whereIs[_person - 150] == _vm->_avalot->_room))
return true;
else {
Common::String tmpStr;
- if (_person < Gyro::kPeopleArkata)
+ if (_person < Avalot::kPeopleArkata)
tmpStr = "He isn't around at the moment.";
else
tmpStr = "She isn't around at the moment.";
@@ -946,19 +944,19 @@ bool Parser::isPersonHere() { // Person equivalent of "holding".
void Parser::exampers() {
if (isPersonHere()) {
- if (_thing != _vm->_gyro->_thinks)
- _vm->_lucerna->thinkAbout(_person, Gyro::kPerson);
+ if (_thing != _vm->_avalot->_thinks)
+ _vm->_avalot->thinkAbout(_person, Avalot::kPerson);
byte newPerson = _person - 149;
- if ((_person == Gyro::kPeopleDogfood) && _vm->_gyro->_wonNim)
+ if ((_person == Avalot::kPeopleDogfood) && _vm->_avalot->_wonNim)
_vm->_dialogs->displayScrollChain('Q', 8); // "I'm Not Playing!"
- else if ((_person == Gyro::kPeopleDuLustie) && _vm->_gyro->_lustieIsAsleep)
+ else if ((_person == Avalot::kPeopleDuLustie) && _vm->_avalot->_lustieIsAsleep)
_vm->_dialogs->displayScrollChain('Q', 65); // He's asleep.
else
_vm->_dialogs->displayScrollChain('p', newPerson);
- if ((_person == Gyro::kPeopleAyles) && !_vm->_gyro->_aylesIsAwake)
+ if ((_person == Avalot::kPeopleAyles) && !_vm->_avalot->_aylesIsAwake)
_vm->_dialogs->displayScrollChain('Q', 13);
_person = newPerson;
@@ -977,7 +975,7 @@ bool Parser::isHolding() {
if (_thing > 100)
_vm->_dialogs->displayText("Be reasonable!");
- else if (!_vm->_gyro->_objects[_thing - 1]) // Verbs that need "_thing" to be in the inventory.
+ else if (!_vm->_avalot->_objects[_thing - 1]) // Verbs that need "_thing" to be in the inventory.
_vm->_dialogs->displayText("You're not holding it, Avvy.");
else
holdingResult = true;
@@ -986,7 +984,7 @@ bool Parser::isHolding() {
}
void Parser::openBox(bool isOpening) {
- if ((_vm->_gyro->_room == kRoomYours) && (_thing == 54)) {
+ if ((_vm->_avalot->_room == kRoomYours) && (_thing == 54)) {
_vm->_background->drawBackgroundSprite(-1, -1, 4);
_vm->_background->updateBackgroundSprites();
@@ -1013,7 +1011,7 @@ void Parser::examine() {
examineObject();
else if ((50 <= _thing) && (_thing <= 100)) { // Also _thing
openBox(true);
- _vm->_dialogs->displayText(*_vm->_gyro->_also[_thing - 50][1]);
+ _vm->_dialogs->displayText(*_vm->_avalot->_also[_thing - 50][1]);
openBox(false);
}
}
@@ -1028,22 +1026,22 @@ void Parser::inventory() {
Common::String tmpStr = Common::String("You're carrying ");
for (int i = 0; i < kObjectNum; i++) {
- if (_vm->_gyro->_objects[i]) {
+ if (_vm->_avalot->_objects[i]) {
itemNum++;
- if (itemNum == _vm->_gyro->_carryNum)
+ if (itemNum == _vm->_avalot->_carryNum)
tmpStr += "and ";
- tmpStr += _vm->_gyro->getItem(i + 1);
+ tmpStr += _vm->_avalot->getItem(i + 1);
- if ((i + 1) == _vm->_gyro->_wearing)
+ if ((i + 1) == _vm->_avalot->_wearing)
tmpStr += ", which you're wearing";
- if (itemNum < _vm->_gyro->_carryNum)
+ if (itemNum < _vm->_avalot->_carryNum)
tmpStr += ", ";
}
}
- if (_vm->_gyro->_wearing == kNothing)
+ if (_vm->_avalot->_wearing == kNothing)
tmpStr += Common::String::format("...%c%c...and you're stark naked!", Dialogs::kControlNewLine, Dialogs::kControlNewLine);
else
tmpStr += '.';
@@ -1053,18 +1051,18 @@ void Parser::inventory() {
void Parser::swallow() { // Eat something.
switch (_thing) {
- case Gyro::kObjectWine:
- switch (_vm->_gyro->_wineState) { // 4 is perfect
+ case Avalot::kObjectWine:
+ switch (_vm->_avalot->_wineState) { // 4 is perfect
case 1:
- if (_vm->_gyro->_teetotal) {
+ if (_vm->_avalot->_teetotal) {
_vm->_dialogs->displayScrollChain('D', 6);
return;
}
_vm->_dialogs->displayScrollChain('U', 1);
_vm->_pingo->wobble();
_vm->_dialogs->displayScrollChain('U', 2);
- _vm->_gyro->_objects[Gyro::kObjectWine - 1] = false;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_objects[Avalot::kObjectWine - 1] = false;
+ _vm->_avalot->refreshObjectList();
drink();
break;
case 2:
@@ -1073,33 +1071,33 @@ void Parser::swallow() { // Eat something.
break; // You can't drink it!
}
break;
- case Gyro::kObjectPotion:
- _vm->_gyro->setBackgroundColor(4);
+ case Avalot::kObjectPotion:
+ _vm->_avalot->setBackgroundColor(4);
_vm->_dialogs->displayScrollChain('U', 3);
- _vm->_lucerna->gameOver();
- _vm->_gyro->setBackgroundColor(0);
+ _vm->_avalot->gameOver();
+ _vm->_avalot->setBackgroundColor(0);
break;
- case Gyro::kObjectInk:
+ case Avalot::kObjectInk:
_vm->_dialogs->displayScrollChain('U', 4);
break;
- case Gyro::kObjectChastity:
+ case Avalot::kObjectChastity:
_vm->_dialogs->displayScrollChain('U', 5);
break;
- case Gyro::kObjectMushroom:
+ case Avalot::kObjectMushroom:
_vm->_dialogs->displayScrollChain('U', 6);
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
break;
- case Gyro::kObjectOnion:
- if (_vm->_gyro->_rottenOnion)
+ case Avalot::kObjectOnion:
+ if (_vm->_avalot->_rottenOnion)
_vm->_dialogs->displayScrollChain('U', 11);
else {
_vm->_dialogs->displayScrollChain('U', 8);
- _vm->_gyro->_objects[Gyro::kObjectOnion - 1] = false;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_objects[Avalot::kObjectOnion - 1] = false;
+ _vm->_avalot->refreshObjectList();
}
break;
default:
- if ((_vm->_gyro->_room == kRoomArgentPub) || (_vm->_gyro->_room == kRoomNottsPub))
+ if ((_vm->_avalot->_room == kRoomArgentPub) || (_vm->_avalot->_room == kRoomNottsPub))
_vm->_dialogs->displayText("Try BUYing things before you drink them!");
else
_vm->_dialogs->displayText("The taste of it makes you retch!");
@@ -1110,7 +1108,7 @@ void Parser::peopleInRoom() {
byte numPeople = 0; // Number of people in the room.
for (int i = 1; i < 29; i++) { // Start at 1 so we don't list Avvy himself!
- if (_vm->_gyro->_whereIs[i] == _vm->_gyro->_room)
+ if (_vm->_avalot->_whereIs[i] == _vm->_avalot->_room)
numPeople++;
}
@@ -1120,14 +1118,14 @@ void Parser::peopleInRoom() {
Common::String tmpStr;
byte actPerson = 0; // Actually listed people.
for (int i = 1; i < 29; i++) {
- if (_vm->_gyro->_whereIs[i] == _vm->_gyro->_room) {
+ if (_vm->_avalot->_whereIs[i] == _vm->_avalot->_room) {
actPerson++;
if (actPerson == 1) // First on the list.
- tmpStr = _vm->_gyro->getName(i + 150);
+ tmpStr = _vm->_avalot->getName(i + 150);
else if (actPerson < numPeople) // The middle...
- tmpStr += ", " + _vm->_gyro->getName(i + 150);
+ tmpStr += ", " + _vm->_avalot->getName(i + 150);
else // The end.
- tmpStr += " and " + _vm->_gyro->getName(i + 150);
+ tmpStr += " and " + _vm->_avalot->getName(i + 150);
}
}
@@ -1140,30 +1138,30 @@ void Parser::peopleInRoom() {
}
void Parser::lookAround() {
- _vm->_dialogs->displayText(*_vm->_gyro->_also[0][1]);
- switch (_vm->_gyro->_room) {
+ _vm->_dialogs->displayText(*_vm->_avalot->_also[0][1]);
+ switch (_vm->_avalot->_room) {
case kRoomSpludwicks:
- if (_vm->_gyro->_avariciusTalk > 0)
+ if (_vm->_avalot->_avariciusTalk > 0)
_vm->_dialogs->displayScrollChain('q', 23);
else
peopleInRoom();
break;
case kRoomRobins:
- if (_vm->_gyro->_tiedUp)
+ if (_vm->_avalot->_tiedUp)
_vm->_dialogs->displayScrollChain('q', 38);
- if (_vm->_gyro->_mushroomGrowing)
+ if (_vm->_avalot->_mushroomGrowing)
_vm->_dialogs->displayScrollChain('q', 55);
break;
case kRoomInsideCardiffCastle:
- if (!_vm->_gyro->_takenPen)
+ if (!_vm->_avalot->_takenPen)
_vm->_dialogs->displayScrollChain('q', 49);
break;
case kRoomLustiesRoom:
- if (_vm->_gyro->_lustieIsAsleep)
+ if (_vm->_avalot->_lustieIsAsleep)
_vm->_dialogs->displayScrollChain('q', 65);
break;
case kRoomCatacombs:
- switch (_vm->_gyro->_catacombY * 256 + _vm->_gyro->_catacombX) {
+ switch (_vm->_avalot->_catacombY * 256 + _vm->_avalot->_catacombX) {
case 258 :
_vm->_dialogs->displayScrollChain('q', 80); // Inside art gallery.
break;
@@ -1182,7 +1180,7 @@ void Parser::lookAround() {
void Parser::openDoor() {
// Special cases.
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomYours:
if (_vm->_animation->inField(1)) {
// Opening the box.
@@ -1200,28 +1198,28 @@ void Parser::openDoor() {
break;
}
- if ((!_vm->_gyro->_userMovesAvvy) && (_vm->_gyro->_room != kRoomLusties))
+ if ((!_vm->_avalot->_userMovesAvvy) && (_vm->_avalot->_room != kRoomLusties))
return; // No doors can open if you can't move Avvy.
for (int i = 0; i < 7; i++) {
if (_vm->_animation->inField(i + 8)) {
- MagicType *portal = &_vm->_gyro->_portals[i];
+ MagicType *portal = &_vm->_avalot->_portals[i];
switch (portal->_operation) {
- case Gyro::kMagicExclaim:
+ case Avalot::kMagicExclaim:
_vm->_animation->_sprites[0].bounce();
_vm->_dialogs->displayScrollChain('x', portal->_data);
break;
- case Gyro::kMagicTransport:
+ case Avalot::kMagicTransport:
_vm->_animation->flipRoom((portal->_data) >> 8, portal->_data & 0x0F);
break;
- case Gyro::kMagicUnfinished:
+ case Avalot::kMagicUnfinished:
_vm->_animation->_sprites[0].bounce();
_vm->_dialogs->displayText("Sorry. This place is not available yet!");
break;
- case Gyro::kMagicSpecial:
+ case Avalot::kMagicSpecial:
_vm->_animation->callSpecial(portal->_data);
break;
- case Gyro::kMagicOpenDoor:
+ case Avalot::kMagicOpenDoor:
_vm->_animation->openDoor(portal->_data >> 8, portal->_data & 0x0F, i + 9);
break;
}
@@ -1230,7 +1228,7 @@ void Parser::openDoor() {
}
}
- if (_vm->_gyro->_room == kRoomMap)
+ if (_vm->_avalot->_room == kRoomMap)
_vm->_dialogs->displayText("Avvy, you can complete the whole game without ever going " \
"to anywhere other than Argent, Birmingham, Cardiff, Nottingham and Norwich.");
else
@@ -1254,17 +1252,17 @@ void Parser::putProc() {
// Thing is the _thing which you're putting in. _thing2 is where you're putting it.
switch (_thing2) {
- case Gyro::kObjectWine:
- if (_thing == Gyro::kObjectOnion) {
- if (_vm->_gyro->_rottenOnion)
+ case Avalot::kObjectWine:
+ if (_thing == Avalot::kObjectOnion) {
+ if (_vm->_avalot->_rottenOnion)
_vm->_dialogs->displayText("That's a bit like shutting the stable door after the horse has bolted!");
else { // Put onion into wine?
- if (_vm->_gyro->_wineState != 3) {
+ if (_vm->_avalot->_wineState != 3) {
Common::String tmpStr = Common::String::format("%cOignon au vin%c is a bit too strong for your tastes!", Dialogs::kControlItalic, Dialogs::kControlRoman);
_vm->_dialogs->displayText(tmpStr);
} else { // Put onion into vinegar! Yes!
- _vm->_gyro->_onionInVinegar = true;
- _vm->_lucerna->incScore(7);
+ _vm->_avalot->_onionInVinegar = true;
+ _vm->_avalot->incScore(7);
_vm->_dialogs->displayScrollChain('u', 9);
}
}
@@ -1273,33 +1271,33 @@ void Parser::putProc() {
break;
case 54:
- if (_vm->_gyro->_room == kRoomYours) { // Put something into the box.
- if (_vm->_gyro->_boxContent != kNothing)
+ if (_vm->_avalot->_room == kRoomYours) { // Put something into the box.
+ if (_vm->_avalot->_boxContent != kNothing)
_vm->_dialogs->displayText("There's something in the box already, Avvy. Try taking that out first.");
else {
switch (_thing) {
- case Gyro::kObjectMoney:
+ case Avalot::kObjectMoney:
_vm->_dialogs->displayText("You'd better keep some ready cash on you!");
break;
- case Gyro::kObjectBell:
+ case Avalot::kObjectBell:
_vm->_dialogs->displayText("That's a silly place to keep a bell.");
break;
- case Gyro::kObjectBodkin:
+ case Avalot::kObjectBodkin:
_vm->_dialogs->displayText("But you might need it!");
break;
- case Gyro::kObjectOnion:
+ case Avalot::kObjectOnion:
_vm->_dialogs->displayText("Just give it to Spludwick, Avvy!");
break;
default: // Put the object into the box...
- if (_vm->_gyro->_wearing == _thing) {
- Common::String tmpStr = Common::String::format("You'd better take %s off first!", _vm->_gyro->getItem(_thing).c_str());
+ if (_vm->_avalot->_wearing == _thing) {
+ Common::String tmpStr = Common::String::format("You'd better take %s off first!", _vm->_avalot->getItem(_thing).c_str());
_vm->_dialogs->displayText(tmpStr);
} else {
openBox(true); // Open box.
- _vm->_gyro->_boxContent = _thing;
- _vm->_gyro->_objects[_thing - 1] = false;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_boxContent = _thing;
+ _vm->_avalot->_objects[_thing - 1] = false;
+ _vm->_avalot->refreshObjectList();
_vm->_dialogs->displayText("OK, it's in the box.");
openBox(false); // Shut box.
@@ -1320,7 +1318,7 @@ void Parser::putProc() {
* @remarks Originally called 'not_in_order'
*/
void Parser::notInOrder() {
- Common::String itemStr = _vm->_gyro->getItem(_vm->_gyro->kSpludwicksOrder[_vm->_gyro->_givenToSpludwick]);
+ Common::String itemStr = _vm->_avalot->getItem(_vm->_avalot->kSpludwicksOrder[_vm->_avalot->_givenToSpludwick]);
Common::String tmpStr = Common::String::format("Sorry, I need the ingredients in the right order for this potion. " \
"What I need next is %s%c2%c", itemStr.c_str(), Dialogs::kControlRegister, Dialogs::kControlSpeechBubble);
_vm->_dialogs->displayText(tmpStr);
@@ -1341,40 +1339,40 @@ void Parser::goToCauldron() {
* @remarks Originally called 'give2spludwick'
*/
bool Parser::giveToSpludwick() {
- if (_vm->_gyro->kSpludwicksOrder[_vm->_gyro->_givenToSpludwick] != _thing) {
+ if (_vm->_avalot->kSpludwicksOrder[_vm->_avalot->_givenToSpludwick] != _thing) {
notInOrder();
return false;
}
switch (_thing) {
- case Gyro::kObjectOnion:
- _vm->_gyro->_objects[Gyro::kObjectOnion - 1] = false;
- if (_vm->_gyro->_rottenOnion)
+ case Avalot::kObjectOnion:
+ _vm->_avalot->_objects[Avalot::kObjectOnion - 1] = false;
+ if (_vm->_avalot->_rottenOnion)
_vm->_dialogs->displayScrollChain('q', 22);
else {
- _vm->_gyro->_givenToSpludwick++;
+ _vm->_avalot->_givenToSpludwick++;
_vm->_dialogs->displayScrollChain('q', 20);
goToCauldron();
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->incScore(3);
}
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->refreshObjectList();
break;
- case Gyro::kObjectInk:
- _vm->_gyro->_objects[Gyro::kObjectInk - 1] = false;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_givenToSpludwick++;
+ case Avalot::kObjectInk:
+ _vm->_avalot->_objects[Avalot::kObjectInk - 1] = false;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_givenToSpludwick++;
_vm->_dialogs->displayScrollChain('q', 24);
goToCauldron();
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->incScore(3);
break;
- case Gyro::kObjectMushroom:
- _vm->_gyro->_objects[Gyro::kObjectMushroom - 1] = false;
+ case Avalot::kObjectMushroom:
+ _vm->_avalot->_objects[Avalot::kObjectMushroom - 1] = false;
_vm->_dialogs->displayScrollChain('q', 25);
- _vm->_lucerna->incScore(5);
- _vm->_gyro->_givenToSpludwick++;
+ _vm->_avalot->incScore(5);
+ _vm->_avalot->_givenToSpludwick++;
goToCauldron();
- _vm->_gyro->_objects[Gyro::kObjectPotion - 1] = true;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_objects[Avalot::kObjectPotion - 1] = true;
+ _vm->_avalot->refreshObjectList();
break;
default:
return true;
@@ -1384,29 +1382,29 @@ bool Parser::giveToSpludwick() {
}
void Parser::drink() {
- _vm->_gyro->_alcoholLevel += 1;
- if (_vm->_gyro->_alcoholLevel == 5) {
- _vm->_gyro->_objects[Gyro::kObjectKey - 1] = true; // Get the key.
- _vm->_gyro->_teetotal = true;
- _vm->_gyro->_avvyIsAwake = false;
- _vm->_gyro->_avvyInBed = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_lucerna->dusk();
- _vm->_gyro->hangAroundForAWhile();
+ _vm->_avalot->_alcoholLevel += 1;
+ if (_vm->_avalot->_alcoholLevel == 5) {
+ _vm->_avalot->_objects[Avalot::kObjectKey - 1] = true; // Get the key.
+ _vm->_avalot->_teetotal = true;
+ _vm->_avalot->_avvyIsAwake = false;
+ _vm->_avalot->_avvyInBed = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->dusk();
+ _vm->_avalot->hangAroundForAWhile();
_vm->_animation->flipRoom(1, 1);
- _vm->_gyro->setBackgroundColor(14);
+ _vm->_avalot->setBackgroundColor(14);
_vm->_animation->_sprites[0]._visible = false;
}
}
void Parser::cardiffClimbing() {
- if (_vm->_gyro->_standingOnDais) { // Clamber up.
+ if (_vm->_avalot->_standingOnDais) { // Clamber up.
_vm->_dialogs->displayText("You climb down, back onto the floor.");
- _vm->_gyro->_standingOnDais = false;
+ _vm->_avalot->_standingOnDais = false;
_vm->_animation->appearPed(0, 2);
} else if (_vm->_animation->inField(0)) { // Clamber down
_vm->_dialogs->displayText("You clamber up onto the dais.");
- _vm->_gyro->_standingOnDais = true;
+ _vm->_avalot->_standingOnDais = true;
_vm->_animation->appearPed(0, 1);
} else
_vm->_dialogs->displayText("Get a bit closer, Avvy.");
@@ -1417,21 +1415,21 @@ void Parser::already() {
}
void Parser::standUp() {
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomYours: // Avvy isn't asleep.
- if (_vm->_gyro->_avvyIsAwake && _vm->_gyro->_avvyInBed) { // But he's in bed.
- if (_vm->_gyro->_teetotal) {
+ if (_vm->_avalot->_avvyIsAwake && _vm->_avalot->_avvyInBed) { // But he's in bed.
+ if (_vm->_avalot->_teetotal) {
_vm->_dialogs->displayScrollChain('d', 12);
- _vm->_gyro->setBackgroundColor(0);
+ _vm->_avalot->setBackgroundColor(0);
_vm->_dialogs->displayScrollChain('d', 14);
}
_vm->_animation->_sprites[0]._visible = true;
- _vm->_gyro->_userMovesAvvy = true;
+ _vm->_avalot->_userMovesAvvy = true;
_vm->_animation->appearPed(0, 1);
_vm->_animation->_direction = Animation::kDirLeft;
_vm->_background->drawBackgroundSprite(-1, -1, 3); // Picture of empty pillow.
- _vm->_lucerna->incScore(1);
- _vm->_gyro->_avvyInBed = false;
+ _vm->_avalot->incScore(1);
+ _vm->_avalot->_avvyInBed = false;
_vm->_timer->loseTimer(Timer::kReasonArkataShouts);
} else
already();
@@ -1442,12 +1440,12 @@ void Parser::standUp() {
break;
case kRoomNottsPub:
- if (_vm->_gyro->_sittingInPub) {
+ if (_vm->_avalot->_sittingInPub) {
_vm->_background->drawBackgroundSprite(-1, -1, 3); // Not sitting down.
_vm->_animation->_sprites[0]._visible = true; // But standing up.
_vm->_animation->appearPed(0, 3); // And walking away.
- _vm->_gyro->_sittingInPub = false; // Really not sitting down.
- _vm->_gyro->_userMovesAvvy = true; // And ambulant.
+ _vm->_avalot->_sittingInPub = false; // Really not sitting down.
+ _vm->_avalot->_userMovesAvvy = true; // And ambulant.
} else
already();
break;
@@ -1457,18 +1455,18 @@ void Parser::standUp() {
}
void Parser::getProc(char thing) {
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomYours:
if (_vm->_animation->inField(1)) {
- if (_vm->_gyro->_boxContent == thing) {
+ if (_vm->_avalot->_boxContent == thing) {
_vm->_background->drawBackgroundSprite(-1, -1, 4);
_vm->_dialogs->displayText("OK, I've got it.");
- _vm->_gyro->_objects[thing - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_boxContent = kNothing;
+ _vm->_avalot->_objects[thing - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_boxContent = kNothing;
_vm->_background->drawBackgroundSprite(-1, -1, 5);
} else {
- Common::String tmpStr = Common::String::format("I can't see %s in the box.", _vm->_gyro->getItem(thing).c_str());
+ Common::String tmpStr = Common::String::format("I can't see %s in the box.", _vm->_avalot->getItem(thing).c_str());
_vm->_dialogs->displayText(tmpStr);
}
} else
@@ -1476,25 +1474,25 @@ void Parser::getProc(char thing) {
break;
case kRoomInsideCardiffCastle:
switch (thing) {
- case Gyro::kObjectPen:
+ case Avalot::kObjectPen:
if (_vm->_animation->inField(1)) { // Standing on the dais.
- if (_vm->_gyro->_takenPen)
+ if (_vm->_avalot->_takenPen)
_vm->_dialogs->displayText("It's not there, Avvy.");
else {
// OK: we're taking the pen, and it's there.
_vm->_background->drawBackgroundSprite(-1, -1, 3); // No pen there now.
_vm->_animation->callSpecial(3); // Zap!
- _vm->_gyro->_takenPen = true;
- _vm->_gyro->_objects[Gyro::kObjectPen - 1] = true;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_takenPen = true;
+ _vm->_avalot->_objects[Avalot::kObjectPen - 1] = true;
+ _vm->_avalot->refreshObjectList();
_vm->_dialogs->displayText("Taken.");
}
- } else if (_vm->_gyro->_standingOnDais)
+ } else if (_vm->_avalot->_standingOnDais)
_vm->_dialogs->displayScrollChain('q', 53);
else
_vm->_dialogs->displayScrollChain('q', 51);
break;
- case Gyro::kObjectBolt:
+ case Avalot::kObjectBolt:
_vm->_dialogs->displayScrollChain('q', 52);
break;
default:
@@ -1502,14 +1500,14 @@ void Parser::getProc(char thing) {
}
break;
case kRoomRobins:
- if ((thing == Gyro::kObjectMushroom) & (_vm->_animation->inField(0)) & (_vm->_gyro->_mushroomGrowing)) {
+ if ((thing == Avalot::kObjectMushroom) & (_vm->_animation->inField(0)) & (_vm->_avalot->_mushroomGrowing)) {
_vm->_background->drawBackgroundSprite(-1, -1, 2);
_vm->_dialogs->displayText("Got it!");
- _vm->_gyro->_mushroomGrowing = false;
- _vm->_gyro->_takenMushroom = true;
- _vm->_gyro->_objects[Gyro::kObjectMushroom - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->_mushroomGrowing = false;
+ _vm->_avalot->_takenMushroom = true;
+ _vm->_avalot->_objects[Avalot::kObjectMushroom - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->incScore(3);
} else
_vm->_dialogs->displayScrollChain('q', 57);
break;
@@ -1523,13 +1521,13 @@ void Parser::getProc(char thing) {
* @remarks Originally called 'give_Geida_the_lute'
*/
void Parser::giveGeidaTheLute() {
- if (_vm->_gyro->_room != kRoomLustiesRoom) {
+ if (_vm->_avalot->_room != kRoomLustiesRoom) {
Common::String tmpStr = Common::String::format("Not yet. Try later!%c2%c", Dialogs::kControlRegister, Dialogs::kControlSpeechBubble);
_vm->_dialogs->displayText(tmpStr);
return;
}
- _vm->_gyro->_objects[Gyro::kObjectLute - 1] = false;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_objects[Avalot::kObjectLute - 1] = false;
+ _vm->_avalot->refreshObjectList();
_vm->_dialogs->displayScrollChain('q', 64); // She plays it.
_vm->_timer->addTimer(1, Timer::kProcGiveLuteToGeida, Timer::kReasonGeidaSings);
@@ -1554,13 +1552,13 @@ void Parser::winSequence() {
Common::String Parser::personSpeaks() {
if ((_person == kPardon) || (_person == 0)) {
- if ((_vm->_gyro->_him == kPardon) || (_vm->_gyro->_whereIs[_vm->_gyro->_him - 150] != _vm->_gyro->_room))
- _person = _vm->_gyro->_her;
+ if ((_vm->_avalot->_him == kPardon) || (_vm->_avalot->_whereIs[_vm->_avalot->_him - 150] != _vm->_avalot->_room))
+ _person = _vm->_avalot->_her;
else
- _person = _vm->_gyro->_him;
+ _person = _vm->_avalot->_him;
}
- if (_vm->_gyro->_whereIs[_person - 150] != _vm->_gyro->_room) {
+ if (_vm->_avalot->_whereIs[_person - 150] != _vm->_avalot->_room) {
return Common::String::format("%c1", Dialogs::kControlRegister); // Avvy himself!
}
@@ -1578,7 +1576,7 @@ Common::String Parser::personSpeaks() {
return tmpStr;
for (int i = 0; i < 16; i++) {
- if ((_vm->_gyro->kQuasipeds[i]._who == _person) && (_vm->_gyro->kQuasipeds[i]._room == _vm->_gyro->_room))
+ if ((_vm->_avalot->kQuasipeds[i]._who == _person) && (_vm->_avalot->kQuasipeds[i]._room == _vm->_avalot->_room))
tmpStr += Common::String::format("%c%c", Dialogs::kControlRegister, 'A' + i);
}
@@ -1589,7 +1587,7 @@ void Parser::heyThanks() {
Common::String tmpStr = personSpeaks();
tmpStr += Common::String::format("Hey, thanks!%c(But now, you've lost it!)", Dialogs::kControlSpeechBubble);
_vm->_dialogs->displayText(tmpStr);
- _vm->_gyro->_objects[_thing - 1] = false;
+ _vm->_avalot->_objects[_thing - 1] = false;
}
/**
@@ -1605,7 +1603,7 @@ void Parser::doThat() {
return;
}
- if (_vm->_gyro->_weirdWord)
+ if (_vm->_avalot->_weirdWord)
return;
if (_thing < 200)
@@ -1615,11 +1613,11 @@ void Parser::doThat() {
if ((_verb != kVerbCodeLoad) && (_verb != kVerbCodeSave) && (_verb != kVerbCodeQuit) && (_verb != kVerbCodeInfo) && (_verb != kVerbCodeHelp)
&& (_verb != kVerbCodeLarrypass) && (_verb != kVerbCodePhaon) && (_verb != kVerbCodeBoss) && (_verb != kVerbCodeCheat) && (_verb != kVerbCodeRestart)
&& (_verb != kVerbCodeDir) && (_verb != kVerbCodeScore) && (_verb != kVerbCodeHiscores) && (_verb != kVerbCodeSmartAlec)) {
- if (!_vm->_gyro->_alive) {
+ if (!_vm->_avalot->_alive) {
_vm->_dialogs->displayText("You're dead, so don't talk. What are you, a ghost or something? Try restarting, or restoring a saved game!");
return;
}
- if (!_vm->_gyro->_avvyIsAwake && (_verb != kVerbCodeDie) && (_verb != kVerbCodeExpletive) && (_verb != kVerbCodeWake)) {
+ if (!_vm->_avalot->_avvyIsAwake && (_verb != kVerbCodeDie) && (_verb != kVerbCodeExpletive) && (_verb != kVerbCodeWake)) {
_vm->_dialogs->displayText("Talking in your sleep? Try waking up!");
return;
}
@@ -1639,7 +1637,7 @@ void Parser::doThat() {
break;
case kVerbCodeGet:
if (_thing != kPardon) { // Legitimate try to pick something up.
- if (_vm->_gyro->_carryNum >= kCarryLimit)
+ if (_vm->_avalot->_carryNum >= kCarryLimit)
_vm->_dialogs->displayText("You can't carry any more!");
else
getProc(_thing);
@@ -1659,21 +1657,21 @@ void Parser::doThat() {
break;
case kVerbCodeTalk:
if (_person == kPardon) {
- if (_vm->_gyro->_subjectNum == 99) { // They typed "say password".
+ if (_vm->_avalot->_subjectNum == 99) { // They typed "say password".
Common::String tmpStr = Common::String::format("Yes, but what %cis%c the password?", Dialogs::kControlItalic, Dialogs::kControlRoman);
_vm->_dialogs->displayText(tmpStr);
- } else if (((1 <= _vm->_gyro->_subjectNum) && (_vm->_gyro->_subjectNum <= 49)) || (_vm->_gyro->_subjectNum == 253) || (_vm->_gyro->_subjectNum == 249)) {
+ } else if (((1 <= _vm->_avalot->_subjectNum) && (_vm->_avalot->_subjectNum <= 49)) || (_vm->_avalot->_subjectNum == 253) || (_vm->_avalot->_subjectNum == 249)) {
_thats.deleteChar(0);
for (int i = 0; i < 10; i++)
_realWords[i] = _realWords[i + 1];
- _verb = _vm->_gyro->_subjectNum;
+ _verb = _vm->_avalot->_subjectNum;
doThat();
return;
} else {
- _person = _vm->_gyro->_subjectNum;
- _vm->_gyro->_subjectNum = 0;
+ _person = _vm->_avalot->_subjectNum;
+ _vm->_avalot->_subjectNum = 0;
if ((_person == 0) || (_person == kPardon))
_vm->_dialogs->displayText("Talk to whom?");
else if (isPersonHere())
@@ -1688,80 +1686,80 @@ void Parser::doThat() {
_vm->_dialogs->displayText("Give to whom?");
else if (isPersonHere()) {
switch (_thing) {
- case Gyro::kObjectMoney :
+ case Avalot::kObjectMoney :
_vm->_dialogs->displayText("You can't bring yourself to give away your moneybag.");
break;
- case Gyro::kObjectBodkin:
- case Gyro::kObjectBell:
- case Gyro::kObjectClothes:
- case Gyro::kObjectHabit :
+ case Avalot::kObjectBodkin:
+ case Avalot::kObjectBell:
+ case Avalot::kObjectClothes:
+ case Avalot::kObjectHabit :
_vm->_dialogs->displayText("Don't give it away, it might be useful!");
break;
default:
switch (_person) {
- case Gyro::kPeopleCrapulus:
- if (_thing == Gyro::kObjectWine) {
+ case Avalot::kPeopleCrapulus:
+ if (_thing == Avalot::kObjectWine) {
_vm->_dialogs->displayText("Crapulus grabs the wine and gulps it down.");
- _vm->_gyro->_objects[Gyro::kObjectWine - 1] = false;
+ _vm->_avalot->_objects[Avalot::kObjectWine - 1] = false;
} else
heyThanks();
break;
- case Gyro::kPeopleCwytalot:
- if ((_thing == Gyro::kObjectCrossbow) || (_thing == Gyro::kObjectBolt))
+ case Avalot::kPeopleCwytalot:
+ if ((_thing == Avalot::kObjectCrossbow) || (_thing == Avalot::kObjectBolt))
_vm->_dialogs->displayText("You might be able to influence Cwytalot more if you used it!");
else
heyThanks();
break;
- case Gyro::kPeopleSpludwick:
+ case Avalot::kPeopleSpludwick:
if (giveToSpludwick())
heyThanks();
break;
- case Gyro::kPeopleIbythneth:
- if (_thing == Gyro::kObjectBadge) {
+ case Avalot::kPeopleIbythneth:
+ if (_thing == Avalot::kObjectBadge) {
_vm->_dialogs->displayScrollChain('q', 32); // Thanks! Wow!
- _vm->_lucerna->incScore(3);
- _vm->_gyro->_objects[Gyro::kObjectBadge - 1] = false;
- _vm->_gyro->_objects[Gyro::kObjectHabit - 1] = true;
- _vm->_gyro->_givenBadgeToIby = true;
+ _vm->_avalot->incScore(3);
+ _vm->_avalot->_objects[Avalot::kObjectBadge - 1] = false;
+ _vm->_avalot->_objects[Avalot::kObjectHabit - 1] = true;
+ _vm->_avalot->_givenBadgeToIby = true;
_vm->_background->drawBackgroundSprite(-1, -1, 7);
_vm->_background->drawBackgroundSprite(-1, -1, 8);
} else
heyThanks();
break;
- case Gyro::kPeopleAyles:
- if (_vm->_gyro->_aylesIsAwake) {
- if (_thing == Gyro::kObjectPen) {
- _vm->_gyro->_objects[Gyro::kObjectPen - 1] = false;
+ case Avalot::kPeopleAyles:
+ if (_vm->_avalot->_aylesIsAwake) {
+ if (_thing == Avalot::kObjectPen) {
+ _vm->_avalot->_objects[Avalot::kObjectPen - 1] = false;
_vm->_dialogs->displayScrollChain('q', 54);
- _vm->_gyro->_objects[Gyro::kObjectInk - 1] = true;
- _vm->_gyro->_givenPenToAyles = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_lucerna->incScore(2);
+ _vm->_avalot->_objects[Avalot::kObjectInk - 1] = true;
+ _vm->_avalot->_givenPenToAyles = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->incScore(2);
} else
heyThanks();
} else
_vm->_dialogs->displayText("But he's asleep!");
break;
- case Gyro::kPeopleGeida:
+ case Avalot::kPeopleGeida:
switch (_thing) {
- case Gyro::kObjectPotion:
- _vm->_gyro->_objects[Gyro::kObjectPotion - 1] = false;
+ case Avalot::kObjectPotion:
+ _vm->_avalot->_objects[Avalot::kObjectPotion - 1] = false;
_vm->_dialogs->displayScrollChain('u', 16); // She drinks it.
- _vm->_lucerna->incScore(2);
- _vm->_gyro->_givenPotionToGeida = true;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->incScore(2);
+ _vm->_avalot->_givenPotionToGeida = true;
+ _vm->_avalot->refreshObjectList();
break;
- case Gyro::kObjectLute:
+ case Avalot::kObjectLute:
giveGeidaTheLute();
break;
default:
heyThanks();
}
break;
- case Gyro::kPeopleArkata:
+ case Avalot::kPeopleArkata:
switch (_thing) {
- case Gyro::kObjectPotion:
- if (_vm->_gyro->_givenPotionToGeida)
+ case Avalot::kObjectPotion:
+ if (_vm->_avalot->_givenPotionToGeida)
winSequence();
else
_vm->_dialogs->displayScrollChain('q', 77); // That Geida woman!
@@ -1775,7 +1773,7 @@ void Parser::doThat() {
}
}
}
- _vm->_lucerna->refreshObjectList(); // Just in case...
+ _vm->_avalot->refreshObjectList(); // Just in case...
}
break;
@@ -1806,7 +1804,7 @@ void Parser::doThat() {
else {
Common::String tmpStr = Common::String::format("%cC%cDo you really want to quit?", Dialogs::kControlRegister, Dialogs::kControlIcon);
if (_vm->_dialogs->displayQuestion(tmpStr))
- _vm->_gyro->_letMeOut = true;
+ _vm->_avalot->_letMeOut = true;
}
break;
case kVerbCodeGo:
@@ -1821,45 +1819,45 @@ void Parser::doThat() {
toDisplay = toDisplay + "LORD AVALOT D'ARGENT" + Dialogs::kControlCenter + Dialogs::kControlNewLine
+ "The medi\x91val descendant of" + Dialogs::kControlNewLine
+ "Denarius Avaricius Sextus" + Dialogs::kControlNewLine + Dialogs::kControlNewLine
- + "version " + _vm->_gyro->kVersionNum + Dialogs::kControlNewLine + Dialogs::kControlNewLine + "Copyright \xEF "
- + _vm->_gyro->kCopyright + ", Mark, Mike and Thomas Thurman." + Dialogs::kControlRegister + 'Y' + Dialogs::kControlIcon;
+ + "version " + _vm->_avalot->kVersionNum + Dialogs::kControlNewLine + Dialogs::kControlNewLine + "Copyright \xEF "
+ + _vm->_avalot->kCopyright + ", Mark, Mike and Thomas Thurman." + Dialogs::kControlRegister + 'Y' + Dialogs::kControlIcon;
_vm->_dialogs->displayText(toDisplay);
_vm->_dialogs->_aboutBox = false;
}
break;
case kVerbCodeUndress:
- if (_vm->_gyro->_wearing == kNothing)
+ if (_vm->_avalot->_wearing == kNothing)
_vm->_dialogs->displayText("You're already stark naked!");
- else if (_vm->_gyro->_avvysInTheCupboard) {
- Common::String tmpStr = Common::String::format("You take off %s.", _vm->_gyro->getItem(_vm->_gyro->_wearing).c_str());
+ else if (_vm->_avalot->_avvysInTheCupboard) {
+ Common::String tmpStr = Common::String::format("You take off %s.", _vm->_avalot->getItem(_vm->_avalot->_wearing).c_str());
_vm->_dialogs->displayText(tmpStr);
- _vm->_gyro->_wearing = kNothing;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_wearing = kNothing;
+ _vm->_avalot->refreshObjectList();
} else
_vm->_dialogs->displayText("Hadn't you better find somewhere more private, Avvy?");
break;
case kVerbCodeWear:
if (isHolding()) { // Wear something.
switch (_thing) {
- case Gyro::kObjectChastity:
+ case Avalot::kObjectChastity:
// \? are used to avoid that ??! is parsed as a trigraph
_vm->_dialogs->displayText("Hey, what kind of a weirdo are you\?\?!");
break;
- case Gyro::kObjectClothes:
- case Gyro::kObjectHabit: { // Change this!
- if (_vm->_gyro->_wearing != kNothing) {
- if (_vm->_gyro->_wearing == _thing)
+ case Avalot::kObjectClothes:
+ case Avalot::kObjectHabit: { // Change this!
+ if (_vm->_avalot->_wearing != kNothing) {
+ if (_vm->_avalot->_wearing == _thing)
_vm->_dialogs->displayText("You're already wearing that.");
else
_vm->_dialogs->displayText("You'll be rather warm wearing two sets of clothes!");
return;
} else
- _vm->_gyro->_wearing = _thing;
+ _vm->_avalot->_wearing = _thing;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->refreshObjectList();
byte i;
- if (_thing == Gyro::kObjectHabit)
+ if (_thing == Avalot::kObjectHabit)
i = 3;
else
i = 0;
@@ -1881,36 +1879,36 @@ void Parser::doThat() {
break;
case kVerbCodePlay:
if (_thing == kPardon) {
- switch (_vm->_gyro->_room) { // They just typed "play"...
+ switch (_vm->_avalot->_room) { // They just typed "play"...
case kRoomArgentPub: // ...in the pub, => play Nim.
warning("STUB: Parser::doThat() - case kVerbCodeplay - play_nim()");
// play_nim();
// The following parts are copied from play_nim().
// The player automatically wins the game everytime he wins, until I implement the mini-game.
- if (_vm->_gyro->_wonNim) { // Already won the game.
+ if (_vm->_avalot->_wonNim) { // Already won the game.
_vm->_dialogs->displayScrollChain('Q', 6);
return;
}
- if (!_vm->_gyro->_askedDogfoodAboutNim) {
+ if (!_vm->_avalot->_askedDogfoodAboutNim) {
_vm->_dialogs->displayScrollChain('q', 84);
return;
}
_vm->_dialogs->displayScrollChain('Q', 3);
- _vm->_gyro->_playedNim++;
+ _vm->_avalot->_playedNim++;
// You won - strange!
_vm->_dialogs->displayScrollChain('Q', 7); // You won! Give us a lute!
- _vm->_gyro->_objects[Gyro::kObjectLute - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_wonNim = true;
+ _vm->_avalot->_objects[Avalot::kObjectLute - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_wonNim = true;
_vm->_background->drawBackgroundSprite(-1, -1, 0); // Show the settle with no lute on it.
- _vm->_lucerna->incScore(7); // 7 points for winning!
+ _vm->_avalot->incScore(7); // 7 points for winning!
- if (_vm->_gyro->_playedNim == 1)
- _vm->_lucerna->incScore(3); // 3 points for playing your 1st game.
+ if (_vm->_avalot->_playedNim == 1)
+ _vm->_avalot->incScore(3); // 3 points for playing your 1st game.
// A warning to the player that there should have been a mini-game. TODO: Remove it later!!!
_vm->_dialogs->displayText(Common::String("P.S.: There should have been the mini-game called \"Nim\", but I haven't implemented it yet: you win and get the lute automatically.")
@@ -1922,23 +1920,23 @@ void Parser::doThat() {
}
} else if (isHolding()) {
switch (_thing) {
- case Gyro::kObjectLute :
+ case Avalot::kObjectLute :
_vm->_dialogs->displayScrollChain('U', 7);
- if (_vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] == _vm->_gyro->_room)
+ if (_vm->_avalot->_whereIs[Avalot::kPeopleCwytalot - 150] == _vm->_avalot->_room)
_vm->_dialogs->displayScrollChain('U', 10);
- if (_vm->_gyro->_whereIs[Gyro::kPeopleDuLustie - 150] == _vm->_gyro->_room)
+ if (_vm->_avalot->_whereIs[Avalot::kPeopleDuLustie - 150] == _vm->_avalot->_room)
_vm->_dialogs->displayScrollChain('U', 15);
break;
case 52:
- if (_vm->_gyro->_room == kRoomMusicRoom)
+ if (_vm->_avalot->_room == kRoomMusicRoom)
playHarp();
else
_vm->_dialogs->displayText(kWhat);
break;
case 55:
- if (_vm->_gyro->_room == kRoomArgentPub)
+ if (_vm->_avalot->_room == kRoomArgentPub)
// play_nim();
warning("STUB: Parser::doThat() - case kVerbCodeplay - play_nim()");
else
@@ -1951,9 +1949,9 @@ void Parser::doThat() {
break;
case kVerbCodeRing:
if (isHolding()) {
- if (_thing == Gyro::kObjectBell) {
+ if (_thing == Avalot::kObjectBell) {
_vm->_dialogs->displayText("Ding, dong, ding, dong, ding, dong, ding, dong...");
- if ((_vm->_gyro->_bellsAreRinging) & (_vm->_gyro->setFlag('B')))
+ if ((_vm->_avalot->_bellsAreRinging) & (_vm->_avalot->setFlag('B')))
// \? are used to avoid that ??! is parsed as a trigraph
_vm->_dialogs->displayText("(Are you trying to join in, Avvy\?\?!)");
} else
@@ -1975,7 +1973,7 @@ void Parser::doThat() {
warning("STUB: Parser::doThat() - case kVerbCodeboss");
break;
case kVerbCodePee:
- if (_vm->_gyro->setFlag('P')) {
+ if (_vm->_avalot->setFlag('P')) {
_vm->_dialogs->displayText("Hmm, I don't think anyone will notice...");
_vm->_timer->addTimer(4, Timer::kProcUrinate, Timer::kReasonGoToToilet);
} else {
@@ -1986,16 +1984,16 @@ void Parser::doThat() {
case kVerbCodeCheat: {
Common::String tmpStr = Common::String::format("%cCheat mode now enabled.", Dialogs::kControlItalic);
_vm->_dialogs->displayText(tmpStr);
- _vm->_gyro->_cheat = true;
+ _vm->_avalot->_cheat = true;
}
break;
case kVerbCodeMagic:
- if (_vm->_gyro->_avariciusTalk > 0)
+ if (_vm->_avalot->_avariciusTalk > 0)
_vm->_dialogs->displayScrollChain('q', 19);
else {
- if ((_vm->_gyro->_room == kRoomSpludwicks) & (_vm->_animation->inField(1))) { // Avaricius appears!
+ if ((_vm->_avalot->_room == kRoomSpludwicks) & (_vm->_animation->inField(1))) { // Avaricius appears!
_vm->_dialogs->displayScrollChain('q', 17);
- if (_vm->_gyro->_whereIs[1] == kRoomSpludwicks)
+ if (_vm->_avalot->_whereIs[1] == kRoomSpludwicks)
_vm->_dialogs->displayScrollChain('q', 18);
else {
Avalanche::AnimationType *spr = &_vm->_animation->_sprites[1];
@@ -2004,7 +2002,7 @@ void Parser::doThat() {
spr->walkTo(4);
spr->_callEachStepFl = true;
spr->_eachStepProc = Animation::kProcBackAndForth;
- _vm->_gyro->_avariciusTalk = 14;
+ _vm->_avalot->_avariciusTalk = 14;
_vm->_timer->addTimer(177, Timer::kProcAvariciusTalks, Timer::kReasonAvariciusTalks);
}
} else
@@ -2015,7 +2013,7 @@ void Parser::doThat() {
_vm->_dialogs->displayText("Listen, smart alec, that was just rhetoric.");
break;
case kVerbCodeExpletive:
- switch (_vm->_gyro->_sworeNum) {
+ switch (_vm->_avalot->_sworeNum) {
case 0: {
Common::String tmpStr = Common::String::format("Avvy! Do you mind? There might be kids playing!%c%c" \
"(I shouldn't say it again, if I were you!)", Dialogs::kControlNewLine, Dialogs::kControlNewLine);
@@ -2033,21 +2031,21 @@ void Parser::doThat() {
// CHECKME: Weird character in string
Common::String tmpStr = Common::String::format("A crack of lightning shoots from the sky, and fries you.%c%c(`Such is the anger of the gods, Avvy!\")", Dialogs::kControlNewLine, Dialogs::kControlNewLine);
_vm->_dialogs->displayText(tmpStr);
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
}
}
- _vm->_gyro->_sworeNum++;
+ _vm->_avalot->_sworeNum++;
break;
case kVerbCodeListen:
- if ((_vm->_gyro->_bellsAreRinging) & (_vm->_gyro->setFlag('B')))
+ if ((_vm->_avalot->_bellsAreRinging) & (_vm->_avalot->setFlag('B')))
_vm->_dialogs->displayText("All other noise is drowned out by the ringing of the bells.");
- else if (_vm->_gyro->_listen.empty())
+ else if (_vm->_avalot->_listen.empty())
_vm->_dialogs->displayText("You can't hear anything much at the moment, Avvy.");
else
- _vm->_dialogs->displayText(_vm->_gyro->_listen);
+ _vm->_dialogs->displayText(_vm->_avalot->_listen);
break;
case kVerbCodeBuy: // What are they trying to buy?
- switch (_vm->_gyro->_room) {
+ switch (_vm->_avalot->_room) {
case kRoomArgentPub:
if (_vm->_animation->inField(5)) { // We're in a pub, and near the bar.
switch (_thing) {
@@ -2055,40 +2053,40 @@ void Parser::doThat() {
case 53:
case 54:
case 58: // Beer, whisky, cider or mead.
- if (_vm->_gyro->_malagauche == 177) { // Already getting us one.
+ if (_vm->_avalot->_malagauche == 177) { // Already getting us one.
_vm->_dialogs->displayScrollChain('D', 15);
return;
}
- if (_vm->_gyro->_teetotal) {
+ if (_vm->_avalot->_teetotal) {
_vm->_dialogs->displayScrollChain('D', 6);
return;
}
- if (_vm->_gyro->_alcoholLevel == 0)
- _vm->_lucerna->incScore(3);
+ if (_vm->_avalot->_alcoholLevel == 0)
+ _vm->_avalot->incScore(3);
_vm->_background->drawBackgroundSprite(-1, -1, 11);
_vm->_dialogs->displayText(booze[_thing - 51] + ", please." + Dialogs::kControlRegister + '1' + Dialogs::kControlSpeechBubble);
- _vm->_gyro->_drinking = _thing;
+ _vm->_avalot->_drinking = _thing;
_vm->_background->drawBackgroundSprite(-1, -1, 9);
- _vm->_gyro->_malagauche = 177;
+ _vm->_avalot->_malagauche = 177;
_vm->_timer->addTimer(27, Timer::kProcBuyDrinks, Timer::kReasonDrinks);
break;
case 52:
examine();
break; // We have a right one here - buy Pepsi??!
- case Gyro::kObjectWine:
- if (_vm->_gyro->_objects[Gyro::kObjectWine - 1]) // We've already got the wine!
+ case Avalot::kObjectWine:
+ if (_vm->_avalot->_objects[Avalot::kObjectWine - 1]) // We've already got the wine!
_vm->_dialogs->displayScrollChain('D', 2); // 1 bottle's shufishent!
else {
- if (_vm->_gyro->_malagauche == 177) { // Already getting us one.
+ if (_vm->_avalot->_malagauche == 177) { // Already getting us one.
_vm->_dialogs->displayScrollChain('D', 15);
return;
}
- if (_vm->_gyro->_carryNum >= kCarryLimit) {
+ if (_vm->_avalot->_carryNum >= kCarryLimit) {
_vm->_dialogs->displayText("Your hands are full.");
return;
}
@@ -2096,10 +2094,10 @@ void Parser::doThat() {
_vm->_background->drawBackgroundSprite(-1, -1, 11);
Common::String tmpStr = Common::String::format("Wine, please.%c1%c", Dialogs::kControlRegister, Dialogs::kControlSpeechBubble);
_vm->_dialogs->displayText(tmpStr);
- if (_vm->_gyro->_alcoholLevel == 0)
- _vm->_lucerna->incScore(3);
+ if (_vm->_avalot->_alcoholLevel == 0)
+ _vm->_avalot->incScore(3);
_vm->_background->drawBackgroundSprite(-1, -1, 9);
- _vm->_gyro->_malagauche = 177;
+ _vm->_avalot->_malagauche = 177;
_vm->_timer->addTimer(27, Timer::kProcBuyWine, Timer::kReasonDrinks);
}
@@ -2111,24 +2109,24 @@ void Parser::doThat() {
case kRoomOutsideDucks:
if (_vm->_animation->inField(5)) {
- if (_thing == Gyro::kObjectOnion) {
- if (_vm->_gyro->_objects[Gyro::kObjectOnion - 1])
+ if (_thing == Avalot::kObjectOnion) {
+ if (_vm->_avalot->_objects[Avalot::kObjectOnion - 1])
_vm->_dialogs->displayScrollChain('D', 10); // Not planning to juggle with the things!
- else if (_vm->_gyro->_carryNum >= kCarryLimit)
+ else if (_vm->_avalot->_carryNum >= kCarryLimit)
_vm->_dialogs->displayText("Before you ask, you remember that your hands are full.");
else {
- if (_vm->_gyro->_boughtOnion)
+ if (_vm->_avalot->_boughtOnion)
_vm->_dialogs->displayScrollChain('D', 11);
else {
_vm->_dialogs->displayScrollChain('D', 9);
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->incScore(3);
}
- _vm->_gyro->decreaseMoney(3); // It costs thruppence.
- _vm->_gyro->_objects[Gyro::kObjectOnion - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_boughtOnion = true;
- _vm->_gyro->_rottenOnion = false; // It's OK when it leaves the stall!
- _vm->_gyro->_onionInVinegar = false;
+ _vm->_avalot->decreaseMoney(3); // It costs thruppence.
+ _vm->_avalot->_objects[Avalot::kObjectOnion - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_boughtOnion = true;
+ _vm->_avalot->_rottenOnion = false; // It's OK when it leaves the stall!
+ _vm->_avalot->_onionInVinegar = false;
}
} else
_vm->_dialogs->displayScrollChain('D', 0);
@@ -2144,33 +2142,33 @@ void Parser::doThat() {
}
break;
case kVerbCodeAttack:
- if ((_vm->_gyro->_room == kRoomBrummieRoad) &&
- ((_person == Gyro::kPeopleCwytalot) || (_thing == Gyro::kObjectCrossbow) || (_thing == Gyro::kObjectBolt)) &&
- (_vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] == _vm->_gyro->_room)) {
- switch (_vm->_gyro->_objects[Gyro::kObjectBolt - 1] + _vm->_gyro->_objects[Gyro::kObjectCrossbow - 1] * 2) {
+ if ((_vm->_avalot->_room == kRoomBrummieRoad) &&
+ ((_person == Avalot::kPeopleCwytalot) || (_thing == Avalot::kObjectCrossbow) || (_thing == Avalot::kObjectBolt)) &&
+ (_vm->_avalot->_whereIs[Avalot::kPeopleCwytalot - 150] == _vm->_avalot->_room)) {
+ switch (_vm->_avalot->_objects[Avalot::kObjectBolt - 1] + _vm->_avalot->_objects[Avalot::kObjectCrossbow - 1] * 2) {
// 0 = neither, 1 = only bolt, 2 = only crossbow, 3 = both.
case 0:
_vm->_dialogs->displayScrollChain('Q', 10);
_vm->_dialogs->displayText("(At the very least, don't use your bare hands!)");
break;
case 1:
- _vm->_dialogs->displayText("Attack _vm->_gyro->him with only a crossbow bolt? Are you planning on playing darts?!");
+ _vm->_dialogs->displayText("Attack _vm->_avalot->him with only a crossbow bolt? Are you planning on playing darts?!");
break;
case 2:
_vm->_dialogs->displayText("Come on, Avvy! You're not going to get very far with only a crossbow!");
break;
case 3:
_vm->_dialogs->displayScrollChain('Q', 11);
- _vm->_gyro->_cwytalotGone = true;
- _vm->_gyro->_objects[Gyro::kObjectBolt - 1] = false;
- _vm->_gyro->_objects[Gyro::kObjectCrossbow - 1] = false;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_magics[11]._operation = Gyro::kMagicNothing;
- _vm->_lucerna->incScore(7);
+ _vm->_avalot->_cwytalotGone = true;
+ _vm->_avalot->_objects[Avalot::kObjectBolt - 1] = false;
+ _vm->_avalot->_objects[Avalot::kObjectCrossbow - 1] = false;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_magics[11]._operation = Avalot::kMagicNothing;
+ _vm->_avalot->incScore(7);
_vm->_animation->_sprites[1].walkTo(1);
_vm->_animation->_sprites[1]._vanishIfStill = true;
_vm->_animation->_sprites[1]._callEachStepFl = false;
- _vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] = kRoomDummy;
+ _vm->_avalot->_whereIs[Avalot::kPeopleCwytalot - 150] = kRoomDummy;
break;
default:
_vm->_dialogs->displayScrollChain('Q', 10); // Please try not to be so violent!
@@ -2179,14 +2177,14 @@ void Parser::doThat() {
_vm->_dialogs->displayScrollChain('Q', 10);
break;
case kVerbCodePasswd:
- if (_vm->_gyro->_room != kRoomBridge)
+ if (_vm->_avalot->_room != kRoomBridge)
_vm->_dialogs->displayScrollChain('Q', 12);
else {
bool ok = true;
for (uint i = 0; i < _thats.size(); i++) {
Common::String temp = _realWords[i];
temp.toUppercase();
- int pwdId = _vm->_gyro->_passwordNum + kFirstPassword;
+ int pwdId = _vm->_avalot->_passwordNum + kFirstPassword;
for (uint j = 0; j < _vocabulary[pwdId]._word.size(); j++) {
if (_vocabulary[pwdId]._word[j] != temp[j])
ok = false;
@@ -2194,13 +2192,13 @@ void Parser::doThat() {
}
if (ok) {
- if (_vm->_gyro->_drawbridgeOpen != 0)
+ if (_vm->_avalot->_drawbridgeOpen != 0)
_vm->_dialogs->displayText("Contrary to your expectations, the drawbridge fails to close again.");
else {
- _vm->_lucerna->incScore(4);
+ _vm->_avalot->incScore(4);
_vm->_dialogs->displayText("The drawbridge opens!");
_vm->_timer->addTimer(7, Timer::kProcOpenDrawbridge, Timer::kReasonDrawbridgeFalls);
- _vm->_gyro->_drawbridgeOpen = 1;
+ _vm->_avalot->_drawbridgeOpen = 1;
}
} else
_vm->_dialogs->displayScrollChain('Q', 12);
@@ -2210,10 +2208,10 @@ void Parser::doThat() {
//_vm->_enid->dir(_realWords[1]); TODO: Replace it with proper ScummVM-friendly function(s)!
break;
case kVerbCodeDie:
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
break;
case kVerbCodeScore: {
- Common::String tmpStr = Common::String::format("Your score is %d,%c%cout of a possible 128.%c%cThis gives you a rank of %s.%c%c%s", _vm->_gyro->_dnascore, Dialogs::kControlCenter, Dialogs::kControlNewLine, Dialogs::kControlNewLine, Dialogs::kControlNewLine, rank().c_str(), Dialogs::kControlNewLine, Dialogs::kControlNewLine, totalTime().c_str());
+ Common::String tmpStr = Common::String::format("Your score is %d,%c%cout of a possible 128.%c%cThis gives you a rank of %s.%c%c%s", _vm->_avalot->_dnascore, Dialogs::kControlCenter, Dialogs::kControlNewLine, Dialogs::kControlNewLine, Dialogs::kControlNewLine, rank().c_str(), Dialogs::kControlNewLine, Dialogs::kControlNewLine, totalTime().c_str());
_vm->_dialogs->displayText(tmpStr);
}
break;
@@ -2228,31 +2226,31 @@ void Parser::doThat() {
_vm->_dialogs->displayText("Kiss whom?");
else if (isPersonHere()) {
switch (_person) {
- case Gyro::kPeopleArkata:
+ case Avalot::kPeopleArkata:
_vm->_dialogs->displayScrollChain('U', 12);
break;
- case Gyro::kPeopleGeida:
+ case Avalot::kPeopleGeida:
_vm->_dialogs->displayScrollChain('U', 13);
break;
- case Gyro::kPeopleWisewoman:
+ case Avalot::kPeopleWisewoman:
_vm->_dialogs->displayScrollChain('U', 14);
break;
default:
_vm->_dialogs->displayScrollChain('U', 5); // You WHAT?
}
- } else if ((Gyro::kPeopleAvalot <= _person) && (_person < Gyro::kPeopleArkata))
+ } else if ((Avalot::kPeopleAvalot <= _person) && (_person < Avalot::kPeopleArkata))
_vm->_dialogs->displayText("Hey, what kind of a weirdo are you??");
break;
case kVerbCodeClimb:
- if (_vm->_gyro->_room == kRoomInsideCardiffCastle)
+ if (_vm->_avalot->_room == kRoomInsideCardiffCastle)
cardiffClimbing();
else // In the wrong room!
_vm->_dialogs->displayText("Not with your head for heights, Avvy!");
break;
case kVerbCodeJump:
_vm->_timer->addTimer(1, Timer::kProcJump, Timer::kReasonJumping);
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_userMovesAvvy = false;
break;
case kVerbCodeHiscores:
// show_highs();
@@ -2262,23 +2260,23 @@ void Parser::doThat() {
if (isPersonHere())
switch (_person) {
case kPardon:
- case Gyro::kPeopleAvalot:
+ case Avalot::kPeopleAvalot:
case 0:
- if (!_vm->_gyro->_avvyIsAwake) {
- _vm->_gyro->_avvyIsAwake = true;
- _vm->_lucerna->incScore(1);
- _vm->_gyro->_avvyInBed = true;
+ if (!_vm->_avalot->_avvyIsAwake) {
+ _vm->_avalot->_avvyIsAwake = true;
+ _vm->_avalot->incScore(1);
+ _vm->_avalot->_avvyInBed = true;
_vm->_background->drawBackgroundSprite(-1, -1, 2); // Picture of Avvy, awake in bed.
- if (_vm->_gyro->_teetotal)
+ if (_vm->_avalot->_teetotal)
_vm->_dialogs->displayScrollChain('d', 13);
} else
_vm->_dialogs->displayText("You're already awake, Avvy!");
break;
- case Gyro::kPeopleAyles:
- if (!_vm->_gyro->_aylesIsAwake)
+ case Avalot::kPeopleAyles:
+ if (!_vm->_avalot->_aylesIsAwake)
_vm->_dialogs->displayText("You can't seem to wake him by yourself.");
break;
- case Gyro::kPeopleJacques: {
+ case Avalot::kPeopleJacques: {
Common::String tmpStr = Common::String::format("Brother Jacques, Brother Jacques, are you asleep?%c1%c" \
"Hmmm... that doesn't seem to do any good...", Dialogs::kControlRegister, Dialogs::kControlSpeechBubble);
_vm->_dialogs->displayText(tmpStr);
@@ -2289,26 +2287,26 @@ void Parser::doThat() {
}
break;
case kVerbCodeSit:
- if (_vm->_gyro->_room == kRoomNottsPub) {
- if (_vm->_gyro->_sittingInPub)
+ if (_vm->_avalot->_room == kRoomNottsPub) {
+ if (_vm->_avalot->_sittingInPub)
_vm->_dialogs->displayText("You're already sitting!");
else {
_vm->_animation->_sprites[0].walkTo(3); // Move Avvy to the place, and sit him down.
_vm->_timer->addTimer(1, Timer::kProcAvvySitDown, Timer::kReasonSittingDown);
}
} else { // Default doodah.
- _vm->_lucerna->dusk();
- _vm->_gyro->hangAroundForAWhile();
- _vm->_lucerna->dawn();
+ _vm->_avalot->dusk();
+ _vm->_avalot->hangAroundForAWhile();
+ _vm->_avalot->dawn();
Common::String tmpStr = Common::String::format("A few hours later...%cnothing much has happened...", Dialogs::kControlParagraph);
_vm->_dialogs->displayText(tmpStr);
}
break;
case kVerbCodeRestart:
if (_vm->_dialogs->displayQuestion("Restart game and lose changes?")) {
- _vm->_lucerna->dusk();
- _vm->_gyro->newGame();
- _vm->_lucerna->dawn();
+ _vm->_avalot->dusk();
+ _vm->_avalot->newGame();
+ _vm->_avalot->dawn();
}
break;
case kPardon:
diff --git a/engines/avalanche/pingo.cpp b/engines/avalanche/pingo.cpp
index 95e15e599f..368fa0dfd7 100644
--- a/engines/avalanche/pingo.cpp
+++ b/engines/avalanche/pingo.cpp
@@ -30,8 +30,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/pingo.h"
-#include "avalanche/gyro.h"
-#include "avalanche/lucerna.h"
#include "avalanche/animation.h"
#include "avalanche/dialogs.h"
@@ -78,7 +76,7 @@ void Pingo::zonk() {
void Pingo::winningPic() {
Common::File f;
- _vm->_lucerna->dusk();
+ _vm->_avalot->dusk();
if (!f.open("finale.avd"))
error("AVALANCHE: Lucerna: File not found: finale.avd");
@@ -97,11 +95,11 @@ void Pingo::winningPic() {
warning("STUB: Pingo::winningPic()");
- _vm->_lucerna->dawn();
+ _vm->_avalot->dawn();
#if 0
do {
- _vm->_gyro->check();
+ _vm->_avalot->check();
} while (!(keypressed() || (mrelease > 0)));
while (keypressed())
char r = readkey();
diff --git a/engines/avalanche/sequence.cpp b/engines/avalanche/sequence.cpp
index 712275e73d..8ca3844bc9 100644
--- a/engines/avalanche/sequence.cpp
+++ b/engines/avalanche/sequence.cpp
@@ -29,7 +29,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/sequence.h"
-#include "avalanche/gyro.h"
#include "avalanche/timer.h"
#include "avalanche/background.h"
#include "avalanche/animation.h"
@@ -61,8 +60,8 @@ void Sequence::thenShow(byte what) {
void Sequence::thenFlip(byte where, byte ped) {
thenShow(kNowFlip);
- _vm->_gyro->_flipToWhere = where;
- _vm->_gyro->_flipToPed = ped;
+ _vm->_avalot->_flipToWhere = where;
+ _vm->_avalot->_flipToPed = ped;
}
void Sequence::startToClose() {
@@ -71,7 +70,7 @@ void Sequence::startToClose() {
}
void Sequence::startToOpen() {
- _vm->_gyro->_userMovesAvvy = false; // They can't move.
+ _vm->_avalot->_userMovesAvvy = false; // They can't move.
_vm->_animation->stopWalking(); // And they're not moving now.
startToClose(); // Apart from that, it's the same thing.
}
@@ -90,8 +89,8 @@ void Sequence::callSequencer() {
return; // No more routines.
break;
case 177: // Flip room.
- _vm->_gyro->_userMovesAvvy = true;
- _vm->_animation->flipRoom(_vm->_gyro->_flipToWhere, _vm->_gyro->_flipToPed);
+ _vm->_avalot->_userMovesAvvy = true;
+ _vm->_animation->flipRoom(_vm->_avalot->_flipToWhere, _vm->_avalot->_flipToPed);
if (curSeq == 177)
shoveLeft();
break;
diff --git a/engines/avalanche/timer.cpp b/engines/avalanche/timer.cpp
index b40731adc6..081f7a314b 100644
--- a/engines/avalanche/timer.cpp
+++ b/engines/avalanche/timer.cpp
@@ -29,7 +29,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/timer.h"
-#include "avalanche/lucerna.h"
#include "avalanche/animation.h"
#include "avalanche/dialogs.h"
#include "avalanche/sequence.h"
@@ -55,7 +54,7 @@ Timer::Timer(AvalancheEngine *vm) {
* @remarks Originally called 'set_up_timer'
*/
void Timer::addTimer(int32 duration, byte action, byte reason) {
- if ((_vm->_gyro->_isLoaded == false) || (_timerLost == true)) {
+ if ((_vm->_avalot->_isLoaded == false) || (_timerLost == true)) {
byte i = 0;
while ((i < 7) && (_times[i]._timeLeft != 0))
i++;
@@ -68,7 +67,7 @@ void Timer::addTimer(int32 duration, byte action, byte reason) {
_times[i]._action = action;
_times[i]._reason = reason;
} else {
- _vm->_gyro->_isLoaded = false;
+ _vm->_avalot->_isLoaded = false;
return;
}
}
@@ -156,7 +155,7 @@ void Timer::updateTimer() {
crapulusSaysSpludOut();
break;
case kProcDawnDelay:
- _vm->_lucerna->dawn();
+ _vm->_avalot->dawn();
break;
case kProcBuyDrinks:
buyDrinks();
@@ -215,8 +214,8 @@ void Timer::updateTimer() {
}
}
}
- _vm->_gyro->_roomTime++; // Cycles since you've been in this room.
- _vm->_gyro->_totalTime++; // Total amount of time for this game.
+ _vm->_avalot->_roomTime++; // Cycles since you've been in this room.
+ _vm->_avalot->_totalTime++; // Total amount of time for this game.
}
void Timer::loseTimer(byte which) {
@@ -229,29 +228,29 @@ void Timer::loseTimer(byte which) {
}
void Timer::openDrawbridge() {
- _vm->_gyro->_drawbridgeOpen++;
- _vm->_background->drawBackgroundSprite(-1, -1, _vm->_gyro->_drawbridgeOpen - 2);
+ _vm->_avalot->_drawbridgeOpen++;
+ _vm->_background->drawBackgroundSprite(-1, -1, _vm->_avalot->_drawbridgeOpen - 2);
- if (_vm->_gyro->_drawbridgeOpen == 4)
- _vm->_gyro->_magics[1]._operation = Gyro::kMagicNothing; // You may enter the drawbridge.
+ if (_vm->_avalot->_drawbridgeOpen == 4)
+ _vm->_avalot->_magics[1]._operation = Avalot::kMagicNothing; // You may enter the drawbridge.
else
addTimer(7, kProcOpenDrawbridge, kReasonDrawbridgeFalls);
}
void Timer::avariciusTalks() {
- _vm->_dialogs->displayScrollChain('q', _vm->_gyro->_avariciusTalk);
- _vm->_gyro->_avariciusTalk++;
+ _vm->_dialogs->displayScrollChain('q', _vm->_avalot->_avariciusTalk);
+ _vm->_avalot->_avariciusTalk++;
- if (_vm->_gyro->_avariciusTalk < 17)
+ if (_vm->_avalot->_avariciusTalk < 17)
addTimer(177, kProcAvariciusTalks, kReasonAvariciusTalks);
else
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->incScore(3);
}
void Timer::urinate() {
_vm->_animation->_sprites[0].turn(Animation::kDirUp);
_vm->_animation->stopWalking();
- _vm->_lucerna->drawDirection();
+ _vm->_avalot->drawDirection();
addTimer(14, kProcToilet, kReasonGoToToilet);
}
@@ -273,20 +272,20 @@ void Timer::stairs() {
_vm->_sound->blip();
_vm->_animation->_sprites[0].walkTo(3);
_vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_gyro->_brummieStairs = 2;
- _vm->_gyro->_magics[10]._operation = Gyro::kMagicSpecial;
- _vm->_gyro->_magics[10]._data = 2; // Reached the bottom of the stairs.
- _vm->_gyro->_magics[3]._operation = Gyro::kMagicNothing; // Stop them hitting the sides (or the game will hang.)
+ _vm->_avalot->_brummieStairs = 2;
+ _vm->_avalot->_magics[10]._operation = Avalot::kMagicSpecial;
+ _vm->_avalot->_magics[10]._data = 2; // Reached the bottom of the stairs.
+ _vm->_avalot->_magics[3]._operation = Avalot::kMagicNothing; // Stop them hitting the sides (or the game will hang.)
}
void Timer::cardiffSurvey() {
- if (_vm->_gyro->_cardiffQuestionNum == 0) {
- _vm->_gyro->_cardiffQuestionNum++;
+ if (_vm->_avalot->_cardiffQuestionNum == 0) {
+ _vm->_avalot->_cardiffQuestionNum++;
_vm->_dialogs->displayScrollChain('q', 27);
}
- _vm->_dialogs->displayScrollChain('z', _vm->_gyro->_cardiffQuestionNum);
- _vm->_gyro->_interrogation = _vm->_gyro->_cardiffQuestionNum;
+ _vm->_dialogs->displayScrollChain('z', _vm->_avalot->_cardiffQuestionNum);
+ _vm->_avalot->_interrogation = _vm->_avalot->_cardiffQuestionNum;
addTimer(182, kProcCardiffSurvey, kReasonCardiffsurvey);
}
@@ -301,8 +300,8 @@ void Timer::cwytalotInHerts() {
void Timer::getTiedUp() {
_vm->_dialogs->displayScrollChain('q', 34); // ...Trouble!
- _vm->_gyro->_userMovesAvvy = false;
- _vm->_gyro->_beenTiedUp = true;
+ _vm->_avalot->_userMovesAvvy = false;
+ _vm->_avalot->_beenTiedUp = true;
_vm->_animation->stopWalking();
AnimationType *spr = &_vm->_animation->_sprites[1];
@@ -316,8 +315,8 @@ void Timer::getTiedUp() {
void Timer::getTiedUp2() {
_vm->_animation->_sprites[0].walkTo(3);
_vm->_animation->_sprites[1].walkTo(4);
- _vm->_gyro->_magics[3]._operation = Gyro::kMagicNothing; // No effect when you touch the boundaries.
- _vm->_gyro->_friarWillTieYouUp = true;
+ _vm->_avalot->_magics[3]._operation = Avalot::kMagicNothing; // No effect when you touch the boundaries.
+ _vm->_avalot->_friarWillTieYouUp = true;
}
void Timer::hangAround() {
@@ -325,7 +324,7 @@ void Timer::hangAround() {
AnimationType *avvy = &_vm->_animation->_sprites[0];
avvy->init(7, true, _vm->_animation); // Robin Hood
- _vm->_gyro->_whereIs[Gyro::kPeopleRobinHood - 150] = kRoomRobins;
+ _vm->_avalot->_whereIs[Avalot::kPeopleRobinHood - 150] = kRoomRobins;
_vm->_animation->appearPed(0, 1);
_vm->_dialogs->displayScrollChain('q', 39);
avvy->walkTo(6);
@@ -337,7 +336,7 @@ void Timer::hangAround2() {
AnimationType *spr = &_vm->_animation->_sprites[1];
spr->_vanishIfStill = false;
spr->walkTo(3);
- _vm->_gyro->_whereIs[Gyro::kPeopleFriarTuck - 150] = kRoomRobins;
+ _vm->_avalot->_whereIs[Avalot::kPeopleFriarTuck - 150] = kRoomRobins;
_vm->_dialogs->displayScrollChain('q', 41);
_vm->_animation->_sprites[0].remove();
spr->remove(); // Get rid of Robin Hood and Friar Tuck.
@@ -345,20 +344,20 @@ void Timer::hangAround2() {
addTimer(1, kProcAfterTheShootemup, kReasonHangingAround);
// Immediately call the following proc (when you have a chance).
- _vm->_gyro->_tiedUp = false;
+ _vm->_avalot->_tiedUp = false;
// _vm->_enid->backToBootstrap(1); Call the shoot-'em-up. TODO: Replace it with proper ScummVM-friendly function(s)! Do not remove until then!
}
void Timer::afterTheShootemup() {
// Only placed this here to replace the minigame. TODO: Remove it when the shoot em' up is implemented!
- _vm->_animation->flipRoom(_vm->_gyro->_room, 1);
+ _vm->_animation->flipRoom(_vm->_avalot->_room, 1);
_vm->_animation->_sprites[0].init(0, true, _vm->_animation); // Avalot.
_vm->_animation->appearPed(0, 1);
- _vm->_gyro->_userMovesAvvy = true;
- _vm->_gyro->_objects[Gyro::kObjectCrossbow - 1] = true;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_userMovesAvvy = true;
+ _vm->_avalot->_objects[Avalot::kObjectCrossbow - 1] = true;
+ _vm->_avalot->refreshObjectList();
// Same as the added line above: TODO: Remove it later!!!
_vm->_dialogs->displayText(Common::String("P.S.: There should have been the mini-game called \"shoot em' up\", but I haven't implemented it yet: you get the crossbow automatically.")
@@ -386,9 +385,9 @@ void Timer::afterTheShootemup() {
}
void Timer::jacquesWakesUp() {
- _vm->_gyro->_jacquesState++;
+ _vm->_avalot->_jacquesState++;
- switch (_vm->_gyro->_jacquesState) { // Additional pictures.
+ switch (_vm->_avalot->_jacquesState) { // Additional pictures.
case 1 :
_vm->_background->drawBackgroundSprite(-1, -1, 0); // Eyes open.
_vm->_dialogs->displayScrollChain('Q', 45);
@@ -396,22 +395,22 @@ void Timer::jacquesWakesUp() {
case 2 : // Going through the door.
_vm->_background->drawBackgroundSprite(-1, -1, 1); // Not on the floor.
_vm->_background->drawBackgroundSprite(-1, -1, 2); // But going through the door.
- _vm->_gyro->_magics[5]._operation = Gyro::kMagicNothing; // You can't wake him up now.
+ _vm->_avalot->_magics[5]._operation = Avalot::kMagicNothing; // You can't wake him up now.
break;
case 3 : // Gone through the door.
_vm->_background->drawBackgroundSprite(-1, -1, 1); // Not on the floor, either.
_vm->_background->drawBackgroundSprite(-1, -1, 3); // He's gone... so the door's open.
- _vm->_gyro->_whereIs[Gyro::kPeopleJacques - 150] = 0; // Gone!
+ _vm->_avalot->_whereIs[Avalot::kPeopleJacques - 150] = 0; // Gone!
break;
}
- if (_vm->_gyro->_jacquesState == 5) {
- _vm->_gyro->_bellsAreRinging = true;
- _vm->_gyro->_aylesIsAwake = true;
- _vm->_lucerna->incScore(2);
+ if (_vm->_avalot->_jacquesState == 5) {
+ _vm->_avalot->_bellsAreRinging = true;
+ _vm->_avalot->_aylesIsAwake = true;
+ _vm->_avalot->incScore(2);
}
- switch (_vm->_gyro->_jacquesState) {
+ switch (_vm->_avalot->_jacquesState) {
case 1:
case 2:
case 3:
@@ -454,8 +453,8 @@ void Timer::naughtyDuke3() {
void Timer::jump() {
AnimationType *avvy = &_vm->_animation->_sprites[0];
- _vm->_gyro->_jumpStatus++;
- switch (_vm->_gyro->_jumpStatus) {
+ _vm->_avalot->_jumpStatus++;
+ switch (_vm->_avalot->_jumpStatus) {
case 1:
case 2:
case 3:
@@ -474,73 +473,73 @@ void Timer::jump() {
break;
}
- if (_vm->_gyro->_jumpStatus == 20) { // End of jump.
- _vm->_gyro->_userMovesAvvy = true;
- _vm->_gyro->_jumpStatus = 0;
+ if (_vm->_avalot->_jumpStatus == 20) { // End of jump.
+ _vm->_avalot->_userMovesAvvy = true;
+ _vm->_avalot->_jumpStatus = 0;
} else // Still jumping.
addTimer(1, kProcJump, kReasonJumping);
- if ((_vm->_gyro->_jumpStatus == 10) // You're at the highest point of your jump.
- && (_vm->_gyro->_room == kRoomInsideCardiffCastle)
- && (_vm->_gyro->_arrowInTheDoor == true)
+ if ((_vm->_avalot->_jumpStatus == 10) // You're at the highest point of your jump.
+ && (_vm->_avalot->_room == kRoomInsideCardiffCastle)
+ && (_vm->_avalot->_arrowInTheDoor == true)
&& (_vm->_animation->inField(2))) { // Beside the wall
// Grab the arrow!
- if (_vm->_gyro->_carryNum >= kCarryLimit)
+ if (_vm->_avalot->_carryNum >= kCarryLimit)
_vm->_dialogs->displayText("You fail to grab it, because your hands are full.");
else {
_vm->_background->drawBackgroundSprite(-1, -1, 1);
- _vm->_gyro->_arrowInTheDoor = false; // You've got it.
- _vm->_gyro->_objects[Gyro::kObjectBolt - 1] = true;
- _vm->_lucerna->refreshObjectList();
+ _vm->_avalot->_arrowInTheDoor = false; // You've got it.
+ _vm->_avalot->_objects[Avalot::kObjectBolt - 1] = true;
+ _vm->_avalot->refreshObjectList();
_vm->_dialogs->displayScrollChain('q', 50);
- _vm->_lucerna->incScore(3);
+ _vm->_avalot->incScore(3);
}
}
}
void Timer::crapulusSaysSpludOut() {
_vm->_dialogs->displayScrollChain('q', 56);
- _vm->_gyro->_crapulusWillTell = false;
+ _vm->_avalot->_crapulusWillTell = false;
}
void Timer::buyDrinks() {
_vm->_background->drawBackgroundSprite(-1, -1, 10); // Malagauche gets up again.
- _vm->_gyro->_malagauche = 0;
+ _vm->_avalot->_malagauche = 0;
- _vm->_dialogs->displayScrollChain('D', _vm->_gyro->_drinking); // Display message about it.
+ _vm->_dialogs->displayScrollChain('D', _vm->_avalot->_drinking); // Display message about it.
_vm->_pingo->wobble(); // Do the special effects.
_vm->_dialogs->displayScrollChain('D', 1); // That'll be thruppence.
- if (_vm->_gyro->decreaseMoney(3)) // Pay 3d.
+ if (_vm->_avalot->decreaseMoney(3)) // Pay 3d.
_vm->_dialogs->displayScrollChain('D', 3); // Tell 'em you paid up.
_vm->_parser->drink();
}
void Timer::buyWine() {
_vm->_background->drawBackgroundSprite(-1, -1, 10); // Malagauche gets up again.
- _vm->_gyro->_malagauche = 0;
+ _vm->_avalot->_malagauche = 0;
_vm->_dialogs->displayScrollChain('D', 50); // You buy the wine.
_vm->_dialogs->displayScrollChain('D', 1); // It'll be thruppence.
- if (_vm->_gyro->decreaseMoney(3)) {
+ if (_vm->_avalot->decreaseMoney(3)) {
_vm->_dialogs->displayScrollChain('D', 4); // You paid up.
- _vm->_gyro->_objects[Gyro::kObjectWine - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_gyro->_wineState = 1; // OK Wine.
+ _vm->_avalot->_objects[Avalot::kObjectWine - 1] = true;
+ _vm->_avalot->refreshObjectList();
+ _vm->_avalot->_wineState = 1; // OK Wine.
}
}
void Timer::callsGuards() {
_vm->_dialogs->displayScrollChain('Q', 58); // "GUARDS!!!"
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
}
void Timer::greetsMonk() {
_vm->_dialogs->displayScrollChain('Q', 59);
- _vm->_gyro->_enteredLustiesRoomAsMonk = true;
+ _vm->_avalot->_enteredLustiesRoomAsMonk = true;
}
void Timer::fallDownOubliette() {
- _vm->_gyro->_magics[8]._operation = Gyro::kMagicNothing;
+ _vm->_avalot->_magics[8]._operation = Avalot::kMagicNothing;
AnimationType *avvy = &_vm->_animation->_sprites[0];
avvy->_moveY++; // Increments dx/dy!
@@ -549,13 +548,13 @@ void Timer::fallDownOubliette() {
}
void Timer::meetAvaroid() {
- if (_vm->_gyro->_metAvaroid) {
+ if (_vm->_avalot->_metAvaroid) {
Common::String tmpStr = Common::String::format("You can't expect to be %cthat%c lucky twice in a row!", Dialogs::kControlItalic, Dialogs::kControlRoman);
_vm->_dialogs->displayText(tmpStr);
- _vm->_lucerna->gameOver();
+ _vm->_avalot->gameOver();
} else {
_vm->_dialogs->displayScrollChain('Q', 60);
- _vm->_gyro->_metAvaroid = true;
+ _vm->_avalot->_metAvaroid = true;
addTimer(1, kProcRiseUpOubliette, kReasonRisingUpOubliette);
AnimationType *avvy = &_vm->_animation->_sprites[0];
@@ -564,7 +563,7 @@ void Timer::meetAvaroid() {
avvy->_moveX = -3;
avvy->_moveY = -5;
- _vm->_gyro->setBackgroundColor(2);
+ _vm->_avalot->setBackgroundColor(2);
}
}
@@ -576,7 +575,7 @@ void Timer::riseUpOubliette() {
if (avvy->_moveY > 0)
addTimer(3, kProcRiseUpOubliette, kReasonRisingUpOubliette);
else
- _vm->_gyro->_userMovesAvvy = true;
+ _vm->_avalot->_userMovesAvvy = true;
}
void Timer::robinHoodAndGeida() {
@@ -589,7 +588,7 @@ void Timer::robinHoodAndGeida() {
spr->stopWalk();
spr->_facingDir = Animation::kDirLeft;
addTimer(20, kProcRobinHoodAndGeidaTalk, kReasonRobinHoodAndGeida);
- _vm->_gyro->_geidaFollows = false;
+ _vm->_avalot->_geidaFollows = false;
}
void Timer::robinHoodAndGeidaTalk() {
@@ -613,7 +612,7 @@ void Timer::avalotReturns() {
avvy->init(0, true, _vm->_animation);
_vm->_animation->appearPed(0, 0);
_vm->_dialogs->displayScrollChain('q', 67);
- _vm->_gyro->_userMovesAvvy = true;
+ _vm->_avalot->_userMovesAvvy = true;
}
/**
@@ -627,8 +626,8 @@ void Timer::avvySitDown() {
addTimer(1, kProcAvvySitDown, kReasonSittingDown);
else {
_vm->_background->drawBackgroundSprite(-1, -1, 2);
- _vm->_gyro->_sittingInPub = true;
- _vm->_gyro->_userMovesAvvy = false;
+ _vm->_avalot->_sittingInPub = true;
+ _vm->_avalot->_userMovesAvvy = false;
avvy->_visible = false;
}
}
@@ -640,7 +639,7 @@ void Timer::ghostRoomPhew() {
}
void Timer::arkataShouts() {
- if (_vm->_gyro->_teetotal)
+ if (_vm->_avalot->_teetotal)
return;
_vm->_dialogs->displayScrollChain('q', 76);
@@ -654,14 +653,14 @@ void Timer::winning() {
warning("STUB: Timer::winning()");
#if 0
do {
- _vm->_lucerna->checkclick();
- } while (!(_vm->_gyro->mrelease == 0));
+ _vm->_avalot->checkclick();
+ } while (!(_vm->_avalot->mrelease == 0));
#endif
// TODO: To be implemented with Pingo::winningPic().
- _vm->_lucerna->callVerb(Parser::kVerbCodeScore);
+ _vm->_avalot->callVerb(Parser::kVerbCodeScore);
_vm->_dialogs->displayText(" T H E E N D ");
- _vm->_gyro->_letMeOut = true;
+ _vm->_avalot->_letMeOut = true;
}
void Timer::avalotFalls() {
@@ -693,8 +692,8 @@ void Timer::spludwickLeavesCauldron() {
void Timer::giveLuteToGeida() { // Moved here from Acci.
_vm->_dialogs->displayScrollChain('Q', 86);
- _vm->_lucerna->incScore(4);
- _vm->_gyro->_lustieIsAsleep = true;
+ _vm->_avalot->incScore(4);
+ _vm->_avalot->_lustieIsAsleep = true;
_vm->_sequence->firstShow(5);
_vm->_sequence->thenShow(6); // He falls asleep...
_vm->_sequence->startToClose(); // Not really closing, but we're using the same procedure.