forked from diasurgical/devilutionX
-
Notifications
You must be signed in to change notification settings - Fork 5
/
defs.h
195 lines (152 loc) · 4.69 KB
/
defs.h
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
/**
* @file defs.h
*
* Global definitions and Macros.
*/
#define DIABOOL BOOL
#define GAME_NAME "DIABLO"
#define APP_NAME "Diablo"
#define DMAXX 40
#define DMAXY 40
#define LIGHTSIZE 6912 // 27 * 256
#define GMENU_SLIDER 0x40000000
#define GMENU_ENABLED 0x80000000
// must be unsigned to generate unsigned comparisons with pnum
#define MAX_PLRS 4
#define MAX_CHARACTERS 10
#define MAX_LVLMTYPES 16
// #define MAX_PATH 260
#define MAX_SEND_STR_LEN 80
#define MAX_SPELLS 37
#define MAXDEAD 31
#define MAXDUNX 112
#define MAXDUNY 112
#define MAXITEMS 127
#define MAXBELTITEMS 8
#define MAXLIGHTS 32
#define MAXMISSILES 125
#define MAXMONSTERS 200
#define MAXMULTIQUESTS 4
#define MAXOBJECTS 127
#define MAXPORTAL 4
#define MAXQUESTS 16
#define MAXTHEMES 50
#define MAXTILES 2048
#define MAXTRIGGERS 5
#define MAXVISION 32
#define MDMAXX 40
#define MDMAXY 40
#define MAXCHARLEVEL 51
#define ITEMTYPES 35
// number of inventory grid cells
#define NUM_INV_GRID_ELEM 40
#define INV_SLOT_SIZE_PX 28
// Item indestructible durability
#define DUR_INDESTRUCTIBLE 255
#define VOLUME_MIN -1600
#define VOLUME_MAX 0
#define NUM_TOWNERS 16
// todo: enums
#define NUMLEVELS 17
#define SMITH_ITEMS 20
#define SMITH_PREMIUM_ITEMS 6
#define SMITH_MAX_VALUE 140000
#define SMITH_MAX_PREMIUM_VALUE 140000
// from diablo 2 beta
#define MAXEXP 2000000000
#define MAXRESIST 75
#define GOLD_SMALL_LIMIT 1000
#define GOLD_MEDIUM_LIMIT 2500
#define GOLD_MAX_LIMIT 5000
#define PLR_NAME_LEN 32
#define MAXPATHNODES 300
#define MAX_PATH_LENGTH 25
// 256 kilobytes + 3 bytes (demo leftover) for file magic (262147)
// final game uses 4-byte magic instead of 3
#define FILEBUFF ((256*1024)+3)
#define PMSG_COUNT 8
// Diablo Retail Version Game ID
#define GAME_ID ((int)'DRTL')
// Diablo uses a 256 color palette
// Entry 0-127 (0x00-0x7F) are level specific
// Entry 128-255 (0x80-0xFF) are global
// standard palette for all levels
// 8 or 16 shades per color
// example (dark blue): PAL16_BLUE+14, PAL8_BLUE+7
// example (light red): PAL16_RED+2, PAL8_RED
// example (orange): PAL16_ORANGE+8, PAL8_ORANGE+4
#define PAL8_BLUE 128
#define PAL8_RED 136
#define PAL8_YELLOW 144
#define PAL8_ORANGE 152
#define PAL16_BEIGE 160
#define PAL16_BLUE 176
#define PAL16_YELLOW 192
#define PAL16_ORANGE 208
#define PAL16_RED 224
#define PAL16_GRAY 240
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
// If defined, use 32-bit colors instead of 8-bit [Default -> Undefined]
//#define RGBMODE
#ifndef RGBMODE
#define SCREEN_BPP 8
#else
#define SCREEN_BPP 32
#endif
#define BORDER_LEFT 64
#define BORDER_TOP 160
#define BORDER_RIGHT 64
#define BORDER_BOTTOM 16
#define SCREEN_X BORDER_LEFT
#define SCREEN_Y BORDER_TOP
#define BUFFER_WIDTH (BORDER_LEFT + SCREEN_WIDTH + BORDER_RIGHT)
#define BUFFER_HEIGHT (BORDER_TOP + SCREEN_HEIGHT + BORDER_BOTTOM)
#define TILE_WIDTH 64
#define TILE_HEIGHT 32
#define PANEL_WIDTH 640
#define PANEL_HEIGHT 128
#define PANEL_TOP (SCREEN_HEIGHT - PANEL_HEIGHT)
#define PANEL_LEFT (SCREEN_WIDTH - PANEL_WIDTH) / 2
#define PANEL_X (SCREEN_X + PANEL_LEFT)
#define PANEL_Y (SCREEN_Y + PANEL_TOP)
#define SPANEL_WIDTH 320
#define SPANEL_HEIGHT 352
#define PANELS_COVER (SCREEN_WIDTH <= PANEL_WIDTH && SCREEN_HEIGHT <= SPANEL_HEIGHT + PANEL_HEIGHT)
#define RIGHT_PANEL (SCREEN_WIDTH - SPANEL_WIDTH)
#define RIGHT_PANEL_X (SCREEN_X + RIGHT_PANEL)
#if SCREEN_WIDTH <= PANEL_WIDTH
#define VIEWPORT_HEIGHT (SCREEN_HEIGHT - PANEL_HEIGHT)
#else
#define VIEWPORT_HEIGHT SCREEN_HEIGHT
#endif
#define DIALOG_TOP ((SCREEN_HEIGHT - PANEL_HEIGHT) / 2 - 18)
#define DIALOG_Y (SCREEN_Y + DIALOG_TOP)
#define SCREENXY(x, y) ((x) + SCREEN_X + ((y) + SCREEN_Y) * BUFFER_WIDTH)
#define MemFreeDbg(p) \
{ \
void *p__p; \
p__p = p; \
p = NULL; \
mem_free_dbg(p__p); \
}
#undef assert
#ifndef _DEBUG
#define assert(exp) ((void)0)
#else
#define assert(exp) (void)( (exp) || (assert_fail(__LINE__, __FILE__, #exp), 0) )
#endif
#define ERR_DLG(title, text) ErrDlg(title, text, __FILE__, __LINE__)
// To apply to certain functions which have local variables aligned by 1 for unknown yet reason
#if (_MSC_VER == 1200)
#define ALIGN_BY_1 __declspec(align(1))
#else
#define ALIGN_BY_1
#endif
#define SwapLE32 SDL_SwapLE32
#define SwapLE16 SDL_SwapLE16
#define ErrSdl() ErrDlg("SDL Error", SDL_GetError(), __FILE__, __LINE__)
#ifdef _MSC_VER
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#endif