Crossfire Server, Trunk  R20513
Functions
attack.c File Reference

This handles all attacks, magical or not. More...

#include "global.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "living.h"
#include "material.h"
#include "skills.h"
#include "sounds.h"
#include "sproto.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)
 Check if target and hitter are still in a relation similar to the one determined by get_attack_mode(). More...
 
static int adj_attackroll (object *hitter, object *target)
 Adjustments to attack rolls by various conditions. More...
 
static void attack_message (int dam, int type, object *op, object *hitter)
 Send an attack message to someone. More...
 
int attack_ob (object *op, object *hitter)
 Simple wrapper for attack_ob_simple(), will use hitter's values. More...
 
static int attack_ob_simple (object *op, object *hitter, int base_dam, int base_wc)
 Handles simple attack cases. More...
 
void blind_living (object *op, object *hitter, int dam)
 Blind a living thing. More...
 
static void cancellation (object *op)
 Cancels object *op. More...
 
void confuse_living (object *op, object *hitter, int dam)
 Confuse a living thing. More...
 
static void deathstrike_living (object *op, object *hitter, int *dam)
 Attempts to kill 'op'. More...
 
static int did_make_save_item (object *op, int type, object *originator)
 Checks to make sure the item actually made its saving throw based on the tables. More...
 
int friendly_fire (object *op, object *hitter)
 Find out if this is friendly fire (PVP and attacker is peaceful) or not. More...
 
static int get_attack_mode (object **target, object **hitter, int *simple_attack)
 Find correct parameters for attack, do some sanity checks. More...
 
int hit_map (object *op, int dir, uint32_t type, int full_hit)
 Attack a spot on the map. More...
 
int hit_player (object *op, int dam, object *hitter, uint32_t type, int full_hit)
 Object is attacked by something. More...
 
objecthit_with_arrow (object *op, object *victim)
 hit_with_arrow() disassembles the missile, attacks the victim and reassembles the missile. More...
 
static int hit_with_one_attacktype (object *op, object *hitter, int dam, uint32_t attacknum)
 Handles one attacktype's damage. More...
 
static int is_aimed_missile (object *op)
 Determine if the object is an 'aimed' missile. More...
 
static int kill_object (object *op, int dam, object *hitter)
 An object was killed, handle various things (logging, messages, ...). More...
 
void paralyze_living (object *op, int dam)
 Paralyze a living thing. More...
 
static void poison_living (object *op, object *hitter, int dam)
 Poison a living thing. More...
 
void save_throw_object (object *op, uint32_t type, object *originator)
 Object is attacked with some attacktype (fire, ice, ...). More...
 
static void scare_creature (object *target, object *hitter)
 Creature is scared, update its values. More...
 
static void slow_living (object *op, object *hitter, int dam)
 Slow a living thing. More...
 
static int stick_arrow (object *op, object *tmp)
 Try to put an arrow in inventory. More...
 
static void tear_down_wall (object *op)
 Handles wall tearing animation. More...
 
static void thrown_item_effect (object *hitter, object *victim)
 Handles any special effects of thrown items (like attacking living creatures–a potion thrown at a monster). More...
 

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 718 of file attack.c.

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

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 2447 of file attack.c.

References mapdef::darkness, FLAG_ALIVE, FLAG_BLIND, FLAG_CONFUSED, FLAG_REMOVED, FLAG_SCARED, FLAG_UNAGGRESSIVE, obj::invisible, is_aimed_missile(), llevError, LOG(), obj::map, monster_can_see_enemy(), monster_stand_in_light(), obj::move_type, object_get_owner(), on_same_map(), PLAYER, player_can_view(), QUERY_FLAG, and obj::type.

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
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 903 of file attack.c.

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

Referenced by do_skill_attack(), CRECombatSimulator::fight(), monsterFight(), and pets_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 749 of file attack.c.

References abort_attack(), liv::ac, adj_attackroll(), obj::anim_suffix, apply_anim_suffix(), AT_ACID, AT_PHYSICAL, obj::attacktype, Settings::casting_time, obj::casting_time, obj::chosen_skill, CLEAR_FLAG, obj::count, obj::current_weapon, liv::dam, draw_ext_info(), draw_ext_info_format(), EVENT_ATTACKS, execute_event(), FABS, FLAG_ALIVE, FLAG_HITBACK, FLAG_MONSTER, FLAG_SLEEP, get_attack_mode(), obj::hide, hit_player(), liv::Int, make_visible(), monster_can_see_enemy(), monster_npc_call_help(), MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_FUMBLE, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_HIT, obj::name, NDI_ALL, NDI_UNIQUE, object_get_owner(), object_was_destroyed, 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, and obj::type.

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 2260 of file attack.c.

References ATNR_BLIND, BLINDNESS, change_abil(), create_archetype(), draw_ext_info_format(), fix_object(), FLAG_APPLIED, FLAG_BLIND, liv::food, MAX_BUF, MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_DID_HIT, NDI_UNIQUE, object_get_owner(), object_insert_in_ob(), object_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 49 of file attack.c.

References AT_CANCELLATION, 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, FOR_INV_FINISH, FOR_INV_PREPARE, 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 2221 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(), MAX, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, obj::name, NDI_UNIQUE, object_insert_in_ob(), object_present_in_ob_by_name(), PLAYER, 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 2355 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 88 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 1812 of file attack.c.

References obj::contr, DISEASE, HEAD, object_get_owner(), 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 682 of file attack.c.

References FLAG_FREED, FLAG_REMOVED, 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_t  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 320 of file attack.c.

