Crossfire Server, Branches 1.12  R18729
attack.c File Reference
#include <assert.h>
#include <global.h>
#include <living.h>
#include <material.h>
#include <skills.h>
#include <sproto.h>
#include <sounds.h>
+ Include dependency graph for attack.c:

Go to the source code of this file.

Functions

static int abort_attack (object *target, object *hitter, int simple_attack)
 
static int adj_attackroll (object *hitter, object *target)
 
static void attack_message (int dam, int type, object *op, object *hitter)
 
int attack_ob (object *op, object *hitter)
 
static int attack_ob_simple (object *op, object *hitter, int base_dam, int base_wc)
 
void blind_living (object *op, object *hitter, int dam)
 
static void cancellation (object *op)
 
void confuse_living (object *op, object *hitter, int dam)
 
static void deathstrike_living (object *op, object *hitter, int *dam)
 
static int did_make_save_item (object *op, int type, object *originator)
 
int friendly_fire (object *op, object *hitter)
 
static int get_attack_mode (object **target, object **hitter, int *simple_attack)
 
int hit_map (object *op, int dir, uint32 type, int full_hit)
 
int hit_player (object *op, int dam, object *hitter, uint32 type, int full_hit)
 
objecthit_with_arrow (object *op, object *victim)
 
static int hit_with_one_attacktype (object *op, object *hitter, int dam, uint32 attacknum)
 
static int is_aimed_missile (object *op)
 
static int kill_object (object *op, int dam, object *hitter, int type)
 
void paralyze_living (object *op, object *hitter, int dam)
 
static void poison_living (object *op, object *hitter, int dam)
 
void save_throw_object (object *op, uint32 type, object *originator)
 
static void scare_creature (object *target, object *hitter)
 
static void slow_living (object *op, object *hitter, int dam)
 
static int stick_arrow (object *op, object *tmp)
 
static void tear_down_wall (object *op)
 
static void thrown_item_effect (object *, object *)
 

Detailed Description

This handles all attacks, magical or not.

Todo:
clean functions. Are all parameters required? Seems quite a mess to send damage/wc etc in attack_ob_simple().

Definition in file attack.c.

Function Documentation

static int abort_attack ( object target,
object hitter,
int  simple_attack 
)
static

Check if target and hitter are still in a relation similar to the one determined by get_attack_mode().

Parameters
targetwho is attacked.
hitterwho is attacking.
simple_attackprevious mode as returned by get_attack_mode().
Returns
1 if the relation has changed, 0 else.

Definition at line 729 of file attack.c.

References obj::env, FLAG_REMOVED, obj::map, on_same_map(), and QUERY_FLAG.

Referenced by attack_ob_simple(), and hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int adj_attackroll ( object hitter,
object target 
)
static

Adjustments to attack rolls by various conditions

Parameters
hitterwho is hitting.
targetvictim of the attack.
Returns
adjustment to attack roll.

Definition at line 2471 of file attack.c.

References can_see_enemy(), mapdef::darkness, FLAG_ALIVE, FLAG_BLIND, FLAG_CONFUSED, FLAG_REMOVED, FLAG_SCARED, FLAG_UNAGGRESSIVE, get_owner(), obj::invisible, is_aimed_missile(), llevError, LOG(), obj::map, obj::move_type, on_same_map(), QUERY_FLAG, and stand_in_light().

Referenced by attack_ob_simple().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void attack_message ( int  dam,
int  type,
object op,
object hitter 
)
static

Send an attack message to someone.

Parameters
damamount of damage done.
typeattack type.
opvictim of the attack.
hitterwho is hitting.
Todo:
move check for player at function start? this function seems called for everyone. use string safe functions.

Definition at line 433 of file attack.c.

