2013-06-24 08:15:42 +00:00
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers , whose names
* are too numerous to list here . Please refer to the COPYRIGHT
* file distributed with this source distribution .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
*/
/*
* This code is based on the original source code of Lord Avalot d ' Argent version 1.3 .
* Copyright ( c ) 1994 - 1995 Mike , Mark and Thomas Thurman .
*/
2013-07-02 14:46:56 +00:00
/* SCROLLS The scroll driver. */
2013-09-21 16:06:37 +00:00
# ifndef AVALANCHE_DIALOGS_H
# define AVALANCHE_DIALOGS_H
2013-06-24 08:15:42 +00:00
# include "common/system.h"
namespace Avalanche {
2013-06-28 15:41:02 +00:00
class AvalancheEngine ;
2013-06-24 08:15:42 +00:00
2013-09-21 16:06:37 +00:00
class Dialogs ;
2013-07-01 23:10:45 +00:00
2013-09-21 16:06:37 +00:00
typedef void ( Dialogs : : * DialogFunctionType ) ( ) ;
2013-07-01 23:10:45 +00:00
2013-09-21 16:06:37 +00:00
class Dialogs {
2013-06-28 15:41:02 +00:00
public :
2013-08-12 11:28:28 +00:00
// Constants to replace the command characters from Pascal.
// For more information, see: https://github.com/urukgit/avalot/wiki/Scrolldrivers
2013-09-07 18:37:42 +00:00
enum ControlCharacter {
kControlSpeechBubble = 2 , // ^B
kControlCenter = 3 , // ^C
kControlToBuffer = 4 , // ^D
kControlItalic = 6 , // ^F
kControlBell = 7 , // ^G
kControlBackspace = 8 , // ^H
kControlInsertSpaces = 9 , // ^I
kControlLeftJustified = 12 , // ^L
kControlNewLine = 13 , // ^M
kControlParagraph = 16 , // ^P
kControlQuestion = 17 , // ^Q
kControlRoman = 18 , // ^R
kControlRegister = 19 , // ^S
kControlNegative = 21 , // ^U
kControlIcon = 22 // ^V
} ;
2013-09-21 16:06:37 +00:00
bool _aboutBox ; // Is this the about box?
FontType _fonts [ 2 ] ;
2013-06-28 15:41:02 +00:00
2013-09-21 16:06:37 +00:00
Dialogs ( AvalancheEngine * vm ) ;
2013-09-07 07:00:34 +00:00
2013-07-02 13:10:16 +00:00
void init ( ) ;
2013-09-07 21:48:48 +00:00
void setReadyLight ( byte state ) ; // Sets "Ready" light to whatever.
2013-09-21 16:06:37 +00:00
void drawScroll ( DialogFunctionType modeFunc ) ;
void drawBubble ( DialogFunctionType modeFunc ) ;
void reset ( ) ;
void callDialogDriver ( ) ;
2013-09-07 18:37:42 +00:00
void displayText ( Common : : String text ) ;
bool displayQuestion ( Common : : String question ) ;
void setBubbleStateNatural ( ) ; // Natural state of bubbles
Common : : String displayMoney ( ) ;
2013-09-21 16:06:37 +00:00
void displayMusicalScroll ( ) ; // Practically this one is a mini-game which called when you play the harp in the monastery.
2013-08-12 11:28:28 +00:00
2013-09-15 10:25:07 +00:00
// From Visa:
void displayScrollChain ( char block , byte point , bool report = true , bool bubbling = false ) ;
void talkTo ( byte whom ) ;
2013-09-27 06:21:04 +00:00
void sayIt ( Common : : String str ) ; // This makes Avalot say the response.
2013-06-28 15:41:02 +00:00
private :
AvalancheEngine * _vm ;
2013-09-07 18:37:42 +00:00
enum FontStyle {
kFontStyleRoman ,
kFontStyleItalic
} ;
2013-08-02 11:17:50 +00:00
2013-09-07 18:37:42 +00:00
static const int16 kHalfIconWidth = 19 ; // Half the width of an icon.
2013-08-02 11:17:50 +00:00
2013-09-07 18:37:42 +00:00
int16 _shadowBoxX , _shadowBoxY ;
byte _currentFont ; // Current font
Common : : Point _dodgeCoord ;
byte _param ; // For using arguments code
byte _useIcon ;
2013-09-26 17:22:48 +00:00
bool _scReturn ;
2013-09-07 07:00:34 +00:00
2013-09-26 17:22:48 +00:00
// These 3 "Mode" functions are always passed as ScrollsFunctionType parameters.
2013-09-07 18:37:42 +00:00
void scrollModeNormal ( ) ;
2013-09-26 17:22:48 +00:00
// The "asking" scroll. Used indirectly in diplayQuestion().
2013-09-07 18:37:42 +00:00
void scrollModeDialogue ( ) ;
2013-09-26 17:22:48 +00:00
// Part of the harp mini-game.
2013-09-07 18:37:42 +00:00
void scrollModeMusic ( ) ;
2013-06-28 15:41:02 +00:00
2013-09-07 18:37:42 +00:00
// These 2 are used only in musicalScroll().
void store ( byte what , TuneType & played ) ;
bool theyMatch ( TuneType & played ) ;
2013-07-01 23:10:45 +00:00
2013-09-07 18:37:42 +00:00
void stripTrailingSpaces ( Common : : String & str ) ; // Original: strip.
2013-08-04 10:54:11 +00:00
void solidify ( byte n ) ; // Does the word wrapping.
2013-06-28 15:41:02 +00:00
2013-09-07 18:37:42 +00:00
void dodgem ( ) ; // This moves the mouse pointer off the scroll so that you can read it.
void unDodgem ( ) ; // This is the opposite of Dodgem. It moves the mouse pointer back, IF you haven't moved it in the meantime.
void easterEgg ( ) ;
void say ( int16 x , int16 y , Common : : String text ) ;
void resetScrollDriver ( ) ;
void ringBell ( ) ; // Original: dingdongbell
void getIcon ( int16 x , int16 y , byte which ) ;
void drawSign ( Common : : String name , int16 xl , int16 yl , int16 y ) ; // This is for drawing a big "about" or "gameover" picture loaded from a file into an empty scroll.
void loadFont ( ) ;
2013-09-15 10:25:07 +00:00
// From Visa:
bool _noError ;
void unSkrimble ( ) ;
void doTheBubble ( ) ;
void speak ( byte who , byte subject ) ;
2013-06-28 15:41:02 +00:00
} ;
2013-06-24 08:15:42 +00:00
} // End of namespace Avalanche
2013-09-21 16:06:37 +00:00
# endif // AVALANCHE_DIALOGS_H