aboutsummaryrefslogtreecommitdiff
path: root/engines/lure/luredefs.h
blob: 91fb650af33573de329138bf7f3041c9f0e8b4b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

#ifndef LUREDEFS_H
#define LUREDEFS_H


#include "common/scummsys.h"
#include "common/list.h"

namespace Lure {

#define SUPPORT_FILENAME "lure.dat"
#define LURE_DAT_MAJOR 1
#define LURE_DAT_MINOR 29
#define LURE_MIN_SAVEGAME_MINOR 25
#define LURE_SAVEGAME_MINOR 33

#define LURE_DEBUG 1

#define READ_LE_INT16(x) (int16) READ_LE_UINT16(x)
#define READ_LE_INT32(x) (int32) READ_LE_UINT32(x)

enum {
	kLureDebugScripts = 1 << 0,
	kLureDebugAnimations = 1 << 1,
	kLureDebugHotspots = 1 << 2,
	kLureDebugFights = 1 << 3,
	kLureDebugSounds = 1 << 4,
	kLureDebugStrings = 1 << 5
};

#define ERROR_BASIC 1
#define ERROR_INTERMEDIATE 2
#define ERROR_DETAILED 3

enum {
	GF_FLOPPY	= 1 <<  0,
	GF_EGA		= 1 <<  1,
	GF_LNGUNK	= 1 << 15
};

enum {
	GI_LURE = 0
};

enum Action {
	NONE = 0,
	GET = 1,
	DROP = 0,
	PUSH = 3,
	PULL = 4,
	OPERATE = 5,
	OPEN = 6,
	CLOSE = 7,
	LOCK = 8,
	UNLOCK = 9,
	USE = 10,
	GIVE = 11,
	TALK_TO = 12,
	TELL = 13,
	BUY = 14,
	LOOK = 15,
	LOOK_AT = 16,
	LOOK_THROUGH = 17,
	ASK = 18,
	EAT = 0,
	DRINK = 20,
	STATUS = 21,
	GO_TO = 22,
	RETURN = 23,
	BRIBE = 24,
	EXAMINE = 25,
	NPC_SET_ROOM_AND_OFFSET = 28,
	NPC_TALK_TO_PLAYER = 29,
	NPC_EXEC_SCRIPT = 30,
	NPC_RESET_PAUSED_LIST = 31,
	NPC_SET_RAND_DEST = 32,
	NPC_WALKING_CHECK = 33,
	NPC_SET_SUPPORT_OFFSET = 34,
	NPC_SUPPORT_OFFSET_COND = 35,
	NPC_DISPATCH_ACTION = 36,
	NPC_TALK_NPC_TO_NPC = 37,
	NPC_PAUSE = 38,
	NPC_START_TALKING = 39,
	NPC_JUMP_ADDRESS = 40
};

// Basic game dimensions
#define FULL_SCREEN_WIDTH 320
#define FULL_SCREEN_HEIGHT 200
#define GAME_COLORS 256
#define SCREEN_SIZE (FULL_SCREEN_HEIGHT * FULL_SCREEN_WIDTH)

// Some resources include multiple packed palettes of 64 entries each
#define SUB_PALETTE_SIZE 64
// Palette resources have 220 palette entries
#define RES_PALETTE_ENTRIES 220
// Main working palette size
#define MAIN_PALETTE_SIZE 228
// Palette color increment amouns for palette fade in/outs
#define PALETTE_FADE_INC_SIZE 4

// EGA constants
#define EGA_PALETTE_SIZE 16
#define EGA_NUM_LAYERS 4
#define EGA_PIXELS_PER_BYTE 8

// Palette and animation for Skorl catching player
#define SKORL_CATCH_PALETTE_ID 0x4060
#define SKORL_CATCH_ANIM_ID 0x4061
// Palette and animation for chute animation
#define CHUTE_PALETTE_ID 0x404C
#define CHUTE_ANIM_ID 0x404D
#define CHUTE2_ANIM_ID 0x404f
#define CHUTE3_ANIM_ID 0x4051
// Palette and animation for hiding in barrel
#define BARREL_PALETTE_ID 0xE9F0
#define BARREL_ANIM_ID 0xE9F1
// Endgame animation constants
#define ENDGAME_PALETTE_ID 0xFF00
#define ENDGAME_ANIM_ID 0xFF01
// Miscellaneous resources
#define COPY_PROTECTION_RESOURCE_ID 0x4139
#define CREDITS_RESOURCE_ID 0x7800
#define RESTART_RESOURCE_ID 0x7900

// Specifies the maximum buffer sized allocated for decoding animation data
#define MAX_ANIM_DECODER_BUFFER_SIZE 300000

#define MAX_DESC_SIZE 1024
#define MAX_HOTSPOT_NAME_SIZE 80
#define MAX_ACTION_NAME_SIZE 15

// Menubar constants
#define MENUBAR_Y_SIZE 8

// Cursor definitions
#define CURSOR_WIDTH 16
#define CURSOR_HEIGHT 16
#define CURSOR_SIZE 256
#define CURSOR_RESOURCE_ID 1

enum CursorType {CURSOR_ARROW = 0, CURSOR_DISK = 1, CURSOR_TIME_START = 2,
	CURSOR_TIME_END = 9, CURSOR_CROSS = 10, CURSOR_UP_ARROW = 11, CURSOR_DOWN_ARROW = 12,
	CURSOR_LEFT_ARROW = 13, CURSOR_RIGHT_ARROW = 14, CURSOR_CAMERA = 15, CURSOR_TALK = 16,
	CURSOR_MENUBAR = 17, CURSOR_FIGHT_UPPER = 23, CURSOR_FIGHT_MIDDLE = 24,
	CURSOR_FIGHT_LOWER = 25};

// Font details
#define FONT_RESOURCE_ID 4
#define FONT_WIDTH 8
#define FONT_HEIGHT 8

// Menu constants
#define MENU_RESOURCE_ID 5
#define MENUITEM_NONE 0
#define MENUITEM_CREDITS 1
#define MENUITEM_RESTART_GAME 2
#define MENUITEM_SAVE_GAME 3
#define MENUITEM_RESTORE_GAME 4
#define MENUITEM_QUIT 5
#define MENUITEM_TEXT_SPEED 6
#define MENUITEM_SOUND 7

// Mouse change needed to change an item in a popup menu
#define POPMENU_CHANGE_SENSITIVITY 5

// Dialog related defines
#define EGA_DIALOG_TEXT_COLOR 6
#define EGA_DIALOG_WHITE_COLOR 2
#define	VGA_DIALOG_TEXT_COLOR 0xe2
#define VGA_DIALOG_WHITE_COLOR 0xe3
#define EGA_DIALOG_BG_COLOR 13
#define INFO_DIALOG_X 69
#define INFO_DIALOG_Y 61
#define INFO_DIALOG_WIDTH 191
#define TALK_DIALOG_WIDTH 130
#define TALK_DIALOG_EDGE_SIZE 3
#define TALK_DIALOG_Y 33
#define SAVE_DIALOG_X 69
#define SAVE_DIALOG_Y 28

// Strings defines
#define STRINGS_RESOURCE_ID 0x10
#define STRINGS_2_RESOURCE_ID 0x11
#define STRINGS_3_RESOURCE_ID 0x12
#define STRING_ID_RANGE 0x7d0
#define STRING_ID_UPPER 0xfa0

// Custom resources stored in lure.dat
#define GAME_PALETTE_RESOURCE_ID 0x3f01
#define ALT_PALETTE_RESOURCE_ID 0x3f02
#define DIALOG_RESOURCE_ID 0x3f03
#define TALK_DIALOG_RESOURCE_ID 0x3f04
#define ROOM_DATA_RESOURCE_ID 0x3f05
#define NPC_SCHEDULES_RESOURCE_ID 0x3f06
#define HOTSPOT_DATA_RESOURCE_ID 0x3f07
#define HOTSPOT_OVERRIDE_DATA_RESOURCE_ID 0x3f08
#define ROOM_EXITS_RESOURCE_ID 0x3f09
#define ROOM_EXIT_JOINS_RESOURCE_ID 0x3f0a
#define ANIM_DATA_RESOURCE_ID 0x3f0b
#define SCRIPT_DATA_RESOURCE_ID 0x3f0c
#define SCRIPT2_DATA_RESOURCE_ID 0x3f0d
#define HOTSPOT_SCRIPT_LIST_RESOURCE_ID 0x3f0e
#define	MESSAGES_LIST_RESOURCE_ID 0x3f0f
#define ACTION_LIST_RESOURCE_ID 0x3f10
#define TALK_HEADER_RESOURCE_ID 0x3f11
#define TALK_DATA_RESOURCE_ID 0x3f12
#define ROOM_PATHS_RESOURCE_ID 0x3f13
#define EXIT_COORDINATES_RESOURCE_ID 0x3f14
#define EXIT_HOTSPOT_ID_LIST 0x3f15
#define FIGHT_DATA_RESOURCE_ID 0x3f16
#define STRING_LIST_RESOURCE_ID 0x3f17
#define SOUND_DESC_RESOURCE_ID 0x3f18
#define STRING_DECODER_RESOURCE_ID 0x3f19

// Script constants
#define STARTUP_SCRIPT 0x23FC

// Miscellaneous resources
#define NAMES_RESOURCE_ID 9
#define ROLAND_MAIN_SOUND_RESOURCE_ID 0xC
#define ADLIB_MAIN_SOUND_RESOURCE_ID 0xD
#define ROLAND_INTRO_SOUND_RESOURCE_ID 0x30
#define ADLIB_INTRO_SOUND_RESOURCE_ID 0x31
#define ROLAND_ENDGAME_SOUND_RESOURCE_ID 0xff10

#define NOONE_ID 0x3E7
#define PLAYER_ID 0x3E8
#define RATPOUCH_ID 0x3E9
#define SKORL_ID 0x3EA
#define BLACKSMITH_ID 0x3EB
#define GWEN_ID 0x3EC
#define MALLIN_ID 0x3ED
#define MONK1_ID 0x3EE
#define GOEWIN_ID 0x3EF
#define MONK2_ID 0x3F0
#define WAYNE_ID 0x3f1
#define CASTLE_SKORL_ID 0x3F3
#define FIRST_NONCHARACTER_ID 0x408
#define SACK_ID 0x40D
#define RACK_SERF_ID 0x411
#define PRISONER_ID 0x412
#define SID_ID 0x420
#define OIL_BURNER_ID 0x424
#define TRANSFORM_ID 0x425
#define NELLIE_ID 0x429
#define EWAN_ID 0x436
#define PIG_ID 0x43F
#define SKORL_FIGHTER_ID 0x444
#define START_EXIT_ID 0x2710
#define BOTTLE_HOTSPOT_ID 0x2710
#define CELL_DOOR_HOTSPOT_ID 0x2712
#define BRICKS_ID 0x2714
#define BOOK_ID 0x2723
#define START_NONVISUAL_HOTSPOT_ID 0x7530

// Milliseconds delay between game frames
#define GAME_FRAME_DELAY 80
#define GAME_TICK_DELAY 20

// Tick proc constants
#define NULL_TICK_PROC_ID 1
#define STANDARD_CHARACTER_TICK_PROC 2
#define PLAYER_TICK_PROC_ID 3
#define VOICE_TICK_PROC_ID 4
#define PUZZLED_TICK_PROC_ID 5
#define FOLLOWER_TICK_PROC_2 8
#define JAILOR_TICK_PROC_ID 9
#define STANDARD_ANIM_2_TICK_PROC 11
#define STANDARD_ANIM_TICK_PROC 12
#define GOEWIN_SHOP_TICK_PROC 27
#define TALK_TICK_PROC_ID 37
#define PLAYER_FIGHT_TICK_PROC_ID 39

// String constants
#define TALK_MAGIC_ID 0x424
#define TALK_RESPONSE_MAGIC_ID 0x1092

// Misc constants
#define GENERAL_MAGIC_ID 42
#define VOICE_ANIM_IDX 1
#define PUZZLED_ANIM_IDX 2
#define EXCLAMATION_ANIM_IDX 3
#define DEFAULT_VOLUME 192

// Animation record indexes
#define PLAYER_FIGHT_ANIM_INDEX 10
#define VOICE_ANIM_INDEX 21
#define BLACKSMITH_HAMMERING_ANIM_INDEX 22
#define EWAN_ANIM_INDEX 23
#define EWAN_ALT_ANIM_INDEX 24
#define PLAYER_ANIM_INDEX 32
#define SELENA_ANIM_INDEX 34
#define BLACKSMITH_DEFAULT_ANIM_INDEX 35

#define CONVERSE_COUNTDOWN_SIZE 40
#define IDLE_COUNTDOWN_SIZE 15
#define MAX_TELL_COMMANDS 8
#define MAX_SAVEGAME_SLOTS 10

#define ROOMNUM_VILLAGE_SHOP 35
#define ROOMNUM_CAVE 38
#define ROOMNUM_CELLAR 42
#define ROOMNUM_DINING_HALL 45

// Countdown for # operations in path finder before breaking until next
// tick - set it to 0 if you'd like all pathfinding to be done at once
//#define PATHFIND_COUNTDOWN 4000
#define PATHFIND_COUNTDOWN 0

// Pixel record flags
#define PIXELFLAG_HAS_TABLE 4

// Hotspot flags
#define HOTSPOTFLAG_FOUND 0x80
#define HOTSPOTFLAG_SKIP 0x40
#define HOTSPOTFLAG_MENU_EXCLUSION 0x20
#define HOTSPOTFLAG_ROOM_SPECIFIC 0x10

// Constants used to reference entries in the reworked support data entry lists
#define RETURN_SUPPORT_ID 0x400
#define EXIT_BLOCKED_SUPPORT_ID 0x800
#define JUMP_ADDR_2_SUPPORT_ID 0x1403
#define GOEWIN_CAVE_SUPPORT_ID 0x1800
#define GOEWIN_STANDARD_SUPPORT_ID 0x1C00

// Constants used in animation Serf on the rack
#define RACK_SERF_SCRIPT_ID_1 0x35C
#define RACK_SERF_SCRIPT_ID_2 0x384

} // End of namespace Lure

#endif