References obj::above, AT_COLD, AT_DRAIN, AT_ELECTRICITY, AT_FIRE, AT_MAGIC, AT_PHYSICAL, AT_POISON, ATM_ARROW, ATM_BASIC, ATM_BLUD, ATM_CLAW, ATM_CLEAVE, ATM_COLD, ATM_CRUSH, ATM_DOOR, ATM_DRAIN, ATM_ELEC, ATM_FIRE, ATM_KARATE, ATM_PIERCE, ATM_PUNCH, ATM_SLASH, ATM_SLICE, ATM_STAB, ATM_SUFFER, ATM_WHIP, ATM_WRAITH_FEED, attack_mess, attackmess::buf2, obj::chosen_skill, obj::contr, obj::current_weapon, DISEASE, DOOR, draw_ext_info(), draw_ext_info_format(), GET_MAP_OB, get_owner(), IS_ARROW, IS_LIVE, attackmess::level, obj::map, MAX_BUF, MAXATTACKMESS, MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_DID_HIT, MSG_TYPE_ATTACK_PET_HIT, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_HIT, obj::name, NDI_BLACK, out_of_map(), obj::owner, play_sound_map(), play_sound_player_only(), PLAYER, POISONING, rndm(), SK_CLAWING, SK_KARATE, SK_PUNCHING, SK_WRAITH_FEED, SOUND_TYPE_HIT, SOUND_TYPE_HIT_BY, SP_BULLET, SP_CONE, SP_EXPLOSION, SPELL_EFFECT, obj::subtype, SYMPTOM, obj::type, USING_SKILL, WEAP_BLUD, WEAP_CLEAVE, WEAP_CRUSH, WEAP_HIT, WEAP_PIERCE, WEAP_SLASH, WEAP_SLICE, WEAP_STAB, WEAP_WHIP, obj::weapontype, obj::x, and obj::y.

Referenced by hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int attack_ob ( object op,
object hitter 
)

Simple wrapper for attack_ob_simple(), will use hitter's values.

Parameters
opvictim.
hitterattacker.
Returns
dealt damage.

Definition at line 929 of file attack.c.

References attack_ob_simple(), liv::dam, obj::head, obj::stats, and liv::wc.

Referenced by do_skill_attack(), and move_golem().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int attack_ob_simple ( object op,
object hitter,
int  base_dam,
int  base_wc 
)
static

Handles simple attack cases.

Parameters
opvictim. Should be the head part.
hitterattacked. Should be the head part.
base_damdamage to do.
base_wcwc to hit with.
Returns
dealt damage.
Todo:
fix void return values. Try to remove gotos. Better document when it's called.

Definition at line 760 of file attack.c.

References abort_attack(), liv::ac, add_refcount(), adj_attackroll(), obj::anim_suffix, apply_anim_suffix(), AT_ACID, AT_PHYSICAL, obj::attacktype, can_see_enemy(), obj::casting_time, Settings::casting_time, CLEAR_FLAG, obj::count, obj::current_weapon, liv::dam, draw_ext_info(), draw_ext_info_format(), EVENT_ATTACK, execute_event(), FABS, FLAG_ALIVE, FLAG_HITBACK, FLAG_MONSTER, FLAG_SLEEP, free_string(), get_attack_mode(), get_owner(), obj::hide, hit_player(), liv::Int, leave(), make_visible(), MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_FUMBLE, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_HIT, obj::name, NDI_ALL, NDI_UNIQUE, npc_call_help(), PLAYER, PREFER_HIGH, PREFER_LOW, process_object(), QUERY_FLAG, random_roll(), rndm(), SCRIPT_FIX_ALL, settings, obj::speed, obj::speed_left, obj::stats, thrown_item_effect(), TRUE, obj::type, and was_destroyed.

Referenced by attack_ob(), and hit_with_arrow().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void blind_living ( object op,
object hitter,
int  dam 
)

Blind a living thing.

Parameters
opvictim.
hitterwho is attacking.
damdamage to deal.

Definition at line 2276 of file attack.c.

References ATNR_BLIND, BLINDNESS, change_abil(), create_archetype(), draw_ext_info_format(), fix_object(), FLAG_APPLIED, FLAG_BLIND, liv::food, get_owner(), insert_ob_in_ob(), MAX_BUF, MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_DID_HIT, NDI_UNIQUE, obj::owner, present_in_ob(), query_name(), obj::resist, SET_FLAG, obj::speed, and obj::stats.

