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