[CF-Devel] Any Line of Sight wizards out there?

Michael Toennies michael.toennies at nord-com.net
Wed May 30 06:54:57 CDT 2001


These are 2 of the best resources you can find...

     
     http://www-cs-students.stanford.edu/~amitp/gameprog.html
     
     

and

     
     http://www.gameai.com/ai.html
     
     

>
     
     
     >
     
       I'm doing work to make the viewable map a larger size (max size
     
     >
     
      settable by
     
     >
     
      config.h setting).
     
     >
     
     
     >
     
       The little difficulty I'm running into is the line of sight code.
     
     >
     
     
     >
     
       If you look at the common/los.c file, near the top you will
     
     >
     
      notice a whole
     
     >
     
      bunch of set_block calls - I'll copy a few below:
     
     >
     
     
     >
     
        set_block(5,4,4,3);
     
     >
     
        set_block(5,4,5,3);
     
     >
     
        set_block(5,4,6,3);
     
     >
     
        set_block(4,3,4,2);
     
     >
     
     
     >
     
       This is all 'hard coded' for an 11x11 map.  Presume the player
     
     >
     
      is at 5,5 (as
     
     >
     
      would be the case for an 11x11 map).
     
     >
     
     
     >
     
       The first line basically says that if there is something at 5,4
     
     >
     
      that blocks the
     
     >
     
      view, you can't see 4,3 (first line), 5,3 (second line), and 6,3.
     
     >
     
     
     >
     
       The next line then says that if something blocks view at 4,3
     
     >
     
      that you can't see
     
     >
     
      4,2.
     
     >
     
     
     >
     
       And so on.  This creates a whole set of relations - so if 5,4 is
     
     >
     
      blocked, you
     
     >
     
      can pretty quickly figure out all the other spaces that get blocked by
     
     >
     
      traversing the structures set up.
     
     >
     
     
     >
     
       As evidenced in the current code, this works just fine for the 11x11 map.
     
     >
     
     
     >
     
       Ideally, I would like a more general solution.  I certainly
     
     >
     
      don't want to have
     
     >
     
      a hard code in place for a 25x25 map (which would be hundreds of lines).
     
     >
     
     
     >
     
       I did a quick web search for a better LOS method, but didn't
     
     >
     
      find one.  Most of
     
     >
     
      them are presuming the simpler cases (have point A and point B  -
     
     >
     
      does anything
     
     >
     
      prevent them from seeing each other).
     
     >
     
     
     >
     
       I'm thinking of using something like that to initialize the
     
     >
     
      tables in a brute
     
     >
     
      force fashion - this table is only initialized at startup, so
     
     >
     
      something all that
     
     >
     
      efficient to initialize the table is not all that important.  On
     
     >
     
      a 25x25 map,
     
     >
     
      there are 625 spaces.  Worst case here is also that there could
     
     >
     
      still be a few
     
     >
     
      hard coded entries to fix up gaps or the like.
     
     >
     
     
     >
     
       But before I do that approach, just wanted to see if anyone had some more
     
     >
     
      clever solution.
     
     >
     
      _______________________________________________
     
     >
     
      crossfire-devel mailing list
     
     >
     
     
      crossfire-devel at lists.real-time.com
      
      
     >
     
     
      https://mailman.real-time.com/mailman/listinfo/crossfire-devel
      
      
     >
     
     
     
    


More information about the crossfire mailing list