1 #ifndef __ANIMATION_CONTROL_H
2 #define __ANIMATION_CONTROL_H
3 
4 // Header file for merc animation control
5 #include "JA2Types.h"
6 
7 
8 #define MAX_ANIMATIONS			320
9 #define MAX_FRAMES_PER_ANIM		100
10 #define MAX_RANDOM_ANIMS_PER_BODYTYPE	7
11 
12 #define RANDOM_ANIM_NOTHINGINHAND	0
13 #define RANDOM_ANIM_RIFLEINHAND	1
14 #define RANDOM_ANIM_IRRELEVENTINHAND	2
15 
16 
17 #define RANDOM_ANIM_SOUND		250
18 
19 #define RANDOM_ANIM_CASUAL		0x01
20 #define RANDOM_ANIM_SECONDBIGMERC	0x02
21 #define RANDOM_ANIM_FIRSTBIGMERC	0x04
22 #define RANDOM_ANIM_INJURED		0x08
23 #define RANDOM_ANIM_DRUNK		0x10
24 
25 
26 #define INJURED_CHANGE_THREASHOLD	30
27 
28 
29 #define USESTATS			0
30 #define FAST_TURN_ANIM_SPEED		30
31 
32 #define INVALID_ANIMATION_SURFACE	32000
33 
34 // FLAG DEFINES
35 #define ANIM_IGNORE_AUTOSTANCE		0x00000001
36 #define ANIM_OK_CHARGE_AP_FOR_TURN	0x00000002
37 #define ANIM_STATIONARY		0x00000004
38 #define ANIM_MOVING			0x00000008
39 #define ANIM_TURNING			0x00000010
40 #define ANIM_FASTTURN			0x00000020
41 #define ANIM_FIREREADY			0x00000040
42 #define ANIM_NONINTERRUPT		0x00000080
43 #define ANIM_HITFINISH			0x00000100
44 #define ANIM_HITSTART			0x00000200
45 #define ANIM_HITWHENDOWN		0x00000400
46 #define ANIM_NOSHOW_MARKER		0x00000800
47 #define ANIM_NOMOVE_MARKER		0x00001000
48 #define ANIM_NORESTART			0x00002000
49 #define ANIM_HITSTOP			0x00004000
50 #define ANIM_SPECIALMOVE		0x00008000
51 #define ANIM_MERCIDLE			0x00010000
52 #define ANIM_STANCECHANGEANIM		0x00020000
53 #define ANIM_LOWER_WEAPON		0x00040000
54 #define ANIM_RAISE_WEAPON		0x00080000
55 #define ANIM_NOCHANGE_WEAPON		0x00100000
56 #define ANIM_NOCHANGE_PENDINGCOUNT	0x00200000
57 #define ANIM_NO_EFFORT			0x00400000
58 #define ANIM_MIN_EFFORT		0x00800000
59 #define ANIM_LIGHT_EFFORT		0x01000000
60 #define ANIM_MODERATE_EFFORT		0x02000000
61 #define ANIM_RT_NONINTERRUPT		0x04000000
62 #define ANIM_VARIABLE_EFFORT		0x08000000
63 #define ANIM_FIRE			0x20000000
64 #define ANIM_BREATH			0x40000000
65 #define ANIM_IGNOREHITFINISH		0x80000000
66 
67 
68 //ANIMATION HEIGHT VALUES
69 #define ANIM_STAND			6
70 #define ANIM_CROUCH			3
71 #define ANIM_PRONE			1
72 
73 #define INVALID_ANIMATION		0xFFF0
74 #define FOUND_INVALID_ANIMATION	0xFFF1
75 
76 
77 struct ANIMCONTROLTYPE
78 {
79 	const char* zAnimStr;
80 	FLOAT       dMovementChange;
81 	UINT32      uiFlags;
82 	INT16       sSpeed;
83 	UINT8       ubHeight;
84 	UINT8       ubEndHeight;
85 };
86 
87 
88 struct ANI_SPEED_DEF
89 {
90 	INT16 sSpeed;
91 	FLOAT dMovementChange;
92 };
93 
94 
95 struct RANDOM_ANI_DEF
96 {
97 	UINT8       ubHandRestriction;
98 	INT16       sAnimID;
99 	UINT8       ubStartRoll;
100 	UINT8       ubEndRoll;
101 	UINT8       ubFlags;
102 	UINT8       ubAnimHeight;
103 	const char *zSoundFile;
104 };
105 
106 
107 // Enumeration of animation states
108 enum AnimationStates
109 {
110 	WALKING = 0,
111 	STANDING,
112 	KNEEL_DOWN,
113 	CROUCHING,
114 	KNEEL_UP,
115 	SWATTING,
116 	RUNNING,
117 	PRONE_DOWN,
118 	CRAWLING,
119 	PRONE_UP,
120 	PRONE,
121 	READY_RIFLE_STAND,
122 	AIM_RIFLE_STAND,
123 	SHOOT_RIFLE_STAND,
124 	END_RIFLE_STAND,
125 	START_SWAT,
126 	END_SWAT,
127 	FLYBACK_HIT,
128 	READY_RIFLE_PRONE,
129 	AIM_RIFLE_PRONE,
130 	SHOOT_RIFLE_PRONE,
131 	END_RIFLE_PRONE,
132 	FALLBACK_DEATHTWICH,
133 	GENERIC_HIT_STAND,
134 	FLYBACK_HIT_BLOOD_STAND,
135 	FLYBACK_HIT_DEATH,
136 	READY_RIFLE_CROUCH,
137 	AIM_RIFLE_CROUCH,
138 	SHOOT_RIFLE_CROUCH,
139 	END_RIFLE_CROUCH,
140 	FALLBACK_HIT_STAND,
141 	ROLLOVER,
142 	CLIMBUPROOF,
143 	FALLOFF,
144 	GETUP_FROM_ROLLOVER,
145 	CLIMBDOWNROOF,
146 	FALLFORWARD_ROOF,
147 	GENERIC_HIT_DEATHTWITCHNB,
148 	GENERIC_HIT_DEATHTWITCHB,
149 	FALLBACK_HIT_DEATHTWITCHNB,
150 	FALLBACK_HIT_DEATHTWITCHB,
151 	GENERIC_HIT_DEATH,
152 	FALLBACK_HIT_DEATH,
153 	GENERIC_HIT_CROUCH,
154 	STANDING_BURST,
155 	STANDING_BURST_HIT,
156 	FALLFORWARD_FROMHIT_STAND,
157 	FALLFORWARD_FROMHIT_CROUCH,
158 	ENDFALLFORWARD_FROMHIT_CROUCH,
159 	GENERIC_HIT_PRONE,
160 	PRONE_HIT_DEATH,
161 	PRONE_LAY_FROMHIT,
162 	PRONE_HIT_DEATHTWITCHNB,
163 	PRONE_HIT_DEATHTWITCHB,
164 
165 	ADULTMONSTER_BREATHING,
166 	ADULTMONSTER_WALKING,
167 	ADULTMONSTER_ATTACKING,
168 
169 	FLYBACK_HITDEATH_STOP,
170 	FALLFORWARD_HITDEATH_STOP,
171 	FALLBACK_HITDEATH_STOP,
172 	PRONE_HITDEATH_STOP,
173 
174 	FLYBACKHIT_STOP,
175 	FALLBACKHIT_STOP,
176 	FALLOFF_STOP,
177 	FALLOFF_FORWARD_STOP,
178 	STAND_FALLFORWARD_STOP,
179 	PRONE_LAYFROMHIT_STOP,
180 
181 	HOPFENCE,
182 
183 	ADULTMONSTER_HIT,
184 	ADULTMONSTER_DYING,
185 	ADULTMONSTER_DYING_STOP,
186 
187 	PUNCH_BREATH,
188 	PUNCH,
189 	NOTHING_STAND,
190 
191 	JFK_HITDEATH,
192 	JFK_HITDEATH_STOP,
193 	JFK_HITDEATH_TWITCHB,
194 
195 	FIRE_STAND_BURST_SPREAD,
196 
197 	FALLOFF_DEATH,
198 	FALLOFF_DEATH_STOP,
199 	FALLOFF_TWITCHB,
200 	FALLOFF_TWITCHNB,
201 
202 	FALLOFF_FORWARD_DEATH,
203 	FALLOFF_FORWARD_DEATH_STOP,
204 	FALLOFF_FORWARD_TWITCHB,
205 	FALLOFF_FORWARD_TWITCHNB,
206 
207 	OPEN_DOOR,
208 	OPEN_STRUCT,
209 
210 	PICKUP_ITEM,
211 	DROP_ITEM,
212 
213 	SLICE,
214 	STAB,
215 	CROUCH_STAB,
216 
217 
218 	START_AID,
219 	GIVING_AID,
220 	END_AID,
221 
222 	DODGE_ONE,
223 
224 	FATCIV_ASS_SCRATCH,
225 
226 	READY_DUAL_STAND,
227 	AIM_DUAL_STAND,
228 	SHOOT_DUAL_STAND,
229 	END_DUAL_STAND,
230 
231 	RAISE_RIFLE,
232 	LOWER_RIFLE,
233 
234 	BODYEXPLODING,
235 
236 	THROW_ITEM,
237 	LOB_ITEM,
238 
239 	QUEEN_MONSTER_BREATHING,
240 
241 	CROUCHED_BURST,
242 	PRONE_BURST,
243 
244 	NOTUSEDANIM1,
245 
246 	BIGBUY_FLEX,
247 	BIGBUY_STRECH,
248 	BIGBUY_SHOEDUST,
249 	BIGBUY_HEADTURN,
250 
251 	MINIGIRL_STOCKING,
252 
253 	GIVE_ITEM,
254 
255 	CLIMB_CLIFF,
256 
257 	COW_EATING,
258 	COW_HIT,
259 	COW_DYING,
260 	COW_DYING_STOP,
261 
262 	WATER_HIT,
263 	WATER_DIE,
264 	WATER_DIE_STOP,
265 
266 	CROW_WALK,
267 	CROW_TAKEOFF,
268 	CROW_LAND,
269 	CROW_FLY,
270 	CROW_EAT,
271 
272 	HELIDROP,
273 
274 	FEM_CLEAN,
275 	FEM_KICKSN,
276 	FEM_LOOK,
277 	FEM_WIPE,
278 
279 	REG_SQUISH,
280 	REG_PULL,
281 	REG_SPIT,
282 
283 	HATKID_YOYO,
284 	KID_ARMPIT,
285 
286 	MONSTER_CLOSE_ATTACK,
287 	MONSTER_SPIT_ATTACK,
288 	MONSTER_BEGIN_EATTING_FLESH,
289 	MONSTER_EATTING_FLESH,
290 	MONSTER_END_EATTING_FLESH,
291 
292 	BLOODCAT_RUN,
293 	BLOODCAT_STARTREADY,
294 	BLOODCAT_READY,
295 	BLOODCAT_ENDREADY,
296 	BLOODCAT_HIT,
297 	BLOODCAT_DYING,
298 	BLOODCAT_DYING_STOP,
299 	BLOODCAT_SWIPE,
300 
301 	NINJA_GOTOBREATH,
302 	NINJA_BREATH,
303 	NINJA_LOWKICK,
304 	NINJA_PUNCH,
305 	NINJA_SPINKICK,
306 
307 	END_OPEN_DOOR,
308 	END_OPEN_LOCKED_DOOR,
309 
310 	KICK_DOOR,
311 
312 	CLOSE_DOOR,
313 
314 	RIFLE_STAND_HIT,
315 
316 	DEEP_WATER_TRED,
317 	DEEP_WATER_SWIM,
318 	DEEP_WATER_HIT,
319 	DEEP_WATER_DIE,
320 	DEEP_WATER_DIE_STOPPING,
321 	DEEP_WATER_DIE_STOP,
322 
323 	LOW_TO_DEEP_WATER,
324 	DEEP_TO_LOW_WATER,
325 
326 	GOTO_SLEEP,
327 	SLEEPING,
328 	WKAEUP_FROM_SLEEP,
329 
330 	FIRE_LOW_STAND,
331 	FIRE_BURST_LOW_STAND,
332 
333 	LARVAE_BREATH,
334 	LARVAE_HIT,
335 	LARVAE_DIE,
336 	LARVAE_DIE_STOP,
337 	LARVAE_WALK,
338 
339 	INFANT_HIT,
340 	INFANT_DIE,
341 	INFANT_DIE_STOP,
342 	INFANT_ATTACK,
343 	INFANT_BEGIN_EATTING_FLESH,
344 	INFANT_EATTING_FLESH,
345 	INFANT_END_EATTING_FLESH,
346 
347 	MONSTER_UP,
348 	MONSTER_JUMP,
349 
350 	STANDING_SHOOT_UNJAM,
351 	CROUCH_SHOOT_UNJAM,
352 	PRONE_SHOOT_UNJAM,
353 	STANDING_SHOOT_DWEL_UNJAM,
354 	STANDING_SHOOT_LOW_UNJAM,
355 
356 	READY_DUAL_CROUCH,
357 	AIM_DUAL_CROUCH,
358 	SHOOT_DUAL_CROUCH,
359 	END_DUAL_CROUCH,
360 	CROUCH_SHOOT_DWEL_UNJAM,
361 
362 	ADJACENT_GET_ITEM,
363 
364 	CUTTING_FENCE,
365 
366 	CRIPPLE_BEG,
367 	CRIPPLE_HIT,
368 	CRIPPLE_DIE,
369 	CRIPPLE_DIE_STOP,
370 	CRIPPLE_DIE_FLYBACK,
371 	CRIPPLE_DIE_FLYBACK_STOP,
372 	CRIPPLE_KICKOUT,
373 
374 	FROM_INJURED_TRANSITION,
375 
376 	THROW_KNIFE,
377 	KNIFE_BREATH,
378 	KNIFE_GOTOBREATH,
379 	KNIFE_ENDBREATH,
380 
381 	ROBOTNW_HIT,
382 	ROBOTNW_DIE,
383 	ROBOTNW_DIE_STOP,
384 
385 	CATCH_STANDING,
386 	CATCH_CROUCHED,
387 
388 	PLANT_BOMB,
389 	USE_REMOTE,
390 
391 	START_COWER,
392 	COWERING,
393 	END_COWER,
394 
395 	STEAL_ITEM,
396 
397 	SHOOT_ROCKET,
398 
399 	CIV_DIE2,
400 
401 	SHOOT_MORTAR,
402 
403 	CROW_DIE,
404 
405 	SIDE_STEP,
406 	WALK_BACKWARDS,
407 	BEGIN_OPENSTRUCT,
408 	END_OPENSTRUCT,
409 	END_OPENSTRUCT_LOCKED,
410 
411 	PUNCH_LOW,
412 	PISTOL_SHOOT_LOW,
413 
414 	DECAPITATE,
415 
416 	BLOODCAT_BITE_ANIM,
417 
418 	BIGMERC_IDLE_NECK,
419 	BIGMERC_CROUCH_TRANS_INTO,
420 	BIGMERC_CROUCH_TRANS_OUTOF,
421 
422 	GOTO_PATIENT,
423 	BEING_PATIENT,
424 	GOTO_DOCTOR,
425 	BEING_DOCTOR,
426 	END_DOCTOR,
427 	GOTO_REPAIRMAN,
428 	BEING_REPAIRMAN,
429 	END_REPAIRMAN,
430 
431 	FALL_INTO_PIT,
432 
433 	ROBOT_WALK,
434 	ROBOT_SHOOT,
435 
436 	QUEEN_HIT,
437 	QUEEN_DIE,
438 	QUEEN_DIE_STOP,
439 	QUEEN_INTO_READY,
440 	QUEEN_READY,
441 	QUEEN_END_READY,
442 	QUEEN_CALL,
443 	QUEEN_SPIT,
444 	QUEEN_SWIPE,
445 
446 	RELOAD_ROBOT,
447 
448 	END_CATCH,
449 	END_CROUCH_CATCH,
450 
451 	AI_RADIO,
452 	AI_CR_RADIO,
453 
454 	TANK_SHOOT,
455 	TANK_BURST,
456 
457 	QUEEN_SLAP,
458 	SLAP_HIT,
459 
460 	TAKE_BLOOD_FROM_CORPSE,
461 
462 	VEHICLE_DIE,
463 
464 	QUEEN_FRUSTRATED_SLAP,
465 
466 	CHARIOTS_OF_FIRE,
467 
468 	AI_PULL_SWITCH,
469 
470 	MONSTER_MELT,
471 
472 	MERC_HURT_IDLE_ANIM,
473 	END_HURT_WALKING,
474 
475 	PASS_OBJECT,
476 	DROP_ADJACENT_OBJECT,
477 
478 	READY_DUAL_PRONE,
479 	AIM_DUAL_PRONE,
480 	SHOOT_DUAL_PRONE,
481 	END_DUAL_PRONE,
482 	PRONE_SHOOT_DWEL_UNJAM,
483 
484 	PICK_LOCK,
485 
486 	OPEN_DOOR_CROUCHED,
487 	BEGIN_OPENSTRUCT_CROUCHED,
488 	CLOSE_DOOR_CROUCHED,
489 	OPEN_STRUCT_CROUCHED,
490 	END_OPEN_DOOR_CROUCHED,
491 	END_OPENSTRUCT_CROUCHED,
492 	END_OPEN_LOCKED_DOOR_CROUCHED,
493 	END_OPENSTRUCT_LOCKED_CROUCHED,
494 
495 	DRUNK_IDLE,
496 	CROWBAR_ATTACK,
497 
498 	CIV_COWER_HIT,
499 	BLOODCAT_WALK_BACKWARDS,
500 	MONSTER_WALK_BACKWARDS,
501 	KID_SKIPPING,
502 	ROBOT_BURST_SHOOT,
503 	ATTACH_CAN_TO_STRING,
504 	SWAT_BACKWARDS,
505 	JUMP_OVER_BLOCKING_PERSON,
506 	REFUEL_VEHICLE,
507 	ROBOT_CAMERA_NOT_MOVING,
508 	CRIPPLE_OPEN_DOOR,
509 	CRIPPLE_CLOSE_DOOR,
510 	CRIPPLE_END_OPEN_DOOR,
511 	CRIPPLE_END_OPEN_LOCKED_DOOR,
512 	LOCKPICK_CROUCHED,
513 
514 	NUMANIMATIONSTATES
515 };
516 
517 
518 extern UINT16                gusAnimInst[MAX_ANIMATIONS][MAX_FRAMES_PER_ANIM];
519 extern const ANIMCONTROLTYPE gAnimControl[NUMANIMATIONSTATES];
520 
521 extern const ANI_SPEED_DEF gubAnimWalkSpeeds[];
522 extern const ANI_SPEED_DEF gubAnimRunSpeeds[];
523 extern const ANI_SPEED_DEF gubAnimSwatSpeeds[];
524 extern const ANI_SPEED_DEF gubAnimCrawlSpeeds[];
525 
526 
527 // OK, this array contains definitions for random animations based on
528 // bodytype, total # allowed, and what is in their hand....
529 extern RANDOM_ANI_DEF gRandomAnimDefs[][MAX_RANDOM_ANIMS_PER_BODYTYPE];
530 
531 // Corpse Defines
532 extern UINT16 gubAnimSurfaceCorpseID[][NUMANIMATIONSTATES];
533 
534 
535 void LoadAnimationStateInstructions(void);
536 void InitAnimationSurfacesPerBodytype(void);
537 bool IsAnimationValidForBodyType(SOLDIERTYPE const&, UINT16 new_state);
538 UINT16 SubstituteBodyTypeAnimation(const SOLDIERTYPE* s, UINT16 anim_state);
539 char const* GetBodyTypePaletteSubstitution(SOLDIERTYPE const*, UINT8 ubBodyType);
540 
541 BOOLEAN SetSoldierAnimationSurface( SOLDIERTYPE *pSoldier, UINT16 usAnimState );
542 UINT16 DetermineSoldierAnimationSurface(const SOLDIERTYPE* pSoldier, UINT16 usAnimState);
543 UINT16 LoadSoldierAnimationSurface(SOLDIERTYPE&, UINT16 anim_state);
544 
545 // This function could be wrapped in a debug marco, since it only returns pSoldier->ubAnimSurface but
546 // Also does some debug checking
547 UINT16 GetSoldierAnimationSurface(SOLDIERTYPE const*);
548 
549 #endif
550