Externalizations (by Buggler)

- creature xml to use other insertion directions if per-determined direction is invalid
- swapped East and South Insertion_Code enum to be align with Strategic_Move enum
- option for crepitus to attack a random player-controlled town, not just the originating town
- externalized creatures spreading hardcoded defines to Creatures_Settings.ini

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6732 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2014-01-06 15:35:52 +00:00
parent 27fb0562ee
commit c0d49d3f16
7 changed files with 279 additions and 66 deletions
+50 -8
View File
@@ -71,11 +71,13 @@
#define TAUNTS_SETTINGS_FILE "Taunts_Settings.ini"
// anv: helicopter repair settings - enough of these to put them in own file
#define HELICOPTER_SETTINGS_FILE "Helicopter_Settings.ini"
#define HELICOPTER_SETTINGS_FILE "Helicopter_Settings.ini"
#define MORALE_SETTINGS_FILE "Morale_Settings.ini"
#define MORALE_SETTINGS_FILE "Morale_Settings.ini"
#define REPUTATION_SETTINGS_FILE "Reputation_Settings.ini"
#define REPUTATION_SETTINGS_FILE "Reputation_Settings.ini"
#define CREATURES_SETTINGS_FILE "Creatures_Settings.ini"
#define CD_ROOT_DIR "DATA\\"
@@ -88,6 +90,7 @@ TAUNTS_SETTINGS gTauntsSettings;
HELICOPTER_SETTINGS gHelicopterSettings;
MORALE_SETTINGS gMoraleSettings;
REPUTATION_SETTINGS gReputationSettings;
CREATURES_SETTINGS gCreaturesSettings;
CTH_CONSTANTS gGameCTHConstants; // HEADROCK HAM 4: CTH constants
MOD_SETTINGS gModSettings; //DBrot: mod specific settings
@@ -1047,7 +1050,7 @@ void LoadGameExternalOptions()
// Flugente: show health an fatigue bars over currently selected mercs and those we hover our mouse over
gGameExternalOptions.ubShowHealthBarsOnHead = iniReader.ReadInteger("Tactical Interface Settings","SHOW_HEALTHBARSOVERHEAD", 1, 0, 5);
// WANNE: Hide the hit count when enemy gets hit
gGameExternalOptions.ubEnemyHitCount = iniReader.ReadInteger("Tactical Interface Settings","ENEMY_HIT_COUNT", 0, 0, 4);
// sevenfm: added similar option for player hit count
@@ -1690,6 +1693,9 @@ void LoadGameExternalOptions()
// Enable/Disable crepitus completely in SCI-FI mode.
gGameExternalOptions.fEnableCrepitus = iniReader.ReadBoolean("Strategic Event Settings", "ENABLE_CREPITUS", TRUE);
// Crepitus to attack other player-controlled town sectors
gGameExternalOptions.fCrepitusAttackAllTowns = iniReader.ReadBoolean("Strategic Event Settings", "CREPITUS_ATTACK_ALL_TOWNS", FALSE);
// HEADROCK HAM 3.1: Select which mine will run out. 0 = no mine. 1 = San Mona (unused), 2 = Drassen, 3 = Alma, 4 = Cambria, 5 = Chitzena, 6 = Grumm.
gGameExternalOptions.bWhichMineRunsOut = iniReader.ReadInteger("Strategic Event Settings","WHICH_MINE_SHUTS_DOWN", -1, -1, 256);
@@ -2678,10 +2684,6 @@ void LoadModSettings(){
gModSettings.ubEndGameVictorySectorY = iniReader.ReadInteger("End Game", "VICTORY_SECTOR_Y", 16);
gModSettings.iEndGameVictoryGridNo = iniReader.ReadInteger("End Game", "VICTORY_POSITION", 5687);
//[Creatures]
gModSettings.ubCrepitusFeedingSectorX = iniReader.ReadInteger("Creatures", "CREPITUS_FEEDING_SECTOR_X", 9);
gModSettings.ubCrepitusFeedingSectorY = iniReader.ReadInteger("Creatures", "CREPITUS_FEEDING_SECTOR_Y", 10);
gModSettings.ubCrepitusFeedingSectorZ = iniReader.ReadInteger("Creatures", "CREPITUS_FEEDING_SECTOR_Z", 2);
}
// silversurfer: load item property modifiers
@@ -3491,6 +3493,46 @@ void LoadReputationSettings()
gReputationSettings.bValues[REPUTATION_MERC_FIRED_ON_BAD_TERMS] = iniReader.ReadInteger("Reputation Settings","REPUTATION_MERC_FIRED_ON_BAD_TERMS", -3, -100, 100);
}
void LoadCreaturesSettings()
{
CIniReader iniReader(CREATURES_SETTINGS_FILE);
gCreaturesSettings.ubCrepitusFeedingSectorX = iniReader.ReadInteger("Creatures Settings", "CREPITUS_FEEDING_SECTOR_X", 9);
gCreaturesSettings.ubCrepitusFeedingSectorY = iniReader.ReadInteger("Creatures Settings", "CREPITUS_FEEDING_SECTOR_Y", 10);
gCreaturesSettings.ubCrepitusFeedingSectorZ = iniReader.ReadInteger("Creatures Settings", "CREPITUS_FEEDING_SECTOR_Z", 2);
gCreaturesSettings.usCreatureSpreadTimeNovice = iniReader.ReadInteger("Creatures Settings","CREATURE_SPREAD_TIME_NOVICE", 510, 5, 14400);
gCreaturesSettings.usCreatureSpreadTimeExperienced = iniReader.ReadInteger("Creatures Settings","CREATURE_SPREAD_TIME_EXPERIENCED", 450, 5, 14400);
gCreaturesSettings.usCreatureSpreadTimeExpert = iniReader.ReadInteger("Creatures Settings","CREATURE_SPREAD_TIME_EXPERT", 390, 5, 14400);
gCreaturesSettings.usCreatureSpreadTimeInsane = iniReader.ReadInteger("Creatures Settings","CREATURE_SPREAD_TIME_INSANE", 150, 5, 14400);
gCreaturesSettings.ubQueenReproductionBaseNovice = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BASE_NOVICE", 6, 1, 30);
gCreaturesSettings.ubQueenReproductionBaseExperienced = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BASE_EXPERIENCED", 7, 1, 30);
gCreaturesSettings.ubQueenReproductionBaseExpert = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BASE_EXPERT", 9, 1, 30);
gCreaturesSettings.ubQueenReproductionBaseInsane = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BASE_INSANE", 15, 1, 30);
gCreaturesSettings.ubQueenReproductionBonusNovice = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BONUS_NOVICE", 1, 0, 10);
gCreaturesSettings.ubQueenReproductionBonusExperienced = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BONUS_EXPERIENCED", 2, 0, 10);
gCreaturesSettings.ubQueenReproductionBonusExpert = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BONUS_EXPERT", 3, 0, 10);
gCreaturesSettings.ubQueenReproductionBonusInsane = iniReader.ReadInteger("Creatures Settings","QUEEN_REPRODUCTION_BONUS_INSANE", 5, 0, 10);
gCreaturesSettings.ubQueenInitBonusSpreadsNovice = iniReader.ReadInteger("Creatures Settings","QUEEN_INIT_BONUS_SPREAD_NOVICE", 1, 0, 10);
gCreaturesSettings.ubQueenInitBonusSpreadsExperienced = iniReader.ReadInteger("Creatures Settings","QUEEN_INIT_BONUS_SPREAD_EXPERIENCED", 2, 0, 10);
gCreaturesSettings.ubQueenInitBonusSpreadsExpert = iniReader.ReadInteger("Creatures Settings","QUEEN_INIT_BONUS_SPREAD_EXPERT", 3, 0, 10);
gCreaturesSettings.ubQueenInitBonusSpreadsInsane = iniReader.ReadInteger("Creatures Settings","QUEEN_INIT_BONUS_SPREAD_INSANE", 5, 0, 10);
gCreaturesSettings.bCreaturePopulationModifierNovice = iniReader.ReadInteger("Creatures Settings","CREATURE_POPULATION_MODIFIER_NOVICE", 0, -5, 5);
gCreaturesSettings.bCreaturePopulationModifierExperienced = iniReader.ReadInteger("Creatures Settings","CREATURE_POPULATION_MODIFIER_EXPERIENCED", 0, -5, 5);
gCreaturesSettings.bCreaturePopulationModifierExpert = iniReader.ReadInteger("Creatures Settings","CREATURE_POPULATION_MODIFIER_EXPERT", 0, -5, 5);
gCreaturesSettings.bCreaturePopulationModifierInsane = iniReader.ReadInteger("Creatures Settings","CREATURE_POPULATION_MODIFIER_INSANE", 0, -5, 5);
gCreaturesSettings.bCreatureTownAggressivenessNovice = iniReader.ReadInteger("Creatures Settings","CREATURE_TOWN_AGGRESSIVENESS_NOVICE", -10, -100, 100);
gCreaturesSettings.bCreatureTownAggressivenessExperienced = iniReader.ReadInteger("Creatures Settings","CREATURE_TOWN_AGGRESSIVENESS_EXPERIENCED", 0, -100, 100);
gCreaturesSettings.bCreatureTownAggressivenessExpert = iniReader.ReadInteger("Creatures Settings","CREATURE_TOWN_AGGRESSIVENESS_EXPERT", 10, -100, 100);
gCreaturesSettings.bCreatureTownAggressivenessInsane = iniReader.ReadInteger("Creatures Settings","CREATURE_TOWN_AGGRESSIVENESS_INSANE", 50, -100, 100);
}
void FreeGameExternalOptions()
{
if (gGameExternalOptions.iaIMPSlots != NULL) // OJW - 20081129 - Fix memory leak when calling LoadGameExternalOptions twice
+44 -6
View File
@@ -696,6 +696,7 @@ typedef struct
//Misc settings
BOOLEAN fAmmoDynamicWeight; //Pulmu
BOOLEAN fEnableCrepitus;
BOOLEAN fCrepitusAttackAllTowns;
BOOLEAN fEnableAllWeaponCaches;
BOOLEAN fEnableAllTerrorists;
BOOLEAN gfRevealItems;
@@ -1469,6 +1470,46 @@ typedef struct
INT8 bValues[32];
} REPUTATION_SETTINGS;
typedef struct
{
//Crepitus Feeding Sector
UINT8 ubCrepitusFeedingSectorX;
UINT8 ubCrepitusFeedingSectorY;
UINT8 ubCrepitusFeedingSectorZ;
UINT16 usCreatureSpreadTimeNovice;
UINT16 usCreatureSpreadTimeExperienced;
UINT16 usCreatureSpreadTimeExpert;
UINT16 usCreatureSpreadTimeInsane;
UINT8 ubQueenReproductionBaseNovice;
UINT8 ubQueenReproductionBaseExperienced;
UINT8 ubQueenReproductionBaseExpert;
UINT8 ubQueenReproductionBaseInsane;
UINT8 ubQueenReproductionBonusNovice;
UINT8 ubQueenReproductionBonusExperienced;
UINT8 ubQueenReproductionBonusExpert;
UINT8 ubQueenReproductionBonusInsane;
UINT8 ubQueenInitBonusSpreadsNovice;
UINT8 ubQueenInitBonusSpreadsExperienced;
UINT8 ubQueenInitBonusSpreadsExpert;
UINT8 ubQueenInitBonusSpreadsInsane;
INT8 bCreaturePopulationModifierNovice;
INT8 bCreaturePopulationModifierExperienced;
INT8 bCreaturePopulationModifierExpert;
INT8 bCreaturePopulationModifierInsane;
INT8 bCreatureTownAggressivenessNovice;
INT8 bCreatureTownAggressivenessExperienced;
INT8 bCreatureTownAggressivenessExpert;
INT8 bCreatureTownAggressivenessInsane;
} CREATURES_SETTINGS;
typedef struct
{
UINT8 ubMaxNumberOfTraits;
@@ -2081,12 +2122,6 @@ typedef struct
BOOLEAN CreatureMeanwhileCutscene;
//[Creatures]
//Crepitus Feeding Sector
UINT8 ubCrepitusFeedingSectorX;
UINT8 ubCrepitusFeedingSectorY;
UINT8 ubCrepitusFeedingSectorZ;
}MOD_SETTINGS;
// silversurfer: item property modifiers
@@ -2182,6 +2217,8 @@ extern MORALE_SETTINGS gMoraleSettings;
extern REPUTATION_SETTINGS gReputationSettings;
extern CREATURES_SETTINGS gCreaturesSettings;
// HEADROCK HAM 4: CTH constants read from a separate INI file
extern CTH_CONSTANTS gGameCTHConstants;
@@ -2202,6 +2239,7 @@ void LoadTauntsSettings();
void LoadHelicopterRepairRefuelSettings();
void LoadMoraleSettings();
void LoadReputationSettings();
void LoadCreaturesSettings();
void FreeGameExternalOptions();
void InitGameOptions();
+2
View File
@@ -391,6 +391,8 @@ void InitDependingGameStyleOptions()
LoadMoraleSettings();
// Load externalised reputation settings
LoadReputationSettings();
// Load creatures settings
LoadCreaturesSettings();
#ifdef JA2UB
LoadGameUBOptions(); // JA25 UB
+178 -49
View File
@@ -60,18 +60,18 @@
//This is how often the creatures spread, once the quest begins. The smaller the gap,
//the faster the creatures will advance. This is also directly related to the reproduction
//rates which are applied each time the creatures spread.
#define EASY_SPREAD_TIME_IN_MINUTES 510 //easy spreads every 8.5 hours
#define NORMAL_SPREAD_TIME_IN_MINUTES 450 //normal spreads every 7.5 hours
#define HARD_SPREAD_TIME_IN_MINUTES 390 //hard spreads every 6.5 hours
#define INSANE_SPREAD_TIME_IN_MINUTES 150 //insane spreads every 2.5 hours
#define EASY_SPREAD_TIME_IN_MINUTES gCreaturesSettings.usCreatureSpreadTimeNovice //easy spreads every 8.5 hours
#define NORMAL_SPREAD_TIME_IN_MINUTES gCreaturesSettings.usCreatureSpreadTimeExperienced //normal spreads every 7.5 hours
#define HARD_SPREAD_TIME_IN_MINUTES gCreaturesSettings.usCreatureSpreadTimeExpert //hard spreads every 6.5 hours
#define INSANE_SPREAD_TIME_IN_MINUTES gCreaturesSettings.usCreatureSpreadTimeInsane //insane spreads every 2.5 hours
//Once the queen is added to the game, we can instantly let her spread x number of times
//to give her a head start. This can also be a useful tool for having slow reproduction rates
//but quicker head start to compensate to make the creatures less aggressive overall.
#define EASY_QUEEN_INIT_BONUS_SPREADS 1
#define NORMAL_QUEEN_INIT_BONUS_SPREADS 2
#define HARD_QUEEN_INIT_BONUS_SPREADS 3
#define INSANE_QUEEN_INIT_BONUS_SPREADS 5
#define EASY_QUEEN_INIT_BONUS_SPREADS gCreaturesSettings.ubQueenInitBonusSpreadsNovice //1
#define NORMAL_QUEEN_INIT_BONUS_SPREADS gCreaturesSettings.ubQueenInitBonusSpreadsExperienced //2
#define HARD_QUEEN_INIT_BONUS_SPREADS gCreaturesSettings.ubQueenInitBonusSpreadsExpert //3
#define INSANE_QUEEN_INIT_BONUS_SPREADS gCreaturesSettings.ubQueenInitBonusSpreadsInsane //5
//This value modifies the chance to populate a given sector. This is different from the previous definition.
//This value gets applied to a potentially complicated formula, using the creature habitat to modify
@@ -79,30 +79,30 @@
//population increases), etc. I would recommend not tweaking the value too much in either direction from
//zero due to the fact that this can greatly effect spread times and maximum populations. Basically, if the
//creatures are spreading too quickly, increase the value, otherwise decrease it to a negative value
#define EASY_POPULATION_MODIFIER 0
#define NORMAL_POPULATION_MODIFIER 0
#define HARD_POPULATION_MODIFIER 0
#define INSANE_POPULATION_MODIFIER 0
#define EASY_POPULATION_MODIFIER gCreaturesSettings.bCreaturePopulationModifierNovice //0
#define NORMAL_POPULATION_MODIFIER gCreaturesSettings.bCreaturePopulationModifierExperienced //0
#define HARD_POPULATION_MODIFIER gCreaturesSettings.bCreaturePopulationModifierExpert //0
#define INSANE_POPULATION_MODIFIER gCreaturesSettings.bCreaturePopulationModifierInsane //0
//Augments the chance that the creatures will attack a town. The conditions for attacking a town
//are based strictly on the occupation of the creatures in each of the four mine exits. For each creature
//there is a base chance of 10% that the creatures will feed sometime during the night.
#define EASY_CREATURE_TOWN_AGGRESSIVENESS -10
#define NORMAL_CREATURE_TOWN_AGGRESSIVENESS 0
#define HARD_CREATURE_TOWN_AGGRESSIVENESS 10
#define INSANE_CREATURE_TOWN_AGGRESSIVENESS 50
#define EASY_CREATURE_TOWN_AGGRESSIVENESS gCreaturesSettings.bCreatureTownAggressivenessNovice //-10
#define NORMAL_CREATURE_TOWN_AGGRESSIVENESS gCreaturesSettings.bCreatureTownAggressivenessExperienced //0
#define HARD_CREATURE_TOWN_AGGRESSIVENESS gCreaturesSettings.bCreatureTownAggressivenessExpert //10
#define INSANE_CREATURE_TOWN_AGGRESSIVENESS gCreaturesSettings.bCreatureTownAggressivenessInsane //50
//This is how many creatures the queen produces for each cycle of spreading. The higher
//the numbers the faster the creatures will advance.
#define EASY_QUEEN_REPRODUCTION_BASE 6 //6-7
#define EASY_QUEEN_REPRODUCTION_BONUS 1
#define NORMAL_QUEEN_REPRODUCTION_BASE 7 //7-9
#define NORMAL_QUEEN_REPRODUCTION_BONUS 2
#define HARD_QUEEN_REPRODUCTION_BASE 9 //9-12
#define HARD_QUEEN_REPRODUCTION_BONUS 3
#define INSANE_QUEEN_REPRODUCTION_BASE 15 //15-20
#define INSANE_QUEEN_REPRODUCTION_BONUS 5
#define EASY_QUEEN_REPRODUCTION_BASE gCreaturesSettings.ubQueenReproductionBaseNovice //6 //6-7
#define EASY_QUEEN_REPRODUCTION_BONUS gCreaturesSettings.ubQueenReproductionBonusNovice //1
#define NORMAL_QUEEN_REPRODUCTION_BASE gCreaturesSettings.ubQueenReproductionBaseExperienced //7 //7-9
#define NORMAL_QUEEN_REPRODUCTION_BONUS gCreaturesSettings.ubQueenReproductionBonusExperienced //2
#define HARD_QUEEN_REPRODUCTION_BASE gCreaturesSettings.ubQueenReproductionBaseExpert //9 //9-12
#define HARD_QUEEN_REPRODUCTION_BONUS gCreaturesSettings.ubQueenReproductionBonusExpert //3
#define INSANE_QUEEN_REPRODUCTION_BASE gCreaturesSettings.ubQueenReproductionBaseInsane //15 //15-20
#define INSANE_QUEEN_REPRODUCTION_BONUS gCreaturesSettings.ubQueenReproductionBonusInsane //5
//When either in a cave level with blue lights or there is a creature presence, then
//we override the normal music with the creature music. The conditions are maintained
@@ -816,6 +816,7 @@ void ChooseTownSectorToAttack( UINT8 ubSectorID, BOOLEAN fOverrideTest )
{
INT32 iRandom, i;
UINT8 ubSectorX, ubSectorY;
UINT8 ubAttackSectorX, ubAttackSectorY;
INT8 bTownId, bTownSize;
UINT8 ubAttackSectorID;
@@ -943,23 +944,38 @@ void ChooseTownSectorToAttack( UINT8 ubSectorID, BOOLEAN fOverrideTest )
// determine the sector to attack
if( !fOverrideTest )
{
bTownId = StrategicMap[ SECTOR_INFO_TO_STRATEGIC_INDEX ( ubSectorID )].bNameId;
bTownSize = GetTownSectorSize( bTownId );
iRandom = PreRandom( bTownSize + 1 ) + 1;
// attack a random player-controlled town sector
if( gGameExternalOptions.fCrepitusAttackAllTowns )
{
do
{
i = Random( SEC_P16 + 1 );
} while ( !StrategicMap[ SECTOR_INFO_TO_STRATEGIC_INDEX ( i ) ].bNameId ||
StrategicMap[ SECTOR_INFO_TO_STRATEGIC_INDEX ( i ) ].fEnemyControlled );
// originating sector has double the chance
if( iRandom == bTownSize + 1 )
ubAttackSectorID = ubSectorID;
ubAttackSectorID = i;
}
// attack only the creature originating town, nothing will happen if sector is enemy-controlled
else
{
INT32 j=0;
for( i = 0; i < MAP_WORLD_X * MAP_WORLD_Y + 1; i++ )
bTownId = StrategicMap[ SECTOR_INFO_TO_STRATEGIC_INDEX ( ubSectorID )].bNameId;
bTownSize = GetTownSectorSize( bTownId );
iRandom = PreRandom( bTownSize + 1 ) + 1;
// originating sector has double the chance
if( iRandom == bTownSize + 1 )
ubAttackSectorID = ubSectorID;
else
{
if( StrategicMap[ i ].bNameId == bTownId )
INT32 j=0;
for( i = 0; i < MAP_WORLD_X * MAP_WORLD_Y + 1; i++ )
{
j++;
if( iRandom == j )
ubAttackSectorID = STRATEGIC_INDEX_TO_SECTOR_INFO( i );
if( StrategicMap[ i ].bNameId == bTownId )
{
j++;
if( iRandom == j )
ubAttackSectorID = STRATEGIC_INDEX_TO_SECTOR_INFO( i );
}
}
}
}
@@ -967,27 +983,107 @@ void ChooseTownSectorToAttack( UINT8 ubSectorID, BOOLEAN fOverrideTest )
else
ubAttackSectorID = ubSectorID;
ubAttackSectorX = (UINT8)((ubAttackSectorID % 16) + 1);
ubAttackSectorY = (UINT8)((ubAttackSectorID / 16) + 1);
// determine the attack sector insertion code
if( ubAttackSectorID == ubSectorID )
{
gsCreatureInsertionCode = INSERTION_CODE_GRIDNO;
gsCreatureInsertionGridNo = gCreaturePlacements[ giLairID ].iAttackSourceGridNo;
}
else if ( ubAttackSectorID - ubSectorID < -15 )
// attack sector north of source sector
else if( ubAttackSectorX < ubSectorX )
{
gsCreatureInsertionCode = INSERTION_CODE_SOUTH;
// valid entry
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ SOUTH_STRATEGIC_MOVE ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ SOUTH_STRATEGIC_MOVE ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = INSERTION_CODE_SOUTH;
}
else
{
for( i = 0; i < THROUGH_STRATEGIC_MOVE; i++ )
{
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = i;
break;
}
}
}
}
else if ( ubAttackSectorID - ubSectorID < 0 )
// attack sector south of source sector
else if ( ubAttackSectorX > ubSectorX )
{
gsCreatureInsertionCode = INSERTION_CODE_EAST;
// valid entry
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ NORTH_STRATEGIC_MOVE ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ NORTH_STRATEGIC_MOVE ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = INSERTION_CODE_NORTH;
}
else
{
for( i = 0; i < THROUGH_STRATEGIC_MOVE; i++ )
{
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = i;
break;
}
}
}
}
else if ( ubAttackSectorID - ubSectorID < 16 )
// attack sector west of source sector
else if( ubAttackSectorY < ubSectorY )
{
gsCreatureInsertionCode = INSERTION_CODE_WEST;
// valid entry
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ EAST_STRATEGIC_MOVE ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ EAST_STRATEGIC_MOVE ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = INSERTION_CODE_EAST;
}
else
{
for( i = 0; i < THROUGH_STRATEGIC_MOVE; i++ )
{
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = i;
break;
}
}
}
}
// attack sector east of source sector
else if( ubAttackSectorY > ubSectorY )
{
// valid entry
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ WEST_STRATEGIC_MOVE ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ WEST_STRATEGIC_MOVE ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = INSERTION_CODE_WEST;
}
else
{
for( i = 0; i < THROUGH_STRATEGIC_MOVE; i++ )
{
if( SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != GROUNDBARRIER &&
SectorInfo[ ubAttackSectorID ].ubTraversability[ i ] != EDGEOFWORLD )
{
gsCreatureInsertionCode = i;
break;
}
}
}
}
else
{
gsCreatureInsertionCode = INSERTION_CODE_NORTH;
Assert(0);
return;
}
gubSectorIDOfCreatureAttack = ubAttackSectorID;
@@ -1181,8 +1277,8 @@ void EndCreatureQuest()
}
//Remove the creatures that are trapped underneath Tixa
pSector = FindUnderGroundSector( gModSettings.ubCrepitusFeedingSectorX, gModSettings.ubCrepitusFeedingSectorY,
gModSettings.ubCrepitusFeedingSectorZ ); // (9, 10, 2)
pSector = FindUnderGroundSector( gCreaturesSettings.ubCrepitusFeedingSectorX, gCreaturesSettings.ubCrepitusFeedingSectorY,
gCreaturesSettings.ubCrepitusFeedingSectorZ ); // (9, 10, 2)
if( pSector )
{
pSector->ubNumCreatures = 0;
@@ -1383,7 +1479,7 @@ BOOLEAN PrepareCreaturesForBattle()
{
ubNumColors = LightGetColors( LColors );
if (! gbWorldSectorZ )
if ( !gbWorldSectorZ )
{
UseCreatureMusic(LColors->peBlue);
return FALSE; //Creatures don't attack overworld with this battle code.
@@ -1610,6 +1706,7 @@ void CreatureNightPlanning()
{
//Check the populations of the mine exits, and factor a chance for them to attack at night.
UINT8 ubNumCreatures;
INT32 i;
/* // externalize to xml data
ubNumCreatures = CreaturesInUndergroundSector( SEC_H3, 1 );
@@ -1639,10 +1736,42 @@ void CreatureNightPlanning()
// Attacksource B1 underground sector must be a valid creature habitat!
ubNumCreatures = CreaturesInUndergroundSector( ubSectorID , 1 );
if( ubNumCreatures > 1 && ubNumCreatures * 10 > (INT32)PreRandom( 100 ) )
{ //10% chance for each creature to decide it's time to attack.
AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 +PreRandom( 429 ), ubSectorID );
//10% chance for each creature with difficulty modifier to decide it's time to attack.
switch( gGameOptions.ubDifficultyLevel )
{
case DIF_LEVEL_EASY:
i = EASY_CREATURE_TOWN_AGGRESSIVENESS;
if( ubNumCreatures > 1 && ubNumCreatures * 10 + i > (INT32)PreRandom( 100 ) )
{
AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 + PreRandom( 429 ), ubSectorID );
}
break;
case DIF_LEVEL_MEDIUM:
i = NORMAL_CREATURE_TOWN_AGGRESSIVENESS;
if( ubNumCreatures > 1 && ubNumCreatures * 10 + i > (INT32)PreRandom( 100 ) )
{
AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 + PreRandom( 429 ), ubSectorID );
}
break;
case DIF_LEVEL_HARD:
i = HARD_CREATURE_TOWN_AGGRESSIVENESS;
if( ubNumCreatures > 1 && ubNumCreatures * 10 + i > (INT32)PreRandom( 100 ) )
{
AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 + PreRandom( 429 ), ubSectorID );
}
break;
case DIF_LEVEL_INSANE:
i = INSANE_CREATURE_TOWN_AGGRESSIVENESS;
if( ubNumCreatures > 1 && ubNumCreatures * 10 + i > (INT32)PreRandom( 100 ) )
{
AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 + PreRandom( 429 ), ubSectorID );
}
break;
}
//if( ubNumCreatures > 1 && ubNumCreatures * 10 > (INT32)PreRandom( 100 ) )
//{ //10% chance for each creature to decide it's time to attack.
// AddStrategicEvent( EVENT_CREATURE_ATTACK, GetWorldTotalMin() + 1 + PreRandom( 429 ), ubSectorID );
//}
}
+1 -1
View File
@@ -22,8 +22,8 @@ struct strategicmapelement{
enum
{
INSERTION_CODE_NORTH,
INSERTION_CODE_SOUTH,
INSERTION_CODE_EAST,
INSERTION_CODE_SOUTH,
INSERTION_CODE_WEST,
INSERTION_CODE_GRIDNO,
INSERTION_CODE_ARRIVING_GAME,
+2 -2
View File
@@ -2174,8 +2174,8 @@ BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
#ifdef JA2UB
/* Ja25 no creatures */
#else
if( gWorldSectorX == gModSettings.ubCrepitusFeedingSectorX && gWorldSectorY == gModSettings.ubCrepitusFeedingSectorY
&& gbWorldSectorZ == gModSettings.ubCrepitusFeedingSectorZ ) // (9, 10, 2)
if( gWorldSectorX == gCreaturesSettings.ubCrepitusFeedingSectorX && gWorldSectorY == gCreaturesSettings.ubCrepitusFeedingSectorY
&& gbWorldSectorZ == gCreaturesSettings.ubCrepitusFeedingSectorZ ) // (9, 10, 2)
{
InitCreatureQuest(); //Ignored if already active.
}
+2
View File
@@ -145,6 +145,8 @@ BOOLEAN InitializeGame(void)
LoadMoraleSettings();
// Load externalised reputation settings
LoadReputationSettings();
// Load creatures settings
LoadCreaturesSettings();
#ifdef JA2UB
LoadGameUBOptions(); // JA25 UB