/* -*- LPC -*- */ /* * $Locker: $ * $Id: basic.c,v 1.1 1998/01/06 04:06:18 ceres Exp $ * $Log: basic.c,v $ * Revision 1.1 1998/01/06 04:06:18 ceres * Initial revision * */ #include "potion_attrs.h" int x1, x2, y1, y2; void set_boundaries(int *min, int *max) { x1 = min[0]; x2 = max[0]; y1 = min[1]; y2 = max[1]; } int *query_coordinate() /* * this is for setting up potions ... say a wizard wants to put a healing * potion on her monster, she would put the line * set_ps_coord_quantity("/std/effects/cure_wounds"->query_coordinate(), 1000) * on it ... this one is the dumb standard one which just averages them * to get the midpoint */ { return ({ (x1 + x2) / 2, (y1 + y2) / 2 }); } #pragma no_warnings mixed *query_attrs(int *coord) /* * return attrs@coord. attrs is an array with elements as defined in * include/potion_attrs.h ... definitely to be masked */ { return ({ 0, 100, ({ }), ({ }), ({ }), ({ }) }); } int query_pass_through(int *coord) /* * how much of any 'masked' effects will be passed through? * returns percentage */ { return 100; } /* backdrop(int *coord) * if this returns true if this effect is just a 'backdrop' * if it _is_ then unless it is the first effect to be found, it * will _not_ be called at all. This is so that an area can have * a poison defined over it as a backdrop, then wherever useful potions * are placed on it the backdrop potion is not used, tho any given * healing/whatever potion will probably pass all or most through */ /* void action_drunk(object ob, int *coord, int quantity) * this is called when a player drinks a potion @ relevant coordinate */ /* void action_touch(object ob, int *coord, int quantity) * this is called when an object is splashed with a potion of this effect */ /* void action_smell(object ob, int *coord, int quantity) * this is called when a player smells the potion. The quantity is * a measure of the concentration of the potion ... basically * the potions ps_quantity * 100 / volume */ /* void action_create(object ob, int *coord, int quantity) * this is called when a potion is assigned the coordinate appropriate. * This is intended for those effects that are spontaneous upon creation ... * eg. Exploding spontaneously * Turning into a sludge monster * Such concentrated acid that it dissolves the container its in * etc * 'ob' is the container with the liquid in it. */ void install_effect() /* * install potion in potion space handler dbase */ { (void)POTION_SPACE_HANDLER->remove_effect(file_name(this_object())); (void)POTION_SPACE_HANDLER->add_effect(file_name(this_object()), x1, x2, y1, y2); } int sqrt(int p) { int i; for (i = 1; i < 500; i++) if (i * i > p) return i-1; } int distance_within_region(int *coord) { int dx, dy; if (x1 < 0) { if (x2 > 0) dx = (coord[0] < 0) ? -coord[0] : coord[0]; else dx = (x2 - coord[0]); } else dx = coord[0] - x1; if (y1 < 0) { if (y2 > 0) dy = (coord[1] < 0) ? -coord[1] : coord[1]; else dy = (y2 - coord[1]); } else dy = coord[1] - y1; return sqrt(dx * dx + dy * dy); } int distance_from_origin(int *coord) { return sqrt(coord[0] * coord[0] + coord[1] * coord[1]); }