diff --git a/Tactical/Animation Control.cpp b/Tactical/Animation Control.cpp index 556af3afd..f6141ae12 100644 --- a/Tactical/Animation Control.cpp +++ b/Tactical/Animation Control.cpp @@ -101,7 +101,8 @@ static UINT16 CRYO_DEATH_AnimationScript[MAX_FRAMES_PER_ANIM] = {1, 2, 3, 4, 5, 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}; // 1038 is the jump to READY_ALTERNATIVE_STAND -static UINT16 BAYONET_STAB_AnimationScript[MAX_FRAMES_PER_ANIM] = {757, 1, 2, 3, 4, 5, 6, 7, 727, 492, 8, 9, 430, 10, 11, 12, 13, 14, 15, 16, 17, 442, 1038, 494, 0}; +static UINT16 BAYONET_STAB_STANDING_VS_STANDING_AnimationScript[MAX_FRAMES_PER_ANIM] = {757, 1, 2, 3, 4, 5, 6, 7, 727, 492, 8, 9, 430, 10, 11, 12, 13, 14, 15, 16, 17, 442, 1038, 494, 0}; +static UINT16 BAYONET_STAB_STANDING_VS_PRONE_AnimationScript[MAX_FRAMES_PER_ANIM] = { 757, 1, 2, 3, 4, 5, 6, 7, 727, 492, 8, 9, 430, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 442, 1038, 494, 0 }; ANI_SPEED_DEF gubAnimCrawlSpeeds[ TOTALBODYTYPES ]; //Block for anim file @@ -1088,9 +1089,10 @@ ANIMCONTROLTYPE gAnimControl[ NUMANIMATIONSTATES ] = // 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}, - //BAYONET_STAB - { "BAYONET_STAB" , 0, 70, (FLOAT)0, ANIM_STATIONARY | ANIM_TURNING | ANIM_FASTTURN | ANIM_NORESTART | ANIM_LIGHT_EFFORT | ANIM_ATTACK , ANIM_STAND, ANIM_STAND, -1 }, - + // BAYONET_STAB_STANDING_VS_STANDING + { "BAYONET_STAB_STANDING_VS_STANDING" , 0, 70, (FLOAT)0, ANIM_STATIONARY | ANIM_TURNING | ANIM_FASTTURN | ANIM_NORESTART | ANIM_LIGHT_EFFORT | ANIM_ATTACK , ANIM_STAND, ANIM_STAND, -1 }, + // BAYONET_STAB_STANDING_VS_PRONE + { "BAYONET_STAB_STANDING_VS_PRONE" , 0, 70, (FLOAT)0, ANIM_STATIONARY | ANIM_TURNING | ANIM_FASTTURN | ANIM_NORESTART | ANIM_LIGHT_EFFORT | ANIM_ATTACK , ANIM_STAND, ANIM_STAND, -1 }, }; ANI_SPEED_DEF gubAnimWalkSpeeds[ TOTALBODYTYPES ] = @@ -1344,7 +1346,8 @@ void InitAnimationSurfacesPerBodytype( ) gubAnimSurfaceIndex[ REGMALE ][ SLICE ] = RGMSLICE; gubAnimSurfaceIndex[ REGMALE ][ STAB ] = RGMSTAB; gubAnimSurfaceIndex[ REGMALE ][ CROUCH_STAB ] = RGMCSTAB; - gubAnimSurfaceIndex[ REGMALE ][ BAYONET_STAB ] = RGMBAYONET; + gubAnimSurfaceIndex[ REGMALE ][ BAYONET_STAB_STANDING_VS_STANDING ] = RGMBAYONET_S_S; + gubAnimSurfaceIndex[ REGMALE ][ BAYONET_STAB_STANDING_VS_PRONE ] = RGMBAYONET_S_P; gubAnimSurfaceIndex[ REGMALE ][ START_AID ] = RGMMEDIC; gubAnimSurfaceIndex[ REGMALE ][ GIVING_AID ] = RGMMEDIC; gubAnimSurfaceIndex[ REGMALE ][ END_AID ] = RGMMEDIC; @@ -1792,7 +1795,8 @@ void InitAnimationSurfacesPerBodytype( ) gubAnimSurfaceIndex[ BIGMALE ][ SLICE ] = BGMSLICE; gubAnimSurfaceIndex[ BIGMALE ][ STAB ] = BGMSTAB; gubAnimSurfaceIndex[ BIGMALE ][ CROUCH_STAB ] = BGMCSTAB; - gubAnimSurfaceIndex[ BIGMALE ][ BAYONET_STAB ] = BGMBAYONET; + gubAnimSurfaceIndex[ BIGMALE ][ BAYONET_STAB_STANDING_VS_STANDING ] = BGMBAYONET_S_S; + gubAnimSurfaceIndex[ BIGMALE ][ BAYONET_STAB_STANDING_VS_PRONE ] = BGMBAYONET_S_P; gubAnimSurfaceIndex[ BIGMALE ][ START_AID ] = BGMMEDIC; gubAnimSurfaceIndex[ BIGMALE ][ GIVING_AID ] = BGMMEDIC; gubAnimSurfaceIndex[ BIGMALE ][ END_AID ] = BGMMEDIC; @@ -2258,7 +2262,8 @@ void InitAnimationSurfacesPerBodytype( ) gubAnimSurfaceIndex[ STOCKYMALE ][ SLICE ] = RGMSLICE; gubAnimSurfaceIndex[ STOCKYMALE ][ STAB ] = RGMSTAB; gubAnimSurfaceIndex[ STOCKYMALE ][ CROUCH_STAB ] = RGMCSTAB; - gubAnimSurfaceIndex[ STOCKYMALE ][ BAYONET_STAB ] = RGMBAYONET; + gubAnimSurfaceIndex[ STOCKYMALE ][ BAYONET_STAB_STANDING_VS_STANDING ] = RGMBAYONET_S_S; + gubAnimSurfaceIndex[ STOCKYMALE ][ BAYONET_STAB_STANDING_VS_PRONE ] = RGMBAYONET_S_P; gubAnimSurfaceIndex[ STOCKYMALE ][ START_AID ] = RGMMEDIC; gubAnimSurfaceIndex[ STOCKYMALE ][ GIVING_AID ] = RGMMEDIC; gubAnimSurfaceIndex[ STOCKYMALE ][ END_AID ] = RGMMEDIC; @@ -2701,7 +2706,8 @@ void InitAnimationSurfacesPerBodytype( ) gubAnimSurfaceIndex[ REGFEMALE ][ SLICE ] = RGFSLICE; gubAnimSurfaceIndex[ REGFEMALE ][ STAB ] = RGFSTAB; gubAnimSurfaceIndex[ REGFEMALE ][ CROUCH_STAB ] = RGFCSTAB; - gubAnimSurfaceIndex[ REGFEMALE ][ BAYONET_STAB ] = RGFBAYONET; + gubAnimSurfaceIndex[ REGFEMALE ][ BAYONET_STAB_STANDING_VS_STANDING ] = RGFBAYONET_S_S; + gubAnimSurfaceIndex[ REGFEMALE ][ BAYONET_STAB_STANDING_VS_PRONE ] = RGFBAYONET_S_P; gubAnimSurfaceIndex[ REGFEMALE ][ START_AID ] = RGFMEDIC; gubAnimSurfaceIndex[ REGFEMALE ][ GIVING_AID ] = RGFMEDIC; gubAnimSurfaceIndex[ REGFEMALE ][ END_AID ] = RGFMEDIC; @@ -3783,7 +3789,8 @@ BOOLEAN LoadAnimationStateInstructions( ) 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) ); - memcpy(gusAnimInst[BAYONET_STAB], BAYONET_STAB_AnimationScript, sizeof(BAYONET_STAB_AnimationScript)); + memcpy(gusAnimInst[BAYONET_STAB_STANDING_VS_STANDING], BAYONET_STAB_STANDING_VS_STANDING_AnimationScript, sizeof(BAYONET_STAB_STANDING_VS_STANDING_AnimationScript)); + memcpy(gusAnimInst[BAYONET_STAB_STANDING_VS_PRONE], BAYONET_STAB_STANDING_VS_PRONE_AnimationScript, sizeof(BAYONET_STAB_STANDING_VS_PRONE_AnimationScript)); // NOTE: Careful here... keep in mind you have to increase MAX_ANIMATIONS whenever you would go over 399(currently) animation numbers diff --git a/Tactical/Animation Control.h b/Tactical/Animation Control.h index 17bcb6e58..5277fe3d3 100644 --- a/Tactical/Animation Control.h +++ b/Tactical/Animation Control.h @@ -612,7 +612,8 @@ enum AnimationStates CRYO_DEATH, CRYO_DEATH_CROUCHED, - BAYONET_STAB, + BAYONET_STAB_STANDING_VS_STANDING, + BAYONET_STAB_STANDING_VS_PRONE, NUMANIMATIONSTATES diff --git a/Tactical/Animation Data.cpp b/Tactical/Animation Data.cpp index b6464e7e2..daf7db149 100644 --- a/Tactical/Animation Data.cpp +++ b/Tactical/Animation Data.cpp @@ -130,7 +130,8 @@ AnimationSurfaceType gAnimSurfaceDatabase[ NUMANIMATIONSURFACETYPES ] = RGMPISTOLDRUNK, "ANIMS\\S_MERC\\S_N_DRNK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGMCROWBAR, "ANIMS\\S_MERC\\S_CROBAR.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGMJUMPOVER, "ANIMS\\S_MERC\\S_N_RUN.STI", NO_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, - RGMBAYONET, "ANIMS\\S_MERC\\S_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + RGMBAYONET_S_S, "ANIMS\\S_MERC\\S_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + RGMBAYONET_S_P, "ANIMS\\S_MERC\\S_BAYONET_S_P.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, BGMWALKING, "ANIMS\\M_MERC\\M_R_WALK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, BGMSTANDING, "ANIMS\\M_MERC\\M_R_STD.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, @@ -224,7 +225,8 @@ AnimationSurfaceType gAnimSurfaceDatabase[ NUMANIMATIONSURFACETYPES ] = BGMPISTOLDRUNK, "ANIMS\\M_MERC\\M_N_DRNK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, BGMCROWBAR, "ANIMS\\M_MERC\\M_CROBAR.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, BGMJUMPOVER, "ANIMS\\M_MERC\\M_N_RUN.STI", NO_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, - BGMBAYONET, "ANIMS\\M_MERC\\M_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + BGMBAYONET_S_S, "ANIMS\\M_MERC\\M_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + BGMBAYONET_S_P, "ANIMS\\M_MERC\\M_BAYONET_S_P.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGFWALKING, "ANIMS\\F_MERC\\F_R_WALK.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, RGFSTANDING, "ANIMS\\F_MERC\\F_BRETH2.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, @@ -312,7 +314,8 @@ AnimationSurfaceType gAnimSurfaceDatabase[ NUMANIMATIONSURFACETYPES ] = RGFPISTOLDRUNK, "ANIMS\\F_MERC\\F_N_DRNK.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, - RGFBAYONET, "ANIMS\\F_MERC\\F_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + RGFBAYONET_S_S, "ANIMS\\F_MERC\\F_BAYONET_S_S.STI", S_STRUCT, 0, 8, TO_INIT, NULL, NULL, 0, -1, + RGFBAYONET_S_P, "ANIMS\\F_MERC\\F_BAYONET_S_P.STI", S_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, diff --git a/Tactical/Animation Data.h b/Tactical/Animation Data.h index 8cd822a15..9ddd16b13 100644 --- a/Tactical/Animation Data.h +++ b/Tactical/Animation Data.h @@ -171,7 +171,8 @@ typedef enum AnimationSurfaceTypes RGMPISTOLDRUNK, RGMCROWBAR, RGMJUMPOVER, - RGMBAYONET, + RGMBAYONET_S_S, + RGMBAYONET_S_P, BGMWALKING, BGMSTANDING, @@ -265,7 +266,8 @@ typedef enum AnimationSurfaceTypes BGMPISTOLDRUNK, BGMCROWBAR, BGMJUMPOVER, - BGMBAYONET, + BGMBAYONET_S_S, + BGMBAYONET_S_P, RGFWALKING, RGFSTANDING, @@ -353,7 +355,8 @@ typedef enum AnimationSurfaceTypes RGFPISTOLDRUNK, RGFCROWBAR, RGFJUMPOVER, - RGFBAYONET, + RGFBAYONET_S_S, + RGFBAYONET_S_P, CRYO_EXPLODE, CRYO_EXPLODE_CROUCHED, diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 0652b1817..99c3e3cd0 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -12340,7 +12340,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio if (this->usAnimState == RUNNING || this->usAnimState == RUNNING_W_PISTOL) this->usSoldierFlagMask2 |= SOLDIER_BAYONET_RUNBONUS; - this->EVENT_InitNewSoldierAnim(BAYONET_STAB, 0, FALSE); + this->EVENT_InitNewSoldierAnim(BAYONET_STAB_STANDING_VS_STANDING, 0, FALSE); } // SANDRO - use focused stab animation on aimed blade attacks else if (gGameExternalOptions.fEnhancedCloseCombatSystem && (this->aiData.bAimTime > 0)) @@ -12379,9 +12379,17 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio break; case ANIM_PRONE: + + if (this->bWeaponMode == WM_ATTACHED_BAYONET && gAnimControl[this->usAnimState].ubEndHeight == ANIM_STAND) + { + // if this attack happens directly after running, the attack is slightly more powerful due to extra force + if (this->usAnimState == RUNNING || this->usAnimState == RUNNING_W_PISTOL) + this->usSoldierFlagMask2 |= SOLDIER_BAYONET_RUNBONUS; + this->EVENT_InitNewSoldierAnim(BAYONET_STAB_STANDING_VS_PRONE, 0, FALSE); + } // CHECK OUR STANCE - if ( gAnimControl[this->usAnimState].ubEndHeight != ANIM_CROUCH ) + else if ( gAnimControl[this->usAnimState].ubEndHeight != ANIM_CROUCH ) { // SET DESIRED STANCE AND SET PENDING ANIMATION SendChangeSoldierStanceEvent( this, ANIM_CROUCH ); @@ -23040,7 +23048,8 @@ UINT16 GetSuspiciousAnimationAPDuration( UINT16 usAnimation ) case SLICE: case STAB: case CROUCH_STAB: - case BAYONET_STAB: + case BAYONET_STAB_STANDING_VS_STANDING: + case BAYONET_STAB_STANDING_VS_PRONE: case PUNCH: case PUNCH_BREATH: case KICK_DOOR: