mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Various fixes/improvements (all by Moa):
- (bug) first Tooltip for weapons (secondary and tertiary values like recoil) was missing, last one showed (null,null). - (cleanup) code cosmetic/potential bug: cnt now (hopefully) match the count of actual rendered values/MouseRegions and Icons. - (feature adjustment) freshness Bar for food now shows the decay. Color values for bar range from green (over yellow) to red. hight of bar shows the percentage. - (feature adjustment) Food properties are now shown in DB. A Data patch is needed to show the new Icons, those however are placeholders for better ones, the tooltips also need a rework by a native english and translation to the different languages. - (feature adjustment) When FoodSystem is enabled the weight of a foodtype item is adjusted to account for partially eaten item. - (bug) Performance fix 1: multiple TransformIcons where rendered in DB above each other. - (bug) Performance fix 2: condition to leave loop when on end of Transform list was not met due to missing cast (65535!=-1). - (bug) 'endless dying mercs in roof edges' fix in rev.6346 condition was never met. - (bug) Popups were missplaced when clicking on a trainer-assignment multiple times to close the submenu. - (bug) Popups were missplaced when clicking on a practice-assignment multiple times to close the submenu. - (bug) Popups were missplaced when clicking on a student-assignment multiple times to close the submenu. - (bug) Popups were missplaced when clicking on a facility-assignment multiple times to close the submenu. note: the bug might only be reproducable when selecting different screensize then the 3 native ones. - (bug) MouseMasks for disabling timeCompress buttons did not match size of buttons, Clock Overlay was missing - (cleanup) Replaced Hardcoded fallback Gridnumbers with CenterGrid if no exitGrid was specified in map editor. Same behavier than before, but since we have bigmaps and possibly other mapsizes it should not be constant. - (bug) Sight range calulation uses distance visible with and without scope to get a scopeRangeMod=sDistVis/sDistVisNoScope. Blind soldiers will have 0 sDistVisNoScope, which means the scopeRangeMod is a div/0 (not defined result). After fix we get a defined result for scopeRangeMod of 1.0f in case there is a 0 distance. Also we get a defined result for sightrange since sightrange=sightrange/scopeRangeMod = 0/1.0f. - (bug) Experimental NCTH calulation did return 0 CTH with 0 aimclicks but it should return at least the base CTH. - (cleanup) added comment to get an idea of the 'magic' aiming Points formula - (feature adjustment) Flat backpack malus replaced with malus which scales linear with weight of backpack up to maximum specified in ini file. Each 5 kg 1 additional malus is applied for movement. When carrying pack in hands or inside another pocket the full malus is applied. Malus for changing stances is still 1 additional Point when carrying backpack (does not matter in which slot). git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6363 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+26
-22
@@ -8535,15 +8535,15 @@ void CreateDestroyMouseRegionsForTrainingMenu( void )
|
||||
|
||||
if( ( fShowTrainingMenu == TRUE ) && ( fCreated == FALSE ) )
|
||||
{
|
||||
|
||||
if( ( fShowTrainingMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
{
|
||||
SetBoxPosition( ghTrainingBox, TrainPosition );
|
||||
}
|
||||
|
||||
HandleShadingOfLinesForTrainingMenu( );
|
||||
|
||||
CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
// Moa: removed, this missplaces popups when screensize>3.
|
||||
//if( ( fShowTrainingMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
//{
|
||||
//SetBoxPosition( ghTrainingBox, TrainPosition );
|
||||
//}
|
||||
//
|
||||
//HandleShadingOfLinesForTrainingMenu( );
|
||||
//
|
||||
//CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
|
||||
// grab height of font
|
||||
iFontHeight = GetLineSpace( ghTrainingBox ) + GetFontHeight( GetBoxFont( ghTrainingBox ) );
|
||||
@@ -8637,14 +8637,14 @@ void CreateDestroyMouseRegionsForAttributeMenu( void )
|
||||
|
||||
if( ( fShowAttributeMenu == TRUE ) && ( fCreated == FALSE ) )
|
||||
{
|
||||
|
||||
if( ( fShowAssignmentMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
{
|
||||
SetBoxPosition( ghAssignmentBox, AssignmentPosition );
|
||||
}
|
||||
|
||||
HandleShadingOfLinesForAttributeMenus( );
|
||||
CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
// Moa: removed, this missplaces popups when screensize>3.
|
||||
//if( ( fShowAssignmentMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
//{
|
||||
//SetBoxPosition( ghAssignmentBox, AssignmentPosition );
|
||||
//}
|
||||
|
||||
//HandleShadingOfLinesForAttributeMenus( );
|
||||
//CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
|
||||
// grab height of font
|
||||
iFontHeight = GetLineSpace( ghAttributeBox ) + GetFontHeight( GetBoxFont( ghAttributeBox ) );
|
||||
@@ -11166,6 +11166,9 @@ BOOLEAN CreateDestroyAssignmentPopUpBoxes( void )
|
||||
RemoveBox(ghFacilityBox);
|
||||
ghFacilityBox = -1;
|
||||
|
||||
RemoveBox(ghFacilityAssignmentBox);
|
||||
ghFacilityAssignmentBox = -1;
|
||||
|
||||
fCreated = FALSE;
|
||||
gfIgnoreScrolling = FALSE;
|
||||
RebuildCurrentSquad( );
|
||||
@@ -16874,13 +16877,14 @@ void CreateDestroyMouseRegionsForFacilityAssignmentMenu( void )
|
||||
|
||||
if( ( fShowFacilityAssignmentMenu == TRUE ) && ( fCreated == FALSE ) )
|
||||
{
|
||||
if( ( fShowAssignmentMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
{
|
||||
SetBoxPosition( ghAssignmentBox, AssignmentPosition );
|
||||
}
|
||||
// Moa: removed, this missplaces popups when screensize>3.
|
||||
//if( ( fShowAssignmentMenu ) && ( guiCurrentScreen == MAP_SCREEN ) )
|
||||
//{
|
||||
// SetBoxPosition( ghAssignmentBox, AssignmentPosition );
|
||||
//}
|
||||
|
||||
//HandleShadingOfLinesForFacilityAssignmentMenus( );
|
||||
CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
//CheckAndUpdateTacticalAssignmentPopUpPositions( );
|
||||
|
||||
// grab height of font
|
||||
iFontHeight = GetLineSpace( ghFacilityAssignmentBox ) + GetFontHeight( GetBoxFont( ghFacilityAssignmentBox ) );
|
||||
|
||||
@@ -1542,17 +1542,17 @@ void CreateDestroyMouseRegionMasksForTimeCompressionButtons( void )
|
||||
if( ( fDisabled ) && ( fCreated == FALSE ) )
|
||||
{
|
||||
// mask over compress more button
|
||||
MSYS_DefineRegion( &gTimeCompressionMask[ 0 ], xResOffset + (xResSize - 112), (SCREEN_HEIGHT - 24), xResOffset + (xResSize - 112) + 13, (SCREEN_HEIGHT - 24) + 14, MSYS_PRIORITY_HIGHEST - 1,
|
||||
MSYS_DefineRegion( &gTimeCompressionMask[ 0 ], xResOffset + (xResSize - 112), (SCREEN_HEIGHT - 24), xResOffset + (xResSize - 112) + 13, (SCREEN_HEIGHT - 24) + 16, MSYS_PRIORITY_HIGHEST - 1,
|
||||
MSYS_NO_CURSOR, MSYS_NO_CALLBACK, CompressMaskClickCallback );
|
||||
|
||||
// mask over compress less button
|
||||
MSYS_DefineRegion( &gTimeCompressionMask[ 1 ], xResOffset + (xResSize - 174), (SCREEN_HEIGHT - 24), xResOffset + (xResSize - 174) + 13, (SCREEN_HEIGHT - 24) + 14, MSYS_PRIORITY_HIGHEST - 1,
|
||||
MSYS_DefineRegion( &gTimeCompressionMask[ 1 ], xResOffset + (xResSize - 174), (SCREEN_HEIGHT - 24), xResOffset + (xResSize - 174) + 13, (SCREEN_HEIGHT - 24) + 16, MSYS_PRIORITY_HIGHEST - 1,
|
||||
MSYS_NO_CURSOR, MSYS_NO_CALLBACK, CompressMaskClickCallback );
|
||||
|
||||
// mask over pause game button
|
||||
MSYS_DefineRegion( &gTimeCompressionMask[ 2 ], xResOffset + (xResSize - 153), (SCREEN_HEIGHT - 24), xResOffset + (xResSize - 153) + 118, (SCREEN_HEIGHT - 13), MSYS_PRIORITY_HIGHEST - 1,
|
||||
MSYS_NO_CURSOR, MSYS_NO_CALLBACK, CompressMaskClickCallback );
|
||||
|
||||
RemoveMouseRegionForPauseOfClock();
|
||||
fCreated = TRUE;
|
||||
}
|
||||
else if( ( fDisabled == FALSE ) && ( fCreated ) )
|
||||
@@ -1561,6 +1561,7 @@ void CreateDestroyMouseRegionMasksForTimeCompressionButtons( void )
|
||||
MSYS_RemoveRegion( &gTimeCompressionMask[ 0 ] );
|
||||
MSYS_RemoveRegion( &gTimeCompressionMask[ 1 ] );
|
||||
MSYS_RemoveRegion( &gTimeCompressionMask[ 2 ] );
|
||||
CreateMouseRegionForPauseOfClock( INTERFACE_CLOCK_X, INTERFACE_CLOCK_Y );
|
||||
fCreated = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3311,8 +3311,8 @@ void UpdateMercInSector( SOLDIERTYPE *pSoldier, INT16 sSectorX, INT16 sSectorY,
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
// TODO.WANNE: Hardcoded grid number
|
||||
pSoldier->sInsertionGridNo = 12880;//dnl!!!
|
||||
//Moa: Hardcoded grid number set to CenterGrid
|
||||
pSoldier->sInsertionGridNo = ( WORLD_ROWS * WORLD_COLS + WORLD_COLS ) / 2;//12880
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Improper insertion code %d given to UpdateMercsInSector", pSoldier->ubStrategicInsertionCode ) );
|
||||
break;
|
||||
}
|
||||
@@ -3352,7 +3352,7 @@ void UpdateMercInSector( SOLDIERTYPE *pSoldier, INT16 sSectorX, INT16 sSectorY,
|
||||
else
|
||||
{
|
||||
ScreenMsg( FONT_RED, MSG_BETAVERSION, L"Sector %s has NO entrypoints -- using precise center of map for %s.", szSector, pSoldier->name );
|
||||
pSoldier->sInsertionGridNo = 12880;//dnl!!!
|
||||
pSoldier->sInsertionGridNo = ( WORLD_ROWS * WORLD_COLS + WORLD_COLS ) / 2;//12880
|
||||
AddSoldierToSector( pSoldier->ubID );
|
||||
return;
|
||||
}
|
||||
@@ -3380,7 +3380,7 @@ void UpdateMercInSector( SOLDIERTYPE *pSoldier, INT16 sSectorX, INT16 sSectorY,
|
||||
if ( pSoldier->sInsertionGridNo == -1 )
|
||||
{
|
||||
DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Insertion gridno for direction %d not added to map sector %d %d", pSoldier->ubStrategicInsertionCode, sSectorX, sSectorY ) );
|
||||
pSoldier->sInsertionGridNo = 12880;//dnl!!!
|
||||
pSoldier->sInsertionGridNo = ( WORLD_ROWS * WORLD_COLS + WORLD_COLS ) / 2;//12880
|
||||
}
|
||||
|
||||
AddSoldierToSector( pSoldier->ubID );
|
||||
|
||||
+357
-23
@@ -1455,7 +1455,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
CHAR16 pStr[1000];
|
||||
|
||||
///////////////// PRIMARY DATA - ICONS
|
||||
for (cnt = 0; cnt < 12; cnt++)
|
||||
for (cnt = 0; cnt < 13; cnt++)
|
||||
{
|
||||
MSYS_DefineRegion( &gUDBFasthelpRegions[ iRegionsCreated ],
|
||||
(INT16)(gItemDescGenRegions[cnt][0].sLeft),
|
||||
@@ -3712,7 +3712,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
{
|
||||
if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
///////////////////// SINGLE SHOT TEMPERATURE
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
@@ -3779,7 +3779,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
}
|
||||
else if ( Item[gpItemDescObject->usItem].barrel == TRUE ) // for barrel items
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
///////////////////// COOLDOWN FACTOR
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
@@ -3793,7 +3793,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
// other stuff: various overheat modificators
|
||||
if ( ( Item[gpItemDescObject->usItem].overheatTemperatureModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatCooldownModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatJamThresholdModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatDamageThresholdModificator != 0.0 ) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
///////////////////// TEMPERATURE MODIFICATOR
|
||||
if ( Item[gpItemDescObject->usItem].overheatTemperatureModificator != 0.0 )
|
||||
{
|
||||
@@ -3848,7 +3848,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
// only draw if item is poisoned in any way
|
||||
if ( Item[gpItemDescObject->usItem].bPoisonPercentage != 0 || ( (Item[gpItemDescObject->usItem].usItemClass & IC_GUN) && AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].poisonPercentage != 0 ) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 56 ], szUDBAdvStatsExplanationsTooltipText[ 56 ]);
|
||||
@@ -3863,7 +3863,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
///////////////////// DIRT MODIFICATOR
|
||||
if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
if (cnt >= sFirstLine && cnt < sLastLine )
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 57 ], szUDBAdvStatsExplanationsTooltipText[ 57 ]);
|
||||
@@ -3874,23 +3874,96 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
|
||||
}
|
||||
}
|
||||
|
||||
if ( gGameOptions.fFoodSystem && Item[gpItemDescObject->usItem].foodtype > 0 )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
|
||||
////////////////////// POISONED FOOD
|
||||
if ( (*gpItemDescObject)[0]->data.bTemperature != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{//reusing Poison text here
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 58 ], szUDBAdvStatsExplanationsTooltipText[ 58 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
UINT32 foodtype = Item[gpItemDescObject->usItem].foodtype;
|
||||
////////////////////// FOOD POINTS
|
||||
if ( Food[foodtype].bFoodPoints != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 59 ], szUDBAdvStatsExplanationsTooltipText[ 59 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
/////////////////////// DRINK POINTS
|
||||
if ( Food[foodtype].bDrinkPoints != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 60 ], szUDBAdvStatsExplanationsTooltipText[ 60 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////// PORTION SIZE
|
||||
if ( Food[foodtype].ubPortionSize != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 61 ], szUDBAdvStatsExplanationsTooltipText[ 61 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////// MORALE MODIFIER
|
||||
if ( Food[foodtype].bMoraleMod != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 62 ], szUDBAdvStatsExplanationsTooltipText[ 62 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////// DECAY RATE
|
||||
if ( Food[foodtype].usDecayRate != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 63 ], szUDBAdvStatsExplanationsTooltipText[ 63 ]);
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr );
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
|
||||
}
|
||||
// Moa: moved additional Indexes to the end to avoid doublication. We have allready secured a free slot for this line so no cnt++ here!
|
||||
if (fDrawGenIndexes)
|
||||
{
|
||||
///////////////////// INDEXES (Prop., 0, +/-, =)
|
||||
if (fDrawGenIndexes >= sFirstLine && fDrawGenIndexes < sLastLine)
|
||||
{
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (fDrawGenIndexes-sFirstLine) ]), gzUDBGenIndexTooltipText[ 0 ]);
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (fDrawGenIndexes-sFirstLine) ] );
|
||||
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (fDrawGenIndexes-sFirstLine-1) ]), gzUDBGenIndexTooltipText[ 0 ]);
|
||||
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (fDrawGenIndexes-sFirstLine-1) ] );
|
||||
//Moa: start bugfix (changed gItemDescAdvIndexRegions[] to gItemDescAdvRegions[] and adding correct region)
|
||||
|
||||
for (cnt2 = 1; cnt2 < 4; cnt2++)
|
||||
{
|
||||
MSYS_DefineRegion( &gUDBFasthelpRegions[ iRegionsCreated ],
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][cnt2].sLeft),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][cnt2].sTop),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][cnt2].sRight),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][cnt2].sBottom),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][cnt2].sLeft),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][cnt2].sTop),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][cnt2].sRight),
|
||||
(INT16)(gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][cnt2].sBottom),
|
||||
MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback );
|
||||
|
||||
MSYS_AddRegion( &gUDBFasthelpRegions[ iRegionsCreated ]);
|
||||
@@ -5113,7 +5186,7 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject )
|
||||
{
|
||||
if( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) || Item[gpItemDescObject->usItem].barrel == TRUE || ( Item[gpItemDescObject->usItem].overheatTemperatureModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatCooldownModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatJamThresholdModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatDamageThresholdModificator != 0.0 ) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5209,7 +5282,7 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject )
|
||||
// only draw if item is poisoned in any way
|
||||
if ( Item[gpItemDescObject->usItem].bPoisonPercentage != 0 || ( (Item[gpItemDescObject->usItem].usItemClass & IC_GUN) && AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].poisonPercentage != 0 ) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // new index line here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWH40KIcon, 0, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
@@ -5229,6 +5302,69 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject )
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( gGameOptions.fFoodSystem )
|
||||
{
|
||||
if ( Item[gpItemDescObject->usItem].foodtype > 0 )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // new index line here?
|
||||
|
||||
if ( (*gpItemDescObject)[0]->data.bTemperature != 0 )
|
||||
{
|
||||
//////////////////// POISONED FOOD
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{// using damage icon here (skull)
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 10, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY,VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
if ( Food[Item[gpItemDescObject->usItem].foodtype].bFoodPoints > 0 )
|
||||
{
|
||||
//////////////////// FOOD POINTS
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 57, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
if ( Food[Item[gpItemDescObject->usItem].foodtype].bDrinkPoints > 0 )
|
||||
{
|
||||
//////////////////// DRINK POINTS
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 58, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
if ( Food[Item[gpItemDescObject->usItem].foodtype].ubPortionSize > 0 )
|
||||
{
|
||||
//////////////////// PORTION SIZE
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 59, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
if ( Food[Item[gpItemDescObject->usItem].foodtype].bMoraleMod > 0 )
|
||||
{
|
||||
//////////////////// MORALE MODIFICATOR
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 60, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
if ( Food[Item[gpItemDescObject->usItem].foodtype].usDecayRate > 0 )
|
||||
{
|
||||
//////////////////// DECAY RATE
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 61, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DrawMiscStats( OBJECTTYPE * gpItemDescObject )
|
||||
@@ -10970,7 +11106,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
{
|
||||
if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // insert Indexes here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // insert Indexes here?
|
||||
///////////////////// SINGLE SHOT TEMPERATURE
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
@@ -11187,7 +11323,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
}
|
||||
else if ( Item[gpItemDescObject->usItem].barrel == TRUE ) // display for barrel items
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // insert Indexes here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // insert Indexes here?
|
||||
///////////////////// COOLDOWN FACTOR
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
@@ -11243,7 +11379,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
}
|
||||
else if ( ( Item[gpItemDescObject->usItem].overheatTemperatureModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatCooldownModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatJamThresholdModificator != 0.0 ) || ( Item[gpItemDescObject->usItem].overheatDamageThresholdModificator != 0.0 ) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // insert Indexes here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // insert Indexes here?
|
||||
|
||||
///////////////////// TEMPERATURE MODIFIER
|
||||
if ( ( Item[gpItemDescObject->usItem].overheatTemperatureModificator != 0.0 ) && cnt >= sFirstLine && cnt < sLastLine)
|
||||
@@ -11475,7 +11611,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
// only draw if item is poisoned in any way
|
||||
if ( iModifier[0] != 0 || iModifier[1] != 0 || iModifier[2] != 0 )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; // insert Indexes here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; // insert Indexes here?
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
// Set Y coordinates
|
||||
@@ -11523,7 +11659,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
{
|
||||
if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = cnt++; //insert Indexes here?
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; //insert Indexes here?
|
||||
///////////////////// DIRT MODIFICATOR
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
@@ -11578,6 +11714,204 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
////////////////////// FOOD
|
||||
if ( gGameOptions.fFoodSystem )
|
||||
{
|
||||
UINT32 fFoodtype = Item[gpItemDescObject->usItem].foodtype;
|
||||
if ( fFoodtype > 0 )
|
||||
{
|
||||
if (!fDrawGenIndexes) fDrawGenIndexes = ++cnt; //insert Indexes here?
|
||||
//////////////////////////// POISONED FOOD
|
||||
iFloatModifier[0] = (*gpItemDescObject)[0]->data.bTemperature;//temperature is reused for poisoned food
|
||||
if ( iFloatModifier[0] != 0.0f && OVERHEATING_MAX_TEMPERATURE > 0.0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
iFloatModifier[0] = min( 1.0f, iFloatModifier[0] / OVERHEATING_MAX_TEMPERATURE );//FoodCondition: fresh=1.0 poisoned=0.0
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
iModifier[0] = 0;
|
||||
//FOOD_BAD_THRESHOLD
|
||||
if ( iFloatModifier[0] < 0.5f )
|
||||
{
|
||||
iModifier[1] = (INT16)( max( Food[fFoodtype].bFoodPoints, Food[fFoodtype].bDrinkPoints ) * (1.0 - iFloatModifier[0]) * 0.025 );//Poison formula coppied from food.cpp
|
||||
iModifier[1] = min( iModifier[1], gGameExternalOptions.usFoodMaxPoisoning );
|
||||
}
|
||||
else
|
||||
iModifier[1] = 0;
|
||||
iModifier[2] = iModifier[1];
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
if ( iModifier[cnt2] > 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
swprintf( pStr, L"%d", iModifier[cnt2] );
|
||||
}
|
||||
else if ( iModifier[cnt2] < 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
swprintf( pStr, L"%d", iModifier[cnt2] );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFontForeground( 5 );
|
||||
swprintf( pStr, L"--", iModifier[cnt2] );
|
||||
}
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
//////////////////////////// FOOD POINTS
|
||||
iFloatModifier[0] = ( (FLOAT) Food[fFoodtype].bFoodPoints )/1000;
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
if ( iFloatModifier[0] != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
iFloatModifier[2] = ( ( (FLOAT)(*gpItemDescObject)[0]->data.objectStatus )/100 ) * iFloatModifier[0];
|
||||
iFloatModifier[1] = iFloatModifier[2] - iFloatModifier[0];
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
if ( iFloatModifier[cnt2] > 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
swprintf( pStr, L"%4.3f", iFloatModifier[cnt2] );
|
||||
}
|
||||
else if ( iFloatModifier[cnt2] < 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
swprintf( pStr, L"%4.3f", iFloatModifier[cnt2] );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFontForeground( 5 );
|
||||
swprintf( pStr, L"--", iFloatModifier[cnt2] );
|
||||
}
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////////// DRINK POINTS
|
||||
iFloatModifier[0] = ( (FLOAT) Food[fFoodtype].bDrinkPoints )/1000;
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
if ( iFloatModifier[0] != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
iFloatModifier[2] = ( ( (FLOAT)(*gpItemDescObject)[0]->data.objectStatus )/100 ) * iFloatModifier[0];
|
||||
iFloatModifier[1] = iFloatModifier[2] - iFloatModifier[0];
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
if ( iFloatModifier[cnt2] > 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
swprintf( pStr, L"%3.2f", iFloatModifier[cnt2] );
|
||||
}
|
||||
else if ( iFloatModifier[cnt2] < 0 )
|
||||
{
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
swprintf( pStr, L"%3.2f", iFloatModifier[cnt2] );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetFontForeground( 5 );
|
||||
swprintf( pStr, L"--", iFloatModifier[cnt2] );
|
||||
}
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////////// PORTION SIZE
|
||||
iModifier[0] = Food[fFoodtype].ubPortionSize;
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
if ( iModifier[0] != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
if ( iModifier[0] <= 20 )
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
else
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
swprintf( pStr, L"%d", iModifier[0] );
|
||||
wcscat( pStr, L"%" );
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
#ifdef CHINESE
|
||||
wcscat( pStr, ChineseSpecString1 );
|
||||
#else
|
||||
wcscat( pStr, L"%" );
|
||||
#endif
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////////// MORALE MODIFIER
|
||||
iModifier[0] = Food[fFoodtype].bMoraleMod;
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
if ( iModifier[0] != 0 )
|
||||
{
|
||||
if (cnt >= sFirstLine && cnt < sLastLine)
|
||||
{
|
||||
if ( iModifier[0] > 0 )
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
else
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
swprintf( pStr, L"%d", iModifier[0] );
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
////////////////////////// DECAY RATE
|
||||
iFloatModifier[0] = Food[fFoodtype].usDecayRate;
|
||||
sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
|
||||
if ( iFloatModifier[0] != 0 )
|
||||
{
|
||||
if ( cnt >= sFirstLine && cnt < sLastLine )
|
||||
{
|
||||
if ( iFloatModifier[0] > 1.0f )
|
||||
SetFontForeground( ITEMDESC_FONTNEGATIVE );
|
||||
else
|
||||
SetFontForeground( ITEMDESC_FONTPOSITIVE );
|
||||
for ( UINT8 cnt2 = 0; cnt2 < 3; cnt2++ )
|
||||
{
|
||||
sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft;
|
||||
sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft;
|
||||
swprintf( pStr, L"%4.2f", iFloatModifier[0] );
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY );
|
||||
mprintf( usX, usY, pStr );
|
||||
}
|
||||
}
|
||||
cnt++;
|
||||
}
|
||||
}//foodtype > 0
|
||||
}//gGameOptions.fFoodSystem
|
||||
|
||||
//Moa: moved indexes here to avoid doublicates of the index
|
||||
///////////////////// ADDITIONAL GENERAL INDEX (if required: cnt was allready increased)
|
||||
@@ -11588,8 +11922,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
SetFontForeground( FONT_MCOLOR_WHITE );
|
||||
|
||||
// Set Y coordinates
|
||||
sTop = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][1].sBottom - sTop;
|
||||
sTop = gItemDescAdvRegions[ fDrawGenIndexes-sFirstLine-1 ][1].sTop;
|
||||
sHeight = gItemDescAdvRegions[ fDrawGenIndexes-sFirstLine-1 ][1].sBottom - sTop;
|
||||
|
||||
// Repeatedly draw each index: four separate column headers per index.
|
||||
for (UINT8 i = 0; i < 4; i++)
|
||||
@@ -11597,8 +11931,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
|
||||
// Select "PROPERTY", "0", "+" or "=" as appropriate.
|
||||
swprintf(pStr, L"%s", gzItemDescGenIndexes[ i ]);
|
||||
|
||||
sLeft = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][i].sLeft;
|
||||
sWidth = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine][i].sRight - sLeft;
|
||||
sLeft = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][i].sLeft;
|
||||
sWidth = gItemDescAdvRegions[fDrawGenIndexes-sFirstLine-1][i].sRight - sLeft;
|
||||
|
||||
FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY);
|
||||
|
||||
|
||||
@@ -3914,13 +3914,13 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec
|
||||
{
|
||||
FLOAT condition = (*pObject)[0]->data.bTemperature / OVERHEATING_MAX_TEMPERATURE;
|
||||
|
||||
UINT32 red = (UINT32) ( 127 );
|
||||
UINT32 green = (UINT32) ( 54 + 201 * ( min(1.0f, condition ) ) );
|
||||
UINT32 red = (UINT32) ( 126 + 127 * ( 1.0f - min(1.0f, condition) ) ); //127
|
||||
UINT32 green = (UINT32) ( 54 + 200 * min(1.0f, condition ) ); //54 + 201 * ( min(1.0f, condition ) )
|
||||
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);
|
||||
DrawItemUIBarEx( pObject, DRAW_ITEM_TEMPERATURE, sX, sY + sHeight-1, ITEMDESC_ITEM_STATUS_WIDTH, (INT16)((sHeight-1)*(1-condition)), colour, colour, TRUE, guiSAVEBUFFER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6594,30 +6594,36 @@ void RenderItemDescriptionBox( )
|
||||
}
|
||||
else*/
|
||||
{
|
||||
for (UINT16 x = 0; x < MAXITEMS; x++)
|
||||
{
|
||||
if (Transform[x].usItem == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//Moa: had to solve the performance issue which was caused partially here by creating multiple videoObjects.
|
||||
// Mousregions for the Transformation looks fine (line5036 in internalInitItemDescriptionBox), however still took awhile to show the DB for Items.
|
||||
// So I set up a breakpoint in the loop and figured that -1 is not a good test: Transform[] was initialized with -1 which translates to 65535 for UINT16.
|
||||
// Testing again for -1 is interpreted as (UINT16)65535 == (int)-1 which is false. instead either use MAXITEMS or 0 or test for (UINT16)-1. I decided for the latter.
|
||||
// Because 0 is also the first uiIndex in Item[]. After the change the DB loads in Debugversion in just under a second on my PC, which is still not acceptible, but in
|
||||
// Release the delay is not noticed anymore.
|
||||
|
||||
// Flugente: ok, this looks complicated. We allow a transformation option to pop up if:
|
||||
// - there is a transformation
|
||||
// - we are in the game or map screen, it is a single item, and
|
||||
// - the item is a grenade
|
||||
// - the item is a bomb and has a detonator or remote detonator attached
|
||||
if ( Transform[x].usItem == gpItemDescObject->usItem )
|
||||
// Flugente: ok, this looks complicated. We allow a transformation option to pop up if:
|
||||
// - there is a transformation
|
||||
// - we are in the game or map screen, it is a single item, and
|
||||
// - the item is a grenade
|
||||
// - the item is a bomb and has a detonator or remote detonator attached
|
||||
BOOLEAN renderTransformIcon = FALSE;
|
||||
if ( ( (guiCurrentScreen == GAME_SCREEN || guiCurrentScreen == MAP_SCREEN) && gpItemDescObject->ubNumberOfObjects == 1 ) &&
|
||||
( (Item[gpItemDescObject->usItem].usItemClass == IC_GRENADE) ||
|
||||
( (Item[gpItemDescObject->usItem].usItemClass == IC_BOMB) && HasAttachmentOfClass( gpItemDescObject, (AC_DETONATOR | AC_REMOTEDET)) ) ) )
|
||||
renderTransformIcon = TRUE;
|
||||
if (!renderTransformIcon)
|
||||
for (UINT16 x = 0; x < MAXITEMS; x++)
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiTransformIconGraphic, 0, (ITEMDESC_ITEM_X+ITEMDESC_ITEM_WIDTH)-13, (ITEMDESC_ITEM_Y+ITEMDESC_ITEM_HEIGHT)-17, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
else if ( (guiCurrentScreen == GAME_SCREEN || guiCurrentScreen == MAP_SCREEN) && gpItemDescObject->ubNumberOfObjects == 1 )
|
||||
{
|
||||
if ( (Item[gpItemDescObject->usItem].usItemClass == IC_GRENADE) || ( (Item[gpItemDescObject->usItem].usItemClass == IC_BOMB) && HasAttachmentOfClass( gpItemDescObject, (AC_DETONATOR | AC_REMOTEDET)) ) )
|
||||
if (Transform[x].usItem == (UINT16)-1)
|
||||
break;
|
||||
else if ( Transform[x].usItem == gpItemDescObject->usItem )
|
||||
{
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiTransformIconGraphic, 0, (ITEMDESC_ITEM_X+ITEMDESC_ITEM_WIDTH)-13, (ITEMDESC_ITEM_Y+ITEMDESC_ITEM_HEIGHT)-17, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
renderTransformIcon = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (renderTransformIcon)
|
||||
BltVideoObjectFromIndex( guiSAVEBUFFER, guiTransformIconGraphic, 0, (ITEMDESC_ITEM_X+ITEMDESC_ITEM_WIDTH)-13, (ITEMDESC_ITEM_Y+ITEMDESC_ITEM_HEIGHT)-17, VO_BLT_SRCTRANSPARENCY, NULL );
|
||||
}
|
||||
|
||||
// Display status
|
||||
@@ -6813,7 +6819,7 @@ void RenderItemDescriptionBox( )
|
||||
mprintf( ITEMDESC_NAME_X, ITEMDESC_NAME_Y, L"%s", gzItemName );
|
||||
#endif
|
||||
|
||||
// Render extra data on name bar for weapons and launchers (Caliber, Fingerprints)
|
||||
// Render extra data on name bar for weapons and launchers (Caliber, Fingerprints, Coolness)
|
||||
if ( ITEM_PROS_AND_CONS( gpItemDescObject->usItem ) )
|
||||
{
|
||||
SetFontForeground( FONT_BLACK );
|
||||
@@ -12877,7 +12883,7 @@ void ItemDescTransformRegionCallback( MOUSE_REGION *pRegion, INT32 reason )
|
||||
{
|
||||
for (INT32 x = 0; x < MAXITEMS; x++)
|
||||
{
|
||||
if (Transform[x].usItem == -1)
|
||||
if (Transform[x].usItem == (UINT16)-1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -12943,7 +12949,7 @@ void ItemDescTransformRegionCallback( MOUSE_REGION *pRegion, INT32 reason )
|
||||
INT32 iNumOptions = 0;
|
||||
for (INT32 x = 0; x < MAXITEMS; x++)
|
||||
{
|
||||
if (Transform[x].usItem == -1)
|
||||
if (Transform[x].usItem == (UINT16)-1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3090,6 +3090,9 @@ UINT16 OBJECTTYPE::GetWeightOfObjectInStack(unsigned int index)
|
||||
weight += Item[ (*this)[index]->data.gun.usGunAmmoItem ].ubWeight;
|
||||
}
|
||||
}
|
||||
// account for partially eaten food
|
||||
if ( gGameOptions.fFoodSystem && Item[usItem].foodtype > 0 )
|
||||
weight *= (FLOAT)((*this)[index])->data.objectStatus/100.0f;
|
||||
}
|
||||
else if ( pItem->usItemClass == IC_AMMO && gGameExternalOptions.fAmmoDynamicWeight == TRUE )//Pulmu: added weight allowance for ammo not being full
|
||||
{
|
||||
|
||||
+1
-1
@@ -8667,7 +8667,7 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT
|
||||
gbForceWeaponNotReady = true;
|
||||
INT16 sDistVisNoScope = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
||||
gbForceWeaponNotReady = false;
|
||||
FLOAT scopeRangeMod = (float)sDistVis / (float)sDistVisNoScope;
|
||||
FLOAT scopeRangeMod = ( sDistVisNoScope ? (float)sDistVis / (float)sDistVisNoScope : 1.0f );
|
||||
|
||||
INT32 iSightRange = 0;
|
||||
if (ubTargetID != NOBODY)
|
||||
|
||||
+32
-2
@@ -503,8 +503,36 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u
|
||||
}
|
||||
}
|
||||
// Check for backpack
|
||||
if((UsingNewInventorySystem() == true) && FindBackpackOnSoldier( pSoldier ) != ITEM_NOT_FOUND )
|
||||
sPoints += APBPConstants[AP_MODIFIER_PACK];
|
||||
// Moa: apply penalty for heavily packed backpack (wobble penalty)
|
||||
if ( UsingNewInventorySystem() == true )
|
||||
{
|
||||
INT8 bSlot= FindBackpackOnSoldier( pSoldier );
|
||||
if ( bSlot != ITEM_NOT_FOUND )
|
||||
{
|
||||
UINT16 usBPPenalty = APBPConstants[ AP_MODIFIER_PACK ];
|
||||
if ( bSlot == BPACKPOCKPOS ) //Backpack caried on back
|
||||
{
|
||||
OBJECTTYPE * pObj = &( pSoldier->inv[ BPACKPOCKPOS ] );
|
||||
UINT16 usBackPackWeight = CalculateObjectWeight( pObj );
|
||||
// CalculateObjectWeight checks for active LBE gear. Unfortunatly our backpack is not active since we are carying it.
|
||||
// Sounds not intuitive at all, active means the LBE caries items (marked with blue *), but when put on the LBE adittional slots of our soldier
|
||||
// are activated where something can be carried. So we have to add the weights of those slots as well.
|
||||
std::vector<INT8> vbLBESlots;
|
||||
GetLBESlots( BPACKPOCKPOS, vbLBESlots );
|
||||
for ( UINT8 i = 0; i < vbLBESlots.size() ; i++ )
|
||||
{
|
||||
pObj = &( pSoldier->inv[ vbLBESlots[ i ] ] );
|
||||
usBackPackWeight += CalculateObjectWeight( pObj );
|
||||
}
|
||||
usBPPenalty = min( ( usBackPackWeight / 50 ), usBPPenalty ); //1 AP penalty for each 5kg of weight up to the penalty defined by AP_MODIFIER_PACK (default = 4)
|
||||
}
|
||||
else //Backpack caried not on back (maybe somewhere inside another LBE or in Hand?)
|
||||
{
|
||||
//apply full penalty
|
||||
}
|
||||
sPoints += usBPPenalty;
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
@@ -1883,6 +1911,8 @@ INT16 BaseAPsToShootOrStab( INT16 bAPs, INT16 bAimSkill, OBJECTTYPE * pObj, SOLD
|
||||
// rof = 15.46, we return an AP cost of exactly 23. So this will allow for fine control over "default" AP costs.
|
||||
|
||||
// Calculate default top & bottom of the magic "aiming" formula!
|
||||
// Formula: AP to Shoot% = (maxAP_soldier) / ((MAXAIM*0.5 + aimSkill_soldier*0.5) * ROF_PER4TURNS / 4)
|
||||
// AP to Shoot = (AP to Shoot%) * MAXAP
|
||||
|
||||
// get this man's maximum possible action points (ignoring carryovers)
|
||||
// the 2 times is here only to allow rounding off using integer math later
|
||||
|
||||
@@ -18623,7 +18623,7 @@ void HandleSystemNewAISituation( SOLDIERTYPE *pSoldier, BOOLEAN fResetABC )
|
||||
// silversurfer: bugfix for endless dying mercs on roof edges
|
||||
// if we delete their pending animation here they will just turn into the proper direction for the fall (in TurnSoldier( void ) )
|
||||
// and stand there forever afterwards in "dying" state, so let this guy fall off the roof first!
|
||||
if ( !pSoldier->usPendingAnimation == FALLOFF && !pSoldier->usPendingAnimation == FALLFORWARD_ROOF )
|
||||
if ( pSoldier->usPendingAnimation != FALLOFF && pSoldier->usPendingAnimation != FALLFORWARD_ROOF )
|
||||
pSoldier->usPendingAnimation = NO_PENDING_ANIMATION;
|
||||
pSoldier->usPendingAnimation2 = NO_PENDING_ANIMATION;
|
||||
pSoldier->flags.bTurningFromPronePosition = FALSE;
|
||||
|
||||
+20
-7
@@ -4951,7 +4951,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi
|
||||
// bool highPowerScope = false;
|
||||
// INT16 sTotalAutofirePenalty = 0;
|
||||
bool fCantSeeTarget = false;
|
||||
FLOAT scopeRangeMod;
|
||||
FLOAT scopeRangeMod = 0.0f;
|
||||
|
||||
// make sure the guy's actually got a weapon in his hand!
|
||||
pInHand = &(pSoldier->inv[pSoldier->ubAttackingHand]);
|
||||
@@ -5011,8 +5011,13 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi
|
||||
gbForceWeaponNotReady = false;
|
||||
|
||||
// Flugente: blind soldiers have sDistVisNoScope = 0...
|
||||
scopeRangeMod = (float)sDistVis / (float)max(1.0f, sDistVisNoScope); // percentage DistVis has been enhanced due to an attached scope
|
||||
iSightRange = (INT32)(iSightRange / scopeRangeMod);
|
||||
if ( sDistVisNoScope )
|
||||
scopeRangeMod = (float)sDistVis / (float)sDistVisNoScope; // percentage DistVis has been enhanced due to an attached scope
|
||||
|
||||
iSightRange = 0;
|
||||
if ( scopeRangeMod )
|
||||
iSightRange = (INT32)(iSightRange / scopeRangeMod);
|
||||
|
||||
if(iSightRange > 0){
|
||||
//CHRISL: The LOS system, which determines whether to display an enemy unit, does not factor in the AimBonus tag during it's calculations. So having
|
||||
// the CTH system use that tag to adjust iSightRange for AimBonus applied from armor might not be the best option. Especially as it can sometimes
|
||||
@@ -5103,7 +5108,7 @@ if (gGameExternalOptions.fUseNewCTHCalculation)
|
||||
fBaseChance = __max( fBaseChance, 0 );
|
||||
fBaseChance = __min( fBaseChance, 100 );
|
||||
|
||||
|
||||
fFinalChance = fBaseChance;
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Second step: Calculate bonuses from aiming
|
||||
//
|
||||
@@ -6492,7 +6497,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
||||
UINT16 iBulletsLeft, iTracersFired = 0, iBulletsPerTracer, iBulletsSinceLastTracer=0, iRoundsFiredPreviously;
|
||||
INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK;
|
||||
UINT8 ubAdjAimPos, ubTargetID, bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer=0;
|
||||
FLOAT maxBonus, aimTimeBonus, scopeRangeMod, iAimBonus;
|
||||
FLOAT maxBonus, aimTimeBonus, scopeRangeMod = 0.0f, iAimBonus;
|
||||
bool fCantSeeTarget = false, fCoverObscured = false;
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CalcChanceToHitGun"));
|
||||
@@ -6548,7 +6553,11 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
||||
gbForceWeaponNotReady = true;
|
||||
sDistVisNoScope = pSoldier->GetMaxDistanceVisible(sGridNo, pSoldier->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE;
|
||||
gbForceWeaponNotReady = false;
|
||||
scopeRangeMod = (float)sDistVis / (float)sDistVisNoScope; // percentage DistVis has been enhanced due to an attached scope
|
||||
|
||||
// Flugente: blind soldiers have sDistVisNoScope = 0...
|
||||
if ( sDistVisNoScope )
|
||||
scopeRangeMod = (float)sDistVis / (float)sDistVisNoScope; // percentage DistVis has been enhanced due to an attached scope
|
||||
|
||||
iMaxNormRange = MaxNormalDistanceVisible() * CELL_X_SIZE;
|
||||
if ( Item[ usItemUsed ].usItemClass == IC_GUN || Item[ usItemUsed ].usItemClass == IC_LAUNCHER)
|
||||
iMaxRange = GunRange( pInHand, pSoldier ); // SANDRO - added argument
|
||||
@@ -6571,7 +6580,11 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Modify Sight and Physical Range
|
||||
iSightRange = (INT32)(iSightRange / scopeRangeMod);
|
||||
|
||||
iSightRange = 0;
|
||||
if ( scopeRangeMod )
|
||||
iSightRange = (INT32)(iSightRange / scopeRangeMod);
|
||||
|
||||
if(iSightRange > 0 && !pSoldier->IsValidAlternativeFireMode( ubAimTime, sGridNo ) ){
|
||||
//CHRISL: The LOS system, which determines whether to display an enemy unit, does not factor in the AimBonus tag during it's calculations. So having
|
||||
// the CTH system use that tag to adjust iSightRange for AimBonus applied from armor might not be the best option. Especially as it can sometimes
|
||||
|
||||
@@ -40,7 +40,7 @@ transformStartElementHandle(void *userData, const XML_Char *name, const XML_Char
|
||||
// Reset all transformation indexes to -1, indicating they are "Not Taken"
|
||||
for (UINT16 x = 0; x < MAXITEMS; x++)
|
||||
{
|
||||
Transform[x].usItem = -1;
|
||||
Transform[x].usItem = (UINT16)-1;
|
||||
}
|
||||
|
||||
pData->maxReadDepth++; //we are not skipping this element
|
||||
|
||||
+2
-2
@@ -647,8 +647,8 @@ extern STR16 szUDBGenExplosiveStatsTooltipText[ 22 ];
|
||||
extern STR16 szUDBGenExplosiveStatsExplanationsTooltipText[ 22 ];
|
||||
extern STR16 szUDBGenSecondaryStatsTooltipText[ 32 ]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32
|
||||
extern STR16 szUDBGenSecondaryStatsExplanationsTooltipText[ 32 ]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32
|
||||
extern STR16 szUDBAdvStatsTooltipText[ 58 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58
|
||||
extern STR16 szUDBAdvStatsExplanationsTooltipText[ 58 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58
|
||||
extern STR16 szUDBAdvStatsTooltipText[ 64 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64
|
||||
extern STR16 szUDBAdvStatsExplanationsTooltipText[ 64 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64
|
||||
extern STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[ 52 ]; // Flugente Overheating Weapons: 48->52
|
||||
|
||||
// Headrock: End Externs
|
||||
|
||||
@@ -7255,6 +7255,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|损|坏|阈|值",
|
||||
L"|毒|性|百|分|比",
|
||||
L"|污|垢|修|正",
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7318,6 +7324,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \n武器的损坏阈值增加了(百分比)。\n \n该数值越高越好。",
|
||||
L"\n \n总伤害中毒性伤害所占的百分比。\n\n部分取决于敌人的装备是否有毒性抵抗或毒性吸收属性。",
|
||||
L"\n \n单发射击所造成的污垢。\n所使用的子弹类型和附件种类对本值有影响。\n \n该数值越低越好。",
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7251,6 +7251,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7314,6 +7320,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7240,6 +7240,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e",
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7303,6 +7309,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.",
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.",
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.",
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.",
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.",
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.",
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.",
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.",
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7235,6 +7235,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7298,6 +7304,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7064,6 +7064,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|M|o|d|i|f|i|k|a|t|o|r|-|H|i|t|z|e|s|c|h|a|d|e|n|s|s|c|h|r|a|n|k|e",
|
||||
L"|G|i|f|t|-|I|n|d|i|k|a|t|o|r",
|
||||
L"|S|c|h|m|u|t|z |M|o|d|i|f|i|k|a|t|o|r",
|
||||
L"|G|i|f|t|i|g|k|e|i|t",
|
||||
L"|N|a|h|r|u|n|g|s |P|u|n|k|t|e",
|
||||
L"|T|r|i|n|k |P|u|n|k|t|e",
|
||||
L"|P|o|r|t|i|o|n|s |G|r|ö|s|s|e",
|
||||
L"|M|o|r|a|l |M|o|d|i|f|i|k|a|t|o|r",
|
||||
L"|S|c|h|i|m|m|e|l |R|a|t|e",
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7127,6 +7133,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nHitzeschadensschranke wird um diesen Prozentsatz erhöht.\n \nHöher is besser.",
|
||||
L"\n \nDies ist der prozentuelle Schaden der durch\nden vergifteten Gegenstand verursacht wird.\n\nDieser Schaden hängt natürlich davon ab,\noder der Feind eine Gift-Resistenz hat oder nicht.",
|
||||
L"\n \nEin einziger Schuss verursacht diesen Schmutz.\nUnterschiedliche Munition und Waffen-Anbauten\nkönnen diesen Wert verändern.\n \nNiedriger ist besser.",
|
||||
L"\n \nDies zu Essen verursacht soviel Vergiftung.\n \nNiedriger ist besser.",
|
||||
L"\n \nMenge an Energy in kcal.\n \nHöher ist besser.",
|
||||
L"\n \nWasseranteil in Litern.\n \nHöher ist besser.",
|
||||
L"\n \nProzentsatz des Gegenstandes der mit einem\n Bissen aufgebraucht wird.\n \nWeniger ist besser.",
|
||||
L"\n \nDie Moral wird um diese Zahl modifiziert.\n \nHöher ist besser.",
|
||||
L"\n \nDer Gegenstand wird mit der Zeit schlecht.\nIst mehr als 50% verschimmelt wird er giftig.\nDies ist die Rate in der Schimmel entsteht.\n \nNiedriger ist besser.",
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7237,6 +7237,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7300,6 +7306,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7255,6 +7255,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7318,6 +7324,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7240,6 +7240,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7303,6 +7309,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
@@ -7255,6 +7255,12 @@ STR16 szUDBAdvStatsTooltipText[]=
|
||||
L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r",
|
||||
L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", // TODO.Translate
|
||||
L"|D|i|r|t |M|o|d|i|f|i|e|r", // TODO.Translate
|
||||
L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|F|o|o|d| |P|o|i|n|t|s",//TODO.translate
|
||||
L"|D|r|i|n|k |P|o|i|n|t|s",//TODO.translate
|
||||
L"|P|o|r|t|i|o|n |S|i|z|e",//TODO.translate
|
||||
L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate
|
||||
};
|
||||
|
||||
// Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular.
|
||||
@@ -7318,6 +7324,12 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]=
|
||||
L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.",
|
||||
L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", // TODO.Translate
|
||||
L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", // TODO.Translate
|
||||
L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of energy in kcal.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nAmount of water in liter.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE
|
||||
L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE
|
||||
L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE
|
||||
};
|
||||
|
||||
STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]=
|
||||
|
||||
Reference in New Issue
Block a user