Referenced by hit_with_one_attacktype(), and scroll_failure().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void cancellation ( object op)
static

Cancels object *op. Cancellation basically means an object loses its magical benefits.

Parameters
opitem to cancel. Its inventory will also be cancelled.

Definition at line 63 of file attack.c.

References AT_CANCELLATION, obj::below, CLEAR_FLAG, CONTAINER, did_make_save_item(), obj::env, esrv_update_item(), FABS, FLAG_ALIVE, FLAG_CURSED, FLAG_DAMNED, FLAG_KNOWN_CURSED, FLAG_KNOWN_MAGICAL, obj::inv, obj::invisible, obj::magic, PLAYER, QUERY_FLAG, rndm(), THROWN_OBJ, obj::type, and UPD_FLAGS.

Referenced by hit_with_one_attacktype(), and save_throw_object().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void confuse_living ( object op,
object hitter,
int  dam 
)

Confuse a living thing.

Parameters
opvictim.
hitterwho is attacking.
damdamage to deal.

Definition at line 2237 of file attack.c.

References add_string(), ATNR_CONFUSION, create_archetype(), draw_ext_info(), obj::duration, FLAG_CONFUSED, FORCE, FORCE_CONFUSION, FORCE_NAME, free_string(), insert_ob_in_ob(), MAX, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, obj::name, NDI_UNIQUE, PLAYER, present_in_ob_by_name(), QUERY_FLAG, obj::resist, SET_FLAG, obj::speed, obj::subtype, and obj::type.

Referenced by charge_mana_effect(), hit_with_one_attacktype(), prayer_failure(), scroll_failure(), spell_failure(), and write_scroll().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void deathstrike_living ( object op,
object hitter,
int *  dam 
)
static

Attempts to kill 'op'.

The intention of a death attack is to kill outright things that are a lot weaker than the attacker, have a chance of killing things somewhat weaker than the caster, and no chance of killing something equal or stronger than the attacker.

If a deathstrike attack has a slaying, only a monster whose name or race matches a comma-delimited list in the slaying field of the deathstriking object is affected (this includes undead). If no slaying set, only undead are unaffected.

Parameters
opvictim.
hitterattacker.
[out]damdamage to deal, will contain computed damage or 0 if strike failed.

Definition at line 2379 of file attack.c.

References obj::arch, obj::chosen_skill, FLAG_UNDEAD, liv::hp, obj::level, llevError, LOG(), obj::name, archt::name, PREFER_HIGH, QUERY_FLAG, obj::race, random_roll(), obj::slaying, obj::stats, and undead_name.

Referenced by hit_with_one_attacktype().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int did_make_save_item ( object op,
int  type,
object originator 
)
static

Checks to make sure the item actually made its saving throw based on the tables. It does not take any further action (like destroying the item).

Parameters
opobject to check.
typeattack type.
originatorwhat it attacking?
Returns
TRUE if item saved, FALSE else.
Todo:
check meaning of originator.

Definition at line 103 of file attack.c.

References AT_BLIND, AT_CONFUSION, AT_COUNTERSPELL, AT_DEATH, AT_DEPLETE, AT_DRAIN, AT_FEAR, AT_GHOSTHIT, AT_HOLYWORD, AT_LIFE_STEALING, AT_MAGIC, AT_PARALYZE, AT_POISON, AT_SLOW, AT_TURN_UNDEAD, attacks, liv::dam, FALSE, obj::magic, _materialtype::material, obj::material, obj::materialname, materialt, name_to_material(), _materialtype::next, NROFATTACKS, obj::resist, rndm(), _materialtype::save, obj::stats, and TRUE.

Referenced by cancellation(), and save_throw_object().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int friendly_fire ( object op,
object hitter 
)

Find out if this is friendly fire (PVP and attacker is peaceful) or not

