mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
- 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:
@@ -143,6 +143,7 @@ typedef struct
|
||||
BOOLEAN fSellAll;
|
||||
INT16 iPriceModifier;
|
||||
|
||||
INT32 iMaxIMPMaleCharacters;
|
||||
INT32 iMaxIMPCharacters;
|
||||
INT32 iMinAttribute;
|
||||
INT32 iMaxAttribute;
|
||||
|
||||
+63
-23
@@ -338,6 +338,8 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
// easter egg check
|
||||
BOOLEAN fEggOnYouFace = FALSE;
|
||||
|
||||
BOOLEAN bProceed = TRUE;
|
||||
|
||||
// btn callback for IMP Begin Screen done button
|
||||
if (!(btn->uiFlags & BUTTON_ENABLED))
|
||||
return;
|
||||
@@ -350,9 +352,8 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
{
|
||||
if (btn->uiFlags & BUTTON_CLICKED_ON)
|
||||
{
|
||||
btn->uiFlags&=~(BUTTON_CLICKED_ON);
|
||||
btn->uiFlags&=~(BUTTON_CLICKED_ON);
|
||||
|
||||
|
||||
if( fFinishedCharGeneration )
|
||||
{
|
||||
// simply reviewing name and gender, exit to finish page
|
||||
@@ -360,30 +361,76 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
fButtonPendingFlag = TRUE;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
else
|
||||
{
|
||||
// WANNE:
|
||||
/*
|
||||
if( CheckCharacterInputForEgg( ) )
|
||||
{
|
||||
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
|
||||
|
||||
|
||||
// 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 ) )
|
||||
// Data is valid
|
||||
if (bProceed == TRUE)
|
||||
{
|
||||
// valid full name, check to see if nick name
|
||||
if( ( pNickNameString[ 0 ] == 0 ) || ( pNickNameString[ 0 ] == L' '))
|
||||
{
|
||||
// no 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
|
||||
if ( ( iCurrentProfileMode < IMP__PERSONALITY ) &&( bGenderFlag != -1 ) )
|
||||
@@ -397,16 +444,9 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
// no easter egg?...then proceed along
|
||||
if( fEggOnYouFace == FALSE )
|
||||
{
|
||||
iCurrentImpPage = IMP_MAIN_PAGE;
|
||||
fButtonPendingFlag = TRUE;
|
||||
iCurrentImpPage = IMP_MAIN_PAGE;
|
||||
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( FULL_NAME_MODE == ubTextEnterMode)
|
||||
{
|
||||
ubTextEnterMode = FEMALE_GENDER_SELECT;
|
||||
ubTextEnterMode = FEMALE_GENDER_SELECT;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1185,7 +1225,7 @@ void MvtOnFemaleRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE)
|
||||
{
|
||||
ubTextEnterMode = FEMALE_GENDER_SELECT;
|
||||
ubTextEnterMode = FEMALE_GENDER_SELECT;
|
||||
fNewCharInString = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1199,7 +1239,7 @@ void MvtOnMaleRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE)
|
||||
{
|
||||
ubTextEnterMode = MALE_GENDER_SELECT;
|
||||
ubTextEnterMode = MALE_GENDER_SELECT;
|
||||
fNewCharInString = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
+121
-120
@@ -249,85 +249,84 @@ BOOLEAN DoesCharacterHaveAPersoanlity( 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
|
||||
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 )
|
||||
if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
|
||||
{
|
||||
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
|
||||
for ( iCounter = 0; iCounter < iLastElementInAttitudeList; iCounter++ )
|
||||
{
|
||||
iAttitudeHits[ AttitudeList[ iCounter ] ]++;
|
||||
}
|
||||
// this function will 'roll a die' and decide if any attitude does exists
|
||||
INT32 iDiceValue = 0;
|
||||
INT32 iCounter = 0, iCounter2 = 0;
|
||||
|
||||
// find highest # of hits for any attitude
|
||||
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
|
||||
{
|
||||
if ( iAttitudeHits[ iCounter ] )
|
||||
INT32 iAttitudeHits[NUM_ATTITUDES] = { 0 };
|
||||
INT32 iHighestHits = 0;
|
||||
INT32 iNumAttitudesWithHighestHits = 0;
|
||||
|
||||
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 ] );
|
||||
iNumAttitudesWithHighestHits = 1;
|
||||
if ( iAttitudeHits[ iCounter ] > iHighestHits )
|
||||
{
|
||||
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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// roll dice
|
||||
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
|
||||
|
||||
// find attitude
|
||||
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
|
||||
else
|
||||
{
|
||||
if ( iAttitudeHits[ iCounter ] == iHighestHits )
|
||||
{
|
||||
if ( iCounter2 == iDiceValue )
|
||||
{
|
||||
// this is it!
|
||||
iAttitude = iCounter2;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// one of the next attitudes...
|
||||
iCounter2++;
|
||||
}
|
||||
}
|
||||
iAttitude = gGameExternalOptions.iCustomAttitude;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
iAttitude = gGameExternalOptions.iCustomAttitude;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -593,82 +592,84 @@ void AddAPersonalityToPersonalityList( INT8 bPersonlity )
|
||||
|
||||
void CreatePlayerPersonality( void )
|
||||
{
|
||||
// WANNE
|
||||
if (gGameSettings.fOptions[ TOPTION_USE_RANDOM_PERSONALITY ] == TRUE)
|
||||
|
||||
// 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;
|
||||
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++)
|
||||
if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
|
||||
{
|
||||
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
|
||||
// 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));
|
||||
INT32 iDiceValue = 0;
|
||||
INT32 iCounter = 0;
|
||||
INT32 iCounter2 = 0;
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
// 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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CreatePlayersPersonalitySkillsAndAttitude( void )
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
// creates personality, skills and attitudes from curretly built list
|
||||
|
||||
// personality
|
||||
CreatePlayerPersonality( );
|
||||
|
||||
// skills are now created later after stats have been chosen
|
||||
//CreatePlayerSkills( );
|
||||
//CreatePlayerSkills( );
|
||||
|
||||
// attitude
|
||||
CreatePlayerAttitude( );
|
||||
@@ -932,7 +933,7 @@ void HandleMercStatsForChangesInFace( )
|
||||
return;
|
||||
}
|
||||
|
||||
//add the skills to the skills listgMercProfiles
|
||||
//add the skills to the skills list
|
||||
AddSelectedSkillsToSkillsList();
|
||||
|
||||
// now figure out skills
|
||||
|
||||
+62
-77
@@ -210,46 +210,11 @@ 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;
|
||||
|
||||
|
||||
@@ -260,10 +225,8 @@ BOOLEAN AddCharacterToPlayersTeam( void )
|
||||
|
||||
memset(&HireMercStruct, 0, sizeof(MERC_HIRE_STRUCT));
|
||||
|
||||
//HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ;
|
||||
|
||||
// Get the current imp slot (imp is already stored)
|
||||
HireMercStruct.ubProfileID = GetCurrentIMPSlot();
|
||||
// WANNE NEW: Any changes here. I don't think so
|
||||
HireMercStruct.ubProfileID = ( UINT8 )( PLAYER_GENERATED_CHARACTER_ID + LaptopSaveInfo.iVoiceId ) ;
|
||||
|
||||
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
|
||||
// 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 );
|
||||
|
||||
//RenderCharProfile( );
|
||||
@@ -727,23 +689,30 @@ void WriteOutCurrentImpCharacter( INT32 iProfileId, STR fileName )
|
||||
// write out the profile id
|
||||
if (!FileWrite(hFile, &iProfileId, sizeof( INT32 ), &uiBytesWritten))
|
||||
{
|
||||
if (hFile)
|
||||
FileClose(hFile);
|
||||
return;
|
||||
}
|
||||
|
||||
// write out the portrait id
|
||||
if (!FileWrite(hFile, &iPortraitNumber, sizeof( INT32 ), &uiBytesWritten))
|
||||
{
|
||||
if (hFile)
|
||||
FileClose(hFile);
|
||||
return;
|
||||
}
|
||||
|
||||
// write out the profile itself
|
||||
if (!FileWrite(hFile, &gMercProfiles[ iProfileId ], sizeof( MERCPROFILESTRUCT ), &uiBytesWritten))
|
||||
{
|
||||
if (hFile)
|
||||
FileClose(hFile);
|
||||
return;
|
||||
}
|
||||
|
||||
// close file
|
||||
FileClose(hFile);
|
||||
if (hFile)
|
||||
FileClose(hFile);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -761,7 +730,7 @@ BOOLEAN ImpExists ( STR nickName )
|
||||
return FileExistsNoDB(zFileName);
|
||||
}
|
||||
|
||||
void LoadImpCharacter( STR nickName )
|
||||
BOOLEAN LoadImpCharacter( STR nickName )
|
||||
{
|
||||
INT32 iProfileId = 0;
|
||||
HWFILE hFile;
|
||||
@@ -778,57 +747,73 @@ void LoadImpCharacter( STR nickName )
|
||||
// valid file?
|
||||
if( hFile == -1 )
|
||||
{
|
||||
return;
|
||||
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// read in the profile
|
||||
|
||||
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
|
||||
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
|
||||
iProfileId = GetNextFreeIMPSlot();
|
||||
// Set the ID of the new IMP
|
||||
iProfileId = GetFreeIMPSlot(iProfileId);
|
||||
|
||||
// read in the profile
|
||||
if (!FileRead(hFile, &gMercProfiles[ iProfileId ] ,sizeof( MERCPROFILESTRUCT ), &uiBytesRead))
|
||||
// We can create the new imp, beacuse we found an empty slot
|
||||
if (iProfileId != -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LaptopSaveInfo.iVoiceId = iProfileId - PLAYER_GENERATED_CHARACTER_ID;
|
||||
|
||||
// close file
|
||||
FileClose(hFile);
|
||||
|
||||
if( LaptopSaveInfo.iCurrentBalance < COST_OF_PROFILE )
|
||||
// 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
|
||||
{
|
||||
// not enough
|
||||
return;
|
||||
// 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);
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ void ExitIMPConfirm( void );
|
||||
void HandleIMPConfirm( void );
|
||||
|
||||
BOOLEAN AddCharacterToPlayersTeam( void );
|
||||
void LoadImpCharacter( STR fileName );
|
||||
BOOLEAN LoadImpCharacter( STR fileName );
|
||||
void WriteOutCurrentImpCharacter( INT32 iProfileId );
|
||||
void WriteOutCurrentImpCharacter( INT32 iProfileId, STR fileName );
|
||||
|
||||
@@ -15,9 +15,5 @@ void ResetIMPCharactersEyesAndMouthOffsets( UINT8 ubMercProfileID );
|
||||
|
||||
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
|
||||
|
||||
|
||||
+40
-24
@@ -382,8 +382,6 @@ void HandleTextEvent( UINT32 uiKey )
|
||||
|
||||
void ProcessPlayerInputActivationString( void )
|
||||
{
|
||||
INT16 iNextSlot = -1;
|
||||
|
||||
// prcess string to see if it matches activation string
|
||||
|
||||
if( NumberOfMercsOnPlayerTeam() >= 18 )
|
||||
@@ -392,45 +390,63 @@ void ProcessPlayerInputActivationString( void )
|
||||
char charPlayerActivationString[32];
|
||||
wcstombs(charPlayerActivationString,pPlayerActivationString,32);
|
||||
|
||||
iNextSlot = GetNextFreeIMPSlot();
|
||||
|
||||
// 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( ( ( wcscmp(pPlayerActivationString, L"XEP624") == 0 ) || ( wcscmp(pPlayerActivationString, L"xep624") == 0 ) ) &&( LaptopSaveInfo.gfNewGameLaptop < 2 ) )
|
||||
{
|
||||
//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 ) )
|
||||
if (GetFilledIMPSlots(-1) < gGameExternalOptions.iMaxIMPCharacters)
|
||||
{
|
||||
// Kaiden: Need to reset skills, attributes and personalities with the new UB Method.
|
||||
ResetSkillsAttributesAndPersonality( );
|
||||
ClearAllSkillsList( );
|
||||
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
|
||||
{
|
||||
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
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -798,6 +798,85 @@ void IMPMainPageNotSelectableBtnCallback(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
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 )
|
||||
{
|
||||
|
||||
@@ -9,6 +9,9 @@ void HandleIMPMainPage( void );
|
||||
void NextProfilingMode( void );
|
||||
void ShadeUnSelectableButtons( void );
|
||||
|
||||
// WANNE NEW
|
||||
INT32 GetFreeIMPSlot(INT32 iIMPId);
|
||||
INT32 GetFilledIMPSlots( INT8 iSex );
|
||||
|
||||
extern INT32 iCurrentProfileMode;
|
||||
|
||||
|
||||
+92
-46
@@ -2,7 +2,6 @@
|
||||
#include "Laptop All.h"
|
||||
#else
|
||||
#include "CharProfile.h"
|
||||
#include "IMP Confirm.h"
|
||||
#include "IMP Voices.h"
|
||||
#include "IMP MainPage.h"
|
||||
#include "IMP HomePage.h"
|
||||
@@ -23,8 +22,11 @@
|
||||
#endif
|
||||
|
||||
//current and last pages
|
||||
|
||||
// WANNE NEW: Set iLastVoice dynamically, skip used voices
|
||||
INT32 iCurrentVoices = 0;
|
||||
INT32 iLastVoice = 2;
|
||||
|
||||
INT32 iVoiceId = 0;
|
||||
|
||||
//INT32 iVoiceId = 0;
|
||||
|
||||
@@ -67,7 +69,11 @@ void EnterIMPVoices( void )
|
||||
fVoiceBVisited = FALSE;
|
||||
fVoiceCVisited = FALSE;
|
||||
|
||||
// create buttons
|
||||
// Set the initialize voice
|
||||
iVoiceId = -1;
|
||||
IncrementVoice();
|
||||
|
||||
// create buttons
|
||||
CreateIMPVoicesButtons( );
|
||||
|
||||
// create mouse regions
|
||||
@@ -79,21 +85,6 @@ void EnterIMPVoices( void )
|
||||
// play voice once
|
||||
uiVocVoiceSound = PlayVoice( );
|
||||
|
||||
//if the character is a male
|
||||
if( fCharacterIsMale )
|
||||
{
|
||||
iLastVoice = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
iLastVoice = 2;
|
||||
}
|
||||
|
||||
if( iCurrentVoices > iLastVoice )
|
||||
{
|
||||
iCurrentVoices = iLastVoice;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -150,21 +141,55 @@ void HandleIMPVoices( void )
|
||||
return;
|
||||
}
|
||||
|
||||
BOOLEAN IsIMPSlotFree(INT32 iIMPId)
|
||||
{
|
||||
if (wcscmp(gMercProfiles[iIMPId].zName, L"") == 0)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// WANNE NEW
|
||||
void IncrementVoice( void )
|
||||
{
|
||||
// cycle to next voice
|
||||
|
||||
iCurrentVoices++;
|
||||
INT32 iIMPIndex = -1;
|
||||
INT32 iOffset;
|
||||
INT32 i;
|
||||
|
||||
// gone too far?
|
||||
if( iCurrentVoices > iLastVoice )
|
||||
iVoiceId++;
|
||||
|
||||
if (iVoiceId > 2)
|
||||
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;
|
||||
}
|
||||
@@ -172,17 +197,42 @@ void IncrementVoice( void )
|
||||
|
||||
void DecrementVoice( void )
|
||||
{
|
||||
// cycle to previous voice
|
||||
|
||||
iCurrentVoices--;
|
||||
INT32 iIMPIndex = -1;
|
||||
INT32 iOffset;
|
||||
INT32 i;
|
||||
|
||||
// gone too far?
|
||||
if( iCurrentVoices < 0 )
|
||||
iVoiceId--;
|
||||
|
||||
if (iVoiceId < 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
|
||||
if( ! SoundIsPlaying( uiVocVoiceSound ) )
|
||||
{
|
||||
uiVocVoiceSound = PlayVoice( );
|
||||
uiVocVoiceSound = PlayVoice( );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -386,18 +436,14 @@ void BtnIMPVoicesDoneCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
// set voice id, to grab character slot
|
||||
|
||||
// WANNE 10:
|
||||
//if( fCharacterIsMale == TRUE )
|
||||
//{
|
||||
// LaptopSaveInfo.iVoiceId = iCurrentVoices;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// LaptopSaveInfo.iVoiceId = iCurrentVoices + 3;
|
||||
//}
|
||||
|
||||
// Get the next free imp slot
|
||||
LaptopSaveInfo.iVoiceId = GetNextFreeIMPSlot() - PLAYER_GENERATED_CHARACTER_ID;
|
||||
|
||||
if( fCharacterIsMale == TRUE )
|
||||
{
|
||||
LaptopSaveInfo.iVoiceId = iCurrentVoices;
|
||||
}
|
||||
else
|
||||
{
|
||||
LaptopSaveInfo.iVoiceId = iCurrentVoices + 3;
|
||||
}
|
||||
|
||||
// set button up image pending
|
||||
fButtonPendingFlag = TRUE;
|
||||
|
||||
@@ -98,19 +98,18 @@ void RenderProfileBackGround( void )
|
||||
|
||||
// get the video object
|
||||
GetVideoObject(&hHandle, guiBACKGROUND);
|
||||
|
||||
// WANNE
|
||||
|
||||
// render each row 5 times wide, 5 tiles high
|
||||
for(iCounter = 0; iCounter < 4; iCounter++)
|
||||
{
|
||||
|
||||
// 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 + 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 + 3 * CHAR_PROFILE_BACKGROUND_TILE_WIDTH, LAPTOP_SCREEN_WEB_UL_Y + iCounter * CHAR_PROFILE_BACKGROUND_TILE_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
|
||||
}
|
||||
|
||||
|
||||
// dirty buttons
|
||||
MarkButtonsDirty( );
|
||||
|
||||
|
||||
@@ -2075,7 +2075,11 @@ STR16 pImpPopUpStrings[] =
|
||||
L"Geen geldige optie op dit moment.",
|
||||
L"Om een nauwkeurig profiel te maken, moet je ruimte hebben voor tenminste één teamlid.",
|
||||
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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -2076,7 +2076,11 @@ STR16 pImpPopUpStrings[] =
|
||||
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"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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -2064,7 +2064,11 @@ STR16 pImpPopUpStrings[] =
|
||||
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"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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1992,7 +1992,11 @@ STR16 pImpPopUpStrings[] =
|
||||
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"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
|
||||
|
||||
@@ -2058,7 +2058,11 @@ STR16 pImpPopUpStrings[] =
|
||||
L"Opzione non valida questa volta.",
|
||||
L"Per completare un profilo accurato, dovete aver spazio per almeno uno dei membri della squadra.",
|
||||
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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -2058,7 +2058,11 @@ STR16 pImpPopUpStrings[] =
|
||||
L"Opcja tym razem nieaktywna.",
|
||||
L"Aby wykonać profil, musisz mieć miejsce dla przynajmniej jednego członka załogi.",
|
||||
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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -2067,7 +2067,11 @@ STR16 pImpPopUpStrings[] =
|
||||
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 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.",
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user