Angband
Data Structures | Macros | Typedefs | Functions | Variables
project-mon.c File Reference

projection effects on monsters More...

#include "angband.h"
#include "cave.h"
#include "effects.h"
#include "mon-desc.h"
#include "mon-lore.h"
#include "mon-make.h"
#include "mon-move.h"
#include "mon-msg.h"
#include "mon-predicate.h"
#include "mon-spell.h"
#include "mon-timed.h"
#include "mon-util.h"
#include "player-calcs.h"
#include "project.h"
#include "source.h"
#include "list-elements.h"
#include "list-projections.h"

Data Structures

struct  project_monster_handler_context_s
 

Monster handlers

More...
 

Macros

#define ELEM(a)   project_monster_handler_##a,
 
#define PROJ(a)   project_monster_handler_##a,
 

Typedefs

typedef struct
project_monster_handler_context_s 
project_monster_handler_context_t
 

Monster handlers

More...
 
typedef void(* project_monster_handler_f )(project_monster_handler_context_t *)
 

Functions

static struct monster_racepoly_race (struct monster_race *race)
 Helper function – return a "nearby" race for polymorphing. More...
 
static int adjust_radius (project_monster_handler_context_t *context, int amount)
 
static void project_monster_resist_element (project_monster_handler_context_t *context, int flag, int factor)
 Resist an attack if the monster has the given elemental flag. More...
 
static void project_monster_resist_other (project_monster_handler_context_t *context, int flag, int factor, bool reduce, enum mon_messages msg)
 Resist an attack if the monster has the given flag. More...
 
static void project_monster_hurt_immune (project_monster_handler_context_t *context, int hurt_flag, int imm_flag, int hurt_factor, int imm_factor, enum mon_messages hurt_msg, enum mon_messages die_msg)
 Resist an attack if the monster has the given flag or hurt the monster more if it has another flag. More...
 
static void project_monster_hurt_only (project_monster_handler_context_t *context, int flag, enum mon_messages hurt_msg, enum mon_messages die_msg)
 Hurt the monster if it has a given flag or do no damage. More...
 
static void project_monster_breath (project_monster_handler_context_t *context, int flag, int factor)
 Resist an attack if the monster has the given spell flag. More...
 
static void project_monster_teleport_away (project_monster_handler_context_t *context, int flag)
 Teleport away a monster that has a given flag. More...
 
static void project_monster_scare (project_monster_handler_context_t *context, int flag)
 Scare a monster that has a given flag. More...
 
static void project_monster_dispel (project_monster_handler_context_t *context, int flag)
 Dispel a monster that has a given flag. More...
 
static void project_monster_handler_ACID (project_monster_handler_context_t *context)
 
static void project_monster_handler_ELEC (project_monster_handler_context_t *context)
 
static void project_monster_handler_FIRE (project_monster_handler_context_t *context)
 
static void project_monster_handler_COLD (project_monster_handler_context_t *context)
 
static void project_monster_handler_POIS (project_monster_handler_context_t *context)
 
static void project_monster_handler_LIGHT (project_monster_handler_context_t *context)
 
static void project_monster_handler_DARK (project_monster_handler_context_t *context)
 
static void project_monster_handler_SOUND (project_monster_handler_context_t *context)
 
static void project_monster_handler_SHARD (project_monster_handler_context_t *context)
 
static void project_monster_handler_NEXUS (project_monster_handler_context_t *context)
 
static void project_monster_handler_NETHER (project_monster_handler_context_t *context)
 
static void project_monster_handler_CHAOS (project_monster_handler_context_t *context)
 
static void project_monster_handler_DISEN (project_monster_handler_context_t *context)
 
static void project_monster_handler_WATER (project_monster_handler_context_t *context)
 
static void project_monster_handler_ICE (project_monster_handler_context_t *context)
 
static void project_monster_handler_GRAVITY (project_monster_handler_context_t *context)
 
