mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Rdio sets no longer need a battery.
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7974 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2976,12 +2976,6 @@ void LoadItemSettings()
|
|||||||
gItemSettings.fDamageBreathModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_BREATH_EXPLOSIVE_MODIFIER", 1.0f, 0.1f, 5.0f);
|
gItemSettings.fDamageBreathModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_BREATH_EXPLOSIVE_MODIFIER", 1.0f, 0.1f, 5.0f);
|
||||||
gItemSettings.fDamageHealthMoveModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_HEALTH_MOVE_EXPLOSIVE_MODIFIER", 0.1f, 0.0f, 1.0f);
|
gItemSettings.fDamageHealthMoveModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_HEALTH_MOVE_EXPLOSIVE_MODIFIER", 0.1f, 0.0f, 1.0f);
|
||||||
gItemSettings.fDamageBreathMoveModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_BREATH_MOVE_EXPLOSIVE_MODIFIER", 0.1f, 0.0f, 1.0f);
|
gItemSettings.fDamageBreathMoveModifierExplosive = iniReader.ReadFloat ("Explosives Settings","DAMAGE_BREATH_MOVE_EXPLOSIVE_MODIFIER", 0.1f, 0.0f, 1.0f);
|
||||||
|
|
||||||
// ------------ ENERGY MODIFIERS -----------------
|
|
||||||
gItemSettings.energy_cost_radioset_activate = iniReader.ReadFloat ("Energy Settings","ENERGY_COST_RADIOSET_ACTIVATE", 100.00f, 1.00f, 1000.0f);
|
|
||||||
gItemSettings.energy_cost_radioset_jam = iniReader.ReadFloat ("Energy Settings","ENERGY_COST_RADIOSET_JAM", 10.00f, 1.00f, 1000.0f);
|
|
||||||
gItemSettings.energy_cost_radioset_scan = iniReader.ReadFloat ("Energy Settings","ENERGY_COST_RADIOSET_SCAN", 3.00f, 1.00f, 1000.0f);
|
|
||||||
gItemSettings.energy_cost_radioset_scan_assignment = iniReader.ReadFloat ("Energy Settings","ENERGY_COST_RADIOSET_SCAN_ASSIGNMENT", 3000.00f, 1.00f, 30000.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse)
|
INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse)
|
||||||
|
|||||||
@@ -2233,13 +2233,6 @@ typedef struct
|
|||||||
FLOAT fDamageHealthMoveModifierExplosive; // applies when character moves through gas cloud without a gas mask
|
FLOAT fDamageHealthMoveModifierExplosive; // applies when character moves through gas cloud without a gas mask
|
||||||
FLOAT fDamageBreathMoveModifierExplosive; // applies when character moves through gas cloud without a gas mask
|
FLOAT fDamageBreathMoveModifierExplosive; // applies when character moves through gas cloud without a gas mask
|
||||||
|
|
||||||
// ------------ ENERGY MODIFIERS -----------------
|
|
||||||
// Flugente: energy consumption settings (energy-consumption of attached non-vanilla batteries)
|
|
||||||
FLOAT energy_cost_radioset_activate;
|
|
||||||
FLOAT energy_cost_radioset_jam;
|
|
||||||
FLOAT energy_cost_radioset_scan;
|
|
||||||
FLOAT energy_cost_radioset_scan_assignment;
|
|
||||||
|
|
||||||
}ITEM_SETTINGS;
|
}ITEM_SETTINGS;
|
||||||
|
|
||||||
extern MOD_SETTINGS gModSettings;
|
extern MOD_SETTINGS gModSettings;
|
||||||
|
|||||||
@@ -5407,9 +5407,6 @@ void HandleRadioScanInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
|
|||||||
if( ( pSoldier->bAssignment == RADIO_SCAN ) && ( EnoughTimeOnAssignment( pSoldier ) ) && ( pSoldier->flags.fMercAsleep == FALSE ) )
|
if( ( pSoldier->bAssignment == RADIO_SCAN ) && ( EnoughTimeOnAssignment( pSoldier ) ) && ( pSoldier->flags.fMercAsleep == FALSE ) )
|
||||||
{
|
{
|
||||||
++numberofradiooperators;
|
++numberofradiooperators;
|
||||||
|
|
||||||
// use up radio energy
|
|
||||||
pSoldier->DepleteActiveRadioSetEnergy(FALSE, TRUE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3981,19 +3981,6 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
|||||||
|
|
||||||
DrawItemUIBarEx( pObject, DRAW_ITEM_TEMPERATURE, sX, sY + sHeight-1, ITEMDESC_ITEM_STATUS_WIDTH, (INT16)((sHeight-1)*(1-condition)), colour, colour, TRUE, guiSAVEBUFFER);
|
DrawItemUIBarEx( pObject, DRAW_ITEM_TEMPERATURE, sX, sY + sHeight-1, ITEMDESC_ITEM_STATUS_WIDTH, (INT16)((sHeight-1)*(1-condition)), colour, colour, TRUE, guiSAVEBUFFER);
|
||||||
}
|
}
|
||||||
// Flugente: display energy level of power packs
|
|
||||||
else if ( HasItemFlag(pObject->usItem, POWER_PACK) )
|
|
||||||
{
|
|
||||||
FLOAT energylevel = (*pObject)[0]->data.bTemperature / (FLOAT)OVERHEATING_MAX_TEMPERATURE;
|
|
||||||
|
|
||||||
UINT32 red = (UINT32) ( 255 * ( 1.0 - max(0, 2*energylevel - 1.0) ) );
|
|
||||||
UINT32 green = (UINT32) ( 255 * ( min(1.0, 2*energylevel) ) );
|
|
||||||
UINT32 blue = 0;
|
|
||||||
|
|
||||||
UINT16 colour = Get16BPPColor( FROMRGB( red, green, blue ) );
|
|
||||||
|
|
||||||
DrawItemUIBarEx( pObject, DRAW_ITEM_TEMPERATURE, sX, sY + sHeight-1, ITEMDESC_ITEM_STATUS_WIDTH, sHeight-1, colour, colour, TRUE, guiSAVEBUFFER);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// display symbol if we are leaning our weapon on something
|
// display symbol if we are leaning our weapon on something
|
||||||
@@ -6975,22 +6962,6 @@ void RenderItemDescriptionBox( )
|
|||||||
|
|
||||||
DrawItemUIBarEx( &(*iter), DRAW_ITEM_TEMPERATURE, sCenX+4, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, colour, colour, TRUE, guiSAVEBUFFER );
|
DrawItemUIBarEx( &(*iter), DRAW_ITEM_TEMPERATURE, sCenX+4, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, colour, colour, TRUE, guiSAVEBUFFER );
|
||||||
}
|
}
|
||||||
// Flugente: display energy level of power packs
|
|
||||||
else if ( HasItemFlag(iter->usItem, POWER_PACK) )
|
|
||||||
{
|
|
||||||
if ( OVERHEATING_MAX_TEMPERATURE > 0 )
|
|
||||||
{
|
|
||||||
FLOAT energylevel = (*iter)[0]->data.bTemperature / (FLOAT)OVERHEATING_MAX_TEMPERATURE;
|
|
||||||
|
|
||||||
UINT32 red = (UINT32) ( 255 * ( 1.0 - max(0, 2*energylevel - 1.0) ) );
|
|
||||||
UINT32 green = (UINT32) ( 255 * ( min(1.0, 2*energylevel) ) );
|
|
||||||
UINT32 blue = 0;
|
|
||||||
|
|
||||||
UINT16 colour = Get16BPPColor( FROMRGB( red, green, blue ) );
|
|
||||||
|
|
||||||
DrawItemUIBarEx( &(*iter), DRAW_ITEM_TEMPERATURE, sCenX+4, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, colour, colour, TRUE, guiSAVEBUFFER );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7279,54 +7250,6 @@ void RenderItemDescriptionBox( )
|
|||||||
mprintf( usX, usY, pStr );
|
mprintf( usX, usY, pStr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( HasItemFlag(gpItemDescObject->usItem, POWER_PACK) )
|
|
||||||
{
|
|
||||||
if ( OVERHEATING_MAX_TEMPERATURE > 0 )
|
|
||||||
{
|
|
||||||
FLOAT energylevel = (*gpItemDescObject)[0]->data.bTemperature / (FLOAT)OVERHEATING_MAX_TEMPERATURE;
|
|
||||||
|
|
||||||
UINT32 red = (UINT32) ( 255 * ( 1.0 - max(0, 2*energylevel - 1.0) ) );
|
|
||||||
UINT32 green = (UINT32) ( 255 * ( min(1.0, 2*energylevel) ) );
|
|
||||||
UINT32 blue = 0;
|
|
||||||
|
|
||||||
UINT8 stringNum = 5;
|
|
||||||
if ( energylevel > 0.8f )
|
|
||||||
stringNum = 1;
|
|
||||||
else if ( energylevel > 0.6f )
|
|
||||||
stringNum = 2;
|
|
||||||
else if ( energylevel > 0.4f )
|
|
||||||
stringNum = 3;
|
|
||||||
else if ( energylevel > 0.2f )
|
|
||||||
stringNum = 4;
|
|
||||||
|
|
||||||
// UDB system displays a string with colored condition text.
|
|
||||||
int regionindex = 7;
|
|
||||||
SetFontForeground( ForegroundColor );
|
|
||||||
swprintf( pStr, L"%s", gPowerPackDesc[STR_POWERPACK_BEGIN] ); // "Temperature is "
|
|
||||||
mprintf( gItemDescTextRegions[regionindex].sLeft, gItemDescTextRegions[regionindex].sTop, pStr );
|
|
||||||
// Record length
|
|
||||||
INT16 indent = StringPixLength( gPowerPackDesc[STR_POWERPACK_BEGIN], ITEMDESC_FONT );
|
|
||||||
|
|
||||||
swprintf( pStr, L"%s", gPowerPackDesc[stringNum] );
|
|
||||||
|
|
||||||
SetRGBFontForeground( red, green, blue );
|
|
||||||
|
|
||||||
mprintf( gItemDescTextRegions[regionindex].sLeft+indent+2, gItemDescTextRegions[regionindex].sTop, pStr );
|
|
||||||
// Record length
|
|
||||||
indent += StringPixLength( gPowerPackDesc[stringNum], ITEMDESC_FONT );
|
|
||||||
|
|
||||||
SetFontForeground( ForegroundColor );
|
|
||||||
swprintf( pStr, L"%s", gPowerPackDesc[STR_POWERPACK_END] ); // "."
|
|
||||||
mprintf( gItemDescTextRegions[regionindex].sLeft + indent + 2, gItemDescTextRegions[regionindex].sTop, pStr );
|
|
||||||
|
|
||||||
// to get the text to the left side...
|
|
||||||
swprintf( pStr, L"");
|
|
||||||
|
|
||||||
FindFontRightCoordinates( gItemDescTextRegions[regionindex].sLeft, gItemDescTextRegions[regionindex].sTop, gItemDescTextRegions[regionindex].sRight - gItemDescTextRegions[regionindex].sLeft ,gItemDescTextRegions[regionindex].sBottom - gItemDescTextRegions[regionindex].sTop ,pStr, BLOCKFONT2, &usX, &usY);
|
|
||||||
|
|
||||||
mprintf( usX, usY, pStr );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UDB system displays a string with colored condition text.
|
// UDB system displays a string with colored condition text.
|
||||||
SetFontForeground( ForegroundColor );
|
SetFontForeground( ForegroundColor );
|
||||||
|
|||||||
@@ -434,13 +434,6 @@ void DrawItemUIBarEx( OBJECTTYPE *pObject, UINT8 ubStatus, INT16 sXPos, INT16 sY
|
|||||||
{
|
{
|
||||||
sValue = 100;
|
sValue = 100;
|
||||||
}
|
}
|
||||||
else if ( HasItemFlag(pObject->usItem, POWER_PACK) )
|
|
||||||
{
|
|
||||||
if ( OVERHEATING_MAX_TEMPERATURE > 0 )
|
|
||||||
{
|
|
||||||
sValue = (INT16) ( 100 * (*pObject)[0]->data.bTemperature / (FLOAT)OVERHEATING_MAX_TEMPERATURE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sValue = (INT16) (100 * GetGunOverheatJamPercentage( pObject) );
|
sValue = (INT16) (100 * GetGunOverheatJamPercentage( pObject) );
|
||||||
|
|||||||
@@ -763,7 +763,7 @@ extern OBJECTTYPE gTempObject;
|
|||||||
#define TRIPWIREROLL 0x01000000 //16777216 // this item is a tripwire roll
|
#define TRIPWIREROLL 0x01000000 //16777216 // this item is a tripwire roll
|
||||||
#define RADIO_SET 0x02000000 //33554432 // item can be used to radio militia/squads in other sectors
|
#define RADIO_SET 0x02000000 //33554432 // item can be used to radio militia/squads in other sectors
|
||||||
#define SIGNAL_SHELL 0x04000000 //67108864 // this is a signal shell that precedes artillery barrages
|
#define SIGNAL_SHELL 0x04000000 //67108864 // this is a signal shell that precedes artillery barrages
|
||||||
#define POWER_PACK 0x08000000 //134217728 // item continously powers an item it is attached to
|
//#define POWER_PACK 0x08000000 //134217728 // item continously powers an item it is attached to
|
||||||
|
|
||||||
#define ROOF_COLLAPSE_ITEM 0x10000000 //268435456 // this item is required in the collapsing of roof tiles. It is used internally and should never be seen by the player
|
#define ROOF_COLLAPSE_ITEM 0x10000000 //268435456 // this item is required in the collapsing of roof tiles. It is used internally and should never be seen by the player
|
||||||
#define DISEASEPROTECTION_1 0x20000000 //536870912 // this item protects us from getting diseases by human contact if kept in inventory
|
#define DISEASEPROTECTION_1 0x20000000 //536870912 // this item protects us from getting diseases by human contact if kept in inventory
|
||||||
|
|||||||
@@ -8094,12 +8094,6 @@ BOOLEAN CreateItem( UINT16 usItem, INT16 bStatus, OBJECTTYPE * pObj )
|
|||||||
(*pObj)[0]->data.bTemperature = OVERHEATING_MAX_TEMPERATURE;
|
(*pObj)[0]->data.bTemperature = OVERHEATING_MAX_TEMPERATURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flugente: certain items get the maximum temperature when they are created
|
|
||||||
if ( HasItemFlag(usItem, POWER_PACK) )
|
|
||||||
{
|
|
||||||
(*pObj)[0]->data.bTemperature = OVERHEATING_MAX_TEMPERATURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//ADB ubWeight has been removed, see comments in OBJECTTYPE
|
//ADB ubWeight has been removed, see comments in OBJECTTYPE
|
||||||
//pObj->ubWeight = CalculateObjectWeight( pObj );
|
//pObj->ubWeight = CalculateObjectWeight( pObj );
|
||||||
fRet = TRUE;
|
fRet = TRUE;
|
||||||
|
|||||||
@@ -17347,27 +17347,7 @@ BOOLEAN SOLDIERTYPE::CanUseRadio( BOOLEAN fCheckForAP )
|
|||||||
pObj = GetObjectWithFlag( RADIO_SET );
|
pObj = GetObjectWithFlag( RADIO_SET );
|
||||||
|
|
||||||
if ( pObj && HasItemFlag( pObj->usItem, RADIO_SET ) )
|
if ( pObj && HasItemFlag( pObj->usItem, RADIO_SET ) )
|
||||||
{
|
return TRUE;
|
||||||
// if radio set doesn't need batteries, all is fine
|
|
||||||
if ( !Item[pObj->usItem].needsbatteries )
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
//search power pack
|
|
||||||
attachmentList::iterator iterend = (*pObj)[0]->attachments.end( );
|
|
||||||
for ( attachmentList::iterator iter = (*pObj)[0]->attachments.begin( ); iter != iterend; ++iter )
|
|
||||||
{
|
|
||||||
// do we have a power pack?
|
|
||||||
if ( iter->exists( ) && HasItemFlag( iter->usItem, POWER_PACK ) )
|
|
||||||
{
|
|
||||||
// Hack (or clever use of unused memory, depending on your view):
|
|
||||||
// data.bTemperature has to exist on all items, as it is used on weapons and certain attachments (barrels)
|
|
||||||
// It isn't used on armor... that's why we can use it now. The idea is that the temperature of the power pack represents its available energy.
|
|
||||||
// The cooling down represents its energy depleting.
|
|
||||||
if ( (*iter)[0]->data.bTemperature > 0.0f )
|
|
||||||
return(TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -17389,9 +17369,6 @@ BOOLEAN SOLDIERTYPE::UseRadio( )
|
|||||||
success = TRUE;
|
success = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// even if we fail, we still use up AP, use animation an use up batteries
|
|
||||||
DepleteActiveRadioSetEnergy( TRUE );
|
|
||||||
|
|
||||||
if ( this->bInSector && (this->ubBodyType == REGMALE || this->ubBodyType == BIGMALE) )
|
if ( this->bInSector && (this->ubBodyType == REGMALE || this->ubBodyType == BIGMALE) )
|
||||||
{
|
{
|
||||||
switch ( gAnimControl[this->usAnimState].ubEndHeight )
|
switch ( gAnimControl[this->usAnimState].ubEndHeight )
|
||||||
@@ -18103,62 +18080,6 @@ SOLDIERTYPE::RadioFail( )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SOLDIERTYPE::DepleteActiveRadioSetEnergy( BOOLEAN fActivation, BOOLEAN fAssignment )
|
|
||||||
{
|
|
||||||
if ( !CanUseRadio( FALSE ) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
FLOAT cost = 0;
|
|
||||||
if ( fActivation )
|
|
||||||
cost = gItemSettings.energy_cost_radioset_activate;
|
|
||||||
else if ( fAssignment )
|
|
||||||
cost = gItemSettings.energy_cost_radioset_scan_assignment;
|
|
||||||
else if ( usSoldierFlagMask & SOLDIER_RADIO_OPERATOR_JAMMING )
|
|
||||||
cost = gItemSettings.energy_cost_radioset_jam;
|
|
||||||
else if ( usSoldierFlagMask & (SOLDIER_RADIO_OPERATOR_SCANNING | SOLDIER_RADIO_OPERATOR_LISTENING) )
|
|
||||||
cost = gItemSettings.energy_cost_radioset_scan;
|
|
||||||
else
|
|
||||||
// nothing to do here..
|
|
||||||
return;
|
|
||||||
|
|
||||||
OBJECTTYPE* pObj = NULL;
|
|
||||||
if ( this->bTeam == OUR_TEAM && UsingNewInventorySystem( ) )
|
|
||||||
pObj = &(inv[CPACKPOCKPOS]);
|
|
||||||
else
|
|
||||||
pObj = GetObjectWithFlag( RADIO_SET );
|
|
||||||
|
|
||||||
if ( pObj && HasItemFlag( pObj->usItem, RADIO_SET ) )
|
|
||||||
{
|
|
||||||
// if radio set doesn't need batteries, all is fine
|
|
||||||
if ( !Item[pObj->usItem].needsbatteries )
|
|
||||||
return;
|
|
||||||
|
|
||||||
//search power pack
|
|
||||||
attachmentList::iterator iterend = (*pObj)[0]->attachments.end( );
|
|
||||||
for ( attachmentList::iterator iter = (*pObj)[0]->attachments.begin( ); iter != iterend; ++iter )
|
|
||||||
{
|
|
||||||
// do we have a power pack on our armor?
|
|
||||||
if ( iter->exists( ) && HasItemFlag( iter->usItem, POWER_PACK ) )
|
|
||||||
{
|
|
||||||
(*iter)[0]->data.bTemperature = max( 0.0f, (*iter)[0]->data.bTemperature - cost );
|
|
||||||
|
|
||||||
if ( (*iter)[0]->data.bTemperature <= 0.0f )
|
|
||||||
{
|
|
||||||
// destroy batteries
|
|
||||||
iter->RemoveObjectsFromStack( 1 );
|
|
||||||
if ( iter->exists( ) == false )
|
|
||||||
pObj->RemoveAttachment( &(*iter) );
|
|
||||||
|
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_RADIO_NO_ENERGY], this->GetName( ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
// there can only be one battery on a radio set
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flugente: spotter
|
// Flugente: spotter
|
||||||
BOOLEAN SOLDIERTYPE::IsSpotting( )
|
BOOLEAN SOLDIERTYPE::IsSpotting( )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1871,7 +1871,6 @@ public:
|
|||||||
BOOLEAN RadioCallReinforcements( UINT32 usSector, UINT16 sNumber );
|
BOOLEAN RadioCallReinforcements( UINT32 usSector, UINT16 sNumber );
|
||||||
BOOLEAN SwitchOffRadio();
|
BOOLEAN SwitchOffRadio();
|
||||||
void RadioFail(); // display and error sound used either when the radio set fails or the sector is jammed - the player knows of the error, but cannot be sure of the cause
|
void RadioFail(); // display and error sound used either when the radio set fails or the sector is jammed - the player knows of the error, but cannot be sure of the cause
|
||||||
void DepleteActiveRadioSetEnergy(BOOLEAN fActivation = FALSE, BOOLEAN fAssignment = FALSE);
|
|
||||||
|
|
||||||
// Flugente: spotter
|
// Flugente: spotter
|
||||||
BOOLEAN IsSpotting();
|
BOOLEAN IsSpotting();
|
||||||
|
|||||||
Reference in New Issue
Block a user