References obj::arch, AT_CHAOS, AT_COUNTERSPELL, AT_MAGIC, obj::count, counterspell(), liv::dam, obj::env, FLAG_ALIVE, FLAG_FREED, FLAG_REMOVED, FOR_INV_FINISH, FOR_INV_PREPARE, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, get_map_flags(), HEAD, hit_player(), llevError, LOG(), obj::map, obj::name, archt::name, object_update(), object_was_destroyed, P_OUT_OF_MAP, PLAYER, QUERY_FLAG, save_throw_object(), shuffle_attack(), obj::stats, TRANSPORT, UP_OBJ_FACE, 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_t  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 1861 of file attack.c.

References abort_attack(), obj::arch, AT_CHAOS, AT_DEATH, AT_DRAIN, AT_HOLYWORD, AT_MAGIC, AT_PARALYZE, AT_PHYSICAL, AT_SLOW, ATNR_MAGIC, attack_message(), ATTACKS, change_object(), CLEAR_FLAG, obj::count, obj::current_weapon, determine_god(), did_make_save(), DOOR, obj::enemy, EVENT_ATTACKED, execute_event(), 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, FOR_INV_FINISH, FOR_INV_PREPARE, friendly_fire(), get_attack_mode(), GRIMREAPER, obj::head, hit_with_one_attacktype(), liv::hp, kill_object(), obj::level, llevDebug, LOG(), liv::maxhp, monster_npc_call_help(), archt::more, obj::name, archt::name, NROFATTACKS, object_find_by_type2(), object_free_drop_inventory(), object_get_owner(), object_remove(), object_set_enemy(), object_was_destroyed, op_on_battleground(), PLAYER, QUERY_FLAG, obj::race, RANDOM, remove_friendly_object(), obj::resist, rndm(), obj::run_away, RUNE, scare_creature(), SCRIPT_FIX_ALL, SET_FLAG, Settings::set_friendly_fire, settings, obj::slaying, spring_trap(), obj::stats, tear_down_wall(), obj::title, TRAP, obj::type, undead_name, and obj::value.

Referenced by attack_ob_simple(), cast_destruction(), cast_earth_to_dust(), cast_light(), check_bullet(), eat_special_food(), enter_exit(), gate_type_process(), hit_map(), legacy_ob_process(), monster_check_doors(), monster_check_earthwalls(), move_symptom(), 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 945 of file attack.c.

References add_refcount(), attack_ob_simple(), obj::count, liv::dam, obj::env, EVENT_ATTACKS, EVENT_CONNECTOR, execute_event(), fix_stopped_arrow(), FOR_OB_AND_BELOW_FINISH, FOR_OB_AND_BELOW_PREPARE, free_no_drop(), free_string(), INS_NO_MERGE, INS_NO_WALK_ON, obj::inv, obj::map, object_free_drop_inventory(), object_insert_in_map_at(), object_insert_in_ob(), object_merge(), object_remove(), object_set_owner(), object_was_destroyed, SCRIPT_FIX_ALL, obj::skill, obj::speed, obj::stats, stick_arrow(), obj::type, 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_t  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. See the ATNR_xxx values.
Returns
damage to actually do.

Definition at line 1156 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, 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, FOR_INV_FINISH, FOR_INV_PREPARE, get_turn_bonus(), GIRDLE, GOLEM, liv::hp, is_wraith_pl(), obj::level, llevError, LOG(), M_IRON, MAX, MAX_BUF, liv::maxhp, MIN, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_HIT, archt::name, NDI_RED, NDI_UNIQUE, NROFATTACKS, object_get_owner(), 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, 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 2514 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 
)
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.
Returns
dealt damage.
Todo:
finish commenting what it does exactly.

Definition at line 1521 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, pl::golem_count, socket_struct::host, liv::hp, 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, object_free_drop_inventory(), object_get_owner(), object_get_value(), object_insert_in_map_at(), object_remove(), object_update_speed(), op_on_battleground(), pl::party, pl::peaceful, 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(), 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(), 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,
int  dam 
)

Paralyze a living thing.

Parameters
opvictim.
damdamage to deal.

Definition at line 2304 of file attack.c.

References ATNR_PARALYZE, draw_ext_info(), FABS, FLAG_PARALYZED, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, NDI_UNIQUE, PLAYER, QUERY_FLAG, obj::resist, SET_FLAG, obj::speed, obj::speed_left, and obj::type.

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

Here is the call graph for this function:

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_t  type,
object originator 
)
static void scare_creature ( object target,
object hitter 
)
static

Creature is scared, update its values.

Parameters
targetscared creature.
hitterwho scared target.

Definition at line 1129 of file attack.c.

References obj::enemy, FLAG_SCARED, object_get_owner(), object_set_enemy(), 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 2191 of file attack.c.

References arch_present_in_ob(), arch_to_object(), draw_ext_info(), find_archetype(), fix_object(), FLAG_APPLIED, liv::food, llevError, LOG(), MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, NDI_UNIQUE, object_insert_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 918 of file attack.c.

References HEAD, liv::hp, object_insert_in_ob(), object_remove(), 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 1080 of file attack.c.

References blank_face, CLEAR_FLAG, obj::face, FLAG_ALIVE, FLAG_BLOCKSVIEW, GET_ANIM_ID, liv::hp, llevError, LOG(), obj::map, liv::maxhp, obj::move_block, obj::name, NUM_ANIMATIONS, object_free_drop_inventory(), object_remove(), object_update(), SET_ANIMATION, obj::stats, UP_OBJ_FACE, update_all_los(), 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 2407 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 abort_attack(), and attack_ob_simple().

Here is the call graph for this function:

Here is the caller graph for this function: