90 int recharge(
object *op,
object *caster,
object *spell_ob) {
96 if (wand == NULL || wand->
type !=
WAND) {
98 "You need to mark the wand you want to recharge.", NULL);
104 "The %s vibrates violently, then explodes!",
105 "The %s vibrates violently, then explodes!",
129 "Your %s is broken.",
130 "Your %s is broken.",
140 "The %s glows with power.",
141 "The %s glows with power.",
175 int x = op->
x, y = op->
y, numat = 0, choice, friendly;
177 object *tmp, *next, *owner;
185 if (op->
level >= level*2
204 choice =
rndm(0, numat-1);
217 for (tmp = op->
inv; tmp != NULL; tmp = next) {
254 for (tmp = op->
inv; tmp != NULL; tmp = next) {
279 "The %s glow red, melt and evaporate!",
280 "The %s glow red, melt and evaporate!",
284 "The %s glows red, melts and evaporates!",
285 "The %s glows red, melts and evaporates!",
304 int max_value, difficulty, tries = 0, choice, charges = op->
stats.
food, numat = 0;
308 max_value = op->
value*2;
309 if (max_value > 2000*(level/10))
310 max_value = 2000*(level/10)+(max_value-2000*(level/10))/3;
329 difficulty = op->
magic*5;
334 choice =
rndm(0, numat-1);
351 }
while (new_ob->
value > max_value && tries < 10);
353 LOG(
llevError,
"polymorph_item: fix_generated_object made %s invisible?!\n", new_ob->
name);
368 if (new_ob->
nrof > 2)
455 int range, mflags, maxrange, level;
463 for (range = 1; range < maxrange; range++) {
481 while (tmp != NULL) {
526 int missile_plus = 0, bonus_plus = 0;
527 const char *missile_name;
528 object *tmp, *missile;
531 missile_name =
"arrow";
533 for (tmp = op->
inv; tmp != NULL; tmp = tmp->
below)
535 missile_name = tmp->
race;
539 if (!strcmp(missile_name,
"arrows"))
540 missile_name =
"arrow";
541 else if (!strcmp(missile_name,
"crossbow bolts"))
542 missile_name =
"bolt";
545 LOG(
llevDebug,
"Cast create_missile: could not find archetype %s\n", missile_name);
552 if (isalpha(*stringarg)) {
555 for (; al != NULL; al = al->
next)
562 "No such object %ss of %s",
563 "No such object %ss of %s",
564 missile_name, stringarg);
570 "You are not allowed to create %ss of %s",
571 "You are not allowed to create %ss of %s",
572 missile_name, stringarg);
583 }
else if (atoi(stringarg) < missile_plus)
584 missile_plus = atoi(stringarg);
586 if (missile_plus > 4)
588 else if (missile_plus < -4)
592 if (missile->
nrof <= 3*(missile_plus+bonus_plus)) {
595 "This item is too powerful for you to create!",
599 missile->
nrof -= 3*(missile_plus+bonus_plus);
600 if (missile->
nrof < 1)
603 missile->
magic = missile_plus;
608 tag = missile->
count;
639 int cast_create_food(
object *op,
object *caster,
object *spell_ob,
int dir,
const char *stringarg) {
682 "You don't have enough experience to create any food.", NULL);
689 new_op->
nrof = food_value;
692 if (new_op->
nrof < 1)
715 int probe(
object *op,
object *caster,
object *spell_ob,
int dir) {
716 int r, mflags, maxrange;
725 for (r = 1; r < maxrange; r++) {
736 "Something blocks your magic.", NULL);
743 "You detect something.", NULL);
744 if (tmp->
head != NULL)
752 "You detect nothing.", NULL);
826 "You can not extend the duration of your invisibility any further", NULL);
852 "You can't see your hands!", NULL);
855 "You feel more transparent!", NULL);
863 if (tmp->
enemy == op)
884 int range, i, j, mflags;
893 for (i = -range; i < range; i++)
894 for (j = -range; j < range; j++) {
909 for (tmp =
GET_MAP_OB(m, sx, sy); tmp != NULL; tmp = next) {
944 "You feel a force starting to build up inside you.", NULL);
951 "Oops, program error!", NULL);
952 LOG(
llevError,
"cast_word_of_recall: create_archetype(force) failed!\n");
963 dummy->
speed = 0.002;
978 "You feel a force starting to build up inside you.", NULL);
997 int cast_wonder(
object *op,
object *caster,
int dir,
object *spell_ob) {
1001 return cast_cone(op, caster, dir, spell_ob);
1006 LOG(
llevError,
"cast_wonder: Unable to get a spell!\n");
1010 LOG(
llevError,
"cast_wonder: spell returned is not a spell (%d, %s)!\n", newspell->
type, newspell->
name);
1015 LOG(
llevError,
"cast_wonder: spell returned is another wonder spell!\n");
1018 return cast_spell(op, caster, dir, newspell, NULL);
1048 "You worship no god", NULL);
1052 if (*cp ==
'\0' && tmp == NULL)
1054 "You feel very mundane", NULL);
1064 "Your %s is depleted by %d",
1065 "Your %s is depleted by %d",
1073 "You glow in the dark.", NULL);
1077 for (tmp = op->
inv; tmp != NULL; tmp = tmp->
below) {
1080 snprintf(buf,
sizeof(buf),
"Your metabolism isn't focused on anything.");
1123 object *dummy, *force, *old_force, *tmp;
1125 char portal_name [1024], portal_message [1024];
1137 "You can't cast that here.", NULL);
1145 "You need to exit the transport to cast that.", NULL);
1153 if (dummy == NULL) {
1155 "Oops, program error!", NULL);
1156 LOG(
llevError,
"get_object failed (force in cast_create_town_portal for %s!\n", op->
name);
1161 if (force == NULL) {
1174 "You fix this place in your mind and feel that you"
1175 "can come here from anywhere.",
1199 if (dummy == NULL) {
1201 "Oops, program error!", NULL);
1202 LOG(
llevError,
"get_object failed (force) in cast_create_town_portal for %s!\n", op->
name);
1215 exitx =
EXIT_X(old_force);
1216 exity =
EXIT_Y(old_force);
1217 LOG(
llevDebug,
"Trying to kill a portal in %s (%d,%d)\n", old_force->
race, exitx, exity);
1225 tmp =
present_arch(perm_portal, exitmap, exitx, exity);
1227 if (tmp->
name == old_force->
name) {
1259 if (exitmap == NULL) {
1261 "Something strange happens. You can't remember where to go!?",
1268 "The spell effect has expired.", NULL);
1276 snprintf(portal_message, 1024,
"\nThe air moves around you and\na huge smell of ammonia\nsurounds you as you pass\nthrough %s's tiny portal\nPouah!\n", op->
name);
1277 else if (op_level < 30)
1278 snprintf(portal_message, 1024,
"\n%s's portal smells of ozone.\nYou do a lot of movements and finally pass\nthrough the small hole in the air\n", op->
name);
1279 else if (op_level < 60)
1280 snprintf(portal_message, 1024,
"\nA shining door opens in the air in front of you,\nshowing you the path to another place.\n");
1282 snprintf(portal_message, 1024,
"\nAs you walk through %s's portal, flowers come out\nfrom the ground around you.\nYou feel awed.\n", op->
name);
1291 if (dummy == NULL) {
1293 "Oops, program error!", NULL);
1294 LOG(
llevError,
"get_object failed (perm_magic_portal) in cast_create_town_portal for %s!\n", op->
name);
1313 "Oops, program error!", NULL);
1314 LOG(
llevError,
"get_object failed (force) in cast_create_town_portal for %s!\n", op->
name);
1331 if (dummy == NULL) {
1333 "Oops, program error!", NULL);
1334 LOG(
llevError,
"get_object failed (perm_magic_portal) in cast_create_town_portal for %s!\n", op->
name);
1354 "Oops, program error!", NULL);
1355 LOG(
llevError,
"get_object failed (force) in cast_create_town_portal for %s!\n", op->
name);
1367 "You see air moving and showing you the way home.", NULL);
1391 int magic_wall(
object *op,
object *caster,
int dir,
object *spell_ob) {
1393 int i, posblocked, negblocked, maxrange;
1413 "Something is in the way.", NULL);
1418 }
else if (spell_ob->
race) {
1424 LOG(
llevError,
"summon_wall: Unable to find archetype %s\n", buf1);
1426 "This spell is broken.", NULL);
1469 "Something destroys your %s",
1470 "Something destroys your %s",
1488 for (i = 1; i <= maxrange; i++) {
1491 dir2 = (dir < 4) ? (dir+2) : dir-2;
1511 x = tmp->
x-i*freearr_x[dir2];
1512 y = tmp->
y-i*freearr_y[dir2];
1562 "In what direction?", NULL);
1574 "You can't dimension door that far!", NULL);
1578 for (dist = 0; dist < op->
contr->
count; dist++) {
1592 if (dist < op->contr->count) {
1594 "Something blocks the magic of the spell.", NULL);
1612 "You cast your spell, but nothing happens.", NULL);
1621 for (dist = 0; dist < maxdist; dist++) {
1639 for (; dist > 0; dist--) {
1648 "Your spell failed!", NULL);
1679 int cast_heal(
object *op,
object *caster,
object *spell,
int dir) {
1683 int heal = 0, success = 0;
1700 "You are already fully healed.", NULL);
1712 "You feel just fine!", NULL);
1713 }
else if (heal > 50) {
1715 "Your wounds close!", NULL);
1716 }
else if (heal > 25) {
1718 "Your wounds mostly close.", NULL);
1719 }
else if (heal > 10) {
1721 "Your wounds start to fade.", NULL);
1724 "Your wounds start to close.", NULL);
1739 "Your body feels cleansed", NULL);
1748 "Your mind feels clearer", NULL);
1758 "Your vision begins to return.", NULL);
1768 "Magical energies surge through your body!", NULL);
1776 "You feel redeemed with you god!", NULL);
1785 "You feel your belly fill with food", NULL);
1797 "You grow no stronger.",
1798 "You grow no more agile.",
1799 "You don't feel any healthier.",
1801 "You are no easier to look at.",
1826 object *tmp, *tmp2 = NULL;
1827 object *force = NULL;
1841 for (tmp2 = tmp->
inv; tmp2 != NULL; tmp2 = tmp2->
below) {
1843 if (tmp2->
name == spell_ob->
name) {
1846 }
else if (spell_ob->
race && spell_ob->
race == tmp2->
name) {
1849 "You can not cast %s while %s is in effect",
1850 "You can not cast %s while %s is in effect",
1856 if (force == NULL) {
1873 "You recast the spell while in effect.", NULL);
1876 "Recasting the spell had no effect.", NULL);
1889 if (spell_ob->
resist[i]) {
1891 if (force->
resist[i] > 100)
1905 for (k = 0; k < stat; k++)
1931 if (op->
speed > 0.5)
1965 int cast_bless(
object *op,
object *caster,
object *spell_ob,
int dir) {
1968 object *tmp2, *force = NULL, *tmp;
1978 for (tmp2 = tmp->
inv; tmp2 != NULL; tmp2 = tmp2->
below) {
1980 if (tmp2->
name == spell_ob->
name) {
1983 }
else if (spell_ob->
race && spell_ob->
race == tmp2->
name) {
1985 "You can not cast %s while %s is in effect",
1986 "You can not cast %s while %s is in effect",
1992 if (force == NULL) {
2009 "You recast the spell while in effect.", NULL);
2012 "Recasting the spell had no effect.", NULL);
2023 "Your blessing seems empty.", NULL);
2027 if (god->
resist[i] > 0) {
2048 "You are blessed by %s!",
2049 "You are blessed by %s!",
2109 static void alchemy_object(
float value_adj,
object *
obj,
int *small_nuggets,
int *large_nuggets,
int *weight) {
2132 *large_nuggets += count;
2135 *small_nuggets += count;
2173 if (x == op->
x && y == op->
y && op->
map == m)
2176 if (small_nuggets) {
2179 tmp-> nrof = small_nuggets;
2184 if (large_nuggets) {
2187 tmp-> nrof = large_nuggets;
2208 int alchemy(
object *op,
object *caster,
object *spell_ob) {
2209 int x, y, weight = 0, weight_max, large_nuggets, small_nuggets, mflags;
2235 if (value_adj > 0.40)
2238 for (y = op->
y-1; y <= op->y+1; y++) {
2239 for (x = op->
x-1; x <= op->x+1; x++) {
2260 for (tmp =
GET_MAP_OB(mp, nx, ny); tmp != NULL; tmp = next) {
2266 object *next1, *tmp1;
2267 for (tmp1 = tmp->
inv; tmp1 != NULL; tmp1 = next1) {
2268 next1 = tmp1->
below;
2272 alchemy_object(value_adj, tmp1, &small_nuggets, &large_nuggets, &weight);
2275 alchemy_object(value_adj, tmp, &small_nuggets, &large_nuggets, &weight);
2277 if (weight > weight_max) {
2319 int success = 0, was_one = 0;
2321 for (tmp = op->
inv; tmp; tmp = tmp->
below)
2342 "You feel like some of your items are looser now.", NULL);
2346 "You failed to remove the curse.", NULL);
2349 "You are not using any cursed items.", NULL);
2373 "You need to mark an item first!", NULL);
2380 "The spell has no effect", NULL);
2387 "Your %s emits a dark light for a few seconds.",
"Your %s emits a dark light for a few seconds.", name);
2397 "Your %s glows blue for a few seconds.",
"Your %s glows blue for a few seconds.", name);
2421 int success = 0, num_ident;
2429 for (tmp = op->
inv; tmp; tmp = tmp->
below) {
2439 "The item has a story:\n%s",
2440 "The item has a story:\n%s",
2462 "On the ground is %s.",
2463 "On the ground is %s.",
2467 "The item has a story:\n%s",
2468 "The item has a story:\n%s",
2481 "You can't reach anything unidentified.", NULL);
2501 object *tmp, *last, *detect;
2503 int done_one, range, mflags, floor, level;
2514 for (x = op->
x-range; x <= op->x+range; x++)
2515 for (y = op->
y-range; y <= op->y+range; y++) {
2539 for (tmp = last; tmp; tmp = tmp->
below) {
2623 if (done_one == 2 && detect) {
2640 for (tmp = op->
inv; tmp; tmp = tmp->
below) {
2677 "You feel energy course through you.", NULL);
2683 "Your head explodes!", NULL);
2695 "You feel like your head is going to explode.", NULL);
2698 "You get a splitting headache!", NULL);
2701 "Chaos fills your world.", NULL);
2705 "You start hearing voices.", NULL);
2727 object *plyr = NULL;
2753 "There is no one there.", NULL);
2763 }
else if (op != plyr) {
2771 sucked = (plyr->
stats.
sp*rate)/100;
2775 sucked = (sucked*rate)/100;
2796 object *tmp, *head, *next;
2808 for (tmp =
GET_MAP_OB(m, sx, sy); tmp != NULL; tmp = next) {
2835 }
else switch (head->
type) {
2847 if (
rndm(0, 149) == 0) {
2880 "You can't consecrate anything if you don't worship a god!", NULL);
2884 for (tmp = op->
below; tmp; tmp = tmp->
below) {
2890 "You are not powerful enough to reconsecrate the %s",
2891 "You are not powerful enough to reconsecrate the %s",
2901 letter = strlen(buf);
2903 for (; letter < strlen(buf); letter++)
2904 buf[letter] =
tolower(buf[letter]);
2908 "You fail to consecrate the altar.", NULL);
2909 LOG(
llevError,
"cast_consecrate: can't find altar %s for god %s\n", buf, god->
name);
2913 new_altar->
x = tmp->
x;
2914 new_altar->
y = tmp->
y;
2919 "You consecrated the altar to %s!",
2920 "You consecrated the altar to %s!",
2927 "You are not standing over an altar!", NULL);
2955 object *weapon, *tmp;
2964 "Oops, program error!", NULL);
2965 LOG(
llevError,
"animate_weapon failed: spell %s missing other_arch!\n", spell->
name);
2992 "There is something in the way.", NULL);
3001 "You must mark a weapon to use with this spell!", NULL);
3006 "The spell fails to transform your weapon.", NULL);
3011 "You need to mark a weapon to animate it.", NULL);
3016 "You need to pay for the weapon to animate it.", NULL);
3024 "You need to unequip %s before using it in this spell",
3025 "You need to unequip %s before using it in this spell",
3030 if (weapon->
nrof > 1) {
3136 if (tmp->
speed > 3.33)
3140 snprintf(buf,
sizeof(buf),
"animated %s", weapon->
name);
3193 "It can be no brighter here.", NULL);
3196 "It can be no darker here.", NULL);
3236 "You recast the spell while in effect.", NULL);
3261 if (!msg || msg[0] == 0) {
3263 "Write what?", NULL);
3269 "Trying to cheat are we?", NULL);
3270 LOG(
llevInfo,
"write_rune: player %s tried to write bogus rune %s\n", op->
name, msg);
#define FLAG_KNOWN_BLESSED
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, sint16 x, sint16 y, sint16 *nx, sint16 *ny)
void cast_magic_storm(object *op, object *tmp, int lvl)
const char * determine_god(object *op)
archetype * find_archetype(const char *name)
#define FORCE_CHANGE_ABILITY
#define INS_BELOW_ORIGINATOR
int cast_bless(object *op, object *caster, object *spell_ob, int dir)
object * find_obj_by_type_subtype(const object *who, int type, int subtype)
materialtype_t * name_to_material(const char *name)
void set_owner(object *op, object *owner)
int is_magical(const object *op)
int cast_detection(object *op, object *caster, object *spell)
int caster_level(const object *caster, const object *spell)
void esrv_send_item(object *pl, object *op)
sstring add_refcount(sstring str)
static uint64 large_value
int cast_create_food(object *op, object *caster, object *spell_ob, int dir, const char *stringarg)
static void place_alchemy_objects(object *op, mapstruct *m, int small_nuggets, int large_nuggets, int x, int y)
int write_mark(object *op, object *spell, const char *msg)
struct artifactstruct * items
#define FLAG_NO_FIX_PLAYER
#define EXPLODING_FIREBALL
mapstruct * ready_map_name(const char *name, int flags)
sint8 get_attr_value(const living *stats, int attr)
void free_string(sstring str)
#define MSG_TYPE_SPELL_FAILURE
void esrv_update_item(int flags, object *pl, object *op)
int alchemy(object *op, object *caster, object *spell_ob)
struct treasureliststruct * randomitems
int cast_invisible(object *op, object *caster, object *spell_ob)
void pick_up(object *op, object *alt)
int cast_word_of_recall(object *op, object *caster, object *spell_ob)
int magic_wall(object *op, object *caster, int dir, object *spell_ob)
short freearr_x[SIZEOFFREE]
void draw_ext_info(int flags, int pri, const object *pl, uint8 type, uint8 subtype, const char *message, const char *oldmessage)
#define MSG_TYPE_SPELL_ERROR
object * ranges[range_size]
void update_object(object *op, int action)
int cast_item_curse_or_curse(object *op, object *caster, object *spell_ob)
int SP_level_dam_adjust(const object *caster, const object *spob)
int cast_earth_to_dust(object *op, object *caster, object *spell_ob)
void control_golem(object *op, int dir)
int remove_curse(object *op, object *caster, object *spell)
int manual_apply(object *op, object *tmp, int aflag)
void remove_friendly_object(object *op)
const object * find_god(const char *name)
void draw_ext_info_format(int flags, int pri, const object *pl, uint8 type, uint8 subtype, const char *new_format, const char *old_format,...)
struct archt * other_arch
char savebed_map[MAX_BUF]
int probe(object *op, object *caster, object *spell_ob, int dir)
#define SP_WORD_OF_RECALL
int change_map_light(mapstruct *m, int change)
archetype * find_archetype_by_object_type_name(int type, const char *name)
int cast_cone(object *op, object *caster, int dir, object *spell)
short freearr_y[SIZEOFFREE]
#define FLAG_KNOWN_MAGICAL
void create_treasure(treasurelist *t, object *op, int flag, int difficulty, int tries)
void polymorph(object *op, object *who, int level)
int rndm(int min, int max)
void map_newmap_cmd(socket_struct *ns)
int change_abil(object *op, object *tmp)
void remove_ob(object *op)
static uint64 small_value
static void polymorph_item(object *who, object *op, int level)
int cast_heal(object *op, object *caster, object *spell, int dir)
void confuse_living(object *op, object *hitter, int dam)
int recharge(object *op, object *caster, object *spell_ob)
object * create_archetype(const char *name)
artifactlist * find_artifactlist(int type)
uint8 create_home_portals
int cast_transfer(object *op, object *caster, object *spell, int dir)
const char * materialname
object * find_target_for_friendly_spell(object *op, int dir)
void update_all_los(const mapstruct *map, int x, int y)
#define MSG_TYPE_SPELL_HEAL
const char *const statname[NUM_STATS]
#define MSG_TYPE_ITEM_INFO
int is_dragon_pl(const object *op)
void set_attr_value(living *stats, int attr, sint8 value)
static void charge_mana_effect(object *victim, int caster_level)
int cast_create_obj(object *op, object *new_op, int dir)
void identify(object *op)
int create_aura(object *op, object *caster, object *spell)
int SP_level_duration_adjust(const object *caster, const object *spob)
void add_friendly_object(object *op)
struct timeval last_reset_time
int cure_disease(object *sufferer, object *caster)
int dimension_door(object *op, object *caster, object *spob, int dir)
void monster_check_apply(object *mon, object *item)
int cast_identify(object *op, object *caster, object *spell)
int cast_wonder(object *op, object *caster, int dir, object *spell_ob)
void spell_effect(object *spob, int x, int y, mapstruct *map, object *originator)
int cast_change_map_lightlevel(object *op, object *caster, object *spell)
object * get_owner(object *op)
int is_true_undead(object *op)
void examine_monster(object *op, object *tmp)
EXTERN const char *const change_resist_msg[NROFATTACKS]
#define OB_TYPE_MOVE_BLOCK(ob1, type)
object * present_in_ob_by_name(int type, const char *str, const object *op)
#define GET_MAP_MOVE_BLOCK(M, X, Y)
void play_sound_map(sint8 sound_type, object *emitter, int dir, const char *action)
object * find_marked_object(object *op)
#define FREE_AND_CLEAR_STR(xyz)
static void polymorph_melt(object *who, object *op)
object * present_arch(const archetype *at, mapstruct *m, int x, int y)
static void alchemy_object(float value_adj, object *obj, int *small_nuggets, int *large_nuggets, int *weight)
#define QUERY_FLAG(xyz, p)
int animate_weapon(object *op, object *caster, object *spell, int dir)
#define CLEAR_FLAG(xyz, p)
void fix_generated_item(object *op, object *creator, int difficulty, int max_magic, int flags)
object * insert_ob_in_ob(object *op, object *where)
char * ob_describe(const object *op, const object *observer, char *buf, size_t size)
object * get_object(void)
int cast_change_ability(object *op, object *caster, object *spell_ob, int dir, int silent)
#define MSG_TYPE_SPELL_TARGET
object * insert_ob_in_map(object *op, mapstruct *m, object *originator, int flag)
static const char *const no_gain_msgs[NUM_STATS]
sint16 resist[NROFATTACKS]
#define FLAG_KNOWN_CURSED
int need_identify(const object *op)
#define MSG_TYPE_SPELL_PERCEIVE_SELF
int perceive_self(object *op)
uint64 query_cost(const object *tmp, object *who, int flag)
int snprintf(char *dest, int max, const char *format,...)
void store_spell_expiry(object *spell)
int cast_consecrate(object *op, object *caster, object *spell)
#define FREE_AND_COPY(sv, nv)
int cast_polymorph(object *op, object *caster, object *spell_ob, int dir)
int SP_level_range_adjust(const object *caster, const object *spob)
#define MAP_PLAYER_UNIQUE
void set_spell_skill(object *op, object *caster, object *spob, object *dest)
object * present_arch_in_ob(const archetype *at, const object *op)
void query_short_name(const object *op, char *buf, size_t size)
void describe_item(const object *op, const object *owner, char *retbuf, size_t size)
void update_ob_speed(object *op)
#define MSG_TYPE_SPELL_SUCCESS
sstring add_string(const char *str)
#define GET_MAP_OB(M, X, Y)
int strcasecmp(const char *s1, const char *s2)
int find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
void counterspell(object *op, int dir)
void give_artifact_abilities(object *op, object *artifact)
void LOG(LogLevel logLevel, const char *format,...)
const char * strcasestr_local(const char *s, const char *find)
object * get_split_ob(object *orig_ob, uint32 nr, char *err, size_t size)
int makes_invisible_to(object *pl, object *mon)
int did_make_save(const object *op, int level, int bonus)
#define was_destroyed(op, old_tag)
int cast_create_missile(object *op, object *caster, object *spell, int dir, const char *stringarg)
void copy_object(object *op2, object *op)
void query_name(const object *op, char *buf, size_t size)
#define MSG_TYPE_VICTIM_SPELL
object * generate_treasure(treasurelist *t, int difficulty)
void free_object(object *ob)
int random_roll(int min, int max, const object *op, int goodbad)
void fix_object(object *op)
EXTERN archetype * first_archetype
object * arch_to_object(archetype *at)
static void polymorph_living(object *op, int level)
int hit_player(object *op, int dam, object *hitter, uint32 type, int full_hit)
int cast_create_town_portal(object *op, object *caster, object *spell, int dir)
#define HAS_RANDOM_ITEMS(op)
int cast_spell(object *op, object *caster, int dir, object *spell_ob, char *stringarg)
struct artifactstruct * next