ScummVM API documentation
inter.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef MADS_CORE_INTER_H
23 #define MADS_CORE_INTER_H
24 
25 #include "common/serializer.h"
26 #include "mads/core/general.h"
27 #include "mads/core/anim.h"
28 
29 namespace MADS {
30 
31 #define inter_columns 5
32 #define inter_delta_y 8
33 
34 #define inter_base_x 0
35 #define inter_size_y (video_y - display_y)
36 #define inter_base_y (video_y - inter_size_y)
37 
38 #define command_base_x 2
39 #define command_base_y 3
40 #define command_delta_x 32
41 
42 #define inven_base_x 90
43 #define inven_base_y 3
44 #define inven_delta_x 69
45 
46 #define action_base_x 240
47 #define action_base_y 3
48 #define action_delta_x (video_x - action_base_x)
49 
50 #define dialog_delta_x 318
51 
52 #define inter_object_base_x 160
53 #define inter_object_base_y 3
54 #define inter_object_size_x 72
55 #define inter_object_size_y 36
56 
57 #define INTER_SPINNING_OBJECT 200
58 #define INTER_TEXT_UPDATE 201
59 #define INTER_OBJECT_SPACE 1200 /* Memory region for objects */
60 
61 #define INTER_STRING_LENGTH 64
62 
63 #define INTER_COMMANDS (inter_columns * 2)
64 
65 #define INVEN_MAX_OBJECTS 32 /* Can only carry ... objects */
66 
67 #define INTER_BUILDING_SENTENCES 0 /* Normal sentence building mode */
68 #define INTER_CONVERSATION 1 /* Special conversation mode */
69 #define INTER_LIMITED_SENTENCES 2 /* Build only from room hotspots */
70 
71 #define ABSOLUTE_MODE 0 /* Hotspot mouse cursor is absolute */
72 #define RELATIVE_MODE 1 /* Hotspot mouse cursor is relative */
73 
74 #define NORMAL 0
75 #define LEFT_SELECT 1
76 #define RIGHT_SELECT 2
77 
78 #define VERB_ONLY 0
79 #define VERB_THIS 1
80 #define VERB_THAT 2
81 
82 
83 #define PREP_NONE 0
84 #define PREP_WITH 1
85 #define PREP_TO 2
86 #define PREP_AT 3
87 #define PREP_FROM 4
88 
89 #define PREP_ON 5
90 #define PREP_IN 6
91 #define PREP_UNDER 7
92 #define PREP_BEHIND 8
93 
94 #define PREP_RELATIONAL 255
95 
96 
97 #define SYNTAX_SINGULAR 0 /* "Give me that ...." */
98 #define SYNTAX_PLURAL 1 /* "Give me those ...." */
99 #define SYNTAX_PARTITIVE 2 /* "Give me some ...." */
100 #define SYNTAX_SINGULAR_MASC 3 /* Singular masculine (him) */
101 #define SYNTAX_SINGULAR_FEM 4 /* Singular feminine (her) */
102 #define SYNTAX_SINGULAR_LIVING 5 /* Singular living (it) */
103 #define SYNTAX_MASC_NOT_PROPER 6 /* Masculine, non-proper */
104 #define SYNTAX_FEM_NOT_PROPER 7 /* Feminine, non-proper */
105 
106 #define MAX_SYNTAX 8 /* Number of syntax forms */
107 
108 /* Mouse stroke type categories */
109 
110 #define STROKE_NONE 0 /* Unknown or none */
111 #define STROKE_COMMAND 1 /* In main verb list */
112 #define STROKE_INVEN 2 /* In user inventory */
113 #define STROKE_ACTION 3 /* In object-verb list */
114 #define STROKE_INTERFACE 4 /* In room hotspot area */
115 #define STROKE_SPECIAL_INVEN 5 /* On spinning object box */
116 #define STROKE_DIALOG 6 /* Dialog conversation */
117 #define STROKE_SCROLL 7 /* Stroke in scroll box */
118 
119 #define STROKE_DYNAMIC 8 /* Special mask for dynamic */
120 
121 #define STROKE_MASK 7 /* Masks out dynamic */
122 #define STROKE_MAX 7 /* Highest stroke class */
123 
124 #define SCROLL_UP 1 /* Scroll up button */
125 #define SCROLL_DOWN 2 /* Scroll down button */
126 #define SCROLL_ELEVATOR 3 /* Elevator bar */
127 #define SCROLL_THUMB 4 /* Thumb mark (pseudo-item) */
128 
129 #define inter_scroll_x1 73 /* Scroll bar hotspot boundaries */
130 #define inter_scroll_x2 81
131 #define inter_up_y1 3
132 #define inter_up_y2 9
133 #define inter_down_y1 35
134 #define inter_down_y2 41
135 #define inter_elevator_y1 11
136 #define inter_elevator_y2 33
137 #define inter_thumb_y1 14
138 #define inter_thumb_y2 31
139 
140 #define inter_thumb_range ((inter_thumb_y2 - inter_thumb_y1) + 1)
141 
142 /* Interface status categories */
143 
144 #define AWAITING_NONE 0
145 #define AWAITING_COMMAND 1 /* Virgin: waiting for a verb */
146 #define AWAITING_THIS 2 /* Waiting for 1st object */
147 #define AWAITING_THAT 3 /* Waiting for second object */
148 #define AWAITING_RIGHT_MOUSE 4 /* Waiting for button release */
149 
150 #define INTER_MESSAGE_COLOR 254
151 #define INTER_MESSAGE_COLOR_REX 3
152 
153 #define inter_verb inter_words[0]
154 #define inter_main_noun inter_words[1]
155 #define inter_second_noun inter_words[2]
156 
157 
158 
159 struct VerbBuf {
160  word id;
161  byte verb_type;
162  byte prep_type;
163 
164  void synchronize(Common::Serializer &s);
165 };
166 typedef VerbBuf Verb;
167 
168 extern AnimInterPtr inter_anim; /* Background animation script */
169 
170 extern int inter_auxiliary_click; /* Clicks during downtime */
171 
172 extern int inter_mouse_x; /* Cooked mouse location X */
173 extern int inter_mouse_y; /* Cooked mouse location Y */
174 extern int inter_mouse_type; /* Hotspot list identifier */
175 
176 extern int inter_object_sprite;
177 extern int inter_object_series;
178 
179 extern int inter_spinning_objects; /* Flag if objects rotating */
180 extern int inter_animation_running; /* Flag if background animation */
181 
182 extern byte *inter_objects_block; /* Place for loading object series */
183 extern long inter_objects_block_size;
184 
185 
186 extern int inter_input_mode; /* Interface input mode */
187 
188 extern char *inter_dialog_strings[inter_columns]; /* String pointers for dialog mode */
189 extern int inter_dialog_results[inter_columns]; /* Result numbers for dialog mode */
190 
191 
192 extern Verb command[INTER_COMMANDS]; /* Main Verb List */
193 
194 extern int inven[INVEN_MAX_OBJECTS]; /* Inventory index */
195 extern int inven_num_objects; /* Inventory size */
196 
197 extern int active_inven; /* The selected inventory item */
198 extern int first_inven;
199 
200 extern int right_command; /* Right mouse main verb */
201 extern int left_command; /* Left mouse main verb */
202 extern int left_inven; /* Left mouse inventory */
203 extern int left_action; /* Left mouse secondary verb */
204 extern int right_action; /* Right mouse secondary verb */
205 
206 
207 extern int inter_command; /* Command # index */
208 extern int inter_main_object; /* Object # index */
209 extern int inter_second_object; /* Object # index */
210 extern int inter_prep; /* Prep # of sentence's preposition */
211 
212 extern int inter_main_syntax; /* Syntax form of first noun */
213 extern int inter_second_syntax; /* Syntax form of second noun */
214 
215 extern int inter_command_source; /* Stroke types for sentence components */
216 extern int inter_main_object_source;
217 extern int inter_second_object_source;
218 
219 extern int inter_look_around; /* "Look around" command */
220 
221 extern int inter_point_established; /* Clicked point for possible walk-to */
222 extern int inter_point_x;
223 extern int inter_point_y;
224 
225 extern int inter_awaiting; /* Current awaiting status */
226 
227 
228 extern int inter_words[3]; /* Vocabulary words for sentence */
229 extern char inter_sentence[64]; /* Sentence building buffer */
230 
231 extern bool inter_sentence_ready; /* Flag if a sentence ready to go */
232 extern bool inter_report_hotspots; /* True = show hotspots even with no button pressed */
233 
234 extern bool inter_force_rescan; /* Force mouse rescan even if not changed */
235 extern int inter_base_hotspots; /* Number of basic room hotspots */
236 
237 extern long inter_base_time; /* Timing marker for interface */
238 
239 
240 extern int scrollbar_active; /* Active scrollbar item */
241 extern int scrollbar_elevator;
242 extern int scrollbar_old_active;
243 extern int scrollbar_old_elevator;
244 
245 extern int scrollbar_stroke_type;
246 extern int scrollbar_quickly;
247 extern long scrollbar_base_timing;
248 
249 
250 extern int inter_spot_class;
251 extern int inter_spot_index;
252 extern int inter_spot_id;
253 
254 extern byte spot_base[STROKE_MAX]; /* Hotspot list base markers (by stroke type) */
255 
256 
257 extern char istring_prep_names[9][7]; /* Preposition strings */
258 
259 extern char istring_look_around[12]; /* Misc. hard coded */
260 extern char istring_use[5];
261 extern char istring_to[4];
262 extern char istring_walk_to[9];
263 extern char istring_space[2];
264 
265 extern char istring_object_pronoun[MAX_SYNTAX][8]; /* Object pronouns */
266 extern char istring_subject_pronoun[MAX_SYNTAX][8]; /* Subject pronouns */
267 extern char istring_demonstrative[MAX_SYNTAX][8]; /* Demonstratives */
268 
269 extern int inter_object_id;
270 extern char inter_object_buf[20];
271 extern void (*inter_object_routine)();
272 
273 
274 /*
275  * inter_prepare_background()
276  * Writes all relevant words to the interface work buffer.
277  */
278 extern void inter_prepare_background();
279 /*
280  * inter_setup_hotspots()
281  * Sets up the hotspot list for the interface module. Hotspots only
282  * need to be set up once for each room.
283  */
284 extern void inter_setup_hotspots();
285 /*
286  * inter_set_active_inven()
287  * Picks a new active object from the inventory list. This involves
288  * changing the list of object-specific verbs.
289  *
290  * @param new_active
291  */
292 extern void inter_set_active_inven(int inven_id);
293 
297 extern void inter_scroll_inventory(int direction);
298 /*
299  * inter_give_to_player ()
300  * Adds the specified object to the player's inventory.
301  *
302  * @param this_
303  */
304 extern void inter_give_to_player(int this_);
305 
306 extern void inter_take_from_player(int this_, int where_to);
307 
308 /*
309  * inter_move_object()
310  * Moves an object to a new location, taking into account any
311  * player_inventory problems.
312  *
313  * @param object_id
314  * @param location
315  */
316 extern void inter_move_object(int object_id, int location);
317 /*
318  * inter_init_sentence()
319  * Begins accepting a new sentence.
320  */
321 extern void inter_init_sentence();
322 /*
323  * inter_main_loop()
324  * The main interface loop. Called by run-time kernel to perform one
325  * round of interface checking. Provides mouse interface for the whole
326  * program.
327  *
328  * @param allow_input
329  */
330 extern void inter_main_loop(int allow_input);
331 
332 extern void inter_screen_update();
333 
334 extern void inter_hide_macintosh_sentence();
335 extern void inter_restore_macintosh_sentence();
336 
337 extern void inter_turn_off_object();
338 extern void inter_spin_object(int object_id);
339 extern int inter_allocate_objects();
340 extern void inter_deallocate_objects();
341 
342 extern void inter_reset_dialog();
343 extern int inter_add_dialog(char *string, int result);
344 
345 extern int inter_load_background(const char *name, Buffer *target);
346 
347 extern void init_inter();
348 
349 } // namespace MADS
350 
351 #endif
Definition: general.h:57
Definition: anim.h:413
Definition: serializer.h:80
Definition: inter.h:159
Definition: anim_timer.h:27