fix link errors on compilers with strict "extern" enforcement
[rofl0r-openbor.git] / data.c
blobf087a76f5e5af67a2cdc53b2ee30d5e5ff28f36a
1 #include "openbor.h"
2 #include "data.h"
4 s_color_tables color_tables = {
5 .mp = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
6 .hp = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
7 .ld = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
8 };
10 s_barstatus loadingbarstatus = {
11 .offsetx = 0,
12 .offsety = 0,
13 .sizex = 0,
14 .sizey = 10,
15 .type = percentagebar,
16 .orientation = horizontalbar,
17 .noborder = 0,
18 .direction = 0,
19 .barlayer = 0,
20 .backlayer = 0,
21 .borderlayer = 0,
22 .shadowlayer = 0,
23 .colourtable = &color_tables.ld,
26 s_barstatus lbarstatus = // Used for customizable lifebar size
28 .offsetx = 0,
29 .offsety = 0,
30 .sizex = 0,
31 .sizey = 0,
32 .type = valuebar,
33 .orientation = horizontalbar,
34 .noborder = 0,
35 .direction = 0,
36 .barlayer = 0,
37 .backlayer = 0,
38 .borderlayer = 0,
39 .shadowlayer = 0,
40 .colourtable = &color_tables.hp,
43 s_barstatus olbarstatus = // Used for customizable opponent lifebar size
45 .offsetx = 0,
46 .offsety = 0,
47 .sizex = 0,
48 .sizey = 0,
49 .type = valuebar,
50 .orientation = horizontalbar,
51 .noborder = 0,
52 .direction = 0,
53 .barlayer = 0,
54 .backlayer = 0,
55 .borderlayer = 0,
56 .shadowlayer = 0,
57 .colourtable = &color_tables.hp,
60 s_barstatus mpbarstatus = // Used for customizable lifebar size
62 .offsetx = 0,
63 .offsety = 0,
64 .sizex = 0,
65 .sizey = 0,
66 .type = valuebar,
67 .orientation = horizontalbar,
68 .noborder = 0,
69 .direction = 0,
70 .barlayer = 0,
71 .backlayer = 0,
72 .borderlayer = 0,
73 .shadowlayer = 0,
74 .colourtable = &color_tables.mp,
77 // -------dynamic animation indexes-------
78 const s_dynamic_animation_indexes_default_sizes default_dyn_anims_sizes = {
79 .animdowns = MAX_DOWNS,
80 .animups = MAX_UPS,
81 .animbackwalks = MAX_BACKWALKS,
82 .animwalks = MAX_WALKS,
83 .animidles = MAX_IDLES,
84 .animpains = MAX_ATKS,
85 .animdies = MAX_ATKS,
86 .animfalls = MAX_ATKS,
87 .animrises = MAX_ATKS,
88 .animriseattacks = MAX_ATKS,
89 .animblkpains = MAX_ATKS,
90 .animattacks = MAX_ATTACKS,
91 .animfollows = MAX_FOLLOWS,
92 .animspecials = MAX_SPECIALS,
95 s_dynamic_animation_indexes dyn_anims = {0};
96 const int dyn_anim_itemcount = sizeof(s_dynamic_animation_indexes) / sizeof(int*);
99 const s_const_dynamic_animation_indexes default_dyn_anims = {
100 .animdowns = (const int[]) { ANI_DOWN },
101 .animups = (const int[]) { ANI_UP },
102 .animbackwalks = (const int[]) { ANI_BACKWALK },
103 .animwalks = (const int[]) { ANI_WALK },
104 .animidles = (const int[]) { ANI_IDLE },
105 .animpains = (const int[]) {
106 ANI_PAIN, ANI_PAIN2, ANI_PAIN3, ANI_PAIN4,
107 ANI_PAIN, ANI_BURNPAIN, ANI_PAIN, ANI_SHOCKPAIN,
108 ANI_PAIN, ANI_PAIN5, ANI_PAIN6, ANI_PAIN7,
109 ANI_PAIN8, ANI_PAIN9, ANI_PAIN10
111 .animdies = (const int[]) {
112 ANI_DIE, ANI_DIE2, ANI_DIE3, ANI_DIE4,
113 ANI_DIE, ANI_BURNDIE, ANI_DIE, ANI_SHOCKDIE,
114 ANI_DIE, ANI_DIE5, ANI_DIE6, ANI_DIE7,
115 ANI_DIE8, ANI_DIE9, ANI_DIE10
117 .animfalls = (const int[]) {
118 ANI_FALL, ANI_FALL2, ANI_FALL3, ANI_FALL4,
119 ANI_FALL, ANI_BURN, ANI_FALL, ANI_SHOCK,
120 ANI_FALL, ANI_FALL5, ANI_FALL6, ANI_FALL7,
121 ANI_FALL8, ANI_FALL9, ANI_FALL10
123 .animrises = (const int[]) {
124 ANI_RISE, ANI_RISE2, ANI_RISE3, ANI_RISE4,
125 ANI_RISE, ANI_RISEB, ANI_RISE, ANI_RISES,
126 ANI_RISE, ANI_RISE5, ANI_RISE6, ANI_RISE7,
127 ANI_RISE8, ANI_RISE9, ANI_RISE10
129 .animriseattacks = (const int[]) {
130 ANI_RISEATTACK, ANI_RISEATTACK2, ANI_RISEATTACK3, ANI_RISEATTACK4,
131 ANI_RISEATTACK, ANI_RISEATTACKB, ANI_RISEATTACK, ANI_RISEATTACKS,
132 ANI_RISEATTACK, ANI_RISEATTACK5, ANI_RISEATTACK6, ANI_RISEATTACK7,
133 ANI_RISEATTACK8, ANI_RISEATTACK9, ANI_RISEATTACK10
135 .animblkpains = (const int[]) {
136 ANI_BLOCKPAIN, ANI_BLOCKPAIN2, ANI_BLOCKPAIN3, ANI_BLOCKPAIN4,
137 ANI_BLOCKPAIN, ANI_BLOCKPAINB, ANI_BLOCKPAIN, ANI_BLOCKPAINS,
138 ANI_BLOCKPAIN, ANI_BLOCKPAIN5, ANI_BLOCKPAIN6, ANI_BLOCKPAIN7,
139 ANI_BLOCKPAIN8, ANI_BLOCKPAIN9, ANI_BLOCKPAIN10
141 .animattacks = (const int[]) {
142 ANI_ATTACK1, ANI_ATTACK2, ANI_ATTACK3, ANI_ATTACK4
144 .animfollows = (const int[]) {
145 ANI_FOLLOW1, ANI_FOLLOW2, ANI_FOLLOW3, ANI_FOLLOW4
147 .animspecials = (const int[]) {
148 ANI_FREESPECIAL, ANI_FREESPECIAL2, ANI_FREESPECIAL3,
149 ANI_FREESPECIAL4, ANI_FREESPECIAL5, ANI_FREESPECIAL6,
150 ANI_FREESPECIAL7, ANI_FREESPECIAL8
154 const s_dyn_anim_custom_maxvalues dyn_anim_default_custom_maxvalues = {
155 .max_downs = MAX_DOWNS,
156 .max_ups = MAX_UPS,
157 .max_backwalks = MAX_BACKWALKS,
158 .max_walks = MAX_WALKS,
159 .max_idles = MAX_IDLES,
160 .max_attack_types = MAX_ATKS,
161 .max_freespecials = MAX_SPECIALS,
162 .max_follows = MAX_FOLLOWS,
163 .max_attacks = MAX_ATTACKS,
164 .max_animations = MAX_ANIS,
167 s_dyn_anim_custom_maxvalues dyn_anim_custom_maxvalues = {
168 .max_downs = MAX_DOWNS,
169 .max_ups = MAX_UPS,
170 .max_backwalks = MAX_BACKWALKS,
171 .max_walks = MAX_WALKS,
172 .max_idles = MAX_IDLES,
173 .max_attack_types = MAX_ATKS,
174 .max_freespecials = MAX_SPECIALS,
175 .max_follows = MAX_FOLLOWS,
176 .max_attacks = MAX_ATTACKS,
177 .max_animations = MAX_ANIS,
180 //this table is used to find the custom max value for a
181 //s_dynamic_animation_indexes member.
182 const s_const_dynamic_animation_indexes dyn_anim_custom_max_ptr = {
183 .animdowns = &dyn_anim_custom_maxvalues.max_downs,
184 .animups = &dyn_anim_custom_maxvalues.max_ups,
185 .animbackwalks = &dyn_anim_custom_maxvalues.max_backwalks,
186 .animwalks = &dyn_anim_custom_maxvalues.max_walks,
187 .animidles = &dyn_anim_custom_maxvalues.max_idles,
188 .animpains = &dyn_anim_custom_maxvalues.max_attack_types,
189 .animdies = &dyn_anim_custom_maxvalues.max_attack_types,
190 .animfalls = &dyn_anim_custom_maxvalues.max_attack_types,
191 .animrises = &dyn_anim_custom_maxvalues.max_attack_types,
192 .animriseattacks = &dyn_anim_custom_maxvalues.max_attack_types,
193 .animblkpains = &dyn_anim_custom_maxvalues.max_attack_types,
194 .animattacks = &dyn_anim_custom_maxvalues.max_attacks,
195 .animfollows = &dyn_anim_custom_maxvalues.max_follows,
196 .animspecials = &dyn_anim_custom_maxvalues.max_freespecials,
198 //----------------------------------
200 s_button_names buttonnames = {
201 .moveup = "Move Up",
202 .movedown = "Move Down",
203 .moveleft = "Move Left",
204 .moveright = "Move Right",
205 .attack = "Attack 1",
206 .attack2 = "Attack 2",
207 .attack3 = "Attack 3",
208 .attack4 = "Attack 4",
209 .jump = "Jump",
210 .special = "Special",
211 .start = "Start",
212 .screenshot = "Screenshot",
215 const s_button_names_const config_button_names = {
216 .moveup = "moveup",
217 .movedown = "movedown",
218 .moveleft = "moveleft",
219 .moveright = "moveright",
220 .attack = "attack",
221 .attack2 = "attack2",
222 .attack3 = "attack3",
223 .attack4 = "attack4",
224 .jump = "jump",
225 .special = "special",
226 .start = "start",
227 .screenshot = "screenshot",
230 const s_special_sprite special_sprites_init[] = {
231 {&shadowsprites[0], "data/sprites/shadow1.gif", 9, 3},
232 {&shadowsprites[1], "data/sprites/shadow2.gif", 14, 5},
233 {&shadowsprites[2], "data/sprites/shadow3.gif", 19, 6},
234 {&shadowsprites[3], "data/sprites/shadow4.gif", 24, 8},
235 {&shadowsprites[4], "data/sprites/shadow5.gif", 29, 9},
236 {&shadowsprites[5], "data/sprites/shadow6.gif", 34, 11},
237 {&gosprite, "data/sprites/arrow.gif", 35, 23},
238 {&golsprite, "data/sprites/arrowl.gif", 35, 23},
241 const int special_sprites_init_itemcount = ARRAY_SIZE(special_sprites_init);
243 const s_font_init font_init[] = {
244 {1, "data/sprites/font.gif"},
245 {1, "data/sprites/font2.gif"},
246 {1, "data/sprites/font3.gif"},
247 {1, "data/sprites/font4.gif"},
248 {0, "data/sprites/font5.gif"},
249 {0, "data/sprites/font6.gif"},
250 {0, "data/sprites/font7.gif"},
251 {0, "data/sprites/font8.gif"},
254 const int font_init_itemcount = ARRAY_SIZE(font_init);
256 const char* video_txt_commands_strings[] = {
257 [VTC_VIDEO] = "video",
258 [VTC_SCENES] = "scenes",
259 [VTC_BACKGROUNDS] = "backgrounds",
260 [VTC_LEVELS] = "levels",
261 [VTC_MODELS] = "models",
262 [VTC_COLOURDEPTH] = "colourdepth",
263 [VTC_FORCEMODE] = "forcemode",
266 char** video_txt_commands_dest[] = {
267 [VTC_VIDEO] = NULL,
268 [VTC_SCENES] = NULL,
269 [VTC_BACKGROUNDS] = &custBkgrds,
270 [VTC_LEVELS] = &custLevels,
271 [VTC_MODELS] = &custModels,
272 [VTC_COLOURDEPTH] = NULL,
273 [VTC_FORCEMODE] = NULL,
276 const s_colors_rgb default_colors = {
277 .black = {0, 0, 0},
278 .red = {255, 0, 0}, // 1% - 25% Full Health
279 .orange = {255, 150, 0}, // 200-300HP
280 .yellow = {0xF8, 0xB8, 0x40}, // 26%-50% Full health
281 .white = {255, 255, 255}, // white boxes 600+ HP
282 .blue = {0, 0, 255}, // 100-200 HP
283 .green = {0, 255, 0}, // 51% - 100% full health
284 .pink = {255, 0, 255}, // 300-400HP
285 .purple = {128, 48, 208}, // transbox 400-500HP
286 .magic = {98, 180, 255}, // 1st magic bar color by tails
287 .magic2 = {24, 48, 143}, // 2sec magic bar color by tails
288 .shadow = {64, 64, 64},
291 const s_script_and_path_and_name script_and_path_and_name[] = {
292 {&game_scripts.update_script, "data/scripts/update.c", "update"},
293 {&game_scripts.updated_script, "data/scripts/updated.c", "updated"},
294 {&game_scripts.level_script, "data/scripts/level.c", "level"},
295 {&game_scripts.endlevel_script, "data/scripts/endlevel.c", "endlevel"},
296 {&game_scripts.key_script_all, "data/scripts/keyall.c", "keyall"},
297 {&game_scripts.timetick_script, "data/scripts/timetick.c", "timetick"},
298 {&game_scripts.score_script[0], "data/scripts/score1.c", "score"},
299 {&game_scripts.score_script[1], "data/scripts/score2.c", "score"},
300 {&game_scripts.score_script[2], "data/scripts/score3.c", "score"},
301 {&game_scripts.score_script[3], "data/scripts/score4.c", "score"},
302 {&game_scripts.key_script[0], "data/scripts/key1.c", "key"},
303 {&game_scripts.key_script[1], "data/scripts/key2.c", "key"},
304 {&game_scripts.key_script[2], "data/scripts/key3.c", "key"},
305 {&game_scripts.key_script[3], "data/scripts/key4.c", "key"},
306 {&game_scripts.join_script[0], "data/scripts/join1.c", "join"},
307 {&game_scripts.join_script[1], "data/scripts/join2.c", "join"},
308 {&game_scripts.join_script[2], "data/scripts/join3.c", "join"},
309 {&game_scripts.join_script[3], "data/scripts/join4.c", "join"},
310 {&game_scripts.respawn_script[0], "data/scripts/respawn1.c", "respawn"},
311 {&game_scripts.respawn_script[1], "data/scripts/respawn2.c", "respawn"},
312 {&game_scripts.respawn_script[2], "data/scripts/respawn3.c", "respawn"},
313 {&game_scripts.respawn_script[3], "data/scripts/respawn4.c", "respawn"},
314 {&game_scripts.pdie_script[0], "data/scripts/die1.c", "die"},
315 {&game_scripts.pdie_script[1], "data/scripts/die2.c", "die"},
316 {&game_scripts.pdie_script[2], "data/scripts/die3.c", "die"},
317 {&game_scripts.pdie_script[3], "data/scripts/die4.c", "die"},
320 const int script_and_path_and_name_itemcount = ARRAY_SIZE(script_and_path_and_name);
322 const s_videomodes videomodes_init_data[] = {
323 [VTM_320_240] = {320, 240, 0, 0, 231, {0, 0, 0, 0}, 0, 0, 0, 1.f, 1.f},
324 [VTM_480_272] = {480, 272, 80, 20, 163, {0, 0, 0, 0,}, 0, 0, 0, 1.5f, 1.13f},
325 [VTM_640_480] = {640, 480, 160, 35, 464, {0, 0, 0, 0}, 0, 0, 0, 2.f, 2.f},
326 [VTM_720_480] = {720, 480, 200, 35, 464, {0, 0, 0, 0}, 0, 0, 0, 2.25f, 2.f},
327 [VTM_800_480] = {800, 480, 240, 35, 464, {0, 0, 0, 0}, 0, 0, 0, 2.5f, 2.f},
328 [VTM_800_600] = {800, 600, 240, 44, 580, {0, 0, 0, 0}, 0, 0, 0, 2.5f, 2.5f},
329 [VTM_960_560] = {960, 540, 320, 40, 522, {0, 0, 0, 0}, 0, 0, 0, 3.f, 2.25f}
332 const s_player_min_max_z_bgheight player_min_max_z_bgheight_init_data[] = {
333 [VTM_320_240] = {160, 232, 160},
334 [VTM_480_272] = {182, 264, 182},
335 [VTM_640_480] = {321, 465, 321},
336 [VTM_720_480] = {321, 465, 321},
337 [VTM_800_480] = {321, 465, 321},
338 [VTM_800_600] = {401, 582, 401},
339 [VTM_960_560] = {362, 524, 362}
342 const s_drawmethod plainmethod = {
343 .table = NULL,
344 .fp = NULL,
345 .fillcolor = 0,
346 .scalex = 256,
347 .scaley = 256,
348 .shiftx = 0,
349 .centerx = 0, //currently used only by gfxshadow, do not touch it
350 .centery = 0,
351 .alpha = -1,
352 .remap = -1,
353 .rotate = 0,
354 .flag = 1,
355 .flipx = 0,
356 .flipy = 0,
357 .transbg = 0,
358 .fliprotate = 0,
361 const s_attack emptyattack = {
362 .attack_force = 0,
363 .hitsound = -1,
364 .hitflash = -1,
365 .blockflash = -1,
366 .blocksound = -1,
367 .counterattack = 0,
368 .attack_coords = {0, 0, 0, 0, 0},
369 .no_pain = 0,
370 .no_flash = 0,
371 .no_block = 0,
372 .grab = 0,
373 .force_direction = 0,
374 .blast = 0,
375 .freeze = 0,
376 .steal = 0,
377 .forcemap = 0,
378 .seal = 0,
379 .freezetime = 0,
380 .maptime = 0,
381 .sealtime = 0,
382 .dot = 0,
383 .dot_index = 0,
384 .dot_time = 0,
385 .dot_force = 0,
386 .dot_rate = 0,
387 .dropv = {0.f, 0.f, 0.f},
388 .otg = 0,
389 .jugglecost = 0,
390 .guardcost = 0,
391 .attack_drop = 0,
392 .attack_type = 0,
393 .damage_on_landing = 0,
394 .grab_distance = 0,
395 .pause_add = 0,
396 .staydown = {0, 0, 0},
400 const s_savedata savedata_default = {
401 .compatibleversion = COMPATIBLEVERSION,
402 .gamma = 0,
403 .brightness = 0,
404 .usesound = 1,
405 .soundrate = 44100,
406 .soundbits = 16,
407 .soundvol = 15,
408 .usemusic = 1,
409 .musicvol = 100,
410 .effectvol = 120,
411 .usejoy = 1,
412 .mode = 0,
413 .showtitles = 0,
414 .windowpos = 0,
415 .logo = 0,
416 .uselog = 1,
417 .debuginfo = 0,
418 .fullscreen = 0,
419 .stretch = 0,
420 .usegl = 0,
421 .glscale = 1.0,
422 .glfilter = 0,
423 .screen[0][0] = 0,
424 .screen[0][1] = 0,
425 .screen[1][0] = 0,
426 .screen[1][1] = 0,
427 .screen[2][0] = 0,
428 .screen[2][1] = 0,
429 .screen[3][0] = 0,
430 .screen[3][1] = 0,
431 .screen[4][0] = 0,
432 .screen[4][1] = 0,
433 .screen[5][0] = 0,
434 .screen[5][1] = 0,
435 .screen[6][0] = 0,
436 .screen[6][1] = 0,
437 .keys[0][SDID_MOVEUP] = CONTROL_DEFAULT1_UP,
438 .keys[0][SDID_MOVEDOWN] = CONTROL_DEFAULT1_DOWN,
439 .keys[0][SDID_MOVELEFT] = CONTROL_DEFAULT1_LEFT,
440 .keys[0][SDID_MOVERIGHT] = CONTROL_DEFAULT1_RIGHT,
441 .keys[0][SDID_ATTACK] = CONTROL_DEFAULT1_FIRE1,
442 .keys[0][SDID_ATTACK2] = CONTROL_DEFAULT1_FIRE2,
443 .keys[0][SDID_ATTACK3] = CONTROL_DEFAULT1_FIRE3,
444 .keys[0][SDID_ATTACK4] = CONTROL_DEFAULT1_FIRE4,
445 .keys[0][SDID_JUMP] = CONTROL_DEFAULT1_FIRE5,
446 .keys[0][SDID_SPECIAL] = CONTROL_DEFAULT1_FIRE6,
447 .keys[0][SDID_START] = CONTROL_DEFAULT1_START,
448 .keys[0][SDID_SCREENSHOT] = CONTROL_DEFAULT1_SCREENSHOT,
449 .keys[1][SDID_MOVEUP] = CONTROL_DEFAULT2_UP,
450 .keys[1][SDID_MOVEDOWN] = CONTROL_DEFAULT2_DOWN,
451 .keys[1][SDID_MOVELEFT] = CONTROL_DEFAULT2_LEFT,
452 .keys[1][SDID_MOVERIGHT] = CONTROL_DEFAULT2_RIGHT,
453 .keys[1][SDID_ATTACK] = CONTROL_DEFAULT2_FIRE1,
454 .keys[1][SDID_ATTACK2] = CONTROL_DEFAULT2_FIRE2,
455 .keys[1][SDID_ATTACK3] = CONTROL_DEFAULT2_FIRE3,
456 .keys[1][SDID_ATTACK4] = CONTROL_DEFAULT2_FIRE4,
457 .keys[1][SDID_JUMP] = CONTROL_DEFAULT2_FIRE5,
458 .keys[1][SDID_SPECIAL] = CONTROL_DEFAULT2_FIRE6,
459 .keys[1][SDID_START] = CONTROL_DEFAULT2_START,
460 .keys[1][SDID_SCREENSHOT] = CONTROL_DEFAULT2_SCREENSHOT,
461 .keys[2][SDID_MOVEUP] = CONTROL_DEFAULT3_UP,
462 .keys[2][SDID_MOVEDOWN] = CONTROL_DEFAULT3_DOWN,
463 .keys[2][SDID_MOVELEFT] = CONTROL_DEFAULT3_LEFT,
464 .keys[2][SDID_MOVERIGHT] = CONTROL_DEFAULT3_RIGHT,
465 .keys[2][SDID_ATTACK] = CONTROL_DEFAULT3_FIRE1,
466 .keys[2][SDID_ATTACK2] = CONTROL_DEFAULT3_FIRE2,
467 .keys[2][SDID_ATTACK3] = CONTROL_DEFAULT3_FIRE3,
468 .keys[2][SDID_ATTACK4] = CONTROL_DEFAULT3_FIRE4,
469 .keys[2][SDID_JUMP] = CONTROL_DEFAULT3_FIRE5,
470 .keys[2][SDID_SPECIAL] = CONTROL_DEFAULT3_FIRE6,
471 .keys[2][SDID_START] = CONTROL_DEFAULT3_START,
472 .keys[2][SDID_SCREENSHOT] = CONTROL_DEFAULT3_SCREENSHOT,
473 .keys[3][SDID_MOVEUP] = CONTROL_DEFAULT4_UP,
474 .keys[3][SDID_MOVEDOWN] = CONTROL_DEFAULT4_DOWN,
475 .keys[3][SDID_MOVELEFT] = CONTROL_DEFAULT4_LEFT,
476 .keys[3][SDID_MOVERIGHT] = CONTROL_DEFAULT4_RIGHT,
477 .keys[3][SDID_ATTACK] = CONTROL_DEFAULT4_FIRE1,
478 .keys[3][SDID_ATTACK2] = CONTROL_DEFAULT4_FIRE2,
479 .keys[3][SDID_ATTACK3] = CONTROL_DEFAULT4_FIRE3,
480 .keys[3][SDID_ATTACK4] = CONTROL_DEFAULT4_FIRE4,
481 .keys[3][SDID_JUMP] = CONTROL_DEFAULT4_FIRE5,
482 .keys[3][SDID_SPECIAL] = CONTROL_DEFAULT4_FIRE6,
483 .keys[3][SDID_START] = CONTROL_DEFAULT4_START,
484 .keys[3][SDID_SCREENSHOT] = CONTROL_DEFAULT4_SCREENSHOT,