- bugfix: Getting incorrect data & CTDs when using multiple IMP characters with same voices. Now it is possible to have up to 6 merc with the same voice without getting incorrect data. No more need to use different voices! (IF YOU PLAY WITH MULTIPLE IMPS, YOU SHOULD START A NEW GAME, BECAUSE THE IMP CHARACTERS GAME DATA IS INCORRECT!)

- bugfix: CTD when using Random personality in I.M.P creation
- moved Random personality flag from INI to option screen
- added MAX_IMP_CHARACTERS entry in the ja2_options.ini (Range: 0 - 6)

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@528 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2006-09-17 07:31:34 +00:00
parent c975007d4d
commit 18a1d0e519
17 changed files with 264 additions and 178 deletions
+48 -4
View File
@@ -210,11 +210,46 @@ void DestroyConfirmButtons( void )
return;
}
INT32 GetCurrentIMPSlot( void )
{
INT16 iFilledSlot = PLAYER_GENERATED_CHARACTER_ID;
INT16 i;
for (i = PLAYER_GENERATED_CHARACTER_ID + gGameExternalOptions.iMaxIMPCharacters - 1; i >= PLAYER_GENERATED_CHARACTER_ID; i--)
{
// We found the current imp
if (wcscmp( gMercProfiles[i].zName, L"") != 0)
{
iFilledSlot = i;
break;
}
}
return iFilledSlot;
}
// WANNE 10:
INT32 GetNextFreeIMPSlot( void )
{
INT16 iFreeSlot = -1;
INT16 i;
for (i = PLAYER_GENERATED_CHARACTER_ID; i < PLAYER_GENERATED_CHARACTER_ID + gGameExternalOptions.iMaxIMPCharacters; i++)
{
if (wcscmp( gMercProfiles[i].zName, L"") == 0)
{
iFreeSlot = i;
break;
}
}
return iFreeSlot;
}
BOOLEAN AddCharacterToPlayersTeam( void )
{
INT32 iFreeIMPSlot = 0;
MERC_HIRE_STRUCT HireMercStruct;
@@ -225,7 +260,10 @@ BOOLEAN AddCharacterToPlayersTeam( void )
memset(&HireMercStruct, 0, sizeof(MERC_HIRE_STRUCT));
HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ;
//HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ;
// Get the current imp slot (imp is already stored)
HireMercStruct.ubProfileID = GetCurrentIMPSlot();
if( fLoadingCharacterForPreviousImpProfile == FALSE )
{
@@ -755,6 +793,9 @@ void LoadImpCharacter( STR nickName )
return;
}
// WANNE 10: set the next free profile id for the new imp
iProfileId = GetNextFreeIMPSlot();
// read in the profile
if (!FileRead(hFile, &gMercProfiles[ iProfileId ] ,sizeof( MERCPROFILESTRUCT ), &uiBytesRead))
{
@@ -777,8 +818,11 @@ void LoadImpCharacter( STR nickName )
fLoadingCharacterForPreviousImpProfile = TRUE;
AddTransactionToPlayersBook(IMP_PROFILE,0, GetWorldTotalMin( ), - ( COST_OF_PROFILE ) );
AddHistoryToPlayersLog( HISTORY_CHARACTER_GENERATED, 0,GetWorldTotalMin( ), -1, -1 );
LaptopSaveInfo.iVoiceId = iProfileId - PLAYER_GENERATED_CHARACTER_ID;
AddCharacterToPlayersTeam( );
LaptopSaveInfo.iVoiceId = iProfileId - PLAYER_GENERATED_CHARACTER_ID;
AddCharacterToPlayersTeam( );
AddFutureDayStrategicEvent( EVENT_DAY2_ADD_EMAIL_FROM_IMP, 60 * 7, 0, 2 );
LaptopSaveInfo.fIMPCompletedFlag = TRUE;
fPausedReDrawScreenFlag = TRUE;