Parameters
opvictim.
hitterattacker.
Returns
0 this is not friendly fire, 1 if hitter is a peaceful player, 2 if hitter is a pet of a peaceful player.

Definition at line 1818 of file attack.c.

References obj::contr, DISEASE, get_owner(), obj::head, pl::peaceful, PLAYER, POISONING, RUNE, SPELL, and obj::type.

Referenced by hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int get_attack_mode ( object **  target,
object **  hitter,
int *  simple_attack 
)
static

Find correct parameters for attack, do some sanity checks.

Parameters
targetwill point to victim's head.
hitterwill point to hitter's head.
simple_attackwill be 1 if one of victim or target isn't on a map, 0 else.
Returns
0 if hitter can attack target, 1 else.

Definition at line 691 of file attack.c.

References FLAG_FREED, FLAG_REMOVED, obj::head, llevError, LOG(), on_same_map(), and QUERY_FLAG.

Referenced by attack_ob_simple(), and hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int hit_map ( object op,
int  dir,
uint32  type,
int  full_hit 
)

Attack a spot on the map.

Parameters
opobject hitting the map.
dirdirection op is hitting/going.
typeattacktype.
full_hitif set then monster area does not matter, it gets all damage. Else damage is proportional to affected area vs full monster area.
Returns
1 if it hits something, 0 otherwise.

Definition at line 292 of file attack.c.

References obj::above, obj::arch, AT_CHAOS, AT_COUNTERSPELL, AT_MAGIC, obj::below, obj::count, counterspell(), liv::dam, obj::env, FLAG_ALIVE, FLAG_FREED, FLAG_REMOVED, freearr_x, freearr_y, get_map_flags(), GET_MAP_OB, obj::head, hit_player(), obj::inv, llevError, LOG(), obj::map, obj::material, obj::materialname, obj::move_block, obj::name, archt::name, P_OUT_OF_MAP, PLAYER, QUERY_FLAG, save_throw_object(), shuffle_attack(), obj::stats, TRANSPORT, obj::type, UP_OBJ_FACE, update_object(), was_destroyed, obj::x, and obj::y.

Referenced by explode_bullet(), explosion(), move_aura(), move_ball_spell(), move_bolt(), move_cone(), move_missile(), and rune_attack().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int hit_player ( object op,
int  dam,
object hitter,
uint32  type,
int  full_hit 
)

Object is attacked by something.

This isn't used just for players, but in fact most objects.

Oct 95 - altered the following slightly for MULTIPLE_GODS hack which needs new attacktype AT_HOLYWORD to work . b.t.

Parameters
opobject to be hit
dambase damage - protections/vulnerabilities/slaying matches can modify it.
hitterwhat is hitting the object
typeattacktype
full_hitset if monster area does not matter.
Returns
dealt damage.
Todo:
rename to something more meaningful.

Definition at line 1868 of file attack.c.

References abort_attack(), add_friendly_object(), obj::arch, arch_to_object(), AT_CHAOS, AT_DEATH, AT_DRAIN, AT_HOLYWORD, AT_MAGIC, AT_PARALYZE, AT_PHYSICAL, AT_SLOW, ATNR_MAGIC, attack_message(), obj::attack_movement, ATTACKS, Chaos_Attacks::attacktype, obj::below, CLEAR_FLAG, obj::count, determine_god(), did_make_save(), DOOR, obj::enemy, find_first_free_spot(), find_god(), FLAG_ALIVE, FLAG_FREED, FLAG_FRIENDLY, FLAG_MONSTER, FLAG_NO_DAMAGE, FLAG_ONE_HIT, FLAG_RUN_AWAY, FLAG_SPLITTING, FLAG_TEAR_DOWN, FLAG_UNAGGRESSIVE, FLAG_UNDEAD, FLAG_WIZ, free_object(), freearr_x, freearr_y, friendly_fire(), get_attack_mode(), get_owner(), GRIMREAPER, obj::head, hit_with_one_attacktype(), liv::hp, insert_ob_in_map(), obj::inv, kill_object(), obj::level, llevDebug, llevError, LOG(), obj::map, liv::maxhp, archt::more, obj::name, archt::name, npc_call_help(), NROFATTACKS, NROFNEWOBJS, obj::other_arch, obj::owner, PETMOVE, PLAYER, QUERY_FLAG, obj::race, remove_friendly_object(), remove_ob(), obj::resist, rndm(), obj::run_away, RUNE, scare_creature(), SET_FLAG, Settings::set_friendly_fire, set_owner(), settings, obj::slaying, spring_trap(), obj::stats, tear_down_wall(), obj::title, TRAP, obj::type, undead_name, obj::value, was_destroyed, obj::x, and obj::y.

