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 },
10 s_barstatus loadingbarstatus
= {
15 .type
= percentagebar
,
16 .orientation
= horizontalbar
,
23 .colourtable
= &color_tables
.ld
,
26 s_barstatus lbarstatus
= // Used for customizable lifebar size
33 .orientation
= horizontalbar
,
40 .colourtable
= &color_tables
.hp
,
43 s_barstatus olbarstatus
= // Used for customizable opponent lifebar size
50 .orientation
= horizontalbar
,
57 .colourtable
= &color_tables
.hp
,
60 s_barstatus mpbarstatus
= // Used for customizable lifebar size
67 .orientation
= horizontalbar
,
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
,
81 .animbackwalks
= MAX_BACKWALKS
,
82 .animwalks
= MAX_WALKS
,
83 .animidles
= MAX_IDLES
,
84 .animpains
= 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
,
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
,
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
= {
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",
210 .special
= "Special",
212 .screenshot
= "Screenshot",
215 const s_button_names_const config_button_names
= {
217 .movedown
= "movedown",
218 .moveleft
= "moveleft",
219 .moveright
= "moveright",
221 .attack2
= "attack2",
222 .attack3
= "attack3",
223 .attack4
= "attack4",
225 .special
= "special",
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
[] = {
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
= {
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
= {
349 .centerx
= 0, //currently used only by gfxshadow, do not touch it
361 const s_attack emptyattack
= {
368 .attack_coords
= {0, 0, 0, 0, 0},
373 .force_direction
= 0,
387 .dropv
= {0.f
, 0.f
, 0.f
},
393 .damage_on_landing
= 0,
396 .staydown
= {0, 0, 0},
400 const s_savedata savedata_default
= {
401 .compatibleversion
= COMPATIBLEVERSION
,
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
,