X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Fmap.c;h=3a5a0a213d1c6f8f644739f1410a0778bb66a9fa;hb=36519c3ce33ac973889e92971abded12b51f04db;hp=a5a189d2335ffdc89758eab353f736bfe3646607;hpb=adf5091e53c03efcda65dfb08dbc9d0bc588111e;p=plomrogue diff --git a/src/server/map.c b/src/server/map.c index a5a189d..3a5a0a2 100644 --- a/src/server/map.c +++ b/src/server/map.c @@ -1,9 +1,14 @@ -/* src/server/map.c */ +/* src/server/map.c + * + * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 + * or any later version. For details on its copyright, license, and warranties, + * see the file NOTICE in the root directory of the PlomRogue source package. + */ #include "map.h" #include /* uint8_t, int8_t, uint16_t, uint32_t, (U)INT*_(MIN|MAX) */ #include /* free() */ -#include /* strchr() */ +#include /* memset() */ #include "../common/rexit.h" /* exit_err() */ #include "../common/try_malloc.h" /* try_malloc() */ #include "../common/yx_uint8.h" /* yx_uint8 */ @@ -200,31 +205,37 @@ extern uint8_t mv_yx_in_dir_legal(char dir, struct yx_uint8 * yx) } char * err = "Too much wrapping in mv_yx_in_dir_legal()."; exit_err( INT8_MIN == wrap_west_east || INT8_MIN == wrap_north_south - || INT8_MAX == wrap_west_east || INT8_MAX == wrap_north_south, err); - struct yx_uint8 original; - original.y = yx->y; - original.x = yx->x; + || INT8_MAX == wrap_west_east || INT8_MAX == wrap_north_south,err); + struct yx_uint8 original = *yx; mv_yx_in_dir(dir, yx); - if (strchr("edc", dir) && yx->x < original.x) + if (('e' == dir || 'd' == dir || 'c' == dir) && yx->x < original.x) { wrap_west_east++; } - else if (strchr("xsw", dir) && yx->x > original.x) + else if (('x' == dir || 's' == dir || 'w' == dir) && yx->x > original.x) { wrap_west_east--; } - if (strchr("we", dir) && yx->y > original.y) + if (('w' == dir || 'e' == dir) && yx->y > original.y) { wrap_north_south--; } - else if (strchr("xc", dir) && yx->y < original.y) + else if (('x' == dir || 'c' == dir) && yx->y < original.y) { wrap_north_south++; } - if ( !((wrap_west_east != 0) + (wrap_north_south != 0)) + if ( !wrap_west_east && !wrap_north_south && yx->x < world.map.length && yx->y < world.map.length) { return 1; } return 0; } + + + +extern void init_empty_map(char ** map) +{ + *map = try_malloc(world.map.length * world.map.length, __func__); + memset(*map, ' ', world.map.length * world.map.length); +}