mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
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:
@@ -2356,6 +2356,8 @@ void LoadSkillTraitsExternalSettings()
|
|||||||
gSkillTraitValues.fCOElitesDetectNextTile = iniReader.ReadBoolean("Covert Ops","COVERT_ELITES_DETECT_NEXTTILE", TRUE);
|
gSkillTraitValues.fCOElitesDetectNextTile = iniReader.ReadBoolean("Covert Ops","COVERT_ELITES_DETECT_NEXTTILE", TRUE);
|
||||||
|
|
||||||
// Flugente: RADIO OPERATOR
|
// 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.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.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);
|
gSkillTraitValues.usVOMortarShellDivisor = iniReader.ReadInteger("Radio Operator","RADIO_OPERATOR_MORTAR_SHELL_DIVISOR", 30, 2, 100);
|
||||||
|
|||||||
+3
-1
@@ -1580,7 +1580,9 @@ typedef struct
|
|||||||
BOOLEAN fCOElitesDetectNextTile;
|
BOOLEAN fCOElitesDetectNextTile;
|
||||||
|
|
||||||
// RADIO OPERATOR
|
// 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 usVOMortarCountDivisor;
|
||||||
UINT8 usVOMortarShellDivisor;
|
UINT8 usVOMortarShellDivisor;
|
||||||
UINT8 usVOMortarPointsAdmin;
|
UINT8 usVOMortarPointsAdmin;
|
||||||
|
|||||||
@@ -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?
|
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 )
|
if ( this->bSectorZ )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@@ -17450,6 +17453,10 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
|
|||||||
for (INT16 i = 0; i < numwaves; ++i)
|
for (INT16 i = 0; i < numwaves; ++i)
|
||||||
{
|
{
|
||||||
AddItemToPool( sStartingGridNo, &shellobj, HIDDEN_ITEM, 1, WORLD_ITEM_ARMED_BOMB, 0 );
|
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
|
// update the sector Artillery time
|
||||||
@@ -17583,6 +17590,11 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN
|
|||||||
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ|| pSoldier->bAssignment > ON_DUTY )
|
if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ|| pSoldier->bAssignment > ON_DUTY )
|
||||||
continue;
|
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
|
INT8 invsize = (INT8)pSoldier->inv.size(); // remember inventorysize, so we don't call size() repeatedly
|
||||||
for ( INT8 bLoop = 0; bLoop < invsize; ++bLoop)
|
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
|
// only fire if not signal shell, we already fired one, no need to do so again
|
||||||
if ( pAttObj )//&& !HasItemFlag(pAttObj->usItem, SIGNAL_SHELL) )
|
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
|
// create mortar shell item
|
||||||
OBJECTTYPE shellobj;
|
OBJECTTYPE shellobj;
|
||||||
CreateItem( pAttObj->usItem, 100, &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.usBombItem = shellobj.usItem;
|
||||||
shellobj[0]->data.misc.ubBombOwner = this->ubID + 2;
|
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 = shelldelay;
|
||||||
shellobj[0]->data.misc.bDelay = 1;
|
|
||||||
if ( !(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) )
|
|
||||||
shellobj[0]->data.misc.bDelay++;
|
|
||||||
|
|
||||||
shellobj[0]->data.ubWireNetworkFlag = ARTILLERY_STRIKE_COUNT_1;
|
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
|
// only fire if not signal shell, we already fired one, no need to do so again
|
||||||
if ( pShellObj && !HasItemFlag(pShellObj->usItem, SIGNAL_SHELL) )
|
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
|
// create mortar shell item
|
||||||
OBJECTTYPE shellobj;
|
OBJECTTYPE shellobj;
|
||||||
CreateItem( pShellObj->usItem, 100, &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.usBombItem = shellobj.usItem;
|
||||||
shellobj[0]->data.misc.ubBombOwner = this->ubID + 2;
|
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 = shelldelay;
|
||||||
shellobj[0]->data.misc.bDelay = 1;
|
|
||||||
if ( !(gTacticalStatus.uiFlags & TURNBASED && gTacticalStatus.uiFlags & INCOMBAT) )
|
|
||||||
shellobj[0]->data.misc.bDelay++;
|
|
||||||
|
|
||||||
shellobj[0]->data.ubWireNetworkFlag = ARTILLERY_STRIKE_COUNT_1;
|
shellobj[0]->data.ubWireNetworkFlag = ARTILLERY_STRIKE_COUNT_1;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user