Referenced by attack_ob_simple(), cast_destruction(), cast_earth_to_dust(), cast_light(), check_bullet(), check_doors(), check_earthwalls(), eat_special_food(), enter_exit(), gate_type_process(), hit_map(), legacy_ob_process(), move_symptom(), player_attack_door(), poison_type_apply(), poisoning_type_process(), rune_attack(), spell_effect_type_move_on(), spell_failure(), and START_TEST().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

object* hit_with_arrow ( object op,
object victim 
)

hit_with_arrow() disassembles the missile, attacks the victim and reassembles the missile.

Parameters
opmissile hitting.
victimwho is hit by op.
Returns
pointer to the reassembled missile, or NULL if the missile isn't available anymore.

Definition at line 975 of file attack.c.

References add_refcount(), attack_ob_simple(), obj::below, obj::count, liv::dam, obj::env, EVENT_ATTACK, EVENT_CONNECTOR, execute_event(), fix_stopped_arrow(), free_no_drop(), free_object(), free_string(), INS_NO_MERGE, INS_NO_WALK_ON, insert_ob_in_map(), insert_ob_in_ob(), obj::inv, obj::map, merge_ob(), remove_ob(), SCRIPT_FIX_ALL, obj::skill, obj::speed, obj::stats, stick_arrow(), obj::type, was_destroyed, liv::wc, obj::x, and obj::y.

Referenced by common_process_projectile(), and common_projectile_move_on().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int hit_with_one_attacktype ( object op,
object hitter,
int  dam,
uint32  attacknum 
)
static

Handles one attacktype's damage. This doesn't damage the creature, but returns how much it should take. However, it will do other effects (paralyzation, slow, etc.).

Parameters
opvictim of the attack.
hitterattacker.
dammaximum dealt damage.
attacknumnumber of the attacktype of the attack. Must be a single value and not a combination. See the ATNR_xxx values.
Returns
damage to actually do.

Definition at line 1179 of file attack.c.

References AMULET, obj::arch, ATNR_ACID, ATNR_BLIND, ATNR_CANCELLATION, ATNR_CHAOS, ATNR_CONFUSION, ATNR_COUNTERSPELL, ATNR_DEATH, ATNR_DEPLETE, ATNR_DRAIN, ATNR_FEAR, ATNR_HOLYWORD, ATNR_INTERNAL, ATNR_LIFE_STEALING, ATNR_PARALYZE, ATNR_PHYSICAL, ATNR_POISON, ATNR_SLOW, ATNR_TURN_UNDEAD, obj::below, blind_living(), cancellation(), change_exp(), check_physically_infect(), obj::chosen_skill, confuse_living(), obj::current_weapon, deathstrike_living(), determine_god(), did_make_save(), obj::discrete_damage, DOOR, drain_stat(), draw_ext_info_format(), esrv_update_item(), liv::exp, find_god(), fix_object(), FLAG_ALIVE, FLAG_APPLIED, FLAG_GENERATOR, FLAG_MONSTER, FLAG_UNDEAD, FLAG_WAS_WIZ, liv::food, get_owner(), GIRDLE, GOLEM, HORN, liv::hp, obj::inv, obj::invisible, is_wraith_pl(), obj::level, llevError, LOG(), M_IRON, obj::magic, obj::material, MAX, MAX_BUF, liv::maxhp, MIN, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_HIT, archt::name, NDI_RED, NDI_UNIQUE, NROFATTACKS, op_on_battleground(), paralyze_living(), PLAYER, poison_living(), PREFER_HIGH, PREFER_LOW, QUERY_FLAG, query_name(), obj::race, random_roll(), obj::resist, RING, rndm(), ROD, scare_creature(), SK_EXP_TOTAL, obj::skill, obj::slaying, slow_living(), obj::speed, obj::stats, turn_bonus, obj::type, undead_name, UPD_NAME, WAND, and liv::Wis.

