Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » Visibility tracing precision

This thread is locked; no one can reply to it. rss feed Print
Visibility tracing precision
ngiacomelli
Member #5,114
October 2004

I'm having some problems with the routine I wrote to check visibility in my strategy game. Basically, I shoot a number of rays from the player to check where the player can see and or attack/travel to. This works fine. It actually works a little too well.

The ploy_ray call back just checks the pixel x and y value (divided by 16) and decides whether to stop that ray, or allow it to continue (and mark that map location as visible).

The problem is, sometimes the rays will squeeze through the gaps of certain structures and render the space as visible. Can anyone suggest a way of stopping this?

1void map_render_entity_visibility( BITMAP *bmp, int x_o, int y_o, int x, int y, int vis_radius ) {
2
3 int s_x = x, s_y = y, t_x = 0, t_y = 0, a=0;
4 fixed angle = itofix(0);
5 bHaltRayCast = 0; r_x = x_o; r_y = y_o;
6 e_x = x; e_y = y; e_r = vis_radius;
7 
8 for ( a = 0; a <= 255; a+=5 ) {
9
10 angle = itofix(a);
11
12 do_line (bmp, (x_o+(x*16))+8, y_o+(y*16)+8,
13 (x_o+(x*16))+8 + fixtoi (60 * fcos (angle)),
14 y_o+(y*16)+8 + fixtoi (60 * fsin (angle)),
15 1, plot_ray);
16
17 bHaltRayCast = 0;
18
19 }
20
21}

kentl
Member #2,905
November 2002

If you don't have any real-time constraints. Just make the lines thinker so that they can't stream through small gaps. You could just do your routine four times with the offsets {0,0}{1,0}{0,1}{1,1} and if all four makes it through it is visible.

Fladimir da Gorf
Member #1,565
October 2001
avatar

So your game is tile based? Otherwise I'd suggest using polygonal visibility regions.

OpenLayer has reached a random SVN version number ;) | Online manual | Installation video!| MSVC projects now possible with cmake | Now alvailable as a Dev-C++ Devpack! (Thanks to Kotori)

Go to: