mirror of
https://github.com/1dot13/source.git
synced 2026-08-19 14:20:30 +02:00
************************************************************
* 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:
+179
-440
@@ -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() );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user