Skip to content

Extend the pointfile overlay: routes against trajectories, failure cells, seat audits, and the portal question #254

Description

@saworbit

#252 landed the first use of the engine's pointfile channel: tools/argus_pointfile.py writes maps/<map>.pts and the client command pointfile draws one static particle per line. Nodes, links, swim exits, and the freeze cells from a tape.

That was the smallest useful version. This issue is the rest of the idea, so it is not lost.

Why it earns more work

Two defects this week were invisible to every instrument we had, and obvious the moment you stand in the level:

  • e1m6 n93, a waypoint seated 14 units past a lava lip, floating 152 units over the lava.
  • e1m2, a door seat that stops 18 units short of the trigger it is frozen waiting for.

Top-down PNGs put both in plausible-looking places. Numbers gave a stall count and no reason. The graph is a 3D object and we have only ever looked at it flat.

Overlays worth adding

  1. Route against trajectory. Draw a route's planned hops from a tape's route events, then the bot's actual ARGLOG positions. Intent against reality in one view. This is the forensic that would have shortened every wedge hunt in the project.
  2. The human's own trail. Human tracks have been in the tape since v3.66 and nobody has ever seen one. Walk your own circuit from the outside.
  3. Failure overlays. Routefail start positions, hazard deflection cells, abandon points. We already fold these in learn_hotspots; drawing them puts a reason next to a number.
  4. Bad-seat audit. Seats that fail the SV_CheckBottom test added in Stop navgen seating waypoints past a ledge lip #250, drawn before a regen ships. A pre-flight check for the class that cost e1m6.
  5. Swim exits against the water surface. The question that cost most of a session was whether a lip is climbable. Drawing the lip and the surface answers it by eye.
  6. Regen diff. Nodes added and removed between two generations of a graph, so a regen's effect is visible rather than inferred from counts.
  7. Typed links one at a time. --what jump|lift|door|rocket|sprint. Cheap, and it makes a map's movement vocabulary legible.
  8. Probe convictions. Draw the refuted links from argus_nav_<map>.probe.json so a conviction can be stood next to and judged.

One trick worth testing

Particle colour is (-index & 15), so it cycles and cannot be chosen. But the index is ours: padding the sequence with filler points buried inside solid geometry would let a chosen point land on a chosen colour. If that works, overlays get semantic colour (bad seats red, verified links green) instead of a rainbow. Unverified, and it needs eyes on a listen server.

The deeper version, honestly scoped

The original leak trace works by flooding through BSP portals, which are the map's true topology rather than our 32 unit sampling grid. That is the interesting idea underneath the thought bubble.

The obstacle: portals live in the .prt intermediate that qbsp writes, not in the shipped .bsp. We would have to reconstruct leaf adjacency from the BSP tree ourselves. Leaves are convex, so adjacency is derivable, but it is real work and the payoff is not certain: portal space includes everything a player cannot stand in, so walkability filtering would still be needed on top. Worth a spike before anyone commits to it, not a slice.

Limits that apply to all of the above

  • Colour cycles every 16 points unless the padding trick works.
  • The particle pool bounds what shows at once. Pass -particles 16384.
  • pointfile is a client command, so none of this is verifiable headless. It needs a listen game and human eyes, which is also the point of it.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestnavigationWaypoint graphs, reachability, path following, and movementtoolingPython tools, telemetry scripts, and CLI utilities

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions