-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathopenbor.h
More file actions
3224 lines (2972 loc) · 113 KB
/
openbor.h
File metadata and controls
3224 lines (2972 loc) · 113 KB
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
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
* OpenBOR - http://www.chronocrash.com
* -
----------------------------------------------------------------------
* All rights reserved, see LICENSE in OpenBOR root for details.
*
* Copyright (c) 2004 - 2014 OpenBOR Team
*/
/////////////////////////////////////////////////////////////////////////////
// Beats of Rage //
// Side-scrolling beat-'em-up //
/////////////////////////////////////////////////////////////////////////////
#ifndef OPENBOR_H
#define OPENBOR_H
/////////////////////////////////////////////////////////////////////////////
// INCS in makefile
#include "types.h"
#include "video.h"
#include "vga.h"
#include "screen.h"
#include "transform.h"
#include "loadimg.h"
#include "bitmap.h"
#include "sprite.h"
#include "spriteq.h"
#include "font.h"
#include "timer.h"
#include "rand32.h"
#include "sblaster.h"
#include "soundmix.h"
#include "control.h"
#include "draw.h"
#include "packfile.h"
#include "palette.h"
#include "anigif.h"
#include "config.h"
#include "globals.h"
#include "ram.h"
#include "version.h"
#include "savedata.h"
#ifdef SDL
#include "gfx.h"
#endif
#ifdef WEBM
#include "yuv.h"
#include "vidplay.h"
#endif
/////////////////////////////////////////////////////////////////////////////
#define DEFAULT_SHUTDOWN_MESSAGE \
"OpenBOR " VERSION ", Compile Date: " __DATE__ "\n" \
"Presented by the OpenBOR Team.\n" \
"www.chronocrash.com\n"\
"OpenBOR is the open source continuation of Beats of Rage by Senile Team.\n" \
"\n" \
"Special thanks to SEGA and SNK.\n\n"
#define COMPATIBLEVERSION 0x00033748
#define CV_SAVED_GAME 0x00033747
#define CV_HIGH_SCORE 0x00033747
#define GAME_SPEED 200
#define THINK_SPEED 2
#define COUNTER_SPEED (GAME_SPEED*2)
#define MAX_NAME_LEN 50 //47
#define MAX_ENTS 150
#define MAX_SPECIALS 8 // Added for customizable freespecials
#define MAX_SPECIAL_INPUTS 27 // max freespecial input steps, MAX_SPECIAL_INPUTS-1 is reserved, MAX_SPECIAL_INPUTS-2 is animation index, MAX_SPECIAL_INPUTS-3 is reserved. OX -4 , -5 , -6 , -7 , -8 , -9 , -10 also for cancels
#define MAX_ATCHAIN 12 // max attack chain length
#define MAX_IDLES 1 // Idle animations.
#define MAX_WALKS 1 // Walk animations.
#define MAX_BACKWALKS 1 // Backwalk animations.
#define MAX_UPS 1 // Walk up animations.
#define MAX_DOWNS 1 // Walk down animations.
#define MAX_ATTACKS 4 // Total number of attacks players have
#define MAX_FOLLOWS 4 // For followup animations
#define MAX_COLLISIONS 2 // Collision boxes.
#define MAX_ARG_LEN 512
#define MAX_ALLOWSELECT_LEN 1024
#define MAX_SELECT_LOADS 512
#define MAX_PAL_SIZE 1024
#define MAX_CACHED_BACKGROUNDS 9
#define MAX_DOTS 10 // Max active dot effects.
#define MAX_ARG_COUNT 64
#define PLATFORM_DEFAULT_X 99999
/*
Note: the min Z coordinate of the player is important
for several other drawing operations.
movement restirctions are here!
*/
#define FRONTPANEL_Z (PLAYER_MAX_Z+50)
#define HUD_Z (FRONTPANEL_Z+10000)
#define HOLE_Z (PLAYER_MIN_Z-46)
#define NEONPANEL_Z (PLAYER_MIN_Z-47)
#define SHADOW_Z (PLAYER_MIN_Z-48)
#define SCREENPANEL_Z (PLAYER_MIN_Z-49)
#define PANEL_Z (PLAYER_MIN_Z-50)
#define MIRROR_Z (PLAYER_MIN_Z-5)
#define PIT_DEPTH -250
#define P2_STATS_DIST 180
#define CONTACT_DIST_H 30 // Distance to make contact
#define CONTACT_DIST_V 12
#define GRAB_DIST 36 // Grabbing ents will be placed this far apart.
#define GRAB_STALL (GAME_SPEED * 8 / 10)
#define T_WALKOFF 2.0
#define T_MIN_BASEMAP -1000
#define T_MAX_CHECK_ALTITUDE 9999999
#define DEFAULT_ATK_DROPV_Y 3.0
#define DEFAULT_ATK_DROPV_X 1.2
#define DEFAULT_ATK_DROPV_Z 0
// PLAY/REC INPUT vars
typedef struct InputKeys
{
u64 keys[MAX_PLAYERS];
u64 newkeys[MAX_PLAYERS];
u64 releasekeys[MAX_PLAYERS];
u64 playkeys[MAX_PLAYERS];
u32 time;
u32 interval;
u32 synctime;
} RecKeys;
typedef enum
{
A_REC_STOP,
A_REC_REC,
A_REC_PLAY,
A_REC_FREE,
} a_recstatus;
typedef struct PlayRecStatus {
char filename[MAX_ARG_LEN];
char path[MAX_ARG_LEN];
int status; // 0 = stop / 1 = rec / 2 = play
int begin;
u32 starttime;
u32 endtime;
u32 synctime; // used to sync rec time with game time
u32 totsynctime;
u32 cseed;
unsigned long seed;
unsigned ticks;
FILE *handle;
RecKeys *buffer;
} a_playrecstatus;
extern a_playrecstatus *playrecstatus;
// Caskey, Damon V.
// 2018-04-23
//
// Initial values for projectile spawns.
typedef enum
{
// Use bitwise ready values here so we can cram
// different types of data into one value.
// Source for projectiles base.
PROJECTILE_PRIME_BASE_FLOOR = 0x00000001,
PROJECTILE_PRIME_BASE_Y = 0x00000002,
// Movement behavior on launch.
PROJECTILE_PRIME_LAUNCH_MOVING = 0x00000004,
PROJECTILE_PRIME_LAUNCH_STATIONARY = 0x00000008,
// Type of projectile as determined by launch method.
PROJECTILE_PRIME_REQUEST_FLASH = 0x00000010,
PROJECTILE_PRIME_REQUEST_KNIFE = 0x00000020,
PROJECTILE_PRIME_REQUEST_PROJECTILE = 0x00000040,
PROJECTILE_PRIME_REQUEST_PSHOTNO = 0x00000080,
PROJECTILE_PRIME_REQUEST_SHOT = 0x00000100,
PROJECTILE_PRIME_REQUEST_UNDEFINED = 0x00000200, // Probably by a script.
// How was projectile model determined?
PROJECTILE_PRIME_SOURCE_ANIMATION = 0x00000400, // Animation setting.
PROJECTILE_PRIME_SOURCE_GLOBAL = 0x00000800, // Global "knife" or global "shot".
PROJECTILE_PRIME_SOURCE_INDEX = 0x00001000, // By projectile's model index.
PROJECTILE_PRIME_SOURCE_HEADER = 0x00002000, // Model header setting.
PROJECTILE_PRIME_SOURCE_NAME = 0x00004000, // By projectile's model name.
PROJECTILE_PRIME_SOURCE_WEAPON = 0x00008000 // From a SUBTYPE_PROJECTLE weapon pickup.
} e_projectile_prime;
// State of attack boxes.
typedef enum
{
ATTACKING_INACTIVE,
ATTACKING_PREPARED,
ATTACKING_ACTIVE
// Next should be 4, 8, ... for bitwise evaluations.
} e_attacking_state;
// State of idle
typedef enum
{
IDLING_INACTIVE,
IDLING_PREPARED,
IDLING_ACTIVE
} e_idling_state;
// State of edge.
typedef enum
{
EDGE_NO,
EDGE_LEFT,
EDGE_RIGHT
} e_edge_state;
// State of duck.
typedef enum
{
DUCK_INACTIVE,
DUCK_PREPARED,
DUCK_ACTIVE,
DUCK_RISE = 4
} e_duck_state;
// Platform props
typedef enum
{
PLATFORM_X,
PLATFORM_Z,
PLATFORM_UPPERLEFT,
PLATFORM_LOWERLEFT,
PLATFORM_UPPERRIGHT,
PLATFORM_LOWERRIGHT,
PLATFORM_DEPTH,
PLATFORM_HEIGHT
} e_platform_props;
typedef enum
{
PORTING_ANDROID,
PORTING_DARWIN,
PORTING_DREAMCAST,
PORTING_GPX2,
PORTING_LINUX,
PORTING_OPENDINGUX,
PORTING_PSP,
PORTING_UNKNOWN,
PORTING_WII,
PORTING_WINDOWS,
PORTING_WIZ,
PORTING_XBOX,
PORTING_VITA
} e_porting;
typedef enum
{
SPAWN_TYPE_UNDEFINED,
SPAWN_TYPE_BIKER,
SPAWN_TYPE_CMD_SPAWN,
SPAWN_TYPE_CMD_SUMMON,
SPAWN_TYPE_DUST_FALL,
SPAWN_TYPE_DUST_JUMP,
SPAWN_TYPE_DUST_LAND,
SPAWN_TYPE_FLASH,
SPAWN_TYPE_ITEM,
SPAWN_TYPE_LEVEL,
SPAWN_TYPE_PLAYER_MAIN,
SPAWN_TYPE_PLAYER_SELECT,
SPAWN_TYPE_PROJECTILE_BOMB,
SPAWN_TYPE_PROJECTILE_NORMAL,
SPAWN_TYPE_PROJECTILE_STAR,
SPAWN_TYPE_STEAM,
SPAWN_TYPE_WEAPON
} e_spawn_type;
typedef enum
{
PLANE_X,
PLANE_Y,
PLANE_Z
} e_plane;
typedef struct
{
int x;
int y;
int font_index;
} s_debug_xy_msg;
typedef enum
{
/*
Key def enum.
Damon V. Caskey
2013-12-27
*/
FLAG_ESC = 0x00000001,
FLAG_START = 0x00000002,
FLAG_MOVELEFT = 0x00000004,
FLAG_MOVERIGHT = 0x00000008,
FLAG_MOVEUP = 0x00000010,
FLAG_MOVEDOWN = 0x00000020,
FLAG_ATTACK = 0x00000040,
FLAG_JUMP = 0x00000080,
FLAG_SPECIAL = 0x00000100,
FLAG_SCREENSHOT = 0x00000200,
FLAG_ATTACK2 = 0x00000400,
FLAG_ATTACK3 = 0x00000800,
FLAG_ATTACK4 = 0x00001000,
FLAG_ANYBUTTON = (FLAG_START|FLAG_SPECIAL|FLAG_ATTACK|FLAG_ATTACK2|FLAG_ATTACK3|FLAG_ATTACK4|FLAG_JUMP),
FLAG_CONTROLKEYS = (FLAG_SPECIAL|FLAG_ATTACK|FLAG_ATTACK2|FLAG_ATTACK3|FLAG_ATTACK4|FLAG_JUMP|FLAG_MOVEUP|FLAG_MOVEDOWN|FLAG_MOVELEFT|FLAG_MOVERIGHT),
FLAG_FORWARD = 0x40000000,
FLAG_BACKWARD = 0x80000000
} e_key_def;
typedef enum
{
/*
Key id enum.
Damon V. Caskey
2013-12-27
*/
SDID_MOVEUP,
SDID_MOVEDOWN,
SDID_MOVELEFT,
SDID_MOVERIGHT,
SDID_ATTACK,
SDID_ATTACK2,
SDID_ATTACK3,
SDID_ATTACK4,
SDID_JUMP,
SDID_SPECIAL,
SDID_START,
SDID_SCREENSHOT,
SDID_ESC
} e_key_id;
typedef enum
{
/*
Entity type enumerator.
Damon V. Caskey
2013-12-27
*/
TYPE_NONE,
TYPE_PLAYER,
TYPE_ENEMY,
TYPE_ITEM = 4,
TYPE_OBSTACLE = 8,
TYPE_STEAMER = 16,
TYPE_SHOT = 32, // 7-1-2005 type to use for player projectiles
TYPE_TRAP = 64, // 7-1-2005 lets face it enemies are going to just let you storm in without setting a trap or two!
TYPE_TEXTBOX = 128, // New textbox type for displaying messages
TYPE_ENDLEVEL = 256, // New endlevel type that ends the level when touched
TYPE_NPC = 512, // A character can be an ally or enemy.
TYPE_PANEL = 1024, // Fake panel, scroll with screen using model speed
TYPE_MAX = TYPE_PANEL, // For openbor constant check and type hack (i.e., custom hostile and candamage)
TYPE_RESERVED = 0x40000000 // should not use as a type
} e_entity_type;
typedef enum
{
/*
Entity subtype enumerator.
Damon V. Caskey
2013-12-27
*/
SUBTYPE_NONE,
SUBTYPE_BIKER,
SUBTYPE_NOTGRAB,
SUBTYPE_ARROW, //7-1-2005 subtype for an "enemy" that flies across the screen and dies
SUBTYPE_TOUCH, // ltb 1-18-05 new Item subtype for a more platformer feel.
SUBTYPE_WEAPON,
SUBTYPE_NOSKIP, // Text type that can't be skipped
SUBTYPE_FLYDIE, // Now obstacles can be hit and fly like on Simpsons/TMNT
SUBTYPE_BOTH, // Used with TYPE_ENDLEVEL to force both players to reach the point before ending level
SUBTYPE_PROJECTILE, // New weapon projectile type that can be picked up by players/enemies
SUBTYPE_FOLLOW, // Used by NPC character, if set, they will try to follow players
SUBTYPE_CHASE // Used by enemy always chasing you
} e_entity_type_sub;
typedef enum
{
EXCHANGE_CONFERRER,
EXCHANGE_RECIPIANT
} e_exchange;
//------------reserved for A.I. types-------------------------
typedef enum
{
/*
AI move 1 enum: Affects movement path
Damon V. Caskey
2013-12-27
*/
AIMOVE1_NORMAL, // Current default style
AIMOVE1_CHASE = 0x00000001, // alway move towards target, and can run to them if target is farway
AIMOVE1_CHASEZ = 0x00000002, // only try to get close in z direction
AIMOVE1_CHASEX = 0x00000004, // only try to get colse in x direction
AIMOVE1_AVOID = 0x00000008, // try to avoid target
AIMOVE1_AVOIDZ = 0x00000010, // only try to avoid target in z direction
AIMOVE1_AVOIDX = 0x00000020, // only try to avoid target in x direction
AIMOVE1_WANDER = 0x00000040, // ignore the target's position completely, wander everywhere, long idle time
AIMOVE1_BIKER = 0x00000080, // move like a biker
AIMOVE1_ARROW = 0x00000100, // fly like an arrow
AIMOVE1_STAR = 0x00000200, // fly like a star, subject to ground
AIMOVE1_BOMB = 0x00000400, // fly like a bomb, subject to ground/wall etc
AIMOVE1_NOMOVE = 0x00000800, // don't move at all
MASK_AIMOVE1 = 0x0000FFFF
} e_aimove_1;
typedef enum
{
/*
A.I move 2 enum: Affect terrain reflect
Damon V. Caskey
2013-12-27
*/
AIMOVE2_NORMAL, // Current default style
AIMOVE2_IGNOREHOLES = 0x00010000, // don't avoid holes
AIMOVE2_NOTARGETIDLE = 0x00020000, // don't move when there's no target
MASK_AIMOVE2 = 0xFFFF0000
} e_aimove_2;
typedef enum
{
/*
A.I. attack1 enum: Affect attacking style.
Damon V. Caskey
2013-12-27
*/
AIATTACK1_NORMAL, // Current default style
AIATTACK1_LONG = 0x00000001, // Long range first, not used
AIATTACK1_MELEE = 0x00000002, // Melee attack first, not used
AIATTACK1_NOATTACK = 0x00000004, // dont attack at all
AIATTACK1_ALWAYS = 0x00000008, // more aggression than default, useful for traps who don't think
MASK_AIATTACK1 = 0x0000FFFF
} e_aiattack_1;
typedef enum
{
/*
A.I. attack1 enum: Affect Defending style.
Damon V. Caskey
2013-12-27
*/
AIATTACK2_NORMAL, // Current default style, don't dodge at all
AIATTACK2_DODGE = 0x00010000, // Use dodge animation to avoid attack
AIATTACK2_DODGEMOVE = 0x00020000, // Try to move in z direction if a jump attack is about to hit him and try to step back if a melee attack is about to hit him.
MASK_AIATTACK2 = 0xFFFF0000
} e_aiattack_2;
typedef enum //Animations
{
/*
Animations enum.
Damon V. Caskey
2013-12-27
*/
ANI_NONE, // To indicate a blank or no animation at all.
ANI_IDLE,
ANI_WALK,
ANI_JUMP,
ANI_LAND,
ANI_PAIN,
ANI_FALL,
ANI_RISE,
ANI_ATTACK,
ANI_ATTACK1,
ANI_ATTACK2,
ANI_ATTACK3,
ANI_ATTACK4, // Very important
ANI_UPPER,
ANI_BLOCK, // New block animation
ANI_JUMPATTACK,
ANI_JUMPATTACK2,
ANI_GET,
ANI_GRAB,
ANI_GRABATTACK,
ANI_GRABATTACK2,
ANI_THROW,
ANI_SPECIAL,
ANI_FREESPECIAL,
ANI_SPAWN, // 26-12-2004 new animation added here ani_spawn
ANI_DIE, // 29-12-2004 new animation added here ani_die
ANI_PICK, // 7-1-2005 used when players select their character at the select screen
ANI_FREESPECIAL2,
ANI_JUMPATTACK3,
ANI_FREESPECIAL3,
ANI_UP, // Mar 2, 2005 - Animation for when going up
ANI_DOWN, // Mar 2, 2005 - Animation for when going down
ANI_SHOCK, // Animation played when knocked down by shock attack
ANI_BURN, // Animation played when knocked down by burn attack
ANI_SHOCKPAIN, // Animation played when not knocked down by shock attack
ANI_BURNPAIN, // Animation played when not knocked down by shock attack
ANI_GRABBED, // Animation played when grabbed
ANI_SPECIAL2, // Animation played for when pressing forward special
ANI_RUN, // Animation played when a player is running
ANI_RUNATTACK, // Animation played when a player is running and presses attack
ANI_RUNJUMPATTACK, // Animation played when a player is running and jumps and presses attack
ANI_ATTACKUP, // u u animation
ANI_ATTACKDOWN, // d d animation
ANI_ATTACKFORWARD, // f f animation
ANI_ATTACKBACKWARD, // Used for attacking backwards
ANI_FREESPECIAL4, // More freespecials added
ANI_FREESPECIAL5, // More freespecials added
ANI_FREESPECIAL6, // More freespecials added
ANI_FREESPECIAL7, // More freespecials added
ANI_FREESPECIAL8, // More freespecials added
ANI_RISEATTACK, // Attack used for enemies when players are crowding around after knocking them down
ANI_DODGE, // Used for up up / down down SOR3 dodge moves for players
ANI_ATTACKBOTH, // Used for when a player holds down attack and presses jump
ANI_GRABFORWARD, // New grab attack for when a player holds down forward/attack
ANI_GRABFORWARD2, // New second grab attack for when a player holds down forward/attack
ANI_JUMPFORWARD, // Attack when a player is moving and jumps
ANI_GRABDOWN, // Attack when a player has grabbed an opponent and presses down/attack
ANI_GRABDOWN2, // Attack when a player has grabbed an opponent and presses down/attack
ANI_GRABUP, // Attack when a player has grabbed an opponent and presses up/attack
ANI_GRABUP2, // Attack when a player has grabbed an opponent and presses up/attack
ANI_SELECT, // Animation that is displayed at the select screen
ANI_DUCK, // Animation that is played when pressing down in "platform" type levels
ANI_FAINT, // Faint animations for players/enemys by tails
ANI_CANT, // Can't animation for players(animation when mp is less than mpcost) by tails.
ANI_THROWATTACK, // Added for subtype projectile
ANI_CHARGEATTACK, // Plays when player releases attack1 after holding >= chargetime.
ANI_JUMPCANT,
ANI_JUMPSPECIAL,
ANI_BURNDIE,
ANI_SHOCKDIE,
ANI_PAIN2,
ANI_PAIN3,
ANI_PAIN4,
ANI_FALL2,
ANI_FALL3,
ANI_FALL4,
ANI_DIE2,
ANI_DIE3,
ANI_DIE4,
ANI_CHARGE,
ANI_BACKWALK,
ANI_SLEEP,
ANI_FOLLOW1,
ANI_FOLLOW2,
ANI_FOLLOW3,
ANI_FOLLOW4,
ANI_PAIN5,
ANI_PAIN6,
ANI_PAIN7,
ANI_PAIN8,
ANI_PAIN9,
ANI_PAIN10,
ANI_FALL5,
ANI_FALL6,
ANI_FALL7,
ANI_FALL8,
ANI_FALL9,
ANI_FALL10,
ANI_DIE5,
ANI_DIE6,
ANI_DIE7,
ANI_DIE8,
ANI_DIE9,
ANI_DIE10,
ANI_TURN, // turn back/flip
ANI_RESPAWN, //now spawn works for players
ANI_FORWARDJUMP,
ANI_RUNJUMP,
ANI_JUMPLAND,
ANI_JUMPDELAY,
ANI_HITOBSTACLE,
ANI_HITPLATFORM,
ANI_HITWALL,
ANI_GRABBACKWARD,
ANI_GRABBACKWARD2,
ANI_GRABWALK,
ANI_GRABBEDWALK,
ANI_GRABWALKUP,
ANI_GRABBEDWALKUP,
ANI_GRABWALKDOWN,
ANI_GRABBEDWALKDOWN,
ANI_GRABTURN,
ANI_GRABBEDTURN,
ANI_GRABBACKWALK,
ANI_GRABBEDBACKWALK,
ANI_SLIDE, //Down + Jump animation.
ANI_RUNSLIDE, //Down + Jump while running.
ANI_BLOCKPAIN, //If entity has this, it will play in place of "pain" when it's blokcpain is 1 and incomming attack is blocked.
ANI_DUCKATTACK,
ANI_RISE2,
ANI_RISE3,
ANI_RISE4,
ANI_RISE5,
ANI_RISE6,
ANI_RISE7,
ANI_RISE8,
ANI_RISE9,
ANI_RISE10,
ANI_RISEB,
ANI_RISES,
ANI_BLOCKPAIN2,
ANI_BLOCKPAIN3,
ANI_BLOCKPAIN4,
ANI_BLOCKPAIN5,
ANI_BLOCKPAIN6,
ANI_BLOCKPAIN7,
ANI_BLOCKPAIN8,
ANI_BLOCKPAIN9,
ANI_BLOCKPAIN10,
ANI_BLOCKPAINB,
ANI_BLOCKPAINS,
ANI_CHIPDEATH,
ANI_GUARDBREAK,
ANI_RISEATTACK2,
ANI_RISEATTACK3,
ANI_RISEATTACK4,
ANI_RISEATTACK5,
ANI_RISEATTACK6,
ANI_RISEATTACK7,
ANI_RISEATTACK8,
ANI_RISEATTACK9,
ANI_RISEATTACK10,
ANI_RISEATTACKB,
ANI_RISEATTACKS,
ANI_WALKOFF,
ANI_BACKPAIN,
ANI_BACKPAIN2,
ANI_BACKPAIN3,
ANI_BACKPAIN4,
ANI_BACKPAIN5,
ANI_BACKPAIN6,
ANI_BACKPAIN7,
ANI_BACKPAIN8,
ANI_BACKPAIN9,
ANI_BACKPAIN10,
ANI_BACKFALL,
ANI_BACKFALL2,
ANI_BACKFALL3,
ANI_BACKFALL4,
ANI_BACKFALL5,
ANI_BACKFALL6,
ANI_BACKFALL7,
ANI_BACKFALL8,
ANI_BACKFALL9,
ANI_BACKFALL10,
ANI_BACKDIE,
ANI_BACKDIE2,
ANI_BACKDIE3,
ANI_BACKDIE4,
ANI_BACKDIE5,
ANI_BACKDIE6,
ANI_BACKDIE7,
ANI_BACKDIE8,
ANI_BACKDIE9,
ANI_BACKDIE10,
ANI_BACKRUN,
ANI_BACKBURNPAIN,
ANI_BACKSHOCKPAIN,
ANI_BACKBURN,
ANI_BACKSHOCK,
ANI_BACKBURNDIE,
ANI_BACKSHOCKDIE,
ANI_BACKRISEB,
ANI_BACKRISES,
ANI_BACKRISE,
ANI_BACKRISE2,
ANI_BACKRISE3,
ANI_BACKRISE4,
ANI_BACKRISE5,
ANI_BACKRISE6,
ANI_BACKRISE7,
ANI_BACKRISE8,
ANI_BACKRISE9,
ANI_BACKRISE10,
ANI_BACKRISEATTACKB,
ANI_BACKRISEATTACKS,
ANI_BACKRISEATTACK,
ANI_BACKRISEATTACK2,
ANI_BACKRISEATTACK3,
ANI_BACKRISEATTACK4,
ANI_BACKRISEATTACK5,
ANI_BACKRISEATTACK6,
ANI_BACKRISEATTACK7,
ANI_BACKRISEATTACK8,
ANI_BACKRISEATTACK9,
ANI_BACKRISEATTACK10,
ANI_BACKBLOCKPAINB,
ANI_BACKBLOCKPAINS,
ANI_BACKBLOCKPAIN,
ANI_BACKBLOCKPAIN2,
ANI_BACKBLOCKPAIN3,
ANI_BACKBLOCKPAIN4,
ANI_BACKBLOCKPAIN5,
ANI_BACKBLOCKPAIN6,
ANI_BACKBLOCKPAIN7,
ANI_BACKBLOCKPAIN8,
ANI_BACKBLOCKPAIN9,
ANI_BACKBLOCKPAIN10,
ANI_EDGE,
ANI_BACKEDGE,
ANI_DUCKING,
ANI_DUCKRISE,
ANI_VICTORY,
ANI_FALLLOSE,
ANI_LOSE,
MAX_ANIS // Maximum # of animations. This must always be last.
} e_animations;
typedef enum
{
ANI_PROP_ANIMHITS, // Does the attack need to hit before cancel is allowed?
ANI_PROP_ANTIGRAV, // UT: make dive a similar property as antigravity.
ANI_PROP_ATTACK,
ANI_PROP_COLLISIONONE, // stick on the only one victim
ANI_PROP_BODY_COLLISION,
ANI_PROP_ENTITY_COLLISION,
ANI_PROP_BOUNCE, //FLOAT -tossv/bounce = new tossv
ANI_PROP_CANCEL, // Cancel anims with freespecial
ANI_PROP_CHARGETIME, //INT charge time for an animation
ANI_PROP_COUNTERRANGE, //SUB Auto counter attack. 2011_04_01, DC: Moved to struct.
ANI_PROP_DELAY,
ANI_PROP_DRAWMETHODS,
ANI_PROP_DROPFRAME, // SUB if tossv < 0, this frame will be set
ANI_PROP_DROPV, // SUB if tossv < 0, this frame will be set
ANI_PROP_ENERGYCOST, //SUB. 1-10-05 to adjust the amount of energy used for specials. 2011_03_31, DC: Moved to struct.
ANI_PROP_FLIPFRAME, // Turns entities around on the desired frame
ANI_PROP_FOLLOWUP, // use which FOLLOW anim?
ANI_PROP_IDLE,
ANI_PROP_IGNOREATTACKID,
ANI_PROP_INDEX, //unique id
ANI_PROP_JUMPFRAME, //SUB
ANI_PROP_LANDFRAME, // SUB Landing behavior. 2011_04_01, DC: Moved to struct.
ANI_PROP_LOOP, // Animation looping. 2011_03_31, DC: Moved to struct.
ANI_PROP_MODEL_INDEX,
ANI_PROP_MOVE,
ANI_PROP_NUMFRAMES, //Framecount.
ANI_PROP_OFFSET,
ANI_PROP_PLATFORM,
ANI_PROP_PROJECTILE,
ANI_PROP_QUAKEFRAME, // SUB Screen shake effect. 2011_04_01, DC; Moved to struct.
ANI_PROP_RANGE, //SUB Verify distance to target, jump landings, etc.. 2011_04_01, DC: Moved to struct.
ANI_PROP_SHADOW,
ANI_PROP_SIZE, // SUB entity's size (height) during animation
ANI_PROP_SOUNDTOPLAY,
ANI_PROP_SPAWNFRAME, // SUB Spawn the subentity as its default type. {frame} {x} {z} {a} {relative?}
ANI_PROP_SPRITE,
ANI_PROP_SPRITEA,
ANI_PROP_SUBENTITY, // Store the sub-entity's name for further use
ANI_PROP_SUMMONFRAME, // SUB Summon the subentity as an ally, only one though {frame} {x} {z} {a} {relative?}
ANI_PROP_SYNC, // sychronize frame to previous animation if they matches
ANI_PROP_UNSUMMONFRAME,// SUB Un-summon the entity
ANI_PROP_VULNERABLE,
ANI_PROP_WEAPONFRAME // SUB Specify with a frame when to switch to a weapon model
} e_animation_properties;
typedef enum
{
BOSS_SLOW_OFF,
BOSS_SLOW_ON
} e_boss_slow_flag;
typedef enum
{
DAMAGE_FROM_ENEMY_OFF,
DAMAGE_FROM_ENEMY_ON
} e_damage_from_enemy_flag;
typedef enum
{
DAMAGE_FROM_PLAYER_OFF,
DAMAGE_FROM_PLAYER_ON
} e_damage_from_player_flag;
typedef enum
{
LEVEL_PROP_AUTO_SCROLL_DIRECTION, // int bgdir;
LEVEL_PROP_AUTO_SCROLL_X, // float bgspeed;
LEVEL_PROP_AUTO_SCROLL_Y, // float vbgspeed;
LEVEL_PROP_BASEMAP_COLLECTION, // s_basemap *basemaps;
LEVEL_PROP_BASEMAP_COUNT, // int numbasemaps;
LEVEL_PROP_BOSS_COUNT, // int bossescount;
LEVEL_PROP_BOSS_MUSIC_NAME, // char bossmusic[256];
LEVEL_PROP_BOSS_MUSIC_OFFSET, // unsigned bossmusic_offset;
LEVEL_PROP_BOSS_SLOW, // int boss_slow;
LEVEL_PROP_CAMERA_OFFSET_X, // int cameraxoffset;
LEVEL_PROP_CAMERA_OFFSET_Z, // int camerazoffset;
LEVEL_PROP_COMPLETE_FORCE, // int force_finishlevel;
LEVEL_PROP_GAMEOVER, // int force_gameover;
LEVEL_PROP_DAMAGE_FROM_ENEMY, // int nohurt;
LEVEL_PROP_DAMAGE_FROM_PLAYER, // int nohit;
LEVEL_PROP_FACING, // e_facing_adjust facing;
LEVEL_PROP_GRAVITY, // float gravity;
LEVEL_PROP_HOLE_COLLECTION, // s_terrain *holes;
LEVEL_PROP_HOLE_COUNT, // int numholes;
LEVEL_PROP_LAYER_BACKGROUND_DEFAULT_HANDLE, // s_layer *background;
LEVEL_PROP_LAYER_BACKGROUND_COLLECTION, // s_layer **bglayers;
LEVEL_PROP_LAYER_BACKGROUND_COUNT, // int numbglayers;
LEVEL_PROP_LAYER_COLLECTION, // s_layer *layers;
LEVEL_PROP_LAYER_COUNT, // int numlayers;
LEVEL_PROP_LAYER_FOREGROUND_COLLECTION, // s_layer **fglayers;
LEVEL_PROP_LAYER_FOREGROUND_COUNT, // int numfglayers;
LEVEL_PROP_LAYER_FRONTPANEL_COLLECTION, // s_layer **frontpanels;
LEVEL_PROP_LAYER_FRONTPANEL_COUNT, // int numfrontpanels;
LEVEL_PROP_LAYER_GENERIC_COLLECTION, // s_layer **genericlayers;
LEVEL_PROP_LAYER_GENERIC_COUNT, // int numgenericlayers;
LEVEL_PROP_LAYER_PANEL_COLLECTION, // s_layer *(*panels)[3]; //normal neon screen
LEVEL_PROP_LAYER_PANEL_COUNT, // int numpanels;
LEVEL_PROP_LAYER_REF_COLLECTION, // s_layer *layersref;
LEVEL_PROP_LAYER_REF_COUNT, // int numlayersref;
LEVEL_PROP_LAYER_WATER_COLLECTION, // s_layer **waters;
LEVEL_PROP_LAYER_WATER_COUNT, // int numwaters;
LEVEL_PROP_MAX_FALL_VELOCITY, // float maxfallspeed;
LEVEL_PROP_MAX_TOSS_VELOCITY, // float maxtossspeed;
LEVEL_PROP_MIRROR, // int mirror;
LEVEL_PROP_NAME, // char *name;
LEVEL_PROP_NUM_BOSSES, // int numbosses;
LEVEL_PROP_PALETTE_BLENDING_COLLECTION, // unsigned char *(*blendings)[MAX_BLENDINGS];
LEVEL_PROP_PALETTE_COLLECTION, // unsigned char (*palettes)[1024];
LEVEL_PROP_PALETTE_COUNT, // int numpalettes;
LEVEL_PROP_POSITION_X, // int pos;
LEVEL_PROP_QUAKE, // int quake;
LEVEL_PROP_QUAKE_TIME, // u32 quaketime;
LEVEL_PROP_ROCKING, // int rocking;
LEVEL_PROP_SCRIPT_LEVEL_END, // Script endlevel_script;
LEVEL_PROP_SCRIPT_LEVEL_START, // Script level_script;
LEVEL_PROP_SCRIPT_KEY, // Script key_script;
LEVEL_PROP_SCRIPT_UPDATE, // Script update_script;
LEVEL_PROP_SCRIPT_UPDATED, // Script updated_script;
LEVEL_PROP_SCROLL_DIRECTION, // int scrolldir;
LEVEL_PROP_SCROLL_VELOCITY, // float scrollspeed;
LEVEL_PROP_SIZE_X, // int width;
LEVEL_PROP_SPAWN_COLLECTION, // s_spawn_entry *spawnpoints;
LEVEL_PROP_SPAWN_COUNT, // int numspawns;
LEVEL_PROP_SPAWN_PLAYER_COLLECTION, // s_axis_principal_float spawn[MAX_PLAYERS];
LEVEL_PROP_SPECIAL_DISABLE, // int nospecial;
LEVEL_PROP_TEXT_OBJECT_COLLECTION, // s_textobj *textobjs;
LEVEL_PROP_TEXT_OBJECT_COUNT, // int numtextobjs;
LEVEL_PROP_TIME_ADVANCE, // u32 advancetime;
LEVEL_PROP_TIME_DISPLAY, // int notime;
LEVEL_PROP_TIME_RESET, // int noreset;
LEVEL_PROP_TIME_SET, // int settime;
LEVEL_PROP_TYPE, // int type;
LEVEL_PROP_WAITING, // int waiting;
LEVEL_PROP_WALL_COLLECTION, // s_terrain *walls;
LEVEL_PROP_WALL_COUNT, // int numwalls;
LEVEL_PROP_WEAPON // int setweap;
} e_level_properties;
typedef enum
{
SET_PROP_COMPLETE_FLAG, // int ifcomplete;
SET_PROP_COMPLETE_SKIP, // int noshowcomplete;
SET_PROP_CONTINUE_SCORE_TYPE, // int continuescore;
SET_PROP_CREDITS, // int credits;
SET_PROP_GAME_OVER_SKIP, // int noshowgameover;
SET_PROP_HOF_DISABLE, // int noshowhof;
SET_PROP_LEVELSET_COLLECTION, // s_level_entry *levelorder;
SET_PROP_LEVELSET_COUNT, // int numlevels;
SET_PROP_LIVES, // int lives;
SET_PROP_MP_RECOVER_TYPE, // int typemp;
SET_PROP_MUSIC_FADE_TIME, // int custfade;
SET_PROP_MUSIC_OVERLAP, // int musicoverlap;
SET_PROP_NAME, // char *name;
SET_PROP_PLAYER_MAX, // int maxplayers;
SET_PROP_SAVE_TYPE, // int saveflag;
SET_PROP_SELECT_DISABLE, // int noselect;
SET_PROP_SELECT_NO_SAME // int nosame;
} e_set_properties;
typedef enum
{
/*
Argument type enum.
Damon V. Caskey
2013-12-27
*/
ARG_FLOAT,
ARG_STRING,
ARG_INT
} e_arg_types;
// Caskey, Damon V.
// 2013-12-27
//
// Attack types. If more types are added,
// don't forget to add them to script
// access and account for them in the
// model load logic.
typedef enum
{
ATK_NONE = -1, // When we want no attack at all, such as damage_on_landing's default.
ATK_NORMAL,
ATK_NORMAL1 = ATK_NORMAL,
ATK_NORMAL2,
ATK_NORMAL3,
ATK_NORMAL4,
ATK_BLAST,
ATK_BURN,
ATK_FREEZE,
ATK_SHOCK,
ATK_STEAL,
ATK_NORMAL5,
ATK_NORMAL6,
ATK_NORMAL7,
ATK_NORMAL8,
ATK_NORMAL9,
ATK_NORMAL10,
// For engine and script use. These are
// applied automatically by various
// conditions or intended for script logic.
ATK_BOSS_DEATH, // KO leftover enemies when boss is defeated.
ATK_ITEM, // Scripting item logic. Item "attacks" entity that collects it.
ATK_LAND, // Touching ground during a damage on landing fall.
ATK_LIFESPAN, // Entity's lifespan timer expires.
ATK_LOSE, // Players (with lose animation) when level time expires.
ATK_PIT, // Entity falls into a pit and reaches specified depth.
ATK_TIMEOVER, // Players (without lose animation) when level time expires.
// Default max attack types (must
// be below all attack types in enum
// to get correct value)
MAX_ATKS,
STA_ATKS = (MAX_ATKS-10)
} e_attack_types;
// Attack box properties.
// Caskey, Damon V.
// 2016-10-26
typedef enum
{
ATTACK_PROP_BLOCK_COST,
ATTACK_PROP_BLOCK_PENETRATE,
ATTACK_PROP_COORDINATES,
ATTACK_PROP_COUNTER,
ATTACK_PROP_DAMAGE_FORCE,
ATTACK_PROP_DAMAGE_LAND_FORCE,
ATTACK_PROP_DAMAGE_LAND_MODE,
ATTACK_PROP_DAMAGE_LETHAL_DISABLE,
ATTACK_PROP_DAMAGE_RECURSIVE_FORCE,
ATTACK_PROP_DAMAGE_RECURSIVE_INDEX,
ATTACK_PROP_DAMAGE_RECURSIVE_MODE,
ATTACK_PROP_DAMAGE_RECURSIVE_TIME_RATE,
ATTACK_PROP_DAMAGE_RECURSIVE_TIME_EXPIRE,
ATTACK_PROP_DAMAGE_STEAL,
ATTACK_PROP_DAMAGE_TYPE,
ATTACK_PROP_EFFECT_BLOCK_FLASH,
ATTACK_PROP_EFFECT_BLOCK_SOUND,
ATTACK_PROP_EFFECT_HIT_FLASH,
ATTACK_PROP_EFFECT_HIT_FLASH_DISABLE,
ATTACK_PROP_EFFECT_HIT_SOUND,
ATTACK_PROP_INDEX,
ATTACK_PROP_GROUND,
ATTACK_PROP_MAP_INDEX,
ATTACK_PROP_MAP_TIME,
ATTACK_PROP_REACTION_FALL_FORCE,
ATTACK_PROP_REACTION_FALL_VELOCITY,
ATTACK_PROP_REACTION_FREEZE_MODE,
ATTACK_PROP_REACTION_FREEZE_TIME,
ATTACK_PROP_REACTION_INVINCIBLE_TIME,
ATTACK_PROP_REACTION_REPOSITION_DIRECTION,
ATTACK_PROP_REACTION_REPOSITION_DISTANCE,
ATTACK_PROP_REACTION_REPOSITION_MODE,
ATTACK_PROP_REACTION_PAIN_SKIP,
ATTACK_PROP_REACTION_PAUSE_TIME,
ATTACK_PROP_SEAL_COST,
ATTACK_PROP_SEAL_TIME,
ATTACK_PROP_STAYDOWN_RISE,
ATTACK_PROP_STAYDOWN_RISEATTACK,
ATTACK_PROP_TAG
} e_attack_properties;
// Body collision (bbox) properties.
// Caskey, Damon V.
// 2016-10-31
typedef enum
{
BODY_COLLISION_PROP_COORDINATES,
BODY_COLLISION_PROP_DEFENSE,
BODY_COLLISION_PROP_TAG
} e_body_collision_properties;
// Caskey, Damon V.
// 2018-01-04
//
// Coordinate structure, mainly for accessing
// collision box position and dimensions.