new radio operator settings: RADIO_OPERATOR_ARTILLERY disables artillery for all teams, RADIO_OPERATOR_ARTILLERY_DISTRIBUTED_OVER_TURNS causes artillery to not fire one massive barrage, but to fire over multipe turns

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6556 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2013-11-04 22:32:44 +00:00
parent d3f5d3d9b0
commit 86a2967508
3 changed files with 28 additions and 10 deletions
+2
View File
@@ -2356,6 +2356,8 @@ void LoadSkillTraitsExternalSettings()
gSkillTraitValues.fCOElitesDetectNextTile = iniReader.ReadBoolean("Covert Ops","COVERT_ELITES_DETECT_NEXTTILE", TRUE);
// Flugente: RADIO OPERATOR
gSkillTraitValues.fROAllowArtillery = iniReader.ReadBoolean("Radio Operator","RADIO_OPERATOR_ARTILLERY", TRUE);
gSkillTraitValues.fROArtilleryDistributedOverTurns = iniReader.ReadBoolean("Radio Operator","RADIO_OPERATOR_ARTILLERY_DISTRIBUTED_OVER_TURNS", FALSE);
gSkillTraitValues.bVOArtillerySectorFrequency = iniReader.ReadInteger("Radio Operator","RADIO_OPERATOR_ARTILLERY_SECTOR_FREQUENCY", 120, 20, 1440);
gSkillTraitValues.usVOMortarCountDivisor = iniReader.ReadInteger("Radio Operator","RADIO_OPERATOR_MORTAR_COUNT_DIVISOR", 6, 5, 20);
gSkillTraitValues.usVOMortarShellDivisor = iniReader.ReadInteger("Radio Operator","RADIO_OPERATOR_MORTAR_SHELL_DIVISOR", 30, 2, 100);
+3 -1
View File
@@ -1580,7 +1580,9 @@ typedef struct
BOOLEAN fCOElitesDetectNextTile;
// RADIO OPERATOR
INT16 bVOArtillerySectorFrequency; // ability to call an a artillery strike from a sector every '_' minutes. Only applies if ordered from enemy/militia
BOOLEAN fROAllowArtillery; // artillery can be forbidden for all teams with this setting
BOOLEAN fROArtilleryDistributedOverTurns; // shells don't come in at once, but over multiple turns
INT16 bVOArtillerySectorFrequency; // ability to call an a artillery strike from a sector every '_' minutes. Only applies if ordered from enemy/militia
UINT8 usVOMortarCountDivisor;
UINT8 usVOMortarShellDivisor;
UINT8 usVOMortarPointsAdmin;
+23 -9
View File
@@ -17266,6 +17266,9 @@ BOOLEAN SOLDIERTYPE::GetSlotOfSignalShellIfMortar(UINT8* pbLoop)
BOOLEAN SOLDIERTYPE::CanAnyArtilleryStrikeBeOrdered(UINT32* pSectorID) // can any artillery strikes be ordered by this guy's team from the neighbouring sectors?
{
if ( !gSkillTraitValues.fROAllowArtillery )
return FALSE;
if ( this->bSectorZ )
return FALSE;
@@ -17450,6 +17453,10 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
for (INT16 i = 0; i < numwaves; ++i)
{
AddItemToPool( sStartingGridNo, &shellobj, HIDDEN_ITEM, 1, WORLD_ITEM_ARMED_BOMB, 0 );
// if option is set, delay each wave by one turn
if ( gSkillTraitValues.fROArtilleryDistributedOverTurns )
shellobj[0]->data.misc.bDelay += 1;
}
// update the sector Artillery time
@@ -17582,7 +17589,12 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
// check if soldier exists in this sector
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ|| pSoldier->bAssignment > ON_DUTY )
continue;
INT8 shelldelay = 1;
// In realtime the player could choose to put down a bomb right before a turn expires, so add 1 to the setting in RT
if ( !(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) )
++shelldelay;
INT8 invsize = (INT8)pSoldier->inv.size(); // remember inventorysize, so we don't call size() repeatedly
for ( INT8 bLoop = 0; bLoop < invsize; ++bLoop)
{
@@ -17596,6 +17608,10 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
// only fire if not signal shell, we already fired one, no need to do so again
if ( pAttObj )//&& !HasItemFlag(pAttObj->usItem, SIGNAL_SHELL) )
{
// if option is set, delay each wave by one turn
if ( gSkillTraitValues.fROArtilleryDistributedOverTurns )
++shelldelay;
// create mortar shell item
OBJECTTYPE shellobj;
CreateItem( pAttObj->usItem, 100, &shellobj );
@@ -17606,10 +17622,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
shellobj[0]->data.misc.usBombItem = shellobj.usItem;
shellobj[0]->data.misc.ubBombOwner = this->ubID + 2;
// In realtime the player could choose to put down a bomb right before a turn expires, so add 1 to the setting in RT
shellobj[0]->data.misc.bDelay = 1;
if ( !(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) )
shellobj[0]->data.misc.bDelay++;
shellobj[0]->data.misc.bDelay = shelldelay;
shellobj[0]->data.ubWireNetworkFlag = ARTILLERY_STRIKE_COUNT_1;
@@ -17633,6 +17646,10 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
// only fire if not signal shell, we already fired one, no need to do so again
if ( pShellObj && !HasItemFlag(pShellObj->usItem, SIGNAL_SHELL) )
{
// if option is set, delay each wave by one turn
if ( gSkillTraitValues.fROArtilleryDistributedOverTurns )
++shelldelay;
// create mortar shell item
OBJECTTYPE shellobj;
CreateItem( pShellObj->usItem, 100, &shellobj );
@@ -17643,10 +17660,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
shellobj[0]->data.misc.usBombItem = shellobj.usItem;
shellobj[0]->data.misc.ubBombOwner = this->ubID + 2;
// In realtime the player could choose to put down a bomb right before a turn expires, so add 1 to the setting in RT
shellobj[0]->data.misc.bDelay = 1;
if ( !(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) )
shellobj[0]->data.misc.bDelay++;
shellobj[0]->data.misc.bDelay = shelldelay;
shellobj[0]->data.ubWireNetworkFlag = ARTILLERY_STRIKE_COUNT_1;