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
/*#include "NimUnit.h"*/
/*#include "Highs.h"*/
/*#include "Helper.h"*/
namespace Avalanche {
const Acci : : vocab Acci : : words [ nowords ] = {
/* 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 " } ,
{ 17 , " STAND " } ,
{ 18 , " GO " } , { 19 , " INFO " } , { 20 , " UNDRESS " } ,
{ 20 , " DOFF " } ,
{ 21 , " DRESS " } , { 21 , " WEAR " } , { 21 , " DON " } ,
{ 22 , " PLAY " } ,
{ 22 , " STRUM " } , { 23 , " RING " } , { 24 , " HELP " } ,
{ 25 , " KENDAL " } , { 26 , " CAPYBARA " } , { 27 , " BOSS " } ,
{ 255 , " NINET " } , /* block for NINETY */
{ 28 , " URINATE " } , { 28 , " MINGITE " } , { 29 , " NINETY " } ,
{ 30 , " ABRACADABRA " } , { 30 , " PLUGH " } , { 30 , " XYZZY " } ,
{ 30 , " HOCUS " } , { 30 , " POCUS " } , { 30 , " IZZY " } ,
{ 30 , " WIZZY " } , { 30 , " PLOVER " } ,
{ 30 , " MELENKURION " } , { 30 , " ZORTON " } , { 30 , " BLERBI " } ,
{ 30 , " THURB " } , { 30 , " SNOEZE " } , { 30 , " SAMOHT " } ,
{ 30 , " NOSIDE " } , { 30 , " PHUGGG " } , { 30 , " KNERL " } ,
{ 30 , " MAGIC " } , { 30 , " KLAETU " } , { 30 , " VODEL " } ,
{ 30 , " BONESCROLLS " } , { 30 , " RADOF " } ,
{ 31 , " RESTART " } ,
{ 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 " } ,
{ 35 , " FIRE " } ,
/* Passwords, 36: */
{ 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 " } ,
{ 47 , " THANKS " } , /* = 47, "ta", which was defined earlier. */
/* Nouns - Objects: 50-100. */
{ 50 , " WINE " } , { 50 , " BOOZE " } , { 50 , " NASTY " } ,
{ 50 , " VINEGAR " } , { 51 , " MONEYBAG " } ,
{ 51 , " BAG " } , { 51 , " CASH " } , { 51 , " DOSH " } ,
{ 51 , " WALLET " } ,
{ 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 " } ,
{ 59 , " TOADSTOOLS " } , { 60 , " KEY " } , { 61 , " BELL " } ,
{ 62 , " PRESCRIPT " } , { 62 , " SCROLL " } , { 62 , " MESSAGE " } ,
{ 63 , " PEN " } , { 63 , " QUILL " } , { 64 , " INK " } ,
{ 64 , " INKPOT " } , { 65 , " CLOTHES " } , { 66 , " HABIT " } ,
{ 66 , " DISGUISE " } , { 67 , " ONION " } ,
{ 99 , " PASSWORD " } ,
/* Objects from Also are placed between 101 and 131. */
/* 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 " } ,
{ 154 , " MALAGAUCHE " } ,
{ 155 , " FRIAR " } , { 155 , " TUCK " } , { 156 , " ROBIN " } ,
{ 156 , " HOOD " } , { 157 , " CWYTALOT " } , { 157 , " GUARD " } ,
{ 157 , " BRIDGEKEEP " } , { 158 , " BARON " } , { 158 , " LUSTIE " } ,
{ 159 , " DUKE " } , { 159 , " GRACE " } , { 160 , " DOGFOOD " } ,
{ 160 , " MINSTREL " } , { 161 , " TRADER " } , { 161 , " SHOPKEEPER " } ,
{ 161 , " STALLHOLDER " } ,
{ 162 , " PILGRIM " } , { 162 , " IBYTHNETH " } , { 163 , " ABBOT " } ,
{ 163 , " AYLES " } , { 164 , " PORT " } , { 165 , " SPURGE " } ,
{ 166 , " JACQUES " } , { 166 , " SLEEPER " } , { 166 , " RINGER " } ,
/* Nouns- People - Female: 175-199 */
{ 175 , " WIFE " } , { 175 , " ARKATA " } , { 176 , " GEDALODAVA " } ,
{ 176 , " GEIDA " } , { 176 , " PRINCESS " } , { 178 , " WISE " } ,
{ 178 , " WITCH " } ,
/* 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 " } ,
{ 203 , " MONK " } , { 204 , " BARMAN " } , { 204 , " BARTENDER " } ,
/* Prepositions, 225-249 */
{ 225 , " TO " } , { 226 , " AT " } , { 227 , " UP " } ,
{ 228 , " INTO " } , { 228 , " INSIDE " } , { 229 , " OFF " } ,
{ 230 , " UP " } , { 231 , " DOWN " } , { 232 , " ON " } ,
/* Please, 251 */
{ 251 , " PLEASE " } ,
/* About, 252 */
{ 252 , " ABOUT " } , { 252 , " CONCERNING " } ,
/* Swear words, 253 */
/* I M P O R T A N T M E S S A G E
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 ? */
{ 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 " } ,
/* and other even ruder words. You didn't read them, did you? Good. */
/* Answer-back smart-alec words, 249 */
{ 249 , " YES " } , { 249 , " NO " } , { 249 , " BECAUSE " } ,
/* Noise words, 255 */
{ 255 , " THE " } , { 255 , " A " } , { 255 , " NOW " } ,
{ 255 , " SOME " } , { 255 , " AND " } , { 255 , " THAT " } ,
{ 255 , " POCUS " } , { 255 , " HIS " } ,
{ 255 , " THIS " } , { 255 , " SENTINEL " }
} ; /* for "Ken SENT Me" */
const char Acci : : what [ ] = " That's not possible! " ;
const Acci : : ranktype Acci : : ranks [ 9 ] = {
{ 0 , " Beginner " } , { 10 , " Novice " } ,
{ 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-07-28 16:46:15 +02:00
void Acci : : clearwords ( ) {
for ( byte i = 0 ; i < 11 ; i + + )
if ( ! realwords [ i ] . empty ( ) )
realwords [ i ] . clear ( ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-28 16:46:15 +02:00
byte Acci : : wordnum ( Common : : String x ) {
if ( x . empty ( ) )
return 0 ;
2013-07-28 18:50:46 +02:00
2013-07-28 20:57:40 +02:00
for ( int32 fv = nowords - 1 ; fv > = 0 ; fv - - )
2013-08-25 17:10:29 +02:00
if ( words [ fv ] . w = = x )
return words [ fv ] . n ;
// If not found as a whole, we look for it as a substring.
for ( int32 fv = nowords - 1 ; fv > = 0 ; fv - - )
if ( Common : : String ( words [ fv ] . w . c_str ( ) , x . size ( ) ) = = x )
2013-07-28 20:57:40 +02:00
return words [ fv ] . n ;
return pardon ;
2013-06-29 15:56:08 +02:00
}
2013-07-28 20:57:40 +02:00
void Acci : : replace ( Common : : String old1 , byte new1 ) {
2013-08-01 12:13:44 +02:00
int16 q = _vm - > _parser - > pos ( old1 , thats ) ;
2013-07-28 20:57:40 +02:00
while ( q ! = - 1 ) {
if ( new1 = = 0 )
thats . deleteChar ( q ) ;
else {
for ( byte i = q ; i < q + old1 . size ( ) ; i + + )
thats . deleteChar ( q ) ;
thats . insertChar ( new1 , q ) ;
}
2013-08-01 12:13:44 +02:00
q = _vm - > _parser - > pos ( old1 , thats ) ;
2013-07-28 20:57:40 +02:00
}
2013-06-29 15:56:08 +02:00
}
/*procedure ninetydump;
var f : file ; y : int16 ; bit : byte ; a : byte absolute $ A000 : 800 ;
begin
off ;
assign ( f , ' avvydump . avd ' ) ;
rewrite ( f , 1 ) ;
2013-07-24 18:25:07 +02:00
blockwrite ( f , _vm - > _gyro - > dna , 177 ) ; { just anything }
2013-06-29 15:56:08 +02:00
for bit : = 0 to 3 do
begin
port [ $ 3 c4 ] : = 2 ; port [ $ 3 ce ] : = 4 ; port [ $ 3 C5 ] : = 1 shl bit ; port [ $ 3 CF ] : = bit ;
blockwrite ( f , a , 12080 ) ;
end ;
close ( f ) ; on ;
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( ' Dumped . ' ) ;
2013-06-29 15:56:08 +02:00
end ; */
Common : : String Acci : : rank ( ) {
2013-08-17 15:07:02 +02:00
for ( byte fv = 0 ; fv < 8 ; fv + + ) {
2013-07-24 18:25:07 +02:00
if ( ( _vm - > _gyro - > dna . score > = ranks [ fv ] . score ) & & ( _vm - > _gyro - > dna . score < ranks [ fv + 1 ] . score ) ) {
2013-08-17 15:07:02 +02:00
return ranks [ fv ] . 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
}
Common : : String Acci : : totaltime ( ) {
2013-08-17 15:07:02 +02:00
const double ticks_in_1_sec = ( double ) ( 65535 ) / 3600 ;
2013-06-29 15:56:08 +02:00
uint16 h , m , s ;
Common : : String a ;
2013-08-17 15:07:02 +02:00
// There are 65535 clock ticks in a second, 1092.25 in a minute, and 65535 in an hour.
h = _vm - > _gyro - > dna . total_time / ticks_in_1_sec ; // No. of seconds.
if ( h < 0 )
h = ceil ( ( float ) h ) ;
else
h = floor ( ( float ) h ) ;
m = h % 3600 ;
h = h / 3600 ;
s = m % 60 ;
m = m / 60 ;
a = " You've been playing for " ;
if ( h > 0 )
a = a + _vm - > _gyro - > strf ( h ) + " hours, " ;
if ( ( m > 0 ) | | ( h ! = 0 ) )
a = a + _vm - > _gyro - > strf ( m ) + " minutes and " ;
a = a + _vm - > _gyro - > strf ( s ) + " seconds. " ;
return a ;
2013-06-29 15:56:08 +02:00
}
void Acci : : number ( Common : : String & codes ) {
warning ( " STUB: Acci::number() " ) ;
}
void Acci : : cheatparse ( Common : : String codes ) {
uint16 num ;
int16 e ;
char cmd ;
int16 se , sx , sy ;
warning ( " STUB: Acci::cheatparse() " ) ;
}
void Acci : : punctustrip ( Common : : String & x ) { /* Strips punctuation from x. */
2013-07-28 16:46:15 +02:00
const char punct [ ] = " ~`!@#$%^&*()_+-={}[]: \" |;' \\ ,./<>? " ;
for ( byte fv = 0 ; fv < 32 ; fv + + )
do {
2013-08-01 12:13:44 +02:00
int16 p = _vm - > _parser - > pos ( Common : : String ( punct [ fv ] ) , x ) ;
2013-07-28 16:46:15 +02:00
if ( p = = - 1 )
break ;
x . deleteChar ( p ) ;
} while ( true ) ;
2013-06-29 15:56:08 +02:00
}
2013-07-29 10:06:13 +02:00
void Acci : : displaywhat ( byte ch , bool animate , bool & ambigous ) { /* << it's an adjective! */
2013-07-28 23:13:34 +02:00
if ( ch = = pardon ) {
ambigous = true ;
if ( animate )
_vm - > _scrolls - > display ( " Whom? " ) ;
else
_vm - > _scrolls - > display ( " What? " ) ;
} else {
if ( animate )
_vm - > _scrolls - > display ( Common : : String ( " { " ) + _vm - > _gyro - > getname ( ch ) + " } " ) ;
else {
Common : : String z = _vm - > _gyro - > get_better ( ch ) ;
if ( z ! = " " )
_vm - > _scrolls - > display ( Common : : String ( " { " ) + z + " } " ) ;
}
}
2013-06-29 15:56:08 +02:00
}
bool Acci : : do_pronouns ( ) {
2013-07-28 23:13:34 +02:00
bool ambiguous = false ;
2013-06-29 15:56:08 +02:00
2013-07-29 10:06:13 +02:00
for ( byte fv = 0 ; fv < thats . size ( ) ; fv + + ) {
byte word = thats [ fv ] ;
switch ( word ) {
2013-07-28 23:13:34 +02:00
case 200 : {
displaywhat ( _vm - > _gyro - > him , true , ambiguous ) ;
thats . setChar ( _vm - > _gyro - > him , fv ) ;
}
break ;
case 201 : {
displaywhat ( _vm - > _gyro - > her , true , ambiguous ) ;
thats . setChar ( _vm - > _gyro - > her , fv ) ;
}
break ;
case 202 : {
displaywhat ( _vm - > _gyro - > it , false , ambiguous ) ;
thats . setChar ( _vm - > _gyro - > it , fv ) ;
}
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
void Acci : : lowercase ( ) {
_vm - > _parser - > _inputText . toLowercase ( ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : propernouns ( ) {
lowercase ( ) ;
2013-08-26 20:13:43 +02:00
// We set every word's first character to uppercase.
for ( byte i = 1 ; i < ( _vm - > _parser - > _inputText . size ( ) - 1 ) ; i + + )
if ( _vm - > _parser - > _inputText [ i ] = = ' ' )
_vm - > _parser - > _inputText . setChar ( toupper ( _vm - > _parser - > _inputText [ i + 1 ] ) , i + 1 ) ;
// And the first character as well.
_vm - > _parser - > _inputText . setChar ( toupper ( _vm - > _parser - > _inputText [ 0 ] ) , 0 ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : sayit ( ) { /* This makes Avalot say the response. */
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
}
void Acci : : store_interrogation ( byte interrogation ) {
2013-08-26 20:13:43 +02:00
if ( _vm - > _parser - > _inputText . empty ( ) )
return ;
/* Strip _vm->_parser->_inputText: */
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 ( ) ;
_vm - > _timeout - > lose_timer ( _vm - > _timeout - > reason_cardiffsurvey ) ; // if you want to use any other timer, put this into the case statement. */
switch ( interrogation ) {
case 1 : {
lowercase ( ) ;
sayit ( ) ;
_vm - > _gyro - > dna . like2drink = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 2 ;
}
break ;
case 2 : {
propernouns ( ) ;
sayit ( ) ;
_vm - > _gyro - > dna . favourite_song = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 3 ;
}
break ;
case 3 : {
propernouns ( ) ;
sayit ( ) ;
_vm - > _gyro - > dna . worst_place_on_earth = _vm - > _parser - > _inputText ;
_vm - > _gyro - > dna . cardiff_things = 4 ;
}
break ;
case 4 : {
lowercase ( ) ;
sayit ( ) ;
if ( ! _vm - > _gyro - > dna . spare_evening . empty ( ) )
_vm - > _gyro - > dna . spare_evening . clear ( ) ;
_vm - > _gyro - > dna . spare_evening = _vm - > _parser - > _inputText ;
_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! */
_vm - > _gyro - > magics [ 1 ] . op = _vm - > _gyro - > nix ;
_vm - > _gyro - > dna . cardiff_things = 5 ;
}
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 : : clearuint16s ( ) {
warning ( " STUB: Acci::clearuint16s() " ) ;
}
void Acci : : parse ( ) {
byte n , fv , ff ;
2013-07-28 16:46:15 +02:00
Common : : String c , cc , thisword ;
2013-07-28 18:50:46 +02:00
byte answer ;
2013-06-29 15:56:08 +02:00
bool notfound ;
2013-07-28 16:46:15 +02:00
// First parsing - word identification
2013-07-28 18:50:46 +02:00
if ( ! thats . empty ( ) )
thats . clear ( ) ;
2013-07-28 16:46:15 +02:00
c = _vm - > _parser - > _inputText + ' ' ;
n = 0 ;
polite = false ;
verb = pardon ;
thing = pardon ;
thing2 = pardon ;
person = pardon ;
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 ] = = ' . ' ) {
cheatparse ( _vm - > _parser - > _inputText ) ;
thats = nowt ;
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 ) {
store_interrogation ( _vm - > _gyro - > interrogation ) ;
_vm - > _gyro - > weirdword = true ;
return ;
}
2013-07-28 20:57:40 +02:00
// Actually process the command.
2013-07-28 16:46:15 +02:00
cc = c ;
c . toUppercase ( ) ;
while ( ! c . empty ( ) ) {
2013-07-30 21:32:14 +02:00
while ( ( ! c . empty ( ) ) & & ( c [ 0 ] = = ' ' ) ) {
2013-07-28 16:46:15 +02:00
c . deleteChar ( 0 ) ;
cc . deleteChar ( 0 ) ;
}
2013-07-30 21:32:14 +02:00
if ( c . empty ( ) )
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-08-01 12:13:44 +02:00
byte size = _vm - > _parser - > pos ( Common : : String ( ' ' ) , c ) + 1 ;
2013-07-28 16:46:15 +02:00
char * subStr = new char [ size ] ;
Common : : strlcpy ( subStr , c . c_str ( ) , size ) ;
thisword = subStr ;
Common : : strlcpy ( subStr , cc . c_str ( ) , size ) ;
realwords [ n ] = subStr ;
delete [ ] subStr ;
punctustrip ( c ) ;
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-07-28 18:50:46 +02:00
for ( ff = 0 ; ff < 31 ; ff + + ) {
2013-08-01 12:13:44 +02:00
if ( ( _vm - > _gyro - > also [ ff ] [ 0 ] ! = 0 ) & & ( _vm - > _parser - > pos ( ' , ' + thisword , * _vm - > _gyro - > also [ ff ] [ 0 ] ) > - 1 ) ) {
2013-07-28 16:46:15 +02:00
thats = thats + Common : : String ( 99 + ff ) ;
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 ) {
answer = wordnum ( thisword ) ;
2013-07-28 18:50:46 +02:00
if ( answer = = pardon ) {
2013-07-28 16:46:15 +02:00
notfound = true ;
thats = thats + pardon ;
} else
thats = thats + answer ;
n + + ;
}
2013-07-28 20:57:40 +02:00
// Delete words we already processed.
2013-08-01 12:13:44 +02:00
int16 spacePos = _vm - > _parser - > pos ( Common : : String ( ' ' ) , c ) ;
2013-07-28 18:50:46 +02:00
if ( spacePos > - 1 )
for ( byte i = 0 ; i < = spacePos ; i + + )
c . deleteChar ( 0 ) ;
2013-08-01 12:13:44 +02:00
spacePos = _vm - > _parser - > pos ( Common : : String ( ' ' ) , cc ) ;
2013-07-28 18:50:46 +02:00
if ( spacePos > - 1 )
for ( byte i = 0 ; i < = spacePos ; i + + )
cc . deleteChar ( 0 ) ;
2013-07-28 16:46:15 +02:00
}
2013-08-01 12:13:44 +02:00
if ( _vm - > _parser - > pos ( Common : : String ( 254 ) , thats ) > - 1 )
unknown = realwords [ _vm - > _parser - > pos ( Common : : String ( 254 ) , thats ) ] ;
2013-07-28 18:50:46 +02:00
else
if ( ! unknown . empty ( ) )
unknown . clear ( ) ;
2013-07-28 20:57:40 +02:00
// Replace words' codes that mean the same.
replace ( Common : : String ( 255 ) , 0 ) ; /* zap noise words */
replace ( Common : : String ( 13 ) + 226 , 1 ) ; // "look at" = "examine"
replace ( Common : : String ( 13 ) + 228 , 1 ) ; // "look in" = "examine"
2013-07-29 12:05:16 +02:00
replace ( Common : : String ( 4 ) + 230 , 17 ) ; // "get up" = "stand"
2013-07-28 20:57:40 +02:00
replace ( Common : : String ( 4 ) + 231 , 17 ) ; // "get down" = "stand"... well, why not?
replace ( Common : : String ( 18 ) + 228 , 2 ) ; // "go in" = "open [door]"
replace ( Common : : String ( 28 ) + 229 , 253 ) ; // "P' off" is a swear word
replace ( Common : : String ( 4 ) + 6 , 6 ) ; // "Take inventory" (remember Colossal Adventure?)
replace ( Common : : String ( 40 ) + 232 , 21 ) ; // "put on" = "don"
replace ( Common : : String ( 4 ) + 229 , 20 ) ; // "take off" = "doff"
2013-07-28 16:46:15 +02:00
2013-07-28 23:13:34 +02:00
// Words that could mean more than one person
if ( _vm - > _gyro - > dna . room = = r__nottspub )
replace ( Common : : String ( 204 ) , 164 ) ; // Barman = Port
else
replace ( Common : : String ( 204 ) , 154 ) ; // Barman = Malagauche
switch ( _vm - > _gyro - > dna . room ) {
case r__aylesoffice :
replace ( Common : : String ( 203 ) , 163 ) ; // Monk = Ayles
break ;
case r__musicroom :
replace ( Common : : String ( 203 ) , 166 ) ; // Monk = Jacques
break ;
default :
replace ( Common : : String ( 203 ) , 162 ) ; // Monk = Ibythneth
}
if ( do_pronouns ( ) ) {
_vm - > _gyro - > weirdword = true ;
thats = nowt ;
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.
fv = 0 ;
while ( ( fv < 11 ) & & ! realwords [ fv ] . empty ( ) ) {
if ( ( realwords [ fv ] [ 0 ] = = ' \' ' ) | | ( realwords [ fv ] [ 0 ] = = ' \" ' ) ) {
2013-08-12 13:53:18 +02:00
_vm - > _gyro - > subjnumber = ( byte ) thats [ fv ] ;
2013-07-29 10:06:13 +02:00
thats . setChar ( moved , fv ) ;
break ;
}
fv + + ;
}
2013-08-25 17:10:29 +02:00
if ( ( _vm - > _gyro - > subjnumber = = 0 ) & & ! thats . empty ( ) ) // Still not found.
2013-08-09 12:37:35 +02:00
for ( fv = 0 ; fv < thats . size ( ) - 1 ; fv + + )
2013-08-12 13:53:18 +02:00
if ( ( byte ) thats [ fv ] = = 252 ) { // The word is "about", or something similar.
_vm - > _gyro - > subjnumber = ( byte ) thats [ fv + 1 ] ;
2013-07-29 10:06:13 +02:00
thats . setChar ( 0 , fv + 1 ) ;
break ;
}
2013-08-25 17:10:29 +02:00
if ( ( _vm - > _gyro - > subjnumber = = 0 ) & & ! thats . empty ( ) ) // STILL not found! Must be the word after "say".
2013-08-09 12:37:35 +02:00
for ( fv = 0 ; fv < thats . size ( ) - 1 ; fv + + )
2013-08-12 13:53:18 +02:00
if ( ( ( byte ) thats [ fv ] = = 7 ) & & ( ( byte ) thats [ fv + 1 ] ! = 0 ) & & ! ( ( 225 < = ( byte ) thats [ fv + 1 ] ) & & ( ( byte ) thats [ fv + 1 ] < = 229 ) ) ) {
2013-07-29 10:06:13 +02:00
// SAY not followed by a preposition
2013-08-12 13:53:18 +02:00
_vm - > _gyro - > subjnumber = ( byte ) thats [ fv + 1 ] ;
2013-07-29 10:06:13 +02:00
thats . setChar ( 0 , fv + 1 ) ;
break ;
}
for ( int8 fv = thats . size ( ) - 1 ; fv > = 0 ; fv - - ) // Reverse order, so first will be used.
2013-08-12 13:53:18 +02:00
if ( ( ( byte ) thats [ fv ] = = 253 ) | | ( ( byte ) thats [ fv ] = = 249 ) | | ( ( 1 < = ( byte ) thats [ fv ] ) & & ( ( byte ) thats [ fv ] < = 49 ) ) )
verb = ( byte ) thats [ fv ] ;
else if ( ( 50 < = ( byte ) thats [ fv ] ) & & ( ( byte ) thats [ fv ] < = 149 ) ) {
2013-07-29 10:06:13 +02:00
thing2 = thing ;
2013-08-12 13:53:18 +02:00
thing = ( byte ) thats [ fv ] ;
} else if ( ( 150 < = ( byte ) thats [ fv ] ) & & ( ( byte ) thats [ fv ] < = 199 ) )
person = ( byte ) thats [ fv ] ;
else if ( ( byte ) thats [ fv ] = = 251 )
2013-07-29 10:06:13 +02:00
polite = true ;
if ( ( ! unknown . empty ( ) ) & & ( verb ! = vb_exam ) & & ( verb ! = vb_talk ) & & ( verb ! = vb_save ) & & ( verb ! = vb_load ) & & ( verb ! = vb_dir ) ) {
_vm - > _scrolls - > display ( Common : : String ( " Sorry, but I have no idea what \" " ) + unknown + " \" means. Can you rephrase it? " ) ;
_vm - > _gyro - > weirdword = true ;
} else
_vm - > _gyro - > weirdword = false ;
if ( thats . empty ( ) )
thats = nowt ;
if ( thing ! = pardon )
_vm - > _gyro - > it = thing ;
if ( person ! = pardon )
if ( person < 175 )
_vm - > _gyro - > him = person ;
else
_vm - > _gyro - > her = person ;
2013-06-29 15:56:08 +02:00
}
2013-08-17 15:07:02 +02:00
void Acci : : examobj ( ) {
if ( thing ! = _vm - > _gyro - > thinks )
_vm - > _lucerna - > thinkabout ( thing , _vm - > _gyro - > a_thing ) ;
switch ( thing ) {
case _vm - > _gyro - > wine :
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 ;
case _vm - > _gyro - > onion :
if ( _vm - > _gyro - > dna . rotten_onion )
_vm - > _visa - > dixi ( ' q ' , 21 ) ; // Yucky onion.
else
_vm - > _visa - > dixi ( ' t ' , 18 ) ; // Normal onion scroll
break ;
default :
_vm - > _visa - > dixi ( ' t ' , thing ) ; // <<< Ordinarily
}
2013-06-29 15:56:08 +02:00
}
2013-08-12 13:28:28 +02:00
bool Acci : : personshere ( ) { // Person equivalent of "holding".
2013-08-12 13:53:18 +02:00
if ( ( person = = pardon ) | | ( person = = 0 ) | | ( _vm - > _gyro - > whereis [ person - 150 ] = = _vm - > _gyro - > dna . room ) )
2013-08-12 13:28:28 +02:00
return true ;
else {
if ( person < 175 )
_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-08-25 18:05:02 +02:00
if ( personshere ( ) ) {
if ( thing ! = _vm - > _gyro - > thinks )
_vm - > _lucerna - > thinkabout ( person , _vm - > _gyro - > a_person ) ;
person - = 149 ;
switch ( person ) { /* Special cases */
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...
_vm - > _visa - > dixi ( ' p ' , person ) ;
}
// And afterwards...
if ( ( person = = 14 ) & & ( ! _vm - > _gyro - > dna . ayles_is_awake ) )
_vm - > _visa - > dixi ( ' Q ' , 13 ) ;
2013-06-29 15:56:08 +02:00
}
bool Acci : : holding ( ) {
2013-08-17 15:07:02 +02:00
if ( ( 51 < = thing ) & & ( thing < = 99 ) ) // Also.
return true ;
bool holdingResult = false ;
if ( thing > 100 )
_vm - > _scrolls - > display ( " Be reasonable! " ) ;
2013-08-26 20:13:43 +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-08-21 20:20:42 +02:00
void Acci : : openBox ( bool before ) {
2013-08-27 11:10:24 +02:00
if ( ( _vm - > _gyro - > dna . room = = r__yours ) & & ( thing = = 54 ) ) {
_vm - > _celer - > show_one ( 5 ) ;
2013-08-25 13:25:50 +02:00
2013-08-21 20:20:42 +02:00
_vm - > _celer - > pics_link ( ) ;
_vm - > _trip - > trippancy_link ( ) ;
_vm - > _graphics - > refreshScreen ( ) ;
2013-08-27 11:10:24 +02:00
_vm - > _system - > delayMillis ( 55 ) ;
if ( ! before ) {
_vm - > _celer - > show_one ( 6 ) ;
_vm - > _celer - > pics_link ( ) ;
_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-08-17 15:07:02 +02:00
// EITHER it's an object OR it's an Also OR it's a person OR it's something else.
if ( ( person = = pardon ) & & ( thing ! = pardon ) ) {
if ( holding ( ) ) {
// Remember: it's been Slipped! Ie subtract 49.
if ( ( 1 < = thing ) & & ( thing < = 49 ) ) // Standard object
examobj ( ) ;
else if ( ( 50 < = thing ) & & ( thing < = 100 ) ) { // Also thing
2013-08-21 20:20:42 +02:00
openBox ( true ) ;
_vm - > _scrolls - > display ( * _vm - > _gyro - > also [ thing - 50 ] [ 1 ] ) ;
openBox ( false ) ;
2013-08-17 15:07:02 +02:00
}
}
} else if ( person ! = pardon )
exampers ( ) ;
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
}
void Acci : : inv ( ) { /* the time-honoured command... */
2013-06-30 22:01:05 +02:00
byte q = 0 ;
2013-08-26 11:45:06 +02:00
_vm - > _scrolls - > display ( Common : : String ( " You're carrying " ) + _vm - > _scrolls - > kControlToBuffer ) ;
{
for ( byte fv = 0 ; fv < numobjs ; fv + + )
if ( _vm - > _gyro - > dna . obj [ fv ] ) {
q + + ;
if ( q = = _vm - > _gyro - > dna . carrying )
_vm - > _scrolls - > display ( Common : : String ( " and " ) + _vm - > _scrolls - > kControlToBuffer ) ;
2013-08-26 16:10:17 +02:00
_vm - > _scrolls - > display ( _vm - > _gyro - > get_better ( fv + 1 ) + _vm - > _scrolls - > kControlToBuffer ) ;
if ( ( fv + 1 ) = = _vm - > _gyro - > dna . wearing )
2013-08-26 11:45:06 +02:00
_vm - > _scrolls - > display ( Common : : String ( " , which you're wearing " ) + _vm - > _scrolls - > kControlToBuffer ) ;
if ( q < _vm - > _gyro - > dna . carrying )
_vm - > _scrolls - > display ( Common : : String ( " , " ) + _vm - > _scrolls - > kControlToBuffer ) ;
}
if ( _vm - > _gyro - > dna . wearing = = nowt )
_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
}
void Acci : : swallow ( ) { /* Eat something. */
2013-08-25 13:25:50 +02:00
switch ( thing ) {
case _vm - > _gyro - > wine :
switch ( _vm - > _gyro - > dna . winestate ) { /* 4 is perfect */
case 1 : {
if ( _vm - > _gyro - > dna . teetotal ) {
_vm - > _visa - > dixi ( ' D ' , 6 ) ;
return ;
}
_vm - > _visa - > dixi ( ' U ' , 1 ) ;
_vm - > _pingo - > wobble ( ) ;
_vm - > _visa - > dixi ( ' U ' , 2 ) ;
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
_vm - > _lucerna - > objectlist ( ) ;
have_a_drink ( ) ;
}
break ;
case 2 :
case 3 :
_vm - > _visa - > dixi ( ' d ' , 8 ) ;
break ; /* You can't drink it! */
}
break ;
case _vm - > _gyro - > potion : {
_vm - > _gyro - > background ( 4 ) ;
_vm - > _visa - > dixi ( ' U ' , 3 ) ;
_vm - > _lucerna - > gameover ( ) ;
_vm - > _gyro - > background ( 0 ) ;
}
break ;
case _vm - > _gyro - > ink :
_vm - > _visa - > dixi ( ' U ' , 4 ) ;
break ;
case _vm - > _gyro - > chastity :
_vm - > _visa - > dixi ( ' U ' , 5 ) ;
break ;
case _vm - > _gyro - > mushroom : {
_vm - > _visa - > dixi ( ' U ' , 6 ) ;
_vm - > _lucerna - > gameover ( ) ;
}
break ;
case _vm - > _gyro - > onion :
if ( _vm - > _gyro - > dna . rotten_onion ) _vm - > _visa - > dixi ( ' U ' , 11 ) ;
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! " ) ;
/* Constant- leave this one */
}
2013-06-29 15:56:08 +02:00
}
void Acci : : others ( ) {
/* This lists the other people in the room. */
warning ( " STUB: Acci::others() " ) ;
}
void Acci : : lookaround ( ) {
/* This is called when you say "look." */
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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 23 ) ;
2013-06-30 22:01:05 +02:00
else
others ( ) ;
break ;
case r__robins :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . tied_up )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 38 ) ;
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . mushroom_growing )
2013-07-24 19:43:10 +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-07-24 19:43:10 +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-07-24 19:43:10 +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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 80 ) ;
2013-06-29 15:56:08 +02:00
break ; /* Inside art gallery */
case 514 :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 81 ) ;
2013-06-29 15:56:08 +02:00
break ; /* Outside ditto */
case 260 :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 82 ) ;
2013-06-29 15:56:08 +02:00
break ; /* Outside Geida's room. */
}
break ;
default :
others ( ) ;
}
}
void Acci : : opendoor ( ) { /* so whaddya THINK this does?! */
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) { /* Special cases. */
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-06-29 15:56:08 +02:00
/* Opening the box. */
thing = 54 ; /* The box. */ person = pardon ;
examine ( ) ;
return ;
}
break ;
case r__spludwicks :
2013-06-30 22:01:05 +02:00
if ( thing = = 61 ) {
2013-07-24 19:43:10 +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-06-29 15:56:08 +02:00
return ; /* No doors can open if you can't move Avvy. */
2013-06-30 22:01:05 +02:00
2013-08-21 20:20:42 +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 ) {
case _vm - > _gyro - > exclaim :
_vm - > _trip - > tr [ 0 ] . bounce ( ) ;
_vm - > _visa - > dixi ( ' x ' , _vm - > _gyro - > portals [ fv ] . data ) ;
break ;
case _vm - > _gyro - > transport :
_vm - > _trip - > fliproom ( ( _vm - > _gyro - > portals [ fv ] . data ) > > 8 /*High byte*/ , ( _vm - > _gyro - > portals [ fv ] . data ) & 0x0F /*Low byte*/ ) ;
break ;
case _vm - > _gyro - > unfinished :
_vm - > _trip - > tr [ 0 ] . bounce ( ) ;
_vm - > _scrolls - > display ( " Sorry. This place is not available yet! " ) ;
break ;
case _vm - > _gyro - > special :
_vm - > _trip - > call_special ( _vm - > _gyro - > portals [ fv ] . data ) ;
break ;
case _vm - > _gyro - > mopendoor :
_vm - > _trip - > open_the_door ( ( _vm - > _gyro - > portals [ fv ] . data ) > > 8 , ( _vm - > _gyro - > portals [ fv ] . data ) & 0x0F , fv ) ;
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-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-06-29 15:56:08 +02:00
" to anywhere other than Argent, Birmingham, Cardiff, "
" Nottingham and Norwich. " ) ) ;
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
}
void Acci : : putproc ( ) { /* Called when you call vb_put. */
2013-06-30 22:01:05 +02:00
if ( ! holding ( ) )
return ;
2013-06-29 15:56:08 +02:00
thing2 - = 49 ; /* Slip the second object */
2013-06-30 22:01:05 +02:00
char temp = thing ;
2013-06-29 15:56:08 +02:00
thing = thing2 ;
2013-06-30 22:01:05 +02:00
if ( ! holding ( ) )
return ;
2013-06-29 15:56:08 +02:00
thing = temp ;
2013-08-25 13:25:50 +02:00
// Thing is the thing which you're putting in. Thing2 is where you're putting it.
2013-06-29 15:56:08 +02:00
switch ( thing2 ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > wine :
if ( thing = = _vm - > _gyro - > onion ) {
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-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . box_contents ! = nowt )
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-06-29 15:56:08 +02:00
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . wearing = = thing )
2013-07-24 19:43:10 +02:00
_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-08-25 13:25:50 +02:00
//_vm->_celer->show_one(5); // Open box.
openBox ( true ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . box_contents = thing ;
2013-08-25 13:25:50 +02:00
_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
//_vm->_celer->show_one(6); // Shut box.
openBox ( false ) ;
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 ( ) ;
}
}
/* The result of this fn is whether or not he says "Hey, thanks!" */
void Acci : : not_in_order ( ) {
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
}
void Acci : : go_to_cauldron ( ) {
2013-08-25 13:25:50 +02:00
_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
}
bool Acci : : give2spludwick ( ) {
2013-06-30 22:01:05 +02:00
bool give2spludwick_result = false ;
2013-06-29 15:56:08 +02:00
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > spludwick_order [ _vm - > _gyro - > dna . given2spludwick ] ! = thing ) {
2013-06-30 22:01:05 +02:00
not_in_order ( ) ;
return give2spludwick_result ;
}
2013-06-29 15:56:08 +02:00
2013-06-30 22:01:05 +02:00
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _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-07-24 19:43:10 +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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 20 ) ;
2013-06-29 15:56:08 +02:00
go_to_cauldron ( ) ;
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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 24 ) ;
2013-06-30 22:01:05 +02:00
go_to_cauldron ( ) ;
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > points ( 3 ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > mushroom :
2013-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > mushroom - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 25 ) ;
_vm - > _lucerna - > points ( 5 ) ;
2013-08-25 13:25:50 +02:00
_vm - > _gyro - > dna . given2spludwick + + ;
2013-06-30 22:01:05 +02:00
go_to_cauldron ( ) ;
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 :
give2spludwick_result = true ;
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
2013-06-29 15:56:08 +02:00
return give2spludwick_result ;
}
void Acci : : have_a_drink ( ) {
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . alcohol + = 1 ;
if ( _vm - > _gyro - > dna . alcohol = = 5 ) {
2013-08-26 16:10:17 +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-07-24 19:43:10 +02:00
_vm - > _trip - > new_game_for_trippancy ( ) ; /* Not really */
2013-06-29 15:56:08 +02:00
}
}
void Acci : : cardiff_climbing ( ) {
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
}
}
/* Called when you ask Avvy to stand. */
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
}
void Acci : : stand_up ( ) {
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) {
2013-06-29 15:56:08 +02:00
case r__yours : /* Avvy isn't asleep. */
2013-07-30 19:05:05 +02:00
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-08-23 16:03:06 +02:00
_vm - > _celer - > show_one ( 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 :
cardiff_climbing ( ) ;
break ;
case r__nottspub :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . sitting_in_pub ) {
2013-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 4 ) ; /* Not sitting down. */
2013-08-25 13:25:50 +02:00
_vm - > _trip - > tr [ 0 ] . visible = true ; /* But standing up. */
2013-07-24 19:43:10 +02:00
_vm - > _trip - > apped ( 1 , 4 ) ; /* And walking away. */
2013-07-24 18:25:07 +02:00
_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 ( ) ;
}
}
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-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 5 ) ;
_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-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . box_contents = nowt ;
2013-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
break ;
case r__insidecardiffcastle :
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > pen :
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > infield ( 2 ) ) {
2013-06-29 15:56:08 +02:00
/* 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 {
/* OK: we're taking the pen, and it's there. */
2013-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 4 ) ; /* No pen there now. */
_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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 53 ) ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 51 ) ;
2013-06-30 22:01:05 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > bolt :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 52 ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-07-24 19:43:10 +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 ) ) {
_vm - > _celer - > show_one ( 3 ) ;
_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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 57 ) ;
2013-06-29 15:56:08 +02:00
}
}
void Acci : : give_geida_the_lute ( ) {
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room ! = r__lustiesroom ) {
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Not yet. Try later! \232 \2 " ) ;
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 ( ) ;
_vm - > _visa - > dixi ( ' q ' , 64 ) ; /* She plays it. */
2013-06-29 15:56:08 +02:00
2013-06-30 22:01:05 +02:00
/* And the rest has been moved to Timeout... under give_lute_to_Geida. */
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-07-24 19:43:10 +02:00
_vm - > _enid - > back_to_bootstrap ( 4 ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : play_harp ( ) {
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
}
void Acci : : winsequence ( ) {
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 78 ) ;
_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
}
void Acci : : person_speaks ( ) {
bool found ;
byte fv ;
char cfv ;
2013-07-29 10:30:57 +02:00
if ( ( person = = pardon ) | | ( person = = 0 ) )
2013-08-25 13:25:50 +02:00
if ( ( _vm - > _gyro - > him = = pardon ) | | ( _vm - > _gyro - > whereis [ _vm - > _gyro - > him - 150 ] ! = _vm - > _gyro - > dna . room ) )
2013-07-24 18:25:07 +02:00
person = _vm - > _gyro - > her ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 18:25:07 +02:00
person = _vm - > _gyro - > him ;
2013-06-29 15:56:08 +02:00
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > whereis [ person - 150 ] ! = _vm - > _gyro - > dna . room ) {
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + ' 1 ' + _vm - > _scrolls - > kControlToBuffer ) ; // Avvy himself!
2013-06-29 15:56:08 +02:00
return ;
}
found = false ; /* The person we're looking for's code is in Person. */
2013-07-29 10:30:57 +02:00
for ( fv = 0 ; fv < _vm - > _trip - > numtr ; fv + + ) {
2013-07-24 19:43:10 +02:00
if ( _vm - > _trip - > tr [ fv ] . quick & & ( ( _vm - > _trip - > tr [ fv ] . a . accinum + 149 ) = = person ) ) {
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + byte ( fv + 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-08-25 13:25:50 +02:00
if ( ! found )
for ( fv = 0 ; fv < 16 ; fv + + )
if ( ( _vm - > _gyro - > quasipeds [ fv ] . who = = person ) & & ( _vm - > _gyro - > quasipeds [ fv ] . room = = _vm - > _gyro - > dna . room ) )
_vm - > _scrolls - > display ( Common : : String ( _vm - > _scrolls - > kControlRegister ) + byte ( fv + 65 ) + _vm - > _scrolls - > kControlToBuffer ) ;
2013-06-29 15:56:08 +02:00
}
void Acci : : heythanks ( ) {
person_speaks ( ) ;
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-08-26 16:10:17 +02:00
_vm - > _gyro - > dna . obj [ thing - 1 ] = false ;
2013-06-29 15:56:08 +02:00
}
void Acci : : do_that ( ) {
const Common : : String booze [ ] = { " Bitter " , " GIED " , " Whisky " , " Cider " , " " , " " , " " , " Mead " } ;
byte fv , ff ;
int16 sx , sy ;
bool ok ;
if ( thats = = Common : : String ( nowt ) ) {
2013-07-29 11:27:31 +02:00
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
if ( thing < 200 )
thing - = 49 ; // "Slip"
2013-06-30 22:01:05 +02:00
2013-06-29 15:56:08 +02:00
2013-08-01 11:15:59 +02:00
if ( ( verb ! = vb_load ) & & ( verb ! = vb_save ) & & ( verb ! = vb_quit ) & & ( verb ! = vb_info ) & & ( verb ! = vb_help )
& & ( verb ! = vb_larrypass ) & & ( verb ! = vb_phaon ) & & ( verb ! = vb_boss ) & & ( verb ! = vb_cheat ) & & ( verb ! = vb_restart ) & & ( verb ! = vb_dir )
& & ( verb ! = vb_score ) & & ( verb ! = vb_highscores ) & & ( verb ! = vb_smartalec ) ) {
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 ! = vb_die ) & & ( verb ! = vb_expletive ) & & ( verb ! = vb_wake ) ) {
_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
switch ( verb ) {
case vb_exam :
examine ( ) ;
break ;
case vb_open :
opendoor ( ) ;
break ;
2013-08-18 11:35:36 +02:00
case vb_pause : // 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.
_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-06-30 22:01:05 +02:00
case vb_get :
2013-06-29 15:56:08 +02:00
if ( thing ! = pardon ) {
/* 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
getproc ( thing ) ;
2013-06-29 15:56:08 +02:00
} else {
/* Not... ditto. */
if ( person ! = pardon )
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-06-29 15:56:08 +02:00
case vb_drop :
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-07-24 19:43:10 +02:00
/* begin _vm->_gyro->dna.obj[thing]:=false; _vm->_lucerna->objectlist(); end;*/
2013-06-29 15:56:08 +02:00
case vb_inv :
inv ( ) ;
break ;
case vb_talk :
if ( person = = pardon ) {
2013-08-12 13:28:28 +02:00
if ( _vm - > _gyro - > subjnumber = = 99 ) /* They typed "say password". */
_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 = = 449 ) ) {
thats . deleteChar ( 0 ) ;
for ( byte i = 0 ; i < 10 ; i + + )
realwords [ i ] = realwords [ i + 1 ] ;
//move(realwords[2], realwords[1], sizeof(realwords) - sizeof(realwords[1]));
verb = _vm - > _gyro - > subjnumber ;
2013-06-30 22:01:05 +02:00
do_that ( ) ;
return ;
2013-06-29 15:56:08 +02:00
} else {
2013-07-24 18:25:07 +02:00
person = _vm - > _gyro - > subjnumber ;
2013-08-12 13:28:28 +02:00
_vm - > _gyro - > subjnumber = 0 ;
if ( ( person = = 0 ) | | ( person = = pardon ) )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Talk to whom? " ) ;
2013-06-30 22:01:05 +02:00
else if ( personshere ( ) )
2013-08-12 13:28:28 +02:00
_vm - > _visa - > talkto ( person ) ;
2013-06-29 15:56:08 +02:00
}
2013-08-12 13:28:28 +02:00
} else if ( person = = pardon )
_vm - > _scrolls - > display ( " Talk to whom? " ) ;
else if ( personshere ( ) )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > talkto ( person ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_give :
if ( holding ( ) ) {
2013-06-30 22:01:05 +02:00
if ( person = = pardon )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Give to whom? " ) ;
2013-06-29 15:56:08 +02:00
else if ( personshere ( ) ) {
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _gyro - > bodkin :
case _vm - > _gyro - > bell :
case _vm - > _gyro - > clothes :
case _vm - > _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 :
switch ( person ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > pcrapulus :
2013-08-25 13:25:50 +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-06-29 15:56:08 +02:00
heythanks ( ) ;
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > pcwytalot :
2013-08-25 13:25:50 +02:00
if ( ( thing = = _vm - > _gyro - > crossbow ) | | ( thing = = _vm - > _gyro - > bolt ) )
_vm - > _scrolls - > display ( Common : : String ( " You might be able to influence Cwytalot more if you used it! " ) ) ;
else
heythanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > pspludwick :
2013-06-30 22:01:05 +02:00
if ( give2spludwick ( ) )
heythanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > pibythneth :
if ( thing = = _vm - > _gyro - > badge ) {
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 32 ) ; /* Thanks! Wow! */
_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-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 8 ) ;
_vm - > _celer - > show_one ( 9 ) ;
2013-06-30 22:01:05 +02:00
} else
heythanks ( ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > payles :
if ( _vm - > _gyro - > dna . ayles_is_awake ) {
if ( thing = = _vm - > _gyro - > pen ) {
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > pen - 1 ] = false ;
2013-07-24 19:43:10 +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
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-07-24 18:25:07 +02:00
case _vm - > _gyro - > pgeida :
2013-06-29 15:56:08 +02:00
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > potion :
2013-08-25 17:38:22 +02:00
_vm - > _gyro - > dna . obj [ _vm - > _gyro - > potion - 1 ] = false ;
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' u ' , 16 ) ; /* She drinks it. */
_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-07-24 18:25:07 +02:00
case _vm - > _gyro - > lute :
2013-06-29 15:56:08 +02:00
give_geida_the_lute ( ) ;
break ;
default :
heythanks ( ) ;
}
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > parkata :
2013-06-29 15:56:08 +02:00
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > potion :
if ( _vm - > _gyro - > dna . geida_given_potion )
2013-06-29 15:56:08 +02:00
winsequence ( ) ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 77 ) ;
2013-06-29 15:56:08 +02:00
break ; /* That Geida woman! */
default :
heythanks ( ) ;
}
break ;
default :
heythanks ( ) ;
}
}
}
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > objectlist ( ) ; /* Just in case... */
2013-06-29 15:56:08 +02:00
}
break ;
case vb_eat :
case vb_drink :
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-06-29 15:56:08 +02:00
case vb_load :
break ;
case vb_save :
break ;
2013-08-25 13:25:50 +02:00
// We don't handle these two because we use ScummVM's save/load system.
2013-06-29 15:56:08 +02:00
case vb_pay :
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 ;
case vb_look :
lookaround ( ) ;
break ;
case vb_break :
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-06-30 22:01:05 +02:00
case vb_quit : /* quit */
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > demo ) {
warning ( " STUB: Acci::do_that() - case vb_quit " ) ;
2013-07-24 19:43:10 +02:00
// _vm->_visa->dixi('q', 31);
2013-06-29 15:56:08 +02:00
// close(demofile);
// exit(0); /* Change this later!!! */
2013-08-25 13:25:50 +02:00
}
2013-06-30 22:01:05 +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-06-29 15:56:08 +02:00
case vb_go :
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-08-25 13:25:50 +02:00
case vb_info : {
_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-06-30 22:01:05 +02:00
break ;
2013-06-29 15:56:08 +02:00
case vb_undress :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . wearing = = nowt )
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-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . wearing = nowt ;
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 ;
case vb_wear :
2013-08-25 13:25:50 +02:00
if ( holding ( ) ) { /* wear something */
2013-06-29 15:56:08 +02:00
switch ( thing ) {
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > chastity :
2013-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " Hey, what kind of a weirdo are you??! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-07-24 18:25:07 +02:00
case _vm - > _gyro - > clothes :
2013-08-25 13:25:50 +02:00
case _vm - > _gyro - > habit : { /* Change this! */
if ( _vm - > _gyro - > dna . wearing ! = nowt ) {
if ( _vm - > _gyro - > dna . wearing = = thing )
_vm - > _scrolls - > display ( " You're already wearing that. " ) ;
else
_vm - > _scrolls - > display ( " You'll be rather warm wearing two sets of clothes! " ) ;
return ;
} else
_vm - > _gyro - > dna . wearing = thing ;
2013-06-30 22:01:05 +02:00
2013-08-25 13:25:50 +02:00
_vm - > _lucerna - > objectlist ( ) ;
if ( thing = = _vm - > _gyro - > habit )
fv = 3 ;
else
fv = 0 ;
if ( _vm - > _trip - > tr [ 0 ] . whichsprite ! = fv ) {
sx = _vm - > _trip - > tr [ 0 ] . x ;
sy = _vm - > _trip - > tr [ 0 ] . y ;
_vm - > _trip - > tr [ 0 ] . done ( ) ;
_vm - > _trip - > tr [ 0 ] . init ( fv , true , _vm - > _trip ) ;
_vm - > _trip - > tr [ 0 ] . appear ( sx , sy , _vm - > _trip - > left ) ;
_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-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( what ) ;
2013-06-29 15:56:08 +02:00
}
}
break ;
case vb_play :
2013-06-30 22:01:05 +02:00
if ( thing = = pardon ) {
2013-07-24 18:25:07 +02:00
switch ( _vm - > _gyro - > dna . room ) { /* They just typed "play"... */
2013-06-29 15:56:08 +02:00
case r__argentpub :
// play_nim();
2013-08-25 13:25:50 +02:00
warning ( " STUB: Acci::do_that() - case vb_play " ) ;
2013-06-29 15:56:08 +02:00
break ; /* ...in the pub, => play Nim. */
case r__musicroom :
play_harp ( ) ;
break ;
}
2013-06-30 22:01:05 +02:00
} else if ( holding ( ) ) {
2013-06-29 15:56:08 +02:00
switch ( thing ) {
2013-08-25 13:25:50 +02:00
case _vm - > _gyro - > lute : {
_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-06-30 22:01:05 +02:00
play_harp ( ) ;
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( what ) ;
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();
warning ( " STUB: Acci::do_that() - case vb_play " ) ;
2013-06-30 22:01:05 +02:00
else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( what ) ;
2013-06-29 15:56:08 +02:00
break ;
default :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( what ) ;
2013-06-29 15:56:08 +02:00
}
}
break ;
case vb_ring :
if ( holding ( ) ) {
2013-07-24 18:25:07 +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-08-25 13:25:50 +02:00
_vm - > _scrolls - > display ( " (Are you trying to join in, Avvy??!) " ) ;
2013-06-30 22:01:05 +02:00
} else
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( what ) ;
2013-06-29 15:56:08 +02:00
}
break ;
case vb_help :
// boot_help();
2013-08-25 13:25:50 +02:00
warning ( " STUB: Acci::do_that() - case vb_help " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_larrypass :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Wrong game! " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_phaon :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hello, Phaon! " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_boss :
// bosskey();
2013-08-25 13:25:50 +02:00
warning ( " STUB: Acci::do_that() - case vb_boss " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_pee :
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-06-30 22:01:05 +02:00
case vb_cheat :
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-06-29 15:56:08 +02:00
case vb_magic :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . avaricius_talk > 0 )
2013-07-24 19:43:10 +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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 17 ) ;
2013-08-25 13:25:50 +02:00
if ( _vm - > _gyro - > whereis [ 1 ] = = 12 )
2013-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' q ' , 18 ) ;
2013-06-29 15:56:08 +02:00
else {
2013-08-25 13:25:50 +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 ;
case vb_smartalec :
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-06-30 22:01:05 +02:00
case vb_expletive :
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-06-29 15:56:08 +02:00
case vb_listen :
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-08-25 13:25:50 +02:00
case vb_buy : // 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-06-29 15:56:08 +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-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 12 ) ;
2013-08-25 17:38:22 +02:00
_vm - > _scrolls - > display ( booze [ thing - 51 ] + " , please. " + _vm - > _scrolls - > kControlRegister + ' 1 ' + _vm - > _scrolls - > kControlSpeechBubble ) ;
2013-07-24 18:25:07 +02:00
_vm - > _gyro - > dna . drinking = thing ;
2013-06-29 15:56:08 +02:00
2013-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 19:43:10 +02:00
_vm - > _celer - > show_one ( 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 ) ;
_vm - > _celer - > show_one ( 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-07-24 18:25:07 +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 ;
case vb_attack :
2013-07-24 18:25:07 +02:00
if ( ( _vm - > _gyro - > dna . room = = r__brummieroad ) & &
2013-08-25 13:25:50 +02:00
( ( person = = 157 ) | | ( thing = = _vm - > _gyro - > crossbow ) | | ( thing = = _vm - > _gyro - > bolt ) )
& & ( _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-07-24 19:43:10 +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-06-29 15:56:08 +02:00
case vb_password :
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 {
ok = true ;
2013-08-25 13:25:50 +02:00
for ( ff = 0 ; ff < thats . size ( ) ; ff + + ) {
2013-08-29 12:07:04 +02:00
Common : : String temp = realwords [ ff ] ;
temp . toUppercase ( ) ;
for ( fv = 0 ; fv < words [ _vm - > _gyro - > dna . pass_num + first_password ] . w . size ( ) ; fv + + )
if ( words [ _vm - > _gyro - > dna . pass_num + first_password ] . w [ fv ] ! = temp [ fv ] )
2013-06-29 15:56:08 +02:00
ok = false ;
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 ;
case vb_dir :
2013-08-25 13:25:50 +02:00
_vm - > _enid - > dir ( realwords [ 1 ] ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_die :
2013-07-24 19:43:10 +02:00
_vm - > _lucerna - > gameover ( ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_score :
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
+ " This gives you a rank of " + rank ( ) + ' . ' + _vm - > _scrolls - > kControlNewLine + _vm - > _scrolls - > kControlNewLine + totaltime ( ) ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_put :
putproc ( ) ;
break ;
case vb_stand :
stand_up ( ) ;
break ;
case vb_kiss :
if ( person = = pardon )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Kiss whom? " ) ;
2013-06-30 22:01:05 +02:00
else if ( personshere ( ) ) {
2013-06-29 15:56:08 +02:00
switch ( person ) {
2013-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 18:25:07 +02:00
case _vm - > _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-07-24 19:43:10 +02:00
_vm - > _visa - > dixi ( ' U ' , 5 ) ; /* You WHAT? */
2013-06-29 15:56:08 +02:00
}
2013-06-30 22:01:05 +02:00
} else if ( ( 150 < = person ) & & ( person < = 174 ) )
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hey, what kind of a weirdo are you?? " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_climb :
2013-07-24 18:25:07 +02:00
if ( _vm - > _gyro - > dna . room = = r__insidecardiffcastle )
2013-06-30 22:01:05 +02:00
cardiff_climbing ( ) ;
2013-06-29 15:56:08 +02:00
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-06-30 22:01:05 +02:00
case vb_jump :
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-06-29 15:56:08 +02:00
case vb_highscores :
// show_highs();
2013-08-25 13:25:50 +02:00
warning ( " STUB: Acci::do_that() - case vb_highscores " ) ;
2013-06-29 15:56:08 +02:00
break ;
case vb_wake :
if ( personshere ( ) )
switch ( person ) {
case pardon :
2013-07-24 18:25:07 +02:00
case _vm - > _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-08-23 16:03:06 +02:00
_vm - > _celer - > show_one ( 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-07-24 18:25:07 +02:00
case _vm - > _gyro - > payles :
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-07-24 18:25:07 +02:00
case _vm - > _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 ;
case vb_sit :
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 ;
case vb_restart :
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 ;
case pardon :
2013-07-24 19:43:10 +02:00
_vm - > _scrolls - > display ( " Hey, a verb would be helpful! " ) ;
2013-06-29 15:56:08 +02:00
break ;
2013-06-30 22:01:05 +02:00
case vb_hello :
2013-06-29 15:56:08 +02:00
person_speaks ( ) ;
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 ;
case vb_thanks :
2013-06-29 15:56:08 +02:00
person_speaks ( ) ;
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
}
}
void Acci : : verbopt ( char n , Common : : String & answer , char & anskey ) {
switch ( n ) {
2013-06-30 22:01:05 +02:00
case vb_exam :
2013-06-29 15:56:08 +02:00
answer = " Examine " ;
anskey = ' x ' ;
2013-06-30 22:01:05 +02:00
break ; /* the ubiqutous one */
/* vb_give isn't dealt with by this procedure, but by ddm__with */
case vb_drink :
2013-06-29 15:56:08 +02:00
answer = " Drink " ;
anskey = ' D ' ;
2013-06-30 22:01:05 +02:00
break ;
case vb_wear :
2013-06-29 15:56:08 +02:00
answer = " Wear " ;
anskey = ' W ' ;
2013-06-30 22:01:05 +02:00
break ;
case vb_ring :
2013-06-29 15:56:08 +02:00
answer = " Ring " ;
anskey = ' R ' ;
2013-06-30 22:01:05 +02:00
break ; /* only the bell! */
case vb_play :
2013-06-29 15:56:08 +02:00
answer = " Play " ;
anskey = ' P ' ;
2013-06-30 22:01:05 +02:00
break ;
case vb_eat :
2013-06-29 15:56:08 +02:00
answer = " Eat " ;
anskey = ' E ' ;
2013-06-30 22:01:05 +02:00
break ;
default :
2013-06-29 15:56:08 +02:00
answer = " ? Unknown! " ; /* Bug! */
anskey = ' ? ' ;
}
}
} // End of namespace Avalanche.