New feature: quest & intel map overlay

For more info, see http://thepit.ja-galaxy-forum.com/index.php?t=msg&th=23742&goto=353499&#msg_353499

Requires GameDir >= r2424

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8560 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2018-05-14 21:26:37 +00:00
parent 70ad3387a8
commit 100eea196b
28 changed files with 946 additions and 191 deletions
+9 -9
View File
@@ -15,9 +15,9 @@
#ifdef JA2EDITOR
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.8561 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.8561 (Development Build)" };
#endif
// ------------------------------
@@ -27,11 +27,11 @@
//DEBUG BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.8561 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.8561 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.8561 (Development Build)" };
#endif
#elif defined CRIPPLED_VERSION
@@ -46,16 +46,16 @@
//RELEASE BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.8561 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.8561 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Release v1.13.8554 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release v1.13.8561 (Development Build)" };
#endif
#endif
CHAR8 czVersionNumber[16] = { "Build 18.04.15" }; //YY.MM.DD
CHAR8 czVersionNumber[16] = { "Build 18.05.14" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" };
// SAVE_GAME_VERSION is defined in header, change it there
+28
View File
@@ -1842,4 +1842,32 @@ void PerformVideoInfoDumpIntoFile( const STR8 filename, BOOLEAN fAppend )
#endif
// Flugente: retrieve width and height of video object
void GetVideoObjectDimensions( HVOBJECT hSrcVObject, UINT16 usIndex, UINT16& rusWidth, UINT16& rusHeight )
{
rusWidth = 0;
rusHeight = 0;
if ( hSrcVObject == NULL )
return;
switch ( hSrcVObject->ubBitDepth )
{
case 32:
case 16:
if ( usIndex < hSrcVObject->usNumberOf16BPPObjects )
{
rusWidth = hSrcVObject->p16BPPObject[usIndex].usWidth;
rusHeight = hSrcVObject->p16BPPObject[usIndex].usHeight;
}
break;
case 8:
if ( usIndex < hSrcVObject->usNumberOfObjects )
{
rusWidth = hSrcVObject->pETRLEObject[usIndex].usWidth;
rusHeight = hSrcVObject->pETRLEObject[usIndex].usHeight;
}
break;
}
}
+3
View File
@@ -271,6 +271,9 @@ BOOLEAN BltVideoObjectOutlineShadowFromIndex(UINT32 uiDestVSurface, UINT32 uiSrc
BOOLEAN BltVideoObjectOutlineShadow(UINT32 uiDestVSurface, HVOBJECT hSrcVObject, UINT16 usIndex, INT32 iDestX, INT32 iDestY );
BOOLEAN PixelateVideoObjectRect( UINT32 uiDestVSurface, INT32 X1, INT32 Y1, INT32 X2, INT32 Y2);
// Flugente: retrieve width and height of video object
void GetVideoObjectDimensions( HVOBJECT hSrcVObject, UINT16 usIndex, UINT16& rusWidth, UINT16& rusHeight );
/*
#ifdef __cplusplus
}
+95 -6
View File
@@ -7683,6 +7683,7 @@ void HandlePrisonerProcessingInSector( INT16 sMapX, INT16 sMapY, INT8 bZ )
// - position of enemy helis
// - position of POWs
// - position of terrorists
// - position and time of raids (bloodcats/zombies/bandits)
// - position of possible RPCs (Manuel, Maddog...)
//
// There are always up to INTELINFO_MAXNUMBER different informations available at a time. Every x hours these change.
@@ -7742,6 +7743,53 @@ void BuildIntelInfoArray()
if ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW && !( pSoldier->usSoldierFlagMask2 & SOLDIER_MERC_POW_LOCATIONKNOWN ) )
intelarray[i] = ubID;
}
// next 6: terrorist locations
else if ( i < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 )
{
int cnt = i - ( 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID );
int profile = SLAY;
if ( cnt == 1 ) profile = ANNIE;
else if ( cnt == 2 ) profile = CHRIS;
else if ( cnt == 3 ) profile = TIFFANY;
else if ( cnt == 4 ) profile = T_REX;
else if ( cnt == 5 ) profile = DRUGGIST;
if ( !( gMercProfiles[profile].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED ) &&
gMercProfiles[profile].bMercStatus != MERC_IS_DEAD &&
gMercProfiles[profile].sSectorX > 0 &&
gMercProfiles[profile].sSectorY > 0 &&
!CheckFact( FACT_TERRORIST_LOCATION_KNOWN_SLAY + cnt, 0 ) &&
CheckFact( FACT_CARMEN_EXPLAINED_DEAL, 0) &&
gubQuest[QUEST_KILL_TERRORISTS] == QUESTINPROGRESS )
{
intelarray[i] = cnt;
}
}
// next 3: raids
else if ( i < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 + 3 )
{
int raidtype = i - ( 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 );
if ( raidtype == 0 )
{
if ( !gGameExternalOptions.gRaid_Bloodcats )
continue;
}
else if ( raidtype == 1 )
{
if ( !gGameExternalOptions.gRaid_Zombies || !gGameSettings.fOptions[TOPTION_ZOMBIES] )
continue;
}
else if ( raidtype == 2 )
{
if ( !gGameExternalOptions.gRaid_Bandits )
continue;
}
if ( !CheckFact( FACT_RAID_KNOWN_BLOODCATS + raidtype, 0 ) )
intelarray[i] = raidtype;
}
// and so on...
}
@@ -7754,7 +7802,7 @@ void CalcIntelInfoOfferings()
int prime = 163;
int iteratornumber = 0;
int safetycounter = 0;
int maxchecks = min( 20, INTEL_MAXINFO ); // we only do this until a certain point - so it is possible to not get a result
int maxchecks = min( 45, INTEL_MAXINFO ); // we only do this until a certain point - so it is possible to not get a result
int checkcounter = 0;
for ( int i = 0; i < INTELINFO_MAXNUMBER; ++i )
@@ -7804,29 +7852,56 @@ void GetIntelInfoOfferings( int aInfo[] )
void GetIntelInfoTextAndPrice(int aInfoNumber, STR16 aString, int& arIntelCost )
{
wcscpy( aString, L"No data found" );
wcscpy( aString, szIntelText[6] );
arIntelCost = 0;
if ( aInfoNumber < 0 )
{
wcscpy( aString, L"Data no longer eligible." );
wcscpy( aString, szIntelText[7] );
arIntelCost = 0;
}
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal )
{
wcscpy( aString, L"Whereabouts of a high-ranking officer of the royal army." );
wcscpy( aString, szIntelText[8] );
arIntelCost = 50;
}
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() )
{
wcscpy( aString, L"Flight plans of a airforce helicopter." );
wcscpy( aString, szIntelText[9] );
arIntelCost = 30;
}
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID )
{
wcscpy( aString, L"Coordinates of a recently imprisoned member of your force." );
wcscpy( aString, szIntelText[10] );
arIntelCost = 30;
}
// next 6: terrorist locations
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 )
{
wcscpy( aString, szIntelText[11] );
arIntelCost = 20;
}
// next 3: raids
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 + 3 )
{
int raidtype = aInfoNumber - ( 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 );
if ( raidtype == 0 )
{
wcscpy( aString, szIntelText[12] );
arIntelCost = 15;
}
else if ( raidtype == 1 )
{
wcscpy( aString, szIntelText[13] );
arIntelCost = 15;
}
else if ( raidtype == 2 )
{
wcscpy( aString, szIntelText[14] );
arIntelCost = 15;
}
}
}
void BuyIntelInfo( int aInfoNumber )
@@ -7853,6 +7928,20 @@ void BuyIntelInfo( int aInfoNumber )
if ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_POW )
pSoldier->usSoldierFlagMask2 |= SOLDIER_MERC_POW_LOCATIONKNOWN;
}
// next 6: terrorist locations
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 )
{
int cnt = aInfoNumber - ( 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID );
SetFactTrue( FACT_TERRORIST_LOCATION_KNOWN_SLAY + cnt );
}
// next 3: raids
else if ( aInfoNumber < 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 + 3 )
{
int raidtype = aInfoNumber - ( 0 + gStrategicStatus.usVIPsTotal + gEnemyHeliVector.size() + gTacticalStatus.Team[gbPlayerNum].bLastID - gTacticalStatus.Team[gbPlayerNum].bFirstID + 6 );
SetFactTrue( FACT_RAID_KNOWN_BLOODCATS + raidtype );
}
// and so on...
intelarray[aInfoNumber] = -1;
+3
View File
@@ -1932,6 +1932,9 @@ void RenderAutoResolve()
yp = iScreenHeightOffset + 290 + gpAR->bVerticalOffset;
SetFontForeground( FONT_YELLOW );
mprintf( xp, yp, str );
// Flugente: in any case, reset creature attack variables
ResetCreatureAttackVariables();
}
MarkButtonsDirty();
+3
View File
@@ -208,4 +208,7 @@ BOOLEAN DeleteStrategicEvent( UINT8 ubCallbackID, UINT32 uiParam );
void DeleteAllStrategicEventsOfType( UINT8 ubCallbackID );
void DeleteAllStrategicEvents();
// Flugente: return vector of all events of type ubCallbackID with time and param
std::vector< std::pair<UINT32, UINT32> > GetAllStrategicEventsOfType( UINT8 ubCallbackID );
#endif
+16
View File
@@ -666,7 +666,23 @@ BOOLEAN DeleteStrategicEvent( UINT8 ubCallbackID, UINT32 uiParam )
return FALSE;
}
std::vector< std::pair<UINT32, UINT32> > GetAllStrategicEventsOfType( UINT8 ubCallbackID )
{
std::vector< std::pair<UINT32, UINT32> > vec;
STRATEGICEVENT* curr = gpEventList;
while ( curr )
{
if ( curr->ubCallbackID == ubCallbackID )
{
vec.push_back( std::pair<UINT32, UINT32>( curr->uiTimeStamp, curr->uiParam ) );
}
curr = curr->next;
}
return vec;
}
//part of the game.sav files (not map files)
BOOLEAN SaveStrategicEventsToSavedGame( HWFILE hFile )
+62
View File
@@ -876,6 +876,8 @@ static int l_AddArmsDealerAdditionalIntelDataItem( lua_State *L );
static int l_SetPhotoFactLaptopData( lua_State *L );
static int l_GetNumHostilesInSector( lua_State *L );
static int l_SetIntelAndQuestMapDataForSector( lua_State *L );
using namespace std;
UINT16 idProfil;
@@ -1758,6 +1760,8 @@ void IniFunction(lua_State *L, BOOLEAN bQuests )
lua_register( L, "SetPhotoFactLaptopData", l_SetPhotoFactLaptopData );
lua_register( L, "GetNumHostilesInSector", l_GetNumHostilesInSector );
lua_register( L, "SetIntelAndQuestMapDataForSector", l_SetIntelAndQuestMapDataForSector );
}
#ifdef NEWMUSIC
BOOLEAN LetLuaMusicControl(UINT8 Init)
@@ -13435,3 +13439,61 @@ static int l_GetNumHostilesInSector( lua_State *L )
return 1;
}
void LuaGetIntelAndQuestMapData( INT32 aLevel )
{
const char* filename = "scripts\\strategicmap.lua";
LuaScopeState _LS( true );
IniFunction( _LS.L(), TRUE );
IniGlobalGameSetting( _LS.L() );
SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget );
LuaFunction( _LS.L, "GetIntelAndQuestMapData" ).Param<int>( aLevel ).Call( 1 );
}
extern void AddIntelAndQuestMapDataForSector( INT16 sSectorX, INT16 sSectorY, UINT8 ausMapColour, int asSymbol, STR16 aText, STR16 aText_Short );
static int l_SetIntelAndQuestMapDataForSector( lua_State *L )
{
int n = lua_gettop( L );
if ( n >= 4 )
{
INT16 sectorx = lua_tointeger( L, 1 );
INT16 sectory = lua_tointeger( L, 2 );
UINT8 mapcolour = lua_tointeger( L, 3 );
int symbol = lua_tointeger( L, 4 );
CHAR16 w_str[1024];
w_str[0] = '\0';
CHAR16 w_str_short[128];
w_str_short[0] = '\0';
if ( n >= 5 )
{
size_t len = 0;
const char* str = lua_tolstring( L, 5, &len );
MultiByteToWideChar( CP_UTF8, 0, str, -1, w_str, sizeof( w_str ) / sizeof( w_str[0] ) );
w_str[sizeof( w_str ) / sizeof( w_str[0] ) - 1] = '\0';
if ( n >= 6 )
{
size_t len_short = 0;
const char* str_short = lua_tolstring( L, 6, &len_short );
MultiByteToWideChar( CP_UTF8, 0, str_short, -1, w_str_short, sizeof( w_str_short ) / sizeof( w_str_short[0] ) );
w_str_short[sizeof( w_str_short ) / sizeof( w_str_short[0] ) - 1] = '\0';
}
}
AddIntelAndQuestMapDataForSector( sectorx, sectory, mapcolour, symbol, w_str, w_str_short );
}
return 0;
}
+1
View File
@@ -98,4 +98,5 @@ void LuaAddPhotoData( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, INT32 sGrid
void LuaGetPhotoData( UINT8 aType );
void LuaSetPhotoState( INT16 asIndex, UINT8 aState );
void LuaVerifyPhotoState( INT16 asIndex );
void LuaGetIntelAndQuestMapData( INT32 aLevel );
#endif
+159 -17
View File
@@ -56,6 +56,8 @@ UINT16 MAP_BORDER_DISEASE_BTN_X; // Flugente: disease
UINT16 MAP_BORDER_DISEASE_BTN_Y;
UINT16 MAP_BORDER_WEATHER_BTN_X; // Flugente: weather
UINT16 MAP_BORDER_WEATHER_BTN_Y;
UINT16 MAP_BORDER_INTEL_BTN_X; // Flugente: intel
UINT16 MAP_BORDER_INTEL_BTN_Y;
UINT16 MAP_LEVEL_MARKER_X;
UINT16 MAP_LEVEL_MARKER_Y;
@@ -101,8 +103,8 @@ extern int CLOCK_Y_START;
// buttons & button images
// HEADROCK HAM 4: Increase both arrays by one to accomodate new Mobile Restrictions button
INT32 giMapBorderButtons[ NUM_MAP_BORDER_BTNS ] = { -1, -1, -1, -1, -1, -1, -1, -1 };
INT32 giMapBorderButtonsImage[ NUM_MAP_BORDER_BTNS ] = { -1, -1, -1, -1, -1, -1, -1, -1 };
INT32 giMapBorderButtons[ NUM_MAP_BORDER_BTNS ] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 };
INT32 giMapBorderButtonsImage[ NUM_MAP_BORDER_BTNS ] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 };
void DeleteMapBorderButtons( void );
BOOLEAN CreateButtonsForMapBorder( void );
@@ -125,11 +127,10 @@ void BtnAircraftCallback(GUI_BUTTON *btn,INT32 reason);
void BtnTeamCallback(GUI_BUTTON *btn,INT32 reason);
void BtnMilitiaCallback(GUI_BUTTON *btn,INT32 reason);
// Flugente: disease
// Flugente: more callbacks
void BtnDiseaseCallback(GUI_BUTTON *btn,INT32 reason);
// Flugente: weather
void BtnWeatherCallback( GUI_BUTTON *btn, INT32 reason );
void BtnIntelCallback( GUI_BUTTON *btn, INT32 reason );
void LevelMarkerBtnCallback(MOUSE_REGION * pRegion, INT32 iReason );
@@ -254,8 +255,7 @@ BOOLEAN CreateButtonsForMapBorder( void )
giMapBorderButtons[ MAP_BORDER_TOWN_BTN ] = QuickCreateButton( giMapBorderButtonsImage[ MAP_BORDER_TOWN_BTN ], MAP_BORDER_TOWN_BTN_X, MAP_BORDER_TOWN_BTN_Y,
BUTTON_NO_TOGGLE, MSYS_PRIORITY_HIGH,
(GUI_CALLBACK)MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnTownCallback);
// mines
giMapBorderButtonsImage[ MAP_BORDER_MINE_BTN ] = LoadButtonImage( "INTERFACE\\map_border_buttons.sti" ,-1,4,-1,13,-1 );
giMapBorderButtons[ MAP_BORDER_MINE_BTN ] = QuickCreateButton( giMapBorderButtonsImage[ MAP_BORDER_MINE_BTN ], MAP_BORDER_MINE_BTN_X, MAP_BORDER_MINE_BTN_Y,
@@ -341,6 +341,28 @@ BOOLEAN CreateButtonsForMapBorder( void )
SetButtonCursor( giMapBorderButtons[MAP_BORDER_WEATHER_BTN], MSYS_NO_CURSOR );
}
// Flugente: intel
if ( TRUE )
{
giMapBorderButtonsImage[MAP_BORDER_INTEL_BTN] = LoadButtonImage( "INTERFACE\\map_border_buttons.sti", -1, 39, -1, 40, -1 );
// if the button image cannot be created, this is likely to a custom sti replacement that isn't up to date to this feature - just use some other images then
if ( giMapBorderButtonsImage[MAP_BORDER_INTEL_BTN] < 0 )
giMapBorderButtonsImage[MAP_BORDER_INTEL_BTN] = LoadButtonImage( "INTERFACE\\map_border_buttons.sti", -1, 2, -1, 11, -1 );
INT16 x = MAP_BORDER_INTEL_BTN_X;
if ( giMapBorderButtonsImage[MAP_BORDER_WEATHER_BTN] < 0 )
x = MAP_BORDER_WEATHER_BTN_X;
giMapBorderButtons[MAP_BORDER_INTEL_BTN] = QuickCreateButton( giMapBorderButtonsImage[MAP_BORDER_INTEL_BTN], x, MAP_BORDER_INTEL_BTN_Y,
BUTTON_NO_TOGGLE, MSYS_PRIORITY_HIGH,
(GUI_CALLBACK)MSYS_NO_CALLBACK, (GUI_CALLBACK)BtnIntelCallback );
SetButtonFastHelpText( giMapBorderButtons[MAP_BORDER_INTEL_BTN], pMapScreenBorderButtonHelpText[MAP_BORDER_INTEL_BTN] );
SetButtonCursor( giMapBorderButtons[MAP_BORDER_INTEL_BTN], MSYS_NO_CURSOR );
}
#ifdef JA2UB
//EnableButton
@@ -400,16 +422,17 @@ BOOLEAN CreateButtonsForMapBorder( void )
#endif
#ifdef JA113DEMO
DisableButton( giMapBorderButtons[ MAP_BORDER_TOWN_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_MINE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_TEAMS_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_MILITIA_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_AIRSPACE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_ITEM_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_DISEASE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_WEATHER_BTN ]);
fShowTownFlag = FALSE;
DisableButton( giMapBorderButtons[ MAP_BORDER_TOWN_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_MINE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_TEAMS_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_MILITIA_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_AIRSPACE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_ITEM_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_DISEASE_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_WEATHER_BTN ]);
DisableButton( giMapBorderButtons[ MAP_BORDER_INTEL_BTN ] );
fShowTownFlag = FALSE;
#endif
InitializeMapBorderButtonStates( );
@@ -544,6 +567,21 @@ void BtnWeatherCallback( GUI_BUTTON *btn, INT32 reason )
}
}
// Flugente: intel
void BtnIntelCallback( GUI_BUTTON *btn, INT32 reason )
{
if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
CommonBtnCallbackBtnDownChecks();
ToggleIntelFilter();
}
else if ( reason & MSYS_CALLBACK_REASON_RBUTTON_DWN )
{
CommonBtnCallbackBtnDownChecks();
}
}
void ToggleShowTownsMode( void )
{
if( fShowTownFlag == TRUE )
@@ -780,6 +818,27 @@ void ToggleWeatherFilter( void )
}
}
// Flugente: intel
void ToggleIntelFilter()
{
if ( gusMapDisplayColourMode == MAP_DISPLAY_INTEL )
{
gusMapDisplayColourMode = MAP_DISPLAY_NORMAL;
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
// dirty regions
fMapPanelDirty = TRUE;
fTeamPanelDirty = TRUE;
fCharacterInfoPanelDirty = TRUE;
}
else
{
// turn ON
TurnOnIntelFilterMode();
}
}
void DisplayCurrentLevelMarker( void )
{
// display the current level marker on the map border
@@ -881,6 +940,7 @@ void TurnOnAirSpaceMode( void )
MapBorderButtonOn( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
// Turn off towns & mines (mostly because town/mine names overlap SAM site names)
if( fShowTownFlag )
@@ -1007,6 +1067,7 @@ void TurnOnDiseaseFilterMode( void )
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOn( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
if( fShowItemsFlag == TRUE )
{
@@ -1072,6 +1133,7 @@ void TurnOnWeatherFilterMode()
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOn( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
if ( fShowItemsFlag == TRUE )
{
@@ -1129,6 +1191,74 @@ void TurnOnWeatherFilterMode()
}
}
void TurnOnIntelFilterMode()
{
// if mode already on, leave, else set and redraw
if ( gusMapDisplayColourMode != MAP_DISPLAY_INTEL )
{
gusMapDisplayColourMode = MAP_DISPLAY_INTEL;
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOn( MAP_BORDER_INTEL_BTN );
if ( fShowItemsFlag )
{
fShowItemsFlag = FALSE;
MapBorderButtonOff( MAP_BORDER_ITEM_BTN );
}
// Turn off towns, mines, teams, militia & airspace if any are on
if ( fShowTownFlag )
{
fShowTownFlag = FALSE;
MapBorderButtonOff( MAP_BORDER_TOWN_BTN );
}
if ( fShowMineFlag )
{
fShowMineFlag = FALSE;
MapBorderButtonOff( MAP_BORDER_MINE_BTN );
}
if ( fShowTeamFlag )
{
fShowTeamFlag = FALSE;
MapBorderButtonOff( MAP_BORDER_TEAMS_BTN );
}
if ( fShowMilitia )
{
fShowMilitia = FALSE;
MapBorderButtonOff( MAP_BORDER_MILITIA_BTN );
}
if ( ( bSelectedDestChar != -1 ) || fPlotForHelicopter || fPlotForMilitia )
{
AbortMovementPlottingMode();
}
else if ( gfInChangeArrivalSectorMode )
{
CancelChangeArrivalSectorMode();
}
// Flugente: basically only show this message the first time every session
static BOOLEAN sIntelViewed = FALSE;
if ( !sIntelViewed )
{
MapScreenMessage( FONT_MCOLOR_LTYELLOW, MSG_MAP_UI_POSITION_MIDDLE, zMarksMapScreenText[27] );
sIntelViewed = TRUE;
}
// dirty regions
fMapPanelDirty = TRUE;
fTeamPanelDirty = TRUE;
fCharacterInfoPanelDirty = TRUE;
}
}
void InitializeMapBorderButtonStates( void )
{
if( fShowItemsFlag )
@@ -1183,18 +1313,28 @@ void InitializeMapBorderButtonStates( void )
MapBorderButtonOn( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
break;
case MAP_DISPLAY_DISEASE:
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOn( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
break;
case MAP_DISPLAY_WEATHER:
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOn( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOff( MAP_BORDER_INTEL_BTN );
break;
case MAP_DISPLAY_INTEL:
MapBorderButtonOff( MAP_BORDER_AIRSPACE_BTN );
MapBorderButtonOff( MAP_BORDER_DISEASE_BTN );
MapBorderButtonOff( MAP_BORDER_WEATHER_BTN );
MapBorderButtonOn( MAP_BORDER_INTEL_BTN );
break;
}
}
@@ -1307,6 +1447,8 @@ void InitMapBorderButtonCoordinates()
MAP_BORDER_DISEASE_BTN_Y = (SCREEN_HEIGHT - yResOffset - buttonOffset);
MAP_BORDER_WEATHER_BTN_X = xResOffset + MAP_BORDER_X + ((SCREEN_WIDTH - MAP_BORDER_X - 2 * xResOffset) / 2) + 233;
MAP_BORDER_WEATHER_BTN_Y = (SCREEN_HEIGHT - yResOffset - buttonOffset);
MAP_BORDER_INTEL_BTN_X = xResOffset + MAP_BORDER_X + ( ( SCREEN_WIDTH - MAP_BORDER_X - 2 * xResOffset ) / 2 ) + 276;
MAP_BORDER_INTEL_BTN_Y = ( SCREEN_HEIGHT - yResOffset - buttonOffset );
MAP_LEVEL_MARKER_X = xResOffset + MAP_BORDER_X + ((SCREEN_WIDTH - MAP_BORDER_X - 2 * xResOffset) / 2) + 114;
MAP_LEVEL_MARKER_Y = (SCREEN_HEIGHT - yResOffset - buttonOffset);
+6 -6
View File
@@ -29,6 +29,7 @@ enum{
MAP_BORDER_MILITIA_BTN,
MAP_BORDER_DISEASE_BTN, // Flugente: toggle disease views
MAP_BORDER_WEATHER_BTN, // Flugente: toggle weather display
MAP_BORDER_INTEL_BTN, // Flugente: intel display
NUM_MAP_BORDER_BTNS, // end enumeration marker
};
@@ -53,6 +54,7 @@ enum
MAP_DISPLAY_AIRSPACE_COLOURED_SAMS,
MAP_DISPLAY_DISEASE,
MAP_DISPLAY_WEATHER,
MAP_DISPLAY_INTEL,
};
extern UINT8 gusMapDisplayColourMode;
@@ -72,21 +74,19 @@ void ToggleShowTeamsMode( void );
void ToggleAirspaceMode( void );
void ToggleItemsFilter( void );
// Flugente: disease
// Flugente: more filters
void ToggleDiseaseFilter( );
// Flugente: weather
void ToggleWeatherFilter( );
void ToggleIntelFilter();
void TurnOnShowTeamsMode( void );
void TurnOnAirSpaceMode( void );
void TurnOnItemFilterMode( void );
// Flugente: disease
// Flugente: more modes
void TurnOnDiseaseFilterMode();
// Flugente: weather
void TurnOnWeatherFilterMode( );
void TurnOnIntelFilterMode();
// create/destroy buttons for map border region
void DeleteMapBorderButtons( void );
+263 -47
View File
@@ -47,6 +47,8 @@
#include "ASD.h" // added by Flugente
#include "MilitiaIndividual.h" // added by Flugente
#include "Map Screen Interface Map Inventory.h" // added by Flugente
#include "LuaInitNPCs.h" // added by Flugente
#include "Game Event Hook.h" // added by Flugente
#endif
#include "Quests.h"
@@ -294,6 +296,9 @@ UINT32 guiCHARICONS;
// the merc arrival sector landing zone icon
UINT32 guiBULLSEYE;
// Flugente: symbols indicating various things on the intel map
UINT32 guiINTEL;
UINT16 MAP_MILITIA_BOX_POS_X;
UINT16 MAP_MILITIA_BOX_POS_Y;
@@ -572,6 +577,7 @@ BOOLEAN CanMilitiaAutoDistribute( void );
void ShowItemsOnMap( void );
void ShowDiseaseOnMap( );
void ShowIntelOnMap();
void DrawMapBoxIcon( HVOBJECT hIconHandle, UINT16 usVOIndex, INT16 sMapX, INT16 sMapY, UINT8 ubIconPosition );
void DisplayDestinationOfHelicopter( void );
void DrawOrta();
@@ -693,6 +699,88 @@ void HandleShowingOfEnemiesWithMilitiaOn( void )
}
}
// colour for a sector on the map
// aType = 0: disease
// aType = 1: weather
// aType = 2: intel
INT32 GetMapColour( INT16 sX, INT16 sY, UINT8 aType )
{
if ( aType == 0 )
{
UINT16 population = GetSectorPopulation( sX, sY );
if ( population )
{
UINT8 sector = SECTOR( sX, sY );
SECTORINFO *pSectorInfo = &( SectorInfo[sector] );
// display sector information only if we know about infection there
if ( pSectorInfo && ( ( pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_PLAYER ) || ( gubFact[FACT_DISEASE_WHODATA_ACCESS] && pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_WHO ) ) )
{
FLOAT infectedpercentage = (FLOAT)pSectorInfo->usInfected / (FLOAT)( population );
if ( infectedpercentage < 0.2f )
return MAP_SHADE_DK_GREEN;
else if ( infectedpercentage < 0.3f )
return MAP_SHADE_MD_GREEN;
else if ( infectedpercentage < 0.4f )
return MAP_SHADE_LT_GREEN;
else if ( infectedpercentage < 0.5f )
return MAP_SHADE_DK_YELLOW;
else if ( infectedpercentage < 0.6f )
return MAP_SHADE_MD_YELLOW;
else if ( infectedpercentage < 0.7f )
return MAP_SHADE_LT_YELLOW;
else if ( infectedpercentage < 0.8f )
return MAP_SHADE_DK_RED;
else if ( infectedpercentage < 0.9f )
return MAP_SHADE_MD_RED;
else
return MAP_SHADE_LT_RED;
}
}
}
else if ( aType == 1 )
{
UINT8 sector = SECTOR( sX, sY );
SECTORINFO *pSectorInfo = &( SectorInfo[sector] );
// display sector information only if we know about infection there
if ( pSectorInfo )
{
switch ( pSectorInfo->usWeather )
{
case WEATHER_FORECAST_RAIN:
return MAP_SHADE_LT_CYAN;
break;
case WEATHER_FORECAST_THUNDERSHOWERS:
return MAP_SHADE_LT_BLUE;
break;
case WEATHER_FORECAST_SANDSTORM:
return MAP_SHADE_ORANGE;
break;
case WEATHER_FORECAST_SNOW:
return MAP_SHADE_LT_GREY;
break;
case WEATHER_FORECAST_NORMAL:
default:
return MAP_SHADE_BLACK;
break;
}
}
}
else if ( aType == 2 )
{
UINT8 sector = SECTOR( sX, sY );
return gMapIntelData[sector].mapcolour;
}
return MAP_SHADE_DK_GREY;
}
UINT32 DrawMap( void )
{
HVSURFACE hSrcVSurface;
@@ -715,6 +803,14 @@ UINT32 DrawMap( void )
//MapScreenRect={ (MAP_VIEW_START_X+MAP_GRID_X - 2), ( MAP_VIEW_START_Y+MAP_GRID_Y - 1), MAP_VIEW_START_X + MAP_VIEW_WIDTH - 1 + MAP_GRID_X , MAP_VIEW_START_Y+MAP_VIEW_HEIGHT-10+MAP_GRID_Y};
if ( gusMapDisplayColourMode == MAP_DISPLAY_INTEL )
{
extern void DetermineMapIntelData(INT32 asSectorZ);
// This is the location where we should call lua and refill our intel data
DetermineMapIntelData( iCurrentMapSectorZ );
}
if( !iCurrentMapSectorZ )
{
pDestBuf = (UINT16*)LockVideoSurface( guiSAVEBUFFER, &uiDestPitchBYTES);
@@ -851,6 +947,10 @@ UINT32 DrawMap( void )
ShadeMapElem( cnt, cnt2, GetMapColour( cnt, cnt2, 1 ) );
break;
case MAP_DISPLAY_INTEL:
ShadeMapElem( cnt, cnt2, GetMapColour( cnt, cnt2, 2 ) );
break;
case MAP_DISPLAY_NORMAL:
default:
if ( GetSectorFlagStatus( cnt, cnt2, (UINT8)iCurrentMapSectorZ, SF_ALREADY_VISITED ) == FALSE )
@@ -1397,48 +1497,6 @@ void ShowUncertainNumberEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
InvalidateRegion( sXPosition ,sYPosition, sXPosition + DMAP_GRID_X, sYPosition + DMAP_GRID_Y );
}
void ShowVIPSymbol( INT16 sSectorX, INT16 sSectorY )
{
INT16 sXPosition = 0, sYPosition = 0;
HVOBJECT hIconHandle;
UINT8 iconOffsetX = 0;
UINT8 iconOffsetY = 0;
if ( iResolution >= _640x480 && iResolution < _800x600 )
{
iconOffsetX = 2;
iconOffsetY = 9;
}
else if ( iResolution < _1024x768 )
{
iconOffsetX = 8;
iconOffsetY = 12;
}
else
{
iconOffsetX = 12;
iconOffsetY = 13;
}
// grab the x and y postions
sXPosition = sSectorX;
sYPosition = sSectorY;
// get the video object
GetVideoObject( &hIconHandle, guiCHARICONS );
// check if we are zoomed in...need to offset in case for scrolling purposes
sXPosition = (INT16)(iconOffsetX + ( MAP_VIEW_START_X + (sSectorX * MAP_GRID_X + 1)) - 1);
sYPosition = (INT16)(((iconOffsetY + ( yResOffset + sSectorY * MAP_GRID_Y ) + 1)));
sYPosition -= 2;
// small VIP symbol
BltVideoObject( guiSAVEBUFFER, hIconHandle, VIP_SYMBOL, sXPosition, sYPosition, VO_BLT_SRCTRANSPARENCY, NULL );
InvalidateRegion( sXPosition, sYPosition, sXPosition + DMAP_GRID_X, sYPosition + DMAP_GRID_Y );
}
void ShowTeamAndVehicles(INT32 fShowFlags)
{
// go through each sector, display the on duty, assigned, and vehicles
@@ -6755,11 +6813,7 @@ void HandleShowingOfEnemyForcesInSector( INT16 sSectorX, INT16 sSectorY, INT8 bS
{
return;
}
// Flugente: note if we have detected a VIP here
if ( PlayerKnowsAboutVIP( sSectorX, sSectorY ) )
ShowVIPSymbol( sSectorX, sSectorY );
// Flugente: show militia in motion
if ( NumNonPlayerTeamMembersInSector( sSectorX, sSectorY, MILITIA_TEAM ) )
{
@@ -8283,3 +8337,165 @@ void DisplayMilitiaGroupBox()
pGroup = pGroup->next;
}
}
// Flugente: intel display
InqMapInfo gMapIntelData[256];
void AddIntelAndQuestMapDataForSector( INT16 sSectorX, INT16 sSectorY, UINT8 ausMapColour, int asSymbol, STR16 aText, STR16 aText_Short )
{
if ( sSectorX > 0 && sSectorX < 17 && sSectorY > 0 && sSectorY < 17 )
{
int sector = SECTOR( sSectorX, sSectorY );
if ( ausMapColour < MAP_SHADE_MAX )
gMapIntelData[sector].mapcolour = ausMapColour;
if ( asSymbol >= 0 )
gMapIntelData[sector].symbols.push_back( asSymbol );
if ( wcsnlen( aText, 1024 ) > 0 )
swprintf( gMapIntelData[sector].text, L"%s%s\n", gMapIntelData[sector].text, aText );
if ( wcsnlen( aText_Short, 128 ) > 0 )
swprintf( gMapIntelData[sector].shorttext, L"%s", aText_Short );
}
}
void DetermineMapIntelData( INT32 asSectorZ )
{
// clear data
for ( int i = 0; i < 256; ++i )
{
gMapIntelData[i].mapcolour = MAP_SHADE_BLACK;
gMapIntelData[i].text[0] = '\0';
gMapIntelData[i].shorttext[0] = '\0';
gMapIntelData[i].symbols.clear();
}
// add data
if ( !asSectorZ )
{
// enemy VIPS we know of
for ( int sector = 0; sector < 256; ++sector )
{
if ( PlayerKnowsAboutVIP( SECTORX( sector ), SECTORY( sector ) ) )
{
AddIntelAndQuestMapDataForSector( SECTORX( sector ), SECTORY( sector ), MAP_SHADE_LT_RED, 5, szIntelText[3], L"" );
}
}
// uncovered terrorists we know of
for ( int cnt = 0; cnt < 6; ++cnt )
{
int profile = SLAY;
if ( cnt == 1 ) profile = ANNIE;
else if ( cnt == 2 ) profile = CHRIS;
else if ( cnt == 3 ) profile = TIFFANY;
else if ( cnt == 4 ) profile = T_REX;
else if ( cnt == 5 ) profile = DRUGGIST;
if ( !(gMercProfiles[profile].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED) &&
gMercProfiles[profile].bMercStatus != MERC_IS_DEAD &&
gMercProfiles[profile].sSectorX > 0 &&
gMercProfiles[profile].sSectorY > 0 &&
CheckFact( FACT_TERRORIST_LOCATION_KNOWN_SLAY + cnt, 0 ) )
{
SECTOR( gMercProfiles[profile].sSectorX, gMercProfiles[profile].sSectorY );
AddIntelAndQuestMapDataForSector( gMercProfiles[profile].sSectorX, gMercProfiles[profile].sSectorY, -1, 3, szIntelText[4], L"" );
}
}
// raids we know of
for ( int raidtype = 0; raidtype < 3; ++raidtype )
{
if ( CheckFact( FACT_RAID_KNOWN_BLOODCATS + raidtype, 0 ) )
{
std::vector< std::pair<UINT32, UINT32> > vec = GetAllStrategicEventsOfType( EVENT_BLOODCAT_ATTACK + raidtype );
for ( std::vector< std::pair<UINT32, UINT32> >::iterator it = vec.begin(); it != vec.end(); ++it )
{
if ( ( *it ).second < 256 )
{
UINT32 seconds = ( *it ).first;
UINT32 minutes = seconds / 60;
UINT32 hours = minutes / 60;
CHAR16 str[128];
swprintf( str, szIntelText[5], gpStrategicString[STR_PB_BLOODCATRAID_HEADER + raidtype], hours % 24, minutes % 60 );
AddIntelAndQuestMapDataForSector( SECTORX( ( *it ).second ), SECTORY( ( *it ).second ), MAP_SHADE_LT_PINK, raidtype, str, L"" );
}
}
}
}
}
// add lua data
LuaGetIntelAndQuestMapData( asSectorZ );
}
void ShowIntelOnMap()
{
INT16 usXPos, usYPos;
CHAR16 sString[256];
INT32 MapItemsFont;
if ( iResolution <= _800x600 )
{
MapItemsFont = MAP_FONT;
}
else
{
MapItemsFont = FONT12ARIAL;
}
SetFont( MapItemsFont );
SetFontForeground( FONT_MCOLOR_WHITE );
SetFontBackground( FONT_MCOLOR_BLACK );
UINT32 x, y, x0, y0;
HVOBJECT hHandle;
GetVideoObject( &hHandle, guiINTEL );
for (int sector = 0; sector < 256; ++sector )
{
UINT8 sector_x = SECTORX( sector );
UINT8 sector_y = SECTORY( sector );
// grab min and max locations to interpolate sub sector position
x0 = MAP_VIEW_START_X + MAP_GRID_X * ( sector_x );
y0 = MAP_VIEW_START_Y + MAP_GRID_Y * ( sector_y );
AssertMsg( ( x0 >= 0 ) && ( x0 < SCREEN_WIDTH ), String( "ShowIntelOnMap: Invalid minX = %d", x0 ) );
AssertMsg( ( y0 >= 0 ) && ( y0 < SCREEN_HEIGHT ), String( "ShowIntelOnMap: Invalid minY = %d", y0 ) );
// clip blits to mapscreen region
ClipBlitsToMapViewRegion();
x = x0;
y = y0;
for ( std::vector<int>::iterator symbolit = gMapIntelData[sector].symbols.begin(); symbolit != gMapIntelData[sector].symbols.end(); ++symbolit )
{
BltVideoObject( FRAME_BUFFER, hHandle, (*symbolit), x, y, VO_BLT_SRCTRANSPARENCY, NULL );
// Flugente: retrieve width and height of video object
UINT16 width, height;
GetVideoObjectDimensions( hHandle, ( *symbolit ), width, height );
// symbols overlap a bit, so that there is a bit of space
x += width * 0.6;
y += height * 0.6;
}
// restore clip blits
RestoreClipRegionToFullScreen();
FindFontCenterCoordinates( x0, y0, MAP_GRID_X, MAP_GRID_Y, gMapIntelData[sector].shorttext, MapItemsFont, &usXPos, &usYPos );
mprintf( usXPos, usYPos, gMapIntelData[sector].shorttext );
}
}
+15
View File
@@ -93,6 +93,18 @@ extern ICON_FILE gHiddenIcon[ 256 ];
extern UINT32 guiIcon2[256];
typedef struct InqMapInfo
{
UINT8 mapcolour; // map sector will get this colour
CHAR16 text[1024]; // texts to appear in the infobox, \n start a new line
CHAR16 shorttext[128]; // this text will appear on the map itself
std::vector<int> symbols; // all the symbols we have to display
} InqMapInfo;
extern InqMapInfo gMapIntelData[256];
extern BOOLEAN LoadHiddenTownFromLoadGameFile( HWFILE hFile );
extern BOOLEAN SaveHiddenTownToSaveGameFile( HWFILE hFile );
@@ -354,6 +366,9 @@ extern UINT32 guiCHARICONS;
// the merc arrival sector landing zone icon
extern UINT32 guiBULLSEYE;
// Flugente: symbols indicating various things on the intel map
extern UINT32 guiINTEL;
// character between sector icons
extern UINT32 guiCHARBETWEENSECTORICONS;
// HEADROCK HAM 5: Enemies Between Sectors icons
@@ -84,6 +84,9 @@ void AddCommonInfoToBox(void);
void AddItemsInSectorToBox(void);
// Flugente: additional intel/lua-based text
void AddIntelAndQuestTextToBox();
// position town/mine info box on the screen
void PositionTownMineInfoBox( void );
@@ -173,6 +176,9 @@ void CreateDestroyTownInfoBox( void )
AddItemsInSectorToBox();
// Flugente: quests, intel or a modder might add additional info on a sector
AddIntelAndQuestTextToBox();
// set font type
SetBoxFont(ghTownMineBox, BLOCKFONT2);
@@ -951,6 +957,38 @@ void AddItemsInSectorToBox(void)
AddSecondColumnMonoString( &hStringHandle, wString );
}
// Flugente: additional intel/lua-based text
void AddIntelAndQuestTextToBox()
{
CHAR16 wString[128];
UINT32 hStringHandle = 0;
CHAR16 line[1024]; // copy of the input
wcscpy( line, gMapIntelData[SECTOR( bCurrentTownMineSectorX, bCurrentTownMineSectorY )].text );
BOOLEAN first = TRUE;
CHAR16* subString = wcstok ( line, L"\n\0" );
while ( subString != NULL )
{
if ( first )
{
swprintf( wString, L"%s:", pwMiscSectorStrings[8] );
AddMonoString( &hStringHandle, wString );
}
else
AddMonoString( &hStringHandle, L"" );
AddSecondColumnMonoString( &hStringHandle, subString );
subString = wcstok ( NULL, L"\n\0" );
first = FALSE;
}
}
void PositionTownMineInfoBox( void )
{
+8
View File
@@ -1607,6 +1607,10 @@ void AutoResolveBattleCallback( GUI_BUTTON *btn, INT32 reason )
KillPreBattleInterface();
StopTimeCompression();
SetMusicMode( MUSIC_TACTICAL_NOTHING );
// Flugente: in any case, reset creature attack variables
ResetCreatureAttackVariables();
return;
}
gfEnterAutoResolveMode = TRUE;
@@ -1644,6 +1648,10 @@ void GoToSectorCallback( GUI_BUTTON *btn, INT32 reason )
KillPreBattleInterface();
StopTimeCompression();
SetMusicMode( MUSIC_TACTICAL_NOTHING );
// Flugente: in any case, reset creature attack variables
ResetCreatureAttackVariables();
return;
}
+19 -6
View File
@@ -566,7 +566,24 @@ enum Facts
FACT_BOUNTYHUNTER_SECTOR_2,
FACT_BOUNTYHUNTER_KILLED_1,
FACT_BOUNTYHUNTER_KILLED_2,
// Flugente: for safety reasons, remember if we've already had an offensive
FACT_GLOBAL_OFFENSIVE_1_ORDERED,
FACT_GLOBAL_OFFENSIVE_2_ORDERED,
// Flugente: do we know of today's raids?
FACT_RAID_KNOWN_BLOODCATS,
FACT_RAID_KNOWN_ZOMBIES,
FACT_RAID_KNOWN_BANDITS,
// Flugente: do we know of the location of the terrorists?
FACT_TERRORIST_LOCATION_KNOWN_SLAY,
FACT_TERRORIST_LOCATION_KNOWN_ANNIE,
FACT_TERRORIST_LOCATION_KNOWN_CHRIS,
FACT_TERRORIST_LOCATION_KNOWN_TIFFANY,
FACT_TERRORIST_LOCATION_KNOWN_T_REX,
FACT_TERRORIST_LOCATION_KNOWN_DRUGGIST,
#ifdef JA2UB
//Ja25 UB
FACT_IMPORTED_SAVE_AND_MARY_WAS_DEAD = 400,
@@ -595,10 +612,7 @@ enum Facts
FACT_BIGGENS_ON_TEAM_AND_FAN_STOPPED,// 423
FACT_PLAYER_KNOWS_ABOUT_FAN_STOPPING,// 424
#endif
// Flugente: for safety reasons, remember if we've already had an offensive
FACT_GLOBAL_OFFENSIVE_1_ORDERED,
FACT_GLOBAL_OFFENSIVE_2_ORDERED,
} ;
//** END FACTS *************************
@@ -685,7 +699,6 @@ extern BOOLEAN CheckNPCCowering( UINT8 ubProfileID );
extern BOOLEAN CheckNPCIsUnderFire( UINT8 ubProfileID );
extern BOOLEAN NPCHeardShot( UINT8 ubProfileID );
extern BOOLEAN InTownSectorWithTrainingLoyalty( INT16 sSectorX, INT16 sSectorY );
extern BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID );
extern BOOLEAN CheckNPCIsRPC( UINT8 ubProfileID );
extern BOOLEAN CheckTalkerStrong( void );
extern BOOLEAN CheckForNewShipment( void );
+3
View File
@@ -1109,6 +1109,9 @@ void HandleRaidEventPlanning()
// the raid order is bloodcats/zombies/bandits
for ( int raidtype = 0; raidtype < 3; ++raidtype )
{
// reset knowledge of these raids - if the player wants to know, they will have to buy anew
SetFactFalse( FACT_RAID_KNOWN_BLOODCATS + raidtype );
personnelgain[raidtype] = 0;
if ( raidtype == 0 )
+31 -4
View File
@@ -4916,6 +4916,10 @@ UINT32 MapScreenHandle(void)
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
FilenameForBPP("INTERFACE\\incross.sti", VObjectDesc.ImageFile);
CHECKF(AddVideoObject(&VObjectDesc, &guiCROSS));
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
FilenameForBPP( "INTERFACE\\IntelMapSymbols.sti", VObjectDesc.ImageFile );
CHECKF( AddVideoObject( &VObjectDesc, &guiINTEL ) );
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
if (iResolution >= _640x480 && iResolution < _800x600)
@@ -5659,6 +5663,13 @@ UINT32 MapScreenHandle(void)
{
DisplayPositionOfEnemyHelicopter();
}
// Flugente: intel
else if ( gusMapDisplayColourMode == MAP_DISPLAY_INTEL && !fShowMapInventoryPool )
{
extern void ShowIntelOnMap();
ShowIntelOnMap();
}
// display town info
DisplayTownInfo( sSelMapX, sSelMapY, ( INT8 ) iCurrentMapSectorZ );
@@ -7564,13 +7575,18 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
break;
case 'd':
#ifdef JA2TESTVERSION
#ifdef JA2TESTVERSION
if( fAlt )
{
// prints out a text file in C:\TEMP telling you how many stat change chances/successes each profile merc got
TestDumpStatChanges();
}
#endif
else
#endif
if ( !fShowMapInventoryPool )
{
ToggleDiseaseFilter();
}
break;
case 'D':
@@ -7985,7 +8001,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
break;
case 'q':
#ifdef JA2TESTVERSION
#ifdef JA2TESTVERSION
if( fAlt )
{
// initialize miners if not already done so (fakes entering Drassen mine first)
@@ -7993,7 +8009,12 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
// test miner quote system
IssueHeadMinerQuote( (INT8) (1 + Random(MAX_NUMBER_OF_MINES - 1)), (UINT8) (1 + Random(2)));
}
#endif
else
#endif
if ( !fShowMapInventoryPool )
{
ToggleIntelFilter();
}
break;
case 'Q'://dnl ch75 021113
#ifdef _DEBUG
@@ -8018,6 +8039,10 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent )
{ //activate autoresolve in prebattle interface.
ActivatePreBattleRetreatAction();
}
else if ( !fShowMapInventoryPool )
{
ToggleWeatherFilter();
}
break;
case 's':
if( fAlt )
@@ -8615,6 +8640,7 @@ INT32 iCounter2 = 0;
//DeleteVideoObjectFromIndex(guiPOPUPBORDERS);
DeleteVideoObjectFromIndex(guiCHARINFO);
DeleteVideoObjectFromIndex(guiCHARICONS);
DeleteVideoObjectFromIndex( guiINTEL );
DeleteVideoObjectFromIndex(guiCROSS);
DeleteVideoSurfaceFromIndex(guiBIGMAP);
// DeleteVideoSurfaceFromIndex(guiPOPUPTEX);
@@ -13448,6 +13474,7 @@ void HandleRemovalOfPreLoadedMapGraphics( void )
// DeleteVideoObjectFromIndex(guiPOPUPBORDERS);
DeleteVideoObjectFromIndex(guiCHARINFO);
DeleteVideoObjectFromIndex(guiCHARICONS);
DeleteVideoObjectFromIndex( guiINTEL );
DeleteVideoObjectFromIndex(guiCROSS);
DeleteVideoSurfaceFromIndex(guiBIGMAP);
DeleteVideoObjectFromIndex(guiSubLevel1);
-75
View File
@@ -503,81 +503,6 @@ UINT16 GetSectorPopulation( INT16 sX, INT16 sY, BOOLEAN fWithMilitary )
return population;
}
// colour for a sector on the map
// aType = 0: disease
// aType = 1: weather
INT32 GetMapColour( INT16 sX, INT16 sY, UINT8 aType )
{
if ( aType == 0 )
{
UINT16 population = GetSectorPopulation( sX, sY );
if ( population )
{
UINT8 sector = SECTOR( sX, sY );
SECTORINFO *pSectorInfo = &(SectorInfo[sector]);
// display sector information only if we know about infection there
if ( pSectorInfo && ((pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_PLAYER) || (gubFact[FACT_DISEASE_WHODATA_ACCESS] && pSectorInfo->usInfectionFlag & SECTORDISEASE_DIAGNOSED_WHO)) )
{
FLOAT infectedpercentage = (FLOAT)pSectorInfo->usInfected / (FLOAT)(population);
if ( infectedpercentage < 0.2f )
return MAP_SHADE_DK_GREEN;
else if ( infectedpercentage < 0.3f )
return MAP_SHADE_MD_GREEN;
else if ( infectedpercentage < 0.4f )
return MAP_SHADE_LT_GREEN;
else if ( infectedpercentage < 0.5f )
return MAP_SHADE_DK_YELLOW;
else if ( infectedpercentage < 0.6f )
return MAP_SHADE_MD_YELLOW;
else if ( infectedpercentage < 0.7f )
return MAP_SHADE_LT_YELLOW;
else if ( infectedpercentage < 0.8f )
return MAP_SHADE_DK_RED;
else if ( infectedpercentage < 0.9f )
return MAP_SHADE_MD_RED;
else
return MAP_SHADE_LT_RED;
}
}
}
else if ( aType == 1 )
{
UINT8 sector = SECTOR( sX, sY );
SECTORINFO *pSectorInfo = &(SectorInfo[sector]);
// display sector information only if we know about infection there
if ( pSectorInfo )
{
switch ( pSectorInfo->usWeather )
{
case WEATHER_FORECAST_RAIN:
return MAP_SHADE_LT_CYAN;
break;
case WEATHER_FORECAST_THUNDERSHOWERS:
return MAP_SHADE_LT_BLUE;
break;
case WEATHER_FORECAST_SANDSTORM:
return MAP_SHADE_ORANGE;
break;
case WEATHER_FORECAST_SNOW:
return MAP_SHADE_LT_GREY;
break;
case WEATHER_FORECAST_NORMAL:
default:
return MAP_SHADE_BLACK;
break;
}
}
}
return MAP_SHADE_DK_GREY;
}
// handle infection redistribution if people move from A to B (set sXB and sYB to negative values to simply remove infected people in A)
void PopulationMove( INT16 sXA, INT16 sYA, INT16 sXB, INT16 sYB, UINT16 usAmount )
{
-5
View File
@@ -137,11 +137,6 @@ INT16 GetAdjacentSector( UINT8 sector, UINT8 spdir );
// get a sector population (not the tactical one - we use an xml estimation + troops present)
UINT16 GetSectorPopulation( INT16 sX, INT16 sY, BOOLEAN fWithMilitary = TRUE );
// colour for a sector on the map
// aType = 0: disease
// aType = 1: weather
INT32 GetMapColour( INT16 sX, INT16 sY, UINT8 aType );
// handle infection redistribution if people move from A to B (set sXB and sYB to negative values to simply remove infected people in A)
void PopulationMove( INT16 sXA, INT16 sYA, INT16 sXB, INT16 sYB, UINT16 usAmount );
+23 -2
View File
@@ -4294,6 +4294,8 @@ STR16 pwMiscSectorStrings[] =
L"",
L"",
L"状态/软件状态:", //L"Status/Software status:",
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4363,8 +4365,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"显示领空 (|A)",
L"显示物品 (|I)",
L"显示民兵和敌人 (|Z)",
L"显示疾病消息", //L"Show Disease Data",
L"显示天气", // L"Show Weather",
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6249,6 +6252,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"这个视图显示了目前的天气。没有颜色=晴天。青色为雨天。蓝色为雷暴。橙色为沙尘暴。白色为下雪",//L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.",
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11374,6 +11380,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4297,6 +4297,8 @@ STR16 pwMiscSectorStrings[] =
L"Ja",
L"Nee",
L"Status/Software status:", // TODO.Translate
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4366,8 +4368,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Toon Luchtruim (|A)",
L"Toon |Items",
L"Toon Milities & Vijanden (|Z)",
L"Show Disease Data", // TODO.Translate
L"Show Weather", // TODO.Translate
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6257,6 +6260,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.", // TODO.Translate
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11392,6 +11398,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4295,6 +4295,8 @@ STR16 pwMiscSectorStrings[] =
L"Yes",
L"No",
L"Status/Software status:",
L"Additional Intel",
};
// error strings for inventory
@@ -4364,8 +4366,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Show |Airspace",
L"Show |Items",
L"Show Militia & Enemies (|Z)",
L"Show Disease Data",
L"Show Weather",
L"Show |Disease Data",
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6250,6 +6253,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.",
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.",
};
@@ -11376,6 +11382,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4301,6 +4301,8 @@ STR16 pwMiscSectorStrings[] =
L"Oui",
L"Non",
L"Status/Software status:", // TODO.Translate
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4370,8 +4372,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Espace aérien (|A)",
L"Objets (|I)",
L"Milice & Ennemis (|Z)",
L"Show Disease Data", // TODO.Translate
L"Show Weather", // TODO.Translate
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6262,6 +6265,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.", // TODO.Translate
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11374,6 +11380,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4293,6 +4293,8 @@ STR16 pwMiscSectorStrings[] =
L"Ja",
L"Nein",
L"Status/Software Status:",
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4356,8 +4358,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Luftr|aum zeigen",
L"Gegenstände zeigen (|I)",
L"Mili|z & Feinde zeigen",
L"Show Disease Data", // TODO.Translate
L"Zeige Wetter",
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6102,6 +6105,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.", // TODO.Translate
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
STR16 pLandMarkInSectorString[] =
@@ -11204,6 +11210,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4291,6 +4291,8 @@ STR16 pwMiscSectorStrings[] =
L"",
L"No",
L"Status/Software status:", // TODO.Translate
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4360,8 +4362,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Mostra spazio |aereo",
L"Mostra oggett|i",
L"Mostra esercito & nemici (|Z)",
L"Show Disease Data", // TODO.Translate
L"Show Weather", // TODO.Translate
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6240,6 +6243,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.", // TODO.Translate
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11383,6 +11389,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4302,6 +4302,8 @@ STR16 pwMiscSectorStrings[] =
L"Tak",
L"Nie",
L"Status/Software status:", // TODO.Translate
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4371,8 +4373,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Pokaż przestrzeń powietrzną (|A)",
L"Pokaż przedmioty (|I)",
L"Pokaż samoobronę i wrogów (|Z)",
L"Show Disease Data", // TODO.Translate
L"Show Weather", // TODO.Translate
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6258,6 +6261,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"This view shows current weather. No colour=Sunny. CYAN=Rain. BLUE=Thunderstorm. ORANGE=Sandstorm. WHITE=Snow.", // TODO.Translate
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11396,6 +11402,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =
+23 -2
View File
@@ -4295,6 +4295,8 @@ STR16 pwMiscSectorStrings[] =
L"Да",
L"Нет",
L"Status/Software status:", // TODO.Translate
L"Additional Intel", // TODO:Translate
};
// error strings for inventory
@@ -4364,8 +4366,9 @@ STR16 pMapScreenBorderButtonHelpText[] =
L"Карта воздушного пространства (|A)",
L"Вещи (|I)",
L"Ополчение и враги (|Z)",
L"Очаги заболеваний",
L"Погода",
L"Show |Disease Data", // TODO.Translate
L"Show Weathe|r",
L"Show |Quests & Intel",
};
STR16 pMapScreenInvenButtonHelpText[] =
@@ -6250,6 +6253,9 @@ STR16 zMarksMapScreenText[] =
// Flugente: weather texts describing what a map view does
L"Здесь паказана актуальная погода. Без цвета=солнечно, зеленый=дождь, Синий=Гроза, Оранжевый=песчаная буря, Белый=снег.",
// Flugente: describe what intel map view does
L"This view shows which sectors relevant what ongoing quests. Some data bought with intel is also shown here.", // TODO.Translate
};
@@ -11376,6 +11382,21 @@ STR16 szIntelText[] =
L"No more enemies present, %s is no longer in hiding!",
L"%s has been discovered and goes into hiding for %d hours.",
L"%s has been discovered, going to sector!",
L"Enemy general present\n",
L"Terrorist present\n",
L"%s on %02d:%02d\n",
L"No data found",
L"Data no longer eligible.",
L"Whereabouts of a high-ranking officer of the royal army.",
L"Flight plans of an airforce helicopter.",
L"Coordinates of a recently imprisoned member of your force.",
L"Location of a high-value fugitive.",
L"Information on possible bloodcat attacks against settlements.",
L"Time and place of possible zombie attacks against settlements.",
L"Information on planned bandit raids.",
};
STR16 szChatTextSpy[] =