From ba5edad40ca8fdf52fd4ae5d24358188b541487c Mon Sep 17 00:00:00 2001 From: Wanne Date: Fri, 22 Nov 2013 21:50:00 +0000 Subject: [PATCH] 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, ... - 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 --- Init.cpp | 44 +++++++++++++++++++++++++++--------- Tactical/Civ Quotes.cpp | 4 ++-- Tactical/Civ Quotes.h | 6 ++--- Tactical/Interface.h | 2 +- Tactical/Soldier Control.cpp | 12 +++++----- Tactical/XML.h | 2 ++ Tactical/XML_Taunts.cpp | 17 +++++++------- 7 files changed, 55 insertions(+), 32 deletions(-) diff --git a/Init.cpp b/Init.cpp index 407e6f32..529623cc 100644 --- a/Init.cpp +++ b/Init.cpp @@ -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); diff --git a/Tactical/Civ Quotes.cpp b/Tactical/Civ Quotes.cpp index fce666c4..a13548b5 100644 --- a/Tactical/Civ Quotes.cpp +++ b/Tactical/Civ Quotes.cpp @@ -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]; diff --git a/Tactical/Civ Quotes.h b/Tactical/Civ Quotes.h index f727cc47..fa1fcfeb 100644 --- a/Tactical/Civ Quotes.h +++ b/Tactical/Civ Quotes.h @@ -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( ); diff --git a/Tactical/Interface.h b/Tactical/Interface.h index f9cd1678..046f557c 100644 --- a/Tactical/Interface.h +++ b/Tactical/Interface.h @@ -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, diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index c735594e..44f22ae6 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -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 diff --git a/Tactical/XML.h b/Tactical/XML.h index 94976516..b0e7a55b 100644 --- a/Tactical/XML.h +++ b/Tactical/XML.h @@ -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" diff --git a/Tactical/XML_Taunts.cpp b/Tactical/XML_Taunts.cpp index a9fff5ff..964c3ba5 100644 --- a/Tactical/XML_Taunts.cpp +++ b/Tactical/XML_Taunts.cpp @@ -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];