Crossfire Server, Trunk  R20513
Functions
spell_effect.c File Reference

The implementation of the Spell Effect class of objects. More...

#include <global.h>
#include <ob_methods.h>
#include <ob_types.h>
#include <sounds.h>
#include <sproto.h>
Include dependency graph for spell_effect.c:

Go to the source code of this file.

Functions

static void animate_bomb (object *op)
 This handles an exploding bomb. More...
 
static void check_spell_knockback (object *op)
 Checks to see if a spell pushes objects as well as flies over and damages them (only used for cones for now) but moved here so it could be applied to bolts too. More...
 
static void execute_word_of_recall (object *op)
 Handles the actual word of recalling. More...
 
static void explosion (object *op)
 Expands an explosion. More...
 
static void forklightning (object *op, object *tmp)
 Causes op to fork. More...
 
void init_type_spell_effect (void)
 Initializer for the SPELL_EFFECT object type. More...
 
static void move_aura (object *aura)
 Process an aura. More...
 
static void move_ball_spell (object *op)
 This handles ball type spells that just sort of wander about. More...
 
static void move_bolt (object *op)
 Moves bolt 'op'. More...
 
static void move_bullet (object *op)
 Moves bullet 'op'. More...
 
static void move_cone (object *op)
 Causes cone object 'op' to move a space/hit creatures. More...
 
static void move_missile (object *op)
 Move a missle object. More...
 
static void move_swarm_spell (object *op)
 
static method_ret spell_effect_type_move_on (ob_methods *context, object *trap, object *victim, object *originator)
 Move on this Spell Effect object. More...
 
static method_ret spell_effect_type_process (ob_methods *context, object *op)
 Handle ob_process for all SPELL_EFFECT objects. More...
 

Detailed Description

The implementation of the Spell Effect class of objects.

Todo:
Split the subtype functions into their own file each, and split large functions.

Definition in file spell_effect.c.

Function Documentation

static void animate_bomb ( object op)
static

This handles an exploding bomb.

Parameters
opThe original bomb object.

Definition at line 459 of file spell_effect.c.

References add_refcount(), arch_to_object(), obj::attacktype, liv::dam, obj::direction, obj::duration, obj::env, explode_bullet(), find_archetype(), free_string(), freearr_x, obj::map, NUM_ANIMATIONS, ob_process(), object_copy_owner(), object_get_env_recursive(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), out_of_map(), obj::range, obj::skill, SPLINT, obj::state, obj::stats, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void check_spell_knockback ( object op)
static

Checks to see if a spell pushes objects as well as flies over and damages them (only used for cones for now) but moved here so it could be applied to bolts too.

Parameters
opThe spell object.

Definition at line 869 of file spell_effect.c.

References obj::above, absdir(), obj::direction, FLAG_IS_FLOOR, FLAG_NO_PICK, FLAG_WIZ, GET_MAP_OB, obj::head, obj::level, llevDebug, LOG(), obj::map, obj::more, MOVE_FLYING, move_object(), obj::move_type, QUERY_FLAG, rndm(), liv::sp, obj::stats, obj::weight, obj::x, and obj::y.

Referenced by explosion(), move_bolt(), and move_cone().

Here is the call graph for this function:

Here is the caller graph for this function:

static void execute_word_of_recall ( object op)
static

Handles the actual word of recalling.

Called when force in player inventory expires.

Parameters
opThe word of recall effect activating.

Definition at line 563 of file spell_effect.c.

References draw_ext_info(), enter_exit(), obj::env, FLAG_WIZCAST, get_map_flags(), obj::map, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), P_NO_CLERIC, PLAYER, QUERY_FLAG, obj::type, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void explosion ( object op)
static

Expands an explosion.

op is a piece of the explosion - this expans it in the different directions. At least that is what I think this does.

Parameters
oppiece of explosion expanding.

Definition at line 316 of file spell_effect.c.

References obj::attacktype, check_spell_knockback(), obj::direction, obj::duration, freearr_x, freearr_y, hit_map(), obj::map, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_merge_spell(), object_new(), object_remove(), ok_to_put_more(), obj::range, obj::speed_left, obj::state, obj::value, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void forklightning ( object op,
object tmp 
)
static

Causes op to fork.

Parameters
oporiginal bolt.
tmpfirst piece of the fork.

Definition at line 818 of file spell_effect.c.

References absdir(), liv::Con, liv::dam, liv::Dex, obj::direction, obj::duration, freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, obj::map, OB_TYPE_MOVE_BLOCK, object_copy(), object_insert_in_map_at(), object_new(), object_update_turn_face(), P_OUT_OF_MAP, rndm(), obj::speed_left, obj::stats, obj::x, and obj::y.

Referenced by move_bolt().

Here is the call graph for this function:

Here is the caller graph for this function:

void init_type_spell_effect ( void  )

Initializer for the SPELL_EFFECT object type.

Definition at line 54 of file spell_effect.c.

References register_move_on(), register_process(), SPELL_EFFECT, spell_effect_type_move_on(), and spell_effect_type_process().

Referenced by register_all_ob_types().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_aura ( object aura)
static

Process an aura.

