OK, hopefully someone can point me in the right direction here...

I am trying desperately to keep track of lots of players, monsters, and items on a map. All players need to be able to see other players etc.

Initially I used SQL to select all players within visible tile range, and then add the coresponding TPlayer object into the other players 'ICanSee' list. This is way too slow (SQL hits with each player move), can anyone suggest a fast tidy way of being able to track objects on a 1000 x 1000 tile map? And... 1 tile can have more than one object!

One idea I had was to use some kind of Node setup? Nodes are fast and I could have multiple nodes on a tile? Maybe an array ot TNode (is there such a thing?) And if I used nodes, is there a quick way I could 'select' all nodes within a specific range? other than using loops and arrays?

There must be a 'standard' way to approach this?

Any help much appreciated!