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