benjivers/val Public Public: anyone can read this; the crew can change it.

A flash blinds 70% of the map, so somebody is always blind #18

Closed opened this has it
opened this

From play: "it just had some weird light obstructions and i seem to be blind". The light obstructions are smokes and the flash overlay doing their job. The blindness is a balance bug with a number on it.

The map is 2400 × 1520 units. A flash's radius is 900.

Flashfire   radius 900, 2 charges, 1.7s
Blind Spot  radius 850, 1 charge,  1.6s

A 900-unit circle is 70% of the map by area and 75% of its width across. The pop then blinds anyone inside it who has a sight line and is facing within 100° of it — full strength anywhere inside 900, since flashDuration's distance falloff does not even begin until 900. So in practice one flash blinds most of the team that is anywhere in front of it, wherever they happen to be standing, and with ten agents holding two or three flashes between them somebody is blind most of the time. That is not the ability being strong; it is the ability being the size of the level.

What to fix, and the shape I would argue for:

  • Bring the radius to the scale of a room, not a map. A site here is a few hundred units across; a flash that reaches 900 is not a thrown object, it is weather. Something in the 300–400 range makes it a tool for taking one angle, which is what it is for.
  • Make distance matter inside the radius. Right now every one of those 900 units is full strength. The falloff constants (< 900 → 1, < 1500 → 0.6) were written for a much bigger world — rescale them so the edge of the effect is a flicker and the centre is the full duration.
  • Tighten the cone toward what a player can actually see. 100° is nearly a third of the compass, and the renderer's field of view is narrower than that. Somebody flashed by a thing they could not have had on screen reads as unfair, because it is.
  • Then look at how often the bots throw them. bots.ts casts whenever castable is true and a target exists, so two charges go out the moment they are bought, every round. Even with the radius fixed, ten bots chain-flashing is a strobe. Some restraint — not while a team mate is mid-peek, not twice inside a few seconds, not when nothing is in front of them — is part of the fix.

The bar: this is the simulation, so it is seeded and deterministic like everything else in match.ts, and the numbers live in abilities.ts where the rest of the kit is. Keep the mechanic honest — facing and line of sight are what a flash should be about, and a smoke in between should still save you.

Measure it. The claim to prove is not "it feels better": run a match headless and report what fraction of live seconds a player spends blind, before and after, plus how many flashes go off a round. That number is the bug, and it is the number that says it is fixed.

commented

The rule, from the person playing it: if you are looking in the direction of the flash, you get flashed. If you are not, you do not. Facing is the gate, not a modifier on top of a radius. Build it that way rather than tuning the numbers that are there.

That gives you a hard anchor, because "looking at it" is not a matter of taste here — the renderer shows 75°, so the half-angle is 38°. Anything outside that was never on the player's screen, and blinding somebody for a thing they could not see is the unfair case that makes people hate flashes in games that get this wrong.

So:

  • Inside about 38° of where you are facing: full duration. It was on your screen, you looked at it, you pay.
  • From there to roughly 55°: it falls away quickly to nothing. A little grace past the edge of the view for the fact that you were probably turning.
  • Beyond that: nothing at all. Not a short blind, not a flicker — you were facing away, and a flash behind your back is somebody else's problem.
  • Line of sight still saves you, exactly as now: a wall or a smoke between you and the pop means you were not looking at it, whatever your angle says.

Distance then plays a supporting part rather than the lead: a flash is weaker further away, and past a sensible reach it does nothing — but do not let a close flash blind a player who had their back to it, and do not let facing it exactly be survivable because of a distance table. Facing decides whether, distance decides how long.

Keep the radius sane while you are there (the 900 in the issue above is 70% of the map), but treat that as the limit of how far the light carries, not as the thing that decides who is blinded.

commented

Done in #19 (merged 2026-09); closing — that merge predates closing-on-merge.

Sign in to join this conversation.

↑↓ navigate ↵ open esc close

Keyboard shortcuts