mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
IMP slots are now purely defined by <Type>6</Type> in MercProfiles.xml. Removed MAX_IMP_CHARACTERS and IMP_XXX settings.
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8622 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -763,41 +763,7 @@ void LoadGameExternalOptions()
|
|||||||
gGameExternalOptions.fBackGround = iniReader.ReadBoolean("Data File Settings", "BACKGROUNDS", TRUE );
|
gGameExternalOptions.fBackGround = iniReader.ReadBoolean("Data File Settings", "BACKGROUNDS", TRUE );
|
||||||
|
|
||||||
//################# Merc Recruitment Settings #################
|
//################# Merc Recruitment Settings #################
|
||||||
|
|
||||||
// WDS: Allow flexible numbers of IMPs of each sex
|
|
||||||
// SANDRO - moved to the game itself
|
|
||||||
gGameExternalOptions.iMaxIMPCharacters = iniReader.ReadInteger("Recruitment Settings","MAX_IMP_CHARACTERS",1, 1, NUM_PROFILES);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Note: put -1 between male/female slots and -1 at end. This allows everything to be
|
|
||||||
// counted dynamically quite easily. Note that all the code assumes there is AT
|
|
||||||
// LEAST ONE slot for each sex. If that changes the code will have to be updated.
|
|
||||||
//
|
|
||||||
// Because errors in these values can really goof things up we will try to fix up bad
|
|
||||||
// values and use the defaults instead.
|
|
||||||
//
|
|
||||||
char caIMPCountStr[] = "IMP_%d";
|
|
||||||
char caCountStr[20];
|
|
||||||
|
|
||||||
gGameExternalOptions.iaIMPSlots = (INT32*)MemAlloc( (gGameExternalOptions.iMaxIMPCharacters) * sizeof( UINT32 ) );
|
|
||||||
for (int idx = 0; idx < gGameExternalOptions.iMaxIMPCharacters; ++idx)
|
|
||||||
{
|
|
||||||
sprintf( caCountStr, caIMPCountStr, idx+1);
|
|
||||||
gGameExternalOptions.iaIMPSlots[idx] = iniReader.ReadInteger("Recruitment Settings",caCountStr, -1, -1, NUM_PROFILES-1);
|
|
||||||
if (gGameExternalOptions.iaIMPSlots[idx] < 0)
|
|
||||||
{
|
|
||||||
if (idx < COUNT_STANDARD_MALE_SLOTS)
|
|
||||||
{
|
|
||||||
gGameExternalOptions.iaIMPSlots[idx] = FIRST_STANDARD_MALE_SLOT+idx;
|
|
||||||
}
|
|
||||||
else if ( idx < COUNT_STANDARD_FEMALE_SLOTS )
|
|
||||||
{
|
|
||||||
// This is bad so just use the last standard slot #
|
|
||||||
gGameExternalOptions.iaIMPSlots[idx] = FIRST_STANDARD_MALE_SLOT+COUNT_STANDARD_MALE_SLOTS-1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// silversurfer: read early recruitment options 1=immediately (control Omerta), 2=early (control 1, 2, 3 towns including Omerta)
|
// silversurfer: read early recruitment options 1=immediately (control Omerta), 2=early (control 1, 2, 3 towns including Omerta)
|
||||||
// 3=normal (control 3, 4, 5 towns including Omerta), 4=after liberating Omerta and solving the "Deliver Food Quest" for Miguel
|
// 3=normal (control 3, 4, 5 towns including Omerta), 4=after liberating Omerta and solving the "Deliver Food Quest" for Miguel
|
||||||
gGameExternalOptions.ubEarlyRebelsRecruitment[0] = iniReader.ReadInteger("Recruitment Settings","EARLY_REBELS_RECRUITMENT", 3, 1, 4);
|
gGameExternalOptions.ubEarlyRebelsRecruitment[0] = iniReader.ReadInteger("Recruitment Settings","EARLY_REBELS_RECRUITMENT", 3, 1, 4);
|
||||||
@@ -3777,8 +3743,6 @@ void LoadCreaturesSettings()
|
|||||||
|
|
||||||
void FreeGameExternalOptions()
|
void FreeGameExternalOptions()
|
||||||
{
|
{
|
||||||
if (gGameExternalOptions.iaIMPSlots != NULL) // OJW - 20081129 - Fix memory leak when calling LoadGameExternalOptions twice
|
|
||||||
MemFree( gGameExternalOptions.iaIMPSlots);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN GetCDLocation( )
|
BOOLEAN GetCDLocation( )
|
||||||
|
|||||||
+1
-8
@@ -291,14 +291,7 @@ typedef struct
|
|||||||
|
|
||||||
BOOLEAN fSellAll;
|
BOOLEAN fSellAll;
|
||||||
INT16 iPriceModifier;
|
INT16 iPriceModifier;
|
||||||
|
|
||||||
// Flugente: max number of IMPs, regardless of gender
|
|
||||||
INT32 iMaxIMPCharacters; // Limit of how many to allow
|
|
||||||
//
|
|
||||||
// iaIMPSlots is an array of the slots (in prof.dat) to use for IMPs.
|
|
||||||
//
|
|
||||||
INT32 *iaIMPSlots;
|
|
||||||
|
|
||||||
// SANDRO was here - some changes done
|
// SANDRO was here - some changes done
|
||||||
INT32 iIMPProfileCost;
|
INT32 iIMPProfileCost;
|
||||||
BOOLEAN fDynamicIMPProfileCost;
|
BOOLEAN fDynamicIMPProfileCost;
|
||||||
|
|||||||
+10
-9
@@ -83,7 +83,8 @@ INT32 iCurrentProfileMode = IMP__REGISTRY;
|
|||||||
|
|
||||||
BOOLEAN IsIMPSlotFree(INT32 iIMPId)
|
BOOLEAN IsIMPSlotFree(INT32 iIMPId)
|
||||||
{
|
{
|
||||||
if ((iIMPId >= 0) && (iIMPId < NUM_PROFILES) &&
|
if ((iIMPId >= 0) && (iIMPId < NUM_PROFILES) && (iIMPId != NO_PROFILE) &&
|
||||||
|
( gMercProfiles[iIMPId].Type == PROFILETYPE_IMP ) &&
|
||||||
((wcscmp(gMercProfiles[iIMPId].zName, L"") == 0) ||
|
((wcscmp(gMercProfiles[iIMPId].zName, L"") == 0) ||
|
||||||
(gMercProfiles[iIMPId].bMercStatus == MERC_IS_DEAD)))
|
(gMercProfiles[iIMPId].bMercStatus == MERC_IS_DEAD)))
|
||||||
{
|
{
|
||||||
@@ -750,10 +751,10 @@ INT32 CountFilledIMPSlots()
|
|||||||
INT32 iCount = 0;
|
INT32 iCount = 0;
|
||||||
|
|
||||||
// Count the used slots
|
// Count the used slots
|
||||||
for ( INT32 i = 0; i < gGameExternalOptions.iMaxIMPCharacters; ++i)
|
for ( int i = 0; i < NUM_PROFILES; ++i )
|
||||||
{
|
{
|
||||||
if ((gGameExternalOptions.iaIMPSlots[i] != -1) &&
|
if ( (gMercProfiles[i].Type == PROFILETYPE_IMP ) && ( i != NO_PROFILE ) &&
|
||||||
(!IsIMPSlotFree(gGameExternalOptions.iaIMPSlots[i])))
|
!IsIMPSlotFree(i) )
|
||||||
{
|
{
|
||||||
++iCount;
|
++iCount;
|
||||||
}
|
}
|
||||||
@@ -768,9 +769,9 @@ INT32 CountEmptyIMPSlots()
|
|||||||
INT32 iCount = 0;
|
INT32 iCount = 0;
|
||||||
|
|
||||||
// Count the free slots
|
// Count the free slots
|
||||||
for ( INT32 i = 0; i < gGameExternalOptions.iMaxIMPCharacters; ++i)
|
for ( int i = 0; i < NUM_PROFILES; ++i )
|
||||||
{
|
{
|
||||||
if (IsIMPSlotFree(gGameExternalOptions.iaIMPSlots[i]))
|
if (IsIMPSlotFree(i))
|
||||||
{
|
{
|
||||||
++iCount;
|
++iCount;
|
||||||
}
|
}
|
||||||
@@ -794,12 +795,12 @@ INT32 GetFreeIMPSlot(INT32 iDefaultIMPId)
|
|||||||
// The default IMP id is already used, find next free imp id
|
// The default IMP id is already used, find next free imp id
|
||||||
|
|
||||||
// Find a free imp slot
|
// Find a free imp slot
|
||||||
for (INT32 i = 0; i < gGameExternalOptions.iMaxIMPCharacters; ++i)
|
for (int i = 0; i < NUM_PROFILES; ++i)
|
||||||
{
|
{
|
||||||
// Found a free imp slot
|
// Found a free imp slot
|
||||||
if (IsIMPSlotFree(gGameExternalOptions.iaIMPSlots[i]))
|
if (IsIMPSlotFree(i))
|
||||||
{
|
{
|
||||||
return gGameExternalOptions.iaIMPSlots[i];
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -284,6 +284,12 @@ BOOLEAN LoadNewSystemMercsToSaveGameFile( HWFILE hFile )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for whatever bizarre reason, this function is called way after the profiles themselves are loaded - so we now have to overwrite the types in there
|
||||||
|
for ( int i = 0; i < NUM_PROFILES; ++i )
|
||||||
|
{
|
||||||
|
gMercProfiles[i].Type = gProfileType[i];
|
||||||
|
}
|
||||||
|
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user