aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/scrolls2.h
blob: b267ff68f675e6a4881bb1b6185f253aedde9d61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* 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.
 */

 /* SCROLLS		The scroll driver. */

#ifndef SCROLLS2_H
#define SCROLLS2_H

#include "common/system.h"

namespace Avalanche {
class AvalancheEngine;

class Scrolls;

typedef void (Scrolls::*func2)();

class Scrolls {
public:
	bool aboutscroll; /* Is this the about box? */



	Scrolls(AvalancheEngine *vm);
	
	void init();

	void state(byte x);      /* Sets "Ready" light to whatever */

	void drawscroll(func2 gotoit);      /* This is one of the oldest funcs in the game. */

	void bubble(func2 gotoit);

	void resetscroll();

	void calldrivers();

	void display(Common::String z);

	bool ask(Common::String question);

	void natural();

	Common::String lsd();

	void okay();    /* Says "Okay!" */

	void musical_scroll();

private:
	AvalancheEngine *_vm;

	static const int16 roman = 0;
	static const int16 italic = 1;

	static const int16 halficonwidth = 19; // Half the width of an icon.



	// Constants to replace the command characters from Pascal.
	// For more information, see: https://github.com/urukgit/avalot/wiki/Scrolldrivers
	
	static const char kControlSpeechBubble = 2; // ^B
	static const char kControlCenter = 3; // ^C
	static const char kControlToBuffer = 4; // ^D
	static const char kControlItalic = 6; // ^F
	static const char kControlBell = 7; // ^G
	static const char kControlBackspace = 8; // ^H
	static const char kControlInsertSpaces = 9; // ^I
	static const char kControlLeftJustified = 12; // ^L
	static const char kControlNewLine = 13; // ^M
	static const char kControlParagraph = 16; // ^P
	static const char kControlQuestion = 17; // ^Q
	static const char kControlRoman = 18; // ^R
	static const char kControlRegister = 19; // ^S
	static const char kControlNegative = 21; // ^U
	static const char kControlIcon = 22; // ^V



	int16 dix, diy;
	raw ch[2];
	byte cfont; // Current font

	int16 dodgex, dodgey;
	byte param; // For using arguments code

	byte use_icon;

	void easteregg();

	void say(int16 x, int16 y, Common::String z);

	void normscroll();

	void dialogue();

	void store_(byte what, tunetype &played);

	bool they_match(tunetype &played);

	void music_scroll();

	void resetscrolldriver();

	void dingdongbell();

	void dodgem();

	void undodgem();

	void geticon(int16 x, int16 y, byte which);

	void block_drop(Common::String fn, int16 xl, int16 yl, int16 y);

	void strip(Common::String &q); // Strip trailing spaces.

	void solidify(byte n); // Does the word wrapping.

	void loadfont();
};

} // End of namespace Avalanche

#endif // SCROLLS2_H