ScummVM API documentation
player.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_PLAYER_H
23#define MADS_CORE_PLAYER_H
24
25#include "common/serializer.h"
26#include "mads/core/general.h"
27
28namespace MADS {
29
30#define player_verb player2.words[0]/* Player's recent verb */
31#define player_main_noun player2.words[1]/* Player's recent noun 1 */
32#define player_second_noun player2.words[2]/* Player's recent noun 2 */
33
34#define PLAYER_VERTICAL 1 /* Player moving vertically */
35#define PLAYER_DIAGONAL 2 /* Player moving diagonally */
36#define PLAYER_HORIZONTAL 3 /* Player moving horizontally */
37
38#define PLAYER_DIAGONAL_THRESHOLD 141 /* sqrt(2) * 100 */
39
40#define PLAYER_MAX_ROOMS 120 /* Max rooms player can go to */
41
42#define PLAYER_MAX_STOP 12 /* Max items in stop-walker stack */
43
44struct Player {
45 int walking; /* Player is "on the move" */
46 int x, y; /* Player's current screen location */
47 int target_x, target_y; /* Player's screen destination */
48 int sign_x, sign_y; /* Axis pixel signs of movement */
49 int x_count, y_count; /* Internal motion tracking info */
50 int x_counter, y_counter; /* Internal motion tracking info */
51 int target_facing; /* Facing to assume at destination */
52 int special_code; /* Special code currently on top of */
53 int sprite_changed; /* Flag if sprite changes this frame */
54 int frame_delay; /* Tick delay between player frames */
55 int center_of_gravity; /* Center of gravity displacement */
56
57 bool walk_freedom; /* Player can always walk anywhere */
58
59 int walk_anywhere; /* Player can walk anywhere */
60
61 int walk_off_edge_to_room; /* Player should walk off edge unless told */
62 /* otherwise. */
63 int walk_off_edge; /* Player walking off edge of screen */
64
65 int need_to_walk; /* Player needs to walk somewhere */
66 int ready_to_walk; /* Player is ready to perform that walk */
67 int prepare_walk_facing; /* Facing preparing to walk to */
68 int prepare_walk_x; /* Destination preparing to walk to */
69 int prepare_walk_y;
70
71 bool commands_allowed; /* Flag if accepting player input */
72 bool walker_visible; /* Flag if player's sprite is visible */
73 bool walker_previously_visible;/* Flag if player's sprite was visible */
74 int series_base; /* Lowest series list handle for walker */
75 int16 available[8]; /* Flag if series are available or mirrored*/
76 int facing; /* Player's current directional facing */
77 int turn_to_facing; /* Player is turning to this facing */
78 int series; /* Player's current active series # */
79 int mirror; /* Flag if player series is now mirrored */
80 int sprite; /* Current sprite # being displayed */
81
82 byte depth; /* Depth of current player image */
83 byte scale; /* Scale of current player image */
84
85 int stop_walker_sequence; /* Active stop-walker sequence number. */
86 int stop_walker_stack[PLAYER_MAX_STOP]; /* Stack of future stop walkers*/
87 int stop_walker_trigger[PLAYER_MAX_STOP]; /* Trigger codes when complete */
88 int stop_walker_pointer; /* Stack pointer */
89
90 int upcoming_trigger; /* Impending stop-walker trigger code */
91 int trigger; /* Active stop-walker trigger code */
92
93 int next_special_code; /* Next special code player will pass over */
94
95 int scaling_velocity; /* Flag if scaling player velocity */
96 int pixel_accum; /* Internal bresenham motion tracking */
97 int dist_accum; /* Internal bresenham distance tracking */
98 word delta_distance; /* Internal bresenham distance tracking */
99 word total_distance; /* Internal total distance current segment */
100 int velocity; /* Player movement velocity (pix/frame) */
101 int high_sprite; /* Highest sprite # in primary progression */
102
103 int command_ready; /* Flag if a player command is ready to go */
104 int command_error; /* Flag if player command is an error */
105 int command_source; /* Interface stroke type for player verb */
106 int command;
107 int main_object;
108 int second_object;
109 int main_object_source; /* Interface stroke type for player noun 1 */
110 int second_object_source; /* Interface stroke type for player noun 2 */
111 int prep; /* Preposition */
112 int look_around; /* Flag for special "look around" command */
113
114 int main_syntax; /* Syntax of player's main noun */
115 int second_syntax; /* Syntax of player's second noun */
116
117 char series_name[20]; /* Major series name for player walker */
118
119 char sentence[64]; /* Player's most recent sentence. */
120
121 long clock; /* Timing clock for player frame rate */
122
123 byte been_here_before; /* Flag if player has been here before */
124 int num_rooms_been_in; /* # of rooms player has been in */
125 int rooms_been_in[PLAYER_MAX_ROOMS]; /* List of rooms player has been in*/
126
127 int num_series; /* Number of player series */
128 byte walker_loads_first; /* Walker should be loaded first */
129 byte walker_loaded_first; /* Walker walker is loaded first */
130 byte walker_is_loaded; /* Flag if walker is loaded */
131 byte walker_must_reload; /* Flag if walker must reload */
132
133 bool walker_been_visible; /* Flag if has been visible this room */
134
135 byte force_series; /* Flag to force player series */
136
137 int walk_trigger; /* Trigger when reach destination */
138 byte walk_trigger_dest; /* Type of code to activate for trigger */
139 int walk_trigger_words[3]; /* Vocabulary words for reactivating parser*/
140
141 bool enable_at_target; /* Enable commands at walk target */
142
143 void synchronize(Common::Serializer &s);
144};
145
146
147struct Player2 {
148 int words[3]; /* Vocab word array of player's sentence */
149
150 void synchronize(Common::Serializer &s);
151};
152
153
154extern Player player;
155extern Player2 player2;
156
157extern const byte player_clockwise[10];
158
159
160/* player.h */
161#define player_said_1(aa) (player_parse (words_##aa , 0) )
162#define player_said_2(aa, bb) (player_parse (words_##aa, words_##bb, 0) )
163#define player_said_3(aa, bb, cc) (player_parse (words_##aa, words_##bb, words_##cc, 0) )
164
165extern void init_player();
166
170extern void player_new_stop_walker();
171
176extern void player_stationary_update();
177
184extern void player_set_facing();
185
190extern void player_set_final_facing();
191
196extern void player_select_series();
197
201extern void player_set_sprite();
202
207extern void player_keep_walking();
208
212extern int player_search_image();
213
217extern void player_set_image();
218
222extern int player_load_series(const char *name);
223
227extern void player_himem_preload(const char *name, int level);
228
229extern void player_dump_walker();
230extern void player_preserve_palette();
231
239extern void player_new_command();
240
245extern void player_new_walk();
246
251extern int player_parse(int vocab_word, ...);
252
256extern void player_cancel_walk();
257
262extern void player_cancel_command();
263
267extern int player_has_been_in_room(int id);
268
273extern void player_discover_room(int id);
274
275
279extern void player_undiscover_room();
280
291extern int player_has(int object_id);
292
296extern void player_clear_stop_walkers();
297
301extern void player_init();
302
307extern void player_start_walking(int walk_x, int walk_y, int walk_facing);
308
312extern int player_add_stop_walker(int walker, int trigger);
313
320extern void player_walk(int x, int y, int facing);
321
322extern void player_walk_trigger(int trigger);
323
327extern void player_demand_facing(int facing);
328
329extern void player_demand_location(int x, int y);
330
338extern void player_first_walk(int from_x, int from_y, int from_facing,
339 int to_x, int to_y, int to_facing, int enable_at_target);
340
346extern void player_keep_turning();
347
348extern void player_activate_trigger();
349
353extern void save_player();
354
358extern void restore_player();
359
360} // namespace MADS
361
362#endif
Definition: serializer.h:80
Definition: player.h:147
Definition: player.h:44