mirror of
https://github.com/1dot13/source.git
synced 2026-08-26 14:30:26 +02:00
New feature: Voicesets are now independent fom profile slots. Voiceset is set in MercProfiles.xml with <usVoiceIndex>. IMP voices are defined in IMPVoices.xml.
This feature is savegame compatible. Requires GameDir >= r2357 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8364 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2021,11 +2021,11 @@ BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32
|
||||
|
||||
// Check face index
|
||||
CHECKF( iFaceIndex != -1 );
|
||||
|
||||
|
||||
if ( !GetDialogue( ubCharacterNum,
|
||||
usQuoteNum, DIALOGUESIZE, gzQuoteStr, &uiSoundID, zSoundString) )
|
||||
{
|
||||
return( FALSE );
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
if( bUIHandlerID == DIALOGUE_EXTERNAL_NPC_UI )
|
||||
@@ -2142,9 +2142,12 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
{
|
||||
static CHAR8 zFileName[164];
|
||||
static CHAR8 zFileNameExists[164];
|
||||
UINT8 ubFileNumID;
|
||||
UINT32 ubFileNumID;
|
||||
BOOLEAN isBartenderSantos = FALSE;
|
||||
|
||||
// Flugente: For the voice set itself, use this number
|
||||
UINT32 usVoiceSet = gMercProfiles[ubCharacterNum].usVoiceIndex;
|
||||
|
||||
// Are we an NPC OR an RPC that has not been recruited?
|
||||
// ATE: Did the || clause here to allow ANY RPC that talks while the talking menu is up to use an npc quote file
|
||||
if ( gfUseAlternateDialogueFile )
|
||||
@@ -2163,10 +2166,10 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
// #else
|
||||
if ( gSoundProfileValue[ubCharacterNum].EnabledSound == TRUE )
|
||||
{
|
||||
sprintf( zFileName,"NPC_SPEECH\\d_%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "NPC_SPEECH\\d_%03d_%03d.ogg", usVoiceSet, usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"NPC_SPEECH\\d_%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "NPC_SPEECH\\d_%03d_%03d.wav", usVoiceSet, usQuoteNum );
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
@@ -2174,7 +2177,7 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
else
|
||||
{
|
||||
// assume EDT files are in EDT directory on HARD DRIVE
|
||||
sprintf( zFileName,"NPCDATA\\d_%03d.EDT", ubCharacterNum );
|
||||
sprintf( zFileName, "NPCDATA\\d_%03d.EDT", usVoiceSet );
|
||||
}
|
||||
}
|
||||
//else if ( ubCharacterNum >= FIRST_RPC && ubCharacterNum < GASTON &&
|
||||
@@ -2186,7 +2189,7 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
)
|
||||
|
||||
{
|
||||
ubFileNumID = ubCharacterNum;
|
||||
ubFileNumID = usVoiceSet;
|
||||
|
||||
if ( ubCharacterNum == HERVE )
|
||||
{
|
||||
@@ -2221,7 +2224,7 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
ubFileNumID = CARLO;
|
||||
}
|
||||
|
||||
#ifdef JA2UB
|
||||
#ifdef JA2UB
|
||||
if ( ubCharacterNum == MANUEL_UB )
|
||||
{
|
||||
sprintf( (char *)zFileNameExists,"NPCDATA\\%03d.EDT", MANUEL_UB );
|
||||
@@ -2294,7 +2297,7 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
ubFileNumID = RUDY_UB;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// If we are character #155, check fact!
|
||||
if ( ubCharacterNum == MANNY && !gubFact[ FACT_MANNY_IS_BARTENDER ] )
|
||||
@@ -2339,68 +2342,69 @@ CHAR8 *GetDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN
|
||||
{
|
||||
if ( fWavFile )
|
||||
{
|
||||
#ifdef RUSSIAN
|
||||
#ifdef RUSSIAN
|
||||
// if( ubCharacterNum >= FIRST_RPC && ubCharacterNum < GASTON && gMercProfiles[ ubCharacterNum ].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED )
|
||||
//new profiles by Jazz
|
||||
if ( ( gProfilesRPC[ubCharacterNum].ProfilId == ubCharacterNum || gProfilesNPC[ubCharacterNum].ProfilId == ubCharacterNum || gProfilesVehicle[ubCharacterNum].ProfilId == ubCharacterNum ) && gMercProfiles[ ubCharacterNum ].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED )
|
||||
{
|
||||
//inshy: fix for UB-1.13 version only sprintf( zFileName,"SPEECH\\r_%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
if ( gSoundProfileValue[ubCharacterNum].EnabledSound == TRUE )
|
||||
{
|
||||
|
||||
#ifdef JA2UB
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
}
|
||||
#else
|
||||
sprintf( zFileName,"SPEECH\\r_%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
#endif
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
//inshy: fix for UB-1.13 version only
|
||||
#ifdef JA2UB
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
}
|
||||
#else
|
||||
sprintf( zFileName,"SPEECH\\r_%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
#endif
|
||||
//<SB> Also check for Russian Gold sound files (identical to international ones)
|
||||
if(! FileExists( zFileName ) )
|
||||
//inshy: fix for UB-1.13 version only sprintf( zFileName,"SPEECH\\r_%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
if ( gSoundProfileValue[ubCharacterNum].EnabledSound == TRUE )
|
||||
{
|
||||
#ifdef JA2UB
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",usVoiceSet,usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",usVoiceSet,usQuoteNum );
|
||||
}
|
||||
#else
|
||||
sprintf( zFileName,"SPEECH\\r_%03d_%03d.ogg",usVoiceSet,usQuoteNum );
|
||||
#endif
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
//inshy: fix for UB-1.13 version only
|
||||
#ifdef JA2UB
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",usVoiceSet,usQuoteNum );
|
||||
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",usVoiceSet,usQuoteNum );
|
||||
}
|
||||
#else
|
||||
sprintf( zFileName,"SPEECH\\r_%03d_%03d.wav",usVoiceSet,usQuoteNum );
|
||||
#endif
|
||||
|
||||
//<SB> Also check for Russian Gold sound files (identical to international ones)
|
||||
if(! FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",usVoiceSet,usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",usVoiceSet,usQuoteNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
//</SB>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
if ( gSoundProfileValue[ubCharacterNum].EnabledSound == TRUE )
|
||||
{
|
||||
// build name of wav file (characternum + quotenum)
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
}
|
||||
// build name of wav file (characternum + quotenum)
|
||||
sprintf( zFileName, "SPEECH\\%03d_%03d.ogg", usVoiceSet, usQuoteNum );
|
||||
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName, "SPEECH\\%03d_%03d.wav", usVoiceSet, usQuoteNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// assume EDT files are in EDT directory on HARD DRIVE
|
||||
sprintf( zFileName,"MERCEDT\\%03d.EDT", ubCharacterNum );
|
||||
sprintf( zFileName, "MERCEDT\\%03d.EDT", usVoiceSet );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2412,6 +2416,9 @@ CHAR8 *GetSnitchDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, B
|
||||
static CHAR8 zFileName[164];
|
||||
static CHAR8 zFileNameExists[164];
|
||||
|
||||
// Flugente: For the voice set itself, use this number
|
||||
UINT32 usVoiceSet = gMercProfiles[ubCharacterNum].usVoiceIndex;
|
||||
|
||||
if ( fWavFile )
|
||||
{
|
||||
if ( gSoundProfileValue[ubCharacterNum].EnabledSound == TRUE )
|
||||
@@ -2419,18 +2426,18 @@ CHAR8 *GetSnitchDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, B
|
||||
// build name of wav file (characternum + quotenum)
|
||||
if(fName)
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\SNITCH\\NAMES\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "SPEECH\\SNITCH\\NAMES\\%03d_%03d.ogg", usVoiceSet, usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\SNITCH\\NAMES\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "SPEECH\\SNITCH\\NAMES\\%03d_%03d.wav", usVoiceSet, usQuoteNum );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\SNITCH\\%03d_%03d.ogg",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "SPEECH\\SNITCH\\%03d_%03d.ogg", usVoiceSet, usQuoteNum );
|
||||
if ( !FileExists( zFileName ) )
|
||||
{
|
||||
sprintf( zFileName,"SPEECH\\SNITCH\\%03d_%03d.wav",ubCharacterNum,usQuoteNum );
|
||||
sprintf( zFileName, "SPEECH\\SNITCH\\%03d_%03d.wav", usVoiceSet, usQuoteNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2439,9 +2446,9 @@ CHAR8 *GetSnitchDialogueDataFilename( UINT8 ubCharacterNum, UINT16 usQuoteNum, B
|
||||
{
|
||||
// assume EDT files are in EDT directory on HARD DRIVE
|
||||
if(fName)
|
||||
sprintf( zFileName,"MERCEDT\\SNITCH\\NAMES\\%03d.EDT", ubCharacterNum );
|
||||
sprintf( zFileName, "MERCEDT\\SNITCH\\NAMES\\%03d.EDT", usVoiceSet );
|
||||
else
|
||||
sprintf( zFileName,"MERCEDT\\SNITCH\\%03d.EDT", ubCharacterNum );
|
||||
sprintf( zFileName, "MERCEDT\\SNITCH\\%03d.EDT", usVoiceSet );
|
||||
}
|
||||
|
||||
return( zFileName );
|
||||
|
||||
@@ -1548,6 +1548,8 @@ void MERCPROFILESTRUCT::initialize( )
|
||||
|
||||
memset( &usDynamicOpinionFlagmask, 0, sizeof(usDynamicOpinionFlagmask) );
|
||||
memset( &sDynamicOpinionLongTerm, 0, sizeof(sDynamicOpinionLongTerm) );
|
||||
|
||||
memset( &usVoiceIndex, 0, sizeof(UINT32) );
|
||||
}
|
||||
|
||||
// Initialize the soldier.
|
||||
@@ -10749,11 +10751,14 @@ BOOLEAN SOLDIERTYPE::InternalDoMercBattleSound( UINT8 ubBattleSoundID, INT8 bSpe
|
||||
// OK, build file and play!
|
||||
if ( pSoldier->ubProfile != NO_PROFILE )
|
||||
{
|
||||
sprintf( zFilename, "BATTLESNDS\\%03d_%s.ogg", pSoldier->ubProfile, gBattleSndsData[ubSoundID].zName );
|
||||
// Flugente: For the voice set itself, use this number
|
||||
UINT32 usVoiceSet = gMercProfiles[pSoldier->ubProfile].usVoiceIndex;
|
||||
|
||||
sprintf( zFilename, "BATTLESNDS\\%03d_%s.ogg", usVoiceSet, gBattleSndsData[ubSoundID].zName );
|
||||
|
||||
if ( !FileExists( zFilename ) )
|
||||
{
|
||||
sprintf( zFilename, "BATTLESNDS\\%03d_%s.wav", pSoldier->ubProfile, gBattleSndsData[ubSoundID].zName );
|
||||
sprintf( zFilename, "BATTLESNDS\\%03d_%s.wav", usVoiceSet, gBattleSndsData[ubSoundID].zName );
|
||||
}
|
||||
|
||||
if ( !FileExists( zFilename ) )
|
||||
|
||||
@@ -798,6 +798,12 @@ BOOLEAN LoadMercProfiles(void)
|
||||
FileClose( fptr );
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
/// Flugente: until the introduction of a separate varriable for the voiceset, the voice was identical with the slot
|
||||
// as we are loading from a .dat file, we always have to account for that
|
||||
{
|
||||
gMercProfiles[uiLoop].usVoiceIndex = uiLoop;
|
||||
}
|
||||
|
||||
// WANNE: For the new WF merc, there is no entry in prof.dat, so we have to reset some flags manually!
|
||||
if (uiLoop >= 170)
|
||||
@@ -864,7 +870,7 @@ BOOLEAN LoadMercProfiles(void)
|
||||
}
|
||||
|
||||
//if the Dialogue exists for the merc, allow the merc to be hired
|
||||
if( DialogueDataFileExistsForProfile( (UINT8)uiLoop, 0, FALSE, NULL ) )
|
||||
if ( DialogueDataFileExistsForProfile( gMercProfiles[uiLoop].usVoiceIndex, 0, FALSE, NULL ) )
|
||||
{
|
||||
gMercProfiles[uiLoop].bMercStatus = 0;
|
||||
}
|
||||
@@ -2742,6 +2748,7 @@ void OverwriteMercProfileWithXMLData( UINT32 uiLoop )
|
||||
gMercProfiles[ uiLoop ].bTown = tempProfiles[uiLoop].bTown;
|
||||
gMercProfiles[ uiLoop ].bTownAttachment = tempProfiles[uiLoop].bTownAttachment;
|
||||
gMercProfiles[ uiLoop ].usBackground = tempProfiles[uiLoop].usBackground;
|
||||
gMercProfiles[ uiLoop ].usVoiceIndex = tempProfiles[uiLoop].usVoiceIndex;
|
||||
|
||||
//None
|
||||
if ( tempProfiles[uiLoop].Type == 0 )
|
||||
|
||||
@@ -420,6 +420,8 @@ typedef struct
|
||||
// Flugente: backgrounds
|
||||
UINT16 usBackground;
|
||||
|
||||
UINT32 usVoiceIndex;
|
||||
|
||||
} TEMPPROFILETYPE;
|
||||
|
||||
extern TEMPPROFILETYPE tempProfiles[NUM_PROFILES+1];
|
||||
|
||||
@@ -217,6 +217,7 @@ typedef PARSE_STAGE;
|
||||
#define FACEGEARFILENAME "FaceGear.xml"
|
||||
#define HIDDENNAMESFILENAME "HiddenNames.xml"
|
||||
#define IMPPORTRAITS "IMPPortraits.xml"
|
||||
#define IMPVOICES "IMPVoices.xml"
|
||||
#define MERCAVAILABILITY "MercAvailability.xml"
|
||||
#define MERCOPINIONSFILENAME "MercOpinions.xml"
|
||||
#define MERCPROFILESFILENAME "MercProfiles.xml"
|
||||
@@ -502,6 +503,7 @@ extern BOOLEAN ReadInSenderNameList(STR fileName, BOOLEAN localizedVersion);
|
||||
extern BOOLEAN ReadInEnemyRank(STR fileName, BOOLEAN localizedVersion);
|
||||
extern BOOLEAN WriteEnemyRank( STR fileName);
|
||||
extern BOOLEAN ReadInIMPPortraits(STR fileName, BOOLEAN localizedVersion);
|
||||
extern BOOLEAN ReadInIMPVoices( STR fileName );
|
||||
extern void LoadIMPPortraitsTEMP();
|
||||
|
||||
// Flugente: backgrounds
|
||||
|
||||
@@ -227,7 +227,7 @@ BOOLEAN ReadInMercOpinions(STR fileName)
|
||||
{
|
||||
CHAR8 errorBuf[511];
|
||||
|
||||
sprintf(errorBuf, "XML Parser Error in MercProfiles.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
|
||||
sprintf(errorBuf, "XML Parser Error in MercOpinions.xml: %s at line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser));
|
||||
LiveMessage(errorBuf);
|
||||
|
||||
MemFree(lpcBuffer);
|
||||
|
||||
@@ -71,6 +71,7 @@ profileStartElementHandle(void *userData, const XML_Char *name, const XML_Char *
|
||||
strcmp(name, "zNickname") == 0 ||
|
||||
strcmp(name, "uiIndex") == 0 ||
|
||||
strcmp(name, "ubFaceIndex") == 0 ||
|
||||
strcmp(name, "usVoiceIndex" ) == 0 ||
|
||||
strcmp(name, "usEyesX") == 0 ||
|
||||
strcmp(name, "usEyesY") == 0 ||
|
||||
strcmp(name, "usMouthX") == 0 ||
|
||||
@@ -190,8 +191,8 @@ profileStartElementHandle(void *userData, const XML_Char *name, const XML_Char *
|
||||
strcmp(name, "ubCivilianGroup") == 0 ||
|
||||
strcmp(name, "bTown") == 0 ||
|
||||
strcmp(name, "bTownAttachment") == 0 ||
|
||||
strcmp(name, "usBackground") == 0
|
||||
|
||||
strcmp(name, "usBackground") == 0
|
||||
|
||||
))
|
||||
{
|
||||
pData->curElement = ELEMENT_PROPERTY;
|
||||
@@ -358,7 +359,8 @@ profileEndElementHandle(void *userData, const XML_Char *name)
|
||||
tempProfiles[pData->curIndex].bTown = pData->curProfile.bTown;
|
||||
tempProfiles[pData->curIndex].bTownAttachment = pData->curProfile.bTownAttachment;
|
||||
tempProfiles[pData->curIndex].usBackground = pData->curProfile.usBackground;
|
||||
|
||||
tempProfiles[pData->curIndex].usVoiceIndex = pData->curProfile.usVoiceIndex;
|
||||
|
||||
tempProfiles[pData->curIndex].fGoodGuy = pData->curProfile.fGoodGuy;
|
||||
memcpy( &(tempProfiles[pData->curIndex].usApproachFactor), &(pData->curProfile.usApproachFactor), 4 * sizeof (UINT16));
|
||||
|
||||
@@ -1087,7 +1089,11 @@ profileEndElementHandle(void *userData, const XML_Char *name)
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curProfile.usBackground = (UINT16) atol(pData->szCharData);
|
||||
}
|
||||
|
||||
else if ( strcmp( name, "usVoiceIndex" ) == 0 )
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curProfile.usVoiceIndex = (UINT32)atol( pData->szCharData );
|
||||
}
|
||||
|
||||
pData->maxReadDepth--;
|
||||
}
|
||||
@@ -1328,6 +1334,7 @@ BOOLEAN WriteMercProfiles()
|
||||
//
|
||||
|
||||
FilePrintf(hFile,"\t\t<ubFaceIndex>%d</ubFaceIndex>\r\n", gMercProfiles[ cnt ].ubFaceIndex);
|
||||
FilePrintf(hFile,"\t\t<usVoiceIndex>%d</usVoiceIndex>\r\n", gMercProfiles[cnt].usVoiceIndex );
|
||||
FilePrintf(hFile,"\t\t<usEyesX>%d</usEyesX>\r\n", gMercProfiles[ cnt ].usEyesX);
|
||||
FilePrintf(hFile,"\t\t<usEyesY>%d</usEyesY>\r\n", gMercProfiles[ cnt ].usEyesY);
|
||||
FilePrintf(hFile,"\t\t<usMouthX>%d</usMouthX>\r\n", gMercProfiles[ cnt ].usMouthX);
|
||||
@@ -1664,7 +1671,6 @@ BOOLEAN WriteMercProfiles()
|
||||
FilePrintf(hFile,"\t\t<bTownAttachment>%d</bTownAttachment>\r\n", gMercProfiles[ cnt ].bTownAttachment);
|
||||
FilePrintf(hFile,"\t\t<usBackground>%d</usBackground>\r\n", gMercProfiles[ cnt ].usBackground);
|
||||
|
||||
|
||||
FilePrintf(hFile,"\t</PROFILE>\r\n");
|
||||
}
|
||||
FilePrintf(hFile,"</MERCPROFILES>\r\n");
|
||||
|
||||
@@ -969,6 +969,8 @@ public:
|
||||
|
||||
INT8 sDynamicOpinionLongTerm[NUM_PROFILES];
|
||||
|
||||
// Flugente: voice set used
|
||||
UINT32 usVoiceIndex;
|
||||
}; // MERCPROFILESTRUCT;
|
||||
|
||||
// WANNE - BMP: DONE!
|
||||
|
||||
Reference in New Issue
Block a user