X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Fmap_object_actions.c;h=6f94ce18b410eb898f1450b7fe0f44babba12275;hb=f9c94db47aa883149aa762fa128ac1ff1b3f92e1;hp=476ba91e26b2c09fff5c46e0e0746183eaaaf2f6;hpb=07514a620c4af0e3b43efffa90087594e4e62577;p=plomrogue diff --git a/src/server/map_object_actions.c b/src/server/map_object_actions.c index 476ba91..6f94ce1 100644 --- a/src/server/map_object_actions.c +++ b/src/server/map_object_actions.c @@ -14,14 +14,14 @@ */ #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 */ @@ -40,8 +40,10 @@ static void actor_hits_actor(struct MapObj * hitter, struct MapObj * hitted); /* Bonus stuff to actor_*() to happen if actor==player. Mostly writing of log * messages; _pick and _drop also decrement world.inventory_sel by 1 if >0. + * (match_dir() is just a little helper to playerbonus_move().) */ static void playerbonus_wait(); +static uint8_t match_dir(char d, char ** dsc_d, char match, char * dsc_match); static void playerbonus_move(char d, uint8_t passable); static void playerbonus_drop(uint8_t owns_none); static void playerbonus_pick(uint8_t picked); @@ -151,21 +153,28 @@ static void playerbonus_wait() -static void playerbonus_move(char d, uint8_t passable) +static uint8_t match_dir(char d, char ** dsc_d, char match, char * dsc_match) { - char * dsc_dir = "north"; - if ('E' == d) - { - dsc_dir = "east" ; - } - else if ('S' == d) + if (d == match) { - dsc_dir = "south"; - } - else if ('W' == d) - { - dsc_dir = "west" ; + * dsc_d = dsc_match; + return 1; } + return 0; +} + + + +static void playerbonus_move(char d, uint8_t passable) +{ + char * dsc_dir = "north"; + if ( match_dir(d, &dsc_dir, '6', "east") + || match_dir(d, &dsc_dir, '2', "south") + || match_dir(d, &dsc_dir, '4', "west") + || match_dir(d, &dsc_dir, '7', "north-west") + || match_dir(d, &dsc_dir, '9', "north-east") + || match_dir(d, &dsc_dir, '1', "south-west") + || match_dir(d, &dsc_dir, '3', "south-east")); char * dsc_move = "You move "; if (0 == passable) { @@ -219,11 +228,11 @@ static void playerbonus_use(uint8_t no_object, uint8_t wrong_object) -extern void init_map_object_actions(char * path) +extern void init_map_object_actions() { char * f_name = "init_map_object_actions()"; - FILE * file = try_fopen(path, "r", f_name); - uint16_t linemax = textfile_sizes(file, NULL); + FILE * file = try_fopen(world.path_map_obj_acts, "r", f_name); + 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. "; @@ -316,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) { @@ -324,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; @@ -364,12 +373,13 @@ extern void actor_drop(struct MapObj * mo) extern void actor_pick(struct MapObj * mo) { - struct MapObj * picked; - for (picked = world.map_objs; NULL != picked; picked = picked->next) + struct MapObj * picked = NULL; + struct MapObj * mo_i; + for (mo_i = world.map_objs; NULL != mo_i; mo_i = mo_i->next) { - if (picked != mo && yx_uint16_cmp(&picked->pos, &mo->pos)) + if (mo_i != mo && yx_uint8_cmp(&mo_i->pos, &mo->pos)) { - break; + picked = mo_i; } } if (NULL != picked)