static void project_monster_handler_INERTIA (project_monster_handler_context_t *context)
 
static void project_monster_handler_FORCE (project_monster_handler_context_t *context)
 
static void project_monster_handler_TIME (project_monster_handler_context_t *context)
 
static void project_monster_handler_PLASMA (project_monster_handler_context_t *context)
 
static void project_monster_handler_METEOR (project_monster_handler_context_t *context)
 
static void project_monster_handler_MISSILE (project_monster_handler_context_t *context)
 
static void project_monster_handler_MANA (project_monster_handler_context_t *context)
 
static void project_monster_handler_HOLY_ORB (project_monster_handler_context_t *context)
 
static void project_monster_handler_ARROW (project_monster_handler_context_t *context)
 
static void project_monster_handler_LIGHT_WEAK (project_monster_handler_context_t *context)
 
static void project_monster_handler_DARK_WEAK (project_monster_handler_context_t *context)
 
static void project_monster_handler_KILL_WALL (project_monster_handler_context_t *context)
 
static void project_monster_handler_KILL_DOOR (project_monster_handler_context_t *context)
 
static void project_monster_handler_KILL_TRAP (project_monster_handler_context_t *context)
 
static void project_monster_handler_MAKE_DOOR (project_monster_handler_context_t *context)
 
static void project_monster_handler_MAKE_TRAP (project_monster_handler_context_t *context)
 
static void project_monster_handler_AWAY_UNDEAD (project_monster_handler_context_t *context)
 
static void project_monster_handler_AWAY_EVIL (project_monster_handler_context_t *context)
 
static void project_monster_handler_AWAY_ALL (project_monster_handler_context_t *context)
 
static void project_monster_handler_TURN_UNDEAD (project_monster_handler_context_t *context)
 
static void project_monster_handler_TURN_EVIL (project_monster_handler_context_t *context)
 
static void project_monster_handler_TURN_ALL (project_monster_handler_context_t *context)
 
static void project_monster_handler_DISP_UNDEAD (project_monster_handler_context_t *context)
 
static void project_monster_handler_DISP_EVIL (project_monster_handler_context_t *context)
 
