- bugfix (from build 529): IMPs have wrong voices

- bugfix: Multiple IMPs with same voice causes wrong data and CTDs. Now it is impossible to have multiple IMPs with the same voice. No more invalid IMP data with multiple imps (hopefully) ;)
- You can have a maximum number of 6 imps (3 women and 3 men). All have different voices
- If an IMP is cloned (90210, nickname) an unused voice is set. So we have correct data
- Prevent the user from selecting used voices in the IMP Voice selection screen


git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@535 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2006-09-18 19:31:34 +00:00
parent b22b219e6e
commit 6f06b9ce78
18 changed files with 494 additions and 300 deletions
+1
View File
@@ -143,6 +143,7 @@ typedef struct
BOOLEAN fSellAll; BOOLEAN fSellAll;
INT16 iPriceModifier; INT16 iPriceModifier;
INT32 iMaxIMPMaleCharacters;
INT32 iMaxIMPCharacters; INT32 iMaxIMPCharacters;
INT32 iMinAttribute; INT32 iMinAttribute;
INT32 iMaxAttribute; INT32 iMaxAttribute;
BIN
View File
Binary file not shown.
+63 -23
View File
@@ -338,6 +338,8 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
// easter egg check // easter egg check
BOOLEAN fEggOnYouFace = FALSE; BOOLEAN fEggOnYouFace = FALSE;
BOOLEAN bProceed = TRUE;
// btn callback for IMP Begin Screen done button // btn callback for IMP Begin Screen done button
if (!(btn->uiFlags & BUTTON_ENABLED)) if (!(btn->uiFlags & BUTTON_ENABLED))
return; return;
@@ -350,8 +352,7 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
{ {
if (btn->uiFlags & BUTTON_CLICKED_ON) if (btn->uiFlags & BUTTON_CLICKED_ON)
{ {
btn->uiFlags&=~(BUTTON_CLICKED_ON); btn->uiFlags&=~(BUTTON_CLICKED_ON);
if( fFinishedCharGeneration ) if( fFinishedCharGeneration )
{ {
@@ -360,30 +361,76 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
fButtonPendingFlag = TRUE; fButtonPendingFlag = TRUE;
return; return;
} }
/*
else else
{ {
// WANNE:
/*
if( CheckCharacterInputForEgg( ) ) if( CheckCharacterInputForEgg( ) )
{ {
fEggOnYouFace = TRUE; fEggOnYouFace = TRUE;
} }
*/ }
*/
if (bProceed == TRUE)
{
// check to see if a name has been selected, if not, do not allow player to proceed with more char generation
if( ( pFullNameString[ 0 ] != 0) && ( pFullNameString[ 0 ] != L' ' ) && ( bGenderFlag != -1 ) )
{
if (bGenderFlag == IMP_MALE)
{
if (GetFilledIMPSlots(MALE) >= 3)
{
// You cannot have more than 3 I.M.P characters with the same gender on your team.
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 9 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
bProceed = FALSE;
}
}
else if (bGenderFlag == IMP_FEMALE)
{
if (GetFilledIMPSlots(FEMALE) >= 3)
{
// You cannot have more than 3 I.M.P characters with the same gender on your team.
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 9 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
bProceed = FALSE;
}
}
}
else
{
// invalid name, reset current mode
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 2 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
iCurrentProfileMode = IMP__REGISTRY;
bProceed = FALSE;
}
} }
// Check if we can create an imp with the selected gender
// WANNE NEW
/*if (bProceed == TRUE)
{
if( FEMALE_GENDER_SELECT == ubTextEnterMode )
{
bGenderFlag = IMP_FEMALE;
}
else if( MALE_GENDER_SELECT == ubTextEnterMode )
{
bGenderFlag = IMP_MALE;
}
else
{
bProceed = FALSE;
}
}*/
// back to mainpage // Data is valid
if (bProceed == TRUE)
// check to see if a name has been selected, if not, do not allow player to proceed with more char generation
if( ( pFullNameString[ 0 ] != 0) && ( pFullNameString[ 0 ] != L' ' ) && ( bGenderFlag != -1 ) )
{ {
// valid full name, check to see if nick name // valid full name, check to see if nick name
if( ( pNickNameString[ 0 ] == 0 ) || ( pNickNameString[ 0 ] == L' ')) if( ( pNickNameString[ 0 ] == 0 ) || ( pNickNameString[ 0 ] == L' '))
{ {
// no nick name // no nick name
// copy first name to nick name // copy first name to nick name
CopyFirstNameIntoNickName( ); CopyFirstNameIntoNickName( );
} }
// ok, now set back to main page, and set the fact we have completed part 1 // ok, now set back to main page, and set the fact we have completed part 1
if ( ( iCurrentProfileMode < IMP__PERSONALITY ) &&( bGenderFlag != -1 ) ) if ( ( iCurrentProfileMode < IMP__PERSONALITY ) &&( bGenderFlag != -1 ) )
@@ -397,16 +444,9 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
// no easter egg?...then proceed along // no easter egg?...then proceed along
if( fEggOnYouFace == FALSE ) if( fEggOnYouFace == FALSE )
{ {
iCurrentImpPage = IMP_MAIN_PAGE; iCurrentImpPage = IMP_MAIN_PAGE;
fButtonPendingFlag = TRUE; fButtonPendingFlag = TRUE;
} }
}
else
{
// invalid name, reset current mode
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 2 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
iCurrentProfileMode = IMP__REGISTRY;
} }
} }
} }
@@ -1003,7 +1043,7 @@ void DecrementTextEnterMode( void )
// if at IMP_FEMALE gender selection, reset to full name // if at IMP_FEMALE gender selection, reset to full name
if( FULL_NAME_MODE == ubTextEnterMode) if( FULL_NAME_MODE == ubTextEnterMode)
{ {
ubTextEnterMode = FEMALE_GENDER_SELECT; ubTextEnterMode = FEMALE_GENDER_SELECT;
} }
else else
{ {
@@ -1185,7 +1225,7 @@ void MvtOnFemaleRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
} }
else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE) else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE)
{ {
ubTextEnterMode = FEMALE_GENDER_SELECT; ubTextEnterMode = FEMALE_GENDER_SELECT;
fNewCharInString = TRUE; fNewCharInString = TRUE;
} }
} }
@@ -1199,7 +1239,7 @@ void MvtOnMaleRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
} }
else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE) else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE)
{ {
ubTextEnterMode = MALE_GENDER_SELECT; ubTextEnterMode = MALE_GENDER_SELECT;
fNewCharInString = TRUE; fNewCharInString = TRUE;
} }
} }
+121 -120
View File
@@ -249,85 +249,84 @@ BOOLEAN DoesCharacterHaveAPersoanlity( void )
void CreatePlayerAttitude( void ) void CreatePlayerAttitude( void )
{ {
// WANNE
if (gGameSettings.fOptions[ TOPTION_USE_RANDOM_PERSONALITY ] == TRUE)
//if(gGameExternalOptions.fPers_att)
{
AddAnAttitudeToAttitudeList( ATT_OPTIMIST );
AddAnAttitudeToAttitudeList( ATT_LONER );
AddAnAttitudeToAttitudeList( ATT_FRIENDLY );
AddAnAttitudeToAttitudeList( ATT_ARROGANT );
AddAnAttitudeToAttitudeList( ATT_NORMAL );
AddAnAttitudeToAttitudeList( ATT_ASSHOLE );
AddAnAttitudeToAttitudeList( ATT_COWARD );
AddAnAttitudeToAttitudeList( ATT_AGGRESSIVE );
AddAnAttitudeToAttitudeList( ATT_PESSIMIST );
AddAnAttitudeToAttitudeList( ATT_BIG_SHOT );
// this function will 'roll a die' and decide if any attitude does exists if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
INT32 iDiceValue = 0;
INT32 iCounter = 0, iCounter2 = 0;
INT32 iAttitudeHits[NUM_ATTITUDES] = { 0 };
INT32 iHighestHits = 0;
INT32 iNumAttitudesWithHighestHits = 0;
iAttitude = ATT_NORMAL;
if ( iLastElementInAttitudeList == 0 )
{ {
return; AddAnAttitudeToAttitudeList( ATT_OPTIMIST );
} AddAnAttitudeToAttitudeList( ATT_LONER );
AddAnAttitudeToAttitudeList( ATT_FRIENDLY );
AddAnAttitudeToAttitudeList( ATT_ARROGANT );
AddAnAttitudeToAttitudeList( ATT_NORMAL );
AddAnAttitudeToAttitudeList( ATT_ASSHOLE );
AddAnAttitudeToAttitudeList( ATT_COWARD );
AddAnAttitudeToAttitudeList( ATT_AGGRESSIVE );
AddAnAttitudeToAttitudeList( ATT_PESSIMIST );
AddAnAttitudeToAttitudeList( ATT_BIG_SHOT );
// count # of hits for each attitude // this function will 'roll a die' and decide if any attitude does exists
for ( iCounter = 0; iCounter < iLastElementInAttitudeList; iCounter++ ) INT32 iDiceValue = 0;
{ INT32 iCounter = 0, iCounter2 = 0;
iAttitudeHits[ AttitudeList[ iCounter ] ]++;
}
// find highest # of hits for any attitude INT32 iAttitudeHits[NUM_ATTITUDES] = { 0 };
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ ) INT32 iHighestHits = 0;
{ INT32 iNumAttitudesWithHighestHits = 0;
if ( iAttitudeHits[ iCounter ] )
iAttitude = ATT_NORMAL;
if ( iLastElementInAttitudeList == 0 )
{ {
if ( iAttitudeHits[ iCounter ] > iHighestHits ) return;
}
// count # of hits for each attitude
for ( iCounter = 0; iCounter < iLastElementInAttitudeList; iCounter++ )
{
iAttitudeHits[ AttitudeList[ iCounter ] ]++;
}
// find highest # of hits for any attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
if ( iAttitudeHits[ iCounter ] )
{ {
iHighestHits = __max( iHighestHits, iAttitudeHits[ iCounter ] ); if ( iAttitudeHits[ iCounter ] > iHighestHits )
iNumAttitudesWithHighestHits = 1; {
iHighestHits = __max( iHighestHits, iAttitudeHits[ iCounter ] );
iNumAttitudesWithHighestHits = 1;
}
else if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
iNumAttitudesWithHighestHits++;
}
} }
else if ( iAttitudeHits[ iCounter ] == iHighestHits ) }
// roll dice
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
// find attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
if ( iAttitudeHits[ iCounter ] == iHighestHits )
{ {
iNumAttitudesWithHighestHits++; if ( iCounter2 == iDiceValue )
{
// this is it!
iAttitude = iCounter2;
break;
}
else
{
// one of the next attitudes...
iCounter2++;
}
} }
} }
} }
else
// roll dice
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
// find attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{ {
if ( iAttitudeHits[ iCounter ] == iHighestHits ) iAttitude = gGameExternalOptions.iCustomAttitude;
{
if ( iCounter2 == iDiceValue )
{
// this is it!
iAttitude = iCounter2;
break;
}
else
{
// one of the next attitudes...
iCounter2++;
}
}
} }
}
else
{
iAttitude = gGameExternalOptions.iCustomAttitude;
}
} }
@@ -593,82 +592,84 @@ void AddAPersonalityToPersonalityList( INT8 bPersonlity )
void CreatePlayerPersonality( void ) void CreatePlayerPersonality( void )
{ {
// WANNE
if (gGameSettings.fOptions[ TOPTION_USE_RANDOM_PERSONALITY ] == TRUE)
// Kaiden: Added for optional Mercenary personalities and attitudes // Kaiden: Added for optional Mercenary personalities and attitudes
//if(gGameExternalOptions.fPers_att)
{
// Kaiden: More chances for Psycho and Normal.
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( FORGETFUL );
AddAPersonalityToPersonalityList( NERVOUS );
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
AddAPersonalityToPersonalityList( NONSWIMMER );
AddAPersonalityToPersonalityList( FEAR_OF_INSECTS );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( FORGETFUL );
AddAPersonalityToPersonalityList( NERVOUS );
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
AddAPersonalityToPersonalityList( NONSWIMMER );
AddAPersonalityToPersonalityList( FEAR_OF_INSECTS );
INT32 iDiceValue = 0; if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
INT32 iCounter = 0;
INT32 iCounter2 = 0;
// Kaiden: Roll dice 20 times just to be on the safe side
// was getting too many repeats. Will end up scrapping
// rand() later anyway so will worry about fixing it then.
// WANNE: No need to make a 20 times repeat
/*for (iCounter2 = 0; iCounter2 < 20; iCounter2++)
{ {
iDiceValue = Random( iLastElementInPersonalityList + 1 ); // Kaiden: More chances for Psycho and Normal.
}*/ AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( FORGETFUL );
AddAPersonalityToPersonalityList( NERVOUS );
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
AddAPersonalityToPersonalityList( NONSWIMMER );
AddAPersonalityToPersonalityList( FEAR_OF_INSECTS );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( FORGETFUL );
AddAPersonalityToPersonalityList( NERVOUS );
AddAPersonalityToPersonalityList( HEAT_INTOLERANT );
AddAPersonalityToPersonalityList( NO_PERSONALITYTRAIT );
AddAPersonalityToPersonalityList( PSYCHO );
AddAPersonalityToPersonalityList( CLAUSTROPHOBIC );
AddAPersonalityToPersonalityList( NONSWIMMER );
AddAPersonalityToPersonalityList( FEAR_OF_INSECTS );
iDiceValue = Random( iLastElementInPersonalityList + 1 );
// Kaiden two chances to avoid a normal personality. As IMP INT32 iDiceValue = 0;
// says, They check it twice just to make sure :p INT32 iCounter = 0;
for( iCounter = 0; iCounter < iLastElementInPersonalityList; iCounter++ ) INT32 iCounter2 = 0;
{
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("iDiceValue = %d",iDiceValue));
if( PersonalityList[ iDiceValue ] == NO_PERSONALITYTRAIT ) // Kaiden: Roll dice 20 times just to be on the safe side
// was getting too many repeats. Will end up scrapping
// rand() later anyway so will worry about fixing it then.
for (iCounter2 = 0; iCounter2 < 20; iCounter2++)
{ {
//Kaiden: Roll one more time for good measure:
iDiceValue = Random( iLastElementInPersonalityList + 1 ); iDiceValue = Random( iLastElementInPersonalityList + 1 );
} }
// Kaiden two chances to avoid a normal personality. As IMP
// says, They check it twice just to make sure :p
for( iCounter = 0; iCounter < iLastElementInPersonalityList; iCounter++ )
{
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("iDiceValue = %d",iDiceValue));
if( PersonalityList[ iDiceValue ] == NO_PERSONALITYTRAIT )
{
//Kaiden: Roll one more time for good measure:
iDiceValue = Random( iLastElementInPersonalityList + 1 );
}
}
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("And our Personality is... = %d",PersonalityList[ iDiceValue ]));
iPersonality = PersonalityList[ iDiceValue ];
}
else
{
iPersonality = gGameExternalOptions.iCustomPersonality;
} }
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("And our Personality is... = %d",PersonalityList[ iDiceValue ]));
iPersonality = PersonalityList[ iDiceValue ];
}
else
{
iPersonality = gGameExternalOptions.iCustomPersonality;
}
return; return;
} }
void CreatePlayersPersonalitySkillsAndAttitude( void ) void CreatePlayersPersonalitySkillsAndAttitude( void )
{ {
// creates personality, skills and attitudes from curretly built list // creates personality, skills and attitudes from curretly built list
// personality // personality
CreatePlayerPersonality( ); CreatePlayerPersonality( );
// skills are now created later after stats have been chosen // skills are now created later after stats have been chosen
//CreatePlayerSkills( ); //CreatePlayerSkills( );
// attitude // attitude
CreatePlayerAttitude( ); CreatePlayerAttitude( );
@@ -932,7 +933,7 @@ void HandleMercStatsForChangesInFace( )
return; return;
} }
//add the skills to the skills listgMercProfiles //add the skills to the skills list
AddSelectedSkillsToSkillsList(); AddSelectedSkillsToSkillsList();
// now figure out skills // now figure out skills
+62 -77
View File
@@ -210,46 +210,11 @@ void DestroyConfirmButtons( void )
return; 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 ) BOOLEAN AddCharacterToPlayersTeam( void )
{ {
INT32 iFreeIMPSlot = 0;
MERC_HIRE_STRUCT HireMercStruct; MERC_HIRE_STRUCT HireMercStruct;
@@ -260,10 +225,8 @@ BOOLEAN AddCharacterToPlayersTeam( void )
memset(&HireMercStruct, 0, sizeof(MERC_HIRE_STRUCT)); memset(&HireMercStruct, 0, sizeof(MERC_HIRE_STRUCT));
//HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ; // WANNE NEW: Any changes here. I don't think so
HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ;
// Get the current imp slot (imp is already stored)
HireMercStruct.ubProfileID = GetCurrentIMPSlot();
if( fLoadingCharacterForPreviousImpProfile == FALSE ) if( fLoadingCharacterForPreviousImpProfile == FALSE )
{ {
@@ -352,7 +315,6 @@ void BtnIMPConfirmYes(GUI_BUTTON *btn,INT32 reason)
//Kaiden: And here is my Answer to the IMP E-mails only //Kaiden: And here is my Answer to the IMP E-mails only
// profiling the last IMP made. You get the results immediately // profiling the last IMP made. You get the results immediately
// But they should become different per different IMP.
AddEmail(IMP_EMAIL_PROFILE_RESULTS, IMP_EMAIL_PROFILE_RESULTS_LENGTH, IMP_PROFILE_RESULTS, GetWorldTotalMin( ), PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ); AddEmail(IMP_EMAIL_PROFILE_RESULTS, IMP_EMAIL_PROFILE_RESULTS_LENGTH, IMP_PROFILE_RESULTS, GetWorldTotalMin( ), PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId );
//RenderCharProfile( ); //RenderCharProfile( );
@@ -727,23 +689,30 @@ void WriteOutCurrentImpCharacter( INT32 iProfileId, STR fileName )
// write out the profile id // write out the profile id
if (!FileWrite(hFile, &iProfileId, sizeof( INT32 ), &uiBytesWritten)) if (!FileWrite(hFile, &iProfileId, sizeof( INT32 ), &uiBytesWritten))
{ {
if (hFile)
FileClose(hFile);
return; return;
} }
// write out the portrait id // write out the portrait id
if (!FileWrite(hFile, &iPortraitNumber, sizeof( INT32 ), &uiBytesWritten)) if (!FileWrite(hFile, &iPortraitNumber, sizeof( INT32 ), &uiBytesWritten))
{ {
if (hFile)
FileClose(hFile);
return; return;
} }
// write out the profile itself // write out the profile itself
if (!FileWrite(hFile, &gMercProfiles[ iProfileId ], sizeof( MERCPROFILESTRUCT ), &uiBytesWritten)) if (!FileWrite(hFile, &gMercProfiles[ iProfileId ], sizeof( MERCPROFILESTRUCT ), &uiBytesWritten))
{ {
if (hFile)
FileClose(hFile);
return; return;
} }
// close file // close file
FileClose(hFile); if (hFile)
FileClose(hFile);
return; return;
} }
@@ -761,7 +730,7 @@ BOOLEAN ImpExists ( STR nickName )
return FileExistsNoDB(zFileName); return FileExistsNoDB(zFileName);
} }
void LoadImpCharacter( STR nickName ) BOOLEAN LoadImpCharacter( STR nickName )
{ {
INT32 iProfileId = 0; INT32 iProfileId = 0;
HWFILE hFile; HWFILE hFile;
@@ -778,57 +747,73 @@ void LoadImpCharacter( STR nickName )
// valid file? // valid file?
if( hFile == -1 ) if( hFile == -1 )
{ {
return; DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return FALSE;
} }
// read in the profile // read in the profile
if (!FileRead(hFile, &iProfileId,sizeof( INT32 ), &uiBytesRead)) if (!FileRead(hFile, &iProfileId,sizeof( INT32 ), &uiBytesRead))
{ {
return; DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return FALSE;
} }
// read in the portrait // read in the portrait
if (!FileRead(hFile, &iPortraitNumber ,sizeof( INT32 ), &uiBytesRead)) if (!FileRead(hFile, &iPortraitNumber ,sizeof( INT32 ), &uiBytesRead))
{ {
return; DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return FALSE;
} }
// WANNE 10: set the next free profile id for the new imp // Set the ID of the new IMP
iProfileId = GetNextFreeIMPSlot(); iProfileId = GetFreeIMPSlot(iProfileId);
// read in the profile // We can create the new imp, beacuse we found an empty slot
if (!FileRead(hFile, &gMercProfiles[ iProfileId ] ,sizeof( MERCPROFILESTRUCT ), &uiBytesRead)) if (iProfileId != -1)
{ {
return; LaptopSaveInfo.iVoiceId = iProfileId - PLAYER_GENERATED_CHARACTER_ID;
// read in the profile
if (!FileRead(hFile, &gMercProfiles[ iProfileId ] ,sizeof( MERCPROFILESTRUCT ), &uiBytesRead))
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return FALSE;
}
// close file
FileClose(hFile);
if( LaptopSaveInfo.iCurrentBalance < COST_OF_PROFILE )
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 3 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
// not enough
return FALSE;
}
// charge the player
// is the character male?
fCharacterIsMale = ( gMercProfiles[ iProfileId ].bSex == MALE );
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( );
AddFutureDayStrategicEvent( EVENT_DAY2_ADD_EMAIL_FROM_IMP, 60 * 7, 0, 2 );
LaptopSaveInfo.fIMPCompletedFlag = TRUE;
fPausedReDrawScreenFlag = TRUE;
fLoadingCharacterForPreviousImpProfile = FALSE;
return TRUE;
} }
else
// close file
FileClose(hFile);
if( LaptopSaveInfo.iCurrentBalance < COST_OF_PROFILE )
{ {
// not enough // You cannot have more than 3 I.M.P characters with the same gender on your team.
return; DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 9 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
return FALSE;
} }
// charge the player
// is the character male?
fCharacterIsMale = ( gMercProfiles[ iProfileId ].bSex == MALE );
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( );
AddFutureDayStrategicEvent( EVENT_DAY2_ADD_EMAIL_FROM_IMP, 60 * 7, 0, 2 );
LaptopSaveInfo.fIMPCompletedFlag = TRUE;
fPausedReDrawScreenFlag = TRUE;
fLoadingCharacterForPreviousImpProfile = FALSE;
return;
} }
+1 -5
View File
@@ -7,7 +7,7 @@ void ExitIMPConfirm( void );
void HandleIMPConfirm( void ); void HandleIMPConfirm( void );
BOOLEAN AddCharacterToPlayersTeam( void ); BOOLEAN AddCharacterToPlayersTeam( void );
void LoadImpCharacter( STR fileName ); BOOLEAN LoadImpCharacter( STR fileName );
void WriteOutCurrentImpCharacter( INT32 iProfileId ); void WriteOutCurrentImpCharacter( INT32 iProfileId );
void WriteOutCurrentImpCharacter( INT32 iProfileId, STR fileName ); void WriteOutCurrentImpCharacter( INT32 iProfileId, STR fileName );
@@ -15,9 +15,5 @@ void ResetIMPCharactersEyesAndMouthOffsets( UINT8 ubMercProfileID );
BOOLEAN ImpExists ( STR fileName ); BOOLEAN ImpExists ( STR fileName );
// WANNE: Determines the free and current slot of the imp in the gMercProfiles array
INT32 GetNextFreeIMPSlot( void );
INT32 GetCurrentIMPSlot( void );
#endif #endif
+40 -24
View File
@@ -382,8 +382,6 @@ void HandleTextEvent( UINT32 uiKey )
void ProcessPlayerInputActivationString( void ) void ProcessPlayerInputActivationString( void )
{ {
INT16 iNextSlot = -1;
// prcess string to see if it matches activation string // prcess string to see if it matches activation string
if( NumberOfMercsOnPlayerTeam() >= 18 ) if( NumberOfMercsOnPlayerTeam() >= 18 )
@@ -392,45 +390,63 @@ void ProcessPlayerInputActivationString( void )
char charPlayerActivationString[32]; char charPlayerActivationString[32];
wcstombs(charPlayerActivationString,pPlayerActivationString,32); wcstombs(charPlayerActivationString,pPlayerActivationString,32);
iNextSlot = GetNextFreeIMPSlot(); //Madd multiple imps if( ( ( wcscmp(pPlayerActivationString, L"XEP624") == 0 ) || ( wcscmp(pPlayerActivationString, L"xep624") == 0 ) )&&( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) &&( LaptopSaveInfo.gfNewGameLaptop < 2 ) )
if( ( ( wcscmp(pPlayerActivationString, L"XEP624") == 0 ) || ( wcscmp(pPlayerActivationString, L"xep624") == 0 ) ) &&( LaptopSaveInfo.gfNewGameLaptop < 2 ) )
// We have at least one more free slot for a imp character
if (iNextSlot != -1)
{ {
//Madd multiple imps if( ( ( wcscmp(pPlayerActivationString, L"XEP624") == 0 ) || ( wcscmp(pPlayerActivationString, L"xep624") == 0 ) )&&( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) &&( LaptopSaveInfo.gfNewGameLaptop < 2 ) ) if (GetFilledIMPSlots(-1) < gGameExternalOptions.iMaxIMPCharacters)
if( ( ( wcscmp(pPlayerActivationString, L"XEP624") == 0 ) || ( wcscmp(pPlayerActivationString, L"xep624") == 0 ) ) &&( LaptopSaveInfo.gfNewGameLaptop < 2 ) )
{ {
// Kaiden: Need to reset skills, attributes and personalities with the new UB Method. // Kaiden: Need to reset skills, attributes and personalities with the new UB Method.
ResetSkillsAttributesAndPersonality( ); ResetSkillsAttributesAndPersonality( );
ClearAllSkillsList( ); ClearAllSkillsList( );
iCurrentImpPage = IMP_MAIN_PAGE; iCurrentImpPage = IMP_MAIN_PAGE;
}
//Madd multiple imps else if( ( wcscmp(pPlayerActivationString, L"90210") == 0 ) && ( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) )
else if( wcscmp(pPlayerActivationString, L"90210") == 0 )
{
LoadImpCharacter( IMP_MERC_FILENAME );
}
// Madd: load characters by name
else if ( ImpExists( charPlayerActivationString ) )
{
LoadImpCharacter( charPlayerActivationString );
} }
else else
{ {
if( ( ( wcscmp(pPlayerActivationString, L"XEP624") != 0 ) && ( wcscmp(pPlayerActivationString, L"xep624") != 0 ) ) ) DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 8 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
}
//Madd multiple imps else if( ( wcscmp(pPlayerActivationString, L"90210") == 0 ) && ( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) )
else if( wcscmp(pPlayerActivationString, L"90210") == 0 )
{
if (GetFilledIMPSlots(-1) < gGameExternalOptions.iMaxIMPCharacters)
{
if (LoadImpCharacter( IMP_MERC_FILENAME ) == TRUE)
{ {
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 0 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL); //DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 11 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
AddEmail(IMP_EMAIL_PROFILE_RESULTS, IMP_EMAIL_PROFILE_RESULTS_LENGTH, IMP_PROFILE_RESULTS, GetWorldTotalMin( ), PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId );
} }
else if( LaptopSaveInfo.fIMPCompletedFlag == TRUE ) }
else
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 8 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
}
// Madd: load characters by name
else if ( ImpExists( charPlayerActivationString ) )
{
if (GetFilledIMPSlots(-1) < gGameExternalOptions.iMaxIMPCharacters)
{
if (LoadImpCharacter( charPlayerActivationString ) == TRUE)
{ {
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 6 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL); //DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 11 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
AddEmail(IMP_EMAIL_PROFILE_RESULTS, IMP_EMAIL_PROFILE_RESULTS_LENGTH, IMP_PROFILE_RESULTS, GetWorldTotalMin( ), PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId );
} }
} }
else
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 8 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
} }
else else
{ {
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL); if( ( ( wcscmp(pPlayerActivationString, L"XEP624") != 0 ) && ( wcscmp(pPlayerActivationString, L"xep624") != 0 ) ) )
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 0 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
else if( LaptopSaveInfo.fIMPCompletedFlag == TRUE )
{
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 6 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
} }
return; return;
+79
View File
@@ -798,6 +798,85 @@ void IMPMainPageNotSelectableBtnCallback(MOUSE_REGION * pRegion, INT32 iReason )
return; return;
} }
// WANNE NEW
INT32 GetFilledIMPSlots( INT8 iSex )
{
INT32 i;
INT32 iCount = 0;
INT32 iStart;
INT32 iEnd;
// Only count the free imp male slots
if (iSex == MALE)
{
iStart = PLAYER_GENERATED_CHARACTER_ID;
iEnd = iStart + 3;
}
// Only count the free imp female slots
else if (iSex == FEMALE)
{
iStart = PLAYER_GENERATED_CHARACTER_ID + 3;
iEnd = iStart + 3;
}
// Count all free imp slots
else
{
iStart = PLAYER_GENERATED_CHARACTER_ID;
iEnd = PLAYER_GENERATED_CHARACTER_ID + 6;
}
for (i = iStart; i < iEnd; i++)
{
// We found a free slot
if (wcscmp(gMercProfiles[i].zName, L"") != 0)
{
iCount++;
}
}
// Return the number of free imp slots
return iCount;
}
// WANNE NEW
INT32 GetFreeIMPSlot(INT32 iIMPId)
{
INT32 iStart;
INT32 iEnd;
INT32 i;
INT32 iFreeSlot = -1;
if (iIMPId != -1)
{
// Female
if (iIMPId >= PLAYER_GENERATED_CHARACTER_ID + 3)
{
iStart = PLAYER_GENERATED_CHARACTER_ID + 3;
iEnd = PLAYER_GENERATED_CHARACTER_ID + 6;
}
// Male
else
{
iStart = PLAYER_GENERATED_CHARACTER_ID;
iEnd = PLAYER_GENERATED_CHARACTER_ID + 3;
}
// Find a free imp slot
for (i = iStart; i < iEnd; i++)
{
// Found a free imp slot
if (wcscmp(gMercProfiles[i].zName, L"") == 0)
{
iFreeSlot = i;
break;
}
}
}
return iFreeSlot;
}
BOOLEAN LoadCharacterPortraitForMainPage( void ) BOOLEAN LoadCharacterPortraitForMainPage( void )
{ {
+3
View File
@@ -9,6 +9,9 @@ void HandleIMPMainPage( void );
void NextProfilingMode( void ); void NextProfilingMode( void );
void ShadeUnSelectableButtons( void ); void ShadeUnSelectableButtons( void );
// WANNE NEW
INT32 GetFreeIMPSlot(INT32 iIMPId);
INT32 GetFilledIMPSlots( INT8 iSex );
extern INT32 iCurrentProfileMode; extern INT32 iCurrentProfileMode;
+90 -44
View File
@@ -2,7 +2,6 @@
#include "Laptop All.h" #include "Laptop All.h"
#else #else
#include "CharProfile.h" #include "CharProfile.h"
#include "IMP Confirm.h"
#include "IMP Voices.h" #include "IMP Voices.h"
#include "IMP MainPage.h" #include "IMP MainPage.h"
#include "IMP HomePage.h" #include "IMP HomePage.h"
@@ -23,8 +22,11 @@
#endif #endif
//current and last pages //current and last pages
// WANNE NEW: Set iLastVoice dynamically, skip used voices
INT32 iCurrentVoices = 0; INT32 iCurrentVoices = 0;
INT32 iLastVoice = 2;
INT32 iVoiceId = 0;
//INT32 iVoiceId = 0; //INT32 iVoiceId = 0;
@@ -67,7 +69,11 @@ void EnterIMPVoices( void )
fVoiceBVisited = FALSE; fVoiceBVisited = FALSE;
fVoiceCVisited = FALSE; fVoiceCVisited = FALSE;
// create buttons // Set the initialize voice
iVoiceId = -1;
IncrementVoice();
// create buttons
CreateIMPVoicesButtons( ); CreateIMPVoicesButtons( );
// create mouse regions // create mouse regions
@@ -79,21 +85,6 @@ void EnterIMPVoices( void )
// play voice once // play voice once
uiVocVoiceSound = PlayVoice( ); uiVocVoiceSound = PlayVoice( );
//if the character is a male
if( fCharacterIsMale )
{
iLastVoice = 2;
}
else
{
iLastVoice = 2;
}
if( iCurrentVoices > iLastVoice )
{
iCurrentVoices = iLastVoice;
}
return; return;
} }
@@ -150,21 +141,55 @@ void HandleIMPVoices( void )
return; return;
} }
BOOLEAN IsIMPSlotFree(INT32 iIMPId)
{
if (wcscmp(gMercProfiles[iIMPId].zName, L"") == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
// WANNE NEW
void IncrementVoice( void ) void IncrementVoice( void )
{ {
// cycle to next voice INT32 iIMPIndex = -1;
INT32 iOffset;
INT32 i;
iCurrentVoices++; iVoiceId++;
// gone too far? if (iVoiceId > 2)
if( iCurrentVoices > iLastVoice ) iVoiceId = 0;
if (fCharacterIsMale == TRUE)
iOffset = 0;
else
iOffset = 3;
// Just to be save (so we use no endless loop)
for (i = 0; i < 20; i++)
{ {
iCurrentVoices = 0; if (IsIMPSlotFree(PLAYER_GENERATED_CHARACTER_ID + iOffset + iVoiceId) == TRUE)
{
// This is the free imp index
iIMPIndex = PLAYER_GENERATED_CHARACTER_ID + iOffset + iVoiceId;
break;
}
iVoiceId++;
// Upper range -> Reset to 0
if (iVoiceId > 2)
iVoiceId = 0;
} }
// Set the voice id of the free slot
iCurrentVoices = iIMPIndex - iOffset - PLAYER_GENERATED_CHARACTER_ID;
iVoiceId = iCurrentVoices;
return; return;
} }
@@ -172,17 +197,42 @@ void IncrementVoice( void )
void DecrementVoice( void ) void DecrementVoice( void )
{ {
// cycle to previous voice INT32 iIMPIndex = -1;
INT32 iOffset;
INT32 i;
iCurrentVoices--; iVoiceId--;
// gone too far? if (iVoiceId < 0)
if( iCurrentVoices < 0 ) iVoiceId = 2;
if (fCharacterIsMale == TRUE)
iOffset = 0;
else
iOffset = 3;
// Just to be save (so we use no endless loop)
for (i = 0; i < 20; i++)
{ {
iCurrentVoices = iLastVoice; if (IsIMPSlotFree(PLAYER_GENERATED_CHARACTER_ID + iOffset + iVoiceId) == TRUE)
{
// This is the free imp index
iIMPIndex = PLAYER_GENERATED_CHARACTER_ID + iOffset + iVoiceId;
break;
}
iVoiceId--;
// Upper range -> Reset to 0
if (iVoiceId < 0)
iVoiceId = 2;
} }
return; // Set the voice id of the free slot
iCurrentVoices = iIMPIndex - iOffset - PLAYER_GENERATED_CHARACTER_ID;
iVoiceId = iCurrentVoices;
return;
} }
@@ -284,7 +334,7 @@ void BtnIMPVoicesNextCallback(GUI_BUTTON *btn,INT32 reason)
// play voice // play voice
if( ! SoundIsPlaying( uiVocVoiceSound ) ) if( ! SoundIsPlaying( uiVocVoiceSound ) )
{ {
uiVocVoiceSound = PlayVoice( ); uiVocVoiceSound = PlayVoice( );
} }
else else
{ {
@@ -386,18 +436,14 @@ void BtnIMPVoicesDoneCallback(GUI_BUTTON *btn,INT32 reason)
// set voice id, to grab character slot // set voice id, to grab character slot
// WANNE 10: // WANNE 10:
//if( fCharacterIsMale == TRUE ) if( fCharacterIsMale == TRUE )
//{ {
// LaptopSaveInfo.iVoiceId = iCurrentVoices; LaptopSaveInfo.iVoiceId = iCurrentVoices;
//} }
//else else
//{ {
// LaptopSaveInfo.iVoiceId = iCurrentVoices + 3; LaptopSaveInfo.iVoiceId = iCurrentVoices + 3;
//} }
// Get the next free imp slot
LaptopSaveInfo.iVoiceId = GetNextFreeIMPSlot() - PLAYER_GENERATED_CHARACTER_ID;
// set button up image pending // set button up image pending
fButtonPendingFlag = TRUE; fButtonPendingFlag = TRUE;
+2 -3
View File
@@ -99,18 +99,17 @@ void RenderProfileBackGround( void )
// get the video object // get the video object
GetVideoObject(&hHandle, guiBACKGROUND); GetVideoObject(&hHandle, guiBACKGROUND);
// WANNE
// render each row 5 times wide, 5 tiles high // render each row 5 times wide, 5 tiles high
for(iCounter = 0; iCounter < 4; iCounter++) for(iCounter = 0; iCounter < 4; iCounter++)
{ {
// blt background to screen from left to right // blt background to screen from left to right
BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 0 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL); BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 0 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 1 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL); BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 1 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 2 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL); BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 2 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 3 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL); BltVideoObject(FRAME_BUFFER, hHandle, 0,LAPTOP_SCREEN_UL_X + 3 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
} }
// dirty buttons // dirty buttons
MarkButtonsDirty( ); MarkButtonsDirty( );
+4
View File
@@ -2075,7 +2075,11 @@ STR16 pImpPopUpStrings[] =
L"Geen geldige optie op dit moment.", L"Geen geldige optie op dit moment.",
L"Om een nauwkeurig profiel te maken, moet je ruimte hebben voor tenminste één teamlid.", L"Om een nauwkeurig profiel te maken, moet je ruimte hebben voor tenminste één teamlid.",
L"Profiel is al gemaakt.", L"Profiel is al gemaakt.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };
+4
View File
@@ -2076,7 +2076,11 @@ STR16 pImpPopUpStrings[] =
L"Not a valid option at this time.", L"Not a valid option at this time.",
L"To complete an accurate profile, you must have room for at least one team member.", L"To complete an accurate profile, you must have room for at least one team member.",
L"Profile already completed.", L"Profile already completed.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };
+4
View File
@@ -2064,7 +2064,11 @@ STR16 pImpPopUpStrings[] =
L"Option inaccessible pour le moment.", L"Option inaccessible pour le moment.",
L"Pour que cette analyse soit efficace, il doit vous rester au moins une place dans votre escouade.", L"Pour que cette analyse soit efficace, il doit vous rester au moins une place dans votre escouade.",
L"Profil déjà établi.", L"Profil déjà établi.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };
+5 -1
View File
@@ -1992,7 +1992,11 @@ STR16 pImpPopUpStrings[] =
L"Option zur Zeit nicht gültig.", L"Option zur Zeit nicht gültig.",
L"Um eine genaue Evaluierung durchzuführen, müssen Sie mindestens noch ein Teammitglied aufnehmen können.", L"Um eine genaue Evaluierung durchzuführen, müssen Sie mindestens noch ein Teammitglied aufnehmen können.",
L"Evaluierung bereits durchgeführt.", L"Evaluierung bereits durchgeführt.",
L"Sie habe bereits die maximale Anzahl an B.S.E Charakteren.", L"Fehler beim Laden des B.S.E. Charakters.",
L"Sie haben bereits die maximale Anzahl an B.S.E. Charakteren.",
L"Sie haben bereits drei B.S.E. Charaktere mit dem gleichen Geschlecht.",
L"Sie können sich den I.M.P. Charakter nicht leisten.",
L"Der neue B.S.E. Charakter ist nun in ihrem Team.",
}; };
// button labels used on the IMP site // button labels used on the IMP site
+4
View File
@@ -2058,7 +2058,11 @@ STR16 pImpPopUpStrings[] =
L"Opzione non valida questa volta.", L"Opzione non valida questa volta.",
L"Per completare un profilo accurato, dovete aver spazio per almeno uno dei membri della squadra.", L"Per completare un profilo accurato, dovete aver spazio per almeno uno dei membri della squadra.",
L"Profilo già completato.", L"Profilo già completato.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };
+4
View File
@@ -2058,7 +2058,11 @@ STR16 pImpPopUpStrings[] =
L"Opcja tym razem nieaktywna.", L"Opcja tym razem nieaktywna.",
L"Aby wykonać profil, musisz mieć miejsce dla przynajmniej jednego członka załogi.", L"Aby wykonać profil, musisz mieć miejsce dla przynajmniej jednego członka załogi.",
L"Profil został już wykonany.", L"Profil został już wykonany.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };
+4
View File
@@ -2067,7 +2067,11 @@ STR16 pImpPopUpStrings[] =
L"Сейчас вы не можете выбрать это.", L"Сейчас вы не можете выбрать это.",
L"Чтобы закончить анализ,нужно иметь место еще хотя бы для одного члена команды.", L"Чтобы закончить анализ,нужно иметь место еще хотя бы для одного члена команды.",
L"Анализ уже завершен.", L"Анализ уже завершен.",
L"Cannot load I.M.P. character from disk.",
L"You have already reached the maximum number of I.M.P. characters.", L"You have already reached the maximum number of I.M.P. characters.",
L"You have already three I.M.P characters with the same gender on your team.",
L"You cannot afford the I.M.P character.",
L"The new I.M.P character has joined your team.",
}; };