Files
source/Laptop/IMP Compile Character.cpp
T
Wanne d5b4599e9c New Trait: Snitch (Trait 22) (by anv)
Every midnight snitches will give you a report about their collegues' opinions. Information includes:
- merc whining about high death rate,
- merc whining about player reputation,
- merc whining about his low morale,
- merc whining about some other merc (unliked, not only hated),
- merc planning to quit (leave without renewing contract, only AIM mercs) next day,
- merc whining about player inactivity,
- merc whining about player owing them money (you can only owe money to MERC mercs).

List of snitches (trait 22)
Beth
Bud
Buzz
Carp
Ears
Gary
Hurl
Lance
Leon
Weasel

see: http://www.bears-pit.com/board/ubbthreads.php/topics/329412/Snitches_+_Externalised_morale.html

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6723 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2014-01-01 12:02:23 +00:00

775 lines
20 KiB
C++

#ifdef PRECOMPILEDHEADERS
#include "Laptop All.h"
#include "IMP Skill Trait.h"
#include "GameSettings.h"
#else
#include "laptop.h"
#include "CharProfile.h"
#include "Utilities.h"
#include "Debug.h"
#include "WordWrap.h"
#include "Encrypted File.h"
#include "GameSettings.h"
#include "IMPVideoObjects.h"
#include "IMP MainPage.h"
#include "IMP Personality Entrance.h"
#include "IMP Skill Trait.h"
#include "IMP Attribute Selection.h"
#include "IMP Portraits.h"
#include "IMP Compile Character.h"
#include "Soldier Profile Type.h"
#include "Soldier Profile.h"
#include "Animation Data.h"
#include "random.h"
#include "LaptopSave.h"
// 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
INT32 AttitudeList[ ATTITUDE_LIST_SIZE ];
INT32 iLastElementInAttitudeList = 0;
INT32 SkillsList[ ATTITUDE_LIST_SIZE ];
INT32 BackupSkillsList[ ATTITUDE_LIST_SIZE ];
INT32 iLastElementInSkillsList = 0;
INT32 PersonalityList[ ATTITUDE_LIST_SIZE ];
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 ];
/*{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
};
STR8 pPlayerSelectedFaceFileNames[ NUMBER_OF_PLAYER_PORTRAITS ]=
{
"Faces\\200.sti",
"Faces\\201.sti",
"Faces\\202.sti",
"Faces\\203.sti",
"Faces\\204.sti",
"Faces\\205.sti",
"Faces\\206.sti",
"Faces\\207.sti",
"Faces\\208.sti",
"Faces\\209.sti",
"Faces\\210.sti",
"Faces\\211.sti",
"Faces\\212.sti",
"Faces\\213.sti",
"Faces\\214.sti",
"Faces\\215.sti",
};
STR8 pPlayerSelectedBigFaceFileNames[ NUMBER_OF_PLAYER_PORTRAITS ]=
{
"Faces\\BigFaces\\200.sti",
"Faces\\BigFaces\\201.sti",
"Faces\\BigFaces\\202.sti",
"Faces\\BigFaces\\203.sti",
"Faces\\BigFaces\\204.sti",
"Faces\\BigFaces\\205.sti",
"Faces\\BigFaces\\206.sti",
"Faces\\BigFaces\\207.sti",
"Faces\\BigFaces\\208.sti",
"Faces\\BigFaces\\209.sti",
"Faces\\BigFaces\\210.sti",
"Faces\\BigFaces\\211.sti",
"Faces\\BigFaces\\212.sti",
"Faces\\BigFaces\\213.sti",
"Faces\\BigFaces\\214.sti",
"Faces\\BigFaces\\215.sti",
};
*/
// function declarations
void SelectMercFace( void );
void SetMercSkinAndHairColors( void );
BOOLEAN ShouldThisMercHaveABigBody( void );
void CreateACharacterFromPlayerEnteredStats( void )
{
// Kaiden: Seems like as good a place as any to stash this function call to
// ensure that these lists don't get overwritten or Nulled due to the amount
// of changes and revisions that have been made to personalities and attitudes.
CreatePlayersPersonalitySkillsAndAttitude();
// copy over full name
wcscpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].zName, pFullName );
// the nickname
wcscpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].zNickname, pNickName );
// gender
if ( fCharacterIsMale == TRUE )
{
// male
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSex = MALE;
}
else
{
// female
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSex = FEMALE;
}
// attributes
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bLifeMax = ( INT8 )iHealth;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bLife = ( INT8 )iHealth;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bAgility = ( INT8 )iAgility;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bStrength = ( INT8 )iStrength;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bDexterity = ( INT8 )iDexterity;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bWisdom = ( INT8 )iWisdom;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bLeadership = ( INT8 )iLeadership;
// skills
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bMarksmanship = ( INT8 )iMarksmanship;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bMedical = ( INT8 )iMedical;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bMechanical = ( INT8 )iMechanical;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bExplosive = ( INT8 )iExplosives;
// personality
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bDisability = ( INT8 )iPersonality;
// attitude
// 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;
// Flugente: background
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usBackground = usBackground;
// Flugente: sexism, racsim etc.
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bRace = ( INT8 )bRace;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bNationality = ( INT8 )bNationality;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bAppearance = ( INT8 )bAppearance;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bAppearanceCareLevel = ( INT8 )bAppearanceCareLevel;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bRefinement = ( INT8 )bRefinement;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bRefinementCareLevel = ( INT8 )bRefinementCareLevel;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bHatedNationality = ( INT8 )bHatedNationality;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bHatedNationalityCareLevel = ( INT8 )bHatedNationalityCareLevel;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bRacist = ( INT8 )bRacist;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bSexist = ( UINT8 )bSexist;
// WDS: Advanced start
//gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bExpLevel = gGameExternalOptions.ubIMPStartingLevel;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bExpLevel = StartingLevelChosen(); // We now choose the starting level on IMP creation - SANDRO
// set time away
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].bMercStatus = 0;
// face
SelectMercFace( );
// Option for badass added - SANDRO
if (bBadAssSelected())
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].uiBodyTypeSubFlags = 1;
return;
}
BOOLEAN DoesCharacterHaveAnAttitude( void )
{
// simply checks if caracter has an attitude other than normal
switch( iAttitude )
{
case ATT_LONER:
case ATT_PESSIMIST:
case ATT_ARROGANT:
case ATT_BIG_SHOT:
case ATT_ASSHOLE:
case ATT_COWARD:
return( TRUE );
default:
return( FALSE );
}
}
BOOLEAN DoesCharacterHaveAPersoanlity( void )
{
if( iPersonality != NO_DISABILITY )
{
// yep
return ( TRUE );
}
else
{
// nope
return ( FALSE );
}
// Kaiden: Following is the original UB section:
// The fist return( FALSE ); Statement was the only
// thing uncommented.
/*
// only one we can get is PSYCHO, and that is not much of a penalty
return( FALSE );
// simply checks if caracter has a personality other than normal
if( iPersonality != NO_DISABILITY )
{
// yep
return ( TRUE );
}
else
{
// nope
return ( FALSE );
}
*/
}
void CreatePlayerAttitude( void )
{
// DLETED UNUSED PART OF THE CODE - SANDRO
iAttitude = iChosenCharacterTrait();
}
void AddAnAttitudeToAttitudeList( INT8 bAttitude )
{
// adds an attitude to attitude list
if( iLastElementInAttitudeList < ATTITUDE_LIST_SIZE)
{
// add element
AttitudeList[ iLastElementInAttitudeList ] = ( INT32 )bAttitude;
// increment attitude list counter
iLastElementInAttitudeList++;
}
return;
}
void AddSkillToSkillList( INT8 bSkill )
{
// adds a skill to skills list
if( iLastElementInSkillsList < ATTITUDE_LIST_SIZE)
{
// add element
SkillsList[ iLastElementInSkillsList ] = ( INT32 )bSkill;
// increment attitude list counter
iLastElementInSkillsList++;
}
return;
}
// Kaiden : Added to clear the list when first visiting the IMP homepage,
// Or for each visit there after.
void ClearAllSkillsList( void )
{
INT32 iLoop;
for ( iLoop = 0; iLoop < ATTITUDE_LIST_SIZE; iLoop++ ) // SANDRO - better clear everything to be sure
{
SkillsList[ iLoop ] = 0;
}
iLastElementInSkillsList = 0;
return;
}
void RemoveSkillFromSkillsList( INT32 iIndex )
{
INT32 iLoop;
// remove a skill from the index given and shorten the list
if ( iIndex < iLastElementInSkillsList )
{
memset( BackupSkillsList, 0, ATTITUDE_LIST_SIZE * sizeof( INT32 ) );
// use the backup array to create a version of the array without
// this index
for ( iLoop = 0; iLoop < iIndex; iLoop++ )
{
BackupSkillsList[ iLoop ] = SkillsList[ iLoop ];
}
for ( iLoop = iIndex + 1; iLoop < iLastElementInSkillsList; iLoop++ )
{
BackupSkillsList[ iLoop - 1 ] = SkillsList[ iLoop ];
}
// now copy this over to the skills list
memcpy( SkillsList, BackupSkillsList, ATTITUDE_LIST_SIZE * sizeof( INT32 ) );
// reduce recorded size by 1
iLastElementInSkillsList--;
}
}
INT32 FindSkillInSkillsList( INT32 iSkill )
{
INT32 iLoop;
for ( iLoop = 0; iLoop < iLastElementInSkillsList; iLoop++ )
{
if ( SkillsList[ iLoop ] == iSkill )
{
return( iLoop );
}
}
return( -1 );
}
void ValidateSkillsList( void )
{
INT32 iIndex;//, iValue;
MERCPROFILESTRUCT * pProfile;
// remove from the generated traits list any traits that don't match
// the character's skills
pProfile = &(gMercProfiles[ LaptopSaveInfo.iIMPIndex ]);
if ( pProfile->bMechanical == 0 )
{
// without mechanical, electronics is useless
// Electronics/Technician check - SANDRO
if ( gGameOptions.fNewTraitSystem )
{
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;
}
}
// 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, sniper, ranger, gunslinger
if ( gGameOptions.fNewTraitSystem ) // old/new traits - SANDRO
{
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;
}
else
{
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 )
{
ValidateSkillsList();
// Kaiden: This section was added in it's place:
// SANDRO - Note: this is actually used only for old trait system
if( iLastElementInSkillsList > 0 )
{
iSkillA = SkillsList[ 0 ];
}
if( iLastElementInSkillsList > 1 )
{
iSkillB = SkillsList[ 1 ];
}
}
void AddAPersonalityToPersonalityList( INT8 bPersonlity )
{
// CJC, Oct 26 98: prevent personality list from being generated
// because no dialogue was written to support PC personality quotes
// BUT we can manage this for PSYCHO okay
//Kaiden: But we're going to try it anyway screw dialoge.
// Commenting out the below if test
//if ( bPersonlity != PSYCHO )
//{
// return;
//}
// will add a persoanlity to persoanlity list
if( iLastElementInPersonalityList < ATTITUDE_LIST_SIZE)
{
// add element
PersonalityList[ iLastElementInPersonalityList ] = ( INT32 )bPersonlity;
// increment attitude list counter
iLastElementInPersonalityList++;
}
return;
}
void CreatePlayerPersonality( void )
{
// DELETED UNUSED PART OF THE CODE - SANDRO
iPersonality = iChosenDisabilityTrait();
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( );
// attitude
CreatePlayerAttitude( );
return;
}
void ResetSkillsAttributesAndPersonality( void )
{
// reset count of skills attributes and personality
iLastElementInPersonalityList = 0;
iLastElementInSkillsList = 0;
iLastElementInAttitudeList = 0;
}
void ResetIncrementCharacterAttributes( void )
{
// this resets any increments due to character generation
// attributes
iAddStrength = 0;
iAddDexterity = 0;
iAddWisdom = 0;
iAddAgility = 0;
iAddHealth = 0;
iAddLeadership = 0;
// skills
iAddMarksmanship = 0;
iAddExplosives = 0;
iAddMedical = 0;
iAddMechanical = 0;
}
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;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubFaceIndex = ( 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;
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubFaceIndex = ( 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
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesX = sFacePositions[ iPortraitNumber ][ 0 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usEyesY = sFacePositions[ iPortraitNumber ][ 1 ];
// mouth
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthX = sFacePositions[ iPortraitNumber ][ 2 ];
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].usMouthY = sFacePositions[ iPortraitNumber ][ 3 ];
*/
// set merc skins and hair color
SetMercSkinAndHairColors( );
return;
}
void SetMercSkinAndHairColors( void )
{
// DELETED UNUSED PART OF THE CODE - SANDRO
// skin strings
STR sSkinStrings[]={
"PINKSKIN",
"TANSKIN",
"DARKSKIN",
"BLACKSKIN",
};
// the hair colors
STR sHairStrings[]={
"BROWNHEAD",
"BLACKHEAD",
"WHITEHEAD",
"BLONDHEAD",
"REDHEAD",
};
// shirts
STR sShirtStrings[]={
"WHITEVEST",
"GYELLOWSHIRT",
"YELLOWVEST",
"greyVEST",
"BROWNVEST",
"PURPLESHIRT",
"BLUEVEST",
"JEANVEST",
"GREENVEST",
"REDVEST",
"BLACKSHIRT",
};//shirts
// shirts
STR sPantStrings[]={
"BLUEPANTS",
"BLACKPANTS",
"JEANPANTS",
"TANPANTS",
"BEIGEPANTS",
"GREENPANTS",
};//pants
// DELETED UNUSED PART OF THE CODE - SANDRO
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].HAIR, sHairStrings[ iChosenHair() ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].SKIN, sSkinStrings[ iChosenSkin() ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].PANTS, sPantStrings[ iChosenPants() ] );
strcpy( gMercProfiles[ LaptopSaveInfo.iIMPIndex ].VEST, sShirtStrings[ iChosenShirt() ] );
}
void HandleMercStatsForChangesInFace( )
{
if ( fLoadingCharacterForPreviousImpProfile )
{
return;
}
//add the skills (major) to the skills list
AddSelectedSkillsToSkillsList();
if ( gGameOptions.fNewTraitSystem ) // SANDRO - add also minor traits
AddSelectedMinorTraitsToSkillsList();
// now figure out skills
CreatePlayerSkills();
// body type
if ( fCharacterIsMale )
{
// male
// big or regular
// Madd - don't override the skills - override the body type instead
// 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
{
if (!gGameOptions.fNewTraitSystem) // SANDRO - traits
{
if (iSkillA == MARTIALARTS_OT )
iSkillA = HANDTOHAND_OT;
if (iSkillB == MARTIALARTS_OT )
iSkillB = HANDTOHAND_OT;
}
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = BIGMALE;
}
else
{
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGMALE;
}
}
else
{
// female
gMercProfiles[ LaptopSaveInfo.iIMPIndex ].ubBodyType = REGFEMALE;
if (!gGameOptions.fNewTraitSystem) // SANDRO - traits
{
if( iSkillA == MARTIALARTS_OT )
iSkillA = HANDTOHAND_OT;
if( iSkillB == MARTIALARTS_OT )
iSkillB = HANDTOHAND_OT;
}
}
if (gGameOptions.fNewTraitSystem)
{
for ( UINT8 ubCnt = 0; ubCnt < gSkillTraitValues.ubMaxNumberOfTraitsForIMP; 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 )
{
// We can now choose this ourselves - SANDRO
return( bBigBodySelected() );
}