VAGUE IDEAS:
- spacetime.. astar but mark paths and reserve em

optimizations:
- only recalc high-level scent path when agents change rooms
- MAYBE only recalc room-blockage when agents enter/exit... NOPE BAD.
- an unrelated agent blocking the path after the tracker enters the room...

- oh WOW... the scent power needs to factor in how long it takes to traverse the room!!!
- local move is direxn of next room. wrong. should be localized euclid.


1) i think a problem is figuring out which agents are in the way... we always have a goal
and a tracking agent. from end perspective, step_track is perfect, but it needs to re-call a
slightly special form of smell i think... pass in both agents so flowto() and ignore both,
yknow?

2) each room maintains a better (is_fluid) state that depends on agents. so that....
  - any agent moves
  - all the relevant rooms rescan their connections to adjacent rooms from the POV of all
    occupying agents and an outsider
  - step_track called by tracker_agent seeking goal_agent
  - high-level smell diffuses tmp scent
(probably all overkill)

3) kinda like #2 but even more optimized...
  - any agent moves and all relevant rooms rescan connections from POV of all occupying
    agents and from outsider
  - map registers tracker-goal agent pair. calcs hi-level path and stores it.
  - anytime a room registered in that path changes relevantly, recalc hi-level path.

4) some kind of hybrid algo...
  - if in same room, euclid towards 'em
  - do high-level smell without regards to blockage and then localized smell bounded by
    those rooms... but that fails cause need room-blockage tests and thats #3 again...
    nevermind.



so TODO:
- debug pac2 which might be #1 related..
- figure out room_blockage thing. maintains list of occupying agents. what questions must it
  answer? "can agent X in this room now move to adjacent room Y?" and "can agent pass thru
  us to opposite exit?" and others i'm sure

weird tho... in perfect/slow scent, theres one scent per agent tracked. is there still one
scent? no. diffusing a high-level scent depends on passability thru a room and that depends
on who you are... right?

maybe not. maybe agents using high-level scent incorrectly. agent's in room. room next to
clear path. room<->path blocked. but agent in that room might still be able to get on the
path. do low-level smell to find out. if they cant, choose another hi block. draw:

|  |---------
|X |  1   2
|-------------

left room wont propogate scent to right room. agent 1 looks at adj rooms (skips always
blocked, considers potentially connected) and smells a path to left room. clear, go! agent 2
does same, blocked, so go farther.

in other words, calc high-level scent as if agents didnt exist. then each agent, in choosing
a room, evaluates its flow to potential room. but that doesnt work.. shit. think about
pacman1. doesnt work.

- ok, so i still dont like separate scents for each tracker-goal pair. but maybe its
  necessary. rooms track agents. when an agent wants to move, it hi-level scentfinds and the
  low-level flowto bits pass in the moving agent and the goal agent to be sure of no
  conflicts.
