aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/avalanche/acci2.cpp173
-rw-r--r--engines/avalanche/animation.cpp17
-rw-r--r--engines/avalanche/avalanche.cpp2
-rw-r--r--engines/avalanche/avalanche.h2
-rw-r--r--engines/avalanche/avalot.cpp3
-rw-r--r--engines/avalanche/gyro2.cpp3
-rw-r--r--engines/avalanche/lucerna2.cpp5
-rw-r--r--engines/avalanche/module.mk1
-rw-r--r--engines/avalanche/scrolls2.cpp239
-rw-r--r--engines/avalanche/scrolls2.h10
-rw-r--r--engines/avalanche/timer.cpp57
-rw-r--r--engines/avalanche/visa2.cpp281
-rw-r--r--engines/avalanche/visa2.h56
13 files changed, 373 insertions, 476 deletions
diff --git a/engines/avalanche/acci2.cpp b/engines/avalanche/acci2.cpp
index bbbc04af61..1008a60157 100644
--- a/engines/avalanche/acci2.cpp
+++ b/engines/avalanche/acci2.cpp
@@ -33,7 +33,6 @@
#include "avalanche/gyro2.h"
#include "avalanche/lucerna2.h"
#include "avalanche/scrolls2.h"
-#include "avalanche/visa2.h"
#include "avalanche/timer.h"
#include "avalanche/animation.h"
#include "avalanche/enid2.h"
@@ -576,7 +575,7 @@ void Acci::storeInterrogation(byte interrogation) {
if (!_vm->_gyro->_spareEvening.empty())
_vm->_gyro->_spareEvening.clear();
_vm->_gyro->_spareEvening = _vm->_parser->_inputText;
- _vm->_visa->displayScrollChain('z', 5); // His closing statement...
+ _vm->_scrolls->displayScrollChain('z', 5); // His closing statement...
_vm->_animation->_sprites[1].walkTo(4); // The end of the drawbridge
_vm->_animation->_sprites[1]._vanishIfStill = true; // Then go away!
_vm->_gyro->_magics[1]._operation = Gyro::kMagicNothing;
@@ -798,24 +797,24 @@ void Acci::examineObject() {
case Gyro::kObjectWine :
switch (_vm->_gyro->_wineState) {// 4 is perfect wine. 0 is not holding the wine.
case 1:
- _vm->_visa->displayScrollChain('t', 1); // Normal examine wine scroll
+ _vm->_scrolls->displayScrollChain('t', 1); // Normal examine wine scroll
break;
case 2:
- _vm->_visa->displayScrollChain('d', 6); // Bad wine
+ _vm->_scrolls->displayScrollChain('d', 6); // Bad wine
break;
case 3:
- _vm->_visa->displayScrollChain('d', 7); // Vinegar
+ _vm->_scrolls->displayScrollChain('d', 7); // Vinegar
break;
}
break;
case Gyro::kObjectOnion:
if (_vm->_gyro->_rottenOnion)
- _vm->_visa->displayScrollChain('q', 21); // Yucky onion.
+ _vm->_scrolls->displayScrollChain('q', 21); // Yucky onion.
else
- _vm->_visa->displayScrollChain('t', 18); // Normal onion scroll
+ _vm->_scrolls->displayScrollChain('t', 18); // Normal onion scroll
break;
default:
- _vm->_visa->displayScrollChain('t', _thing); // <<< Ordinarily
+ _vm->_scrolls->displayScrollChain('t', _thing); // <<< Ordinarily
}
}
@@ -841,24 +840,24 @@ void Acci::exampers() {
switch (_person) { // Special cases
case 11:
if (_vm->_gyro->_wonNim) {
- _vm->_visa->displayScrollChain('Q', 8); // "I'm Not Playing!"
+ _vm->_scrolls->displayScrollChain('Q', 8); // "I'm Not Playing!"
return;
}
break;
case 99:
if (_vm->_gyro->_lustieIsAsleep) {
- _vm->_visa->displayScrollChain('Q', 65); // He's asleep. (65! Wow!)
+ _vm->_scrolls->displayScrollChain('Q', 65); // He's asleep. (65! Wow!)
return;
}
break;
}
// Otherwise...
- _vm->_visa->displayScrollChain('p', _person);
+ _vm->_scrolls->displayScrollChain('p', _person);
}
// And afterwards...
if ((_person == 14) && (!_vm->_gyro->_aylesIsAwake))
- _vm->_visa->displayScrollChain('Q', 13);
+ _vm->_scrolls->displayScrollChain('Q', 13);
}
/**
@@ -953,43 +952,43 @@ void Acci::swallow() { // Eat something.
switch (_vm->_gyro->_wineState) { // 4 is perfect
case 1:
if (_vm->_gyro->_teetotal) {
- _vm->_visa->displayScrollChain('D', 6);
+ _vm->_scrolls->displayScrollChain('D', 6);
return;
}
- _vm->_visa->displayScrollChain('U', 1);
+ _vm->_scrolls->displayScrollChain('U', 1);
_vm->_pingo->wobble();
- _vm->_visa->displayScrollChain('U', 2);
+ _vm->_scrolls->displayScrollChain('U', 2);
_vm->_gyro->_objects[Gyro::kObjectWine - 1] = false;
_vm->_lucerna->refreshObjectList();
drink();
break;
case 2:
case 3:
- _vm->_visa->displayScrollChain('d', 8);
+ _vm->_scrolls->displayScrollChain('d', 8);
break; // You can't drink it!
}
break;
case Gyro::kObjectPotion:
_vm->_gyro->setBackgroundColor(4);
- _vm->_visa->displayScrollChain('U', 3);
+ _vm->_scrolls->displayScrollChain('U', 3);
_vm->_lucerna->gameOver();
_vm->_gyro->setBackgroundColor(0);
break;
case Gyro::kObjectInk:
- _vm->_visa->displayScrollChain('U', 4);
+ _vm->_scrolls->displayScrollChain('U', 4);
break;
case Gyro::kObjectChastity:
- _vm->_visa->displayScrollChain('U', 5);
+ _vm->_scrolls->displayScrollChain('U', 5);
break;
case Gyro::kObjectMushroom:
- _vm->_visa->displayScrollChain('U', 6);
+ _vm->_scrolls->displayScrollChain('U', 6);
_vm->_lucerna->gameOver();
break;
case Gyro::kObjectOnion:
if (_vm->_gyro->_rottenOnion)
- _vm->_visa->displayScrollChain('U', 11);
+ _vm->_scrolls->displayScrollChain('U', 11);
else {
- _vm->_visa->displayScrollChain('U', 8);
+ _vm->_scrolls->displayScrollChain('U', 8);
_vm->_gyro->_objects[Gyro::kObjectOnion - 1] = false;
_vm->_lucerna->refreshObjectList();
}
@@ -1040,34 +1039,34 @@ void Acci::lookAround() {
switch (_vm->_gyro->_room) {
case r__spludwicks:
if (_vm->_gyro->_avariciusTalk > 0)
- _vm->_visa->displayScrollChain('q', 23);
+ _vm->_scrolls->displayScrollChain('q', 23);
else
peopleInRoom();
break;
case r__robins:
if (_vm->_gyro->_tiedUp)
- _vm->_visa->displayScrollChain('q', 38);
+ _vm->_scrolls->displayScrollChain('q', 38);
if (_vm->_gyro->_mushroomGrowing)
- _vm->_visa->displayScrollChain('q', 55);
+ _vm->_scrolls->displayScrollChain('q', 55);
break;
case r__insidecardiffcastle:
if (!_vm->_gyro->_takenPen)
- _vm->_visa->displayScrollChain('q', 49);
+ _vm->_scrolls->displayScrollChain('q', 49);
break;
case r__lustiesroom:
if (_vm->_gyro->_lustieIsAsleep)
- _vm->_visa->displayScrollChain('q', 65);
+ _vm->_scrolls->displayScrollChain('q', 65);
break;
case r__catacombs:
switch (_vm->_gyro->_catacombY * 256 + _vm->_gyro->_catacombX) {
case 258 :
- _vm->_visa->displayScrollChain('q', 80); // Inside art gallery.
+ _vm->_scrolls->displayScrollChain('q', 80); // Inside art gallery.
break;
case 514 :
- _vm->_visa->displayScrollChain('q', 81); // Outside ditto.
+ _vm->_scrolls->displayScrollChain('q', 81); // Outside ditto.
break;
case 260 :
- _vm->_visa->displayScrollChain('q', 82); // Outside Geida's room.
+ _vm->_scrolls->displayScrollChain('q', 82); // Outside Geida's room.
break;
}
break;
@@ -1090,7 +1089,7 @@ void Acci::openDoor() {
break;
case r__spludwicks:
if (_thing == 61) {
- _vm->_visa->displayScrollChain('q', 85);
+ _vm->_scrolls->displayScrollChain('q', 85);
return;
}
break;
@@ -1105,7 +1104,7 @@ void Acci::openDoor() {
switch (portal->_operation) {
case Gyro::kMagicExclaim:
_vm->_animation->_sprites[0].bounce();
- _vm->_visa->displayScrollChain('x', portal->_data);
+ _vm->_scrolls->displayScrollChain('x', portal->_data);
break;
case Gyro::kMagicTransport:
_vm->_animation->flipRoom((portal->_data) >> 8, portal->_data & 0x0F);
@@ -1163,7 +1162,7 @@ void Acci::putProc() {
} else { // Put onion into vinegar! Yes!
_vm->_gyro->_onionInVinegar = true;
_vm->_lucerna->incScore(7);
- _vm->_visa->displayScrollChain('u', 9);
+ _vm->_scrolls->displayScrollChain('u', 9);
}
}
} else
@@ -1248,10 +1247,10 @@ bool Acci::giveToSpludwick() {
case Gyro::kObjectOnion:
_vm->_gyro->_objects[Gyro::kObjectOnion - 1] = false;
if (_vm->_gyro->_rottenOnion)
- _vm->_visa->displayScrollChain('q', 22);
+ _vm->_scrolls->displayScrollChain('q', 22);
else {
_vm->_gyro->_givenToSpludwick++;
- _vm->_visa->displayScrollChain('q', 20);
+ _vm->_scrolls->displayScrollChain('q', 20);
goToCauldron();
_vm->_lucerna->incScore(3);
}
@@ -1261,13 +1260,13 @@ bool Acci::giveToSpludwick() {
_vm->_gyro->_objects[Gyro::kObjectInk - 1] = false;
_vm->_lucerna->refreshObjectList();
_vm->_gyro->_givenToSpludwick++;
- _vm->_visa->displayScrollChain('q', 24);
+ _vm->_scrolls->displayScrollChain('q', 24);
goToCauldron();
_vm->_lucerna->incScore(3);
break;
case Gyro::kObjectMushroom:
_vm->_gyro->_objects[Gyro::kObjectMushroom - 1] = false;
- _vm->_visa->displayScrollChain('q', 25);
+ _vm->_scrolls->displayScrollChain('q', 25);
_vm->_lucerna->incScore(5);
_vm->_gyro->_givenToSpludwick++;
goToCauldron();
@@ -1321,9 +1320,9 @@ void Acci::standUp() {
case r__yours: // Avvy isn't asleep.
if (_vm->_gyro->_avvyIsAwake && _vm->_gyro->_avvyInBed) { // But he's in bed.
if (_vm->_gyro->_teetotal) {
- _vm->_visa->displayScrollChain('d', 12);
+ _vm->_scrolls->displayScrollChain('d', 12);
_vm->_gyro->setBackgroundColor(0);
- _vm->_visa->displayScrollChain('d', 14);
+ _vm->_scrolls->displayScrollChain('d', 14);
}
_vm->_animation->_sprites[0]._visible = true;
_vm->_gyro->_userMovesAvvy = true;
@@ -1372,7 +1371,7 @@ void Acci::getProc(char thing) {
_vm->_scrolls->displayText(tmpStr);
}
} else
- _vm->_visa->displayScrollChain('q', 57);
+ _vm->_scrolls->displayScrollChain('q', 57);
break;
case r__insidecardiffcastle:
switch (thing) {
@@ -1390,15 +1389,15 @@ void Acci::getProc(char thing) {
_vm->_scrolls->displayText("Taken.");
}
} else if (_vm->_gyro->_standingOnDais)
- _vm->_visa->displayScrollChain('q', 53);
+ _vm->_scrolls->displayScrollChain('q', 53);
else
- _vm->_visa->displayScrollChain('q', 51);
+ _vm->_scrolls->displayScrollChain('q', 51);
break;
case Gyro::kObjectBolt:
- _vm->_visa->displayScrollChain('q', 52);
+ _vm->_scrolls->displayScrollChain('q', 52);
break;
default:
- _vm->_visa->displayScrollChain('q', 57);
+ _vm->_scrolls->displayScrollChain('q', 57);
}
break;
case r__robins:
@@ -1411,10 +1410,10 @@ void Acci::getProc(char thing) {
_vm->_lucerna->refreshObjectList();
_vm->_lucerna->incScore(3);
} else
- _vm->_visa->displayScrollChain('q', 57);
+ _vm->_scrolls->displayScrollChain('q', 57);
break;
default:
- _vm->_visa->displayScrollChain('q', 57);
+ _vm->_scrolls->displayScrollChain('q', 57);
}
}
@@ -1430,7 +1429,7 @@ void Acci::giveGeidaTheLute() {
}
_vm->_gyro->_objects[Gyro::kObjectLute - 1] = false;
_vm->_lucerna->refreshObjectList();
- _vm->_visa->displayScrollChain('q', 64); // She plays it.
+ _vm->_scrolls->displayScrollChain('q', 64); // She plays it.
_vm->_timer->addTimer(1, Timer::kProcGiveLuteToGeida, Timer::kReasonGeidaSings);
_vm->_enid->backToBootstrap(4);
@@ -1444,7 +1443,7 @@ void Acci::playHarp() {
}
void Acci::winSequence() {
- _vm->_visa->displayScrollChain('q', 78);
+ _vm->_scrolls->displayScrollChain('q', 78);
_vm->_sequence->firstShow(7);
_vm->_sequence->thenShow(8);
_vm->_sequence->thenShow(9);
@@ -1576,10 +1575,10 @@ void Acci::doThat() {
if ((_person == 0) || (_person == kPardon))
_vm->_scrolls->displayText("Talk to whom?");
else if (isPersonHere())
- _vm->_visa->talkTo(_person);
+ _vm->_scrolls->talkTo(_person);
}
} else if (isPersonHere())
- _vm->_visa->talkTo(_person);
+ _vm->_scrolls->talkTo(_person);
break;
case kVerbCodeGive:
if (isHolding()) {
@@ -1617,7 +1616,7 @@ void Acci::doThat() {
break;
case Gyro::kPeopleIbythneth:
if (_thing == Gyro::kObjectBadge) {
- _vm->_visa->displayScrollChain('q', 32); // Thanks! Wow!
+ _vm->_scrolls->displayScrollChain('q', 32); // Thanks! Wow!
_vm->_lucerna->incScore(3);
_vm->_gyro->_objects[Gyro::kObjectBadge - 1] = false;
_vm->_gyro->_objects[Gyro::kObjectHabit - 1] = true;
@@ -1631,7 +1630,7 @@ void Acci::doThat() {
if (_vm->_gyro->_aylesIsAwake) {
if (_thing == Gyro::kObjectPen) {
_vm->_gyro->_objects[Gyro::kObjectPen - 1] = false;
- _vm->_visa->displayScrollChain('q', 54);
+ _vm->_scrolls->displayScrollChain('q', 54);
_vm->_gyro->_objects[Gyro::kObjectInk - 1] = true;
_vm->_gyro->_givenPenToAyles = true;
_vm->_lucerna->refreshObjectList();
@@ -1645,7 +1644,7 @@ void Acci::doThat() {
switch (_thing) {
case Gyro::kObjectPotion:
_vm->_gyro->_objects[Gyro::kObjectPotion - 1] = false;
- _vm->_visa->displayScrollChain('u', 16); // She drinks it.
+ _vm->_scrolls->displayScrollChain('u', 16); // She drinks it.
_vm->_lucerna->incScore(2);
_vm->_gyro->_givenPotionToGeida = true;
_vm->_lucerna->refreshObjectList();
@@ -1663,7 +1662,7 @@ void Acci::doThat() {
if (_vm->_gyro->_givenPotionToGeida)
winSequence();
else
- _vm->_visa->displayScrollChain('q', 77); // That Geida woman!
+ _vm->_scrolls->displayScrollChain('q', 77); // That Geida woman!
break;
default:
heyThanks();
@@ -1788,20 +1787,20 @@ void Acci::doThat() {
// The player automatically wins the game everytime he wins, until I implement the mini-game.
if (_vm->_gyro->_wonNim) { // Already won the game.
- _vm->_visa->displayScrollChain('Q', 6);
+ _vm->_scrolls->displayScrollChain('Q', 6);
return;
}
if (!_vm->_gyro->_askedDogfoodAboutNim) {
- _vm->_visa->displayScrollChain('q', 84);
+ _vm->_scrolls->displayScrollChain('q', 84);
return;
}
- _vm->_visa->displayScrollChain('Q', 3);
+ _vm->_scrolls->displayScrollChain('Q', 3);
_vm->_gyro->_playedNim++;
// You won - strange!
- _vm->_visa->displayScrollChain('Q', 7); // You won! Give us a lute!
+ _vm->_scrolls->displayScrollChain('Q', 7); // You won! Give us a lute!
_vm->_gyro->_objects[Gyro::kObjectLute - 1] = true;
_vm->_lucerna->refreshObjectList();
_vm->_gyro->_wonNim = true;
@@ -1823,13 +1822,13 @@ void Acci::doThat() {
} else if (isHolding()) {
switch (_thing) {
case Gyro::kObjectLute :
- _vm->_visa->displayScrollChain('U', 7);
+ _vm->_scrolls->displayScrollChain('U', 7);
if (_vm->_gyro->_whereIs[Gyro::kPeopleCwytalot - 150] == _vm->_gyro->_room)
- _vm->_visa->displayScrollChain('U', 10);
+ _vm->_scrolls->displayScrollChain('U', 10);
if (_vm->_gyro->_whereIs[Gyro::kPeopleDuLustie - 150] == _vm->_gyro->_room)
- _vm->_visa->displayScrollChain('U', 15);
+ _vm->_scrolls->displayScrollChain('U', 15);
break;
case 52:
if (_vm->_gyro->_room == r__musicroom)
@@ -1891,12 +1890,12 @@ void Acci::doThat() {
break;
case kVerbCodeMagic:
if (_vm->_gyro->_avariciusTalk > 0)
- _vm->_visa->displayScrollChain('q', 19);
+ _vm->_scrolls->displayScrollChain('q', 19);
else {
if ((_vm->_gyro->_room == 12) & (_vm->_animation->inField(2))) { // Avaricius appears!
- _vm->_visa->displayScrollChain('q', 17);
+ _vm->_scrolls->displayScrollChain('q', 17);
if (_vm->_gyro->_whereIs[1] == 12)
- _vm->_visa->displayScrollChain('q', 18);
+ _vm->_scrolls->displayScrollChain('q', 18);
else {
Avalanche::AnimationType *spr = &_vm->_animation->_sprites[1];
spr->init(1, false, _vm->_animation); // Avaricius
@@ -1956,12 +1955,12 @@ void Acci::doThat() {
case 54:
case 58: // Beer, whisky, cider or mead.
if (_vm->_gyro->_malagauche == 177) { // Already getting us one.
- _vm->_visa->displayScrollChain('D', 15);
+ _vm->_scrolls->displayScrollChain('D', 15);
return;
}
if (_vm->_gyro->_teetotal) {
- _vm->_visa->displayScrollChain('D', 6);
+ _vm->_scrolls->displayScrollChain('D', 6);
return;
}
@@ -1981,10 +1980,10 @@ void Acci::doThat() {
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!
- _vm->_visa->displayScrollChain('D', 2); // 1 bottle's shufishent!
+ _vm->_scrolls->displayScrollChain('D', 2); // 1 bottle's shufishent!
else {
if (_vm->_gyro->_malagauche == 177) { // Already getting us one.
- _vm->_visa->displayScrollChain('D', 15);
+ _vm->_scrolls->displayScrollChain('D', 15);
return;
}
@@ -2006,21 +2005,21 @@ void Acci::doThat() {
break;
}
} else
- _vm->_visa->displayScrollChain('D', 5); // Go to the bar!
+ _vm->_scrolls->displayScrollChain('D', 5); // Go to the bar!
break;
case r__outsideducks:
if (_vm->_animation->inField(6)) {
if (_thing == Gyro::kObjectOnion) {
if (_vm->_gyro->_objects[Gyro::kObjectOnion - 1])
- _vm->_visa->displayScrollChain('D', 10); // Not planning to juggle with the things!
+ _vm->_scrolls->displayScrollChain('D', 10); // Not planning to juggle with the things!
else if (_vm->_gyro->_carryNum >= kCarryLimit)
_vm->_scrolls->displayText("Before you ask, you remember that your hands are full.");
else {
if (_vm->_gyro->_boughtOnion)
- _vm->_visa->displayScrollChain('D', 11);
+ _vm->_scrolls->displayScrollChain('D', 11);
else {
- _vm->_visa->displayScrollChain('D', 9);
+ _vm->_scrolls->displayScrollChain('D', 9);
_vm->_lucerna->incScore(3);
}
_vm->_gyro->decreaseMoney(3); // It costs thruppence.
@@ -2031,16 +2030,16 @@ void Acci::doThat() {
_vm->_gyro->_onionInVinegar = false;
}
} else
- _vm->_visa->displayScrollChain('D', 0);
+ _vm->_scrolls->displayScrollChain('D', 0);
} else
- _vm->_visa->displayScrollChain('D', 0);
+ _vm->_scrolls->displayScrollChain('D', 0);
break;
case r__nottspub:
- _vm->_visa->displayScrollChain('n', 15); // Can't sell to southerners.
+ _vm->_scrolls->displayScrollChain('n', 15); // Can't sell to southerners.
break;
default:
- _vm->_visa->displayScrollChain('D', 0); // Can't buy that.
+ _vm->_scrolls->displayScrollChain('D', 0); // Can't buy that.
}
break;
case kVerbCodeAttack:
@@ -2050,7 +2049,7 @@ void Acci::doThat() {
switch (_vm->_gyro->_objects[Gyro::kObjectBolt - 1] + _vm->_gyro->_objects[Gyro::kObjectCrossbow - 1] * 2) {
// 0 = neither, 1 = only bolt, 2 = only crossbow, 3 = both.
case 0:
- _vm->_visa->displayScrollChain('Q', 10);
+ _vm->_scrolls->displayScrollChain('Q', 10);
_vm->_scrolls->displayText("(At the very least, don't use your bare hands!)");
break;
case 1:
@@ -2060,7 +2059,7 @@ void Acci::doThat() {
_vm->_scrolls->displayText("Come on, Avvy! You're not going to get very far with only a crossbow!");
break;
case 3:
- _vm->_visa->displayScrollChain('Q', 11);
+ _vm->_scrolls->displayScrollChain('Q', 11);
_vm->_gyro->_cwytalotGone = true;
_vm->_gyro->_objects[Gyro::kObjectBolt - 1] = false;
_vm->_gyro->_objects[Gyro::kObjectCrossbow - 1] = false;
@@ -2073,14 +2072,14 @@ void Acci::doThat() {
_vm->_gyro->_whereIs[7] = 177;
break;
default:
- _vm->_visa->displayScrollChain('Q', 10); // Please try not to be so violent!
+ _vm->_scrolls->displayScrollChain('Q', 10); // Please try not to be so violent!
}
} else
- _vm->_visa->displayScrollChain('Q', 10);
+ _vm->_scrolls->displayScrollChain('Q', 10);
break;
case kVerbCodePasswd:
if (_vm->_gyro->_room != r__bridge)
- _vm->_visa->displayScrollChain('Q', 12);
+ _vm->_scrolls->displayScrollChain('Q', 12);
else {
bool ok = true;
for (byte i = 0; i < _thats.size(); i++) {
@@ -2103,7 +2102,7 @@ void Acci::doThat() {
_vm->_gyro->_drawbridgeOpen = 1;
}
} else
- _vm->_visa->displayScrollChain('Q', 12);
+ _vm->_scrolls->displayScrollChain('Q', 12);
}
break;
case kVerbCodeDir:
@@ -2129,16 +2128,16 @@ void Acci::doThat() {
else if (isPersonHere()) {
switch (_person) {
case Gyro::kPeopleArkata:
- _vm->_visa->displayScrollChain('U', 12);
+ _vm->_scrolls->displayScrollChain('U', 12);
break;
case Gyro::kPeopleGeida:
- _vm->_visa->displayScrollChain('U', 13);
+ _vm->_scrolls->displayScrollChain('U', 13);
break;
case Gyro::kPeopleWisewoman:
- _vm->_visa->displayScrollChain('U', 14);
+ _vm->_scrolls->displayScrollChain('U', 14);
break;
default:
- _vm->_visa->displayScrollChain('U', 5); // You WHAT?
+ _vm->_scrolls->displayScrollChain('U', 5); // You WHAT?
}
} else if ((150 <= _person) && (_person <= 174))
_vm->_scrolls->displayText("Hey, what kind of a weirdo are you??");
@@ -2170,7 +2169,7 @@ void Acci::doThat() {
_vm->_gyro->_avvyInBed = true;
_vm->_celer->drawBackgroundSprite(-1, -1, 3); // Picture of Avvy, awake in bed.
if (_vm->_gyro->_teetotal)
- _vm->_visa->displayScrollChain('d', 13);
+ _vm->_scrolls->displayScrollChain('d', 13);
} else
_vm->_scrolls->displayText("You're already awake, Avvy!");
break;
diff --git a/engines/avalanche/animation.cpp b/engines/avalanche/animation.cpp
index c6fbe957b4..21063e09a7 100644
--- a/engines/avalanche/animation.cpp
+++ b/engines/avalanche/animation.cpp
@@ -32,7 +32,6 @@
#include "avalanche/animation.h"
#include "avalanche/scrolls2.h"
#include "avalanche/lucerna2.h"
-#include "avalanche/visa2.h"
#include "avalanche/gyro2.h"
#include "avalanche/celer2.h"
#include "avalanche/sequence2.h"
@@ -759,7 +758,7 @@ void Animation::callSpecial(uint16 which) {
_vm->_gyro->_magics[11]._data = 5;
_vm->_gyro->_magics[3]._operation = Gyro::kMagicBounce; // Now works as planned!
stopWalking();
- _vm->_visa->displayScrollChain('q', 26);
+ _vm->_scrolls->displayScrollChain('q', 26);
_vm->_gyro->_userMovesAvvy = true;
break;
case 3: // _vm->_gyro->special 3: Room 71: triggers dart.
@@ -789,11 +788,11 @@ void Animation::callSpecial(uint16 which) {
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.
- _vm->_visa->displayScrollChain('q', 35);
+ _vm->_scrolls->displayScrollChain('q', 35);
_sprites[0].remove();
//tr[1].vanishifstill:=true;
_vm->_celer->drawBackgroundSprite(-1, -1, 2);
- _vm->_visa->displayScrollChain('q', 36);
+ _vm->_scrolls->displayScrollChain('q', 36);
_vm->_gyro->_tiedUp = true;
_vm->_gyro->_friarWillTieYouUp = false;
_sprites[1].walkTo(3);
@@ -822,7 +821,7 @@ void Animation::callSpecial(uint16 which) {
break;
case 8: // _vm->_gyro->special 8: leave du Lustie's room.
if ((_vm->_gyro->_geidaFollows) && (!_vm->_gyro->_lustieIsAsleep)) {
- _vm->_visa->displayScrollChain('q', 63);
+ _vm->_scrolls->displayScrollChain('q', 63);
_sprites[1].turn(kDirDown);
_sprites[1].stopWalk();
_sprites[1]._callEachStepFl = false; // Geida
@@ -842,9 +841,9 @@ void Animation::callSpecial(uint16 which) {
if ((_vm->_gyro->_catacombX == 4) && (_vm->_gyro->_catacombY == 1)) {
// Into Geida's room.
if (_vm->_gyro->_objects[Gyro::kObjectKey - 1])
- _vm->_visa->displayScrollChain('q', 62);
+ _vm->_scrolls->displayScrollChain('q', 62);
else {
- _vm->_visa->displayScrollChain('q', 61);
+ _vm->_scrolls->displayScrollChain('q', 61);
return;
}
}
@@ -1065,7 +1064,7 @@ void Animation::arrowProcs(byte tripnum) {
// OK, it's hit him... what now?
_sprites[1]._callEachStepFl = false; // prevent recursion.
- _vm->_visa->displayScrollChain('Q', 47); // Complaint!
+ _vm->_scrolls->displayScrollChain('Q', 47); // Complaint!
_sprites[tripnum].remove(); // Deallocate the arrow.
#if 0
tr[1].done; { Deallocate normal pic of Avvy. }
@@ -1273,7 +1272,7 @@ void Animation::animLink() {
if (_mustExclaim) {
_mustExclaim = false;
- _vm->_visa->displayScrollChain('x', _sayWhat);
+ _vm->_scrolls->displayScrollChain('x', _sayWhat);
}
}
diff --git a/engines/avalanche/avalanche.cpp b/engines/avalanche/avalanche.cpp
index 6312546ef4..c768fc1346 100644
--- a/engines/avalanche/avalanche.cpp
+++ b/engines/avalanche/avalanche.cpp
@@ -64,7 +64,6 @@ AvalancheEngine::~AvalancheEngine() {
delete _avalot;
delete _pingo;
delete _scrolls;
- delete _visa;
delete _lucerna;
delete _enid;
delete _celer;
@@ -85,7 +84,6 @@ Common::ErrorCode AvalancheEngine::initialize() {
_gyro = new Gyro(this);
_pingo = new Pingo(this);
_scrolls = new Scrolls(this);
- _visa = new Visa(this);
_lucerna = new Lucerna(this);
_enid = new Enid(this);
_celer = new Celer(this);
diff --git a/engines/avalanche/avalanche.h b/engines/avalanche/avalanche.h
index 69c157fdbb..b93c117377 100644
--- a/engines/avalanche/avalanche.h
+++ b/engines/avalanche/avalanche.h
@@ -37,7 +37,6 @@
#include "avalanche/gyro2.h"
#include "avalanche/pingo2.h"
#include "avalanche/scrolls2.h"
-#include "avalanche/visa2.h"
#include "avalanche/lucerna2.h"
#include "avalanche/enid2.h"
#include "avalanche/celer2.h"
@@ -74,7 +73,6 @@ public:
Gyro *_gyro;
Pingo *_pingo;
Scrolls *_scrolls;
- Visa *_visa;
Lucerna *_lucerna;
Enid *_enid;
Celer *_celer;
diff --git a/engines/avalanche/avalot.cpp b/engines/avalanche/avalot.cpp
index fe5d4d040d..a5b3e06ff8 100644
--- a/engines/avalanche/avalot.cpp
+++ b/engines/avalanche/avalot.cpp
@@ -41,7 +41,6 @@
#include "avalanche/timer.h"
#include "avalanche/celer2.h"
#include "avalanche/enid2.h"
-#include "avalanche/visa2.h"
#include "avalanche/closing2.h"
#include "common/str.h"
@@ -179,7 +178,7 @@ void Avalot::setup() {
_vm->_lucerna->fxToggle();
_vm->_lucerna->thinkAbout(Gyro::kObjectMoney, Gyro::kThing);
- _vm->_visa->displayScrollChain('q', 83); // Info on the game, etc.
+ _vm->_scrolls->displayScrollChain('q', 83); // Info on the game, etc.
}
}
diff --git a/engines/avalanche/gyro2.cpp b/engines/avalanche/gyro2.cpp
index 9be471c9fd..8bfa53f616 100644
--- a/engines/avalanche/gyro2.cpp
+++ b/engines/avalanche/gyro2.cpp
@@ -33,7 +33,6 @@
#include "avalanche/pingo2.h"
#include "avalanche/scrolls2.h"
#include "avalanche/lucerna2.h"
-#include "avalanche/visa2.h"
#include "avalanche/acci2.h"
#include "avalanche/animation.h"
@@ -385,7 +384,7 @@ void Gyro::forceNumlock() {
bool Gyro::decreaseMoney(uint16 howmuchby) {
_money -= howmuchby;
if (_money < 0) {
- _vm->_visa->displayScrollChain('Q', 2); // "You are now denariusless!"
+ _vm->_scrolls->displayScrollChain('Q', 2); // "You are now denariusless!"
_vm->_lucerna->gameOver();
return false;
} else
diff --git a/engines/avalanche/lucerna2.cpp b/engines/avalanche/lucerna2.cpp
index dc635aae66..961202b7ad 100644
--- a/engines/avalanche/lucerna2.cpp
+++ b/engines/avalanche/lucerna2.cpp
@@ -32,7 +32,6 @@
#include "avalanche/lucerna2.h"
#include "avalanche/gyro2.h"
#include "avalanche/scrolls2.h"
-#include "avalanche/visa2.h"
#include "avalanche/timer.h"
#include "avalanche/animation.h"
#include "avalanche/enid2.h"
@@ -621,12 +620,12 @@ void Lucerna::enterRoom(byte room, byte ped) {
//setactivepage(1 - cp);
if ((_vm->_gyro->_objects[Gyro::kObjectWine - 1]) && (_vm->_gyro->_wineState != 3)) {
- _vm->_visa->displayScrollChain('q', 9); // Don't want to waste the wine!
+ _vm->_scrolls->displayScrollChain('q', 9); // Don't want to waste the wine!
_vm->_gyro->_objects[Gyro::kObjectWine - 1] = false;
refreshObjectList();
}
- _vm->_visa->displayScrollChain('q', 69);
+ _vm->_scrolls->displayScrollChain('q', 69);
break;
case r__catacombs:
diff --git a/engines/avalanche/module.mk b/engines/avalanche/module.mk
index 0f1722a482..6881a3e216 100644
--- a/engines/avalanche/module.mk
+++ b/engines/avalanche/module.mk
@@ -10,7 +10,6 @@ MODULE_OBJS = \
gyro2.o \
pingo2.o \
scrolls2.o \
- visa2.o \
lucerna2.o \
enid2.o \
celer2.o \
diff --git a/engines/avalanche/scrolls2.cpp b/engines/avalanche/scrolls2.cpp
index f96d56edc1..56e9b2f1c4 100644
--- a/engines/avalanche/scrolls2.cpp
+++ b/engines/avalanche/scrolls2.cpp
@@ -34,7 +34,6 @@
#include "avalanche/lucerna2.h"
#include "avalanche/animation.h"
#include "avalanche/acci2.h"
-#include "avalanche/visa2.h"
#include "avalanche/timer.h"
#include "common/textconsole.h"
@@ -44,6 +43,7 @@ namespace Avalanche {
Scrolls::Scrolls(AvalancheEngine *vm) {
_vm = vm;
+ _noError = true;
}
void Scrolls::init() {
@@ -729,7 +729,7 @@ void Scrolls::callScrollDriver() {
case 10:
switch (_vm->_gyro->_boxContent) {
case 0: // Sixpence.
- _vm->_visa->displayScrollChain('q', 37); // You find the sixpence.
+ _vm->_scrolls->displayScrollChain('q', 37); // You find the sixpence.
_vm->_gyro->_money += 6;
_vm->_gyro->_boxContent = _vm->_acci->kNothing;
_vm->_lucerna->incScore(2);
@@ -826,4 +826,239 @@ void Scrolls::musicalScroll() {
resetScroll();
}
+// From Visa:
+
+void Scrolls::unSkrimble() {
+ for (uint16 i = 0; i < _vm->_gyro->_bufSize; i++)
+ _vm->_gyro->_buffer[i] = (~(_vm->_gyro->_buffer[i] - (i + 1))) % 256;
+}
+
+void Scrolls::doTheBubble() {
+ _vm->_gyro->_bufSize++;
+ _vm->_gyro->_buffer[_vm->_gyro->_bufSize - 1] = 2;
+}
+
+/**
+ * Display a string in a scroll
+ * @remarks Originally called 'dixi'
+ */
+void Scrolls::displayScrollChain(char block, byte point, bool report, bool bubbling) {
+ Common::File indexfile;
+ if (!indexfile.open("avalot.idx"))
+ error("AVALANCHE: Visa: File not found: avalot.idx");
+
+ bool error = false;
+
+ indexfile.seek((toupper(block) - 65) * 2);
+ uint16 idx_offset = indexfile.readUint16LE();
+ if (idx_offset == 0)
+ error = true;
+
+ indexfile.seek(idx_offset + point * 2);
+ uint16 sez_offset = indexfile.readUint16LE();
+ if (sez_offset == 0)
+ error = true;
+
+ indexfile.close();
+
+ _noError = !error;
+
+ if (error) {
+ if (report) {
+ Common::String todisplay = Common::String::format("%cError accessing scroll %c%d", Scrolls::kControlBell, block, point);
+ _vm->_scrolls->displayText(todisplay);
+ }
+ return;
+ }
+
+ Common::File sezfile;
+ if (!sezfile.open("avalot.sez"))
+ ::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);
+ sezfile.close();
+ unSkrimble();
+
+ if (bubbling)
+ doTheBubble();
+
+ _vm->_scrolls->callScrollDriver();
+}
+
+/**
+ * Start speech
+ * @remarks Originally called 'speech'
+ */
+void Scrolls::speak(byte who, byte subject) {
+ if (subject == 0) { // No subject.
+ displayScrollChain('s', who, false, true);
+ return;
+ }
+
+ // Subject given.
+ _noError = false; // Assume that until we know otherwise.
+
+ Common::File indexfile;
+ if (!indexfile.open("converse.avd"))
+ error("AVALANCHE: Visa: File not found: converse.avd");
+
+ indexfile.seek(who * 2 - 2);
+ uint16 idx_offset = indexfile.readUint16LE();
+ uint16 next_idx_offset = indexfile.readUint16LE();
+
+ if ((idx_offset == 0) || ((((next_idx_offset - idx_offset) / 2) - 1) < subject))
+ return;
+
+ indexfile.seek(idx_offset + subject * 2);
+ uint16 sez_offset = indexfile.readUint16LE();
+ if ((sez_offset == 0) || (indexfile.err()))
+ return;
+ indexfile.close();
+
+ Common::File sezfile;
+ if (!sezfile.open("avalot.sez"))
+ 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);
+ sezfile.close();
+
+ unSkrimble();
+ doTheBubble();
+
+ _vm->_scrolls->callScrollDriver();
+ _noError = true;
+}
+
+void Scrolls::talkTo(byte whom) {
+ if (_vm->_acci->_person == _vm->_acci->kPardon) {
+ _vm->_acci->_person = _vm->_gyro->_subjectNum;
+ _vm->_gyro->_subjectNum = 0;
+ }
+
+ if (_vm->_gyro->_subjectNum == 0) {
+ switch (whom) {
+ case Gyro::kPeopleSpludwick:
+ if ((_vm->_gyro->_lustieIsAsleep) & (!_vm->_gyro->_objects[Gyro::kObjectPotion - 1])) {
+ displayScrollChain('q', 68);
+ _vm->_gyro->_objects[Gyro::kObjectPotion - 1] = true;
+ _vm->_lucerna->refreshObjectList();
+ _vm->_lucerna->incScore(3);
+ return;
+ } else if (_vm->_gyro->_talkedToCrapulus) {
+ // Spludwick - what does he need?
+ // 0 - let it through to use normal routine.
+ switch (_vm->_gyro->_givenToSpludwick) {
+ case 1: // Fallthrough is intended.
+ case 2: {
+ Common::String objStr = _vm->_gyro->getItem(Gyro::kSpludwicksOrder[_vm->_gyro->_givenToSpludwick]);
+ Common::String tmpStr = Common::String::format("Can you get me %s, please?%c2%c", objStr.c_str(), Scrolls::kControlRegister, Scrolls::kControlSpeechBubble);
+ _vm->_scrolls->displayText(tmpStr);
+ }
+ return;
+ case 3:
+ displayScrollChain('q', 30); // Need any help with the game?
+ return;
+ }
+ } else {
+ displayScrollChain('q', 42); // Haven't talked to Crapulus. Go and talk to him.
+ return;
+ }
+ break;
+ case Gyro::kPeopleIbythneth:
+ if (_vm->_gyro->_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.
+ displayScrollChain('q', 6); // "I'm Not Playing!"
+ return; // Zap back.
+ } else
+ _vm->_gyro->_askedDogfoodAboutNim = true;
+ break;
+ case Gyro::kPeopleAyles:
+ if (!_vm->_gyro->_aylesIsAwake) {
+ displayScrollChain('q', 43); // He's fast asleep!
+ return;
+ } else if (!_vm->_gyro->_givenPenToAyles) {
+ displayScrollChain('q', 44); // Can you get me a pen, Avvy?
+ return;
+ }
+ break;
+
+ case Gyro::kPeopleJacques:
+ displayScrollChain('q', 43);
+ return;
+
+ case Gyro::kPeopleGeida:
+ if (_vm->_gyro->_givenPotionToGeida)
+ _vm->_gyro->_geidaFollows = true;
+ else {
+ displayScrollChain('u', 17);
+ return;
+ }
+ break;
+ case Gyro::kPeopleSpurge:
+ if (!_vm->_gyro->_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);
+ return;
+ }
+ }
+ break;
+ }
+ // On a subject. Is there any reason to block it?
+ } else if ((whom == Gyro::kPeopleAyles) && (!_vm->_gyro->_aylesIsAwake)) {
+ displayScrollChain('q', 43); // He's fast asleep!
+ return;
+ }
+
+ if (whom > 149)
+ whom -= 149;
+
+ bool noMatches = true;
+ for (byte i = 0; i <= _vm->_animation->kSpriteNumbMax; i++) {
+ if (_vm->_animation->_sprites[i]._stat._acciNum == whom) {
+ Common::String tmpStr = Common::String::format("%c%c%c", Scrolls::kControlRegister, i + 49, Scrolls::kControlToBuffer);
+ _vm->_scrolls->displayText(tmpStr);
+ noMatches = false;
+ break;
+ }
+ }
+
+ if (noMatches) {
+ Common::String tmpStr = Common::String::format("%c%c%c", Scrolls::kControlRegister, Scrolls::kControlRegister, Scrolls::kControlToBuffer);
+ _vm->_scrolls->displayText(tmpStr);
+ }
+
+ speak(whom, _vm->_gyro->_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();
+ displayScrollChain('q', 1); // Circular from Cardiff.
+ _vm->_gyro->_talkedToCrapulus = true;
+ _vm->_gyro->_whereIs[Gyro::kPeopleCrapulus - 150] = 177; // Crapulus walks off.
+
+ AnimationType *spr = &_vm->_animation->_sprites[1];
+ spr->_vanishIfStill = true;
+ spr->walkTo(3); // Walks away.
+
+ _vm->_lucerna->incScore(2);
+ }
+}
+
} // End of namespace Avalanche
diff --git a/engines/avalanche/scrolls2.h b/engines/avalanche/scrolls2.h
index 026c5888e1..a8938a5d34 100644
--- a/engines/avalanche/scrolls2.h
+++ b/engines/avalanche/scrolls2.h
@@ -78,6 +78,10 @@ public:
Common::String displayMoney();
void musicalScroll(); // Practically this one is a mini-game which called when you play the harp in the monastery.
+ // From Visa:
+ void displayScrollChain(char block, byte point, bool report = true, bool bubbling = false);
+ void talkTo(byte whom);
+
private:
AvalancheEngine *_vm;
@@ -116,6 +120,12 @@ private:
void getIcon(int16 x, int16 y, byte which);
void drawSign(Common::String name, int16 xl, int16 yl, int16 y); // This is for drawing a big "about" or "gameover" picture loaded from a file into an empty scroll.
void loadFont();
+
+ // From Visa:
+ bool _noError;
+ void unSkrimble();
+ void doTheBubble();
+ void speak(byte who, byte subject);
};
} // End of namespace Avalanche
diff --git a/engines/avalanche/timer.cpp b/engines/avalanche/timer.cpp
index 2df7ce217a..4e3f3aa2a9 100644
--- a/engines/avalanche/timer.cpp
+++ b/engines/avalanche/timer.cpp
@@ -30,7 +30,6 @@
#include "avalanche/avalanche.h"
#include "avalanche/timer.h"
-#include "avalanche/visa2.h"
#include "avalanche/lucerna2.h"
#include "avalanche/animation.h"
#include "avalanche/scrolls2.h"
@@ -243,7 +242,7 @@ void Timer::openDrawbridge() {
}
void Timer::avariciusTalks() {
- _vm->_visa->displayScrollChain('q', _vm->_gyro->_avariciusTalk);
+ _vm->_scrolls->displayScrollChain('q', _vm->_gyro->_avariciusTalk);
_vm->_gyro->_avariciusTalk++;
if (_vm->_gyro->_avariciusTalk < 17)
@@ -286,25 +285,25 @@ void Timer::stairs() {
void Timer::cardiffSurvey() {
if (_vm->_gyro->_cardiffQuestionNum == 0) {
_vm->_gyro->_cardiffQuestionNum++;
- _vm->_visa->displayScrollChain('q', 27);
+ _vm->_scrolls->displayScrollChain('q', 27);
}
- _vm->_visa->displayScrollChain('z', _vm->_gyro->_cardiffQuestionNum);
+ _vm->_scrolls->displayScrollChain('z', _vm->_gyro->_cardiffQuestionNum);
_vm->_gyro->_interrogation = _vm->_gyro->_cardiffQuestionNum;
addTimer(182, kProcCardiffSurvey, kReasonCardiffsurvey);
}
void Timer::cardiffReturn() {
- _vm->_visa->displayScrollChain('q', 28);
+ _vm->_scrolls->displayScrollChain('q', 28);
cardiffSurvey(); // Add end of question.
}
void Timer::cwytalotInHerts() {
- _vm->_visa->displayScrollChain('q', 29);
+ _vm->_scrolls->displayScrollChain('q', 29);
}
void Timer::getTiedUp() {
- _vm->_visa->displayScrollChain('q', 34); // ...Trouble!
+ _vm->_scrolls->displayScrollChain('q', 34); // ...Trouble!
_vm->_gyro->_userMovesAvvy = false;
_vm->_gyro->_beenTiedUp = true;
_vm->_animation->stopWalking();
@@ -331,18 +330,18 @@ void Timer::hangAround() {
avvy->init(7, true, _vm->_animation); // Robin Hood
_vm->_gyro->_whereIs[Gyro::kPeopleRobinHood - 150] = r__robins;
_vm->_animation->appearPed(1, 2);
- _vm->_visa->displayScrollChain('q', 39);
+ _vm->_scrolls->displayScrollChain('q', 39);
avvy->walkTo(7);
addTimer(55, kProcHangAround2, kReasonHangingAround);
}
void Timer::hangAround2() {
- _vm->_visa->displayScrollChain('q', 40);
+ _vm->_scrolls->displayScrollChain('q', 40);
AnimationType *spr = &_vm->_animation->_sprites[1];
spr->_vanishIfStill = false;
spr->walkTo(4);
_vm->_gyro->_whereIs[Gyro::kPeopleFriarTuck - 150] = r__robins;
- _vm->_visa->displayScrollChain('q', 41);
+ _vm->_scrolls->displayScrollChain('q', 41);
_vm->_animation->_sprites[0].remove();
spr->remove(); // Get rid of Robin Hood and Friar Tuck.
@@ -387,7 +386,7 @@ void Timer::afterTheShootemup() {
warning("STUB: Timer::after_the_shootemup()");
- _vm->_visa->displayScrollChain('q', 70);
+ _vm->_scrolls->displayScrollChain('q', 70);
}
void Timer::jacquesWakesUp() {
@@ -396,7 +395,7 @@ void Timer::jacquesWakesUp() {
switch (_vm->_gyro->_jacquesState) { // Additional pictures.
case 1 :
_vm->_celer->drawBackgroundSprite(-1, -1, 1); // Eyes open.
- _vm->_visa->displayScrollChain('Q', 45);
+ _vm->_scrolls->displayScrollChain('Q', 45);
break;
case 2 : // Going through the door.
_vm->_celer->drawBackgroundSprite(-1, -1, 2); // Not on the floor.
@@ -444,7 +443,7 @@ void Timer::naughtyDuke() { // This is when the Duke comes in and takes your mon
void Timer::naughtyDuke2() {
AnimationType *spr = &_vm->_animation->_sprites[1];
- _vm->_visa->displayScrollChain('q', 48); // "Ha ha, it worked again!"
+ _vm->_scrolls->displayScrollChain('q', 48); // "Ha ha, it worked again!"
spr->walkTo(1); // Walk to the door.
spr->_vanishIfStill = true; // Then go away!
addTimer(32, kProcNaughtyDuke3, kReasonNaughtyDuke);
@@ -498,14 +497,14 @@ void Timer::jump() {
_vm->_gyro->_arrowInTheDoor = false; // You've got it.
_vm->_gyro->_objects[Gyro::kObjectBolt - 1] = true;
_vm->_lucerna->refreshObjectList();
- _vm->_visa->displayScrollChain('q', 50);
+ _vm->_scrolls->displayScrollChain('q', 50);
_vm->_lucerna->incScore(3);
}
}
}
void Timer::crapulusSaysSpludOut() {
- _vm->_visa->displayScrollChain('q', 56);
+ _vm->_scrolls->displayScrollChain('q', 56);
_vm->_gyro->_crapulusWillTell = false;
}
@@ -513,11 +512,11 @@ void Timer::buyDrinks() {
_vm->_celer->drawBackgroundSprite(-1, -1, 11); // Malagauche gets up again.
_vm->_gyro->_malagauche = 0;
- _vm->_visa->displayScrollChain('D', _vm->_gyro->_drinking); // Display message about it.
+ _vm->_scrolls->displayScrollChain('D', _vm->_gyro->_drinking); // Display message about it.
_vm->_pingo->wobble(); // Do the special effects.
- _vm->_visa->displayScrollChain('D', 1); // That'll be thruppence.
+ _vm->_scrolls->displayScrollChain('D', 1); // That'll be thruppence.
if (_vm->_gyro->decreaseMoney(3)) // Pay 3d.
- _vm->_visa->displayScrollChain('D', 3); // Tell 'em you paid up.
+ _vm->_scrolls->displayScrollChain('D', 3); // Tell 'em you paid up.
_vm->_acci->drink();
}
@@ -525,10 +524,10 @@ void Timer::buyWine() {
_vm->_celer->drawBackgroundSprite(-1, -1, 11); // Malagauche gets up again.
_vm->_gyro->_malagauche = 0;
- _vm->_visa->displayScrollChain('D', 50); // You buy the wine.
- _vm->_visa->displayScrollChain('D', 1); // It'll be thruppence.
+ _vm->_scrolls->displayScrollChain('D', 50); // You buy the wine.
+ _vm->_scrolls->displayScrollChain('D', 1); // It'll be thruppence.
if (_vm->_gyro->decreaseMoney(3)) {
- _vm->_visa->displayScrollChain('D', 4); // You paid up.
+ _vm->_scrolls->displayScrollChain('D', 4); // You paid up.
_vm->_gyro->_objects[Gyro::kObjectWine - 1] = true;
_vm->_lucerna->refreshObjectList();
_vm->_gyro->_wineState = 1; // OK Wine.
@@ -536,12 +535,12 @@ void Timer::buyWine() {
}
void Timer::callsGuards() {
- _vm->_visa->displayScrollChain('Q', 58); // "GUARDS!!!"
+ _vm->_scrolls->displayScrollChain('Q', 58); // "GUARDS!!!"
_vm->_lucerna->gameOver();
}
void Timer::greetsMonk() {
- _vm->_visa->displayScrollChain('Q', 59);
+ _vm->_scrolls->displayScrollChain('Q', 59);
_vm->_gyro->_enteredLustiesRoomAsMonk = true;
}
@@ -560,7 +559,7 @@ void Timer::meetAvaroid() {
_vm->_scrolls->displayText(tmpStr);
_vm->_lucerna->gameOver();
} else {
- _vm->_visa->displayScrollChain('Q', 60);
+ _vm->_scrolls->displayScrollChain('Q', 60);
_vm->_gyro->_metAvaroid = true;
addTimer(1, kProcRiseUpOubliette, kReasonRisingUpOubliette);
@@ -599,7 +598,7 @@ void Timer::robinHoodAndGeida() {
}
void Timer::robinHoodAndGeidaTalk() {
- _vm->_visa->displayScrollChain('q', 66);
+ _vm->_scrolls->displayScrollChain('q', 66);
AnimationType *avvy = &_vm->_animation->_sprites[0];
AnimationType *spr = &_vm->_animation->_sprites[1];
@@ -618,7 +617,7 @@ void Timer::avalotReturns() {
spr->remove();
avvy->init(0, true, _vm->_animation);
_vm->_animation->appearPed(1, 1);
- _vm->_visa->displayScrollChain('q', 67);
+ _vm->_scrolls->displayScrollChain('q', 67);
_vm->_gyro->_userMovesAvvy = true;
}
@@ -649,12 +648,12 @@ void Timer::arkataShouts() {
if (_vm->_gyro->_teetotal)
return;
- _vm->_visa->displayScrollChain('q', 76);
+ _vm->_scrolls->displayScrollChain('q', 76);
addTimer(160, kProcArkataShouts, kReasonArkataShouts);
}
void Timer::winning() {
- _vm->_visa->displayScrollChain('q', 79);
+ _vm->_scrolls->displayScrollChain('q', 79);
_vm->_pingo->winningPic();
warning("STUB: Timer::winning()");
@@ -698,7 +697,7 @@ void Timer::spludwickLeavesCauldron() {
}
void Timer::giveLuteToGeida() { // Moved here from Acci.
- _vm->_visa->displayScrollChain('Q', 86);
+ _vm->_scrolls->displayScrollChain('Q', 86);
_vm->_lucerna->incScore(4);
_vm->_gyro->_lustieIsAsleep = true;
_vm->_sequence->firstShow(5);
diff --git a/engines/avalanche/visa2.cpp b/engines/avalanche/visa2.cpp
deleted file mode 100644
index cbf0e05069..0000000000
--- a/engines/avalanche/visa2.cpp
+++ /dev/null
@@ -1,281 +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.
- */
-
-/* VISA The new Sez handler. (Replaces Access.) */
-
-#include "avalanche/avalanche.h"
-
-#include "avalanche/visa2.h"
-#include "avalanche/gyro2.h"
-#include "avalanche/scrolls2.h"
-#include "avalanche/acci2.h"
-#include "avalanche/lucerna2.h"
-#include "avalanche/animation.h"
-
-#include "common/textconsole.h"
-
-namespace Avalanche {
-
-Visa::Visa(AvalancheEngine *vm) {
- _vm = vm;
- _noError = true;
-}
-
-void Visa::unSkrimble() {
- for (uint16 i = 0; i < _vm->_gyro->_bufSize; i++)
- _vm->_gyro->_buffer[i] = (~(_vm->_gyro->_buffer[i] - (i + 1))) % 256;
-}
-
-void Visa::doTheBubble() {
- _vm->_gyro->_bufSize++;
- _vm->_gyro->_buffer[_vm->_gyro->_bufSize - 1] = 2;
-}
-
-/**
- * Display a string in a scroll
- * @remarks Originally called 'dixi'
- */
-void Visa::displayScrollChain(char block, byte point, bool report, bool bubbling) {
- Common::File indexfile;
- if (!indexfile.open("avalot.idx"))
- error("AVALANCHE: Visa: File not found: avalot.idx");
-
- bool error = false;
-
- indexfile.seek((toupper(block) - 65) * 2);
- uint16 idx_offset = indexfile.readUint16LE();
- if (idx_offset == 0)
- error = true;
-
- indexfile.seek(idx_offset + point * 2);
- uint16 sez_offset = indexfile.readUint16LE();
- if (sez_offset == 0)
- error = true;
-
- indexfile.close();
-
- _noError = !error;
-
- if (error) {
- if (report) {
- Common::String todisplay = Common::String::format("%cError accessing scroll %c%d", Scrolls::kControlBell, block, point);
- _vm->_scrolls->displayText(todisplay);
- }
- return;
- }
-
- Common::File sezfile;
- if (!sezfile.open("avalot.sez"))
- ::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);
- sezfile.close();
- unSkrimble();
-
- if (bubbling)
- doTheBubble();
-
- _vm->_scrolls->callScrollDriver();
-}
-
-/**
- * Start speech
- * @remarks Originally called 'speech'
- */
-void Visa::speak(byte who, byte subject) {
- if (subject == 0) { // No subject.
- displayScrollChain('s', who, false, true);
- return;
- }
-
- // Subject given.
- _noError = false; // Assume that until we know otherwise.
-
- Common::File indexfile;
- if (!indexfile.open("converse.avd"))
- error("AVALANCHE: Visa: File not found: converse.avd");
-
- indexfile.seek(who * 2 - 2);
- uint16 idx_offset = indexfile.readUint16LE();
- uint16 next_idx_offset = indexfile.readUint16LE();
-
- if ((idx_offset == 0) || ((((next_idx_offset - idx_offset) / 2) - 1) < subject))
- return;
-
- indexfile.seek(idx_offset + subject * 2);
- uint16 sez_offset = indexfile.readUint16LE();
- if ((sez_offset == 0) || (indexfile.err()))
- return;
- indexfile.close();
-
- Common::File sezfile;
- if (!sezfile.open("avalot.sez"))
- 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);
- sezfile.close();
-
- unSkrimble();
- doTheBubble();
-
- _vm->_scrolls->callScrollDriver();
- _noError = true;
-}
-
-void Visa::talkTo(byte whom) {
- if (_vm->_acci->_person == _vm->_acci->kPardon) {
- _vm->_acci->_person = _vm->_gyro->_subjectNum;
- _vm->_gyro->_subjectNum = 0;
- }
-
- if (_vm->_gyro->_subjectNum == 0) {
- switch (whom) {
- case Gyro::kPeopleSpludwick:
- if ((_vm->_gyro->_lustieIsAsleep) & (!_vm->_gyro->_objects[Gyro::kObjectPotion - 1])) {
- displayScrollChain('q', 68);
- _vm->_gyro->_objects[Gyro::kObjectPotion - 1] = true;
- _vm->_lucerna->refreshObjectList();
- _vm->_lucerna->incScore(3);
- return;
- } else if (_vm->_gyro->_talkedToCrapulus) {
- // Spludwick - what does he need?
- // 0 - let it through to use normal routine.
- switch (_vm->_gyro->_givenToSpludwick) {
- case 1: // Fallthrough is intended.
- case 2: {
- Common::String objStr = _vm->_gyro->getItem(Gyro::kSpludwicksOrder[_vm->_gyro->_givenToSpludwick]);
- Common::String tmpStr = Common::String::format("Can you get me %s, please?%c2%c", objStr.c_str(), Scrolls::kControlRegister, Scrolls::kControlSpeechBubble);
- _vm->_scrolls->displayText(tmpStr);
- }
- return;
- case 3:
- displayScrollChain('q', 30); // Need any help with the game?
- return;
- }
- } else {
- displayScrollChain('q', 42); // Haven't talked to Crapulus. Go and talk to him.
- return;
- }
- break;
- case Gyro::kPeopleIbythneth:
- if (_vm->_gyro->_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.
- displayScrollChain('q', 6); // "I'm Not Playing!"
- return; // Zap back.
- } else
- _vm->_gyro->_askedDogfoodAboutNim = true;
- break;
- case Gyro::kPeopleAyles:
- if (!_vm->_gyro->_aylesIsAwake) {
- displayScrollChain('q', 43); // He's fast asleep!
- return;
- } else if (!_vm->_gyro->_givenPenToAyles) {
- displayScrollChain('q', 44); // Can you get me a pen, Avvy?
- return;
- }
- break;
-
- case Gyro::kPeopleJacques:
- displayScrollChain('q', 43);
- return;
-
- case Gyro::kPeopleGeida:
- if (_vm->_gyro->_givenPotionToGeida)
- _vm->_gyro->_geidaFollows = true;
- else {
- displayScrollChain('u', 17);
- return;
- }
- break;
- case Gyro::kPeopleSpurge:
- if (!_vm->_gyro->_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);
- return;
- }
- }
- break;
- }
- // On a subject. Is there any reason to block it?
- } else if ((whom == Gyro::kPeopleAyles) && (!_vm->_gyro->_aylesIsAwake)) {
- displayScrollChain('q', 43); // He's fast asleep!
- return;
- }
-
- if (whom > 149)
- whom -= 149;
-
- bool noMatches = true;
- for (byte i = 0; i <= _vm->_animation->kSpriteNumbMax; i++) {
- if (_vm->_animation->_sprites[i]._stat._acciNum == whom) {
- Common::String tmpStr = Common::String::format("%c%c%c", Scrolls::kControlRegister, i + 49, Scrolls::kControlToBuffer);
- _vm->_scrolls->displayText(tmpStr);
- noMatches = false;
- break;
- }
- }
-
- if (noMatches) {
- Common::String tmpStr = Common::String::format("%c%c%c", Scrolls::kControlRegister, Scrolls::kControlRegister, Scrolls::kControlToBuffer);
- _vm->_scrolls->displayText(tmpStr);
- }
-
- speak(whom, _vm->_gyro->_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();
- displayScrollChain('q', 1); // Circular from Cardiff.
- _vm->_gyro->_talkedToCrapulus = true;
- _vm->_gyro->_whereIs[Gyro::kPeopleCrapulus - 150] = 177; // Crapulus walks off.
-
- AnimationType *spr = &_vm->_animation->_sprites[1];
- spr->_vanishIfStill = true;
- spr->walkTo(3); // Walks away.
-
- _vm->_lucerna->incScore(2);
- }
-}
-
-} // End of namespace Avalanche.
diff --git a/engines/avalanche/visa2.h b/engines/avalanche/visa2.h
deleted file mode 100644
index c811053fab..0000000000
--- a/engines/avalanche/visa2.h
+++ /dev/null
@@ -1,56 +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.
- */
-
-/* VISA The new Sez handler. (Replaces Access.) */
-
-#ifndef AVALANCHE_VISA2_H
-#define AVALANCHE_VISA2_H
-
-#include "common/scummsys.h"
-
-namespace Avalanche {
-class AvalancheEngine;
-
-class Visa {
-public:
- Visa(AvalancheEngine *vm);
-
- void displayScrollChain(char block, byte point, bool report = true, bool bubbling = false);
- void talkTo(byte whom);
-
-private:
- AvalancheEngine *_vm;
-
- bool _noError;
- void unSkrimble();
- void doTheBubble();
- void speak(byte who, byte subject);
-};
-
-} // End of namespace Avalanche.
-
-#endif // AVALANCHE_VISA2_H