Referenced by hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int is_aimed_missile ( object op)
static

Determine if the object is an 'aimed' missile.

Parameters
opobject to check.
Returns
1 if aimed missile, 0 else.

Definition at line 2532 of file attack.c.

References ARROW, MOVE_FLYING, obj::move_type, SP_BULLET, SP_EXPLOSION, SPELL_EFFECT, obj::subtype, THROWN_OBJ, and obj::type.

Referenced by adj_attackroll().

+ Here is the caller graph for this function:

static int kill_object ( object op,
int  dam,
object hitter,
int  type 
)
static

An object was killed, handle various things (logging, messages, ...).

GROS: This code comes from hit_player. It has been made external to allow script procedures to "kill" objects in a combat-like fashion. It was initially used by (kill-object) developed for the Collector's Sword. Note that nothing has been changed from the original version of the following code.

Will LOG pk, handles battleground, and so on.

This function was a bit of a mess with hitter getting changed, values being stored away but not used, etc. I've cleaned it up a bit - I think it should be functionally equivalant. MSW 2002-07-17

Parameters
opwhat is being killed.
damdamage done to it.
hitterwhat is hitting it.
typethe attacktype.
Returns
dealt damage.
Todo:
finish commenting what it does exactly.

Definition at line 1534 of file attack.c.

References BIG_NAME, calc_skill_exp(), change_luck(), check_exp_loss(), obj::chosen_skill, obj::contr, create_archetype(), obj::current_weapon, DOOR, draw_ext_info(), draw_ext_info_format(), EVENT_DEATH, EVENT_GKILL, execute_event(), execute_global_event(), liv::exp, FLAG_BLOCKSVIEW, FLAG_FRIENDLY, FLAG_MONSTER, FLAG_READY_WEAPON, FLAG_WAS_WIZ, FLAG_WIZ, free_object(), get_ob_key_value(), get_owner(), pl::golem_count, socket_struct::host, liv::hp, insert_ob_in_map(), kill_player(), pl::killer, pl::last_skill_ob, obj::level, llevError, llevInfo, LOG(), obj::map, MAX_BUF, MIN, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_PLAYER, MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_DID_KILL, MSG_TYPE_ATTACK_PET_DIED, obj::name, NDI_ALL, NDI_BLACK, NDI_UNIQUE, NUM_SKILLS, op_on_battleground(), obj::owner, pl::party, Settings::pk_luck_penalty, Settings::pk_max_experience, Settings::pk_max_experience_percent, play_sound_map(), PLAYER, QUERY_FLAG, query_name(), range_golem, pl::ranges, remove_friendly_object(), remove_ob(), SCRIPT_FIX_ALL, settings, share_exp(), Settings::simple_exp, SK_EXP_TOTAL, SKILL, obj::skill, snprintf(), pl::socket, SOUND_TYPE_HIT, obj::speed, obj::speed_left, obj::stats, pl::title, obj::type, update_all_los(), update_ob_speed(), obj::x, and obj::y.

Referenced by hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void paralyze_living ( object op,
object hitter,
int  dam 
)

Paralyze a living thing.

Parameters
opvictim.
hitterwho is attacking.
damdamage to deal.

Definition at line 2324 of file attack.c.

References ATNR_PARALYZE, FABS, obj::resist, obj::speed, and obj::speed_left.

Referenced by hit_with_one_attacktype(), prayer_failure(), scroll_failure(), and spell_failure().

+ Here is the caller graph for this function:

