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
37namespace 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
101enum {
102 COPY_SUCCEED = 0,
103 COPY_FAIL = 1,
104 COPY_ESCAPE = 2
105};
106
107extern 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 */
114extern Player journal_player;
115extern int journal_room;
116
120enum {
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
157extern byte game_restore_flag; /* Flag if restoring game */
158extern byte game_autosaved; /* Flag if autosaved */
159extern int savegame_slot;
160
161extern byte game_mouse_cursor_fix; /* Mouse cursor fix */
162
163extern word abort_value;
164extern long abort_clock;
165
166extern int logfile_enabled;
167extern Common::Stream *logfile_handle;
168
169extern int sound_board_address;
170extern int sound_board_type;
171extern int sound_board_irq;
172
173extern char chain_line[80];
174extern int chain_flag;
175extern int force_chain;
176extern int key_abort_level;
177
178extern int game_keystroke;
179extern int game_any_keystroke;
180extern int game_any_emergency;
181
182extern int win_status;
183
184extern long correction_clock;
185
186
187extern char config_file_name[20];
188extern char restart_game_key[40];
189extern char save_game_buf[20];
190extern int last_keypressed;
191
192extern void (*game_menu_routine)(); /* Game Menu routines */
193extern void (*game_menu_init)();
194extern void (*game_menu_exit)();
195extern void (*game_emergency_save)();
196
197
198extern int debugger;
199extern int debugger_state;
200extern bool debugger_matte_before;
201extern int debugger_memory_skip;
202extern bool debugger_memory_all;
203extern bool debugger_memory_keywait;
204extern void (*debugger_reset)(); /* Debugger reset routine */
205extern void (*debugger_update)(); /* Debugger update routine */
206
207
208extern void (*section_preload_code_pointer)();
209extern void (*section_init_code_pointer)();
210extern void (*section_room_constructor)();
211extern void (*section_daemon_code_pointer)();
212extern void (*section_pre_parser_code_pointer)();
213extern void (*section_parser_code_pointer)();
214extern void (*section_error_code_pointer)();
215extern void (*section_music_reset_pointer)();
216
217
218extern void (*room_preload_code_pointer)();
219extern void (*room_init_code_pointer)();
220extern void (*room_daemon_code_pointer)();
221extern void (*room_pre_parser_code_pointer)();
222extern void (*room_parser_code_pointer)();
223extern void (*room_error_code_pointer)();
224extern void (*room_shutdown_code_pointer)();
225
226extern char game_save_file[13]; /* Save directory file */
227extern char *game_save_directory; /* Save directory pointer */
228
229extern int game_preserve_handle; /* scr_depth preserve */
230
231extern Heap game_menu_heap; /* Custom heap for menu */
232extern Popup *game_menu_popup; /* Popup structure for menu */
233extern int report_version;
234extern int art_hags_are_on_hd;
235
236extern void game_save_name(int id);
237extern void game_set_camera_speed();
238
242extern void game_exec_function(void (*(target))());
243
244extern void game_debugger_reset();
245extern void game_debugger();
246
252extern void game_menu_setup();
253
257extern void game_menu_shutdown();
258
259extern int main_cheating_key(int mykey);
260extern int main_normal_key(int mykey);
261extern int main_copy_verify();
262extern void game_cold_data_init();
263
269extern void game_control();
270
274extern void flag_parse(const char **myscan);
275
276extern void show_logo();
277extern void show_version();
278
279extern void init_game();
280
284extern char *game_menu_save_string(int id);
285
286} // namespace MADS
287
288#endif
Definition: stream.h:48