static void project_monster_handler_DISP_ALL (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_CLONE (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_POLY (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_HEAL (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_SPEED (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_SLOW (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_CONF (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_SLEEP (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_HOLD (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_STUN (project_monster_handler_context_t *context)
 
static void project_monster_handler_MON_DRAIN (project_monster_handler_context_t *context)
 
static bool project_m_monster_attack (project_monster_handler_context_t *context, int m_idx)
 Deal damage to a monster from another monster. More...
 
static bool project_m_player_attack (project_monster_handler_context_t *context)
 Deal damage to a monster from a non-monster source (usually a player, but could also be a trap) More...
 
static void project_m_apply_side_effects (project_monster_handler_context_t *context, int m_idx)
 Apply side effects from an attack onto a monster. More...
 
void project_m (struct source origin, int r, int y, int x, int dam, int typ, int flg, bool *did_hit, bool *was_obvious)
 Called from project() to affect monsters. More...
 

Variables

static const
project_monster_handler_f 
monster_handlers []
 

Detailed Description

projection effects on monsters

Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke

This work is free software; you can redistribute it and/or modify it under the terms of either:

a) the GNU General Public License as published by the Free Software Foundation, version 2, or

b) the "Angband licence": This software may be copied and distributed for educational, research, and not for profit purposes provided that this copyright and statement are included in all such copies. Other copyrights may also apply.

Macro Definition Documentation

#define ELEM (   a)    project_monster_handler_##a,
#define PROJ (   a)    project_monster_handler_##a,

Typedef Documentation


Monster handlers

typedef void(* project_monster_handler_f)(project_monster_handler_context_t *)

Function Documentation

static int adjust_radius ( project_monster_handler_context_t context,
int  amount 
)
static
static struct monster_race* poly_race ( struct monster_race race)
static

Helper function – return a "nearby" race for polymorphing.

Note that this function is one of the more "dangerous" ones...

References player::depth, monster_race::flags, get_mon_num(), i, monster_race::level, MAX, MIN, monster_race::name, one_in_, rf_has, and RF_UNIQUE.

Referenced by project_m_apply_side_effects().

void project_m ( struct source  origin,
int  r,
int  y,
int  x,
int  dam,
int  typ,
int  flg,
bool *  did_hit,
bool *  was_obvious 
)

Called from project() to affect monsters.

Called for projections with the PROJECT_KILL flag set, which includes bolt, beam, ball and breath effects.

Parameters
originis the monster list index of the caster
ris the distance from the centre of the effect
ythe coordinates of the grid being handled
xthe coordinates of the grid being handled
damis the "damage" from the effect at distance r from the centre
typis the projection (PROJ_) type
flgconsists of any relevant PROJECT_ flags
Returns
whether the effects were obvious

Note that this routine can handle "no damage" attacks (like teleport) by taking a zero damage, and can even take parameters to attacks (like confuse) by accepting a "damage", using it to calculate the effect, and then setting the damage to zero. Note that actual damage should be already adjusted for distance from the "epicenter" when passed in, but other effects may be influenced by r.

Note that "polymorph" is dangerous, since a failure in "place_monster()"' may result in a dereference of an invalid pointer. XXX XXX XXX

Various messages are produced, and damage is applied.

Just casting an element (e.g. plasma) does not make you immune, you must actually be made of that substance, or breathe big balls of it.

We assume that "Plasma" monsters, and "Plasma" breathers, are immune to plasma.

We assume "Nether" is an evil, necromantic force, so it doesn't hurt undead, and hurts evil less. If can breath nether, then it resists it as well. This should actually be coded into monster records rather than aasumed - NRM

Damage reductions use the following formulas: Note that "dam = dam * 6 / (randint1(6) + 6);" gives avg damage of .655, ranging from .858 to .500 Note that "dam = dam * 5 / (randint1(6) + 6);" gives avg damage of .544, ranging from .714 to .417 Note that "dam = dam * 4 / (randint1(6) + 6);" gives avg damage of .444, ranging from .556 to .333 Note that "dam = dam * 3 / (randint1(6) + 6);" gives avg damage of .327, ranging from .427 to .250 Note that "dam = dam * 2 / (randint1(6) + 6);" gives something simple.

In this function, "result" messages are postponed until the end, where the "note" string is appended to the monster name, if not NULL. So, to make a spell have no effect just set "note" to NULL. You should also set "notice" to false, or the player will learn what the spell does.

Note that this function determines if the player can see anything that happens by taking into account: blindness, line-of-sight, and illumination.

Hack – effects on grids which are memorized but not in view are also seen.

References cave, cave_monster(), project_monster_handler_context_s::dam, project_monster_handler_context_s::die_msg, monster::fx, monster::fy, get_lore(), project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, square::mon, source::monster, monster_handlers, monster_is_destroyed(), monster_is_visible(), player_upkeep::monster_race, NULL, project_monster_handler_context_s::obvious, PR_MONSTER, PROJECT_AWARE, project_m_apply_side_effects(), project_m_monster_attack(), project_m_player_attack(), PROJECT_SAFE, projections, monster::race, player_upkeep::redraw, project_monster_handler_context_s::seen, project_monster_handler_context_s::skipped, square_ispassable(), square_light_spot(), chunk::squares, update_mon(), player::upkeep, source::what, and source::which.

Referenced by project().

static void project_m_apply_side_effects ( project_monster_handler_context_t context,
int  m_idx 
)
static
static bool project_m_monster_attack ( project_monster_handler_context_t context,
int  m_idx 
)
static

Deal damage to a monster from another monster.

This is a helper for project_m(). It is very similar to mon_take_hit(), but eliminates the player-oriented stuff of that function. It isn't a type handler, but we take a handler context since that has a lot of what we need.

Parameters
contextis the project_m context.
m_idxis the cave monster index.
Returns
true if the monster died, false if it is still alive.

References add_monster_message(), project_monster_handler_context_s::dam, delete_monster_idx(), project_monster_handler_context_s::die_msg, monster_race::flags, player_upkeep::health_who, monster::hp, project_monster_handler_context_s::hurt_msg, message_pain(), project_monster_handler_context_s::mon, mon_clear_timed(), MON_TMD_FLG_NOMESSAGE, monster_death(), monster_is_mimicking(), PR_HEALTH, monster::race, player_upkeep::redraw, rf_has, RF_UNIQUE, project_monster_handler_context_s::seen, and player::upkeep.

Referenced by project_m().

static bool project_m_player_attack ( project_monster_handler_context_t context)
static

Deal damage to a monster from a non-monster source (usually a player, but could also be a trap)

This is a helper for project_m(). It isn't a type handler, but we take a handler context since that has a lot of what we need.

Parameters
contextis the project_m context.
Returns
true if the monster died, false if it is still alive.

References add_monster_message(), project_monster_handler_context_s::dam, project_monster_handler_context_s::die_msg, monster::hp, project_monster_handler_context_s::hurt_msg, message_pain(), project_monster_handler_context_s::mon, mon_take_hit(), and project_monster_handler_context_s::seen.

Referenced by project_m().

static void project_monster_breath ( project_monster_handler_context_t context,
int  flag,
int  factor 
)
static

Resist an attack if the monster has the given spell flag.

If the effect is seen, we learn that the monster has that spell (useful for breaths). Resistance is multiplied by the factor and reduced by a small random amount.

Parameters
contextis the project_m context.
flagis the RSF_ flag that the monster must have.
factoris the multiplier for the base damage.

References project_monster_handler_context_s::dam, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, monster::race, randint1, rsf_has, rsf_on, project_monster_handler_context_s::seen, monster_lore::spell_flags, and monster_race::spell_flags.

Referenced by project_monster_handler_CHAOS(), project_monster_handler_DARK(), project_monster_handler_FORCE(), project_monster_handler_GRAVITY(), project_monster_handler_INERTIA(), project_monster_handler_SHARD(), project_monster_handler_SOUND(), and project_monster_handler_TIME().

static void project_monster_dispel ( project_monster_handler_context_t context,
int  flag 
)
static

Dispel a monster that has a given flag.

If the monster matches, damage is applied and the effect is obvious (if seen). Otherwise, no damage is applied and the effect is not obvious. The player learns monster lore on whether or not the monster matches the given flag if the effect is seen.

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.

References project_monster_handler_context_s::dam, project_monster_handler_context_s::die_msg, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, project_monster_handler_context_s::obvious, monster::race, rf_has, rf_on, project_monster_handler_context_s::seen, and project_monster_handler_context_s::skipped.

Referenced by project_monster_handler_DISP_EVIL(), and project_monster_handler_DISP_UNDEAD().

static void project_monster_handler_ACID ( project_monster_handler_context_t context)
static
static void project_monster_handler_ARROW ( project_monster_handler_context_t context)
static
static void project_monster_handler_AWAY_ALL ( project_monster_handler_context_t context)
static
static void project_monster_handler_AWAY_EVIL ( project_monster_handler_context_t context)
static
static void project_monster_handler_AWAY_UNDEAD ( project_monster_handler_context_t context)
static
static void project_monster_handler_CHAOS ( project_monster_handler_context_t context)
static
static void project_monster_handler_COLD ( project_monster_handler_context_t context)
static
static void project_monster_handler_DARK ( project_monster_handler_context_t context)
static
static void project_monster_handler_DARK_WEAK ( project_monster_handler_context_t context)
static
static void project_monster_handler_DISEN ( project_monster_handler_context_t context)
static
static void project_monster_handler_DISP_ALL ( project_monster_handler_context_t context)
static
static void project_monster_handler_DISP_EVIL ( project_monster_handler_context_t context)
static
static void project_monster_handler_DISP_UNDEAD ( project_monster_handler_context_t context)
static
static void project_monster_handler_ELEC ( project_monster_handler_context_t context)
static
static void project_monster_handler_FIRE ( project_monster_handler_context_t context)
static
static void project_monster_handler_FORCE ( project_monster_handler_context_t context)
static
static void project_monster_handler_GRAVITY ( project_monster_handler_context_t context)
static
static void project_monster_handler_HOLY_ORB ( project_monster_handler_context_t context)
static
static void project_monster_handler_ICE ( project_monster_handler_context_t context)
static
static void project_monster_handler_INERTIA ( project_monster_handler_context_t context)
static
static void project_monster_handler_KILL_DOOR ( project_monster_handler_context_t context)
static
static void project_monster_handler_KILL_TRAP ( project_monster_handler_context_t context)
static
static void project_monster_handler_KILL_WALL ( project_monster_handler_context_t context)
static
static void project_monster_handler_LIGHT ( project_monster_handler_context_t context)
static
static void project_monster_handler_LIGHT_WEAK ( project_monster_handler_context_t context)
static
static void project_monster_handler_MAKE_DOOR ( project_monster_handler_context_t context)
static
static void project_monster_handler_MAKE_TRAP ( project_monster_handler_context_t context)
static
static void project_monster_handler_MANA ( project_monster_handler_context_t context)
static
static void project_monster_handler_METEOR ( project_monster_handler_context_t context)
static
static void project_monster_handler_MISSILE ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_CLONE ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_CONF ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_DRAIN ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_HEAL ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_HOLD ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_POLY ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_SLEEP ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_SLOW ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_SPEED ( project_monster_handler_context_t context)
static
static void project_monster_handler_MON_STUN ( project_monster_handler_context_t context)
static
static void project_monster_handler_NETHER ( project_monster_handler_context_t context)
static
static void project_monster_handler_NEXUS ( project_monster_handler_context_t context)
static
static void project_monster_handler_PLASMA ( project_monster_handler_context_t context)
static
static void project_monster_handler_POIS ( project_monster_handler_context_t context)
static
static void project_monster_handler_SHARD ( project_monster_handler_context_t context)
static
static void project_monster_handler_SOUND ( project_monster_handler_context_t context)
static
static void project_monster_handler_TIME ( project_monster_handler_context_t context)
static
static void project_monster_handler_TURN_ALL ( project_monster_handler_context_t context)
static
static void project_monster_handler_TURN_EVIL ( project_monster_handler_context_t context)
static
static void project_monster_handler_TURN_UNDEAD ( project_monster_handler_context_t context)
static
static void project_monster_handler_WATER ( project_monster_handler_context_t context)
static
static void project_monster_hurt_immune ( project_monster_handler_context_t context,
int  hurt_flag,
int  imm_flag,
int  hurt_factor,
int  imm_factor,
enum mon_messages  hurt_msg,
enum mon_messages  die_msg 
)
static

Resist an attack if the monster has the given flag or hurt the monster more if it has another flag.

If the effect is seen, we learn the status of both flags. Resistance is divided by imm_factor while hurt is multiplied by hurt_factor.

Parameters
contextis the project_m context.
hurt_flagis the RF_ flag that the monster must have to use the hurt factor.
imm_flagis the RF_ flag that the monster must have to use the resistance factor.
hurt_factoris the hurt multiplier for the base damage.
imm_factoris the resistance divisor for the base damage.
hurt_msgis the message that should be displayed when the monster is hurt.
die_msgis the message that should be displayed when the monster dies.

References project_monster_handler_context_s::dam, project_monster_handler_context_s::die_msg, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, monster::race, rf_has, rf_on, and project_monster_handler_context_s::seen.

Referenced by project_monster_handler_COLD(), project_monster_handler_FIRE(), and project_monster_handler_ICE().

static void project_monster_hurt_only ( project_monster_handler_context_t context,
int  flag,
enum mon_messages  hurt_msg,
enum mon_messages  die_msg 
)
static

Hurt the monster if it has a given flag or do no damage.

If the effect is seen, we learn the status the flag. There is no damage multiplier.

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.
hurt_msgis the message that should be displayed when the monster is hurt.
die_msgis the message that should be displayed when the monster dies.

References project_monster_handler_context_s::dam, project_monster_handler_context_s::die_msg, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, monster::race, rf_has, rf_on, and project_monster_handler_context_s::seen.

Referenced by project_monster_handler_KILL_WALL(), and project_monster_handler_LIGHT_WEAK().

static void project_monster_resist_element ( project_monster_handler_context_t context,
int  flag,
int  factor 
)
static

Resist an attack if the monster has the given elemental flag.

If the effect is seen, we learn that the monster has a given flag. Resistance is divided by the factor.

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.
factoris the divisor for the base damage.

References project_monster_handler_context_s::dam, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, monster::race, rf_has, rf_on, and project_monster_handler_context_s::seen.

Referenced by project_monster_handler_ACID(), project_monster_handler_ELEC(), and project_monster_handler_POIS().

static void project_monster_resist_other ( project_monster_handler_context_t context,
int  flag,
int  factor,
bool  reduce,
enum mon_messages  msg 
)
static

Resist an attack if the monster has the given flag.

If the effect is seen, we learn that the monster has a given flag. Resistance is multiplied by the factor and reduced by a small random amount (if reduce is set).

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.
factoris the multiplier for the base damage.
reduceshould be true if the base damage * factor should be reduced, false if the base damage should be increased.
msgis the message that should be displayed when the monster is hurt.

References project_monster_handler_context_s::dam, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, msg, monster::race, randint1, rf_has, rf_on, and project_monster_handler_context_s::seen.

Referenced by project_monster_handler_DISEN(), project_monster_handler_HOLY_ORB(), project_monster_handler_NEXUS(), project_monster_handler_PLASMA(), and project_monster_handler_WATER().

static void project_monster_scare ( project_monster_handler_context_t context,
int  flag 
)
static

Scare a monster that has a given flag.

If the monster matches, fear is applied and the effect is obvious (if seen). The player learns monster lore on whether or not the monster matches the given flag if the effect is seen. Damage is not incurred by the monster.

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.

References adjust_radius(), project_monster_handler_context_s::dam, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, project_monster_handler_context_s::mon_timed, project_monster_handler_context_s::obvious, monster::race, rf_has, rf_on, project_monster_handler_context_s::seen, and project_monster_handler_context_s::skipped.

Referenced by project_monster_handler_TURN_EVIL(), and project_monster_handler_TURN_UNDEAD().

static void project_monster_teleport_away ( project_monster_handler_context_t context,
int  flag 
)
static

Teleport away a monster that has a given flag.

If the monster matches, it is teleported and the effect is obvious (if seen). The player learns monster lore on whether or not the monster matches the given flag if the effect is seen. Damage is not incurred by the monster.

Parameters
contextis the project_m context.
flagis the RF_ flag that the monster must have.

References project_monster_handler_context_s::dam, monster_lore::flags, monster_race::flags, project_monster_handler_context_s::hurt_msg, project_monster_handler_context_s::lore, project_monster_handler_context_s::mon, project_monster_handler_context_s::obvious, monster::race, rf_has, rf_on, project_monster_handler_context_s::seen, project_monster_handler_context_s::skipped, and project_monster_handler_context_s::teleport_distance.

Referenced by project_monster_handler_AWAY_EVIL(), and project_monster_handler_AWAY_UNDEAD().

Variable Documentation

const project_monster_handler_f monster_handlers[]
static

Referenced by project_m().