- 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
+5 -1
View File
@@ -257,6 +257,7 @@ void InitGameSettings()
gGameSettings.fOptions[ TOPTION_TRACERS_FOR_SINGLE_FIRE ] = FALSE;
gGameSettings.fOptions[ TOPTION_RAIN_SOUND ] = TRUE;
gGameSettings.fOptions[ TOPTION_ALLOW_CROWS ] = TRUE;
gGameSettings.fOptions[ TOPTION_USE_RANDOM_PERSONALITY ] = FALSE;
gGameSettings.ubSizeOfDisplayCover = 4;
gGameSettings.ubSizeOfLOS = 4;
@@ -290,6 +291,9 @@ void LoadGameExternalOptions()
//################# Laptop Settings #################
// WANNE: Maximum number of imp characters (0 to 6)
gGameExternalOptions.iMaxIMPCharacters = iniReader.ReadInteger("JA2 Laptop Settings","MAX_IMP_CHARACTERS",1);
//Character generation
gGameExternalOptions.iMinAttribute = iniReader.ReadInteger("JA2 Laptop Settings","MIN_ATTRIBUTE_POINT",35);
gGameExternalOptions.iMaxAttribute = iniReader.ReadInteger("JA2 Laptop Settings","MAX_ATTRIBUTE_POINT",90);
@@ -297,7 +301,7 @@ void LoadGameExternalOptions()
gGameExternalOptions.iMaxZeroBonus = iniReader.ReadInteger("JA2 Laptop Settings","MAX_ZERO_BONUS",15);
gGameExternalOptions.iStartAttribute = iniReader.ReadInteger("JA2 Laptop Settings","START_ATTRIBUTE",55);
gGameExternalOptions.fPers_att = iniReader.ReadBoolean("JA2 Laptop Settings","USE_RANDOM_PERSONALITY",FALSE);
//gGameExternalOptions.fPers_att = iniReader.ReadBoolean("JA2 Laptop Settings","USE_RANDOM_PERSONALITY",FALSE);
gGameExternalOptions.iCustomPersonality = iniReader.ReadInteger("JA2 Laptop Settings","CUSTOM_PERSONALITY",0);
gGameExternalOptions.iCustomAttitude = iniReader.ReadInteger("JA2 Laptop Settings","CUSTOM_ATTITUDE",0);
+3 -1
View File
@@ -51,6 +51,7 @@ enum
TOPTION_TRACERS_FOR_SINGLE_FIRE,
TOPTION_RAIN_SOUND,
TOPTION_ALLOW_CROWS,
TOPTION_USE_RANDOM_PERSONALITY,
NUM_GAME_OPTIONS, //Toggle up this will be able to be Toggled by the player
@@ -142,6 +143,7 @@ typedef struct
BOOLEAN fSellAll;
INT16 iPriceModifier;
INT32 iMaxIMPCharacters;
INT32 iMinAttribute;
INT32 iMaxAttribute;
INT32 iImpAttributePoints;
@@ -177,7 +179,7 @@ typedef struct
BOOLEAN fMercDayOne;
BOOLEAN fAllMercsAvailable;
BOOLEAN fPers_att;
//BOOLEAN fPers_att;
INT8 iCustomPersonality;
INT8 iCustomAttitude;
BIN
View File
Binary file not shown.
+3
View File
@@ -362,10 +362,13 @@ void BtnIMPBeginScreenDoneCallback(GUI_BUTTON *btn,INT32 reason)
}
else
{
// WANNE:
/*
if( CheckCharacterInputForEgg( ) )
{
fEggOnYouFace = TRUE;
}
*/
}
+120 -121
View File
@@ -249,84 +249,85 @@ 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 );
if(gGameExternalOptions.fPers_att)
// 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 )
{
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 );
return;
}
// this function will 'roll a die' and decide if any attitude does exists
INT32 iDiceValue = 0;
INT32 iCounter = 0, iCounter2 = 0;
// count # of hits for each attitude
for ( iCounter = 0; iCounter < iLastElementInAttitudeList; iCounter++ )
{
iAttitudeHits[ AttitudeList[ iCounter ] ]++;
}
INT32 iAttitudeHits[NUM_ATTITUDES] = { 0 };
INT32 iHighestHits = 0;
INT32 iNumAttitudesWithHighestHits = 0;
iAttitude = ATT_NORMAL;
if ( iLastElementInAttitudeList == 0 )
// find highest # of hits for any attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
if ( iAttitudeHits[ iCounter ] )
{
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 ] )
if ( iAttitudeHits[ iCounter ] > iHighestHits )
{
if ( iAttitudeHits[ iCounter ] > iHighestHits )
{
iHighestHits = __max( iHighestHits, iAttitudeHits[ iCounter ] );
iNumAttitudesWithHighestHits = 1;
}
else if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
iNumAttitudesWithHighestHits++;
}
iHighestHits = __max( iHighestHits, iAttitudeHits[ iCounter ] );
iNumAttitudesWithHighestHits = 1;
}
}
// roll dice
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
// find attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
if ( iAttitudeHits[ iCounter ] == iHighestHits )
else if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
if ( iCounter2 == iDiceValue )
{
// this is it!
iAttitude = iCounter2;
break;
}
else
{
// one of the next attitudes...
iCounter2++;
}
iNumAttitudesWithHighestHits++;
}
}
}
else
// roll dice
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
// find attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
iAttitude = gGameExternalOptions.iCustomAttitude;
if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
if ( iCounter2 == iDiceValue )
{
// this is it!
iAttitude = iCounter2;
break;
}
else
{
// one of the next attitudes...
iCounter2++;
}
}
}
}
else
{
iAttitude = gGameExternalOptions.iCustomAttitude;
}
}
@@ -592,84 +593,82 @@ 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 );
if(gGameExternalOptions.fPers_att)
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++)
{
// 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 );
}*/
iDiceValue = Random( iLastElementInPersonalityList + 1 );
INT32 iDiceValue = 0;
INT32 iCounter = 0;
INT32 iCounter2 = 0;
// 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));
// 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; iCounter < 20; iCounter2++)
if( PersonalityList[ iDiceValue ] == NO_PERSONALITYTRAIT )
{
//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( );
@@ -933,7 +932,7 @@ void HandleMercStatsForChangesInFace( )
return;
}
//add the skills to the skills list
//add the skills to the skills listgMercProfiles
AddSelectedSkillsToSkillsList();
// now figure out skills
+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;
+4
View File
@@ -15,5 +15,9 @@ void ResetIMPCharactersEyesAndMouthOffsets( UINT8 ubMercProfileID );
BOOLEAN ImpExists ( STR fileName );
// WANNE 10:
INT32 GetNextFreeIMPSlot( void );
INT32 GetCurrentIMPSlot( void );
#endif
+38 -28
View File
@@ -382,6 +382,8 @@ void HandleTextEvent( UINT32 uiKey )
void ProcessPlayerInputActivationString( void )
{
INT16 iNextSlot = -1;
// prcess string to see if it matches activation string
if( NumberOfMercsOnPlayerTeam() >= 18 )
@@ -390,39 +392,47 @@ void ProcessPlayerInputActivationString( void )
char charPlayerActivationString[32];
wcstombs(charPlayerActivationString,pPlayerActivationString,32);
//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 ) )
iNextSlot = GetNextFreeIMPSlot();
// We have at least one more free slot for a imp character
if (iNextSlot != -1)
{
// Kaiden: Need to reset skills, attributes and personalities with the new UB Method.
ResetSkillsAttributesAndPersonality( );
ClearAllSkillsList( );
iCurrentImpPage = IMP_MAIN_PAGE;
//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 ) )
{
// 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[ 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);
}
}
}
//Madd multiple imps else if( ( wcscmp(pPlayerActivationString, L"90210") == 0 ) && ( LaptopSaveInfo.fIMPCompletedFlag == FALSE ) )
else if( wcscmp(pPlayerActivationString, L"90210") == 0 )
else
{
LoadImpCharacter( IMP_MERC_FILENAME );
}
// Madd: load characters by name
else if ( ImpExists( charPlayerActivationString ) )
{
LoadImpCharacter( charPlayerActivationString );
DoLapTopMessageBox( MSG_BOX_IMP_STYLE, pImpPopUpStrings[ 7 ], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
}
else
{
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;
}
+15 -8
View File
@@ -2,6 +2,7 @@
#include "Laptop All.h"
#else
#include "CharProfile.h"
#include "IMP Confirm.h"
#include "IMP Voices.h"
#include "IMP MainPage.h"
#include "IMP HomePage.h"
@@ -383,14 +384,20 @@ void BtnIMPVoicesDoneCallback(GUI_BUTTON *btn,INT32 reason)
}
*/
// set voice id, to grab character slot
if( fCharacterIsMale == TRUE )
{
LaptopSaveInfo.iVoiceId = iCurrentVoices;
}
else
{
LaptopSaveInfo.iVoiceId = iCurrentVoices + 3;
}
// 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;
// set button up image pending
fButtonPendingFlag = TRUE;
+4 -3
View File
@@ -98,18 +98,19 @@ 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( );
+2
View File
@@ -2075,6 +2075,7 @@ 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"You have already reached the maximum number of I.M.P. characters.",
};
@@ -3530,6 +3531,7 @@ STR16 zOptionsScreenHelpText[] =
L"When ON, weapon ranges will be shown in tiles.",
L"When ON, tracer effect will be shown for single shots.",
L"When ON, you will hear rain noises when it is raining.",
L"When ON, I.M.P characters will get random personality and attitude.",
};
+8 -5
View File
@@ -2069,13 +2069,14 @@ STR16 pMercContractOverStrings[] =
STR16 pImpPopUpStrings[] =
{
L"Invalid Authorization Code",
L"You Are About To Restart The Entire Profiling Process. Are You Certain?",
L"Please Enter A Valid Full Name and Gender",
L"Invalid authorization code",
L"You are about to restart the entire profiling process. Are you certain?",
L"Please enter a valid full name and gender",
L"Preliminary analysis of your financial status shows that you cannot afford a profile analysis.",
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"Profile Already Completed.",
L"Profile already completed.",
L"You have already reached the maximum number of I.M.P. characters.",
};
@@ -3458,6 +3459,7 @@ STR16 zOptionsToggleText[] =
L"Tracer effect for single shot",
L"Rain noises",
L"Allow crows",
L"Random I.M.P personality",
};
//This is the help text associated with the above toggles.
@@ -3534,6 +3536,7 @@ STR16 zOptionsScreenHelpText[] =
L"When ON, tracer effect will be shown for single shots.",
L"When ON, you will hear rain noises when it is raining.",
L"When ON, the crows are present in game.",
L"When ON, I.M.P characters will get random personality and attitude.",
};
+3 -2
View File
@@ -2061,9 +2061,10 @@ STR16 pImpPopUpStrings[] =
L"Vous allez établir un nouveau profil. Etes-vous sûr de vouloir recommencer ?",
L"Veuillez entrer votre nom et votre sexe.",
L"Vous n'avez pas les moyens de vous offrir une analyse de profil.",
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"Profil déjà établi.",
L"You have already reached the maximum number of I.M.P. characters.",
};
@@ -3519,7 +3520,7 @@ STR16 zOptionsScreenHelpText[] =
L"When ON, weapon ranges will be shown in tiles.",
L"When ON, tracer effect will be shown for single shots.",
L"When ON, you will hear rain noises when it is raining.",
L"When ON, I.M.P characters will get random personality and attitude.",
};
+4 -2
View File
@@ -1992,6 +1992,7 @@ 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.",
};
// button labels used on the IMP site
@@ -2665,10 +2666,10 @@ STR16 BobbyRFilter[] =
// Guns
L"Schwere W.",
L"Pistole",
L"M. Pistole",
L"MP",
L"SMG",
L"Gewehr",
L"SS Gewehr",
L"SSG",
L"Sturmgew.",
L"MG",
L"Schrotfl.",
@@ -3340,6 +3341,7 @@ STR16 zOptionsScreenHelpText[] =
L"Wenn diese Funktion aktiviert ist, wird Tracereffekt auch für Einzelschüsse angezeigt.",
L"Wenn diese Funktion aktiviert ist, werden Regengeräusche hörbar falls es regnet.",
L"Wenn diese Funktion aktiviert ist, sind Krähen im Spiel vorhanden.",
L"Wenn diese Funktion aktiviert ist, erhalten B.S.E Charaktere zufällige Persönlichkeit und Einstellung.",
};
STR16 gzGIOScreenText[] =
+2 -1
View File
@@ -2055,9 +2055,10 @@ STR16 pImpPopUpStrings[] =
L"State per riiniziare l'intero processo di profilo. Ne siete certi?",
L"Inserite nome e cognome corretti oltre che al sesso",
L"L'analisi preliminare del vostro stato finanziario mostra che non potete offrire un'analisi di profilo.",
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"Profilo già completato.",
L"You have already reached the maximum number of I.M.P. characters.",
};
+2 -1
View File
@@ -2058,6 +2058,7 @@ 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"You have already reached the maximum number of I.M.P. characters.",
};
@@ -3512,7 +3513,7 @@ STR16 zOptionsScreenHelpText[] =
L"When ON, weapon ranges will be shown in tiles.",
L"When ON, tracer effect will be shown for single shots.",
L"When ON, you will hear rain noises when it is raining.",
L"When ON, I.M.P characters will get random personality and attitude.",
};
+3 -1
View File
@@ -2064,9 +2064,10 @@ STR16 pImpPopUpStrings[] =
L"Вы уверены, что хотите начать процесс записи профайла заново?",
L"Введите полное имя и пол",
L"Предварит.анализ ваших финансов показал, что у вас недостаточно денег на анализ.",
L"Сейчас вы не можете выбрать это.",
L"Ñåé÷àñ âû íå ìîæåòå âûáðàòü ýòî.",
L"Чтобы закончить анализ,нужно иметь место еще хотя бы для одного члена команды.",
L"Анализ уже завершен.",
L"You have already reached the maximum number of I.M.P. characters.",
};
@@ -3524,6 +3525,7 @@ STR16 zOptionsScreenHelpText[] =
L"When ON, tracer effect will be shown for single shots.",
L"When ON, you will hear rain noises when it is raining.",
L"When ON, the crows are present in game.",
L"When ON, I.M.P characters will get random personality and attitude.",
};