I’ve created a feedback for this: https://phoenixpoint.canny.io/feedback/p/hearing-range-doesnt-check-for-listener-death
The problem is even bigger than I initially thought.
As some of you may know, there are 3 states for an “actor” on the tactical view:
- hidden
- located: the enemy knows there is someone there - it appears as a ping
- revealed: at least one enemy sees you (with line of sight and within perception range - affected by stealth)
The problem lies in how the code handles the “located” status. You become located if:
- you shoot or bash with a “non silent” weapon (BIG PROBLEM - and I’ll explain why)
- you suffer a DoT (SAME BIG PROBLEM)
- you open a door or break a window (SAME BIG PROBLEM)
- you are within 5 tiles of an enemy (there’s a mutation or equipment that makes it bigger)
- the problem with this one is that a dead enemy still hears you
- the problem with this one is that a dead enemy still hears you
So, now with the BIG PROBLEM. Nowhere in the code have I found a place where the “located” state is reset. Meaning that once you are located, the enemy knows where you are all the time and sees you moving (as a ping but still he knows where you are).
Chirons target based on the “located” state. Which means that once you are located, the ChIrons will be relentless to throw all they have at you (if alerted). Even if no one sees you, they hear you, even on the other side of the map, they still hear you. That’s a big part of why the Chirons are so deadly and hated … they cheat (not willingly - granted - but they do).
I’ve tried resetting the state in the same place that “revealed” is “reset” (in the onMoved method) and miracle, Chirons sent me stuff only if I had an enemy the saw me or if I was in hearing range.
So why is this reset missing ? The reason is probably that when you do a noise (shoot, bash, break glass, open door, suffer), it sets your “located” state but once you move it would disappear. Therefore you would just have to move after shooting and they wouldn’t know where you are.
That’s because they set the “located” flag on the “actor”, rather than creating a “virtual” actor that would show the location the sound came from without following all your movements.