Dilvish thanks for the detailed response to the UI changes I proposed. I'll provide short direct answers to your questions up top, with a longer treatment below.
Dilvish wrote:You are certainly free to argue that we could have a better display by doing away with stealth decrease effects...
I'm not suggesting removing local stealth changes. I'm arguing that players care about the local difference between stealth and detection strength. If we are changing stealth/detection to be more dynamic, then it may be helpful to display the local difference.
For example the dwell effect that MatGB proposed, would progressively change either local stealth or detection strength. Without UI feedback in the map window that will result in a surprise when a ship/colony is suddenly no longer hidden.
Dilvish wrote:... someone trying to [know] what they can detect and where...
Count the number of bands of your detection color. If there are 5 bands of increasing intensity surrounding some point then you can detect stealth level 5 at that point.
Dilvish wrote:...someone trying to know where a specific one of their fleets could stay hidden from an enemy...
Count the number of enemy bands in their detection color. I they have 3 bands of increasing intensity surrounding some point, then your 5 stealth fleet is hidden at that point.
I like your idea of highlighting the edges of fields, when they are hovered over. There is already a context menu item to lookup the Pedia article which provides an explanation of the effects.
I like your idea of modifying the system icon/system name icon to indicate a stealth modifying effect.
When adding an indication to the ETA marker of expected detection status, how would this marker deal with multiple empires with different detection strengths?
Global v.s. Local
These UI changes are proposed in the context of this thread relating to making stealth more interactive. These UI changes support detection strength having local variation.
I'm not suggesting doing away with local stealth changes in favor of local detection strength changes.
I was using the local stealth varying tech to explain that the global detection strength with range circles is not sufficient information to determine if a particular universe object/fleet will be visible to a particular empire, because there may be a local stealth changing effect not apparent from examining the map window.
The visibility of an object is always with respect to a specific empire.
The current system compares the empire's global detection strength with the current or local stealth of the object.
Empire[global detection strength] v.s. object [local stealth]
A disadvantage is that techs can only change an object's stealth which results in a bonus/penalty to all foreign empire's not just the empire deploying the tech. Other than increasing its global detection strength there is no tech than can improve an empire's detection strength locally without also improving all other empires' detection strengths.
The proposed changes would compare the empire's local detection strength with the local stealth of the object.
Empire[local detection strength] v.s. object [local stealth]
Marginal detection strength is (detection strength - stealth strength). Player's care about the marginal detection strength, it determines if a fleet is detected.
A 3D UI Digression
I'm adding a digression to describe a 3D UI which we can not implement to clarify how the 2D interface proposed works. The 3D interface is more intuitive and I may have not chosen well in translating it to a 2D interface.
It is developed in three steps.
Step one: Start by imagining that each universe object/fleet's stealth and each empire's detection strength is shown as a 3D terrain where the elevation indicates the stealth/detection strength. With the current game mechanics each empire' detection strength is a flat elevation map. Every fleet's elevation map shows how moving the fleet increases/decreases its stealth across the map. For example, in locations within an Ion Storm field all fleet's stealth elevation map shows a rise or hill because their stealth would increase if they moved into the field and it would show a trough around an interstellar lighthouse.
For one fleet and one empire if both terrains are displayed together in 3D, it is easy to compare terrain heights at one location and see if the stealth is higher/lower than the detection strength.
For locally varying detection strength the empire elevation map would be hilly, with detection strength high near colonies and dropping to zero outside of the empire's detection range. It would still be easy to compare one empire's detection strength and one fleet's stealth a single location, by looking at elevation in the 3D display.
Step two: A problem is that there are many empires and many objects and very many (empire, object) pairs. Displaying all of the detection and stealth terrains at the same time won't work.
However, many stealth changing effects are the same for all universe objects. For example the ion storm and lighthouse, but not the solar hull's star effect. A solution is to subtract the common stealth variations from each empire's detection terrain, creating an effective (detection - stealth) strength. Then only display a single empire's effective (detection - stealth) strength as an elevation map with each universe object/fleet suspended at their current (detection-stealth) height above that terrain. Display the zero threshold as a cloud bank, tinted with the detecting empire's color. Any fleets in the clouds are hidden. Any fleets above the clouds are visible. Moving a fleet into the mountain of clouds surrounding an ion storm would hide the fleet, from the given empire.
Step three: There are still many empires. Display only one empire's detection strength at a time to reduce the clutter.
How should the UI decide which empire the player is interested in displaying?
When
nothing is selected or one's own fleet or colony is selected or the own empire is selected on the Empires list, then the player's own empire's effective (detection - stealth) terrain is displayed. It will look like a bowl carved out of a cloud bank. Any fleets that are detected, will be a distance above the cloud floor showing how visible they are. Any stealthy fleets known about, perhaps due to combat will be displayed a distance below the cloud floor indicating how stealthy they might be. Artifacts like the ion storms will look like a mound of clouds, which if higher than some foreign fleet, would hide the fleet if they flew into the clouds/ion storm.
This answers the questions in the following way:
- Can player empire A detect foreign object B? If the object is above the clouds then it can and is being detected. If it is below the clouds, then it is known about through some non-detection means.
- What is player empire A's detection strength or conversely what stealth can player empire A detect at some location? The lower the cloud floor the higher the detection strength at that location.
- What stealth can foreign empire C detect at some location? This question is not answered when the player's empire's detection is displayed.
- What is the stealth of object D? This is apparent from how high the object is above the cloud floor.
When a foreign fleet, colony or empire is selected then that empire's effective (detection - stealth) strength is displayed. The player will see what the player's empire thinks that the foreign empire can see. The terrain sculpted from the clouds shows the foreign empire's detection strength. Fleets below the cloud floor are fleets that the player's empire knows about, but that the foreign empire can't detect. This might include the player's own fleets, indicating that they are hidden from the foreign empire. The height above the cloud floor indicates the detection margin, or how much a fleet's stealth needs to increase to be hidden from this empire.
This answers the questions in the following way:
- Can player empire A detect foreign object B? This question is not answered when a foreign empire's detection is displayed.
- What is player empire A's detection strength or conversely what stealth can player empire A detect at some location? This question is not answered when a foreign empire's detection is displayed.
- What stealth can foreign empire C detect at some location? The lower the cloud floor, the better the detection strength of the foreign empire.
- What is the stealth of object D? This is apparent from how high the object is above the cloud floor.
Translating the 3D display of an elevation map with a threshold into a 2D display.
Display the elevation map of heights of the clouds by varying the intensity of the range halo. A darker highlight indicates stronger detection strength. An ion storm moving through the empire would display as a low intensity hole in the detection halo of the displayed empire. Only one empire's detection halo is displayed at a time, so there are no competing halos. The display is less cluttered.
Display falling below the zero threshold/cloud floor using the scanline shader, perhaps tinted with the detecting empire's color. This adds the ablility to the 2D UI to detect at a glance if a foreign empire can detect the player's own fleet. The player's own fleet will be rendered with the scanline shader, when a foreign empire/fleet/colony is selected, that can't detect that fleet.
Relative to the 3D display the 2D implementation lacks the ability to use the elevation to display the detection/stealth margin. That ablility could be recovered as you describe by annotating either the object name or fleet icon. If the annotation is clear and the number of levels is small, then it would be apparent that some fleets needs X more levels of stealth to hide from a given empire. Perhaps an annotation like an RF signal strength icon, but with horizontal stacked bars.
Hover tool
As you pointed out, a hover tool works with any implementation of stealth and detection, it just displays different information.
If the proposed display is working well with limited stealth levels, then the hover tool is superfluous because simply looking at a fleet icon after selecting an empire of interest and some mental subtraction will yield the (detection - stealth) difference. Then a hover tool is for players/devs who want a detailed break down of all the mechanics influencing stealth/detection at a given location.
Backend changes
The visibility system in encapsulated as follows.
All consumers of visibility use GetObjectVisibilityByEmpire() to query if a given universe object is visible to a given empire. None of the changes proposed in this thread would change anything for consumers of visibility information. Blockades, supply, combat etc would still query GetObjectVisibilityByEmpire() in the same way.
The information in the table that GetObjectVisibilityByEmpire() indexes is collected from 5 factors: owning an object grants automatic visibility, owning a colony in a system grants partial visibility of the system and its planets, combat exposes stealthy attackers, fields modify stealth, and empire range effects. All of the code changes would be in the last function, empire range effects. In that function there is a table of detectors with their range. It would need to be augmented to include detection strength.