static void poison_living ( object op,
object hitter,
int  dam 
)
static
void save_throw_object ( object op,
uint32  type,
object originator 
)

Object is attacked with some attacktype (fire, ice, ...). Calls did_make_save_item(). It then performs the appropriate actions to the item (such as burning the item up, calling cancellation(), etc.)

Parameters
opvictim of the attack.
typeattacktype.
originatorwhat is attacking.

Definition at line 171 of file attack.c.

References arch_to_object(), AT_CANCELLATION, AT_COLD, AT_ELECTRICITY, AT_FIRE, ATNR_COLD, obj::below, cancellation(), create_archetype(), decrease_ob_nr(), did_make_save_item(), obj::env, find_archetype(), fix_stopped_item(), FLAG_IS_LIGHTABLE, FLAG_NO_PICK, FLAG_REMOVED, free_object(), insert_ob_in_map(), insert_ob_in_ob(), obj::inv, obj::map, obj::move_slow, obj::move_slow_penalty, archt::name, obj::nrof, obj::other_arch, present_arch(), QUERY_FLAG, remove_ob(), replace_insert_ob_in_map(), obj::resist, rndm(), RUNE, spring_trap(), stop_item(), obj::type, obj::x, and obj::y.

Referenced by hit_map(), lighter_type_apply(), and spell_effect_type_move_on().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void scare_creature ( object target,
object hitter 
)
static

Creature is scared, update its values.

Parameters
targetscared creature.
hitterwho scared target.

Definition at line 1152 of file attack.c.

References obj::enemy, FLAG_SCARED, get_owner(), and SET_FLAG.

Referenced by hit_player(), and hit_with_one_attacktype().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void slow_living ( object op,
object hitter,
int  dam 
)
static

Slow a living thing.

Parameters
opvictim.
hitterwho is attacking.
damdamage to deal.

Definition at line 2208 of file attack.c.

References arch_to_object(), draw_ext_info(), find_archetype(), fix_object(), FLAG_APPLIED, liv::food, insert_ob_in_ob(), llevError, LOG(), MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, NDI_UNIQUE, present_arch_in_ob(), SET_FLAG, obj::speed_left, and obj::stats.

Referenced by hit_with_one_attacktype().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static int stick_arrow ( object op,
object tmp 
)
static

Try to put an arrow in inventory.

Parameters
oparrow to try to insert.
tmpwhat is stopping the arrow.
Returns
1 if op was inserted into tmp's inventory, 0 otherwise.

Definition at line 946 of file attack.c.

References obj::head, liv::hp, insert_ob_in_ob(), remove_ob(), obj::stats, and obj::weight.

Referenced by hit_with_arrow().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void tear_down_wall ( object op)
static

Handles wall tearing animation. Will change the face according to the hp/maxhp ration.

If the wall reaches its last animation, either free it or set it non living so it doesn't block anymore.

Parameters
opwall to update.

Definition at line 1104 of file attack.c.

References blank_face, CLEAR_FLAG, obj::face, FLAG_ALIVE, FLAG_BLOCKSVIEW, free_object(), GET_ANIM_ID, liv::hp, llevError, LOG(), obj::map, liv::maxhp, obj::move_block, obj::name, NUM_ANIMATIONS, remove_ob(), SET_ANIMATION, obj::stats, UP_OBJ_FACE, update_all_los(), update_object(), obj::x, and obj::y.

Referenced by hit_player().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void thrown_item_effect ( object hitter,
object victim 
)
static

Handles any special effects of thrown items (like attacking living creatures–a potion thrown at a monster).

Parameters
hitterthrown item.
victimobject that is hit by hitter.
Todo:
invert parameters for coherence with other functions?

Definition at line 2431 of file attack.c.

References ATNR_MAGIC, ATNR_POISON, FLAG_ALIVE, FLAG_UNDEAD, ob_apply(), POISON, POTION, QUERY_FLAG, obj::resist, and obj::type.

Referenced by attack_ob_simple().

+ Here is the call graph for this function:

+ Here is the caller graph for this function: