Crossfire Server  1.75.0
spell_effect.cpp 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>

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 objectmove_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 missile object. More...
 
static void move_swarm_spell (object *op)
 
static method_ret spell_effect_type_move_on (object *trap, object *victim, object *originator)
 Move on this Spell Effect object. More...
 
static method_ret spell_effect_type_process (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.cpp.

Function Documentation

◆ animate_bomb()

◆ 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 object::above, absdir(), object::direction, FLAG_IS_FLOOR, FLAG_NO_PICK, FLAG_WIZ, GET_MAP_OB, object::head, object::level, object::map, object::more, MOVE_FLYING, move_object(), object::move_type, QUERY_FLAG, rndm(), living::sp, object::stats, object::weight, object::x, and object::y.

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

◆ 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::env, object::inv, object_free_drop_inventory(), object_remove(), do_skill_cb_data::op, PLAYER, remove_unpaid_objects(), and object::type.

Referenced by spell_effect_type_process().

◆ 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 object::attacktype, check_spell_knockback(), object::direction, object::duration, freearr_x, freearr_y, hit_map(), m, object::map, object_copy(), object_free_drop_inventory(), object_insert_in_map_at(), object_merge_spell(), object_new(), object_remove(), ok_to_put_more(), object::range, object::speed_left, object::state, object::value, object::x, and object::y.

Referenced by spell_effect_type_process().

◆ forklightning()

static void forklightning ( object op,
object tmp 
)
static

◆ 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().

◆ move_aura()

static void move_aura ( object aura)
static

◆ move_ball_spell()

static void move_ball_spell ( object op)
static

◆ move_bolt()

◆ 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(), object::direction, DIRX, DIRY, explode_bullet(), FLAG_FREED, get_map_flags(), GET_MAP_MOVE_BLOCK, m, object::map, OB_TYPE_MOVE_BLOCK, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), object_update_turn_face(), do_skill_cb_data::op, object::other_arch, P_OUT_OF_MAP, QUERY_FLAG, object::range, reflwall(), object::x, and object::y.

Referenced by move_missile(), and spell_effect_type_process().

◆ move_cone()

◆ 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(), do_skill_cb_data::dir, object::direction, object::map, move_bullet(), object_get_owner(), object_update_turn_face(), spell_find_dir(), object::x, and object::y.

Referenced by spell_effect_type_process().

◆ move_swarm_spell()

◆ 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(), object::material, object::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, object::speed, object::stats, and object::subtype.

Referenced by init_type_spell_effect().

◆ 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(), 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 object::subtype.

Referenced by init_type_spell_effect().