An aura is a part of someone's inventory, which he carries with him, but which acts on the map immediately around him. Aura parameters: duration: duration counter. attacktype: aura's attacktype other_arch: archetype to drop where we attack

Parameters
auraThe spell effect.

Definition at line 754 of file spell_effect.c.

References arch_to_object(), obj::attacktype, check_spell_expiry(), obj::duration, obj::env, freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), obj::map, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_insert_in_map_at(), object_insert_in_ob(), object_remove(), obj::other_arch, P_OUT_OF_MAP, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_ball_spell ( object op)
static

This handles ball type spells that just sort of wander about.

Note that duration is handled by process_object() in time.c

Parameters
opThe spell effect.

Definition at line 585 of file spell_effect.c.

References absdir(), adjust_dir(), arch_to_object(), obj::attacktype, liv::dam, obj::direction, freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), obj::map, OB_TYPE_MOVE_BLOCK, object_get_owner(), object_insert_in_map_at(), object_remove(), on_same_map(), obj::other_arch, P_IS_ALIVE, P_OUT_OF_MAP, rndm(), spell_find_dir(), obj::stats, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_bolt ( object op)
static

Moves bolt 'op'.

Basically, it just advances a space, and checks for various things that may stop it.

Parameters
opThe bolt object moving.

Definition at line 158 of file spell_effect.c.

References absdir(), obj::attacktype, check_spell_knockback(), liv::Dex, obj::direction, DIRX, DIRY, obj::duration, FLAG_REFLECTING, forklightning(), freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), obj::map, OB_TYPE_MOVE_BLOCK, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_new(), object_remove(), object_update_turn_face(), P_IS_ALIVE, P_OUT_OF_MAP, QUERY_FLAG, obj::range, reflwall(), rndm(), obj::speed_left, obj::stats, obj::weight, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_bullet ( object op)
static

Moves bullet 'op'.

Basically, we move 'op' one square, and if it hits something, call check_bullet. This function is only applicable to bullets, but not to all fired arches (eg, bolts).

Parameters
opThe bullet being moved.

Definition at line 262 of file spell_effect.c.

References absdir(), check_bullet(), obj::direction, DIRX, DIRY, explode_bullet(), get_map_flags(), GET_MAP_MOVE_BLOCK, obj::map, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), obj::other_arch, P_OUT_OF_MAP, obj::range, reflwall(), obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_cone ( object op)
static

Causes cone object 'op' to move a space/hit creatures.

Parameters
opcone object moving.

Definition at line 390 of file spell_effect.c.

References absdir(), obj::attacktype, check_spell_knockback(), cone_drop(), obj::count, obj::duration, FLAG_LIFESAVE, freearr_x, freearr_y, hit_map(), llevError, LOG(), obj::map, liv::maxhp, obj::name, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_new(), object_remove(), object_update_speed(), object_was_destroyed, ok_to_put_more(), obj::other_arch, QUERY_FLAG, obj::range, liv::sp, obj::speed, obj::stats, obj::weight, obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_missile ( object op)
static

Move a missle object.

Parameters
opThe missile that needs to be moved.

Definition at line 512 of file spell_effect.c.

References adjust_dir(), AT_MAGIC, obj::count, obj::direction, DIRX, DIRY, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), obj::map, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_get_owner(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), object_was_destroyed, P_IS_ALIVE, P_OUT_OF_MAP, obj::range, spell_find_dir(), obj::x, and obj::y.

Referenced by spell_effect_type_process().

Here is the call graph for this function:

Here is the caller graph for this function:

static void move_swarm_spell ( object op)
static
static method_ret spell_effect_type_move_on ( ob_methods context,
object trap,
object victim,
object originator 
)
static

Move on this Spell Effect object.

Parameters
contextThe method context
trapThe Spell Effect we're moving on
victimThe object moving over this one
originatorThe object that caused the move_on event
Returns
METHOD_OK

Definition at line 67 of file spell_effect.c.

References obj::attacktype, common_post_ob_move_on(), common_pre_ob_move_on(), obj::count, liv::dam, FLAG_ALIVE, hit_player(), obj::material, obj::materialname, METHOD_ERROR, METHOD_OK, object_free_drop_inventory(), object_remove(), object_was_destroyed, QUERY_FLAG, save_throw_object(), SP_CONE, SP_MAGIC_MISSILE, SP_MOVING_BALL, obj::speed, obj::stats, and obj::subtype.

Referenced by init_type_spell_effect().

Here is the call graph for this function:

Here is the caller graph for this function:

static method_ret spell_effect_type_process ( ob_methods context,
object op 
)
static

Handle ob_process for all SPELL_EFFECT objects.

Parameters
contextThe method context
opThe spell effect that's being processed.
Returns
METHOD_OK

Definition at line 108 of file spell_effect.c.

References animate_bomb(), execute_word_of_recall(), explosion(), METHOD_OK, move_aura(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_missile(), move_swarm_spell(), SP_AURA, SP_BOLT, SP_BOMB, SP_BULLET, SP_CONE, SP_EXPLOSION, SP_MAGIC_MISSILE, SP_MOVING_BALL, SP_SWARM, SP_WORD_OF_RECALL, and obj::subtype.

Referenced by init_type_spell_effect().

Here is the call graph for this function:

Here is the caller graph for this function: