diff --git a/GameSettings.cpp b/GameSettings.cpp index 91ffc4ab..4370f876 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -219,6 +219,7 @@ BOOLEAN LoadGameSettings() gGameSettings.fOptions[TOPTION_SNAP_CURSOR_TO_DOOR] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_SNAP_CURSOR_TO_DOOR" , TRUE ); gGameSettings.fOptions[TOPTION_GLOW_ITEMS] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_GLOW_ITEMS" , TRUE ); gGameSettings.fOptions[TOPTION_TOGGLE_TREE_TOPS] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_TOGGLE_TREE_TOPS" , TRUE ); + gGameSettings.fOptions[TOPTION_SMART_TREE_TOPS] = iniReader.ReadBoolean("JA2 Game Settings", "TOPTION_SMART_TREE_TOPS" , FALSE ); gGameSettings.fOptions[TOPTION_TOGGLE_WIREFRAME] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_TOGGLE_WIREFRAME" , TRUE ); gGameSettings.fOptions[TOPTION_3D_CURSOR] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_3D_CURSOR" , FALSE ); gGameSettings.fOptions[TOPTION_CTH_CURSOR] = iniReader.ReadBoolean("JA2 Game Settings","TOPTION_CTH_CURSOR" , TRUE ); @@ -436,6 +437,7 @@ BOOLEAN SaveGameSettings() settings << "TOPTION_SNAP_CURSOR_TO_DOOR = " << (gGameSettings.fOptions[TOPTION_SNAP_CURSOR_TO_DOOR] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_GLOW_ITEMS = " << (gGameSettings.fOptions[TOPTION_GLOW_ITEMS] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_TOGGLE_TREE_TOPS = " << (gGameSettings.fOptions[TOPTION_TOGGLE_TREE_TOPS] ? "TRUE" : "FALSE" ) << endl; + settings << "TOPTION_SMART_TREE_TOPS = " << (gGameSettings.fOptions[TOPTION_SMART_TREE_TOPS] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_TOGGLE_WIREFRAME = " << (gGameSettings.fOptions[TOPTION_TOGGLE_WIREFRAME] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_3D_CURSOR = " << (gGameSettings.fOptions[TOPTION_3D_CURSOR] ? "TRUE" : "FALSE" ) << endl; settings << "TOPTION_CTH_CURSOR = " << (gGameSettings.fOptions[TOPTION_CTH_CURSOR] ? "TRUE" : "FALSE" ) << endl; @@ -551,6 +553,7 @@ void InitGameSettings() gGameSettings.fOptions[ TOPTION_SNAP_CURSOR_TO_DOOR ] = TRUE; gGameSettings.fOptions[ TOPTION_GLOW_ITEMS ] = TRUE; gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ] = TRUE; + gGameSettings.fOptions[ TOPTION_SMART_TREE_TOPS ] = FALSE; gGameSettings.fOptions[ TOPTION_TOGGLE_WIREFRAME ] = TRUE; gGameSettings.fOptions[ TOPTION_3D_CURSOR ] = FALSE; gGameSettings.fOptions[ TOPTION_CTH_CURSOR ] = TRUE; diff --git a/GameSettings.h b/GameSettings.h index caa0b6ef..d6fc519d 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -38,6 +38,7 @@ enum TOPTION_SNAP_CURSOR_TO_DOOR, TOPTION_GLOW_ITEMS, TOPTION_TOGGLE_TREE_TOPS, + TOPTION_SMART_TREE_TOPS, TOPTION_TOGGLE_WIREFRAME, TOPTION_3D_CURSOR, TOPTION_CTH_CURSOR, diff --git a/Options Screen.cpp b/Options Screen.cpp index 9c31e12d..10c0b0f2 100644 --- a/Options Screen.cpp +++ b/Options Screen.cpp @@ -904,7 +904,9 @@ void ExitOptionsScreen() } //if the user changed the TREE TOP option, AND a world is loaded - if( gfSettingOfTreeTopStatusOnEnterOfOptionScreen != gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ] && gfWorldLoaded ) + // sevenfm: always update tree top state + //if( gfSettingOfTreeTopStatusOnEnterOfOptionScreen != gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ] && gfWorldLoaded ) + if (gfWorldLoaded) { SetTreeTopStateForMap(); } diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index dffb0eb6..786a942b 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -526,6 +526,8 @@ void PreventFromTheFreezingBug(SOLDIERTYPE* pSoldier) UIHandleLUIEndLock( NULL ); } +INT32 gOldMapSpot = NOWHERE; + // MAIN TACTICAL UI HANDLER UINT32 HandleTacticalUI( void ) { @@ -661,6 +663,13 @@ UINT32 HandleTacticalUI( void ) if ( GetMouseMapPos( &usMapPos ) ) { + // sevenfm: update trees + if (usMapPos != gOldMapSpot) + { + gOldMapSpot = usMapPos; + UpdateTreeVisibility(); + } + // Look for soldier full if ( FindSoldier( usMapPos, &gusUIFullTargetID, &guiUIFullTargetFlags, ( FINDSOLDIERSAMELEVEL( gsInterfaceLevel ) ) ) ) { diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index ca94c550..f16f1dbc 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -2854,12 +2854,18 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving ) // trversing... if ( gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALKOFF_SCREEN || gubWaitingForAllMercsToExitCode == WAIT_FOR_MERCS_TO_WALK_TO_GRIDNO ) { + // sevenfm: update tree visibility + UpdateTreeVisibility(); + return( TRUE ); } // Check if they are out of breath if ( pSoldier->CheckForBreathCollapse( ) ) { + // sevenfm: update tree visibility + UpdateTreeVisibility(); + (*pfKeepMoving ) = TRUE; return( FALSE ); } @@ -2867,6 +2873,9 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving ) // see if a mine gets set off... if (SetOffBombsInGridNo( pSoldier->ubID, pSoldier->sGridNo, FALSE, pSoldier->pathing.bLevel ) ) { + // sevenfm: update tree visibility + UpdateTreeVisibility(); + (*pfKeepMoving) = FALSE; pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection ); return( FALSE ); @@ -2897,6 +2906,9 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving ) HandleSight(pSoldier,SIGHT_LOOK | SIGHT_RADIO | SIGHT_INTERRUPT); } + // sevenfm: update tree visibility + UpdateTreeVisibility(); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - if pending interrupt flag was set for movement type of interupt, resolve it here if ( UsingImprovedInterruptSystem() ) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index a99250b5..d35936fc 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -7571,7 +7571,7 @@ void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance ) // Set desired stance this->ubDesiredHeight = ubDesiredStance; - this->EVENT_InitNewSoldierAnim(usNewState, 0, FALSE); + this->EVENT_InitNewSoldierAnim(usNewState, 0, FALSE); } this->usSoldierFlagMask |= SOLDIER_REDOFLASHLIGHT; diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index d12171e5..31fb4842 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5091,6 +5091,7 @@ void ToggleTreeTops() if ( gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ] ) { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ REMOVING_TREETOPS_STR ] ); + gGameSettings.fOptions[TOPTION_TOGGLE_TREE_TOPS] = FALSE; WorldHideTrees( ); gTacticalStatus.uiFlags |= NOHIDE_REDUNDENCY; } @@ -5098,9 +5099,9 @@ void ToggleTreeTops() { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ SHOWING_TREETOPS_STR ]); WorldShowTrees( ); + gGameSettings.fOptions[TOPTION_TOGGLE_TREE_TOPS] = TRUE; gTacticalStatus.uiFlags &= (~NOHIDE_REDUNDENCY); } - gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ] = !gGameSettings.fOptions[ TOPTION_TOGGLE_TREE_TOPS ]; // FOR THE NEXT RENDER LOOP, RE-EVALUATE REDUNDENT TILES InvalidateWorldRedundency( ); diff --git a/TileEngine/worldman.cpp b/TileEngine/worldman.cpp index 27e796af..1dca7261 100644 --- a/TileEngine/worldman.cpp +++ b/TileEngine/worldman.cpp @@ -4000,30 +4000,30 @@ LEVELNODE* FindShadow(INT32 sGridNo, UINT16 usStructIndex) } -void WorldHideTrees( ) +void WorldHideTrees() { -LEVELNODE *pNode; -BOOLEAN fRerender=FALSE; -UINT32 fTileFlags; -INT32 cnt; + LEVELNODE *pNode; + BOOLEAN fRerender = FALSE; + UINT32 fTileFlags; + INT32 cnt; - for ( cnt = 0; cnt < WORLD_MAX; cnt++ ) + for (cnt = 0; cnt < WORLD_MAX; cnt++) { - pNode=gpWorldLevelData[ cnt ].pStructHead; - while(pNode!=NULL) + pNode = gpWorldLevelData[cnt].pStructHead; + while (pNode != NULL) { - GetTileFlags( pNode->usIndex, &fTileFlags ); + GetTileFlags(pNode->usIndex, &fTileFlags); - if ( fTileFlags & FULL3D_TILE ) + if (fTileFlags & FULL3D_TILE) { - if ( !( pNode->uiFlags & LEVELNODE_REVEALTREES ) ) + if (!(pNode->uiFlags & LEVELNODE_REVEALTREES)) { - pNode->uiFlags |= ( LEVELNODE_REVEALTREES ); + pNode->uiFlags |= (LEVELNODE_REVEALTREES); } - fRerender=TRUE; + fRerender = TRUE; } - pNode=pNode->pNext; + pNode = pNode->pNext; } } @@ -4031,39 +4031,155 @@ INT32 cnt; } -void WorldShowTrees( ) +void WorldShowTrees() { -LEVELNODE *pNode; -BOOLEAN fRerender=FALSE; -UINT32 fTileFlags; -INT32 cnt; + LEVELNODE *pNode; + BOOLEAN fRerender = FALSE; + UINT32 fTileFlags; + INT32 cnt; - for ( cnt = 0; cnt < WORLD_MAX; cnt++ ) + for (cnt = 0; cnt < WORLD_MAX; cnt++) { - pNode=gpWorldLevelData[cnt].pStructHead; - while(pNode!=NULL) + pNode = gpWorldLevelData[cnt].pStructHead; + while (pNode != NULL) { - GetTileFlags( pNode->usIndex, &fTileFlags ); + GetTileFlags(pNode->usIndex, &fTileFlags); - if ( fTileFlags & FULL3D_TILE ) + if (fTileFlags & FULL3D_TILE) { - if ( ( pNode->uiFlags & LEVELNODE_REVEALTREES ) ) + if ((pNode->uiFlags & LEVELNODE_REVEALTREES)) { - pNode->uiFlags &=(~( LEVELNODE_REVEALTREES ) ); + pNode->uiFlags &= (~(LEVELNODE_REVEALTREES)); } - fRerender=TRUE; + fRerender = TRUE; } - pNode=pNode->pNext; + pNode = pNode->pNext; } } - SetRenderFlags(RENDER_FLAG_FULL ); + // sevenfm: also update smart tree tops + if (gGameSettings.fOptions[TOPTION_SMART_TREE_TOPS]) + UpdateTreeVisibility(); + SetRenderFlags(RENDER_FLAG_FULL); } +void UpdateTreeVisibility() +{ + if (!gGameSettings.fOptions[TOPTION_SMART_TREE_TOPS] || !gGameSettings.fOptions[TOPTION_TOGGLE_TREE_TOPS]) + return; + LEVELNODE *pNode; + BOOLEAN fRerender = FALSE; + BOOLEAN fHidden = FALSE; + UINT32 fTileFlags; + INT32 cnt; + + SOLDIERTYPE *pOpponent; + STRUCTURE *pStructureData; + INT32 sSpot; + BOOLEAN fHideTree; + INT32 usMouseSpot; + + //Get the gridno the cursor is at + GetMouseMapPos(&usMouseSpot); + + // first show all trees + for (cnt = 0; cnt < WORLD_MAX; cnt++) + { + pNode = gpWorldLevelData[cnt].pStructHead; + while (pNode != NULL) + { + GetTileFlags(pNode->usIndex, &fTileFlags); + + if (fTileFlags & FULL3D_TILE) + { + if ((pNode->uiFlags & LEVELNODE_REVEALTREES)) + { + pNode->uiFlags &= ~(LEVELNODE_REVEALTREES); + fRerender = TRUE; + } + } + pNode = pNode->pNext; + } + } + + // now show all trees except trees near visible soldiers + for (cnt = 0; cnt < WORLD_MAX; cnt++) + { + pNode = gpWorldLevelData[cnt].pStructHead; + + while (pNode != NULL) + { + pStructureData = pNode->pStructureData; + if (pStructureData) + sSpot = pNode->pStructureData->sGridNo; + //sSpot = pNode->pStructureData->sBaseGridNo; + else + sSpot = NOWHERE; + + fHideTree = FALSE; + + // check trees near cursor position + if (!TileIsOutOfBounds(usMouseSpot) && + (PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 0 || + PythSpacesAway(sSpot, usMouseSpot) <= 5 && AIDirection(sSpot, usMouseSpot) == 7 || + PythSpacesAway(sSpot, usMouseSpot) <= 2 && AIDirection(sSpot, usMouseSpot) == 6)) + { + fHideTree = TRUE; + } + + // find visible soldier near spot + if (!TileIsOutOfBounds(sSpot) && !fHideTree) + { + for (UINT8 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) + { + pOpponent = MercSlots[uiLoop]; + + if (pOpponent && + pOpponent->bVisible != -1 && + !TileIsOutOfBounds(pOpponent->sGridNo) && + (PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 0 || + PythSpacesAway(sSpot, pOpponent->sGridNo) <= 5 && AIDirection(sSpot, pOpponent->sGridNo) == 7 || + PythSpacesAway(sSpot, pOpponent->sGridNo) <= 2 && AIDirection(sSpot, pOpponent->sGridNo) == 6)) + { + fHideTree = TRUE; + break; + } + } + } + + if (fHideTree) + { + GetTileFlags(pNode->usIndex, &fTileFlags); + + if (fTileFlags & FULL3D_TILE) + { + if (!(pNode->uiFlags & LEVELNODE_REVEALTREES)) + { + pNode->uiFlags |= (LEVELNODE_REVEALTREES); + fRerender = TRUE; + fHidden = TRUE; + } + } + } + pNode = pNode->pNext; + } + } + + if (fRerender) + { + SetRenderFlags(RENDER_FLAG_FULL); + if (fHidden) + { + gTacticalStatus.uiFlags |= NOHIDE_REDUNDENCY; + //gTacticalStatus.uiFlags &= (~NOHIDE_REDUNDENCY); + InvalidateWorldRedundency(); + } + } +} void SetWorldFlagsFromNewNode( INT32 sGridNo, UINT16 usIndex ) diff --git a/TileEngine/worldman.h b/TileEngine/worldman.h index 838efa5a..293ffadb 100644 --- a/TileEngine/worldman.h +++ b/TileEngine/worldman.h @@ -158,7 +158,7 @@ LEVELNODE * FindShadow( INT32 sGridNo, UINT16 usStructIndex ); void WorldHideTrees( ); void WorldShowTrees( ); - +void UpdateTreeVisibility(); BOOLEAN IsTileRedundent( UINT32 uiDestPitchBYTES, UINT16 *pZBuffer, UINT16 usZValue, HVOBJECT hSrcVObject, INT32 iX, INT32 iY, UINT16 usIndex ); diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 8e4e52a9..e824d352 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -6340,6 +6340,7 @@ STR16 zOptionsToggleText[] = L"锁定门", //"Snap Cursor to Doors", L"物品闪亮", //"Make Items Glow", L"显示树冠", //"Show Tree Tops", + L"Smart Tree Tops", // TODO. Translate L"显示轮廓", //"Show Wireframes", L"显示3D光标", //"Show 3D Cursor", L"显示命中机率", //"Show Chance to Hit on cursor", @@ -6451,6 +6452,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"打开时,显示树冠。(|T)", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate + //toggle wireframe L"打开时,显示未探明的墙的轮廓。(|C|t|r|l+|A|l|t+|W)", diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 742cb46b..56066f29 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -6347,6 +6347,7 @@ STR16 zOptionsToggleText[] = L"Auto-Cursor naar Deuren", L"Items Oplichten", L"Toon Boomtoppen", + L"Smart Tree Tops", // TODO. Translate L"Toon Draadmodellen", L"Toon 3D Cursor", L"Show Chance to Hit on cursor", @@ -6458,6 +6459,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Wanneer INGESCHAKELD worden Boom|toppen getoond.", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate + //toggle wireframe L"Wanneer INGESCHAKELD worden Draadmodellen van niet-zichtbare muren getoond. (|C|t|r|l+|A|l|t+|W)", diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 6f5b3f81..8aceb31f 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -6354,6 +6354,7 @@ STR16 zOptionsToggleText[] = L"Snap Cursor to Doors", L"Make Items Glow", L"Show Tree Tops", + L"Smart Tree Tops", L"Show Wireframes", L"Show 3D Cursor", L"Show Chance to Hit on Cursor", @@ -6465,6 +6466,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"When ON, shows the |Tree tops.", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", + //toggle wireframe L"When ON, displays Wireframes for obscured walls. (|C|t|r|l+|A|l|t+|W)", diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 16661bf9..80c4f01b 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -6352,6 +6352,7 @@ STR16 zOptionsToggleText[] = L"Figer curseur sur les portes", L"Objets en surbrillance", L"Afficher cimes", + L"Smart Tree Tops", // TODO. Translate L"Affichage fil de fer", L"Curseur toit", L"Afficher chance de toucher", @@ -6462,6 +6463,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Activez cette option pour afficher la cime des arbres. (|T)", + + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate //toggle wireframe L"Activez cette option pour afficher les murs en fil de fer. (|C|T|R|L+|A|L|T+||W)", diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 41c5490d..869e06eb 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -6217,6 +6217,7 @@ STR16 zOptionsToggleText[] = L"Cursor autom. auf Türen", L"Gegenstände leuchten", L"Baumkronen zeigen", + L"Smart Tree Tops", // TODO. Translate L"Drahtgitter zeigen", L"3D Cursor zeigen", L"Trefferchance anzeigen", @@ -6328,6 +6329,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Mit der Deaktivierung dieser Funktion lassen sich Baumkronen ausblenden um bessere Sicht auf das Geschehen zu ermöglichen (|T).", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate + //toggle wireframe L"Wenn diese Funktion aktiviert ist, werden Drahtgitter verborgener Wände gezeigt um z.B. perspektivisch verdeckte Fenster zu erkennen (|C|t|r|l+|A|l|t+|W).", diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 61ab06cc..69aaac55 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -6330,6 +6330,7 @@ STR16 zOptionsToggleText[] = L"Sposta il cursore sulle porte", L"Evidenzia gli oggetti", L"Mostra le fronde degli alberi", + L"Smart Tree Tops", // TODO. Translate L"Mostra strutture", L"Mostra il cursore 3D", L"Show Chance to Hit on cursor", @@ -6441,6 +6442,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Se attivata, mostra le fronde degli alberi. (|T)", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate + //toggle wireframe L"Se attivata, visualizza le |Strutture dei muri nascosti. (|C|t|r|l+|A|l|t+|W)", diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 7049a1ae..f73036a9 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -6348,6 +6348,7 @@ STR16 zOptionsToggleText[] = L"Przyciągaj kursor do drzwi", L"Pulsujące przedmioty", L"Pokazuj korony drzew", + L"Smart Tree Tops", // TODO. Translate L"Pokazuj siatkę", L"Pokazuj kursor 3D", L"Pokazuj szansę na trafienie", @@ -6460,6 +6461,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Jeśli WŁĄCZONE, wyświetlane będą korony drzew. ( |T )", + //smart tree tops + L"When ON, hides tree tops near visible mercs and cursor position.", // TODO.Translate + //toggle wireframe L"Jeśli WŁĄCZONE, wyświetlane będą zarysy niewidocznych ścian. ( |C|t|r|l+|A|l|t+|W )", diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 985a1e4a..6fc051e0 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -6340,6 +6340,7 @@ STR16 zOptionsToggleText[] = L"Курсор на дверь", L"Мерцание вещей", L"Показать кроны деревьев", + L"Скрывать мешающие кроны", L"Показать каркасы", L"Трехмерный курсор", L"Показать шанс попадания", @@ -6451,6 +6452,9 @@ STR16 zOptionsScreenHelpText[] = //toggle tree tops L"Если включено, то отображаются кроны деревьев (|T).", + //smart tree tops + L"Если включено, кроны деревьев не будут отображаться около видимых солдат и около курсора.", + //toggle wireframe L"Если включено, то у препятствий\nдополнительно показывается каркас (|C|t|r|l+|A|l|t+|W).",