ScummVM API documentation
game.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_GAME_H
23 #define MADS_CORE_GAME_H
24 
25 #include "common/serializer.h"
26 #include "mads/core/general.h"
27 #include "mads/core/global.h"
28 #include "mads/core/kernel.h"
29 #include "mads/core/object.h"
30 #include "mads/core/player.h"
31 #include "mads/core/quote.h"
32 #include "mads/core/mads.h"
33 #include "mads/core/heap.h"
34 #include "mads/core/popup.h"
35 #include "mads/core/text.h"
36 
37 namespace MADS {
38 
39 #define game_version "1.22" /* Version of game control code */
40 #define game_date "27-Jul-92"
41 
42 #define HARD_MODE 0 /* Difficulty levels */
43 #define EASY_MODE 1
44 
45 #define TENTH_SECOND 6 /* Timing definitions */
46 #define QUARTER_SECOND 15
47 #define THIRD_SECOND 20
48 #define HALF_SECOND 30
49 
50 #define ONE_SECOND 60
51 #define TWO_SECONDS 120
52 #define THREE_SECONDS 180
53 #define FOUR_SECONDS 240
54 #define FIVE_SECONDS 300
55 #define SIX_SECONDS 360
56 #define SEVEN_SECONDS 420
57 #define EIGHT_SECONDS 480
58 #define NINE_SECONDS 540
59 #define TEN_SECONDS 600
60 #define FIFTEEN_SECONDS 900
61 #define THIRTY_SECONDS 1800
62 #define ONE_MINUTE 3600
63 #define TWO_MINUTES 7200
64 #define THREE_MINUTES 10800
65 #define UNTIL_THE_COW_EXPLODES 9999999
66 
67 #define CURSOR_NORMAL 1 /* Cursor types */
68 #define CURSOR_WAIT 2
69 #define CURSOR_DOWN 3
70 #define CURSOR_UP 4
71 #define CURSOR_LEFT 5
72 #define CURSOR_RIGHT 6
73 
74 #define FACING_NORTH 8 /* Player facings */
75 #define FACING_SOUTH 2
76 #define FACING_EAST 6
77 #define FACING_WEST 4
78 #define FACING_NORTHEAST 9
79 #define FACING_SOUTHEAST 3
80 #define FACING_SOUTHWEST 1
81 #define FACING_NORTHWEST 7
82 #define FACING_NONE 5
83 
84 
85 #define DEBUGGER_NONE -1
86 #define DEBUGGER_MAIN 0
87 #define DEBUGGER_HELP 1
88 #define DEBUGGER_PALETTE 2
89 #define DEBUGGER_SCRATCH 3
90 #define DEBUGGER_GLOBAL 4
91 #define DEBUGGER_CONVERSATION 5
92 #define DEBUGGER_MATTE 6
93 #define DEBUGGER_MEMORY 7
94 #define DEBUGGER_STATE 8
95 #define DEBUGGER_PAL_LIST_1 9
96 #define DEBUGGER_PAL_LIST_2 10
97 
98 #define DEBUGGER_MAX_WATCH 12
99 
100 // Copy protection statuses. Only Rex Nebular had a copy protection screen in the original release
101 enum {
102  COPY_SUCCEED = 0,
103  COPY_FAIL = 1,
104  COPY_ESCAPE = 2
105 };
106 
107 extern int selected_intro;
108 
109 #define EXTRA_MAX_INV_OBJECTS 18 /* 16, + background, + open backpack */
110 
111 
112 
113 /* Declared by Taranjeet for OUAF Journal */
114 extern Player journal_player;
115 extern int journal_room;
116 
120 enum {
121  GAME_NO_MENU = 0,
122  GAME_MAIN_MENU = 1,
123  GAME_SAVE_MENU = 2,
124  GAME_RESTORE_MENU = 3,
125  GAME_OPTIONS_MENU = 4,
126  GAME_DIFFICULTY_MENU = 5,
127  GAME_ALERT_MENU = 6,
128  GAME_SCORE_MENU = 7,
129  GAME_CD_MENU = 8
130 };
131 
132 #define GAME_MENU_MAX_ITEMS 20 /* Max number of menu items */
133 #define GAME_MAX_SAVE_SLOTS 99 /* Max number of save slots */
134 #define GAME_MAX_SAVE_LENGTH 63 /* Max length of save name */
135 #define GAME_MAX_SAVE_WIDTH 255 /* Max pixel width of save name*/
136 #define GAME_MAX_SAVES_ON_SCREEN 7 /* Max saves on screen at once */
137 
138 #define GAME_SAVE_SLOT_MEMORY (long)(GAME_MAX_SAVE_SLOTS * (GAME_MAX_SAVE_LENGTH + 1))
139 #define GAME_DIALOG_HEAP (long)(4096 + sizeof(PopupItem) * GAME_MENU_MAX_ITEMS)
140 #define GAME_FUDGE_FACTOR 256
141 #define GAME_MENU_HEAP (long)(GAME_SAVE_SLOT_MEMORY + GAME_DIALOG_HEAP + GAME_FUDGE_FACTOR)
142 
143 
144 #define GAME_MENU_SCROLL_FIRST 20 /* Scrolling delays */
145 #define GAME_MENU_SCROLL_SECOND 8
146 
147 #define GAME_MENU_CENTER -1 /* Center item on menu */
148 #define GAME_MENU_SPECIAL -2 /* Center on special character */
149 #define GAME_MENU_RIGHT -3 /* Right-justify text */
150 
151 #define WIN_NOTHING 0
152 #define WIN_QUICK_DEATH 1
153 #define WIN_SLOW_DEATH 2
154 #define WIN_ALL_THE_MONEY 3
155 #define WIN_A_HEAD_POW 4
156 
157 extern byte game_restore_flag; /* Flag if restoring game */
158 extern byte game_autosaved; /* Flag if autosaved */
159 extern int savegame_slot;
160 
161 extern byte game_mouse_cursor_fix; /* Mouse cursor fix */
162 
163 extern word abort_value;
164 extern long abort_clock;
165 
166 extern int logfile_enabled;
167 extern Common::Stream *logfile_handle;
168 
169 extern int sound_board_address;
170 extern int sound_board_type;
171 extern int sound_board_irq;
172 
173 extern char chain_line[80];
174 extern int chain_flag;
175 extern int force_chain;
176 extern int key_abort_level;
177 
178 extern int game_keystroke;
179 extern int game_any_keystroke;
180 extern int game_any_emergency;
181 
182 extern int win_status;
183 
184 extern long correction_clock;
185 
186 
187 extern char config_file_name[20];
188 extern char save_game_key[8];
189 extern char restart_game_key[40];
190 extern char save_game_buf[20];
191 extern int last_keypressed;
192 
193 extern void (*game_menu_routine)(); /* Game Menu routines */
194 extern void (*game_menu_init)();
195 extern void (*game_menu_exit)();
196 extern void (*game_emergency_save)();
197 
198 
199 extern int debugger;
200 extern int debugger_state;
201 extern bool debugger_matte_before;
202 extern int debugger_memory_skip;
203 extern bool debugger_memory_all;
204 extern bool debugger_memory_keywait;
205 extern void (*debugger_reset)(); /* Debugger reset routine */
206 extern void (*debugger_update)(); /* Debugger update routine */
207 
208 
209 extern void (*section_preload_code_pointer)();
210 extern void (*section_init_code_pointer)();
211 extern void (*section_room_constructor)();
212 extern void (*section_daemon_code_pointer)();
213 extern void (*section_pre_parser_code_pointer)();
214 extern void (*section_parser_code_pointer)();
215 extern void (*section_error_code_pointer)();
216 extern void (*section_music_reset_pointer)();
217 
218 
219 extern void (*room_preload_code_pointer)();
220 extern void (*room_init_code_pointer)();
221 extern void (*room_daemon_code_pointer)();
222 extern void (*room_pre_parser_code_pointer)();
223 extern void (*room_parser_code_pointer)();
224 extern void (*room_error_code_pointer)();
225 extern void (*room_shutdown_code_pointer)();
226 
227 extern char game_save_file[13]; /* Save directory file */
228 extern char *game_save_directory; /* Save directory pointer */
229 
230 extern int game_preserve_handle; /* scr_depth preserve */
231 
232 extern Heap game_menu_heap; /* Custom heap for menu */
233 extern Popup *game_menu_popup; /* Popup structure for menu */
234 extern int report_version;
235 extern int art_hags_are_on_hd;
236 
237 extern void game_save_name(int id);
238 extern void game_set_camera_speed();
239 
243 extern void game_exec_function(void (*(target))());
244 
245 extern void game_debugger_reset();
246 extern void game_debugger();
247 
253 extern void game_menu_setup();
254 
258 extern void game_menu_shutdown();
259 
260 extern int main_cheating_key(int mykey);
261 extern int main_normal_key(int mykey);
262 extern int main_copy_verify();
263 extern void game_cold_data_init();
264 
270 extern void game_control();
271 
275 extern void flag_parse(const char **myscan);
276 
277 extern void show_logo();
278 extern void show_version();
279 
280 extern void init_game();
281 
285 extern char *game_menu_save_string(int id);
286 
287 } // namespace MADS
288 
289 #endif
Definition: stream.h:48
Definition: anim_timer.h:27