X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fmap_object_actions.h;h=e9812289e4bacd8f9657a02cac1f9e25ab958783;hb=2dccba703435158681552b8a8aefccab79eb13f3;hp=2202b27e60642cc70485332f8c84ccc607c09e2d;hpb=a037841b38d73f59839731eb3ffaf4edc43d9cf0;p=plomrogue diff --git a/src/map_object_actions.h b/src/map_object_actions.h index 2202b27..e981228 100644 --- a/src/map_object_actions.h +++ b/src/map_object_actions.h @@ -1,15 +1,56 @@ +/* map_object_actions.h + * + * Actions that can be performed my map objects / "actors". Note that apart + * from the consequences described below, each action may also trigger log + * messages and other minor stuff if the actor is equal to the player. + */ + #ifndef MAP_OBJECT_ACTIONS_H #define MAP_OBJECT_ACTIONS_H -#include "yx_uint16.h" +#include /* for uint8_t */ +struct MapObj; + + + +struct MapObjAct +{ + struct MapObjAct * next; + uint8_t id; /* unique id of map object action */ + char * name; /* human-readable identifier */ + uint8_t effort; /* how many turn the action takes */ + void (* func) (struct MapObj *); /* function called after .effort turns */ +}; + + + +/* Init MapObjAct chain at world.map_obj_acts from config/map_object_actions. */ +extern void init_map_object_actions(); + +/* Free MapObjAct * chain starting at "moa". */ +extern void free_map_object_actions(struct MapObjAct * moa); + +/* Actor "mo" does nothing. */ +extern void actor_wait(struct MapObj * mo); + +/* Actor "mo" tries to move one step in direction described by char mo->arg + * (where east is 'E', north 'N') etc. Move either succeeds, or another actor is + * encountered and hit (which leads ot its lifepoint decreasing by one and + * eventually death), or the move fails due to an impassable target square. + */ +extern void actor_move(struct MapObj * mo); + +/* Actor "mo" tries to drop from inventory object indexed by number mo->args. */ +extern void actor_drop(struct MapObj * mo); + +/* Actor "mo" tries to pick up object from ground into its inventory. */ +extern void actor_pick(struct MapObj * mo); + +/* Actor "mo" tries to use inventory object indexed by number mo->args. + * (Currently the only valid use is consuming "MAGIC MEAT". + */ +extern void actor_use(struct MapObj * mo); -struct World; -struct Map; -struct Monster; -extern char is_passable (struct Map *, struct yx_uint16); -extern void move_monster (struct World *, struct Monster *); -extern void move_player (struct World *, enum dir); -extern void player_wait(struct World *); #endif