2013-06-30 22:01:05 +02:00
/* ScummVM - Graphic Adventure Engine
2013-06-29 15:56:08 +02:00
*
* 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 .
*/
/* ACCIDENCE II The parser. */
# include "avalanche/avalanche.h"
2013-06-29 16:36:40 +02:00
# include "avalanche/acci2.h"
2013-06-29 15:56:08 +02:00
# include "avalanche/gyro2.h"
# include "avalanche/lucerna2.h"
# include "avalanche/scrolls2.h"
# include "avalanche/visa2.h"
# include "avalanche/timeout2.h"
# include "avalanche/trip6.h"
# include "avalanche/enid2.h"
# include "avalanche/celer2.h"
# include "avalanche/pingo2.h"
# include "avalanche/sequence2.h"
2013-06-29 16:36:40 +02:00
# include "common/textconsole.h"
2013-07-28 16:46:15 +02:00
# include <cstring>
2013-08-17 15:07:02 +02:00
# include <cmath>
2013-07-28 16:46:15 +02:00
2013-06-29 15:56:08 +02:00
namespace Avalanche {
2013-09-03 15:35:09 +02:00
const Acci : : VocabEntry Acci : : kVocabulary [ kParserWordsNum ] = {
// Verbs: 1-49
{ 1 , " EXAMINE " } , { 1 , " READ " } , { 1 , " XAM " } , // short
{ 2 , " OPEN " } , { 2 , " LEAVE " } , { 2 , " UNLOCK " } ,
{ 3 , " PAUSE " } , { 47 , " TA " } , // Early to avoid Take and Talk.
{ 4 , " TAKE " } , { 4 , " GET " } , { 4 , " PICK " } ,
{ 5 , " DROP " } , { 6 , " INVENTORY " } , { 7 , " TALK " } ,
{ 7 , " SAY " } , { 7 , " ASK " } ,
{ 8 , " GIVE " } , { 9 , " DRINK " } , { 9 , " IMBIBE " } ,
{ 9 , " DRAIN " } , { 10 , " LOAD " } , { 10 , " RESTORE " } ,
{ 11 , " SAVE " } , { 12 , " BRIBE " } , { 12 , " PAY " } ,
{ 13 , " LOOK " } , { 14 , " BREAK " } , { 15 , " QUIT " } ,
{ 15 , " EXIT " } , { 16 , " SIT " } , { 16 , " SLEEP " } ,
2013-06-29 15:56:08 +02:00
{ 17 , " STAND " } ,
2013-09-03 15:35:09 +02:00
{ 18 , " GO " } , { 19 , " INFO " } , { 20 , " UNDRESS " } ,
2013-06-29 15:56:08 +02:00
{ 20 , " DOFF " } ,
2013-09-03 15:35:09 +02:00
{ 21 , " DRESS " } , { 21 , " WEAR " } , { 21 , " DON " } ,
2013-06-29 15:56:08 +02:00
{ 22 , " PLAY " } ,
2013-09-03 15:35:09 +02:00
{ 22 , " STRUM " } , { 23 , " RING " } , { 24 , " HELP " } ,
{ 25 , " KENDAL " } , { 26 , " CAPYBARA " } , { 27 , " BOSS " } ,
{ 255 , " NINET " } , // block for NINETY
{ 28 , " URINATE " } , { 28 , " MINGITE " } , { 29 , " NINETY " } ,
2013-06-29 15:56:08 +02:00
{ 30 , " ABRACADABRA " } , { 30 , " PLUGH " } , { 30 , " XYZZY " } ,
2013-09-03 15:35:09 +02:00
{ 30 , " HOCUS " } , { 30 , " POCUS " } , { 30 , " IZZY " } ,
{ 30 , " WIZZY " } , { 30 , " PLOVER " } ,
2013-06-29 15:56:08 +02:00
{ 30 , " MELENKURION " } , { 30 , " ZORTON " } , { 30 , " BLERBI " } ,
2013-09-03 15:35:09 +02:00
{ 30 , " THURB " } , { 30 , " SNOEZE " } , { 30 , " SAMOHT " } ,
{ 30 , " NOSIDE " } , { 30 , " PHUGGG " } , { 30 , " KNERL " } ,
{ 30 , " MAGIC " } , { 30 , " KLAETU " } , { 30 , " VODEL " } ,
2013-06-29 15:56:08 +02:00
{ 30 , " BONESCROLLS " } , { 30 , " RADOF " } ,
{ 31 , " RESTART " } ,
2013-09-03 15:35:09 +02:00
{ 32 , " SWALLOW " } , { 32 , " EAT " } , { 33 , " LISTEN " } ,
{ 33 , " HEAR " } , { 34 , " BUY " } , { 34 , " PURCHASE " } ,
{ 34 , " ORDER " } , { 34 , " DEMAND " } ,
{ 35 , " ATTACK " } , { 35 , " HIT " } , { 35 , " KILL " } ,
{ 35 , " PUNCH " } , { 35 , " KICK " } , { 35 , " SHOOT " } ,
2013-06-29 15:56:08 +02:00
{ 35 , " FIRE " } ,
2013-09-03 15:35:09 +02:00
// Passwords: 36
2013-06-29 15:56:08 +02:00
{ 36 , " TIROS " } , { 36 , " WORDY " } , { 36 , " STACK " } ,
{ 36 , " SHADOW " } , { 36 , " OWL " } , { 36 , " ACORN " } ,
{ 36 , " DOMESDAY " } , { 36 , " FLOPPY " } , { 36 , " DIODE " } ,
{ 36 , " FIELD " } , { 36 , " COWSLIP " } , { 36 , " OSBYTE " } ,
{ 36 , " OSCLI " } , { 36 , " TIMBER " } , { 36 , " ADVAL " } ,
{ 36 , " NEUTRON " } , { 36 , " POSITRON " } , { 36 , " ELECTRON " } ,
{ 36 , " CIRCUIT " } , { 36 , " AURUM " } , { 36 , " PETRIFY " } ,
{ 36 , " EBBY " } , { 36 , " CATAPULT " } , { 36 , " GAMERS " } ,
{ 36 , " FUDGE " } , { 36 , " CANDLE " } , { 36 , " BEEB " } ,
{ 36 , " MICRO " } , { 36 , " SESAME " } , { 36 , " LORDSHIP " } ,
{ 37 , " DIR " } , { 37 , " LS " } , { 38 , " DIE " } ,
{ 39 , " SCORE " } ,
{ 40 , " PUT " } , { 40 , " INSERT " } , { 41 , " KISS " } ,
{ 41 , " SNOG " } , { 41 , " CUDDLE " } , { 42 , " CLIMB " } ,
{ 42 , " CLAMBER " } , { 43 , " JUMP " } , { 44 , " HIGHSCORES " } ,
{ 44 , " HISCORES " } , { 45 , " WAKEN " } , { 45 , " AWAKEN " } ,
{ 46 , " HELLO " } , { 46 , " HI " } , { 46 , " YO " } ,
2013-09-03 15:35:09 +02:00
{ 47 , " THANKS " } , // = 47, "ta", which was defined earlier.
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Nouns - Objects: 50-100
{ 50 , " WINE " } , { 50 , " BOOZE " } , { 50 , " NASTY " } ,
{ 50 , " VINEGAR " } , { 51 , " MONEYBAG " } ,
{ 51 , " BAG " } , { 51 , " CASH " } , { 51 , " DOSH " } ,
2013-06-29 15:56:08 +02:00
{ 51 , " WALLET " } ,
2013-09-03 15:35:09 +02:00
{ 52 , " BODKIN " } , { 52 , " DAGGER " } , { 53 , " POTION " } ,
{ 54 , " CHASTITY " } , { 54 , " BELT " } , { 55 , " BOLT " } ,
{ 55 , " ARROW " } , { 55 , " DART " } ,
{ 56 , " CROSSBOW " } , { 56 , " BOW " } , { 57 , " LUTE " } ,
{ 58 , " PILGRIM " } , { 58 , " BADGE " } , { 59 , " MUSHROOMS " } ,
2013-06-29 15:56:08 +02:00
{ 59 , " TOADSTOOLS " } , { 60 , " KEY " } , { 61 , " BELL " } ,
2013-09-03 15:35:09 +02:00
{ 62 , " PRESCRIPT " } , { 62 , " SCROLL " } , { 62 , " MESSAGE " } ,
{ 63 , " PEN " } , { 63 , " QUILL " } , { 64 , " INK " } ,
{ 64 , " INKPOT " } , { 65 , " CLOTHES " } , { 66 , " HABIT " } ,
{ 66 , " DISGUISE " } , { 67 , " ONION " } ,
2013-06-29 15:56:08 +02:00
{ 99 , " PASSWORD " } ,
2013-09-03 15:35:09 +02:00
// Objects from Also are placed between 101 and 131.
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Nouns - People - Male: 150-174
{ 150 , " AVVY " } , { 150 , " AVALOT " } , { 150 , " YOURSELF " } ,
{ 150 , " ME " } , { 150 , " MYSELF " } , { 151 , " SPLUDWICK " } ,
{ 151 , " THOMAS " } , { 151 , " ALCHEMIST " } , { 151 , " CHEMIST " } ,
{ 152 , " CRAPULUS " } , { 152 , " SERF " } , { 152 , " SLAVE " } ,
{ 158 , " DU " } , // <<< Put in early for Baron DU Lustie to save confusion with Duck & Duke.
{ 152 , " CRAPPY " } , { 153 , " DUCK " } , { 153 , " DOCTOR " } ,
2013-06-29 15:56:08 +02:00
{ 154 , " MALAGAUCHE " } ,
2013-09-03 15:35:09 +02:00
{ 155 , " FRIAR " } , { 155 , " TUCK " } , { 156 , " ROBIN " } ,
{ 156 , " HOOD " } , { 157 , " CWYTALOT " } , { 157 , " GUARD " } ,
2013-06-29 15:56:08 +02:00
{ 157 , " BRIDGEKEEP " } , { 158 , " BARON " } , { 158 , " LUSTIE " } ,
2013-09-03 15:35:09 +02:00
{ 159 , " DUKE " } , { 159 , " GRACE " } , { 160 , " DOGFOOD " } ,
{ 160 , " MINSTREL " } , { 161 , " TRADER " } , { 161 , " SHOPKEEPER " } ,
2013-06-29 15:56:08 +02:00
{ 161 , " STALLHOLDER " } ,
2013-09-03 15:35:09 +02:00
{ 162 , " PILGRIM " } , { 162 , " IBYTHNETH " } , { 163 , " ABBOT " } ,
{ 163 , " AYLES " } , { 164 , " PORT " } , { 165 , " SPURGE " } ,
{ 166 , " JACQUES " } , { 166 , " SLEEPER " } , { 166 , " RINGER " } ,
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Nouns - People - Female: 175-199
2013-06-29 15:56:08 +02:00
{ 175 , " WIFE " } , { 175 , " ARKATA " } , { 176 , " GEDALODAVA " } ,
{ 176 , " GEIDA " } , { 176 , " PRINCESS " } , { 178 , " WISE " } ,
{ 178 , " WITCH " } ,
2013-09-03 15:35:09 +02:00
// Pronouns: 200-224
2013-07-29 10:06:13 +02:00
{ 200 , " HIM " } , { 200 , " MAN " } , { 200 , " GUY " } ,
2013-06-29 15:56:08 +02:00
{ 200 , " DUDE " } , { 200 , " CHAP " } , { 200 , " FELLOW " } ,
{ 201 , " HER " } , { 201 , " GIRL " } , { 201 , " WOMAN " } ,
{ 202 , " IT " } , { 202 , " THING " } ,
2013-09-03 15:35:09 +02:00
{ 203 , " MONK " } , { 204 , " BARMAN " } , { 204 , " BARTENDER " } ,
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Prepositions: 225-249
2013-06-29 15:56:08 +02:00
{ 225 , " TO " } , { 226 , " AT " } , { 227 , " UP " } ,
{ 228 , " INTO " } , { 228 , " INSIDE " } , { 229 , " OFF " } ,
{ 230 , " UP " } , { 231 , " DOWN " } , { 232 , " ON " } ,
2013-09-03 15:35:09 +02:00
// Please: 251
2013-06-29 15:56:08 +02:00
{ 251 , " PLEASE " } ,
2013-09-03 15:35:09 +02:00
// About: 252
2013-06-29 15:56:08 +02:00
{ 252 , " ABOUT " } , { 252 , " CONCERNING " } ,
2013-09-03 15:35:09 +02:00
// Swear words: 253
/* I M P O R T A N T M E S S A G E
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
DO * NOT * READ THE LINES BELOW IF YOU ARE OF A SENSITIVE
DISPOSITION . THOMAS IS * NOT * RESPONSIBLE FOR THEM .
GOODNESS KNOWS WHO WROTE THEM .
READ THEM AT YOUR OWN RISK . BETTER STILL , DON ' T READ THEM .
WHY ARE YOU SNOOPING AROUND IN MY PROGRAM , ANYWAY ? */
2013-06-29 15:56:08 +02:00
{ 253 , " SHIT " } , { 28 , " PISS " } , { 28 , " PEE " } ,
{ 253 , " FART " } , { 253 , " FUCK " } , { 253 , " BALLS " } ,
{ 253 , " BLAST " } , { 253 , " BUGGER " } , { 253 , " KNICKERS " } ,
{ 253 , " BLOODY " } , { 253 , " HELL " } , { 253 , " DAMN " } ,
{ 253 , " SMEG " } ,
2013-09-03 15:35:09 +02:00
// ...and other even ruder words. You didn't read them, did you? Good. */
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Answer-back smart-alec words: 249
2013-06-29 15:56:08 +02:00
{ 249 , " YES " } , { 249 , " NO " } , { 249 , " BECAUSE " } ,
2013-09-03 15:35:09 +02:00
// Noise words: 255
2013-06-29 15:56:08 +02:00
{ 255 , " THE " } , { 255 , " A " } , { 255 , " NOW " } ,
{ 255 , " SOME " } , { 255 , " AND " } , { 255 , " THAT " } ,
{ 255 , " POCUS " } , { 255 , " HIS " } ,
2013-09-03 15:35:09 +02:00
{ 255 , " THIS " } , { 255 , " SENTINEL " } // for "Ken SENT Me"
} ;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
const char Acci : : kWhat [ ] = " That's not possible! " ;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
const Acci : : RankType Acci : : kRanks [ 9 ] = {
{ 0 , " Beginner " } , { 10 , " Novice " } ,
2013-06-29 15:56:08 +02:00
{ 20 , " Improving " } , { 35 , " Not bad " } ,
{ 50 , " Passable " } , { 65 , " Good " } ,
{ 80 , " Experienced " } , { 108 , " The BEST! " } ,
{ 32767 , " copyright'93 " }
} ;
2013-07-24 19:43:10 +02:00
Acci : : Acci ( AvalancheEngine * vm ) {
2013-06-29 15:56:08 +02:00
_vm = vm ;
}
void Acci : : init ( ) {
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > weirdword = false ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : clearWords ( ) {
2013-09-04 13:55:31 +02:00
for ( byte i = 0 ; i < 11 ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( ! _realWords [ i ] . empty ( ) )
_realWords [ i ] . clear ( ) ;
2013-09-04 13:55:31 +02:00
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
byte Acci : : wordNum ( Common : : String word ) {
if ( word . empty ( ) )
2013-07-28 16:46:15 +02:00
return 0 ;
2013-07-28 18:50:46 +02:00
2013-09-04 13:55:31 +02:00
for ( int32 i = kParserWordsNum - 1 ; i > = 0 ; i - - ) {
2013-09-03 15:35:09 +02:00
if ( kVocabulary [ i ] . _word = = word )
return kVocabulary [ i ] . _number ;
2013-09-04 13:55:31 +02:00
}
2013-08-25 17:10:29 +02:00
// If not found as a whole, we look for it as a substring.
2013-09-04 13:55:31 +02:00
for ( int32 i = kParserWordsNum - 1 ; i > = 0 ; i - - ) {
2013-09-03 15:35:09 +02:00
if ( Common : : String ( kVocabulary [ i ] . _word . c_str ( ) , word . size ( ) ) = = word )
return kVocabulary [ i ] . _number ;
2013-09-04 13:55:31 +02:00
}
2013-07-28 20:57:40 +02:00
2013-09-03 15:35:09 +02:00
return kPardon ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : replace ( Common : : String oldChars , byte newChar ) {
int16 pos = _vm - > _parser - > pos ( oldChars , _thats ) ;
while ( pos ! = - 1 ) {
if ( newChar = = 0 )
_thats . deleteChar ( pos ) ;
2013-07-28 20:57:40 +02:00
else {
2013-09-03 15:35:09 +02:00
for ( byte i = pos ; i < pos + oldChars . size ( ) ; i + + )
_thats . deleteChar ( pos ) ;
_thats . insertChar ( newChar , pos ) ;
2013-07-28 20:57:40 +02:00
}
2013-09-03 15:35:09 +02:00
pos = _vm - > _parser - > pos ( oldChars , _thats ) ;
2013-07-28 20:57:40 +02:00
}
2013-06-29 15:56:08 +02:00
}
Common : : String Acci : : rank ( ) {
2013-09-03 15:35:09 +02:00
for ( byte i = 0 ; i < 8 ; i + + ) {
if ( ( _vm - > _gyro - > dna . score > = kRanks [ i ] . _score ) & & ( _vm - > _gyro - > dna . score < kRanks [ i + 1 ] . _score ) ) {
return kRanks [ i ] . _title ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
}
2013-08-17 15:07:02 +02:00
return " " ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
Common : : String Acci : : totalTime ( ) {
// There are 65535 clock ticks in a second, 1092.25 in a minute, and 65535 in an hour.
const double ticksInOneSec = ( double ) ( 65535 ) / 3600 ;
2013-06-29 15:56:08 +02:00
uint16 h , m , s ;
2013-09-03 15:35:09 +02:00
h = _vm - > _gyro - > dna . total_time / ticksInOneSec ; // No. of seconds.
2013-09-05 01:27:51 +02:00
h = floor ( ( float ) h ) ;
2013-08-17 15:07:02 +02:00
m = h % 3600 ;
h = h / 3600 ;
s = m % 60 ;
m = m / 60 ;
2013-09-03 15:35:09 +02:00
Common : : String result = " You've been playing for " ;
2013-08-17 15:07:02 +02:00
if ( h > 0 )
2013-09-03 15:35:09 +02:00
result = result + _vm - > _gyro - > strf ( h ) + " hours, " ;
2013-08-17 15:07:02 +02:00
if ( ( m > 0 ) | | ( h ! = 0 ) )
2013-09-03 15:35:09 +02:00
result = result + _vm - > _gyro - > strf ( m ) + " minutes and " ;
return result + _vm - > _gyro - > strf ( s ) + " seconds. " ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : cheatParse ( Common : : String codes ) {
2013-09-04 12:32:10 +02:00
// uint16 num;
// int16 e;
// char cmd;
// int16 se, sx, sy;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::cheatParse() " ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : stripPunctuation ( Common : : String & word ) {
2013-07-28 16:46:15 +02:00
const char punct [ ] = " ~`!@#$%^&*()_+-={}[]: \" |;' \\ ,./<>? " ;
2013-09-04 13:55:31 +02:00
for ( byte i = 0 ; i < 32 ; i + + ) {
for ( ; ; ) {
2013-09-03 15:35:09 +02:00
int16 pos = _vm - > _parser - > pos ( Common : : String ( punct [ i ] ) , word ) ;
if ( pos = = - 1 )
2013-07-28 16:46:15 +02:00
break ;
2013-09-03 15:35:09 +02:00
word . deleteChar ( pos ) ;
2013-09-04 13:55:31 +02:00
}
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : displayWhat ( byte target , bool animate , bool & ambiguous ) {
if ( target = = kPardon ) {
ambiguous = true ;
2013-07-28 23:13:34 +02:00
if ( animate )
_vm - > _scrolls - > display ( " Whom? " ) ;
else
_vm - > _scrolls - > display ( " What? " ) ;
} else {
if ( animate )
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( Common : : String ( " { " ) + _vm - > _gyro - > getname ( target ) + " } " ) ;
2013-07-28 23:13:34 +02:00
else {
2013-09-03 15:35:09 +02:00
Common : : String z = _vm - > _gyro - > get_better ( target ) ;
2013-07-28 23:13:34 +02:00
if ( z ! = " " )
_vm - > _scrolls - > display ( Common : : String ( " { " ) + z + " } " ) ;
}
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
bool Acci : : doPronouns ( ) {
2013-07-28 23:13:34 +02:00
bool ambiguous = false ;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
for ( byte i = 0 ; i < _thats . size ( ) ; i + + ) {
byte wordCode = _thats [ i ] ;
switch ( wordCode ) {
2013-07-28 23:13:34 +02:00
case 200 : {
2013-09-03 15:35:09 +02:00
displayWhat ( _vm - > _gyro - > him , true , ambiguous ) ;
_thats . setChar ( _vm - > _gyro - > him , i ) ;
2013-07-28 23:13:34 +02:00
}
break ;
case 201 : {
2013-09-03 15:35:09 +02:00
displayWhat ( _vm - > _gyro - > her , true , ambiguous ) ;
_thats . setChar ( _vm - > _gyro - > her , i ) ;
2013-07-28 23:13:34 +02:00
}
break ;
case 202 : {
2013-09-03 15:35:09 +02:00
displayWhat ( _vm - > _gyro - > it , false , ambiguous ) ;
_thats . setChar ( _vm - > _gyro - > it , i ) ;
2013-07-28 23:13:34 +02:00
}
break ;
2013-07-29 10:06:13 +02:00
}
2013-07-28 23:13:34 +02:00
}
2013-06-29 15:56:08 +02:00
2013-07-28 23:13:34 +02:00
return ambiguous ;
2013-06-29 15:56:08 +02:00
}
2013-08-26 20:13:43 +02:00
2013-09-03 15:35:09 +02:00
void Acci : : properNouns ( ) {
2013-08-26 20:13:43 +02:00
_vm - > _parser - > _inputText . toLowercase ( ) ;
// We set every word's first character to uppercase.
2013-09-04 13:55:31 +02:00
for ( byte i = 1 ; i < ( _vm - > _parser - > _inputText . size ( ) - 1 ) ; i + + ) {
2013-08-26 20:13:43 +02:00
if ( _vm - > _parser - > _inputText [ i ] = = ' ' )
_vm - > _parser - > _inputText . setChar ( toupper ( _vm - > _parser - > _inputText [ i + 1 ] ) , i + 1 ) ;
2013-09-04 13:55:31 +02:00
}
2013-08-26 20:13:43 +02:00
// And the first character as well.
_vm - > _parser - > _inputText . setChar ( toupper ( _vm - > _parser - > _inputText [ 0 ] ) , 0 ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : sayIt ( ) {
2013-08-26 20:13:43 +02:00
Common : : String x = _vm - > _parser - > _inputText ;
x . setChar ( toupper ( x [ 0 ] ) , 0 ) ;
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + ' 1 ' + x
+ ' . ' + _vm - > _scrolls - > kControlSpeechBubble + _vm - > _scrolls - > kControlRegister + ' 2 ' ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : storeInterrogation ( byte interrogation ) {
2013-08-26 20:13:43 +02:00
if ( _vm - > _parser - > _inputText . empty ( ) )
return ;
2013-09-03 15:35:09 +02:00
// Strip _vm->_parser->_inputText:
2013-08-26 20:13:43 +02:00
while ( ( _vm - > _parser - > _inputText [ 0 ] = = ' ' ) & & ( ! _vm - > _parser - > _inputText . empty ( ) ) )
_vm - > _parser - > _inputText . deleteChar ( 0 ) ;
while ( ( _vm - > _parser - > _inputText . lastChar ( ) = = ' ' ) & & ( ! _vm - > _parser - > _inputText . empty ( ) ) )
_vm - > _parser - > _inputText . deleteLastChar ( ) ;
2013-09-03 15:35:09 +02:00
_vm - > _timeout - > lose_timer ( _vm - > _timeout - > reason_cardiffsurvey ) ; // If you want to use any other timer, put this into the case statement.
2013-08-26 20:13:43 +02:00
switch ( interrogation ) {
2013-09-04 13:55:31 +02:00
case 1 :
_vm - > _parser - > _inputText . toLowercase ( ) ;
sayIt ( ) ;
_vm - > _gyro - > dna . like2drink = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 2 ;
2013-08-26 20:13:43 +02:00
break ;
2013-09-04 13:55:31 +02:00
case 2 :
properNouns ( ) ;
sayIt ( ) ;
_vm - > _gyro - > dna . favourite_song = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 3 ;
2013-08-26 20:13:43 +02:00
break ;
2013-09-04 13:55:31 +02:00
case 3 :
properNouns ( ) ;
sayIt ( ) ;
_vm - > _gyro - > dna . worst_place_on_earth = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 4 ;
2013-08-26 20:13:43 +02:00
break ;
2013-09-04 13:55:31 +02:00
case 4 :
_vm - > _parser - > _inputText . toLowercase ( ) ;
sayIt ( ) ;
if ( ! _vm - > _gyro - > dna . spare_evening . empty ( ) )
_vm - > _gyro - > dna . spare_evening . clear ( ) ;
_vm - > _gyro - > dna . spare_evening = _vm - > _parser - > _inputText ;
2013-09-05 02:29:09 +02:00
_vm - > _visa - > dixi ( ' z ' , 5 ) ; // His closing statement...
_vm - > _trip - > tr [ 1 ] . walkto ( 4 ) ; // The end of the drawbridge
_vm - > _trip - > tr [ 1 ] . vanishifstill = true ; // Then go away!
2013-09-04 13:55:31 +02:00
_vm - > _gyro - > magics [ 1 ] . op = _vm - > _gyro - > nix ;
_vm - > _gyro - > dna . cardiff_things = 5 ;
2013-08-26 20:13:43 +02:00
break ;
case 99 :
//store_high(_vm->_parser->_inputText);
warning ( " STUB: Acci::store_interrogation() " ) ;
break ;
}
2013-06-29 15:56:08 +02:00
2013-08-26 20:13:43 +02:00
if ( interrogation < 4 )
_vm - > _timeout - > cardiff_survey ( ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : parse ( ) {
2013-07-28 16:46:15 +02:00
// First parsing - word identification
2013-09-03 15:35:09 +02:00
if ( ! _thats . empty ( ) )
_thats . clear ( ) ;
byte n = 0 ;
_polite = false ;
_verb = kPardon ;
_thing = kPardon ;
_thing2 = kPardon ;
_person = kPardon ;
clearWords ( ) ;
2013-07-28 20:57:40 +02:00
// A cheat mode attempt.
2013-07-28 16:46:15 +02:00
if ( _vm - > _parser - > _inputText [ 0 ] = = ' . ' ) {
2013-09-03 15:35:09 +02:00
cheatParse ( _vm - > _parser - > _inputText ) ;
_thats = kNothing ;
2013-07-28 16:46:15 +02:00
return ;
2013-07-28 20:57:40 +02:00
}
2013-07-28 16:46:15 +02:00
// Are we being interrogated right now?
if ( _vm - > _gyro - > interrogation > 0 ) {
2013-09-03 15:35:09 +02:00
storeInterrogation ( _vm - > _gyro - > interrogation ) ;
2013-07-28 16:46:15 +02:00
_vm - > _gyro - > weirdword = true ;
return ;
}
2013-07-28 20:57:40 +02:00
// Actually process the command.
2013-09-03 15:35:09 +02:00
Common : : String inputText = _vm - > _parser - > _inputText + ' ' ;
Common : : String inputTextUpper = inputText ;
inputTextUpper . toUppercase ( ) ;
while ( ! inputTextUpper . empty ( ) ) {
while ( ( ! inputTextUpper . empty ( ) ) & & ( inputTextUpper [ 0 ] = = ' ' ) ) {
inputTextUpper . deleteChar ( 0 ) ;
inputText . deleteChar ( 0 ) ;
2013-07-28 16:46:15 +02:00
}
2013-09-03 15:35:09 +02:00
if ( inputTextUpper . empty ( ) )
2013-07-30 21:32:14 +02:00
break ;
2013-07-28 16:46:15 +02:00
2013-07-28 20:57:40 +02:00
// Get the following word of the strings.
2013-09-03 15:35:09 +02:00
byte size = _vm - > _parser - > pos ( Common : : String ( ' ' ) , inputTextUpper ) + 1 ;
2013-07-28 16:46:15 +02:00
char * subStr = new char [ size ] ;
2013-09-03 15:35:09 +02:00
Common : : strlcpy ( subStr , inputTextUpper . c_str ( ) , size ) ;
Common : : String thisword = subStr ;
Common : : strlcpy ( subStr , inputText . c_str ( ) , size ) ;
_realWords [ n ] = subStr ;
2013-07-28 16:46:15 +02:00
delete [ ] subStr ;
2013-09-03 15:35:09 +02:00
stripPunctuation ( inputTextUpper ) ;
2013-07-28 16:46:15 +02:00
2013-09-03 15:35:09 +02:00
bool notfound = true ;
2013-07-28 18:50:46 +02:00
2013-07-28 20:57:40 +02:00
// Check also[] first, which conatins words about the actual room.
2013-07-28 16:46:15 +02:00
if ( ! thisword . empty ( ) ) {
2013-09-03 15:35:09 +02:00
for ( byte i = 0 ; i < 31 ; i + + ) {
if ( ( _vm - > _gyro - > also [ i ] [ 0 ] ! = 0 ) & & ( _vm - > _parser - > pos ( ' , ' + thisword , * _vm - > _gyro - > also [ i ] [ 0 ] ) > - 1 ) ) {
_thats = _thats + Common : : String ( 99 + i ) ;
2013-07-28 16:46:15 +02:00
notfound = false ;
}
}
}
2013-07-29 10:06:13 +02:00
// Check Accis's own table (words[]) for "global" commands.
2013-07-28 16:46:15 +02:00
if ( notfound ) {
2013-09-03 15:35:09 +02:00
byte answer = wordNum ( thisword ) ;
if ( answer = = kPardon ) {
2013-07-28 16:46:15 +02:00
notfound = true ;
2013-09-03 15:35:09 +02:00
_thats = _thats + kPardon ;
2013-07-28 16:46:15 +02:00
} else
2013-09-03 15:35:09 +02:00
_thats = _thats + answer ;
2013-07-28 16:46:15 +02:00
n + + ;
}
2013-07-28 20:57:40 +02:00
// Delete words we already processed.
2013-09-03 15:35:09 +02:00
int16 spacePos = _vm - > _parser - > pos ( Common : : String ( ' ' ) , inputTextUpper ) ;
2013-09-04 13:55:31 +02:00
if ( spacePos > - 1 ) {
2013-07-28 18:50:46 +02:00
for ( byte i = 0 ; i < = spacePos ; i + + )
2013-09-03 15:35:09 +02:00
inputTextUpper . deleteChar ( 0 ) ;
2013-09-04 13:55:31 +02:00
}
2013-09-03 15:35:09 +02:00
spacePos = _vm - > _parser - > pos ( Common : : String ( ' ' ) , inputText ) ;
2013-09-04 13:55:31 +02:00
if ( spacePos > - 1 ) {
2013-07-28 18:50:46 +02:00
for ( byte i = 0 ; i < = spacePos ; i + + )
2013-09-03 15:35:09 +02:00
inputText . deleteChar ( 0 ) ;
2013-09-04 13:55:31 +02:00
}
2013-07-28 16:46:15 +02:00
}
2013-09-04 12:32:10 +02:00
if ( _vm - > _parser - > pos ( Common : : String ( ' \xFE ' ) , _thats ) > - 1 )
_unknown = _realWords [ _vm - > _parser - > pos ( Common : : String ( ' \xFE ' ) , _thats ) ] ;
2013-09-05 08:02:25 +02:00
else if ( ! _unknown . empty ( ) )
_unknown . clear ( ) ;
2013-07-28 20:57:40 +02:00
// Replace words' codes that mean the same.
2013-09-05 02:29:09 +02:00
replace ( Common : : String ( ' \xFF ' ) , 0 ) ; // zap noise words
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xD ' ) + ' \xE2 ' , 1 ) ; // "look at" = "examine"
replace ( Common : : String ( ' \xD ' ) + ' \xE4 ' , 1 ) ; // "look in" = "examine"
replace ( Common : : String ( ' \x4 ' ) + ' \xE6 ' , 17 ) ; // "get up" = "stand"
replace ( Common : : String ( ' \x4 ' ) + ' \xE7 ' , 17 ) ; // "get down" = "stand"... well, why not?
replace ( Common : : String ( ' \x12 ' ) + ' \xE4 ' , 2 ) ; // "go in" = "open [door]"
replace ( Common : : String ( ' \x1C ' ) + ' \xE5 ' , 253 ) ; // "P' off" is a swear word
replace ( Common : : String ( ' \x4 ' ) + ' \x6 ' , 6 ) ; // "Take inventory" (remember Colossal Adventure?)
replace ( Common : : String ( ' \x28 ' ) + ' \xE8 ' , 21 ) ; // "put on" = "don"
replace ( Common : : String ( ' \x4 ' ) + ' \xE5 ' , 20 ) ; // "take off" = "doff"
2013-07-28 16:46:15 +02:00
2013-09-03 15:35:09 +02:00
// Words that could mean more than one _person
2013-07-28 23:13:34 +02:00
if ( _vm - > _gyro - > dna . room = = r__nottspub )
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xCC ' ) , 164 ) ; // Barman = Port
2013-07-28 23:13:34 +02:00
else
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xCC ' ) , 154 ) ; // Barman = Malagauche
2013-07-28 23:13:34 +02:00
switch ( _vm - > _gyro - > dna . room ) {
case r__aylesoffice :
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xCB ' ) , 163 ) ; // Monk = Ayles
2013-07-28 23:13:34 +02:00
break ;
case r__musicroom :
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xCB ' ) , 166 ) ; // Monk = Jacques
2013-07-28 23:13:34 +02:00
break ;
default :
2013-09-04 12:32:10 +02:00
replace ( Common : : String ( ' \xCB ' ) , 162 ) ; // Monk = Ibythneth
2013-07-28 23:13:34 +02:00
}
2013-09-03 15:35:09 +02:00
if ( doPronouns ( ) ) {
2013-07-28 23:13:34 +02:00
_vm - > _gyro - > weirdword = true ;
2013-09-03 15:35:09 +02:00
_thats = kNothing ;
2013-07-28 23:13:34 +02:00
return ;
}
2013-07-28 16:46:15 +02:00
2013-07-29 10:06:13 +02:00
// Second parsing.
if ( ! _vm - > _gyro - > subject . empty ( ) )
_vm - > _gyro - > subject . clear ( ) ;
_vm - > _gyro - > subjnumber = 0 ; // Find subject of conversation.
2013-09-05 01:27:51 +02:00
for ( int i = 0 ; ( i < 11 ) & & ! _realWords [ i ] . empty ( ) ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( ( _realWords [ i ] [ 0 ] = = ' \' ' ) | | ( _realWords [ i ] [ 0 ] = = ' \" ' ) ) {
_vm - > _gyro - > subjnumber = ( byte ) _thats [ i ] ;
_thats . setChar ( kMoved , i ) ;
2013-07-29 10:06:13 +02:00
break ;
}
}
2013-09-04 13:55:31 +02:00
if ( ( _vm - > _gyro - > subjnumber = = 0 ) & & ! _thats . empty ( ) ) { // Still not found.
2013-09-05 01:27:51 +02:00
for ( uint16 i = 0 ; i < _thats . size ( ) - 1 ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( ( byte ) _thats [ i ] = = 252 ) { // The word is "about", or something similar.
_vm - > _gyro - > subjnumber = ( byte ) _thats [ i + 1 ] ;
_thats . setChar ( 0 , i + 1 ) ;
2013-07-29 10:06:13 +02:00
break ;
}
2013-09-04 13:55:31 +02:00
}
}
2013-07-29 10:06:13 +02:00
2013-09-04 13:55:31 +02:00
if ( ( _vm - > _gyro - > subjnumber = = 0 ) & & ! _thats . empty ( ) ) { // STILL not found! Must be the word after "say".
2013-09-05 01:27:51 +02:00
for ( uint16 i = 0 ; i < _thats . size ( ) - 1 ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( ( ( byte ) _thats [ i ] = = 7 ) & & ( ( byte ) _thats [ i + 1 ] ! = 0 ) & & ! ( ( 225 < = ( byte ) _thats [ i + 1 ] ) & & ( ( byte ) _thats [ i + 1 ] < = 229 ) ) ) {
2013-07-29 10:06:13 +02:00
// SAY not followed by a preposition
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > subjnumber = ( byte ) _thats [ i + 1 ] ;
_thats . setChar ( 0 , i + 1 ) ;
2013-07-29 10:06:13 +02:00
break ;
}
2013-09-04 13:55:31 +02:00
}
}
2013-07-29 10:06:13 +02:00
2013-09-05 01:27:51 +02:00
for ( int16 i = _thats . size ( ) - 1 ; i > = 0 ; i - - ) { // Reverse order, so first will be used.
2013-09-03 15:35:09 +02:00
if ( ( ( byte ) _thats [ i ] = = 253 ) | | ( ( byte ) _thats [ i ] = = 249 ) | | ( ( 1 < = ( byte ) _thats [ i ] ) & & ( ( byte ) _thats [ i ] < = 49 ) ) )
_verb = ( byte ) _thats [ i ] ;
else if ( ( 50 < = ( byte ) _thats [ i ] ) & & ( ( byte ) _thats [ i ] < = 149 ) ) {
_thing2 = _thing ;
_thing = ( byte ) _thats [ i ] ;
} else if ( ( 150 < = ( byte ) _thats [ i ] ) & & ( ( byte ) _thats [ i ] < = 199 ) )
_person = ( byte ) _thats [ i ] ;
else if ( ( byte ) _thats [ i ] = = 251 )
_polite = true ;
2013-09-04 13:55:31 +02:00
}
2013-09-03 15:35:09 +02:00
2013-09-04 13:55:31 +02:00
if ( ( ! _unknown . empty ( ) ) & & ( _verb ! = kVerbCodeExam ) & & ( _verb ! = kVerbCodeTalk ) & & ( _verb ! = kVerbCodeSave ) & & ( _verb ! = kVerbCodeLoad ) & & ( _verb ! = kVerbCodeDir ) ) {
_vm - > _scrolls - > display ( Common : : String ( " Sorry, but I have no idea kWhat \" " ) + _unknown + " \" means. Can you rephrase it? " ) ;
_vm - > _gyro - > weirdword = true ;
} else
_vm - > _gyro - > weirdword = false ;
2013-07-29 10:06:13 +02:00
2013-09-03 15:35:09 +02:00
if ( _thats . empty ( ) )
_thats = kNothing ;
2013-07-29 10:06:13 +02:00
2013-09-03 15:35:09 +02:00
if ( _thing ! = kPardon )
_vm - > _gyro - > it = _thing ;
2013-07-29 10:06:13 +02:00
2013-09-04 13:55:31 +02:00
if ( _person ! = kPardon ) {
2013-09-03 15:35:09 +02:00
if ( _person < 175 )
_vm - > _gyro - > him = _person ;
2013-07-29 10:06:13 +02:00
else
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > her = _person ;
2013-09-04 13:55:31 +02:00
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : examineObject ( ) {
if ( _thing ! = _vm - > _gyro - > thinks )
_vm - > _lucerna - > thinkabout ( _thing , _vm - > _gyro - > a_thing ) ;
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : wine :
2013-08-17 15:07:02 +02:00
switch ( _vm - > _gyro - > dna . winestate ) { // 4 is perfect wine. 0 is not holding the wine.
case 1 :
_vm - > _visa - > dixi ( ' t ' , 1 ) ; // Normal examine wine scroll
break ;
case 2 :
_vm - > _visa - > dixi ( ' d ' , 6 ) ; // Bad wine
break ;
case 3 :
_vm - > _visa - > dixi ( ' d ' , 7 ) ; // Vinegar
break ;
}
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : onion :
2013-08-17 15:07:02 +02:00
if ( _vm - > _gyro - > dna . rotten_onion )
_vm - > _visa - > dixi ( ' q ' , 21 ) ; // Yucky onion.
else
_vm - > _visa - > dixi ( ' t ' , 18 ) ; // Normal onion scroll
break ;
default :
2013-09-03 15:35:09 +02:00
_vm - > _visa - > dixi ( ' t ' , _thing ) ; // <<< Ordinarily
2013-08-17 15:07:02 +02:00
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
bool Acci : : isPersonHere ( ) { // Person equivalent of "holding".
if ( ( _person = = kPardon ) | | ( _person = = 0 ) | | ( _vm - > _gyro - > whereis [ _person - 150 ] = = _vm - > _gyro - > dna . room ) )
2013-08-12 13:28:28 +02:00
return true ;
else {
2013-09-03 15:35:09 +02:00
if ( _person < 175 )
2013-08-12 13:28:28 +02:00
_vm - > _scrolls - > display ( Common : : String ( ' H ' ) + _vm - > _scrolls - > kControlToBuffer ) ;
else
_vm - > _scrolls - > display ( Common : : String ( " Sh " ) + _vm - > _scrolls - > kControlToBuffer ) ;
_vm - > _scrolls - > display ( " e isn't around at the moment. " ) ;
return false ;
}
2013-06-29 15:56:08 +02:00
}
void Acci : : exampers ( ) {
2013-09-03 15:35:09 +02:00
if ( isPersonHere ( ) ) {
if ( _thing ! = _vm - > _gyro - > thinks )
_vm - > _lucerna - > thinkabout ( _person , _vm - > _gyro - > a_person ) ;
_person - = 149 ;
2013-09-05 02:29:09 +02:00
switch ( _person ) { // Special cases
2013-08-25 18:05:02 +02:00
case 11 :
2013-08-27 11:10:24 +02:00
if ( _vm - > _gyro - > dna . wonnim ) {
2013-08-25 18:05:02 +02:00
_vm - > _visa - > dixi ( ' Q ' , 8 ) ; // "I'm Not Playing!"
2013-08-27 11:10:24 +02:00
return ;
}
break ;
2013-08-25 18:05:02 +02:00
case 99 :
2013-08-27 11:10:24 +02:00
if ( _vm - > _gyro - > dna . lustie_is_asleep ) {
2013-08-25 18:05:02 +02:00
_vm - > _visa - > dixi ( ' Q ' , 65 ) ; // He's asleep. (65! Wow!)
2013-08-27 11:10:24 +02:00
return ;
}
break ;
2013-08-25 18:05:02 +02:00
}
// Otherwise...
2013-09-03 15:35:09 +02:00
_vm - > _visa - > dixi ( ' p ' , _person ) ;
2013-08-25 18:05:02 +02:00
}
// And afterwards...
2013-09-03 15:35:09 +02:00
if ( ( _person = = 14 ) & & ( ! _vm - > _gyro - > dna . ayles_is_awake ) )
2013-08-25 18:05:02 +02:00
_vm - > _visa - > dixi ( ' Q ' , 13 ) ;
2013-06-29 15:56:08 +02:00
}
bool Acci : : holding ( ) {
2013-09-03 15:35:09 +02:00
if ( ( 51 < = _thing ) & & ( _thing < = 99 ) ) // Also.
2013-08-17 15:07:02 +02:00
return true ;
bool holdingResult = false ;
2013-09-03 15:35:09 +02:00
if ( _thing > 100 )
2013-08-17 15:07:02 +02:00
_vm - > _scrolls - > display ( " Be reasonable! " ) ;
2013-09-03 15:35:09 +02:00
else if ( ! _vm - > _gyro - > dna . obj [ _thing - 1 ] ) // Verbs that need "_thing" to be in the inventory.
2013-08-17 15:07:02 +02:00
_vm - > _scrolls - > display ( " You're not holding it, Avvy. " ) ;
else
holdingResult = true ;
return holdingResult ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : openBox ( bool isOpening ) {
if ( ( _vm - > _gyro - > dna . room = = r__yours ) & & ( _thing = = 54 ) ) {
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 5 ) ;
2013-08-25 13:25:50 +02:00
2013-09-04 09:25:11 +02:00
_vm - > _celer - > updateBackgroundSprites ( ) ;
2013-08-21 20:20:42 +02:00
_vm - > _trip - > trippancy_link ( ) ;
_vm - > _graphics - > refreshScreen ( ) ;
2013-08-27 11:10:24 +02:00
_vm - > _system - > delayMillis ( 55 ) ;
2013-09-03 15:35:09 +02:00
if ( ! isOpening ) {
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 6 ) ;
2013-09-04 09:25:11 +02:00
_vm - > _celer - > updateBackgroundSprites ( ) ;
2013-08-27 11:10:24 +02:00
_vm - > _trip - > trippancy_link ( ) ;
_vm - > _graphics - > refreshScreen ( ) ;
}
2013-08-21 20:20:42 +02:00
}
2013-06-29 15:56:08 +02:00
}
void Acci : : examine ( ) {
2013-09-03 15:35:09 +02:00
// EITHER it's an object OR it's an Also OR it's a _person OR it's something else.
if ( ( _person = = kPardon ) & & ( _thing ! = kPardon ) ) {
2013-08-17 15:07:02 +02:00
if ( holding ( ) ) {
// Remember: it's been Slipped! Ie subtract 49.
2013-09-03 15:35:09 +02:00
if ( ( 1 < = _thing ) & & ( _thing < = 49 ) ) // Standard object
examineObject ( ) ;
else if ( ( 50 < = _thing ) & & ( _thing < = 100 ) ) { // Also _thing
2013-08-21 20:20:42 +02:00
openBox ( true ) ;
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( * _vm - > _gyro - > also [ _thing - 50 ] [ 1 ] ) ;
2013-08-21 20:20:42 +02:00
openBox ( false ) ;
2013-08-17 15:07:02 +02:00
}
}
2013-09-03 15:35:09 +02:00
} else if ( _person ! = kPardon )
2013-08-17 15:07:02 +02:00
exampers ( ) ;
2013-09-04 13:55:31 +02:00
else
_vm - > _scrolls - > display ( " It's just as it looks on the picture. " ) ; // Don't know: guess.
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : inventory ( ) {
byte itemNum = 0 ;
2013-08-26 11:45:06 +02:00
_vm - > _scrolls - > display ( Common : : String ( " You're carrying " ) + _vm - > _scrolls - > kControlToBuffer ) ;
2013-09-04 13:55:31 +02:00
for ( byte i = 0 ; i < numobjs ; i + + ) {
if ( _vm - > _gyro - > dna . obj [ i ] ) {
itemNum + + ;
if ( itemNum = = _vm - > _gyro - > dna . carrying )
_vm - > _scrolls - > display ( Common : : String ( " and " ) + _vm - > _scrolls - > kControlToBuffer ) ;
_vm - > _scrolls - > display ( _vm - > _gyro - > get_better ( i + 1 ) + _vm - > _scrolls - > kControlToBuffer ) ;
if ( ( i + 1 ) = = _vm - > _gyro - > dna . wearing )
_vm - > _scrolls - > display ( Common : : String ( " , which you're wearing " ) + _vm - > _scrolls - > kControlToBuffer ) ;
if ( itemNum < _vm - > _gyro - > dna . carrying )
_vm - > _scrolls - > display ( Common : : String ( " , " ) + _vm - > _scrolls - > kControlToBuffer ) ;
}
2013-08-26 11:45:06 +02:00
}
2013-09-04 18:26:57 +02:00
if ( _vm - > _gyro - > dna . wearing = = kNothing )
_vm - > _scrolls - > display ( Common : : String ( " ... " ) + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " ...and you're stark naked! " ) ;
else
_vm - > _scrolls - > display ( " . " ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-05 02:29:09 +02:00
void Acci : : swallow ( ) { // Eat something.
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : wine :
2013-09-05 02:29:09 +02:00
switch ( _vm - > _gyro - > dna . winestate ) { // 4 is perfect
2013-09-04 13:55:31 +02:00
case 1 :
if ( _vm - > _gyro - > dna . teetotal ) {
_vm - > _visa - > dixi ( ' D ' , 6 ) ;
return ;
2013-09-03 15:35:09 +02:00
}
2013-09-04 13:55:31 +02:00
_vm - > _visa - > dixi ( ' U ' , 1 ) ;
_vm - > _pingo - > wobble ( ) ;
_vm - > _visa - > dixi ( ' U ' , 2 ) ;
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > wine - 1 ] = false ;
_vm - > _lucerna - > objectlist ( ) ;
drink ( ) ;
2013-09-03 15:35:09 +02:00
break ;
2013-08-25 13:25:50 +02:00
case 2 :
case 3 :
_vm - > _visa - > dixi ( ' d ' , 8 ) ;
2013-09-05 02:29:09 +02:00
break ; // You can't drink it!
2013-08-25 13:25:50 +02:00
}
break ;
2013-09-04 13:55:31 +02:00
case Gyro : : potion :
_vm - > _gyro - > background ( 4 ) ;
_vm - > _visa - > dixi ( ' U ' , 3 ) ;
_vm - > _lucerna - > gameover ( ) ;
_vm - > _gyro - > background ( 0 ) ;
2013-08-25 13:25:50 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : ink :
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' U ' , 4 ) ;
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : chastity :
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' U ' , 5 ) ;
break ;
2013-09-04 13:55:31 +02:00
case Gyro : : mushroom :
_vm - > _visa - > dixi ( ' U ' , 6 ) ;
_vm - > _lucerna - > gameover ( ) ;
2013-08-25 13:25:50 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : onion :
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > dna . rotten_onion )
_vm - > _visa - > dixi ( ' U ' , 11 ) ;
2013-08-25 13:25:50 +02:00
else {
_vm - > _visa - > dixi ( ' U ' , 8 ) ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > onion - 1 ] = false ;
2013-08-25 13:25:50 +02:00
_vm - > _lucerna - > objectlist ( ) ;
}
break ;
default :
if ( ( _vm - > _gyro - > dna . room = = r__argentpub ) | | ( _vm - > _gyro - > dna . room = = r__nottspub ) )
_vm - > _scrolls - > display ( " Try BUYing things before you drink them! " ) ;
else
_vm - > _scrolls - > display ( " The taste of it makes you retch! " ) ;
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : peopleInRoom ( ) {
byte numPeople = 0 ; // Number of people in the room.
2013-09-04 13:55:31 +02:00
for ( byte i = 1 ; i < 29 ; i + + ) { // Start at 1 so we don't list Avvy himself!
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > whereis [ i ] = = _vm - > _gyro - > dna . room )
numPeople + + ;
2013-09-04 13:55:31 +02:00
}
2013-09-03 15:35:09 +02:00
if ( numPeople = = 0 ) // If nobody's here, we can cut out straight away.
return ;
byte actPerson = 0 ; // Actually listed people.
2013-09-04 13:55:31 +02:00
for ( byte i = 1 ; i < 29 ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > whereis [ i ] = = _vm - > _gyro - > dna . room ) {
actPerson + + ;
if ( actPerson = = 1 ) // First on the list.
_vm - > _scrolls - > display ( _vm - > _gyro - > getname ( i + 150 ) + _vm - > _scrolls - > kControlToBuffer ) ;
else if ( actPerson < numPeople ) // The middle...
_vm - > _scrolls - > display ( Common : : String ( " , " ) + _vm - > _gyro - > getname ( i + 150 ) + _vm - > _scrolls - > kControlToBuffer ) ;
else // The end.
_vm - > _scrolls - > display ( Common : : String ( " and " ) + _vm - > _gyro - > getname ( i + 150 ) + _vm - > _scrolls - > kControlToBuffer ) ;
}
2013-09-04 13:55:31 +02:00
}
2013-09-03 15:35:09 +02:00
if ( numPeople = = 1 )
_vm - > _scrolls - > display ( Common : : String ( " is " ) + _vm - > _scrolls - > kControlToBuffer ) ;
else
_vm - > _scrolls - > display ( Common : : String ( " are " ) + _vm - > _scrolls - > kControlToBuffer ) ;
_vm - > _scrolls - > display ( " here. " ) ; // End and display it.
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : lookAround ( ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( * _vm - > _gyro - > also [ 0 ] [ 1 ] ) ;
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) {
2013-06-29 15:56:08 +02:00
case r__spludwicks :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . avaricius_talk > 0 )
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 23 ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-03 15:35:09 +02:00
peopleInRoom ( ) ;
2013-06-30 22:01:05 +02:00
break ;
case r__robins :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . tied_up )
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 38 ) ;
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . mushroom_growing )
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 55 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__insidecardiffcastle :
2013-07-24 18:25:07 +02:00
if ( ! _vm - > _gyro - > dna . taken_pen )
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 49 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__lustiesroom :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . lustie_is_asleep )
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 65 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__catacombs :
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . cat_y * 256 + _vm - > _gyro - > dna . cat_x ) {
2013-06-29 15:56:08 +02:00
case 258 :
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 80 ) ; // Inside art gallery.
2013-09-03 15:35:09 +02:00
break ;
2013-06-29 15:56:08 +02:00
case 514 :
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 81 ) ; // Outside ditto.
2013-09-03 15:35:09 +02:00
break ;
2013-06-29 15:56:08 +02:00
case 260 :
2013-09-04 12:36:48 +02:00
_vm - > _visa - > dixi ( ' q ' , 82 ) ; // Outside Geida's room.
2013-09-03 15:35:09 +02:00
break ;
2013-06-29 15:56:08 +02:00
}
break ;
default :
2013-09-03 15:35:09 +02:00
peopleInRoom ( ) ;
2013-06-29 15:56:08 +02:00
}
}
2013-09-03 15:35:09 +02:00
void Acci : : openDoor ( ) {
// Special cases.
switch ( _vm - > _gyro - > dna . room ) {
2013-06-29 15:56:08 +02:00
case r__yours :
2013-08-23 16:58:22 +02:00
if ( _vm - > _trip - > infield ( 2 ) ) {
2013-09-03 15:35:09 +02:00
// Opening the box.
_thing = 54 ; // The box.
_person = kPardon ;
2013-06-29 15:56:08 +02:00
examine ( ) ;
return ;
}
break ;
case r__spludwicks :
2013-09-03 15:35:09 +02:00
if ( _thing = = 61 ) {
2013-09-04 12:38:19 +02:00
_vm - > _visa - > dixi ( ' q ' , 85 ) ;
2013-06-29 15:56:08 +02:00
return ;
}
break ;
}
2013-07-24 18:25:07 +02:00
if ( ( ! _vm - > _gyro - > dna . user_moves_avvy ) & & ( _vm - > _gyro - > dna . room ! = r__lusties ) )
2013-09-03 15:35:09 +02:00
return ; // No doors can open if you can't move Avvy.
2013-06-30 22:01:05 +02:00
2013-09-04 13:55:31 +02:00
for ( byte fv = 8 ; fv < 15 ; fv + + ) {
2013-08-23 16:58:22 +02:00
if ( _vm - > _trip - > infield ( fv + 1 ) ) {
2013-08-21 18:01:31 +02:00
fv - = 8 ;
switch ( _vm - > _gyro - > portals [ fv ] . op ) {
2013-09-04 01:06:03 +02:00
case Gyro : : exclaim :
2013-08-21 18:01:31 +02:00
_vm - > _trip - > tr [ 0 ] . bounce ( ) ;
2013-09-04 12:38:19 +02:00
_vm - > _visa - > dixi ( ' x ' , _vm - > _gyro - > portals [ fv ] . data ) ;
2013-08-21 18:01:31 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : transport :
2013-09-05 02:29:09 +02:00
_vm - > _trip - > fliproom ( ( _vm - > _gyro - > portals [ fv ] . data ) > > 8 , // High byte
( _vm - > _gyro - > portals [ fv ] . data ) & 0x0F // Low byte
) ;
2013-08-21 18:01:31 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : unfinished :
2013-08-21 18:01:31 +02:00
_vm - > _trip - > tr [ 0 ] . bounce ( ) ;
_vm - > _scrolls - > display ( " Sorry. This place is not available yet! " ) ;
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : special :
2013-08-21 18:01:31 +02:00
_vm - > _trip - > call_special ( _vm - > _gyro - > portals [ fv ] . data ) ;
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : mopendoor :
2013-08-29 14:33:05 +02:00
_vm - > _trip - > open_the_door ( ( _vm - > _gyro - > portals [ fv ] . data ) > > 8 , ( _vm - > _gyro - > portals [ fv ] . data ) & 0x0F , fv + 9 ) ;
2013-08-21 18:01:31 +02:00
break ;
2013-06-29 15:56:08 +02:00
}
2013-08-21 18:01:31 +02:00
2013-06-29 15:56:08 +02:00
return ;
}
2013-09-04 13:55:31 +02:00
}
2013-06-30 22:01:05 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__map )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Avvy, you can complete the whole game without ever going "
2013-09-04 12:38:19 +02:00
" to anywhere other than Argent, Birmingham, Cardiff, Nottingham and Norwich. " ) ) ;
2013-06-29 15:56:08 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Door? What door? " ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : silly ( ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Don't be silly! " ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : putProc ( ) {
2013-06-30 22:01:05 +02:00
if ( ! holding ( ) )
return ;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
_thing2 - = 49 ; // Slip the second object.
char temp = _thing ;
_thing = _thing2 ;
2013-06-30 22:01:05 +02:00
if ( ! holding ( ) )
return ;
2013-09-03 15:35:09 +02:00
_thing = temp ;
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
// Thing is the _thing which you're putting in. _thing2 is where you're putting it.
switch ( _thing2 ) {
2013-09-04 01:06:03 +02:00
case Gyro : : wine :
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > onion ) {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . rotten_onion )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " That's a bit like shutting the stable door after the horse has bolted! " ) ;
else { // Put onion into wine?
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . winestate ! = 3 )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlItalic ) + " Oignon au vin "
+ _vm - > _scrolls - > kControlRoman + " is a bit too strong for your tastes! " ) ;
else { // Put onion into vinegar! Yes!
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . onion_in_vinegar = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 7 ) ;
_vm - > _visa - > dixi ( ' u ' , 9 ) ;
2013-06-29 15:56:08 +02:00
}
}
2013-06-30 22:01:05 +02:00
} else
silly ( ) ;
2013-06-29 15:56:08 +02:00
break ;
case 54 :
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > dna . room = = r__yours ) { // Put something into the box.
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > dna . box_contents ! = kNothing )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " There's something in the box already, Avvy. Try taking that out first. " ) ;
2013-06-30 22:01:05 +02:00
else {
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : money :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You'd better keep some ready cash on you! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : bell :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " That's a silly place to keep a bell. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : bodkin :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " But you might need it! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : onion :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Just give it to Spludwick, Avvy! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-08-25 13:25:50 +02:00
default : // Put the object into the box...
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > dna . wearing = = _thing )
_vm - > _scrolls - > display ( Common : : String ( " You'd better take " ) + _vm - > _gyro - > get_better ( _thing ) + " off first! " ) ;
2013-06-29 15:56:08 +02:00
else {
2013-09-03 15:35:09 +02:00
openBox ( true ) ; // Open box.
2013-08-25 13:25:50 +02:00
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . box_contents = _thing ;
_vm - > _gyro - > dna . obj [ _thing - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _scrolls - > display ( " OK, it's in the box. " ) ;
2013-08-25 13:25:50 +02:00
2013-09-03 15:35:09 +02:00
openBox ( false ) ; // Shut box.
2013-06-29 15:56:08 +02:00
}
}
2013-06-30 22:01:05 +02:00
}
} else
silly ( ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
silly ( ) ;
}
}
2013-09-03 15:35:09 +02:00
void Acci : : notInOrder ( ) {
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Sorry, I need the ingredients in the right order for this potion. What I need next is " )
+ _vm - > _gyro - > get_better ( _vm - > _gyro - > spludwick_order [ _vm - > _gyro - > dna . given2spludwick ] )
+ _vm - > _scrolls - > kControlRegister + 2 + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : goToCauldron ( ) {
_vm - > _trip - > tr [ 1 ] . call_eachstep = false ; // Stops Geida_Procs.
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 1 , _vm - > _timeout - > procspludwick_goes_to_cauldron , _vm - > _timeout - > reason_spludwalk ) ;
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 1 ] . walkto ( 2 ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-04 12:42:27 +02:00
/**
* Check is it ' s possible to give something to Spludwick
* @ remarks Originally called ' give2spludwick '
*/
2013-09-03 15:35:09 +02:00
bool Acci : : giveToSpludwick ( ) {
if ( _vm - > _gyro - > spludwick_order [ _vm - > _gyro - > dna . given2spludwick ] ! = _thing ) {
notInOrder ( ) ;
return false ;
2013-06-30 22:01:05 +02:00
}
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : onion :
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > onion - 1 ] = false ;
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . rotten_onion )
2013-09-04 12:42:27 +02:00
_vm - > _visa - > dixi ( ' q ' , 22 ) ;
2013-06-30 22:01:05 +02:00
else {
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > dna . given2spludwick + + ;
2013-09-04 12:42:27 +02:00
_vm - > _visa - > dixi ( ' q ' , 20 ) ;
2013-09-03 15:35:09 +02:00
goToCauldron ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : ink :
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > ink - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > dna . given2spludwick + + ;
2013-09-04 12:42:27 +02:00
_vm - > _visa - > dixi ( ' q ' , 24 ) ;
2013-09-03 15:35:09 +02:00
goToCauldron ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : mushroom :
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > mushroom - 1 ] = false ;
2013-09-04 12:42:27 +02:00
_vm - > _visa - > dixi ( ' q ' , 25 ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 5 ) ;
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > dna . given2spludwick + + ;
2013-09-03 15:35:09 +02:00
goToCauldron ( ) ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > potion - 1 ] = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-06-30 22:01:05 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
return true ;
2013-06-29 15:56:08 +02:00
}
2013-09-04 13:07:09 +02:00
return false ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : drink ( ) {
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . alcohol + = 1 ;
if ( _vm - > _gyro - > dna . alcohol = = 5 ) {
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > key - 1 ] = true ; // Get the key.
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . teetotal = true ;
_vm - > _gyro - > dna . avvy_is_awake = false ;
_vm - > _gyro - > dna . avvy_in_bed = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _lucerna - > dusk ( ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > hang_around_for_a_while ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _trip - > fliproom ( 1 , 1 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > background ( 14 ) ;
2013-09-03 15:35:09 +02:00
_vm - > _trip - > new_game_for_trippancy ( ) ; // Not really.
2013-06-29 15:56:08 +02:00
}
}
2013-09-03 15:35:09 +02:00
void Acci : : cardiffClimbing ( ) {
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > dna . standing_on_dais ) { // Clamber up.
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You climb down, back onto the floor. " ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . standing_on_dais = false ;
2013-07-24 19:43:10 +02:00
_vm - > _trip - > apped ( 1 , 3 ) ;
2013-08-25 13:25:50 +02:00
} else { // Clamber down.
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > infield ( 1 ) ) {
_vm - > _scrolls - > display ( " You clamber up onto the dais. " ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . standing_on_dais = true ;
2013-07-24 19:43:10 +02:00
_vm - > _trip - > apped ( 1 , 2 ) ;
2013-06-29 15:56:08 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Get a bit closer, Avvy. " ) ;
2013-06-29 15:56:08 +02:00
}
}
void Acci : : already ( ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You're already standing! " ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : standUp ( ) {
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) {
2013-09-03 15:35:09 +02:00
case r__yours : // Avvy isn't asleep.
if ( _vm - > _gyro - > dna . avvy_is_awake & & _vm - > _gyro - > dna . avvy_in_bed ) { // But he's in bed.
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . teetotal ) {
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' d ' , 12 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > background ( 0 ) ;
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' d ' , 14 ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-29 12:05:16 +02:00
_vm - > _trip - > tr [ 0 ] . visible = true ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . user_moves_avvy = true ;
2013-08-23 16:03:06 +02:00
_vm - > _trip - > apped ( 1 , 2 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . rw = _vm - > _gyro - > left ;
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 4 ) ; // Picture of empty pillow.
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 1 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . avvy_in_bed = false ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > lose_timer ( _vm - > _timeout - > reason_arkata_shouts ) ;
2013-06-30 22:01:05 +02:00
} else
already ( ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__insidecardiffcastle :
2013-09-03 15:35:09 +02:00
cardiffClimbing ( ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__nottspub :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . sitting_in_pub ) {
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 4 ) ; // Not sitting down.
2013-09-03 15:35:09 +02:00
_vm - > _trip - > tr [ 0 ] . visible = true ; // But standing up.
_vm - > _trip - > apped ( 1 , 4 ) ; // And walking away.
_vm - > _gyro - > dna . sitting_in_pub = false ; // Really not sitting down.
_vm - > _gyro - > dna . user_moves_avvy = true ; // And ambulant.
2013-06-30 22:01:05 +02:00
} else
already ( ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
already ( ) ;
}
}
2013-09-03 15:35:09 +02:00
void Acci : : getProc ( char thing ) {
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) {
2013-06-29 15:56:08 +02:00
case r__yours :
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > infield ( 2 ) ) {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . box_contents = = thing ) {
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 5 ) ;
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " OK, I've got it. " ) ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ thing - 1 ] = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . box_contents = kNothing ;
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 6 ) ;
2013-06-29 15:56:08 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( Common : : String ( " I can't see " ) + _vm - > _gyro - > get_better ( thing ) + " in the box. " ) ;
2013-06-30 22:01:05 +02:00
} else
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__insidecardiffcastle :
switch ( thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : pen :
2013-09-03 15:35:09 +02:00
if ( _vm - > _trip - > infield ( 2 ) ) { // Standing on the dais.
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . taken_pen )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " It's not there, Avvy. " ) ;
2013-06-29 15:56:08 +02:00
else {
2013-09-03 15:35:09 +02:00
// OK: we're taking the pen, and it's there.
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 4 ) ; // No pen there now.
2013-09-03 15:35:09 +02:00
_vm - > _trip - > call_special ( 3 ) ; // Zap!
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . taken_pen = true ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > pen - 1 ] = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _scrolls - > display ( " Taken. " ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-24 18:25:07 +02:00
} else if ( _vm - > _gyro - > dna . standing_on_dais )
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 53 ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 51 ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : bolt :
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 52 ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
}
break ;
case r__robins :
2013-07-24 19:43:10 +02:00
if ( ( thing = = _vm - > _gyro - > mushroom ) & ( _vm - > _trip - > infield ( 1 ) ) & ( _vm - > _gyro - > dna . mushroom_growing ) ) {
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 3 ) ;
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Got it! " ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . mushroom_growing = false ;
_vm - > _gyro - > dna . taken_mushroom = true ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > mushroom - 1 ] = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _lucerna - > points ( 3 ) ;
2013-06-30 22:01:05 +02:00
} else
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
}
}
2013-09-04 12:51:29 +02:00
/**
* Give the lute to Geida
* @ remarks Originally called ' give_Geida_the_lute '
*/
2013-09-03 15:35:09 +02:00
void Acci : : giveGeidaTheLute ( ) {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room ! = r__lustiesroom ) {
2013-08-31 00:30:06 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Not yet. Try later! " ) + _vm - > _scrolls - > kControlRegister + ' 2 ' + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-06-30 22:01:05 +02:00
return ;
}
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > lute - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-09-04 12:51:29 +02:00
_vm - > _visa - > dixi ( ' q ' , 64 ) ; // She plays it.
2013-06-29 15:56:08 +02:00
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 1 , _vm - > _timeout - > procgive_lute_to_geida , _vm - > _timeout - > reason_geida_sings ) ;
2013-09-05 12:59:01 +02:00
_vm - > _enid - > backToBootstrap ( 4 ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : playHarp ( ) {
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > infield ( 7 ) )
_vm - > _scrolls - > musical_scroll ( ) ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Get a bit closer to it, Avvy! " ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : winSequence ( ) {
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 78 ) ;
2013-07-24 19:43:10 +02:00
_vm - > _sequence - > first_show ( 7 ) ;
_vm - > _sequence - > then_show ( 8 ) ;
_vm - > _sequence - > then_show ( 9 ) ;
_vm - > _sequence - > start_to_close ( ) ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 30 , _vm - > _timeout - > procwinning , _vm - > _timeout - > reason_winning ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : personSpeaks ( ) {
2013-09-04 13:55:31 +02:00
if ( ( _person = = kPardon ) | | ( _person = = 0 ) ) {
2013-09-03 15:35:09 +02:00
if ( ( _vm - > _gyro - > him = = kPardon ) | | ( _vm - > _gyro - > whereis [ _vm - > _gyro - > him - 150 ] ! = _vm - > _gyro - > dna . room ) )
_person = _vm - > _gyro - > her ;
2013-06-30 22:01:05 +02:00
else
2013-09-03 15:35:09 +02:00
_person = _vm - > _gyro - > him ;
2013-09-04 13:55:31 +02:00
}
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > whereis [ _person - 150 ] ! = _vm - > _gyro - > dna . room ) {
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + ' 1 ' + _vm - > _scrolls - > kControlToBuffer ) ; // Avvy himself!
2013-06-29 15:56:08 +02:00
return ;
}
2013-09-03 15:35:09 +02:00
bool found = false ; // The _person we're looking for's code is in _person.
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
for ( byte i = 0 ; i < _vm - > _trip - > numtr ; i + + ) {
if ( _vm - > _trip - > tr [ i ] . quick & & ( ( _vm - > _trip - > tr [ i ] . a . accinum + 149 ) = = _person ) ) {
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + byte ( i + 49 ) + _vm - > _scrolls - > kControlToBuffer ) ;
2013-06-29 15:56:08 +02:00
found = true ;
}
2013-06-30 22:01:05 +02:00
}
2013-06-29 15:56:08 +02:00
2013-09-04 13:55:31 +02:00
if ( ! found ) {
for ( byte i = 0 ; i < 16 ; i + + ) {
2013-09-03 15:35:09 +02:00
if ( ( _vm - > _gyro - > quasipeds [ i ] . who = = _person ) & & ( _vm - > _gyro - > quasipeds [ i ] . room = = _vm - > _gyro - > dna . room ) )
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + byte ( i + 65 ) + _vm - > _scrolls - > kControlToBuffer ) ;
2013-09-04 13:55:31 +02:00
}
}
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
void Acci : : heyThanks ( ) {
personSpeaks ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Hey, thanks! " ) + _vm - > _scrolls - > kControlSpeechBubble + " (But now, you've lost it!) " ) ;
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . obj [ _thing - 1 ] = false ;
2013-06-29 15:56:08 +02:00
}
2013-09-04 13:06:12 +02:00
/**
* @ remarks Originally called ' do_that '
*/
2013-09-03 15:35:09 +02:00
void Acci : : doThat ( ) {
2013-06-29 15:56:08 +02:00
const Common : : String booze [ ] = { " Bitter " , " GIED " , " Whisky " , " Cider " , " " , " " , " " , " Mead " } ;
2013-09-03 15:35:09 +02:00
if ( _thats = = Common : : String ( kNothing ) ) {
if ( ! _thats . empty ( ) )
_thats . clear ( ) ;
2013-06-29 15:56:08 +02:00
return ;
}
2013-07-29 11:27:31 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > weirdword )
2013-06-30 22:01:05 +02:00
return ;
2013-07-29 11:27:31 +02:00
2013-09-03 15:35:09 +02:00
if ( _thing < 200 )
_thing - = 49 ; // "Slip"
2013-06-30 22:01:05 +02:00
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
if ( ( _verb ! = kVerbCodeLoad ) & & ( _verb ! = kVerbCodeSave ) & & ( _verb ! = kVerbCodeQuit ) & & ( _verb ! = kVerbCodeInfo ) & & ( _verb ! = kVerbCodeHelp )
2013-09-04 13:55:31 +02:00
& & ( _verb ! = kVerbCodeLarrypass ) & & ( _verb ! = kVerbCodePhaon ) & & ( _verb ! = kVerbCodeBoss ) & & ( _verb ! = kVerbCodeCheat ) & & ( _verb ! = kVerbCodeRestart ) & & ( _verb ! = kVerbCodeDir )
2013-09-04 14:56:05 +02:00
& & ( _verb ! = kVerbCodeScore ) & & ( _verb ! = kVerbCodeHiscores ) & & ( _verb ! = kVerbCodeSmartAlec ) ) {
2013-09-04 13:55:31 +02:00
if ( ! _vm - > _gyro - > alive ) {
_vm - > _scrolls - > display ( Common : : String ( " 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 - > dna . avvy_is_awake & & ( _verb ! = kVerbCodeDie ) & & ( _verb ! = kVerbCodeExpletive ) & & ( _verb ! = kVerbCodeWake ) ) {
_vm - > _scrolls - > display ( " Talking in your sleep? Try waking up! " ) ;
return ;
}
2013-06-30 22:01:05 +02:00
}
2013-06-29 15:56:08 +02:00
2013-09-03 15:35:09 +02:00
switch ( _verb ) {
case kVerbCodeExam :
2013-06-29 15:56:08 +02:00
examine ( ) ;
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeOpen :
openDoor ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodePause : // Note that the original game doesn't care about the "O.K." box neither, it accepts clicks from everywhere on the screen to continue. Just like my code.
2013-08-18 11:35:36 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Game paused. " ) + _vm - > _scrolls - > kControlCenter + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine
+ " Press Enter, Esc, or click the mouse on the \" O.K. \" box to continue. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeGet :
if ( _thing ! = kPardon ) { // Legitimate try to pick something up.
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . carrying > = maxobjs )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You can't carry any more! " ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-03 15:35:09 +02:00
getProc ( _thing ) ;
} else { // Not... ditto.
if ( _person ! = kPardon )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You can't sweep folk off their feet! " ) ;
2013-06-29 15:56:08 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " I assure you, you don't need it. " ) ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeDrop :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Two years ago you dropped a florin in the street. Three days " ) +
2013-06-29 15:56:08 +02:00
" later it was gone! So now you never leave ANYTHING lying around. OK? " ) ;
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeInv :
inventory ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeTalk :
if ( _person = = kPardon ) {
if ( _vm - > _gyro - > subjnumber = = 99 ) // They typed "say password".
2013-09-04 18:34:58 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Yes, but what " ) + _vm - > _scrolls - > kControlItalic + " is " + _vm - > _scrolls - > kControlRoman + " the password? " ) ;
else if ( ( ( 1 < = _vm - > _gyro - > subjnumber ) & & ( _vm - > _gyro - > subjnumber < = 49 ) ) | | ( _vm - > _gyro - > subjnumber = = 253 ) | | ( _vm - > _gyro - > subjnumber = = 249 ) ) {
2013-09-03 15:35:09 +02:00
_thats . deleteChar ( 0 ) ;
2013-08-12 13:28:28 +02:00
for ( byte i = 0 ; i < 10 ; i + + )
2013-09-03 15:35:09 +02:00
_realWords [ i ] = _realWords [ i + 1 ] ;
2013-08-12 13:28:28 +02:00
2013-09-03 15:35:09 +02:00
_verb = _vm - > _gyro - > subjnumber ;
doThat ( ) ;
2013-06-30 22:01:05 +02:00
return ;
2013-06-29 15:56:08 +02:00
} else {
2013-09-03 15:35:09 +02:00
_person = _vm - > _gyro - > subjnumber ;
2013-08-12 13:28:28 +02:00
_vm - > _gyro - > subjnumber = 0 ;
2013-09-03 15:35:09 +02:00
if ( ( _person = = 0 ) | | ( _person = = kPardon ) )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Talk to whom? " ) ;
2013-09-03 15:35:09 +02:00
else if ( isPersonHere ( ) )
_vm - > _visa - > talkto ( _person ) ;
2013-06-29 15:56:08 +02:00
}
2013-09-05 01:48:16 +02:00
} else if ( isPersonHere ( ) )
2013-09-03 15:35:09 +02:00
_vm - > _visa - > talkto ( _person ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeGive :
2013-06-29 15:56:08 +02:00
if ( holding ( ) ) {
2013-09-03 15:35:09 +02:00
if ( _person = = kPardon )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Give to whom? " ) ;
2013-09-03 15:35:09 +02:00
else if ( isPersonHere ( ) ) {
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : money :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You can't bring yourself to give away your moneybag. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : bodkin :
case Gyro : : bell :
case Gyro : : clothes :
case Gyro : : habit :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Don't give it away, it might be useful! " ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
switch ( _person ) {
2013-09-04 01:06:03 +02:00
case Gyro : : pcrapulus :
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > wine ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Crapulus grabs the wine and gulps it down. " ) ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > wine - 1 ] = false ;
2013-08-25 13:25:50 +02:00
} else
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pcwytalot :
2013-09-03 15:35:09 +02:00
if ( ( _thing = = _vm - > _gyro - > crossbow ) | | ( _thing = = _vm - > _gyro - > bolt ) )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " You might be able to influence Cwytalot more if you used it! " ) ) ;
else
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pspludwick :
2013-09-03 15:35:09 +02:00
if ( giveToSpludwick ( ) )
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pibythneth :
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > badge ) {
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 32 ) ; // Thanks! Wow!
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > badge - 1 ] = false ;
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > habit - 1 ] = true ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . givenbadgetoiby = true ;
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 8 ) ;
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 9 ) ;
2013-06-30 22:01:05 +02:00
} else
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : payles :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . ayles_is_awake ) {
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > pen ) {
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > pen - 1 ] = false ;
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 54 ) ;
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > ink - 1 ] = true ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . given_pen_to_ayles = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _lucerna - > points ( 2 ) ;
2013-06-30 22:01:05 +02:00
} else
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " But he's asleep! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pgeida :
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : potion :
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > potion - 1 ] = false ;
2013-09-03 15:35:09 +02:00
_vm - > _visa - > dixi ( ' u ' , 16 ) ; // She drinks it.
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 2 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . geida_given_potion = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : lute :
2013-09-03 15:35:09 +02:00
giveGeidaTheLute ( ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : parkata :
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : potion :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . geida_given_potion )
2013-09-03 15:35:09 +02:00
winSequence ( ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 77 ) ; // That Geida woman!
2013-09-03 15:35:09 +02:00
break ;
2013-06-29 15:56:08 +02:00
default :
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
}
break ;
default :
2013-09-03 15:35:09 +02:00
heyThanks ( ) ;
2013-06-29 15:56:08 +02:00
}
}
}
2013-09-03 15:35:09 +02:00
_vm - > _lucerna - > objectlist ( ) ; // Just in case...
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeEat :
case kVerbCodeDrink :
2013-06-30 22:01:05 +02:00
if ( holding ( ) )
swallow ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-08-25 13:25:50 +02:00
2013-09-03 15:35:09 +02:00
case kVerbCodeLoad :
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeSave :
2013-06-29 15:56:08 +02:00
break ;
2013-08-25 13:25:50 +02:00
// We don't handle these two because we use ScummVM's save/load system.
2013-09-03 15:35:09 +02:00
case kVerbCodePay :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " No money need change hands. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeLook :
lookAround ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeBreak :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Vandalism is prohibited within this game! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-05 02:29:09 +02:00
case kVerbCodeQuit : // quit
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > demo ) {
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::doThat() - case kVerbCodequit " ) ;
// _vm->_visa->dixi('pos', 31);
2013-06-29 15:56:08 +02:00
// close(demofile);
2013-09-05 02:29:09 +02:00
// exit(0); // Change this later!!!
2013-08-25 13:25:50 +02:00
}
2013-09-03 15:35:09 +02:00
if ( ! _polite )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " How about a `please \" , Avvy? " ) ;
2013-08-25 13:25:50 +02:00
else if ( _vm - > _scrolls - > ask ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + ' C ' + _vm - > _scrolls - > kControlIcon + " Do you really want to quit? " ) )
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > lmo = true ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeGo :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Just use the arrow keys to walk there. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeInfo : {
2013-09-04 13:55:31 +02:00
_vm - > _scrolls - > aboutscroll = true ;
Common : : String toDisplay ;
for ( byte i = 0 ; i < 7 ; i + + )
toDisplay + = _vm - > _scrolls - > kControlNewLine ;
toDisplay = toDisplay + " LORD AVALOT D'ARGENT " + _vm - > _scrolls - > kControlCenter + _vm - > _scrolls - > kControlNewLine
+ " The medi<64> val descendant of " + _vm - > _scrolls - > kControlNewLine
+ " Denarius Avaricius Sextus " + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine
+ " version " + _vm - > _gyro - > vernum + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " Copyright <20> "
+ _vm - > _gyro - > copyright + " , Mark, Mike and Thomas Thurman. " + _vm - > _scrolls - > kControlRegister + ' Y ' + _vm - > _scrolls - > kControlIcon ;
_vm - > _scrolls - > display ( toDisplay ) ;
_vm - > _scrolls - > aboutscroll = false ;
2013-08-25 13:25:50 +02:00
}
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeUndress :
if ( _vm - > _gyro - > dna . wearing = = kNothing )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You're already stark naked! " ) ;
2013-07-24 18:25:07 +02:00
else if ( _vm - > _gyro - > dna . avvys_in_the_cupboard ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( Common : : String ( " You take off " ) + _vm - > _gyro - > get_better ( _vm - > _gyro - > dna . wearing ) + ' . ' ) ;
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . wearing = kNothing ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-06-29 15:56:08 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hadn't you better find somewhere more private, Avvy? " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeWear :
if ( holding ( ) ) { // Wear something.
switch ( _thing ) {
2013-09-04 01:06:03 +02:00
case Gyro : : chastity :
2013-09-04 17:15:33 +02:00
// \? are used to avoid that ??! is parsed as a trigraph
_vm - > _scrolls - > display ( " Hey, kWhat kind of a weirdo are you \ ? \ ?! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : clothes :
2013-09-05 02:29:09 +02:00
case Gyro : : habit : { // Change this!
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > dna . wearing ! = kNothing ) {
if ( _vm - > _gyro - > dna . wearing = = _thing )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " You're already wearing that. " ) ;
else
_vm - > _scrolls - > display ( " You'll be rather warm wearing two sets of clothes! " ) ;
return ;
} else
2013-09-03 15:35:09 +02:00
_vm - > _gyro - > dna . wearing = _thing ;
2013-06-30 22:01:05 +02:00
2013-08-25 13:25:50 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-09-03 15:35:09 +02:00
byte i ;
if ( _thing = = _vm - > _gyro - > habit )
i = 3 ;
2013-08-25 13:25:50 +02:00
else
2013-09-03 15:35:09 +02:00
i = 0 ;
if ( _vm - > _trip - > tr [ 0 ] . whichsprite ! = i ) {
int16 x = _vm - > _trip - > tr [ 0 ] . x ;
int16 y = _vm - > _trip - > tr [ 0 ] . y ;
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 0 ] . done ( ) ;
2013-09-03 15:35:09 +02:00
_vm - > _trip - > tr [ 0 ] . init ( i , true , _vm - > _trip ) ;
_vm - > _trip - > tr [ 0 ] . appear ( x , y , _vm - > _trip - > left ) ;
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 0 ] . visible = false ;
}
2013-06-29 15:56:08 +02:00
}
2013-08-25 13:25:50 +02:00
break ;
2013-06-29 15:56:08 +02:00
default :
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( kWhat ) ;
2013-06-29 15:56:08 +02:00
}
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodePlay :
if ( _thing = = kPardon ) {
switch ( _vm - > _gyro - > dna . room ) { // They just typed "play"...
case r__argentpub : { // ...in the pub, => play Nim.
warning ( " STUB: Acci::doThat() - case kVerbCodeplay " ) ;
2013-08-30 23:54:42 +02:00
// 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.
2013-09-03 15:35:09 +02:00
if ( _vm - > _gyro - > dna . wonnim ) { // Already won the game.
2013-08-30 23:54:42 +02:00
_vm - > _visa - > dixi ( ' Q ' , 6 ) ;
return ;
}
if ( ! _vm - > _gyro - > dna . asked_dogfood_about_nim ) {
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 84 ) ;
2013-08-30 23:54:42 +02:00
return ;
}
_vm - > _visa - > dixi ( ' Q ' , 3 ) ;
_vm - > _gyro - > dna . playednim + + ;
2013-09-03 15:35:09 +02:00
// You won - strange!
_vm - > _visa - > dixi ( ' Q ' , 7 ) ; // You won! Give us a lute!
2013-08-30 23:54:42 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > lute - 1 ] = true ;
_vm - > _lucerna - > objectlist ( ) ;
_vm - > _gyro - > dna . wonnim = true ;
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 1 ) ; // Show the settle with no lute on it.
2013-09-03 15:35:09 +02:00
_vm - > _lucerna - > points ( 7 ) ; // 7 points for winning!
2013-08-30 23:54:42 +02:00
if ( _vm - > _gyro - > dna . playednim = = 1 )
2013-09-03 15:35:09 +02:00
_vm - > _lucerna - > points ( 3 ) ; // 3 points for playing your 1st game.
2013-08-30 23:54:42 +02:00
// A warning to the player that there should have been a mini-game. TODO: Remove it later!!!
_vm - > _scrolls - > display ( 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. " )
+ _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " Peter (uruk) " ) ;
}
break ;
2013-06-29 15:56:08 +02:00
case r__musicroom :
2013-09-03 15:35:09 +02:00
playHarp ( ) ;
2013-06-29 15:56:08 +02:00
break ;
}
2013-06-30 22:01:05 +02:00
} else if ( holding ( ) ) {
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-09-04 13:55:31 +02:00
case Gyro : : lute :
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' U ' , 7 ) ;
2013-06-30 22:01:05 +02:00
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > whereis [ _vm - > _gyro - > pcwytalot - 150 ] = = _vm - > _gyro - > dna . room )
_vm - > _visa - > dixi ( ' U ' , 10 ) ;
if ( _vm - > _gyro - > whereis [ _vm - > _gyro - > pdulustie - 150 ] = = _vm - > _gyro - > dna . room )
_vm - > _visa - > dixi ( ' U ' , 15 ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-06-30 22:01:05 +02:00
case 52 :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__musicroom )
2013-09-03 15:35:09 +02:00
playHarp ( ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( kWhat ) ;
2013-06-30 22:01:05 +02:00
break ;
case 55 :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__argentpub )
2013-08-25 13:25:50 +02:00
// play_nim();
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::doThat() - case kVerbCodeplay " ) ;
2013-06-30 22:01:05 +02:00
else
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( kWhat ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( kWhat ) ;
2013-06-29 15:56:08 +02:00
}
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeRing :
2013-06-29 15:56:08 +02:00
if ( holding ( ) ) {
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > bell ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Ding, dong, ding, dong, ding, dong, ding, dong... " ) ;
2013-07-24 18:25:07 +02:00
if ( ( _vm - > _gyro - > dna . ringing_bells ) & ( _vm - > _gyro - > flagset ( ' B ' ) ) )
2013-09-04 17:15:33 +02:00
// \? are used to avoid that ??! is parsed as a trigraph
_vm - > _scrolls - > display ( " (Are you trying to join in, Avvy \ ? \ ?!) " ) ;
2013-06-30 22:01:05 +02:00
} else
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( kWhat ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeHelp :
2013-06-29 15:56:08 +02:00
// boot_help();
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::doThat() - case kVerbCodehelp " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeLarrypass :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Wrong game! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodePhaon :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hello, Phaon! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeBoss :
2013-06-29 15:56:08 +02:00
// bosskey();
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::doThat() - case kVerbCodeboss " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodePee :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > flagset ( ' P ' ) ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hmm, I don't think anyone will notice... " ) ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 4 , _vm - > _timeout - > procurinate , _vm - > _timeout - > reason_gototoilet ) ;
2013-06-30 22:01:05 +02:00
} else
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " It would be " ) + _vm - > _scrolls - > kControlItalic + " VERY "
+ _vm - > _scrolls - > kControlRoman + " unwise to do that here, Avvy! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeCheat :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlItalic ) + " Cheat mode now enabled. " ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > cheat = true ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeMagic :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . avaricius_talk > 0 )
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 19 ) ;
2013-06-29 15:56:08 +02:00
else {
2013-08-25 13:25:50 +02:00
if ( ( _vm - > _gyro - > dna . room = = 12 ) & ( _vm - > _trip - > infield ( 2 ) ) ) { // Avaricius appears!
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 17 ) ;
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > whereis [ 1 ] = = 12 )
2013-09-04 13:06:12 +02:00
_vm - > _visa - > dixi ( ' q ' , 18 ) ;
2013-06-29 15:56:08 +02:00
else {
2013-09-03 15:35:09 +02:00
_vm - > _trip - > tr [ 1 ] . init ( 1 , false , _vm - > _trip ) ; // Avaricius
2013-07-24 19:43:10 +02:00
_vm - > _trip - > apped ( 2 , 4 ) ;
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 1 ] . walkto ( 5 ) ;
_vm - > _trip - > tr [ 1 ] . call_eachstep = true ;
_vm - > _trip - > tr [ 1 ] . eachstep = _vm - > _trip - > procback_and_forth ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . avaricius_talk = 14 ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 177 , _vm - > _timeout - > procavaricius_talks , _vm - > _timeout - > reason_avariciustalks ) ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Nothing appears to happen... " ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeSmartAlec :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Listen, smart alec, that was just rhetoric. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeExpletive :
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . swore ) {
2013-06-29 15:56:08 +02:00
case 0 :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Avvy! Do you mind? There might be kids playing! " )
+ _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " (I shouldn't say it again, if I were you!) " ) ;
2013-06-29 15:56:08 +02:00
break ;
case 1 :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " You hear a distant rumble of thunder. Must you always do things I tell you not to? " )
+ _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " Don't do it again! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-06-30 22:01:05 +02:00
default :
2013-07-24 18:50:13 +02:00
_vm - > _pingo - > zonk ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " A crack of lightning shoots from the sky, and fries you. " )
+ _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + " (`Such is the anger of the gods, Avvy! \" ) " ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > gameover ( ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . swore + + ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeListen :
2013-07-24 18:25:07 +02:00
if ( ( _vm - > _gyro - > dna . ringing_bells ) & ( _vm - > _gyro - > flagset ( ' B ' ) ) )
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " All other noise is drowned out by the ringing of the bells. " ) ;
else if ( _vm - > _gyro - > listen . empty ( ) )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You can't hear anything much at the moment, Avvy. " ) ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( _vm - > _gyro - > listen ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeBuy : // What are they trying to buy?
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) {
2013-06-29 15:56:08 +02:00
case r__argentpub :
2013-08-25 13:25:50 +02:00
if ( _vm - > _trip - > infield ( 6 ) ) { // We're in a pub, and near the bar.
2013-09-03 15:35:09 +02:00
switch ( _thing ) {
2013-08-25 13:25:50 +02:00
case 51 :
case 53 :
case 54 :
case 58 : // Beer, whisky, cider or mead.
if ( _vm - > _gyro - > dna . malagauche = = 177 ) { // Already getting us one.
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 15 ) ;
2013-06-29 15:56:08 +02:00
return ;
}
2013-06-30 22:01:05 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . teetotal ) {
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 6 ) ;
2013-06-29 15:56:08 +02:00
return ;
}
2013-06-30 22:01:05 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . alcohol = = 0 )
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-08-25 13:25:50 +02:00
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 12 ) ;
2013-09-03 15:35:09 +02:00
_vm - > _scrolls - > display ( booze [ _thing - 51 ] + " , please. " + _vm - > _scrolls - > kControlRegister + ' 1 ' + _vm - > _scrolls - > kControlSpeechBubble ) ;
_vm - > _gyro - > dna . drinking = _thing ;
2013-06-29 15:56:08 +02:00
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 10 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . malagauche = 177 ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 27 , _vm - > _timeout - > procbuydrinks , _vm - > _timeout - > reason_drinks ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-08-25 13:25:50 +02:00
case 52 :
2013-06-29 15:56:08 +02:00
examine ( ) ;
2013-08-25 13:25:50 +02:00
break ; // We have a right one here - buy Pepsi??!
2013-09-04 01:06:03 +02:00
case Gyro : : wine :
2013-08-25 17:38:22 +02:00
if ( _vm - > _gyro - > dna . obj [ _vm - > _gyro - > wine - 1 ] ) // We've already got the wine!
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' D ' , 2 ) ; // 1 bottle's shufishent!
2013-06-29 15:56:08 +02:00
else {
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > dna . malagauche = = 177 ) { // Already getting us one.
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 15 ) ;
2013-06-29 15:56:08 +02:00
return ;
}
2013-06-30 22:01:05 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . carrying > = maxobjs ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Your hands are full. " ) ;
2013-06-29 15:56:08 +02:00
return ;
}
2013-06-30 22:01:05 +02:00
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 12 ) ;
2013-08-27 11:10:24 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Wine, please. " ) + _vm - > _scrolls - > kControlRegister + ' 1 ' + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . alcohol = = 0 )
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-09-03 22:22:42 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 10 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . malagauche = 177 ;
2013-06-29 15:56:08 +02:00
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 27 , _vm - > _timeout - > procbuywine , _vm - > _timeout - > reason_drinks ) ;
2013-06-29 15:56:08 +02:00
}
break ;
}
2013-06-30 22:01:05 +02:00
} else
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' D ' , 5 ) ; // Go to the bar!
break ;
2013-06-29 15:56:08 +02:00
case r__outsideducks :
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > infield ( 6 ) ) {
2013-09-03 15:35:09 +02:00
if ( _thing = = _vm - > _gyro - > onion ) {
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > dna . obj [ _vm - > _gyro - > onion - 1 ] )
_vm - > _visa - > dixi ( ' D ' , 10 ) ; // Not planning to juggle with the things!
2013-07-24 18:25:07 +02:00
else if ( _vm - > _gyro - > dna . carrying > = maxobjs )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Before you ask, you remember that your hands are full. " ) ;
2013-06-29 15:56:08 +02:00
else {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . bought_onion )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 11 ) ;
2013-06-29 15:56:08 +02:00
else {
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 9 ) ;
_vm - > _lucerna - > points ( 3 ) ;
2013-06-29 15:56:08 +02:00
}
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > pennycheck ( 3 ) ; // It costs thruppence.
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > onion - 1 ] = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . bought_onion = true ;
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > dna . rotten_onion = false ; // It's OK when it leaves the stall!
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . onion_in_vinegar = false ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 0 ) ;
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' D ' , 0 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__nottspub :
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' n ' , 15 ) ; // Can't sell to southerners.
break ;
2013-06-29 15:56:08 +02:00
default :
2013-08-25 13:25:50 +02:00
_vm - > _visa - > dixi ( ' D ' , 0 ) ; // Can't buy that.
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeAttack :
2013-07-24 18:25:07 +02:00
if ( ( _vm - > _gyro - > dna . room = = r__brummieroad ) & &
2013-09-03 15:35:09 +02:00
( ( _person = = 157 ) | | ( _thing = = _vm - > _gyro - > crossbow ) | | ( _thing = = _vm - > _gyro - > bolt ) )
2013-08-25 13:25:50 +02:00
& & ( _vm - > _gyro - > whereis [ 7 ] = = _vm - > _gyro - > dna . room ) ) {
2013-08-25 17:38:22 +02:00
switch ( _vm - > _gyro - > dna . obj [ _vm - > _gyro - > bolt - 1 ] + _vm - > _gyro - > dna . obj [ _vm - > _gyro - > crossbow - 1 ] * 2 ) {
2013-08-25 13:25:50 +02:00
// 0 = neither, 1 = only bolt, 2 = only crossbow, 3 = both.
2013-06-30 22:01:05 +02:00
case 0 :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' Q ' , 10 ) ;
_vm - > _scrolls - > display ( " (At the very least, don't use your bare hands!) " ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-06-29 15:56:08 +02:00
case 1 :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " Attack _vm->_gyro->him with only a crossbow bolt? Are you planning on playing darts?! " ) ;
2013-06-29 15:56:08 +02:00
break ;
case 2 :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " Come on, Avvy! You're not going to get very far with only a crossbow! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-06-30 22:01:05 +02:00
case 3 :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' Q ' , 11 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . cwytalot_gone = true ;
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > bolt - 1 ] = false ;
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > crossbow - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > magics [ 11 ] . op = _vm - > _gyro - > nix ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 7 ) ;
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 1 ] . walkto ( 2 ) ;
_vm - > _trip - > tr [ 1 ] . vanishifstill = true ;
_vm - > _trip - > tr [ 1 ] . call_eachstep = false ;
_vm - > _gyro - > whereis [ 7 ] = 177 ;
2013-06-30 22:01:05 +02:00
break ;
2013-06-29 15:56:08 +02:00
default :
2013-09-05 02:29:09 +02:00
_vm - > _visa - > dixi ( ' Q ' , 10 ) ; // Please try not to be so violent!
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' Q ' , 10 ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-04 14:56:05 +02:00
case kVerbCodePasswd :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room ! = r__bridge )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' Q ' , 12 ) ;
2013-06-29 15:56:08 +02:00
else {
2013-09-03 15:35:09 +02:00
bool ok = true ;
for ( byte i = 0 ; i < _thats . size ( ) ; i + + ) {
Common : : String temp = _realWords [ i ] ;
2013-08-29 12:07:04 +02:00
temp . toUppercase ( ) ;
2013-09-04 18:34:58 +02:00
for ( byte j = 0 ; j < kVocabulary [ _vm - > _gyro - > dna . pass_num + kFirstPassword ] . _word . size ( ) ; j + + ) {
if ( kVocabulary [ _vm - > _gyro - > dna . pass_num + kFirstPassword ] . _word [ j ] ! = temp [ j ] )
2013-06-29 15:56:08 +02:00
ok = false ;
2013-09-04 18:34:58 +02:00
}
2013-06-30 22:01:05 +02:00
}
2013-06-29 15:56:08 +02:00
if ( ok ) {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . drawbridge_open ! = 0 )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Contrary to your expectations, the drawbridge fails to close again. " ) ;
2013-06-29 15:56:08 +02:00
else {
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 4 ) ;
_vm - > _scrolls - > display ( " The drawbridge opens! " ) ;
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 7 , _vm - > _timeout - > procopen_drawbridge , _vm - > _timeout - > reason_drawbridgefalls ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . drawbridge_open = 1 ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' Q ' , 12 ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeDir :
_vm - > _enid - > dir ( _realWords [ 1 ] ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeDie :
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > gameover ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeScore :
2013-08-17 15:07:02 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Your score is " ) + _vm - > _gyro - > strf ( _vm - > _gyro - > dna . score ) + ' , ' + _vm - > _scrolls - > kControlCenter
+ _vm - > _scrolls - > kControlNewLine + " out of a possible 128. " + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine
2013-09-03 15:35:09 +02:00
+ " This gives you a rank of " + rank ( ) + ' . ' + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + totalTime ( ) ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodePut :
putProc ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeStand :
standUp ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeKiss :
if ( _person = = kPardon )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Kiss whom? " ) ;
2013-09-03 15:35:09 +02:00
else if ( isPersonHere ( ) ) {
switch ( _person ) {
2013-09-04 01:06:03 +02:00
case Gyro : : parkata :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' U ' , 12 ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pgeida :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' U ' , 13 ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pwisewoman :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' U ' , 14 ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
_vm - > _visa - > dixi ( ' U ' , 5 ) ; // You WHAT?
2013-06-29 15:56:08 +02:00
}
2013-09-03 15:35:09 +02:00
} else if ( ( 150 < = _person ) & & ( _person < = 174 ) )
_vm - > _scrolls - > display ( " Hey, kWhat kind of a weirdo are you?? " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeClimb :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__insidecardiffcastle )
2013-09-03 15:35:09 +02:00
cardiffClimbing ( ) ;
else // In the wrong room!
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Not with your head for heights, Avvy! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeJump :
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 1 , _vm - > _timeout - > procjump , _vm - > _timeout - > reason_jumping ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . user_moves_avvy = false ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-04 14:56:05 +02:00
case kVerbCodeHiscores :
2013-06-29 15:56:08 +02:00
// show_highs();
2013-09-03 15:35:09 +02:00
warning ( " STUB: Acci::doThat() - case kVerbCodehighscores " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeWake :
if ( isPersonHere ( ) )
switch ( _person ) {
case kPardon :
2013-09-04 01:06:03 +02:00
case Gyro : : pavalot :
2013-07-29 11:27:31 +02:00
case 0 :
2013-07-24 18:25:07 +02:00
if ( ! _vm - > _gyro - > dna . avvy_is_awake ) {
_vm - > _gyro - > dna . avvy_is_awake = true ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 1 ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . avvy_in_bed = true ;
2013-09-05 02:29:09 +02:00
_vm - > _celer - > drawBackgroundSprite ( - 1 , - 1 , 3 ) ; // Picture of Avvy, awake in bed.
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . teetotal )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' d ' , 13 ) ;
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You're already awake, Avvy! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : payles :
2013-07-24 18:25:07 +02:00
if ( ! _vm - > _gyro - > dna . ayles_is_awake )
2013-08-23 14:56:56 +02:00
_vm - > _scrolls - > display ( " You can't seem to wake him by yourself. " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-04 01:06:03 +02:00
case Gyro : : pjacques :
2013-08-23 14:56:56 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Brother Jacques, Brother Jacques, are you asleep? " ) + _vm - > _scrolls - > kControlRegister + ' 1 ' +
_vm - > _scrolls - > kControlSpeechBubble + " Hmmm... that doesn't seem to do any good... " ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " It's difficult to awaken people who aren't asleep...! " ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeSit :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__nottspub ) {
if ( _vm - > _gyro - > dna . sitting_in_pub )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " You're already sitting! " ) ;
2013-06-29 15:56:08 +02:00
else {
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 0 ] . walkto ( 4 ) ; // Move Avvy to the place, and sit him down.
2013-07-24 18:42:41 +02:00
_vm - > _timeout - > set_up_timer ( 1 , _vm - > _timeout - > procavvy_sit_down , _vm - > _timeout - > reason_sitting_down ) ;
2013-06-29 15:56:08 +02:00
}
2013-08-25 13:25:50 +02:00
} else { // Default doodah.
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > dusk ( ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > hang_around_for_a_while ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > dawn ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " A few hours later... " ) + _vm - > _scrolls - > kControlParagraph + " nothing much has happened... " ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeRestart :
2013-07-24 19:43:10 +02:00
if ( _vm - > _scrolls - > ask ( " Restart game and lose changes? " ) ) {
_vm - > _lucerna - > dusk ( ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > newgame ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > dawn ( ) ;
2013-06-29 15:56:08 +02:00
}
break ;
2013-09-03 15:35:09 +02:00
case kPardon :
_vm - > _scrolls - > display ( " Hey, a _verb would be helpful! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeHello :
personSpeaks ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " Hello. " ) + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeThanks :
personSpeaks ( ) ;
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( " That's OK. " ) + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-06-29 15:56:08 +02:00
default :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlBell ) + " Parser bug! " ) ;
2013-06-29 15:56:08 +02:00
}
}
2013-09-03 15:35:09 +02:00
void Acci : : verbOpt ( byte verb , Common : : String & answer , char & ansKey ) {
switch ( verb ) {
case kVerbCodeExam :
2013-06-29 15:56:08 +02:00
answer = " Examine " ;
2013-09-04 12:35:26 +02:00
ansKey = ' x ' ;
2013-09-03 15:35:09 +02:00
break ; // The ubiqutous one.
// kVerbCodegive isn't dealt with by this procedure, but by ddm__with.
case kVerbCodeDrink :
2013-06-29 15:56:08 +02:00
answer = " Drink " ;
2013-09-03 15:35:09 +02:00
ansKey = ' D ' ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeWear :
2013-06-29 15:56:08 +02:00
answer = " Wear " ;
2013-09-03 15:35:09 +02:00
ansKey = ' W ' ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeRing :
2013-06-29 15:56:08 +02:00
answer = " Ring " ;
2013-09-03 15:35:09 +02:00
ansKey = ' R ' ;
break ; // Only the bell!
case kVerbCodePlay :
2013-06-29 15:56:08 +02:00
answer = " Play " ;
2013-09-03 15:35:09 +02:00
ansKey = ' P ' ;
2013-06-30 22:01:05 +02:00
break ;
2013-09-03 15:35:09 +02:00
case kVerbCodeEat :
2013-06-29 15:56:08 +02:00
answer = " Eat " ;
2013-09-03 15:35:09 +02:00
ansKey = ' E ' ;
2013-06-30 22:01:05 +02:00
break ;
default :
2013-09-03 15:35:09 +02:00
answer = " ? Unknown! " ; // Bug!
ansKey = ' ? ' ;
2013-06-29 15:56:08 +02:00
}
}
} // End of namespace Avalanche.