mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New tag <shotAnimation> in AmmoTypes.xml allows defining custom shot animation.
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8800 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2833,6 +2833,39 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
StatChange( pSoldier, DEXTAMT, usDextGain, FROM_FAILURE );
|
||||
StatChange( pSoldier, MARKAMT, usMrksGain, FROM_FAILURE );
|
||||
}
|
||||
}
|
||||
|
||||
//ScreenMsg(FONT_ORANGE, MSG_INTERFACE, L"ammotype %d", Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType);
|
||||
if (IS_MERC_BODY_TYPE(pSoldier) &&
|
||||
pSoldier->bVisible == TRUE &&
|
||||
Item[usUBItem].usItemClass == IC_GUN &&
|
||||
!Item[usUBItem].rocketlauncher &&
|
||||
strlen(AmmoTypes[Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType].shotAnimation) > 0)
|
||||
{
|
||||
ANITILE_PARAMS AniParams;
|
||||
|
||||
FLOAT dStartZ;
|
||||
CalculateSoldierZPos(pSoldier, FIRING_POS, &dStartZ);
|
||||
|
||||
INT32 sTempGridNo = NewGridNo(pSoldier->sGridNo, DirectionInc(pSoldier->ubDirection));
|
||||
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE && pSoldier->ubDirection % 2 == 0)
|
||||
{
|
||||
sTempGridNo = NewGridNo(sTempGridNo, DirectionInc(pSoldier->ubDirection));
|
||||
}
|
||||
INT16 sX = CenterX(sTempGridNo);
|
||||
INT16 sY = CenterY(sTempGridNo);
|
||||
|
||||
AniParams.sGridNo = pSoldier->sGridNo;
|
||||
AniParams.ubLevelID = ANI_TOPMOST_LEVEL;
|
||||
AniParams.sDelay = (INT16)(100);
|
||||
AniParams.sStartFrame = 0;
|
||||
AniParams.uiFlags = ANITILE_CACHEDTILE | ANITILE_FORWARD | ANITILE_ALWAYS_TRANSLUCENT;
|
||||
AniParams.sX = sX + Random(3) - 1;
|
||||
AniParams.sY = sY + Random(3) - 1;
|
||||
AniParams.sZ = CONVERT_HEIGHTUNITS_TO_PIXELS(dStartZ);
|
||||
|
||||
strncpy(AniParams.zCachedFile, AmmoTypes[Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType].shotAnimation, MAX_ANIMATION_FILENAME_LEN);
|
||||
CreateAnimationTile(&AniParams);
|
||||
}
|
||||
|
||||
/////////////////////////////// Fire bullet at the target coordinates.
|
||||
@@ -3559,6 +3592,40 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
return( FALSE );
|
||||
}
|
||||
}
|
||||
|
||||
//ScreenMsg(FONT_ORANGE, MSG_INTERFACE, L"ammotype %d", Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType);
|
||||
if (IS_MERC_BODY_TYPE(pSoldier) &&
|
||||
pSoldier->bVisible == TRUE &&
|
||||
Item[usUBItem].usItemClass == IC_GUN &&
|
||||
!Item[usUBItem].rocketlauncher &&
|
||||
strlen(AmmoTypes[Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType].shotAnimation) > 0)
|
||||
{
|
||||
ANITILE_PARAMS AniParams;
|
||||
|
||||
FLOAT dStartZ;
|
||||
CalculateSoldierZPos(pSoldier, FIRING_POS, &dStartZ);
|
||||
|
||||
INT32 sTempGridNo = NewGridNo(pSoldier->sGridNo, DirectionInc(pSoldier->ubDirection));
|
||||
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE && pSoldier->ubDirection % 2 == 0)
|
||||
{
|
||||
sTempGridNo = NewGridNo(sTempGridNo, DirectionInc(pSoldier->ubDirection));
|
||||
}
|
||||
INT16 sX = CenterX(sTempGridNo);
|
||||
INT16 sY = CenterY(sTempGridNo);
|
||||
|
||||
AniParams.sGridNo = pSoldier->sGridNo;
|
||||
AniParams.ubLevelID = ANI_TOPMOST_LEVEL;
|
||||
AniParams.sDelay = (INT16)(100);
|
||||
AniParams.sStartFrame = 0;
|
||||
AniParams.uiFlags = ANITILE_CACHEDTILE | ANITILE_FORWARD | ANITILE_ALWAYS_TRANSLUCENT;
|
||||
AniParams.sX = sX + Random(3) - 1;
|
||||
AniParams.sY = sY + Random(3) - 1;
|
||||
AniParams.sZ = CONVERT_HEIGHTUNITS_TO_PIXELS(dStartZ);
|
||||
|
||||
strncpy(AniParams.zCachedFile, AmmoTypes[Magazine[Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType].shotAnimation, MAX_ANIMATION_FILENAME_LEN);
|
||||
CreateAnimationTile(&AniParams);
|
||||
}
|
||||
|
||||
//hayden
|
||||
if((is_server && pSoldier->ubID<120) || (!is_server && is_client && pSoldier->ubID<20) || (!is_server && !is_client) )
|
||||
{
|
||||
|
||||
@@ -203,6 +203,8 @@ enum
|
||||
#define PLAYER_NET_4_LVL_4 0x80000000 //2147483648*/
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
#define MAX_ANIMATION_FILENAME_LEN 100
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 uiIndex;
|
||||
@@ -259,6 +261,8 @@ typedef struct
|
||||
FLOAT dDamageModifierCivilianVehicle;
|
||||
FLOAT dDamageModifierZombie;
|
||||
|
||||
// sevenfm: shot animation
|
||||
CHAR8 shotAnimation[MAX_ANIMATION_FILENAME_LEN];
|
||||
} AMMOTYPE;
|
||||
|
||||
enum
|
||||
|
||||
@@ -87,7 +87,8 @@ ammotypeStartElementHandle(void *userData, const XML_Char *name, const XML_Char
|
||||
strcmp(name, "dDamageModifierTank" ) == 0 ||
|
||||
strcmp(name, "dDamageModifierArmouredVehicle" ) == 0 ||
|
||||
strcmp(name, "dDamageModifierCivilianVehicle" ) == 0 ||
|
||||
strcmp(name, "dDamageModifierZombie") == 0 ))
|
||||
strcmp(name, "dDamageModifierZombie") == 0 ||
|
||||
strcmp(name, "shotAnimation") == 0))
|
||||
{
|
||||
pData->curElement = ELEMENT_PROPERTY;
|
||||
|
||||
@@ -340,6 +341,11 @@ ammotypeEndElementHandle(void *userData, const XML_Char *name)
|
||||
// reasonable values only
|
||||
pData->curAmmoType.dDamageModifierZombie = min( 100.0f, max( 0.0f, pData->curAmmoType.dDamageModifierZombie ) );
|
||||
}
|
||||
else if (strcmp(name, "shotAnimation") == 0)
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
strncpy(pData->curAmmoType.shotAnimation, pData->szCharData, MAX_ANIMATION_FILENAME_LEN);
|
||||
}
|
||||
|
||||
pData->maxReadDepth--;
|
||||
}
|
||||
@@ -348,8 +354,6 @@ ammotypeEndElementHandle(void *userData, const XML_Char *name)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOLEAN ReadInAmmoTypeStats(STR fileName)
|
||||
{
|
||||
HWFILE hFile;
|
||||
@@ -464,6 +468,7 @@ BOOLEAN WriteAmmoTypeStats()
|
||||
FilePrintf(hFile,"\t\t<dDamageModifierArmouredVehicle>%4.2f</dDamageModifierArmouredVehicle>\r\n", AmmoTypes[cnt].dDamageModifierArmouredVehicle );
|
||||
FilePrintf(hFile,"\t\t<dDamageModifierCivilianVehicle>%4.2f</dDamageModifierCivilianVehicle>\r\n", AmmoTypes[cnt].dDamageModifierCivilianVehicle );
|
||||
FilePrintf(hFile,"\t\t<dDamageModifierZombie>%4.2f</dDamageModifierZombie>\r\n", AmmoTypes[cnt].dDamageModifierZombie );
|
||||
FilePrintf(hFile, "\t\t<shotAnimation>%s</shotAnimation>\r\n", AmmoTypes[cnt].shotAnimation);
|
||||
|
||||
FilePrintf(hFile,"\t</AMMOTYPE>\r\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user