New ammotype: cryo ammo deals no damage, but freezes a soldier for two turns (stackable effect). A frozen soldier cannot perform actions, and has drastically lowered damage resistance. For more info, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=22926&start=0&

Requires GameDir >= r2284.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8034 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2016-01-24 22:54:13 +00:00
parent a9778435dd
commit 811f18009f
21 changed files with 360 additions and 185 deletions
+9 -9
View File
@@ -15,9 +15,9 @@
#ifdef JA2EDITOR #ifdef JA2EDITOR
#ifdef JA2UB #ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8034 (Development Build)" };
#else #else
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8034 (Development Build)" };
#endif #endif
// ------------------------------ // ------------------------------
@@ -27,11 +27,11 @@
//DEBUG BUILD VERSION //DEBUG BUILD VERSION
#ifdef JA2UB #ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8034 (Development Build)" };
#elif defined (JA113DEMO) #elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8034 (Development Build)" };
#else #else
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8034 (Development Build)" };
#endif #endif
#elif defined CRIPPLED_VERSION #elif defined CRIPPLED_VERSION
@@ -46,16 +46,16 @@
//RELEASE BUILD VERSION //RELEASE BUILD VERSION
#ifdef JA2UB #ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8034 (Development Build)" };
#elif defined (JA113DEMO) #elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8034 (Development Build)" };
#else #else
CHAR16 zVersionLabel[256] = { L"Release v1.13.8013 (Development Build)" }; CHAR16 zVersionLabel[256] = { L"Release v1.13.8034 (Development Build)" };
#endif #endif
#endif #endif
CHAR8 czVersionNumber[16] = { "Build 16.01.09" }; //YY.MM.DD CHAR8 czVersionNumber[16] = { "Build 16.01.24" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" }; CHAR16 zTrackingNumber[16] = { L"Z" };
// SAVE_GAME_VERSION is defined in header, change it there // SAVE_GAME_VERSION is defined in header, change it there
+99 -13
View File
@@ -97,6 +97,9 @@ static UINT16 FOCUSED_HTH_KICK_AnimationScript[MAX_FRAMES_PER_ANIM] = { 757,1,1,
//static UINT16 LONG_JUMP_AnimationScript[MAX_FRAMES_PER_ANIM] = { 1,2,3,703,4,5,6,6,7,8,9,10,11,704,12,13,14,501,999,0,0,0,0 }; //static UINT16 LONG_JUMP_AnimationScript[MAX_FRAMES_PER_ANIM] = { 1,2,3,703,4,5,6,6,7,8,9,10,11,704,12,13,14,501,999,0,0,0,0 };
static UINT16 LONG_JUMP_AnimationScript[MAX_FRAMES_PER_ANIM] = { 2,703,3,4,5,6,6,7,7,8,704,9,501,999,0,0,0,0 }; static UINT16 LONG_JUMP_AnimationScript[MAX_FRAMES_PER_ANIM] = { 2,703,3,4,5,6,6,7,7,8,704,9,501,999,0,0,0,0 };
static UINT16 CRYO_DEATH_AnimationScript[MAX_FRAMES_PER_ANIM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 465, 440, 497, 442, 0, 0, 0, 0};
static UINT16 CRYO_DEATH_CROUCHED_AnimationScript[MAX_FRAMES_PER_ANIM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 465, 440, 497, 442, 0, 0, 0, 0};
ANI_SPEED_DEF gubAnimCrawlSpeeds[ TOTALBODYTYPES ]; ANI_SPEED_DEF gubAnimCrawlSpeeds[ TOTALBODYTYPES ];
//Block for anim file //Block for anim file
UINT16 gusAnimInst[ MAX_ANIMATIONS ][ MAX_FRAMES_PER_ANIM ]; UINT16 gusAnimInst[ MAX_ANIMATIONS ][ MAX_FRAMES_PER_ANIM ];
@@ -1075,7 +1078,12 @@ ANIMCONTROLTYPE gAnimControl[ NUMANIMATIONSTATES ] =
{"FOCUSED HTH KICK" , 0, 40, (FLOAT)0, ANIM_STATIONARY | ANIM_TURNING | ANIM_NONINTERRUPT | ANIM_MODERATE_EFFORT | ANIM_NOCHANGE_WEAPON | ANIM_NORESTART | ANIM_ATTACK, ANIM_STAND, ANIM_STAND, -1}, {"FOCUSED HTH KICK" , 0, 40, (FLOAT)0, ANIM_STATIONARY | ANIM_TURNING | ANIM_NONINTERRUPT | ANIM_MODERATE_EFFORT | ANIM_NOCHANGE_WEAPON | ANIM_NORESTART | ANIM_ATTACK, ANIM_STAND, ANIM_STAND, -1},
// LONG JUMP // LONG JUMP
"LONG JUMP" , 0, 100, (FLOAT)3.4, ANIM_SPECIALMOVE | ANIM_NORESTART | ANIM_LOWER_WEAPON | ANIM_MODERATE_EFFORT | ANIM_TURNING, ANIM_STAND, ANIM_STAND, -1, {"LONG JUMP" , 0, 100, (FLOAT)3.4, ANIM_SPECIALMOVE | ANIM_NORESTART | ANIM_LOWER_WEAPON | ANIM_MODERATE_EFFORT | ANIM_TURNING, ANIM_STAND, ANIM_STAND, -1},
// CRYO_DEATH
{"CRYO_DEATH", 0, 150, (FLOAT)0, ANIM_STATIONARY | ANIM_NOMOVE_MARKER | ANIM_NO_EFFORT | ANIM_NONINTERRUPT | ANIM_NOCHANGE_WEAPON | ANIM_IGNORE_AUTOSTANCE | ANIM_ATTACK, ANIM_STAND, ANIM_STAND, -1},
// CRYO_DEATH_CROUCHED
{"CRYO_DEATH_CROUCHED", 0, 150, (FLOAT)0, ANIM_STATIONARY | ANIM_NOMOVE_MARKER | ANIM_NO_EFFORT | ANIM_NONINTERRUPT | ANIM_NOCHANGE_WEAPON | ANIM_IGNORE_AUTOSTANCE | ANIM_ATTACK, ANIM_CROUCH, ANIM_CROUCH, -1},
}; };
@@ -1519,6 +1527,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ REGMALE ][ FOCUSED_HTH_KICK ] = RGMKICKDOOR; gubAnimSurfaceIndex[ REGMALE ][ FOCUSED_HTH_KICK ] = RGMKICKDOOR;
gubAnimSurfaceIndex[ REGMALE ][ LONG_JUMP ] = RGMJUMPOVER; gubAnimSurfaceIndex[ REGMALE ][ LONG_JUMP ] = RGMJUMPOVER;
gubAnimSurfaceIndex[ REGMALE ][ CRYO_DEATH ] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ REGMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceMidWaterSubIndex[ REGMALE ][ STANDING][0] = RGMWATER_R_STD; gubAnimSurfaceMidWaterSubIndex[ REGMALE ][ STANDING][0] = RGMWATER_R_STD;
gubAnimSurfaceMidWaterSubIndex[ REGMALE ][ WALKING ][0] = RGMWATER_R_WALK; gubAnimSurfaceMidWaterSubIndex[ REGMALE ][ WALKING ][0] = RGMWATER_R_WALK;
@@ -1680,6 +1690,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceCorpseID[ REGMALE ][ PRONE_LAYFROMHIT_STOP ] = SMERC_PRN; gubAnimSurfaceCorpseID[ REGMALE ][ PRONE_LAYFROMHIT_STOP ] = SMERC_PRN;
gubAnimSurfaceCorpseID[ REGMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD; gubAnimSurfaceCorpseID[ REGMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD;
gubAnimSurfaceCorpseID[ REGMALE ][ BODYEXPLODING ] = EXPLODE_DEAD; gubAnimSurfaceCorpseID[ REGMALE ][ BODYEXPLODING ] = EXPLODE_DEAD;
gubAnimSurfaceCorpseID[ REGMALE ][ CRYO_DEATH ] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ REGMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_CORPSE;
// BIG MALE GUY // BIG MALE GUY
@@ -1958,7 +1970,9 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ BIGMALE ][ HTH_KICK ] = BGMKICKDOOR; gubAnimSurfaceIndex[ BIGMALE ][ HTH_KICK ] = BGMKICKDOOR;
gubAnimSurfaceIndex[ BIGMALE ][ FOCUSED_HTH_KICK ] = BGMKICKDOOR; gubAnimSurfaceIndex[ BIGMALE ][ FOCUSED_HTH_KICK ] = BGMKICKDOOR;
gubAnimSurfaceIndex[ BIGMALE ][ LONG_JUMP ] = BGMJUMPOVER; gubAnimSurfaceIndex[ BIGMALE ][ LONG_JUMP ] = BGMJUMPOVER;
gubAnimSurfaceIndex[ BIGMALE ][ CRYO_DEATH ] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ BIGMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceItemSubIndex[ BIGMALE ][ STANDING ] = BGMPISTOLBREATH; gubAnimSurfaceItemSubIndex[ BIGMALE ][ STANDING ] = BGMPISTOLBREATH;
gubAnimSurfaceItemSubIndex[ BIGMALE ][ WALKING ] = BGMNOTHING_WALK; gubAnimSurfaceItemSubIndex[ BIGMALE ][ WALKING ] = BGMNOTHING_WALK;
@@ -2141,6 +2155,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceCorpseID[ BIGMALE ][ PRONE_LAYFROMHIT_STOP ] = MMERC_PRN; gubAnimSurfaceCorpseID[ BIGMALE ][ PRONE_LAYFROMHIT_STOP ] = MMERC_PRN;
gubAnimSurfaceCorpseID[ BIGMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD; gubAnimSurfaceCorpseID[ BIGMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD;
gubAnimSurfaceCorpseID[ BIGMALE ][ BODYEXPLODING ] = EXPLODE_DEAD; gubAnimSurfaceCorpseID[ BIGMALE ][ BODYEXPLODING ] = EXPLODE_DEAD;
gubAnimSurfaceCorpseID[ BIGMALE ][ CRYO_DEATH ] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ BIGMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_CORPSE;
// STOCKY MALE GUY // STOCKY MALE GUY
@@ -2420,6 +2436,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ STOCKYMALE ][ FOCUSED_HTH_KICK ] = RGMKICKDOOR; gubAnimSurfaceIndex[ STOCKYMALE ][ FOCUSED_HTH_KICK ] = RGMKICKDOOR;
gubAnimSurfaceIndex[ STOCKYMALE ][ LONG_JUMP ] = RGMJUMPOVER; gubAnimSurfaceIndex[ STOCKYMALE ][ LONG_JUMP ] = RGMJUMPOVER;
gubAnimSurfaceIndex[ STOCKYMALE ][ CRYO_DEATH ] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ STOCKYMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceItemSubIndex[ STOCKYMALE ][ STANDING ] = RGMPISTOLBREATH; gubAnimSurfaceItemSubIndex[ STOCKYMALE ][ STANDING ] = RGMPISTOLBREATH;
gubAnimSurfaceItemSubIndex[ STOCKYMALE ][ WALKING ] = RGMNOTHING_WALK; gubAnimSurfaceItemSubIndex[ STOCKYMALE ][ WALKING ] = RGMNOTHING_WALK;
@@ -2538,6 +2556,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceCorpseID[ STOCKYMALE ][ PRONE_LAYFROMHIT_STOP ] = SMERC_PRN; gubAnimSurfaceCorpseID[ STOCKYMALE ][ PRONE_LAYFROMHIT_STOP ] = SMERC_PRN;
gubAnimSurfaceCorpseID[ STOCKYMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD; gubAnimSurfaceCorpseID[ STOCKYMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD;
gubAnimSurfaceCorpseID[ STOCKYMALE ][ BODYEXPLODING ] = EXPLODE_DEAD; gubAnimSurfaceCorpseID[ STOCKYMALE ][ BODYEXPLODING ] = EXPLODE_DEAD;
gubAnimSurfaceCorpseID[ STOCKYMALE ][ CRYO_DEATH ] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ STOCKYMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_CORPSE;
//Setup some random stuff //Setup some random stuff
@@ -2854,6 +2874,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ REGFEMALE ][ FOCUSED_HTH_KICK ] = RGFKICKDOOR; gubAnimSurfaceIndex[ REGFEMALE ][ FOCUSED_HTH_KICK ] = RGFKICKDOOR;
gubAnimSurfaceIndex[ REGFEMALE ][ LONG_JUMP ] = RGFJUMPOVER; gubAnimSurfaceIndex[ REGFEMALE ][ LONG_JUMP ] = RGFJUMPOVER;
gubAnimSurfaceIndex[ REGFEMALE ][ CRYO_DEATH ] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ REGFEMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceItemSubIndex[ REGFEMALE ][ STANDING ] = RGFPISTOLBREATH; gubAnimSurfaceItemSubIndex[ REGFEMALE ][ STANDING ] = RGFPISTOLBREATH;
gubAnimSurfaceItemSubIndex[ REGFEMALE ][ WALKING ] = RGFNOTHING_WALK; gubAnimSurfaceItemSubIndex[ REGFEMALE ][ WALKING ] = RGFNOTHING_WALK;
@@ -2970,6 +2992,8 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceCorpseID[ REGFEMALE ][ PRONE_LAYFROMHIT_STOP ] = FMERC_PRN; gubAnimSurfaceCorpseID[ REGFEMALE ][ PRONE_LAYFROMHIT_STOP ] = FMERC_PRN;
gubAnimSurfaceCorpseID[ REGFEMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD; gubAnimSurfaceCorpseID[ REGFEMALE ][ CHARIOTS_OF_FIRE ] = BURNT_DEAD;
gubAnimSurfaceCorpseID[ REGFEMALE ][ BODYEXPLODING ] = EXPLODE_DEAD; gubAnimSurfaceCorpseID[ REGFEMALE ][ BODYEXPLODING ] = EXPLODE_DEAD;
gubAnimSurfaceCorpseID[ REGFEMALE ][ CRYO_DEATH ] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ REGFEMALE ][ CRYO_DEATH_CROUCHED ] = CRYO_CORPSE;
//Setup some random stuff //Setup some random stuff
@@ -3036,8 +3060,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_JUMP ] = AFMJUMP; gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_JUMP ] = AFMJUMP;
gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_MELT ] = AFMMELT; gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_MELT ] = AFMMELT;
gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING; gubAnimSurfaceIndex[ ADULTFEMALEMONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING;
gubAnimSurfaceIndex[ADULTFEMALEMONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ADULTFEMALEMONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ ADULTFEMALEMONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD; gubAnimSurfaceCorpseID[ ADULTFEMALEMONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD;
gubAnimSurfaceCorpseID[ADULTFEMALEMONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ADULTFEMALEMONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// Adult male // Adult male
gubAnimSurfaceIndex[ AM_MONSTER ][ STANDING ] = AFMONSTERSTANDING; gubAnimSurfaceIndex[ AM_MONSTER ][ STANDING ] = AFMONSTERSTANDING;
@@ -3058,8 +3086,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_JUMP ] = AFMJUMP; gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_JUMP ] = AFMJUMP;
gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_MELT ] = AFMMELT; gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_MELT ] = AFMMELT;
gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING; gubAnimSurfaceIndex[ AM_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING;
gubAnimSurfaceIndex[AM_MONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[AM_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ AM_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD; gubAnimSurfaceCorpseID[ AM_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD;
gubAnimSurfaceCorpseID[AM_MONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[AM_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// Young adult female // Young adult female
gubAnimSurfaceIndex[ YAF_MONSTER ][ STANDING ] = AFMONSTERSTANDING; gubAnimSurfaceIndex[ YAF_MONSTER ][ STANDING ] = AFMONSTERSTANDING;
@@ -3080,8 +3112,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_JUMP ] = AFMJUMP; gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_JUMP ] = AFMJUMP;
gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_MELT] = AFMMELT; gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_MELT] = AFMMELT;
gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING; gubAnimSurfaceIndex[ YAF_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING;
gubAnimSurfaceIndex[YAF_MONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[YAF_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ YAF_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD; gubAnimSurfaceCorpseID[ YAF_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD;
gubAnimSurfaceCorpseID[YAF_MONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[YAF_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// Young adult male // Young adult male
@@ -3103,17 +3139,24 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_JUMP ] = AFMJUMP; gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_JUMP ] = AFMJUMP;
gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_MELT ] = AFMMELT; gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_MELT ] = AFMMELT;
gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING; gubAnimSurfaceIndex[ YAM_MONSTER ][ MONSTER_WALK_BACKWARDS ] = AFMONSTERWALKING;
gubAnimSurfaceIndex[YAM_MONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[YAM_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ YAM_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD; gubAnimSurfaceCorpseID[ YAM_MONSTER ][ MONSTER_MELT ] = ADULTMONSTER_DEAD;
gubAnimSurfaceCorpseID[YAM_MONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[YAM_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_BREATH ] = LVBREATH; gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_BREATH ] = LVBREATH;
gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_HIT ] = LVDIE; gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_HIT ] = LVDIE;
gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_DIE ] = LVDIE; gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_DIE ] = LVDIE;
gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_DIE_STOP ] = LVDIE; gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_DIE_STOP ] = LVDIE;
gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_WALK ] = LVWALK; gubAnimSurfaceIndex[ LARVAE_MONSTER ][ LARVAE_WALK ] = LVWALK;
gubAnimSurfaceIndex[LARVAE_MONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[LARVAE_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ LARVAE_MONSTER ][ LARVAE_DIE ] = LARVAEMONSTER_DEAD; gubAnimSurfaceCorpseID[ LARVAE_MONSTER ][ LARVAE_DIE ] = LARVAEMONSTER_DEAD;
gubAnimSurfaceCorpseID[LARVAE_MONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[LARVAE_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gubAnimSurfaceIndex[ INFANT_MONSTER ][ STANDING ] = IBREATH; gubAnimSurfaceIndex[ INFANT_MONSTER ][ STANDING ] = IBREATH;
gubAnimSurfaceIndex[ INFANT_MONSTER ][ RUNNING ] = IWALK; gubAnimSurfaceIndex[ INFANT_MONSTER ][ RUNNING ] = IWALK;
@@ -3126,9 +3169,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ INFANT_MONSTER ][ INFANT_EATTING_FLESH ] = IEAT; gubAnimSurfaceIndex[ INFANT_MONSTER ][ INFANT_EATTING_FLESH ] = IEAT;
gubAnimSurfaceIndex[ INFANT_MONSTER ][ INFANT_END_EATTING_FLESH ] = IEAT; gubAnimSurfaceIndex[ INFANT_MONSTER ][ INFANT_END_EATTING_FLESH ] = IEAT;
gubAnimSurfaceIndex[ INFANT_MONSTER ][ WALK_BACKWARDS ] = IWALK; gubAnimSurfaceIndex[ INFANT_MONSTER ][ WALK_BACKWARDS ] = IWALK;
gubAnimSurfaceIndex[INFANT_MONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[INFANT_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ INFANT_MONSTER ][ INFANT_DIE ] = INFANTMONSTER_DEAD; gubAnimSurfaceCorpseID[ INFANT_MONSTER ][ INFANT_DIE ] = INFANTMONSTER_DEAD;
gubAnimSurfaceCorpseID[INFANT_MONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[INFANT_MONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_MONSTER_BREATHING ] = QUEENMONSTERSTANDING; gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_MONSTER_BREATHING ] = QUEENMONSTERSTANDING;
@@ -3141,9 +3187,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_END_READY ] = QUEENMONSTERREADY; gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_END_READY ] = QUEENMONSTERREADY;
gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_SPIT ] = QUEENMONSTERSPIT_SW; gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_SPIT ] = QUEENMONSTERSPIT_SW;
gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_SWIPE ] = QUEENMONSTERSWIPE; gubAnimSurfaceIndex[ QUEENMONSTER ][ QUEEN_SWIPE ] = QUEENMONSTERSWIPE;
gubAnimSurfaceIndex[QUEENMONSTER][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[QUEENMONSTER][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ QUEENMONSTER ][ QUEEN_DIE ] = QUEEN_MONSTER_DEAD; gubAnimSurfaceCorpseID[ QUEENMONSTER ][ QUEEN_DIE ] = QUEEN_MONSTER_DEAD;
gubAnimSurfaceCorpseID[QUEENMONSTER][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[QUEENMONSTER][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
////// //////
// FAT GUY // FAT GUY
@@ -3172,9 +3221,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ FATCIV ][ END_COWER ] = FATMANCOWER; gubAnimSurfaceIndex[ FATCIV ][ END_COWER ] = FATMANCOWER;
gubAnimSurfaceIndex[ FATCIV ][ CIV_DIE2 ] = FATMANDIE2; gubAnimSurfaceIndex[ FATCIV ][ CIV_DIE2 ] = FATMANDIE2;
gubAnimSurfaceIndex[ FATCIV ][ CIV_COWER_HIT ] = FATMANCOWERHIT; gubAnimSurfaceIndex[ FATCIV ][ CIV_COWER_HIT ] = FATMANCOWERHIT;
gubAnimSurfaceIndex[FATCIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[FATCIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ FATCIV ][ GENERIC_HIT_DEATH ] = FT_DEAD1; gubAnimSurfaceCorpseID[ FATCIV ][ GENERIC_HIT_DEATH ] = FT_DEAD1;
gubAnimSurfaceCorpseID[ FATCIV ][ CIV_DIE2 ] = FT_DEAD2; gubAnimSurfaceCorpseID[ FATCIV ][ CIV_DIE2 ] = FT_DEAD2;
gubAnimSurfaceCorpseID[FATCIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[FATCIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ FATCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ FATCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ FATCIV ][ 0 ].sAnimID = FATCIV_ASS_SCRATCH; gRandomAnimDefs[ FATCIV ][ 0 ].sAnimID = FATCIV_ASS_SCRATCH;
@@ -3215,11 +3268,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ MANCIV ][ END_OPENSTRUCT ] = MANCIVACT; gubAnimSurfaceIndex[ MANCIV ][ END_OPENSTRUCT ] = MANCIVACT;
gubAnimSurfaceIndex[ MANCIV ][ END_OPENSTRUCT_LOCKED ] = MANCIVACT; gubAnimSurfaceIndex[ MANCIV ][ END_OPENSTRUCT_LOCKED ] = MANCIVACT;
gubAnimSurfaceIndex[ MANCIV ][ CIV_COWER_HIT ] = MANCIVCOWERHIT; gubAnimSurfaceIndex[ MANCIV ][ CIV_COWER_HIT ] = MANCIVCOWERHIT;
gubAnimSurfaceIndex[MANCIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[MANCIV ][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ MANCIV ][ GENERIC_HIT_DEATH ] = M_DEAD1; gubAnimSurfaceCorpseID[ MANCIV ][ GENERIC_HIT_DEATH ] = M_DEAD1;
gubAnimSurfaceCorpseID[ MANCIV ][ CIV_DIE2 ] = M_DEAD2; gubAnimSurfaceCorpseID[ MANCIV ][ CIV_DIE2 ] = M_DEAD2;
gubAnimSurfaceCorpseID[MANCIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[MANCIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// mini skirt civ // mini skirt civ
gubAnimSurfaceIndex[ MINICIV ][ STANDING ] = MINICIVSTANDING; gubAnimSurfaceIndex[ MINICIV ][ STANDING ] = MINICIVSTANDING;
@@ -3247,10 +3302,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ MINICIV ][ END_COWER ] = MINICOWER; gubAnimSurfaceIndex[ MINICIV ][ END_COWER ] = MINICOWER;
gubAnimSurfaceIndex[ MINICIV ][ CIV_DIE2 ] = MINIDIE2; gubAnimSurfaceIndex[ MINICIV ][ CIV_DIE2 ] = MINIDIE2;
gubAnimSurfaceIndex[ MINICIV ][ CIV_COWER_HIT ] = MINICOWERHIT; gubAnimSurfaceIndex[ MINICIV ][ CIV_COWER_HIT ] = MINICOWERHIT;
gubAnimSurfaceIndex[MINICIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[MINICIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ MINICIV ][ GENERIC_HIT_DEATH ] = S_DEAD1; gubAnimSurfaceCorpseID[ MINICIV ][ GENERIC_HIT_DEATH ] = S_DEAD1;
gubAnimSurfaceCorpseID[ MINICIV ][ CIV_DIE2 ] = S_DEAD2; gubAnimSurfaceCorpseID[ MINICIV ][ CIV_DIE2 ] = S_DEAD2;
gubAnimSurfaceCorpseID[MINICIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[MINICIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ MINICIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ MINICIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ MINICIV ][ 0 ].sAnimID = MINIGIRL_STOCKING; gRandomAnimDefs[ MINICIV ][ 0 ].sAnimID = MINIGIRL_STOCKING;
@@ -3285,9 +3343,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ DRESSCIV ][ END_COWER ] = DRESSCIVCOWER; gubAnimSurfaceIndex[ DRESSCIV ][ END_COWER ] = DRESSCIVCOWER;
gubAnimSurfaceIndex[ DRESSCIV ][ CIV_DIE2 ] = DRESSCIVDIE2; gubAnimSurfaceIndex[ DRESSCIV ][ CIV_DIE2 ] = DRESSCIVDIE2;
gubAnimSurfaceIndex[ DRESSCIV ][ CIV_COWER_HIT ] = DRESSCIVCOWERHIT; gubAnimSurfaceIndex[ DRESSCIV ][ CIV_COWER_HIT ] = DRESSCIVCOWERHIT;
gubAnimSurfaceIndex[DRESSCIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[DRESSCIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ DRESSCIV ][ GENERIC_HIT_DEATH ] = W_DEAD1; gubAnimSurfaceCorpseID[ DRESSCIV ][ GENERIC_HIT_DEATH ] = W_DEAD1;
gubAnimSurfaceCorpseID[ DRESSCIV ][ CIV_DIE2 ] = W_DEAD2; gubAnimSurfaceCorpseID[ DRESSCIV ][ CIV_DIE2 ] = W_DEAD2;
gubAnimSurfaceCorpseID[DRESSCIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[DRESSCIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// HATKID civ // HATKID civ
gubAnimSurfaceIndex[ HATKIDCIV ][ STANDING ] = HATKIDCIVSTANDING; gubAnimSurfaceIndex[ HATKIDCIV ][ STANDING ] = HATKIDCIVSTANDING;
@@ -3319,10 +3381,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ HATKIDCIV ][ CIV_DIE2 ] = HATKIDCIVDIE2; gubAnimSurfaceIndex[ HATKIDCIV ][ CIV_DIE2 ] = HATKIDCIVDIE2;
gubAnimSurfaceIndex[ HATKIDCIV ][ CIV_COWER_HIT ] = HATKIDCIVCOWERHIT; gubAnimSurfaceIndex[ HATKIDCIV ][ CIV_COWER_HIT ] = HATKIDCIVCOWERHIT;
gubAnimSurfaceIndex[ HATKIDCIV ][ KID_SKIPPING ] = HATKIDCIVSKIP; gubAnimSurfaceIndex[ HATKIDCIV ][ KID_SKIPPING ] = HATKIDCIVSKIP;
gubAnimSurfaceIndex[HATKIDCIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[HATKIDCIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ HATKIDCIV ][ GENERIC_HIT_DEATH ] = H_DEAD1; gubAnimSurfaceCorpseID[ HATKIDCIV ][ GENERIC_HIT_DEATH ] = H_DEAD1;
gubAnimSurfaceCorpseID[ HATKIDCIV ][ CIV_DIE2 ] = H_DEAD2; gubAnimSurfaceCorpseID[ HATKIDCIV ][ CIV_DIE2 ] = H_DEAD2;
gubAnimSurfaceCorpseID[HATKIDCIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[HATKIDCIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ HATKIDCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ HATKIDCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ HATKIDCIV ][ 0 ].sAnimID = HATKID_YOYO; gRandomAnimDefs[ HATKIDCIV ][ 0 ].sAnimID = HATKID_YOYO;
@@ -3362,10 +3427,13 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ KIDCIV ][ CIV_DIE2 ] = KIDCIVDIE2; gubAnimSurfaceIndex[ KIDCIV ][ CIV_DIE2 ] = KIDCIVDIE2;
gubAnimSurfaceIndex[ KIDCIV ][ CIV_COWER_HIT ] = KIDCIVCOWERHIT; gubAnimSurfaceIndex[ KIDCIV ][ CIV_COWER_HIT ] = KIDCIVCOWERHIT;
gubAnimSurfaceIndex[ KIDCIV ][ KID_SKIPPING ] = KIDCIVSKIP; gubAnimSurfaceIndex[ KIDCIV ][ KID_SKIPPING ] = KIDCIVSKIP;
gubAnimSurfaceIndex[KIDCIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[KIDCIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ KIDCIV ][ GENERIC_HIT_DEATH ] = K_DEAD1; gubAnimSurfaceCorpseID[ KIDCIV ][ GENERIC_HIT_DEATH ] = K_DEAD1;
gubAnimSurfaceCorpseID[ KIDCIV ][ CIV_DIE2 ] = K_DEAD2; gubAnimSurfaceCorpseID[ KIDCIV ][ CIV_DIE2 ] = K_DEAD2;
gubAnimSurfaceCorpseID[KIDCIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[KIDCIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ KIDCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ KIDCIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ KIDCIV ][ 0 ].sAnimID = KID_ARMPIT; gRandomAnimDefs[ KIDCIV ][ 0 ].sAnimID = KID_ARMPIT;
@@ -3389,8 +3457,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_CLOSE_DOOR ] = CRIPCIVBEG; gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_CLOSE_DOOR ] = CRIPCIVBEG;
gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_END_OPEN_DOOR ] = CRIPCIVBEG; gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_END_OPEN_DOOR ] = CRIPCIVBEG;
gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_END_OPEN_LOCKED_DOOR ] = CRIPCIVBEG; gubAnimSurfaceIndex[ CRIPPLECIV ][ CRIPPLE_END_OPEN_LOCKED_DOOR ] = CRIPCIVBEG;
gubAnimSurfaceIndex[CRIPPLECIV][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[CRIPPLECIV][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ CRIPPLECIV ][ CRIPPLE_DIE ] = SMERC_BCK; gubAnimSurfaceCorpseID[ CRIPPLECIV ][ CRIPPLE_DIE ] = SMERC_BCK;
gubAnimSurfaceCorpseID[CRIPPLECIV][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[CRIPPLECIV][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ CRIPPLECIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ CRIPPLECIV ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ CRIPPLECIV ][ 0 ].sAnimID = CRIPPLE_BEG; gRandomAnimDefs[ CRIPPLECIV ][ 0 ].sAnimID = CRIPPLE_BEG;
@@ -3407,9 +3479,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ COW ][ COW_HIT ] = COWDIE; gubAnimSurfaceIndex[ COW ][ COW_HIT ] = COWDIE;
gubAnimSurfaceIndex[ COW ][ COW_DYING ] = COWDIE; gubAnimSurfaceIndex[ COW ][ COW_DYING ] = COWDIE;
gubAnimSurfaceIndex[ COW ][ COW_DYING_STOP ] = COWDIE; gubAnimSurfaceIndex[ COW ][ COW_DYING_STOP ] = COWDIE;
gubAnimSurfaceIndex[COW][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[COW][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ COW ][ COW_DYING ] = COW_DEAD; gubAnimSurfaceCorpseID[ COW ][ COW_DYING ] = COW_DEAD;
gubAnimSurfaceCorpseID[COW][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[COW][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
gRandomAnimDefs[ COW ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND; gRandomAnimDefs[ COW ][ 0 ].ubHandRestriction = RANDOM_ANIM_IRRELEVENTINHAND;
gRandomAnimDefs[ COW ][ 0 ].sAnimID = COW_EATING; gRandomAnimDefs[ COW ][ 0 ].sAnimID = COW_EATING;
@@ -3476,8 +3551,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_SWIPE ] = CATSWIPE; gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_SWIPE ] = CATSWIPE;
gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_BITE_ANIM ] = CATBITE; gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_BITE_ANIM ] = CATBITE;
gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_WALK_BACKWARDS ] = CATWALK; gubAnimSurfaceIndex[ BLOODCAT ][ BLOODCAT_WALK_BACKWARDS ] = CATWALK;
gubAnimSurfaceIndex[BLOODCAT][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[BLOODCAT][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ BLOODCAT ][ BLOODCAT_DYING ] = BLOODCAT_DEAD; gubAnimSurfaceCorpseID[ BLOODCAT ][ BLOODCAT_DYING ] = BLOODCAT_DEAD;
gubAnimSurfaceCorpseID[BLOODCAT][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[BLOODCAT][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// ROBOT // ROBOT
gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ STANDING ] = ROBOTNWBREATH; gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ STANDING ] = ROBOTNWBREATH;
@@ -3489,8 +3568,12 @@ void InitAnimationSurfacesPerBodytype( )
gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_SHOOT ] = ROBOTNWSHOOT; gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_SHOOT ] = ROBOTNWSHOOT;
gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_BURST_SHOOT ] = ROBOTNWSHOOT; gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_BURST_SHOOT ] = ROBOTNWSHOOT;
gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_CAMERA_NOT_MOVING ] = ROBOTNWBREATH; gubAnimSurfaceIndex[ ROBOTNOWEAPON ][ ROBOT_CAMERA_NOT_MOVING ] = ROBOTNWBREATH;
gubAnimSurfaceCorpseID[ ROBOTNOWEAPON ][ ROBOTNW_DIE ] = ROBOT_DEAD; gubAnimSurfaceIndex[ROBOTNOWEAPON][CRYO_DEATH] = CRYO_EXPLODE;
gubAnimSurfaceIndex[ROBOTNOWEAPON][CRYO_DEATH_CROUCHED] = CRYO_EXPLODE_CROUCHED;
gubAnimSurfaceCorpseID[ ROBOTNOWEAPON ][ ROBOTNW_DIE ] = ROBOT_DEAD;
gubAnimSurfaceCorpseID[ROBOTNOWEAPON][CRYO_DEATH] = CRYO_CORPSE;
gubAnimSurfaceCorpseID[ROBOTNOWEAPON][CRYO_DEATH_CROUCHED] = CRYO_CORPSE;
// HUMVEE // HUMVEE
@@ -3656,6 +3739,9 @@ BOOLEAN LoadAnimationStateInstructions( )
memcpy(gusAnimInst[LONG_JUMP],LONG_JUMP_AnimationScript,sizeof(LONG_JUMP_AnimationScript)); memcpy(gusAnimInst[LONG_JUMP],LONG_JUMP_AnimationScript,sizeof(LONG_JUMP_AnimationScript));
memcpy( gusAnimInst[CRYO_DEATH], CRYO_DEATH_AnimationScript, sizeof(CRYO_DEATH_AnimationScript) );
memcpy( gusAnimInst[CRYO_DEATH_CROUCHED], CRYO_DEATH_CROUCHED_AnimationScript, sizeof(CRYO_DEATH_CROUCHED_AnimationScript) );
// NOTE: Careful here... keep in mind you have to increase MAX_ANIMATIONS whenever you would go over 399(currently) animation numbers // NOTE: Careful here... keep in mind you have to increase MAX_ANIMATIONS whenever you would go over 399(currently) animation numbers
return( TRUE ); return( TRUE );
@@ -3835,7 +3921,7 @@ INT8 GetBodyTypePaletteSubstitutionCode( SOLDIERTYPE *pSoldier, UINT8 ubBodyType
if ( pSoldier != NULL ) if ( pSoldier != NULL )
{ {
// Are we on fire? // Are we on fire?
if ( pSoldier->usAnimState == CHARIOTS_OF_FIRE || pSoldier->usAnimState == BODYEXPLODING ) if ( pSoldier->usAnimState == CHARIOTS_OF_FIRE || pSoldier->usAnimState == BODYEXPLODING || pSoldier->usAnimState == CRYO_DEATH || pSoldier->usAnimState == CRYO_DEATH_CROUCHED )
{ {
return( 0 ); return( 0 );
} }
+3
View File
@@ -609,6 +609,9 @@ enum AnimationStates
LONG_JUMP, LONG_JUMP,
CRYO_DEATH,
CRYO_DEATH_CROUCHED,
NUMANIMATIONSTATES NUMANIMATIONSTATES
}; };
+2
View File
@@ -313,6 +313,8 @@ AnimationSurfaceType gAnimSurfaceDatabase[ NUMANIMATIONSURFACETYPES ] =
RGFCROWBAR, "ANIMS\\F_MERC\\F_CROBAR.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGFCROWBAR, "ANIMS\\F_MERC\\F_CROBAR.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1,
RGFJUMPOVER, "ANIMS\\F_MERC\\F_N_RUN.STI", NO_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGFJUMPOVER, "ANIMS\\F_MERC\\F_N_RUN.STI", NO_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1,
CRYO_EXPLODE, "ANIMS\\S_MERC\\S_CRYO_DEATH_S.STI", S_STRUCT, 0, 1, TO_INIT, NULL, NULL, 0, -1,
CRYO_EXPLODE_CROUCHED, "ANIMS\\S_MERC\\S_CRYO_DEATH_C.STI", S_STRUCT, 0, 1, TO_INIT, NULL, NULL, 0, -1,
AFMONSTERSTANDING, "ANIMS\\MONSTERS\\MN_BREAT.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, AFMONSTERSTANDING, "ANIMS\\MONSTERS\\MN_BREAT.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1,
AFMONSTERWALKING, "ANIMS\\MONSTERS\\MN_WALK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, AFMONSTERWALKING, "ANIMS\\MONSTERS\\MN_WALK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1,
+3
View File
@@ -352,6 +352,9 @@ typedef enum
RGFCROWBAR, RGFCROWBAR,
RGFJUMPOVER, RGFJUMPOVER,
CRYO_EXPLODE,
CRYO_EXPLODE_CROUCHED,
AFMONSTERSTANDING, AFMONSTERSTANDING,
AFMONSTERWALKING, AFMONSTERWALKING,
AFMONSTERATTACK, AFMONSTERATTACK,
+20 -12
View File
@@ -1476,28 +1476,25 @@ BOOLEAN GetSnitchDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, UINT32 iData
BOOLEAN DelayedTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum ) BOOLEAN DelayedTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum )
{ {
if ( pSoldier->ubProfile == NO_PROFILE ) if ( pSoldier->ubProfile == NO_PROFILE )
{
return( FALSE ); return( FALSE );
}
if (pSoldier->stats.bLife < CONSCIOUSNESS ) if (pSoldier->stats.bLife < CONSCIOUSNESS )
return( FALSE ); return( FALSE );
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED )
return( FALSE ); return( FALSE );
if ( (AM_A_ROBOT( pSoldier )) ) if ( (AM_A_ROBOT( pSoldier )) )
{
return( FALSE ); return( FALSE );
}
if (pSoldier->stats.bLife < OKLIFE && usQuoteNum != QUOTE_SERIOUSLY_WOUNDED ) if (pSoldier->stats.bLife < OKLIFE && usQuoteNum != QUOTE_SERIOUSLY_WOUNDED )
return( FALSE ); return( FALSE );
if( pSoldier->bAssignment == ASSIGNMENT_POW ) if( pSoldier->bAssignment == ASSIGNMENT_POW )
{
return( FALSE ); return( FALSE );
}
return( CharacterDialogue( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, TRUE ) ); return( CharacterDialogue( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, TRUE ) );
} }
@@ -1513,11 +1510,13 @@ BOOLEAN TacticalCharacterDialogueWithSpecialEvent( SOLDIERTYPE *pSoldier, UINT16
if ( uiFlag != DIALOGUE_SPECIAL_EVENT_DO_BATTLE_SND && uiData1 != BATTLE_SOUND_DIE1 ) if ( uiFlag != DIALOGUE_SPECIAL_EVENT_DO_BATTLE_SND && uiData1 != BATTLE_SOUND_DIE1 )
{ {
if (pSoldier->stats.bLife < CONSCIOUSNESS ) if (pSoldier->stats.bLife < CONSCIOUSNESS )
return( FALSE ); return( FALSE );
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED )
return( FALSE ); return( FALSE );
} }
return( CharacterDialogueWithSpecialEvent( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, FALSE, uiFlag, uiData1, uiData2 ) ); return( CharacterDialogueWithSpecialEvent( pSoldier->ubProfile, usQuoteNum, pSoldier->iFaceIndex, DIALOGUE_TACTICAL_UI, TRUE, FALSE, uiFlag, uiData1, uiData2 ) );
@@ -1533,7 +1532,10 @@ BOOLEAN TacticalCharacterDialogueWithSpecialEventEx( SOLDIERTYPE *pSoldier, UINT
if ( uiFlag != DIALOGUE_SPECIAL_EVENT_DO_BATTLE_SND && uiData1 != BATTLE_SOUND_DIE1 ) if ( uiFlag != DIALOGUE_SPECIAL_EVENT_DO_BATTLE_SND && uiData1 != BATTLE_SOUND_DIE1 )
{ {
if (pSoldier->stats.bLife < CONSCIOUSNESS ) if (pSoldier->stats.bLife < CONSCIOUSNESS )
return( FALSE ); return( FALSE );
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED )
return( FALSE ); return( FALSE );
@@ -1578,7 +1580,10 @@ BOOLEAN TacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum )
} }
#endif #endif
if (pSoldier->stats.bLife < CONSCIOUSNESS ) if (pSoldier->stats.bLife < CONSCIOUSNESS )
return( FALSE ); return( FALSE );
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
if (pSoldier->stats.bLife < OKLIFE && usQuoteNum != QUOTE_SERIOUSLY_WOUNDED ) if (pSoldier->stats.bLife < OKLIFE && usQuoteNum != QUOTE_SERIOUSLY_WOUNDED )
return( FALSE ); return( FALSE );
@@ -1931,6 +1936,9 @@ BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32
return( FALSE ); return( FALSE );
} }
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED )
return( FALSE ); return( FALSE );
+55 -43
View File
@@ -1698,7 +1698,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
{ {
pSoldier = MercPtrs[ pFace->ubSoldierID ]; pSoldier = MercPtrs[ pFace->ubSoldierID ];
if ( ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife < CONSCIOUSNESS || MercPtrs[ pFace->ubSoldierID ]->flags.fDeadPanel ) ) if ( (MercPtrs[pFace->ubSoldierID]->stats.bLife < CONSCIOUSNESS || MercPtrs[pFace->ubSoldierID]->flags.fDeadPanel ) )
{ {
// Blit Closed eyes here! // Blit Closed eyes here!
BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL );
@@ -1713,6 +1713,16 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL );
} }
// Flugente: frozen soldiers are, well, frozen
if ( MercPtrs[pFace->ubSoldierID]->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{
// Blit Closed eyes here!
BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 2, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL );
// Blit hatch!
BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL );
}
if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) ) if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_DEAD ) )
{ {
// IF we are in the process of doing any deal/close animations, show face, not skill... // IF we are in the process of doing any deal/close animations, show face, not skill...
@@ -2886,51 +2896,52 @@ void HandleAutoFaces( )
pFace->fOldShowMoveHilight = FALSE; pFace->fOldShowMoveHilight = FALSE;
} }
if ( pSoldier->flags.fGettingHit && pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_STOP )
{
pSoldier->flags.fFlashPortrait = TRUE;
pSoldier->bFlashPortraitFrame = FLASH_PORTRAIT_STARTSHADE;
RESETTIMECOUNTER( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY );
fRerender = TRUE;
}
if ( pSoldier->flags.fGettingHit && pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_STOP ) if ( pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START )
{
// Loop through flash values
if ( TIMECOUNTERDONE( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY ) )
{ {
pSoldier->flags.fFlashPortrait = TRUE;
pSoldier->bFlashPortraitFrame = FLASH_PORTRAIT_STARTSHADE;
RESETTIMECOUNTER( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY ); RESETTIMECOUNTER( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY );
fRerender = TRUE; pSoldier->bFlashPortraitFrame++;
}
if ( pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START ) if ( pSoldier->bFlashPortraitFrame > FLASH_PORTRAIT_ENDSHADE )
{
// Loop through flash values
if ( TIMECOUNTERDONE( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY ) )
{ {
RESETTIMECOUNTER( pSoldier->timeCounters.PortraitFlashCounter, FLASH_PORTRAIT_DELAY ); pSoldier->bFlashPortraitFrame = FLASH_PORTRAIT_ENDSHADE;
pSoldier->bFlashPortraitFrame++;
if ( pSoldier->bFlashPortraitFrame > FLASH_PORTRAIT_ENDSHADE ) if ( pSoldier->flags.fGettingHit )
{ {
pSoldier->bFlashPortraitFrame = FLASH_PORTRAIT_ENDSHADE; pSoldier->flags.fFlashPortrait = FLASH_PORTRAIT_WAITING;
if ( pSoldier->flags.fGettingHit )
{
pSoldier->flags.fFlashPortrait = FLASH_PORTRAIT_WAITING;
}
else
{
// Render face again!
pSoldier->flags.fFlashPortrait = FLASH_PORTRAIT_STOP;
}
fRerender = TRUE;
} }
else
{
// Render face again!
pSoldier->flags.fFlashPortrait = FLASH_PORTRAIT_STOP;
}
fRerender = TRUE;
} }
} }
// CHECK IF WE WERE WAITING FOR GETTING HIT TO FINISH! }
if ( !pSoldier->flags.fGettingHit && pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_WAITING )
{
pSoldier->flags.fFlashPortrait = FALSE;
fRerender = TRUE;
}
if ( pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START ) // CHECK IF WE WERE WAITING FOR GETTING HIT TO FINISH!
{ if ( !pSoldier->flags.fGettingHit && pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_WAITING )
fRerender = TRUE; {
} pSoldier->flags.fFlashPortrait = FALSE;
fRerender = TRUE;
}
if ( pSoldier->flags.fFlashPortrait == FLASH_PORTRAIT_START )
{
fRerender = TRUE;
}
if( pFace->uiFlags & FACE_REDRAW_WHOLE_FACE_NEXT_FRAME ) if( pFace->uiFlags & FACE_REDRAW_WHOLE_FACE_NEXT_FRAME )
{ {
@@ -2939,20 +2950,24 @@ void HandleAutoFaces( )
fRerender = TRUE; fRerender = TRUE;
} }
if ( fInterfacePanelDirty == DIRTYLEVEL2 && guiCurrentScreen == GAME_SCREEN ) if ( fInterfacePanelDirty == DIRTYLEVEL2 && guiCurrentScreen == GAME_SCREEN )
{ {
fRerender = TRUE; fRerender = TRUE;
} }
if ( fRerender ) if ( fRerender )
{ {
RenderAutoFace( uiCount ); RenderAutoFace( uiCount );
} }
if ( bLife < CONSCIOUSNESS ) if ( bLife < CONSCIOUSNESS )
{ {
fHandleFace = FALSE; fHandleFace = FALSE;
} }
// Flugente: frozen soldiers can't be selected
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
fHandleFace = FALSE;
} }
if ( fHandleFace ) if ( fHandleFace )
@@ -2961,11 +2976,8 @@ void HandleAutoFaces( )
} }
MouthAutoFace( uiCount ); MouthAutoFace( uiCount );
} }
} }
} }
void HandleTalkingAutoFaces( ) void HandleTalkingAutoFaces( )
+7
View File
@@ -6225,6 +6225,13 @@ void HandleLocateSelectMerc( UINT8 ubID, INT8 bFlag )
return; return;
} }
// Flugente: frozen soldiers can't be selected
if ( MercPtrs[ubID]->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{
LocateSoldier( ubID, SETLOCATOR );
return;
}
if ( _KeyDown( ALT ) ) if ( _KeyDown( ALT ) )
{ {
if ( gGameSettings.fOptions[ TOPTION_OLD_SELECTION_METHOD ] ) if ( gGameSettings.fOptions[ TOPTION_OLD_SELECTION_METHOD ] )
+4 -1
View File
@@ -140,6 +140,7 @@ CHAR8 zCorpseFilenames[ NUM_CORPSES ][70] =
"ANIMS\\CORPSES\\J_DEAD.STI", "ANIMS\\CORPSES\\J_DEAD.STI",
"ANIMS\\CORPSES\\S_BURNT.STI", "ANIMS\\CORPSES\\S_BURNT.STI",
"ANIMS\\CORPSES\\S_EXPLD.STI", "ANIMS\\CORPSES\\S_EXPLD.STI",
"ANIMS\\CORPSES\\CRYO_CORPSE.STI",
}; };
@@ -205,6 +206,7 @@ CHAR8 zNoBloodCorpseFilenames[ NUM_CORPSES ][70] =
"ANIMS\\CORPSES\\J_DEAD.STI", "ANIMS\\CORPSES\\J_DEAD.STI",
"ANIMS\\CORPSES\\S_BURNT.STI", "ANIMS\\CORPSES\\S_BURNT.STI",
"ANIMS\\CORPSES\\S_EXPLD.STI", "ANIMS\\CORPSES\\S_EXPLD.STI",
"ANIMS\\CORPSES\\CRYO_CORPSE.STI",
}; };
UINT8 gb4DirectionsFrom8[8] = UINT8 gb4DirectionsFrom8[8] =
@@ -413,6 +415,7 @@ UINT16 GetCorpseStructIndex( ROTTING_CORPSE_DEFINITION *pCorpseDef, BOOLEAN fFor
case QUEEN_MONSTER_DEAD: case QUEEN_MONSTER_DEAD:
case BURNT_DEAD: case BURNT_DEAD:
case EXPLODE_DEAD: case EXPLODE_DEAD:
case CRYO_CORPSE:
bDirection = 0; bDirection = 0;
break; break;
@@ -926,7 +929,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE
} }
} }
if ( ubType == QUEEN_MONSTER_DEAD || ubType == BURNT_DEAD || ubType == EXPLODE_DEAD ) if ( ubType == QUEEN_MONSTER_DEAD || ubType == BURNT_DEAD || ubType == EXPLODE_DEAD || ubType == CRYO_CORPSE )
{ {
Corpse.ubDirection = NORTHWEST; Corpse.ubDirection = NORTHWEST;
} }
+1
View File
@@ -66,6 +66,7 @@ enum RottingCorpseDefines
ROBOT_DEAD, ROBOT_DEAD,
BURNT_DEAD, BURNT_DEAD,
EXPLODE_DEAD, EXPLODE_DEAD,
CRYO_CORPSE,
NUM_CORPSES, NUM_CORPSES,
+9 -2
View File
@@ -2158,7 +2158,14 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
} }
} }
if ( gGameSettings.fOptions[ TOPTION_BLOOD_N_GORE ] ) if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] && pSoldier->usAnimState != CRYO_DEATH && pSoldier->usAnimState != CRYO_DEATH_CROUCHED )
{
if ( gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND )
pSoldier->ChangeSoldierState( CRYO_DEATH, 0, TRUE );
else
pSoldier->ChangeSoldierState( CRYO_DEATH_CROUCHED, 0, TRUE );
}
else if ( gGameSettings.fOptions[ TOPTION_BLOOD_N_GORE ] )
{ {
// If we are dead, play some death animations!! // If we are dead, play some death animations!!
switch( pSoldier->usAnimState ) switch( pSoldier->usAnimState )
@@ -2236,8 +2243,8 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier )
// ATE: Needs to be FALSE! // ATE: Needs to be FALSE!
return( FALSE ); return( FALSE );
} }
return( TRUE );
return( TRUE );
} }
else else
{ {
+31 -5
View File
@@ -4128,6 +4128,14 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart
// Merc on fire! // Merc on fire!
this->aiData.uiPendingActionData1 = PlaySoldierJA2Sample( this->ubID, (FIRE_ON_MERC), RATE_11025, SoundVolume( HIGHVOLUME, this->sGridNo ), 5, SoundDir( this->sGridNo ), TRUE ); this->aiData.uiPendingActionData1 = PlaySoldierJA2Sample( this->ubID, (FIRE_ON_MERC), RATE_11025, SoundVolume( HIGHVOLUME, this->sGridNo ), 5, SoundDir( this->sGridNo ), TRUE );
break; break;
case CRYO_DEATH:
PlayJA2StreamingSampleFromFile( "stsounds\\CryoBlast_1.ogg", RATE_11025, SoundVolume( HIGHVOLUME, this->sGridNo ), 1, MIDDLEPAN, NULL );
break;
case CRYO_DEATH_CROUCHED:
PlayJA2StreamingSampleFromFile( "stsounds\\CryoBlast_2.ogg", RATE_11025, SoundVolume( HIGHVOLUME, this->sGridNo ), 1, MIDDLEPAN, NULL );
break;
} }
} }
@@ -6306,6 +6314,16 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
return; return;
} }
// Flugente: cryo death
if (this->stats.bLife <= 0 && this->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{
if ( gAnimControl[this->usAnimState].ubEndHeight == ANIM_STAND )
this->EVENT_InitNewSoldierAnim( CRYO_DEATH, 0, TRUE );
else
this->EVENT_InitNewSoldierAnim( CRYO_DEATH_CROUCHED, 0, TRUE );
return;
}
// SWITCH IN TYPE OF WEAPON // SWITCH IN TYPE OF WEAPON
if ( Item[usWeaponIndex].usItemClass & (IC_GUN | IC_THROWING_KNIFE) ) if ( Item[usWeaponIndex].usItemClass & (IC_GUN | IC_THROWING_KNIFE) )
@@ -7226,8 +7244,6 @@ void SOLDIERTYPE::SoldierGotoStationaryStance( void )
void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance ) void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance )
{ {
UINT16 usNewState;
// Check if they are the same! // Check if they are the same!
if ( ubDesiredStance == gAnimControl[this->usAnimState].ubEndHeight ) if ( ubDesiredStance == gAnimControl[this->usAnimState].ubEndHeight )
{ {
@@ -7263,7 +7279,7 @@ void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance )
} }
else else
{ {
usNewState = this->GetNewSoldierStateFromNewStance( ubDesiredStance ); UINT16 usNewState = this->GetNewSoldierStateFromNewStance( ubDesiredStance );
// Set desired stance // Set desired stance
this->ubDesiredHeight = ubDesiredStance; this->ubDesiredHeight = ubDesiredStance;
@@ -10798,6 +10814,9 @@ BOOLEAN SOLDIERTYPE::InternalDoMercBattleSound( UINT8 ubBattleSoundID, INT8 bSpe
BOOLEAN SOLDIERTYPE::DoMercBattleSound( UINT8 ubBattleSoundID ) BOOLEAN SOLDIERTYPE::DoMercBattleSound( UINT8 ubBattleSoundID )
{ {
if ( this->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return FALSE;
// We WANT to play some RIGHT AWAY..... // We WANT to play some RIGHT AWAY.....
if ( gBattleSndsData[ubBattleSoundID].fStopDialogue == 1 || (this->ubProfile == NO_PROFILE) || InOverheadMap( ) ) if ( gBattleSndsData[ubBattleSoundID].fStopDialogue == 1 || (this->ubProfile == NO_PROFILE) || InOverheadMap( ) )
{ {
@@ -14515,8 +14534,12 @@ INT32 SOLDIERTYPE::GetDamageResistance( BOOLEAN fAutoResolve, BOOLEAN fCalcBreat
resistance += this->GetBackgroundValue( BG_RESI_PHYSICAL ); resistance += this->GetBackgroundValue( BG_RESI_PHYSICAL );
// frozen targets go down HARD
if ( this->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
resistance -= 1000;
// resistance is between -100% and 95% // resistance is between -100% and 95%
resistance = max( -100, resistance ); resistance = max( -1000, resistance );
resistance = min( 95, resistance ); resistance = min( 95, resistance );
return(resistance); return(resistance);
@@ -15421,7 +15444,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
// if we perform suspicious actions, we are easier to uncover for a short time (but not by ourselves if we test the disguise) // if we perform suspicious actions, we are easier to uncover for a short time (but not by ourselves if we test the disguise)
if ( ubObserverID != this->ubID && this->usSoldierFlagMask & SOLDIER_COVERT_TEMPORARY_OVERT ) if ( ubObserverID != this->ubID && this->usSoldierFlagMask & SOLDIER_COVERT_TEMPORARY_OVERT )
{ {
// if enough time ha passed, or we have spend enough AP, lose the flag // if enough time has passed, or we have spend enough AP, lose the flag
if ( this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS] == 0 || GetWorldTotalSeconds( ) >= this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS] ) if ( this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS] == 0 || GetWorldTotalSeconds( ) >= this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS] )
{ {
this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS] = 0; this->usSkillCooldown[SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS] = 0;
@@ -17141,6 +17164,9 @@ void SOLDIERTYPE::SoldierPropertyUpkeep( )
usSkillCounter[counter] = max( 0, usSkillCounter[counter] - 1 ); usSkillCounter[counter] = max( 0, usSkillCounter[counter] - 1 );
} }
if ( this->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
this->usSkillCooldown[SOLDIER_COOLDOWN_CRYO]--;
// if soldier was seen this turn, increase his observed counter // if soldier was seen this turn, increase his observed counter
if ( this->usSoldierFlagMask & SOLDIER_ENEMY_OBSERVEDTHISTURN ) if ( this->usSoldierFlagMask & SOLDIER_ENEMY_OBSERVEDTHISTURN )
{ {
+1
View File
@@ -600,6 +600,7 @@ enum {
enum { enum {
SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS = 0, SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_SECONDS = 0,
SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS, SOLDIER_COOLDOWN_COVERTOPS_TEMPORARYOVERT_APS,
SOLDIER_COOLDOWN_CRYO, // counts how many turns character will be frozen
SOLDIER_COOLDOWN_MAX = 20, // enough space for fillers SOLDIER_COOLDOWN_MAX = 20, // enough space for fillers
}; };
+33 -30
View File
@@ -124,50 +124,50 @@ UINT32 GetSoldierFindFlags( UINT16 ubID )
UINT32 MercFlags = 0; UINT32 MercFlags = 0;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
// Get pSoldier! // Get pSoldier!
pSoldier = MercPtrs[ ubID ]; pSoldier = MercPtrs[ ubID ];
// FInd out and set flags // FInd out and set flags
if ( ubID == gusSelectedSoldier ) if ( ubID == gusSelectedSoldier )
{ {
MercFlags |= SELECTED_MERC; MercFlags |= SELECTED_MERC;
}
if ( ubID >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID && ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID )
{
if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !GetNumberInVehicle( pSoldier->bVehicleID ) )
{
// Don't do anything!
} }
else if ( ubID >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID && ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID )
{ {
// It's our own merc if ( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !GetNumberInVehicle( pSoldier->bVehicleID ) )
MercFlags |= OWNED_MERC;
if ( pSoldier->bAssignment < ON_DUTY )
{ {
MercFlags |= ONDUTY_MERC; // Don't do anything!
}
else
{
// It's our own merc
MercFlags |= OWNED_MERC;
if ( pSoldier->bAssignment < ON_DUTY )
{
MercFlags |= ONDUTY_MERC;
}
} }
} }
}
else
{
// Check the side, etc
if ( !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum ) )
{
// It's an enemy merc
MercFlags |= ENEMY_MERC;
}
else else
{ {
// It's not an enemy merc // Check the side, etc
MercFlags |= NEUTRAL_MERC; if ( !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum ) )
{
// It's an enemy merc
MercFlags |= ENEMY_MERC;
}
else
{
// It's not an enemy merc
MercFlags |= NEUTRAL_MERC;
}
} }
}
// Check for a guy who does not have an iterrupt ( when applicable! ) // Check for a guy who does not have an iterrupt ( when applicable! )
if ( !OK_INTERRUPT_MERC( pSoldier ) ) if ( !OK_INTERRUPT_MERC( pSoldier ) )
{ {
MercFlags |= NOINTERRUPT_MERC; MercFlags |= NOINTERRUPT_MERC;
} }
if ( pSoldier->stats.bLife < OKLIFE ) if ( pSoldier->stats.bLife < OKLIFE )
@@ -175,6 +175,9 @@ UINT32 GetSoldierFindFlags( UINT16 ubID )
MercFlags |= UNCONSCIOUS_MERC; MercFlags |= UNCONSCIOUS_MERC;
} }
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
MercFlags |= UNCONSCIOUS_MERC;
if ( pSoldier->stats.bLife == 0 ) if ( pSoldier->stats.bLife == 0 )
{ {
MercFlags |= DEAD_MERC; MercFlags |= DEAD_MERC;
+5 -5
View File
@@ -18,15 +18,15 @@
#define OK_ENEMY_MERC( p ) ( !p->aiData.bNeutral && (p->bSide != gbPlayerNum ) && p->stats.bLife >= OKLIFE && (p->bTeam < 5 )) #define OK_ENEMY_MERC( p ) ( !p->aiData.bNeutral && (p->bSide != gbPlayerNum ) && p->stats.bLife >= OKLIFE && (p->bTeam < 5 ))
// Checks if our guy can be controllable .... checks bInSector, team, on duty, etc... // Checks if our guy can be controllable .... checks bInSector, team, on duty, etc...
//#define OK_CONTROLLABLE_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum && p->bAssignment < ON_DUTY )
#define OK_CONTROLLABLE_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum && ( p->bAssignment < ON_DUTY || p->bAssignment == VEHICLE ) ) // Checks if our guy is controllable but doesn't care about current assignment
#define OK_CONTROL_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum && !(p->usSkillCooldown[SOLDIER_COOLDOWN_CRYO]) )
#define OK_CONTROLLABLE_MERC( p ) ( OK_CONTROL_MERC(p) && ( p->bAssignment < ON_DUTY || p->bAssignment == VEHICLE ) )
// Checks if our guy can be controllable .... checks bInSector, team, on duty, etc... // Checks if our guy can be controllable .... checks bInSector, team, on duty, etc...
#define OK_INSECTOR_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum && p->bAssignment < ON_DUTY ) #define OK_INSECTOR_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum && p->bAssignment < ON_DUTY )
// Checks if our guy is controllable but doesn't care about current assignment
#define OK_CONTROL_MERC( p ) ( p->stats.bLife >= OKLIFE && p->bActive && p->bInSector && p->bTeam == gbPlayerNum )
// Checkf if our guy can be selected and is not in a position where our team has an interupt and he does not have one... // Checkf if our guy can be selected and is not in a position where our team has an interupt and he does not have one...
#define OK_INTERRUPT_MERC( p ) ( ( INTERRUPT_QUEUED != 0 ) ? ( ( p->aiData.bMoved ) ? FALSE : TRUE ) : TRUE ) #define OK_INTERRUPT_MERC( p ) ( ( INTERRUPT_QUEUED != 0 ) ? ( ( p->aiData.bMoved ) ? FALSE : TRUE ) : TRUE )
+8
View File
@@ -9653,6 +9653,14 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget,
gfNextShotKills = FALSE; gfNextShotKills = FALSE;
} }
// Flugente: if this is cryo ammo, freeze target.
if ( !TANK( pTarget ) && AmmoTypes[ubAmmoType].ammoflag & AMMO_CRYO )
{
pTarget->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] += 2;
ShutupaYoFace( pTarget->iFaceIndex );
}
if ( iImpact > 0 && !TANK( pTarget ) ) if ( iImpact > 0 && !TANK( pTarget ) )
{ {
// Flugente: any bullet can have drug effects it set so in the magazine item // Flugente: any bullet can have drug effects it set so in the magazine item
+1 -1
View File
@@ -177,7 +177,7 @@ enum
// -------- added by Flugente: various ammo flags -------- // -------- added by Flugente: various ammo flags --------
// flags used for various ammo properties (easier than adding 32 differently named variables). DO NOT CHANGE THEM, UNLESS YOU KNOW WHAT YOU ARE DOING!!! // flags used for various ammo properties (easier than adding 32 differently named variables). DO NOT CHANGE THEM, UNLESS YOU KNOW WHAT YOU ARE DOING!!!
//#define AMMO_NEUROTOXIN 0x00000001 //1 // this ammo adds the cyanide drug effect to its target, killing it in a few turns // not used anymore #define AMMO_CRYO 0x00000001 //1 // this ammo shock-freezes target
#define AMMO_BLIND 0x00000002 //2 // this ammo will blind if it hits the head #define AMMO_BLIND 0x00000002 //2 // this ammo will blind if it hits the head
#define AMMO_ANTIMATERIEL 0x00000004 //4 // this ammo is anti-materiel, bullets can destroy structures #define AMMO_ANTIMATERIEL 0x00000004 //4 // this ammo is anti-materiel, bullets can destroy structures
/*#define CONCERTINA 0x00000008 //8 /*#define CONCERTINA 0x00000008 //8
+1 -2
View File
@@ -1317,13 +1317,12 @@ void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier)
// pSoldier->flags.fNoAPToFinishMove = FALSE; // pSoldier->flags.fNoAPToFinishMove = FALSE;
// Flugente: pows don't do anything // Flugente: pows don't do anything
if ( pSoldier->usSoldierFlagMask & SOLDIER_POW ) if ( pSoldier->usSoldierFlagMask & SOLDIER_POW || pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{ {
EndAIGuysTurn( pSoldier); EndAIGuysTurn( pSoldier);
return; return;
} }
if ((pSoldier->aiData.bAction != AI_ACTION_NONE) && pSoldier->aiData.bActionInProgress) if ((pSoldier->aiData.bAction != AI_ACTION_NONE) && pSoldier->aiData.bActionInProgress)
{ {
// if action should remain in progress // if action should remain in progress
+1 -1
View File
@@ -73,7 +73,7 @@ void RTHandleAI( SOLDIERTYPE * pSoldier )
} }
// Flugente: prisoners of war don't do anything // Flugente: prisoners of war don't do anything
if ( pSoldier->usSoldierFlagMask & SOLDIER_POW ) if ( pSoldier->usSoldierFlagMask & SOLDIER_POW || pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
return; return;
// if man has nothing to do // if man has nothing to do
+19 -23
View File
@@ -1641,31 +1641,14 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo
sNewWoundAmt = (INT16)(sNewWoundAmt * (100 - (gSkillTraitValues.bTanksDamageResistanceModifier / 2)) / 100); sNewWoundAmt = (INT16)(sNewWoundAmt * (100 - (gSkillTraitValues.bTanksDamageResistanceModifier / 2)) / 100);
} }
// Bodybuilding damage resistance
if ( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, BODYBUILDING_NT ) )
sNewWoundAmt = max( 1, (INT16)(sNewWoundAmt * (100 - gSkillTraitValues.ubBBDamageResistance) / 100));
// Flugente: moved the damage calculation into a separate function // Flugente: moved the damage calculation into a separate function
#ifdef ENABLE_ZOMBIES INT32 sDamageResistance = pSoldier->GetDamageResistance( FALSE, FALSE );
if ( pSoldier->GetDamageResistance(FALSE, FALSE) > 0 )
sNewWoundAmt -= ((sNewWoundAmt * pSoldier->GetDamageResistance(FALSE, FALSE)) /100);
#else
// Damage resistance for Militia
if (pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA && gGameExternalOptions.bGreenMilitiaDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.bGreenMilitiaDamageResistance) /100);
else if (pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA && gGameExternalOptions.bRegularMilitiaDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.bRegularMilitiaDamageResistance) /100);
else if (pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA && gGameExternalOptions.bVeteranMilitiaDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.bVeteranMilitiaDamageResistance) /100);
// bonus for enemy too
else if (pSoldier->ubSoldierClass == SOLDIER_CLASS_ADMINISTRATOR && gGameExternalOptions.sEnemyAdminDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.sEnemyAdminDamageResistance) /100);
else if (pSoldier->ubSoldierClass == SOLDIER_CLASS_ARMY && gGameExternalOptions.sEnemyRegularDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.sEnemyRegularDamageResistance) /100);
else if (pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE && gGameExternalOptions.sEnemyEliteDamageResistance != 0)
sNewWoundAmt -= ((sNewWoundAmt * gGameExternalOptions.sEnemyEliteDamageResistance) /100);
#endif
sNewWoundAmt = max( 0, (INT16)(sNewWoundAmt * (100 - sDamageResistance) / 100) );
// Flugente: this seems a bit weird, but is consistent with the previous code - we do not receive stat damage if we have positive damage resistance
if ( sDamageResistance > 0 )
;
// we can loose stats due to being hit by the blast // we can loose stats due to being hit by the blast
else if ( gGameOptions.fNewTraitSystem && Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && else if ( gGameOptions.fNewTraitSystem && Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL &&
!AM_A_ROBOT( pSoldier ) && !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) && !TANK(pSoldier) && !AM_A_ROBOT( pSoldier ) && !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) && !TANK(pSoldier) &&
@@ -2159,6 +2142,19 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"ExpControl pSoldier->flags.fHitByGasFlags: %d", pSoldier->flags.fHitByGasFlags ); //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"ExpControl pSoldier->flags.fHitByGasFlags: %d", pSoldier->flags.fHitByGasFlags );
// Flugente: if we're frozen, we take no gas damage at all (because I say so)
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{
sWoundAmt = 0;
sBreathAmt = 0;
// fire makes us thaw faster
if ( pExplosive->ubType == EXPLOSV_BURNABLEGAS )
{
pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO]--;
}
}
// a gas effect, take damage directly... // a gas effect, take damage directly...
pSoldier->SoldierTakeDamage( ANIM_STAND, sWoundAmt, sBreathAmt, TAKE_DAMAGE_GAS, NOBODY, NOWHERE, 0, TRUE ); pSoldier->SoldierTakeDamage( ANIM_STAND, sWoundAmt, sBreathAmt, TAKE_DAMAGE_GAS, NOBODY, NOWHERE, 0, TRUE );
+26 -16
View File
@@ -1596,15 +1596,15 @@ void RenderTiles(UINT32 uiFlags, INT32 iStartPointX_M, INT32 iStartPointY_M, INT
if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTITILE_Z ) if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTITILE_Z )
{ {
fMultiTransShadowZBlitter = TRUE; fMultiTransShadowZBlitter = TRUE;
// ATE: Use one direction for queen! // ATE: Use one direction for queen!
if ( pSoldier->ubBodyType == QUEENMONSTER ) if ( pSoldier->ubBodyType == QUEENMONSTER )
{ {
sMultiTransShadowZBlitterIndex = 0; sMultiTransShadowZBlitterIndex = 0;
} }
else else
{ {
sMultiTransShadowZBlitterIndex = gOneCDirection[ pSoldier->ubDirection ]; sMultiTransShadowZBlitterIndex = gOneCDirection[ pSoldier->ubDirection ];
} }
} }
else else
{ {
@@ -1708,17 +1708,17 @@ void RenderTiles(UINT32 uiFlags, INT32 iStartPointX_M, INT32 iStartPointY_M, INT
{ {
if ( pSelSoldier->aiData.bOppList[ pSoldier->ubID ] != SEEN_CURRENTLY ) if ( pSelSoldier->aiData.bOppList[ pSoldier->ubID ] != SEEN_CURRENTLY )
{ {
if ( pSoldier->usAnimState != CHARIOTS_OF_FIRE && pSoldier->usAnimState != BODYEXPLODING ) if ( pSoldier->usAnimState != CHARIOTS_OF_FIRE && pSoldier->usAnimState != BODYEXPLODING )
{ {
bGlowShadeOffset = 10; bGlowShadeOffset = 10;
} }
} }
} }
} }
if ( pSoldier->pathing.bLevel == 0 ) if ( pSoldier->pathing.bLevel == 0 )
{ {
pShadeStart = (INT16 **) &( pSoldier->pGlowShades[ 0 ] ); pShadeStart = (INT16 **)&(pSoldier->pGlowShades[0]);
} }
else else
{ {
@@ -1804,6 +1804,12 @@ void RenderTiles(UINT32 uiFlags, INT32 iStartPointX_M, INT32 iStartPointY_M, INT
pShadeTable = pSoldier->pEffectShades[ 1 ]; pShadeTable = pSoldier->pEffectShades[ 1 ];
} }
// Flugente: frozen soldiers appear to be in ice, which we simulate by having the soldier be fully white
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] )
{
pShadeTable = White16BPPPalette;
}
hVObject=gAnimSurfaceDatabase[ usAnimSurface ].hVideoObject; hVObject=gAnimSurfaceDatabase[ usAnimSurface ].hVideoObject;
if ( hVObject == NULL ) if ( hVObject == NULL )
@@ -1823,12 +1829,16 @@ void RenderTiles(UINT32 uiFlags, INT32 iStartPointX_M, INT32 iStartPointY_M, INT
sZLevel += 2; sZLevel += 2;
} }
usImageIndex = pSoldier->usAniFrame;
usImageIndex=pSoldier->usAniFrame; // Flugente: frozen soldiers don't move
if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] && pSoldier->stats.bLife > 0 )
{
usImageIndex = 0;
}
uiDirtyFlags=BGND_FLAG_SINGLE|BGND_FLAG_ANIMATED| BGND_FLAG_MERC; uiDirtyFlags=BGND_FLAG_SINGLE|BGND_FLAG_ANIMATED| BGND_FLAG_MERC;
break; break;
} }
// Adjust for interface level // Adjust for interface level