home · contact · privacy
Some code-internal restructuring following the assumption that game map height /
authorChristian Heller <c.heller@plomlompom.de>
Wed, 5 Feb 2014 15:11:20 +0000 (16:11 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 5 Feb 2014 15:11:20 +0000 (16:11 +0100)
width can't be higher than uint8_t values.

17 files changed:
src/client/draw_wins.c
src/client/io.c
src/client/map.c
src/client/windows.h
src/client/world.h
src/common/map.h [deleted file]
src/common/yx_uint16.h
src/server/io.c
src/server/map.c
src/server/map.h
src/server/map_object_actions.c
src/server/map_objects.c
src/server/map_objects.h
src/server/yx_uint16.c [deleted file]
src/server/yx_uint16.h [deleted file]
src/server/yx_uint8.c [new file with mode: 0644]
src/server/yx_uint8.h [new file with mode: 0644]

index 7cdb0b5134668af19474c541fa0e39d94cb0a5e6..f10e9cb80a20d50d15c9a49a0b1312baa7879379 100644 (file)
@@ -323,7 +323,7 @@ extern void draw_win_map(struct Win * win)
 {
     try_resize_winmap(win, world.map.size.y, world.map.size.x);
     uint16_t z = 0;
-    uint16_t x, y;
+    uint8_t x, y;
     for (y = 0; y < world.map.size.y; y++)
     {
         for (x = 0; x < world.map.size.x; x++)
index c86ff843e38d2b41917d3e3da3722ad79b987ff1..2b1c165eb0435c78a37737e94f5250d3361820c3 100644 (file)
@@ -110,7 +110,7 @@ static void read_map_cells(FILE * file)
     char * f_name = "read_map_cells()";
     free(world.map.cells);
     world.map.cells = try_malloc(world.map.size.y * world.map.size.x, f_name);
-    uint16_t y, x;
+    uint8_t y, x;
     for (y = 0; y < world.map.size.y; y++)
     {
         for (x = 0; x < world.map.size.x; x++)
index a41903906dcc012bfedfbae7e1c71f6917664d85..5e4e9c6f769d7cc640a2fbd450ae2414a6bae9bd 100644 (file)
@@ -1,7 +1,7 @@
 /* src/client/map.c */
 
 #include "map.h"
-#include <stdint.h> /* uint16_t */
+#include <stdint.h> /* uint8_t */
 #include "misc.h" /* center_offset() */
 #include "windows.h" /* struct Win, get_win_by_id() */
 #include "world.h" /* for global world */
@@ -11,7 +11,7 @@
 extern void map_scroll(char d)
 {
     struct Win * win = get_win_by_id('m');
-    uint16_t offset;
+    uint8_t offset;
     if (('8' == d || '2' == d) && world.map.size.y > win->frame_size.y)
     {
         offset = center_offset(win->center.y,
@@ -43,5 +43,6 @@ extern void map_scroll(char d)
 extern void map_center()
 {
     struct Win * win_map = get_win_by_id('m');
-    win_map->center = world.player_pos;
+    win_map->center.y = world.player_pos.y;
+    win_map->center.x = world.player_pos.x;
 }
index 4ac01d0ebfd6133eabd0aa7047a736c5de30775e..92a35a1d93b96ca00e1efc645e81d9b22f00ee16 100644 (file)
@@ -26,8 +26,8 @@
 
 #include <ncurses.h> /* WINDOW, chtype */
 #include <stdint.h> /* uint8_t, int16_t, uint16_t */
-#include "keybindings.h" /* struct KeyBindingDB */
 #include "../common/yx_uint16.h" /* yx_uint16 struct */
+#include "keybindings.h" /* struct KeyBindingDB */
 
 
 
index cbb640abd65ddfa6667a5d68683f9d8650161831..7d1ccbe79dc8590198f9e7166a461e707518a926 100644 (file)
@@ -9,7 +9,7 @@
 #include <stdint.h> /* uint8_t, uint16_t */
 #include <sys/types.h> /* time_t */
 #include "map.h" /* struct Map */
-#include "../common/yx_uint16.h" /* struct yx_uint16 */
+#include "../common/yx_uint8.h" /* struct yx_uint8 */
 #include "keybindings.h" /* stuct KeyBindingDB */
 #include "command_db.h" /* struct CommandDB */
 #include "windows.h" /* WinDB */
@@ -25,13 +25,13 @@ struct World
     struct KeyBindingDB kb_winkeys; /* Win keybindings config view keybindings*/
     struct Map map; /* game map geometry and content */
     time_t last_update; /* used for comparison with server outfile' mtime */
-    struct yx_uint16 player_pos; /* coordinates of player on map */
     char * log; /* log of player's activities */
     char * path_server_in; /* path of server's input fifo */
     char * path_interface; /* path of interface configuration file */
     char * path_commands; /* path of commands config file */
     char * player_inventory; /* one-item-per-line string list of owned items */
     char * delim; /* delimiter for multi-line blocks in config files */
+    struct yx_uint8 player_pos; /* coordinates of player on map */
     uint16_t turn; /* world/game turn */
     uint16_t player_score; /* player's score*/
     uint8_t halfdelay; /* how long to wait for getch() input in io_loop() */
diff --git a/src/common/map.h b/src/common/map.h
deleted file mode 100644 (file)
index cac29dc..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* src/common/map.h
- *
- * Struct for the game map.
- */
-
-#ifndef MAP_H
-#define MAP_H
-
-#include "yx_uint16.h" /* yx_uint16 struct */
-
-
-
-struct Map
-{
-    struct yx_uint16 size;   /* map's height/width in number of cells */
-    char * cells;            /* sequence of bytes encoding map cells */
-};
-
-
-
-#endif
index 6dd359a32cd9be20331ce482fbeb4bc6817f663b..05cf29e9238163d8c5425171afcac7e06ab48f18 100644 (file)
@@ -1,7 +1,6 @@
 /* yx_uint16.h
  *
- * Struct coordinates in 2-dimensional space (such as the ncurses screen and
- * game maps).
+ * Used for window / screen maps and game map size.
  */
 
 #ifndef YX_UINT16_H
index 817d54253c40f69edc2225ef7f53e4769d15e78b..a516d81b018b121a90c3fb614415b029634c81d1 100644 (file)
@@ -183,7 +183,7 @@ static void write_inventory(struct MapObj * player, FILE * file)
 static void write_map(FILE * file)
 {
     char * f_name = "write_map()";
-    uint32_t map_size = world.map.size.y * world.map.size.x;
+    uint16_t map_size = world.map.size.y * world.map.size.x;
     char visible_map[map_size];
     memcpy(visible_map, world.map.cells, map_size);
     struct MapObj * o;
@@ -203,7 +203,7 @@ static void write_map(FILE * file)
             }
         }
     }
-    uint16_t x, y;
+    uint8_t x, y;
     for (y = 0; y < world.map.size.y; y++)
     {
         for (x = 0; x < world.map.size.x; x++)
index 2969b6dd4f9d551c40ebd3e7e7879989f0fea635..29beb1a03d5d0a6ebf1113d6ead1cd34763f2573 100644 (file)
@@ -1,9 +1,9 @@
 /* src/server/map.c */
 
 #include "map.h"
-#include <stdint.h> /* uint8_t, uint16_t, uint32_t */
+#include <stdint.h> /* uint8_t, uint16_t */
 #include "../common/try_malloc.h" /* try_malloc() */
-#include "../common/yx_uint16.h" /* struct yx_uint16 */
+#include "../common/yx_uint8.h" /* struct yx_uint8 */
 #include "rrand.h" /* rrand() */
 #include "world.h" /* global world */
 
@@ -12,9 +12,9 @@
 extern void init_map()
 {
     char * f_name = "init_map()";
-    uint32_t size = world.map.size.x * world.map.size.y;
+    uint16_t size = world.map.size.x * world.map.size.y;
     world.map.cells = try_malloc(size, f_name);
-    uint16_t y, x;
+    uint8_t y, x;
     for (y = 0; y < world.map.size.y; y++)
     {
         for (x = 0;
@@ -22,7 +22,7 @@ extern void init_map()
              world.map.cells[(y * world.map.size.x) + x] = '~', x++);
     }
     world.map.cells[size / 2 + (world.map.size.x / 2)] = '.';
-    uint32_t curpos;
+    uint16_t curpos;
     while (1)
     {
         y = rrand() % world.map.size.y;
@@ -51,7 +51,7 @@ extern void init_map()
 
 
 
-extern uint8_t is_passable(struct yx_uint16 pos)
+extern uint8_t is_passable(struct yx_uint8 pos)
 {
     uint8_t passable = 0;
     if (   0 <= pos.x && pos.x < world.map.size.x
index 9846a58635f251dc2bf8295cbf1c9f7cd748580e..b2b1ba2ec59d74ef3734bd87b85b129c3ab936b5 100644 (file)
@@ -7,13 +7,14 @@
 #define MAP_H
 
 #include <stdint.h> /* uint8_t */
+#include "../common/yx_uint8.h" /* yx_uint8 struct */
 #include "../common/yx_uint16.h" /* yx_uint16 struct */
 
 
 
 struct Map
 {
-    struct yx_uint16 size; /* Map's height/width in number of cells. */
+    struct yx_uint16 size; /* Map's height/width (use max. 256x256)! */
     char * cells; /* Sequence of bytes encoding map cells. */
     uint8_t dist_orthogonal; /* Ratio of the diagonal movement penalty as   */
     uint8_t dist_diagonal;   /* encoded by (.dist_diagonal/.dist_orthonal). */
@@ -33,7 +34,7 @@ extern void init_map();
 /* Check if coordinate "pos" on (or beyond) world.map is accessible to map
  * object movement.
  */
-extern uint8_t is_passable(struct yx_uint16 pos);
+extern uint8_t is_passable(struct yx_uint8 pos);
 
 
 
index 174ec647b603fcfd19d6885539dbe0628bab392d..6f94ce18b410eb898f1450b7fe0f44babba12275 100644 (file)
                                   */
 #include "../common/rexit.h" /* exit_err(), exit_trouble() */
 #include "../common/try_malloc.h" /* try_malloc() */
-#include "../common/yx_uint16.h" /* yx_uint16 struct */
+#include "../common/yx_uint8.h" /* struct yx_uint8 */
 #include "cleanup.h" /* set_cleanup_flag() */
 #include "map_objects.h" /* structs MapObj, MapObjDef, get_player(),
                           * set_object_position(), own_map_object(),
                           * get_map_object_def()
                           */
 #include "map.h" /* is_passable() */
-#include "yx_uint16.h" /* mv_yx_in_dir(), yx_uint16_cmp() */
+#include "yx_uint8.h" /* mv_yx_in_dir(), yx_uint8_cmp() */
 #include "world.h" /* global world */
 
 
@@ -232,7 +232,7 @@ extern void init_map_object_actions()
 {
     char * f_name = "init_map_object_actions()";
     FILE * file = try_fopen(world.path_map_obj_acts, "r", f_name);
-    uint16_t linemax = textfile_sizes(file, NULL);
+    uint32_t linemax = textfile_sizes(file, NULL);
     char line[linemax + 1];
     struct MapObjAct ** moa_ptr_ptr = &world.map_obj_acts;
     char * context = "Failed reading map object actions config file. ";
@@ -325,7 +325,7 @@ extern void actor_wait(struct MapObj * mo)
 extern void actor_move(struct MapObj * mo)
 {
     char d = mo->arg;
-    struct yx_uint16 target = mv_yx_in_dir(d, mo->pos);
+    struct yx_uint8 target = mv_yx_in_dir(d, mo->pos);
     struct MapObj * other_mo;
     for (other_mo = world.map_objs; other_mo != 0; other_mo = other_mo->next)
     {
@@ -333,7 +333,7 @@ extern void actor_move(struct MapObj * mo)
         {
             continue;
         }
-        if (yx_uint16_cmp(&target, &other_mo->pos))
+        if (yx_uint8_cmp(&target, &other_mo->pos))
         {
             actor_hits_actor(mo, other_mo);
             return;
@@ -377,7 +377,7 @@ extern void actor_pick(struct MapObj * mo)
     struct MapObj * mo_i;
     for (mo_i = world.map_objs; NULL != mo_i; mo_i = mo_i->next)
     {
-        if (mo_i != mo && yx_uint16_cmp(&mo_i->pos, &mo->pos))
+        if (mo_i != mo && yx_uint8_cmp(&mo_i->pos, &mo->pos))
         {
             picked = mo_i;
         }
index 0401c76b4339f959b312a81950bef4125bd92182..696db048ad17d3810a468a023d268bf99a7bdcac 100644 (file)
                                   */
 #include "../common/rexit.h" /* exit_err(), exit_trouble() */
 #include "../common/try_malloc.h" /* try_malloc() */
-#include "../common/yx_uint16.h" /* yx_uint16 struct */
+#include "../common/yx_uint8.h" /* yx_uint8 struct */
 #include "cleanup.h" /* set_cleanup_flag() */
 #include "map.h" /* is_passable() */
 #include "rrand.h" /* rrand() */
 #include "world.h" /* global world */
-#include "yx_uint16.h" /* yx_uint16_cmp() */
+#include "yx_uint8.h" /* yx_uint8_cmp() */
 
 
 
@@ -27,7 +27,7 @@
 static struct MapObj * get_map_object(struct MapObj * ptr, uint8_t id);
 
 /* Return random passable (as by is_passable()) position on world.map. */
-static struct yx_uint16 find_passable_pos();
+static struct yx_uint8 find_passable_pos();
 
 /* Add object of "type" to map on random position. Don't place actor on actor.*/
 static void add_map_object(uint8_t type);
@@ -53,9 +53,9 @@ static struct MapObj * get_map_object(struct MapObj * ptr, uint8_t id)
 
 
 
-static struct yx_uint16 find_passable_pos()
+static struct yx_uint8 find_passable_pos()
 {
-    struct yx_uint16 pos;
+    struct yx_uint8 pos;
     for (pos.y = pos.x = 0; 0 == is_passable(pos);)
     {
         pos.y = rrand() % world.map.size.y;
@@ -77,12 +77,12 @@ static void add_map_object(uint8_t type)
     mo->lifepoints = mod->lifepoints;
     while (1)
     {
-        struct yx_uint16 pos = find_passable_pos(world.map);
+        struct yx_uint8 pos = find_passable_pos(world.map);
         struct MapObj * mo_ptr;
         uint8_t clear = 1;
         for (mo_ptr = world.map_objs; mo_ptr != NULL; mo_ptr = mo_ptr->next)
         {
-            if (yx_uint16_cmp(&pos, &mo_ptr->pos) && 0 != mo_ptr->lifepoints)
+            if (yx_uint8_cmp(&pos, &mo_ptr->pos) && 0 != mo_ptr->lifepoints)
             {
                 clear = 0;
                 break;
@@ -108,7 +108,7 @@ extern void init_map_object_defs()
     char * err_toolarge = "Value is too large.";
     char * err_uniq     = "Declaration of ID already used.";
     FILE * file = try_fopen(world.path_map_obj_defs, "r", f_name);
-    uint16_t linemax = textfile_sizes(file, NULL);
+    uint32_t linemax = textfile_sizes(file, NULL);
     struct MapObjDef ** last_mod_ptr_ptr = &world.map_obj_defs;
     char line[linemax + 1];
     reset_err_try_fgets_counter();
@@ -244,7 +244,7 @@ extern struct MapObjDef * get_map_object_def(uint8_t id)
 
 
 
-extern void set_object_position(struct MapObj * mo, struct yx_uint16 pos)
+extern void set_object_position(struct MapObj * mo, struct yx_uint8 pos)
 {
     mo->pos = pos;
     struct MapObj * owned = mo->owns;
index 7b6c6b2ed220cd42dedaa3f224b2bb51d368a05e..a73aa801bdd2e0777d007d2383164c2bfd23ef84 100644 (file)
@@ -8,7 +8,7 @@
 #define MAP_OBJECTS_H
 
 #include <stdint.h> /* uint8_t */
-#include "../common/yx_uint16.h" /* yx_uint16 structs */
+#include "../common/yx_uint8.h" /* yx_uint8 structs */
 
 
 
@@ -16,7 +16,7 @@ struct MapObj
 {
     struct MapObj * next;        /* pointer to next one in map object chain */
     struct MapObj * owns;        /* chain of map objects owned / in inventory */
-    struct yx_uint16 pos;        /* coordinate on map */
+    struct yx_uint8 pos;         /* coordinate on map */
     uint8_t id;                  /* individual map object's unique identifier */
     uint8_t type;                /* ID of appropriate map object definition */
     uint8_t lifepoints;          /* 0: object is inanimate; >0: hitpoints */
@@ -62,7 +62,7 @@ extern struct MapObj * get_player();
 extern struct MapObjDef * get_map_object_def(uint8_t id);
 
 /* Move not only "mo" to "pos", but also all map objects owned by it. */
-extern void set_object_position(struct MapObj * mo, struct yx_uint16 pos);
+extern void set_object_position(struct MapObj * mo, struct yx_uint8 pos);
 
 
 
diff --git a/src/server/yx_uint16.c b/src/server/yx_uint16.c
deleted file mode 100644 (file)
index e64e98f..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/* src/server/yx_uint16.c */
-
-#include "yx_uint16.h"
-#include <stdint.h> /* uint8_t, UINT16_MAX */
-#include "../common/yx_uint16.h" /* yx_uint16 struct */
-
-
-
-extern uint8_t yx_uint16_cmp(struct yx_uint16 * a, struct yx_uint16 * b)
-{
-    if (a->y == b->y && a->x == b->x)
-    {
-        return 1;
-    }
-    return 0;
-}
-
-
-
-extern struct yx_uint16 mv_yx_in_dir(char d, struct yx_uint16 yx)
-{
-    if      (d == '8' && yx.y > 0)
-    {
-        yx.y--;
-    }
-    else if (d == '9' && yx.y > 0 && yx.x < UINT16_MAX)
-    {
-        yx.y--;
-        yx.x++;
-    }
-    else if (d == '6' && yx.x < UINT16_MAX)
-    {
-        yx.x++;
-    }
-    else if (d == '3' && yx.x < UINT16_MAX && yx.y < UINT16_MAX)
-    {
-        yx.y++;
-        yx.x++;
-    }
-    else if (d == '2' && yx.y < UINT16_MAX)
-    {
-        yx.y++;
-    }
-    else if (d == '1' && yx.y < UINT16_MAX && yx.x > 0)
-    {
-        yx.y++;
-        yx.x--;
-    }
-    else if (d == '4' && yx.x > 0)
-    {
-        yx.x--;
-    }
-    else if (d == '7' && yx.x > 0 && yx.y > 0)
-    {
-        yx.y--;
-        yx.x--;
-    }
-    return yx;
-}
diff --git a/src/server/yx_uint16.h b/src/server/yx_uint16.h
deleted file mode 100644 (file)
index 516050e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* src/server/yx_uint16.h
- *
- * Routines for comparison and movement with yx_uin16 structs.
- */
-
-#ifndef YX_UINT16_H_SERVER
-#define YX_UINT16_H_SERVER
-
-#include <stdint.h> /* uint8_t */
-#include "../common/yx_uint16.h" /* yx_uint16 struct */
-
-
-
-/* Return 1 if two yx_uint16 coordinates at "a" and "b" are equal, else 0. */
-extern uint8_t yx_uint16_cmp(struct yx_uint16 * a, struct yx_uint16 * b);
-
-/* Return yx_uint16 coordinate one step from "yx" in direction "dir" (numpad
- * digits: north '8', east: '6', etc.) If "dir" is invalid or would wrap the
- * move around the edge of a 2^16x2^16 cells field, "yx" remains unchanged.
- */
-extern struct yx_uint16 mv_yx_in_dir(char dir, struct yx_uint16 yx);
-
-
-
-#endif
diff --git a/src/server/yx_uint8.c b/src/server/yx_uint8.c
new file mode 100644 (file)
index 0000000..06fa81d
--- /dev/null
@@ -0,0 +1,59 @@
+/* src/server/yx_uint8.c */
+
+#include "yx_uint8.h"
+#include <stdint.h> /* uint8_t, UINT8_MAX */
+#include "../common/yx_uint8.h" /* yx_uint8 struct */
+
+
+
+extern uint8_t yx_uint8_cmp(struct yx_uint8 * a, struct yx_uint8 * b)
+{
+    if (a->y == b->y && a->x == b->x)
+    {
+        return 1;
+    }
+    return 0;
+}
+
+
+
+extern struct yx_uint8 mv_yx_in_dir(char d, struct yx_uint8 yx)
+{
+    if      (d == '8' && yx.y > 0)
+    {
+        yx.y--;
+    }
+    else if (d == '9' && yx.y > 0 && yx.x < UINT8_MAX)
+    {
+        yx.y--;
+        yx.x++;
+    }
+    else if (d == '6' && yx.x < UINT8_MAX)
+    {
+        yx.x++;
+    }
+    else if (d == '3' && yx.x < UINT8_MAX && yx.y < UINT8_MAX)
+    {
+        yx.y++;
+        yx.x++;
+    }
+    else if (d == '2' && yx.y < UINT8_MAX)
+    {
+        yx.y++;
+    }
+    else if (d == '1' && yx.y < UINT8_MAX && yx.x > 0)
+    {
+        yx.y++;
+        yx.x--;
+    }
+    else if (d == '4' && yx.x > 0)
+    {
+        yx.x--;
+    }
+    else if (d == '7' && yx.x > 0 && yx.y > 0)
+    {
+        yx.y--;
+        yx.x--;
+    }
+    return yx;
+}
diff --git a/src/server/yx_uint8.h b/src/server/yx_uint8.h
new file mode 100644 (file)
index 0000000..1463c5f
--- /dev/null
@@ -0,0 +1,25 @@
+/* src/server/yx_uint8.h
+ *
+ * Routines for comparison and movement with yx_uint8 structs.
+ */
+
+#ifndef YX_UINT8_H_SERVER
+#define YX_UINT8_H_SERVER
+
+#include <stdint.h> /* uint8_t */
+#include "../common/yx_uint8.h" /* yx_uint8 struct */
+
+
+
+/* Return 1 if two yx_uint8 coordinates at "a" and "b" are equal, else 0. */
+extern uint8_t yx_uint8_cmp(struct yx_uint8 * a, struct yx_uint8 * b);
+
+/* Return yx_uint8 coordinate one step from "yx" in direction "dir" (numpad
+ * digits: north '8', east: '6', etc.) If "dir" is invalid or would wrap the
+ * move around the edge of a 2^16x2^16 cells field, "yx" remains unchanged.
+ */
+extern struct yx_uint8 mv_yx_in_dir(char dir, struct yx_uint8 yx);
+
+
+
+#endif