************************************************************

* Merged Source Code from Development Trunk: Revision 4063 *
************************************************************
- Source Code is merged from: https://81.169.133.124/source/ja2/branches/Wanne/JA2%201.13%20MP
- This will be the Source for the Beta 2011 Test

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@4064 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2011-01-18 09:11:09 +00:00
parent 44e1646410
commit 91087ca8c0
469 changed files with 118108 additions and 24678 deletions
+179 -440
View File
@@ -34,12 +34,15 @@
#include "Animation Data.h"
#include "random.h"
#include "LaptopSave.h"
// These 3 added - SANDRO
// These 4 added - SANDRO
#include "IMP Character Trait.h"
#include "IMP Disability Trait.h"
#include "IMP Color Choosing.h"
#include "IMP Minor Trait.h"
#endif
#include "IMP Confirm.h"
// how many times should a 'die' be rolled for skills of the same type?
#define HOW_MANY_ROLLS_FOR_SAME_SKILL_CHECK 20
@@ -57,8 +60,9 @@ INT32 iLastElementInPersonalityList = 0;
extern BOOLEAN fLoadingCharacterForPreviousImpProfile;
// positions of the face x and y for eyes and mouth for the 10 portraits
INT16 sFacePositions[ NUMBER_OF_PLAYER_PORTRAITS ][ 4 ]=
{
INT16 sFacePositions[ NUMBER_OF_PLAYER_PORTRAITS ][ 4 ];
/*{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
@@ -116,7 +120,7 @@ STR8 pPlayerSelectedBigFaceFileNames[ NUMBER_OF_PLAYER_PORTRAITS ]=
"Faces\\BigFaces\\214.sti",
"Faces\\BigFaces\\215.sti",
};
*/
// function declarations
void SelectMercFace( void );
@@ -135,8 +139,6 @@ void CreateACharacterFromPlayerEnteredStats( void )
// of changes and revisions that have been made to personalities and attitudes.
CreatePlayersPersonalitySkillsAndAttitude();
// copy over full name
wcscpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].zName, pFullName );
@@ -174,10 +176,14 @@ void CreateACharacterFromPlayerEnteredStats( void )
// personality
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bPersonalityTrait = ( INT8 )iPersonality;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bDisability = ( INT8 )iPersonality;
// attitude
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bAttitude = ( INT8 )iAttitude;
// SANDRO - decide here, if we use the default attitude or the new so called Character Trait for new traits
if ( gGameOptions.fNewTraitSystem)
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bCharacterTrait = ( INT8 )iAttitude;
else
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bAttitude = ( INT8 )iAttitude;
// WDS: Advanced start
//gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bExpLevel = gGameExternalOptions.ubIMPStartingLevel;
@@ -222,7 +228,7 @@ BOOLEAN DoesCharacterHaveAPersoanlity( void )
{
if( iPersonality != NO_PERSONALITYTRAIT )
if( iPersonality != NO_DISABILITY )
{
// yep
return ( TRUE );
@@ -242,7 +248,7 @@ BOOLEAN DoesCharacterHaveAPersoanlity( void )
return( FALSE );
// simply checks if caracter has a personality other than normal
if( iPersonality != NO_PERSONALITYTRAIT )
if( iPersonality != NO_DISABILITY )
{
// yep
return ( TRUE );
@@ -259,86 +265,8 @@ BOOLEAN DoesCharacterHaveAPersoanlity( void )
void CreatePlayerAttitude( void )
{
// We no longer need this - SANDRO
/*if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
{
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 );
// DLETED UNUSED PART OF THE CODE - SANDRO
// 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 )
{
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 )
{
iHighestHits = __max( iHighestHits, iAttitudeHits[ iCounter ] );
iNumAttitudesWithHighestHits = 1;
}
else if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
iNumAttitudesWithHighestHits++;
}
}
}
// roll dice
iDiceValue = Random( iNumAttitudesWithHighestHits + 1 );
// find attitude
for ( iCounter = 0; iCounter < NUM_ATTITUDES; iCounter++ )
{
if ( iAttitudeHits[ iCounter ] == iHighestHits )
{
if ( iCounter2 == iDiceValue )
{
// this is it!
iAttitude = iCounter2;
break;
}
else
{
// one of the next attitudes...
iCounter2++;
}
}
}
}
else
{
iAttitude = gGameExternalOptions.iCustomAttitude;
}*/
// Chosen by ourselves - SANDRO
iAttitude = iChosenCharacterTrait();
}
@@ -382,7 +310,7 @@ void ClearAllSkillsList( void )
{
INT32 iLoop;
for ( iLoop = 0; iLoop < iLastElementInSkillsList; iLoop++ )
for ( iLoop = 0; iLoop < ATTITUDE_LIST_SIZE; iLoop++ ) // SANDRO - better clear everything to be sure
{
SkillsList[ iLoop ] = 0;
}
@@ -445,132 +373,113 @@ void ValidateSkillsList( void )
if ( pProfile->bMechanical == 0 )
{
// without mechanical, electronics is useless
iIndex = FindSkillInSkillsList( ELECTRONICS );
if ( iIndex != -1 )
// Electronics/Technician check - SANDRO
if ( gGameOptions.fNewTraitSystem )
{
pProfile->bMechanical = 1;
iIndex = FindSkillInSkillsList( TECHNICIAN_NT );
if ( iIndex != -1 )
pProfile->bMechanical = 1;
}
else
{
iIndex = FindSkillInSkillsList( ELECTRONICS_OT );
if ( iIndex != -1 )
pProfile->bMechanical = 1;
iIndex = FindSkillInSkillsList( LOCKPICKING_OT );
if ( iIndex != -1 )
pProfile->bMechanical = 1;
}
}
// Kaiden using UB's code, lockpicking can't be removed from the list "yet".
// special check for lockpicking
//iValue = pProfile->bMechanical;
//iValue = ( iValue * pProfile->bWisdom ) / 100;
//iValue = ( iValue * pProfile->bDexterity ) / 100;
//if ( iValue + gbSkillTraitBonus[ LOCKPICKING ] < 50 )
//{
// // not good enough for lockpicking!
//
// // so is lockpicking
// iIndex = FindSkillInSkillsList( LOCKPICKING );
// while ( iIndex != -1 )
// {
// RemoveSkillFromSkillsList( iIndex );
// iIndex = FindSkillInSkillsList( LOCKPICKING );
// }
//}
// SANDRO - added to give 1 medical skill to doctors
if ( pProfile->bMedical == 0 && gGameOptions.fNewTraitSystem )
{
// without medical, Doctor trait is useless
iIndex = FindSkillInSkillsList( DOCTOR_NT );
if ( iIndex != -1 )
pProfile->bMedical = 1;
}
// SANDRO - added to give 1 explosive skill to dmolitions
if ( pProfile->bExplosive == 0 && gGameOptions.fNewTraitSystem )
{
iIndex = FindSkillInSkillsList( DEMOLITIONS_NT );
if ( iIndex != -1 )
pProfile->bExplosive = 1;
}
// SANDRO - added to give 1 Leadership skill to Squadleaders
if ( pProfile->bLeadership == 0 && gGameOptions.fNewTraitSystem )
{
// without medical, Doctor trait is useless
iIndex = FindSkillInSkillsList( SQUADLEADER_NT );
if ( iIndex != -1 )
pProfile->bLeadership = 1;
}
if ( pProfile->bMarksmanship == 0 )
{
// without marksmanship, the following traits are useless:
// auto weapons, heavy weapons
iIndex = FindSkillInSkillsList( AUTO_WEAPS );
if( iIndex != -1 )
// auto weapons, heavy weapons, sniper, ranger, gunslinger
if ( gGameOptions.fNewTraitSystem ) // old/new traits - SANDRO
{
//RemoveSkillFromSkillsList( iIndex );
//iIndex = FindSkillInSkillsList( AUTO_WEAPS );
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( AUTO_WEAPONS_NT );
if( iIndex != -1 )
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( HEAVY_WEAPONS_NT );
if( iIndex != -1 )
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( SNIPER_NT );
if( iIndex != -1 )
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( RANGER_NT );
if( iIndex != -1 )
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( GUNSLINGER_NT );
if( iIndex != -1 )
pProfile->bMarksmanship = 1;
}
// so is lockpicking
iIndex = FindSkillInSkillsList( HEAVY_WEAPS );
if( iIndex != -1 )
else
{
//RemoveSkillFromSkillsList( iIndex );
//iIndex = FindSkillInSkillsList( HEAVY_WEAPS );
pProfile->bMarksmanship = 1;
iIndex = FindSkillInSkillsList( AUTO_WEAPS_OT );
if( iIndex != -1 )
{
//RemoveSkillFromSkillsList( iIndex );
//iIndex = FindSkillInSkillsList( AUTO_WEAPS_OT );
pProfile->bMarksmanship = 1;
}
iIndex = FindSkillInSkillsList( HEAVY_WEAPS_OT );
if( iIndex != -1 )
{
//RemoveSkillFromSkillsList( iIndex );
//iIndex = FindSkillInSkillsList( HEAVY_WEAPONS_NT );
pProfile->bMarksmanship = 1;
}
}
}
}
void CreatePlayerSkills( void )
{
// this function will 'roll a die' and decide if any attitude does exists
INT32 iDiceValue = 0;
ValidateSkillsList();
/* Kaiden - Commented out in UB to skip the whole random skill thing
// roll dice
iDiceValue = Random( iLastElementInSkillsList );
// set attitude
iSkillA = SkillsList[ iDiceValue ];
// second dice value
iDiceValue = Random( iLastElementInSkillsList );
iSkillB = SkillsList[ iDiceValue ];
*/
// Kaiden: This section was added in it's place:
// Kaiden: This section was added in it's place:
// SANDRO - Note: this is actually used only for old trait system
if( iLastElementInSkillsList > 0 )
{
// set attitude
iSkillA = SkillsList[ 0 ];
}
if( iLastElementInSkillsList > 1 )
{
iSkillB = SkillsList[ 1 ];
}
else
{
iSkillB = SkillsList[ 0 ];
}
// allow expert level for generated merc so you CAN have two of the same
// but there is no such thing as expert level for electronics
while ( iSkillA == iSkillB && ( iSkillB == ELECTRONICS || iSkillB == AMBIDEXT ) )
{
// remove electronics as an option and roll again
RemoveSkillFromSkillsList( iDiceValue );
if ( iLastElementInSkillsList == 0 )
{
// ok, only one trait!
iSkillB = NO_SKILLTRAIT;
break;
}
else
{
iDiceValue = Random( iLastElementInSkillsList );
iSkillB = SkillsList[ iDiceValue ];
}
}
/*
// are the same,
// reroll until different, or until ATTITUDE_LIST_SIZE times
iSkillB = Random( iLastElementInSkillsList + 1 );
while( (iSkillA == iSkillB ) && ( iCounter < HOW_MANY_ROLLS_FOR_SAME_SKILL_CHECK ) )
{
// increment counter
iCounter++;
// next random
iSkillB = Random( iLastElementInSkillsList + 1 );
}
if( iCounter == ATTITUDE_LIST_SIZE )
{
iSkillB = NO_SKILLTRAIT;
}
return;
*/
}
@@ -604,82 +513,15 @@ void AddAPersonalityToPersonalityList( INT8 bPersonlity )
void CreatePlayerPersonality( void )
{
// DELETED UNUSED PART OF THE CODE - SANDRO
// Kaiden: Added for optional Mercenary personalities and attitudes
// We don't need this - SANDRO
/*if(gGameSettings.fOptions[TOPTION_USE_RANDOM_PERSONALITY] == TRUE)
{
// 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.
for (iCounter2 = 0; iCounter2 < 20; iCounter2++)
{
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;
}*/
// Chosen by ourselves - SANDRO
iPersonality = iChosenDisabilityTrait();
return;
}
void CreatePlayersPersonalitySkillsAndAttitude( void )
{
// creates personality, skills and attitudes from curretly built list
// personality
@@ -731,12 +573,52 @@ void ResetIncrementCharacterAttributes( void )
void SelectMercFace( void )
{
/*
UINT32 cnt;
for ( cnt = 0; cnt < MAX_NEW_IMP_PORTRAITS; cnt++ )
{
sFacePositions[ cnt ][ 0 ] = 0;
sFacePositions[ cnt ][ 1 ] = 0;
sFacePositions[ cnt ][ 2 ] = 0;
sFacePositions[ cnt ][ 3 ] = 0;
}
*/
// this procedure will select the approriate face for the merc and save offsets
// grab face filename
// strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubUnusedFaceFileName , pPlayerSelectedFaceFileNames[ iPortraitNumber ]);
if( fCharacterIsMale )
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubFaceIndex = 200 + ( UINT8 )iPortraitNumber;
// eyes
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesX = sFacePositions[ gIMPMaleValues[iPortraitNumber].uiEyeXPositions ][ 0 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesY = sFacePositions[ gIMPMaleValues[iPortraitNumber].uiEyeYPositions ][ 1 ];
// mouth
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthX = sFacePositions[ gIMPMaleValues[iPortraitNumber].uiMouthXPositions ][ 2 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthY = sFacePositions[ gIMPMaleValues[iPortraitNumber].uiMouthYPositions ][ 3 ];
}
else
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubFaceIndex = 200 + ( UINT8 )iPortraitNumber;
// eyes
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesX = sFacePositions[ gIMPFemaleValues[iPortraitNumber].uiEyeXPositions ][ 0 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesY = sFacePositions[ gIMPFemaleValues[iPortraitNumber].uiEyeYPositions ][ 1 ];
// mouth
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthX = sFacePositions[ gIMPFemaleValues[iPortraitNumber].uiMouthXPositions ][ 2 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthY = sFacePositions[ gIMPFemaleValues[iPortraitNumber].uiMouthYPositions ][ 3 ];
}
// now the offsets
/*
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubFaceIndex = 200 + ( UINT8 )iPortraitNumber;
// eyes
@@ -746,7 +628,7 @@ void SelectMercFace( void )
// mouth
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthX = sFacePositions[ iPortraitNumber ][ 2 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthY = sFacePositions[ iPortraitNumber ][ 3 ];
*/
// set merc skins and hair color
SetMercSkinAndHairColors( );
return;
@@ -754,40 +636,7 @@ void SelectMercFace( void )
void SetMercSkinAndHairColors( void )
{
// We don't need this - SANDRO
/*enum{ PINKSKIN, TANSKIN, DARKSKIN, BLACKSKIN, NUMSKINS };
enum{ BROWNHEAD, BLACKHEAD, //black skin (only this line )
WHITEHEAD, //dark skin (this line plus all above)
BLONDHEAD, REDHEAD, //pink/tan skin (this line plus all above )
NUMHEADS
};
enum
{
WHITEVEST,
GYELLOWSHIRT,
YELLOWVEST,
GREYVEST,
BROWNVEST,
PURPLESHIRT,
BLUEVEST,
JEANVEST,
GREENVEST,
REDVEST,
BLACKSHIRT,
NUMSHIRTS
};//shirts
enum
{
BLUEPANTS,
BLACKPANTS,
JEANPANTS,
TANPANTS,
BEIGEPANTS,
GREENPANTS,
NUMPANTS
};//pants*/
// DELETED UNUSED PART OF THE CODE - SANDRO
// skin strings
STR sSkinStrings[]={
@@ -832,117 +681,8 @@ void SetMercSkinAndHairColors( void )
"GREENPANTS",
};//pants
// We don't need this - SANDRO
// given the portrait number, set the merc's skin and hair color
/*INT16 sSkinColor = 0, sHairColor = 0, sShirtColor, sPantColor;
// DELETED UNUSED PART OF THE CODE - SANDRO
switch( iPortraitNumber )
{
case( 0 ):
sSkinColor = BLACKSKIN;
sHairColor = BROWNHEAD;
sShirtColor = JEANVEST;
sPantColor = JEANPANTS;
break;
case( 1 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = BROWNVEST;
sPantColor = TANPANTS;
break;
case( 2 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = WHITEVEST;
sPantColor = BLUEPANTS;
break;
case( 3 ):
sSkinColor = DARKSKIN;
sHairColor = BROWNHEAD;
sShirtColor = WHITEVEST;
sPantColor = BLACKPANTS;
break;
case( 4 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = GREYVEST;
sPantColor = GREENPANTS;
break;
case( 5 ):
sSkinColor = DARKSKIN;
sHairColor = BLACKHEAD;
sShirtColor = GREYVEST;
sPantColor = BLACKPANTS;
break;
case( 6 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = BROWNVEST;
sPantColor = BLUEPANTS;
break;
case( 7 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = BLACKSHIRT;
sPantColor = BLACKPANTS;
break;
case( 8 ):
sSkinColor = TANSKIN;
sHairColor = BROWNHEAD;
sShirtColor = BROWNVEST;
sPantColor = TANPANTS;
break;
case( 9 ):
sSkinColor = PINKSKIN;
sHairColor = BROWNHEAD;
sShirtColor = BROWNVEST;
sPantColor = BEIGEPANTS;
break;
case( 10 ):
sSkinColor = TANSKIN;
sHairColor = BLACKHEAD;
sShirtColor = BROWNVEST;
sPantColor = BLACKPANTS;
break;
case( 11 ):
sSkinColor = TANSKIN;
sHairColor = BLACKHEAD;
sShirtColor = BLACKSHIRT;
sPantColor = BLACKPANTS;
break;
case( 12 ):
sSkinColor = PINKSKIN;
sHairColor = BROWNHEAD;
sShirtColor = WHITEVEST;
sPantColor = GREENPANTS;
break;
case( 13 ):
sSkinColor = BLACKSKIN;
sHairColor = BROWNHEAD;
sShirtColor = GREYVEST;
sPantColor = BLACKPANTS;
break;
case( 14 ):
sSkinColor = TANSKIN;
sHairColor = REDHEAD;
sShirtColor = WHITEVEST;
sPantColor = JEANPANTS;
break;
case( 15 ):
sSkinColor = TANSKIN;
sHairColor = BLONDHEAD;
sShirtColor = BROWNVEST;
sPantColor = GREENPANTS;
break;
}
// now set them
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].HAIR, sHairStrings[ sHairColor ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].SKIN, sSkinStrings[ sSkinColor ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].PANTS, sPantStrings[ sPantColor ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].VEST, sShirtStrings[ sShirtColor ] );*/
// Cosen colors by ourselves - SANDRO
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].HAIR, sHairStrings[ iChosenHair() ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].SKIN, sSkinStrings[ iChosenSkin() ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].PANTS, sPantStrings[ iChosenPants() ] );
@@ -957,9 +697,12 @@ void HandleMercStatsForChangesInFace( )
return;
}
//add the skills to the skills list
//add the skills (major) to the skills list
AddSelectedSkillsToSkillsList();
if ( gGameOptions.fNewTraitSystem ) // SANDRO - add also minor traits
AddSelectedMinorTraitsToSkillsList();
// now figure out skills
CreatePlayerSkills();
@@ -969,60 +712,56 @@ void HandleMercStatsForChangesInFace( )
// male
// big or regular
// Madd - don't override the skills - override the body type instead
if( ShouldThisMercHaveABigBody() && iSkillA != MARTIALARTS && iSkillB != MARTIALARTS )
// this should not happen any more, we don't even offer the martial arts to big mercs - SANDRO
//if( ShouldThisMercHaveABigBody() && iSkillA != MARTIALARTS_OT && iSkillB != MARTIALARTS_OT )
if( ShouldThisMercHaveABigBody() ) // still added a safety check - SANDRO
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = BIGMALE;
if (!gGameOptions.fNewTraitSystem) // SANDRO - traits
{
if (iSkillA == MARTIALARTS_OT )
iSkillA = HANDTOHAND_OT;
if (iSkillB == MARTIALARTS_OT )
iSkillB = HANDTOHAND_OT;
}
//if( iSkillA == MARTIALARTS )
//{
// iSkillA = HANDTOHAND;
//}
//if( iSkillB == MARTIALARTS )
//{
// iSkillB = HANDTOHAND;
//}
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = BIGMALE;
}
else
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGMALE;
}
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGMALE;
}
}
else
{
// female
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGFEMALE;
// female
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGFEMALE;
if( iSkillA == MARTIALARTS )
if (!gGameOptions.fNewTraitSystem) // SANDRO - traits
{
iSkillA = HANDTOHAND;
}
if( iSkillB == MARTIALARTS )
{
iSkillB = HANDTOHAND;
if( iSkillA == MARTIALARTS_OT )
iSkillA = HANDTOHAND_OT;
if( iSkillB == MARTIALARTS_OT )
iSkillB = HANDTOHAND_OT;
}
}
// skill trait
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSkillTrait = ( INT8 )iSkillA;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSkillTrait2 = ( INT8 )iSkillB;
if (gGameOptions.fNewTraitSystem)
{
for ( UINT8 ubCnt = 0; ubCnt < gSkillTraitValues.ubMaxNumberOfTraits; ubCnt++ )
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSkillTraits[ ubCnt ] = ( INT8 )SkillsList[ ubCnt ];
}
}
else
{
// skill trait
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSkillTraits[0] = ( INT8 )iSkillA;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSkillTraits[1] = ( INT8 )iSkillB;
}
}
BOOLEAN ShouldThisMercHaveABigBody( void )
{
// should this merc be a big body type
// Madd - don't limit it by portrait
//if ( ( iPortraitNumber == 0 ) || ( iPortraitNumber == 6 ) || ( iPortraitNumber == 7 ) )
//{
// if ( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bStrength >= 75 )
// {
// return( TRUE );
// }
//}
//return( FALSE );
// We can now choose this ourselves - SANDRO
return( bBigBodySelected() );
}