mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Enemy Taunts Updates (by anv)
- taunts will be loaded from any file in TableData/ that follows EnemyTaunts*.xml naming convention (and [LanguagePrefix]EnemyTaunts*.xml for translations) o eg: EnemyTauntsKill.xml, EnemyTauntsComeback.xml, German.EnemyTauntsKill.xml, Chinese.EnemyTauntsComeback.xml, ... - <uiIndex> for taunts in every file should start from 0 and increase normally - see: http://www.bears-pit.com/board/ubbthreads.php/topics/327830/5.html git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6640 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -1018,20 +1018,42 @@ BOOLEAN LoadExternalGameplayData(STR directoryName)
|
||||
#endif
|
||||
|
||||
// Externalised taunts
|
||||
strcpy(fileName, directoryName);
|
||||
strcat(fileName, TAUNTSFILENAME);
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,FALSE), TAUNTSFILENAME);
|
||||
|
||||
#ifndef ENGLISH
|
||||
AddLanguagePrefix(fileName);
|
||||
if ( FileExists(fileName) )
|
||||
GETFILESTRUCT FileInfo;
|
||||
char tauntFileNamePattern[MAX_PATH];
|
||||
strcpy(tauntFileNamePattern, directoryName);
|
||||
strcat(tauntFileNamePattern, TAUNTSFILENAMEBEGINNING"*"TAUNTSFILENAMEENDING);
|
||||
if( GetFileFirst(tauntFileNamePattern, &FileInfo) )
|
||||
{
|
||||
strcpy(fileName, directoryName);
|
||||
strcat(fileName, FileInfo.zFileName);
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,TRUE), TAUNTSFILENAME);
|
||||
}
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,FALSE), fileName);
|
||||
#ifndef ENGLISH
|
||||
AddLanguagePrefix(fileName);
|
||||
if ( FileExists(fileName) )
|
||||
{
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,TRUE), fileName);
|
||||
}
|
||||
#endif
|
||||
|
||||
while( GetFileNext(&FileInfo) )
|
||||
{
|
||||
strcpy(fileName, directoryName);
|
||||
strcat(fileName, FileInfo.zFileName);
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,FALSE), fileName);
|
||||
#ifndef ENGLISH
|
||||
AddLanguagePrefix(fileName);
|
||||
if ( FileExists(fileName) )
|
||||
{
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName));
|
||||
SGP_THROW_IFFALSE(ReadInTaunts(fileName,TRUE), fileName);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
GetFileClose(&FileInfo);
|
||||
}
|
||||
|
||||
// IMP Portraits List by Jazz
|
||||
strcpy(fileName, directoryName);
|
||||
strcat(fileName, IMPPORTRAITS);
|
||||
|
||||
@@ -1047,7 +1047,7 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile )
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// anv: start enemy taunt with probabilty depending on taunt settings
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, INT8 iTauntType, SOLDIERTYPE *pTarget )
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget )
|
||||
{
|
||||
// taunts disabled?
|
||||
if( gGameSettings.fOptions[TOPTION_ALLOW_TAUNTS] == FALSE )
|
||||
@@ -1243,7 +1243,7 @@ void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, INT8 iTauntType, SOLDIERTYPE *p
|
||||
}
|
||||
|
||||
// SANDRO - soldier taunts
|
||||
void StartEnemyTaunt( SOLDIERTYPE *pCiv, INT8 iTauntType, SOLDIERTYPE *pTarget )
|
||||
void StartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget )
|
||||
{
|
||||
UINT16 iTauntNumber;
|
||||
CHAR16 sTauntText[320];
|
||||
|
||||
@@ -74,7 +74,7 @@ enum
|
||||
NUM_CIV_QUOTES
|
||||
};
|
||||
|
||||
enum //enemy taunts - SANDRO
|
||||
enum TAUNTTYPE//enemy taunts - SANDRO
|
||||
{
|
||||
// actions
|
||||
TAUNT_FIRE_GUN,
|
||||
@@ -154,8 +154,8 @@ enum //enemy taunts - SANDRO
|
||||
TAUNT_RIPOSTE
|
||||
};
|
||||
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, INT8 iTauntType, SOLDIERTYPE *pTarget = NULL );
|
||||
void StartEnemyTaunt( SOLDIERTYPE *pCiv, INT8 iTauntType, SOLDIERTYPE *pTarget = NULL ); //enemy taunts - SANDRO // anv: added pTarget argument
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget = NULL );
|
||||
void StartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget = NULL ); //enemy taunts - SANDRO // anv: added pTarget argument
|
||||
void ShowTauntPopupBox( SOLDIERTYPE *pCiv, STR16 gzTauntQuote );
|
||||
|
||||
void InitCivQuoteSystem( );
|
||||
|
||||
@@ -206,7 +206,7 @@ extern BACKGROUND_VALUES zBackground[NUM_BACKGROUND];
|
||||
extern UINT16 num_found_background; // the correct number is set on reading the xml
|
||||
|
||||
// anv: enums for externalised taunts
|
||||
enum {
|
||||
enum TAUNTPROPERTY{
|
||||
|
||||
// progress
|
||||
TAUNT_PROGRESS_LT,
|
||||
|
||||
@@ -5917,30 +5917,30 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
|
||||
}
|
||||
}
|
||||
DecayIndividualOpplist( this );
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_BLINDED, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_DEAFENED, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_BLINDED, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_DEAFENED, MercPtrs[ubAttackerID]);
|
||||
break;
|
||||
|
||||
case FIRE_WEAPON_BLINDED:
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_BLINDED, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_BLINDED, MercPtrs[ubAttackerID]);
|
||||
break;
|
||||
|
||||
case FIRE_WEAPON_DEAFENED:
|
||||
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Soldier is deafened" );
|
||||
this->bDeafenedCounter = bDeafValue;
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_DEAFENED, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_DEAFENED, MercPtrs[ubAttackerID]);
|
||||
break;
|
||||
};
|
||||
|
||||
if ( usWeaponIndex == STRUCTURE_EXPLOSION )
|
||||
{
|
||||
ubReason = TAKE_DAMAGE_STRUCTURE_EXPLOSION;
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_HIT_STRUCTURE_EXPLOSION, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_STRUCTURE_EXPLOSION, MercPtrs[ubAttackerID]);
|
||||
}
|
||||
else
|
||||
{
|
||||
ubReason = TAKE_DAMAGE_EXPLOSION;
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_S_GOT_HIT_EXPLOSION, MercPtrs[ubAttackerID]);
|
||||
PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_EXPLOSION, MercPtrs[ubAttackerID]);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -238,6 +238,8 @@ typedef PARSE_STAGE;
|
||||
#define SQUADNAMEFILENAME "SquadNames.xml"
|
||||
#define BACKGROUNDSFILENAME "Backgrounds.xml"
|
||||
#define TAUNTSFILENAME "EnemyTaunts.xml"
|
||||
#define TAUNTSFILENAMEBEGINNING "EnemyTaunts"
|
||||
#define TAUNTSFILENAMEENDING ".xml"
|
||||
|
||||
#define ENEMY_ADMIN_PROFILE_FILENAME "Profiles\\SoldierProfileEnemyAdmin.xml"
|
||||
#define ENEMY_REGULAR_PROFILE_FILENAME "Profiles\\SoldierProfileEnemyRegular.xml"
|
||||
|
||||
@@ -21,7 +21,7 @@ struct
|
||||
UINT32 currentDepth;
|
||||
UINT32 maxReadDepth;
|
||||
}
|
||||
typedef enemyRankParseData;
|
||||
typedef tauntParseData;
|
||||
|
||||
BOOLEAN localizedTextOnly_Taunts;
|
||||
|
||||
@@ -30,7 +30,7 @@ UINT16 num_found_taunt = 0; // the correct number is set on reading the xml
|
||||
static void XMLCALL
|
||||
tauntStartElementHandle(void *userData, const XML_Char *name, const XML_Char **atts)
|
||||
{
|
||||
enemyRankParseData * pData = (enemyRankParseData *)userData;
|
||||
tauntParseData * pData = (tauntParseData *)userData;
|
||||
|
||||
if(pData->currentDepth <= pData->maxReadDepth) //are we reading this element?
|
||||
{
|
||||
@@ -202,7 +202,7 @@ tauntStartElementHandle(void *userData, const XML_Char *name, const XML_Char **a
|
||||
static void XMLCALL
|
||||
tauntCharacterDataHandle(void *userData, const XML_Char *str, int len)
|
||||
{
|
||||
enemyRankParseData * pData = (enemyRankParseData *)userData;
|
||||
tauntParseData * pData = (tauntParseData *)userData;
|
||||
|
||||
if( (pData->currentDepth <= pData->maxReadDepth) &&
|
||||
(strlen(pData->szCharData) < MAX_CHAR_DATA_LENGTH)
|
||||
@@ -214,7 +214,7 @@ tauntCharacterDataHandle(void *userData, const XML_Char *str, int len)
|
||||
static void XMLCALL
|
||||
tauntEndElementHandle(void *userData, const XML_Char *name)
|
||||
{
|
||||
enemyRankParseData * pData = (enemyRankParseData *)userData;
|
||||
tauntParseData * pData = (tauntParseData *)userData;
|
||||
|
||||
if(pData->currentDepth <= pData->maxReadDepth)
|
||||
{
|
||||
@@ -272,8 +272,8 @@ tauntEndElementHandle(void *userData, const XML_Char *name)
|
||||
pData->curTaunt.uiFlags2 |= TAUNT_C_VETERAN;
|
||||
}
|
||||
|
||||
//pData->curArray[pData->curTaunt.uiIndex] = pData->curTaunt;
|
||||
pData->curArray[num_found_taunt-1] = pData->curTaunt;
|
||||
pData->curArray[pData->curTaunt.uiIndex] = pData->curTaunt;
|
||||
//pData->curArray[num_found_taunt-1] = pData->curTaunt;
|
||||
}
|
||||
}
|
||||
num_found_taunt++;
|
||||
@@ -931,7 +931,7 @@ BOOLEAN ReadInTaunts(STR fileName, BOOLEAN localizedVersion)
|
||||
CHAR8 * lpcBuffer;
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
enemyRankParseData pData;
|
||||
tauntParseData pData;
|
||||
|
||||
DebugMsg(TOPIC_JA2, DBG_LEVEL_3, "Loading EnemyTaunts.xml" );
|
||||
|
||||
@@ -962,11 +962,10 @@ BOOLEAN ReadInTaunts(STR fileName, BOOLEAN localizedVersion)
|
||||
|
||||
|
||||
memset(&pData,0,sizeof(pData));
|
||||
pData.curArray = zTaunt;
|
||||
pData.curArray = &(zTaunt[num_found_taunt]);
|
||||
pData.maxArraySize = NUM_TAUNT;
|
||||
|
||||
XML_SetUserData(parser, &pData);
|
||||
|
||||
if(!XML_Parse(parser, lpcBuffer, uiFSize, TRUE))
|
||||
{
|
||||
CHAR8 errorBuf[511];
|
||||
|
||||
Reference in New Issue
Block a user