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 
28 namespace 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 
44 struct 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 
147 struct Player2 {
148  int words[3]; /* Vocab word array of player's sentence */
149 
150  void synchronize(Common::Serializer &s);
151 };
152 
153 
154 extern Player player;
155 extern Player2 player2;
156 
157 extern 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 
165 extern void init_player();
166 
170 extern void player_new_stop_walker();
171 
176 extern void player_stationary_update();
177 
184 extern void player_set_facing();
185 
190 extern void player_set_final_facing();
191 
196 extern void player_select_series();
197 
201 extern void player_set_sprite();
202 
207 extern void player_keep_walking();
208 
212 extern int player_search_image();
213 
217 extern void player_set_image();
218 
222 extern int player_load_series(const char *name);
223 
227 extern void player_himem_preload(const char *name, int level);
228 
229 extern void player_dump_walker();
230 extern void player_preserve_palette();
231 
239 extern void player_new_command();
240 
245 extern void player_new_walk();
246 
251 extern int player_parse(int vocab_word, ...);
252 
256 extern void player_cancel_walk();
257 
262 extern void player_cancel_command();
263 
267 extern int player_has_been_in_room(int id);
268 
273 extern void player_discover_room(int id);
274 
275 
279 extern void player_undiscover_room();
280 
291 extern int player_has(int object_id);
292 
296 extern void player_clear_stop_walkers();
297 
301 extern void player_init();
302 
307 extern void player_start_walking(int walk_x, int walk_y, int walk_facing);
308 
312 extern int player_add_stop_walker(int walker, int trigger);
313 
320 extern void player_walk(int x, int y, int facing);
321 
322 extern void player_walk_trigger(int trigger);
323 
327 extern void player_demand_facing(int facing);
328 
329 extern void player_demand_location(int x, int y);
330 
338 extern 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 
346 extern void player_keep_turning();
347 
348 extern void player_activate_trigger();
349 
353 extern void save_player();
354 
358 extern void restore_player();
359 
360 } // namespace MADS
361 
362 #endif
Definition: player.h:44
Definition: player.h:147
Definition: serializer.h:80
Definition: anim_timer.h:27