home · contact · privacy
Server: Fix bugs in map and FOV generation on large maps.
authorChristian Heller <c.heller@plomlompom.de>
Mon, 7 Jul 2014 12:32:36 +0000 (14:32 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Mon, 7 Jul 2014 12:32:36 +0000 (14:32 +0200)
TODO
src/server/field_of_view.c
src/server/io.c

diff --git a/TODO b/TODO
index c48735b63846d6411b64d60baa94a6ecb213c9dd..76c8a4706fda6b8c8186bfb977eb1fe47452238b 100644 (file)
--- a/TODO
+++ b/TODO
@@ -23,8 +23,6 @@ SERVER:
 
 - ensure atomic re-writing of savefile
 
-- FOV algorithm is buggy in large maps
-
 CLIENT:
 
 - enable toggling of window borders
index 7436f055854464194cc3fcdd429fb870f0382393..e41d837c196afd45b188dedd7bde9df7c7026755 100644 (file)
 
 
 
-/* Number of degrees a circle is divided into. */
-#define CIRCLE 36000000
+/* Number of degrees a circle is divided into. The greater it is, the greater
+ * the angle precision. But make it one whole zero larger and bizarre FOV bugs
+ * appear on large maps, probably due to value overflows.
+ */
+#define CIRCLE 3600000
 
 
 
index b2d8005a7a75b22788081e9cf9639ffeed8ceba1..4d1b609c07457da46b3b0f94f9a65a0202d2b867 100644 (file)
@@ -248,7 +248,7 @@ static char * build_visible_map(struct Thing * player)
     memset(visible_map, ' ', map_size);
     if (player->fov_map) /* May fail if player thing was created / positioned */
     {                    /* by god command after turning off FOV building.    */
-        uint16_t pos_i;
+        uint32_t pos_i;
         for (pos_i = 0; pos_i < map_size; pos_i++)
         {
             if (player->fov_map[pos_i] & VISIBLE)