First of all, you're going to have trouble getting someone banned for using a bug. Usage would have to be:
Clearly defined (how deep must the hole be?).
Impossible to accidentally trigger (what if you simply make a Stinger in a dip or near a cliff?).
Very hard to fix technically.
Previously agreed upon to be bannable.
Banning is the completely wrong direction to approach. Do you really want a game where certain types of terraform and placements of turrets are deemed illegal? Have you thought for five seconds about how messy everything will become?
The only bug here is that Stinger was not revealed when it shot. I've fixed that:https://github.com/ZeroK-RTS/Zero-K/commit/5fa7e24961ee205e52f0ca6524e6b80fe2859b73
the engine should set visibility based on top of units being visible, not the base.
This is a "feature" the engine shouldn't have.
I completely disagree. Ignoring the technical challenges raised by hokomoko
, I don't agree with the proposed change on the basis of design. Making unit visibility vary depending on their height undercuts the meaning of the displayed LOS. How do you even draw LOS under this scheme?
Currently, if a player doesn't have LOS on a location they know that they don't know what is at that position. However, if visibility is based on height, a player may run their units close enough to a cliff to determine that there are not Lotuses or Wind Generators, which is useful information, but may not be able to tell whether or not any enemy Glaives are defending the Wind Generators.
Perhaps you only show LOS if the unit could see a Puppy (or similarly flat unit) at the target location. It feels confusing and unnerving to have enemy units become visible "outside LOS" in the presence of bumpy terrain. The LOS system would be transformed into a pile of esoteria that visually appears unrelated to what units can actually see. Such a change would also amount to a dramatic reduction in the units ability to see over terrain. In this image the right Glaive can see the left Glaive and Puppy, yet all the raytraces are occluded.
The intuitivity of the map-drawn LOS is already broken by the existing unveil-on-fire mechanic. It's also very confusing in the way units "cloak" a few seconds after firing.
LOS is nowhere near as broken by shoot-revealing as it would be by 3D LOS.
There are three types of ground:
Ground inside LOS.
Ground inside the LOS radius of a unit (called airLOS).
Ground outside the LOS radius of a unit.
A position in airLOS is known to potentially contain any non-firing non-air unit. The feedback loop that teaches the firing-reveal mechanic is very tight so I don't think it is that hard to learn. The revealed unit appearrs exactly when they fire and disappear a bit later. It makes sense because airLOS also reveals projectiles.
how does the engine process these 3 cases?
1 - The non-air unit is visible depending on the LOS state of the patch of ground underneath it.
2 - The flying air unit is visible depending on the airLOS state of the patch of ground underneath it.
3 - Landed air units use LOS. Flying air units use airLOS.
An argument can be made for making jumpjet units visible via airLOS while jumping.