Crossfire Server, Trunk
spell_effect.cpp File Reference
#include <global.h>
#include <ob_methods.h>
#include <ob_types.h>
#include <sounds.h>
#include <sproto.h>
+ Include dependency graph for spell_effect.cpp:

Go to the source code of this file.

Functions

static void animate_bomb (object *op)
 
static void check_spell_knockback (object *op)
 
static void execute_word_of_recall (object *op)
 
static void explosion (object *op)
 
static void forklightning (object *op, object *tmp)
 
void init_type_spell_effect (void)
 
static void move_aura (object *aura)
 
static void move_ball_spell (object *op)
 
static void move_bolt (object *op)
 
static objectmove_bullet (object *op)
 
static void move_cone (object *op)
 
static void move_missile (object *op)
 
static void move_swarm_spell (object *op)
 
static method_ret spell_effect_type_move_on (object *trap, object *victim, object *originator)
 
static method_ret spell_effect_type_process (object *op)
 

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.cpp.

Function Documentation

◆ animate_bomb()

static void animate_bomb ( object op)
static

This handles an exploding bomb.

Parameters
opThe original bomb object.

Definition at line 461 of file spell_effect.cpp.

References add_refcount(), arch_to_object(), env, explode_bullet(), find_archetype(), free_string(), freearr_x, NUM_ANIMATIONS, ob_process(), object_copy_owner(), object_get_env_recursive(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), give::op, out_of_map(), SPLINT, and Ice::tmp.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ check_spell_knockback()

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 899 of file spell_effect.cpp.

References absdir(), FLAG_IS_FLOOR, FLAG_NO_PICK, FLAG_WIZ, GET_MAP_OB, object::more, MOVE_FLYING, move_object(), give::op, QUERY_FLAG, rndm(), and Ice::tmp.

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

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ execute_word_of_recall()

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 537 of file spell_effect.cpp.

References enter_exit(), object_free_drop_inventory(), object_remove(), give::op, PLAYER, and remove_unpaid_objects().

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ explosion()

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 320 of file spell_effect.cpp.

References check_spell_knockback(), freearr_x, freearr_y, hit_map(), m, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_merge_spell(), object_new(), object_remove(), ok_to_put_more(), give::op, and Ice::tmp.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ forklightning()

static void forklightning ( object op,
object tmp 
)
static

Causes op to fork.

Parameters
oporiginal bolt.
tmpfirst piece of the fork.

Definition at line 848 of file spell_effect.cpp.

References absdir(), living::Con, living::dam, living::Dex, object::direction, object::duration, freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, m, OB_TYPE_MOVE_BLOCK, object_copy(), object_insert_in_map_at(), object_new(), object_update_turn_face(), give::op, P_OUT_OF_MAP, rndm(), object::speed_left, object::stats, and Ice::tmp.

Referenced by move_bolt().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_type_spell_effect()

void init_type_spell_effect ( void  )

Initializer for the SPELL_EFFECT object type.

Definition at line 54 of file spell_effect.cpp.

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:

◆ move_aura()

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 728 of file spell_effect.cpp.

References animate::anim, animate_object(), object::animation, arch_to_object(), object::attacktype, cast_spell(), check_spell_expiry(), archetype::clone, object::duration, object::env, FLAG_ALIVE, FLAG_ANIMATE, FLAG_FRIENDLY, FLAG_REMOVED, FLAG_UNAGGRESSIVE, FOR_MAP_FINISH, FOR_MAP_PREPARE, FREE_OBJ_FREE_INVENTORY, FREE_OBJ_NO_DESTROY_CALLBACK, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), IS_PLAYER(), m, object::map, OB_TYPE_MOVE_BLOCK, object_free(), object_free_drop_inventory(), object_get_value(), object_insert_in_map_at(), object_insert_in_ob(), object_remove(), object::other_arch, P_OUT_OF_MAP, QUERY_FLAG, object::range, SET_FLAG, SPELL, sstring, object::state, Ice::tmp, try_find_animation(), object::type, object::x, and object::y.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_ball_spell()

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 559 of file spell_effect.cpp.

References absdir(), adjust_dir(), arch_to_object(), freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), m, OB_TYPE_MOVE_BLOCK, object_get_owner(), object_insert_in_map_at(), object_remove(), on_same_map(), give::op, P_IS_ALIVE, P_OUT_OF_MAP, rndm(), spell_find_dir(), object::x, and object::y.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_bolt()

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 156 of file spell_effect.cpp.

References absdir(), check_spell_knockback(), DIRX, DIRY, FLAG_REFLECTING, forklightning(), freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, hit_map(), m, OB_TYPE_MOVE_BLOCK, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_new(), object_remove(), object_update_turn_face(), give::op, P_IS_ALIVE, P_OUT_OF_MAP, QUERY_FLAG, reflwall(), rndm(), Ice::tmp, diamondslots::x, and diamondslots::y.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_bullet()

static object * 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.
Returns
The bullet at its new location, or NULL if it no longer exists.

Definition at line 260 of file spell_effect.cpp.

References absdir(), check_bullet(), DIRX, DIRY, explode_bullet(), FLAG_FREED, get_map_flags(), GET_MAP_MOVE_BLOCK, m, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), give::op, P_OUT_OF_MAP, QUERY_FLAG, and reflwall().

Referenced by move_missile(), and spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_cone()

static void move_cone ( object op)
static

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

Parameters
opcone object moving.

Definition at line 393 of file spell_effect.cpp.

References absdir(), check_spell_knockback(), cone_drop(), FLAG_LIFESAVE, freearr_x, freearr_y, hit_map(), llevError, LOG(), 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(), give::op, QUERY_FLAG, CFweardisguise::tag, Ice::tmp, diamondslots::x, and diamondslots::y.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_missile()

static void move_missile ( object op)
static

Move a missile object. This is the same as move_bullet(), except that after moving, we update the projectile's direction (if it's still in existence) so that it homes in on things.

Parameters
opThe missile that needs to be moved.

Definition at line 516 of file spell_effect.cpp.

References adjust_dir(), move_bullet(), object_get_owner(), object_update_turn_face(), give::op, and spell_find_dir().

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ move_swarm_spell()

static void move_swarm_spell ( object op)
static

Definition at line 658 of file spell_effect.cpp.

References absdir(), fire_arch_from_position(), freearr_x, freearr_y, get_map_flags(), get_random_dir(), m, object_free_drop_inventory(), object_get_owner(), object_remove(), give::op, P_OUT_OF_MAP, rndm(), SP_BULLET, SP_MAGIC_MISSILE, SPELL, object::x, and object::y.

Referenced by spell_effect_type_process().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ spell_effect_type_move_on()

static method_ret spell_effect_type_move_on ( object trap,
object victim,
object originator 
)
static

Move on this Spell Effect object.

Parameters
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 66 of file spell_effect.cpp.

References object::attacktype, common_post_ob_move_on(), common_pre_ob_move_on(), object::count, living::dam, FLAG_ALIVE, hit_player(), 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, object::speed, object::stats, object::subtype, and sword_of_souls::victim.

Referenced by init_type_spell_effect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ spell_effect_type_process()

static method_ret spell_effect_type_process ( object op)
static

Handle ob_process for all SPELL_EFFECT objects.

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

Definition at line 106 of file spell_effect.cpp.

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(), give::op, SP_AURA, SP_BOLT, SP_BOMB, SP_BULLET, SP_CONE, SP_EXPLOSION, SP_MAGIC_MISSILE, SP_MOVING_BALL, SP_SWARM, and SP_WORD_OF_RECALL.

Referenced by init_type_spell_effect().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: