Crossfire Server, Trunk
pets.c File Reference
#include "global.h"
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "sproto.h"
+ Include dependency graph for pets.c:

Go to the source code of this file.

Functions

static objectchoose_cult_monster (object *pl, const object *god, int summon_level)
 
static objectfix_summon_pet (archetype *at, object *op, int dir)
 
static objectget_real_owner (object *ob)
 
static void mark_inventory_as_no_drop (object *ob)
 
void pets_attempt_follow (object *for_owner, int force)
 
void pets_control_golem (object *op, int dir)
 
void pets_follow_owner (object *ob, object *owner)
 
objectpets_get_enemy (object *pet, rv_vector *rv)
 
void pets_move (object *ob)
 
void pets_move_golem (object *op)
 
int pets_should_arena_attack (object *pet, object *owner, object *target)
 
int pets_summon_golem (object *op, object *caster, int dir, object *spob)
 
int pets_summon_object (object *op, object *caster, object *spell_ob, int dir, const char *stringarg)
 
void pets_terminate_all (object *owner)
 

Detailed Description

Those functions deal with pets.

Definition in file pets.c.

Function Documentation

◆ choose_cult_monster()

static object* choose_cult_monster ( object pl,
const object god,
int  summon_level 
)
static

Returns a monster (chosen at random) that this particular player (and his god) find acceptable. This checks level, races allowed by god, etc to determine what is acceptable.

Parameters
plplayer summoning.
godgod the player worships.
summon_levelsummoning level.
Returns
suitable monster, or NULL if no match found, after informing the player.

Definition at line 819 of file pets.c.

References buf, draw_ext_info_format(), MAX_BUF, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, obj::name, NDI_UNIQUE, obj::race, races_get_random_monster(), rndm(), and safe_strncpy.

Referenced by pets_summon_object().

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

◆ fix_summon_pet()

static object* fix_summon_pet ( archetype at,
object op,
int  dir 
)
static

This makes multisquare/single square monsters proper for map insertion.

Parameters
atarchetype to prepare.
opcaster of the spell
dirdirection the monster should be placed in.
Returns
suitable golem.

Definition at line 434 of file pets.c.

References add_friendly_object(), arch_to_object(), AT_DRAIN, AT_GHOSTHIT, AT_PHYSICAL, CLEAR_FLAG, create_treasure(), FLAG_CHANGING, FLAG_FRIENDLY, FLAG_GENERATOR, FLAG_MONSTER, FLAG_SPLITTING, FLAG_STAND_STILL, freearr_x, freearr_y, GOLEM, GT_STARTEQUIP, llevError, LOG(), mark_inventory_as_no_drop(), monster_check_apply_all(), archt::more, MOVE_WALK, archt::name, object_get_owner(), object_set_enemy(), object_set_owner(), give::op, PETMOVE, PLAYER, QUERY_FLAG, SET_FLAG, and Ice::tmp.

Referenced by pets_summon_golem().

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

◆ get_real_owner()

static object* get_real_owner ( object ob)
static

Recursively look through the owner property of objects until the real owner is found

Parameters
obitem we're searching the owner of.
Returns
owner, NULL if nothing found.

Definition at line 1059 of file pets.c.

References guildjoin::ob, and object_get_owner().

Referenced by pets_should_arena_attack().

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

◆ mark_inventory_as_no_drop()

static void mark_inventory_as_no_drop ( object ob)
static

Mark all inventory items as FLAG_NO_DROP.

Parameters
obthe object to modify.

Definition at line 34 of file pets.c.

References FLAG_NO_DROP, FOR_INV_FINISH, FOR_INV_PREPARE, guildjoin::ob, SET_FLAG, and Ice::tmp.

Referenced by fix_summon_pet(), and pets_summon_object().

+ Here is the caller graph for this function:

◆ pets_attempt_follow()

void pets_attempt_follow ( object for_owner,
int  force 
)

Check pets so they try to follow their master around the world.

Parameters
for_ownerif NULL, check all pets, else only pets for this owner.
forceif non zero, then forcibly move the pet close to its owner. If zero then only check pets if they are not on the same map, as computed by on_same_map(), as their owner.

Definition at line 249 of file pets.c.

References FABS, FLAG_FRIENDLY, FLAG_REMOVED, dragon_attune::force, free_objectlink(), get_friends_of(), guildoracle::list, llevMonster, LOG(), MIN_ACTIVE_SPEED, object_free_drop_inventory(), object_get_owner(), on_same_map(), pets_follow_owner(), PLAYER, QUERY_FLAG, and remove_friendly_object().

Referenced by enter_map(), swap_map(), teleport(), and transfer_ob().

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

◆ pets_control_golem()

void pets_control_golem ( object op,
int  dir 
)

Makes the golem go in specified direction. This is a really stupid function when you get down and look at it. Keep it here for the time being - makes life easier if we ever decide to do more interesting thing with controlled golems.

Parameters
opgolem.
dirdesired direction.
Todo:
trash.

Definition at line 630 of file pets.c.

References give::op.

Referenced by animate_weapon(), and fire().

+ Here is the caller graph for this function:

◆ pets_follow_owner()

void pets_follow_owner ( object ob,
object owner 
)

A pet is trying to follow its owner.

Parameters
obpet trying to follow. Will be object_remove()'d if can't follow.
ownerowner of ob.

Definition at line 284 of file pets.c.

References draw_ext_info(), FLAG_REMOVED, freearr_x, freearr_y, mapdef::in_memory, llevError, llevMonster, LOG(), obj::map, MAP_IN_MEMORY, MSG_TYPE_SPELL, MSG_TYPE_SPELL_PET, NDI_UNIQUE, guildjoin::ob, object_find_free_spot(), object_insert_in_map_at(), object_remove(), PLAYER, QUERY_FLAG, SIZEOFFREE, obj::type, obj::x, and obj::y.

Referenced by monster_move(), pets_attempt_follow(), and pets_move().

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

◆ pets_get_enemy()

object* pets_get_enemy ( object pet,
rv_vector rv 
)

Given that 'pet' is a friendly object, this function returns a monster the pet should attack, NULL if nothing appropriate is found. it basically looks for nasty things around the owner of the pet to attack. This is now tilemap aware.

Parameters
petwho is seeking an enemy.
[out]rvwill contain the path to the enemy.
Returns
enemy, or NULL if nothing suitable.

Definition at line 54 of file pets.c.

References obj::attack_movement, obj::attacked_by, obj::attacked_by_count, CLEAR_FLAG, obj::contr, obj::count, FLAG_ALIVE, FLAG_CONFUSED, FLAG_FRIENDLY, FLAG_UNAGGRESSIVE, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, get_map_flags(), get_rangevector(), get_search_arr(), HEAD, obj::map, monster_can_detect_enemy(), monster_can_see_enemy(), monster_check_enemy(), monster_find_nearest_enemy(), object_get_owner(), object_set_enemy(), on_same_map(), P_IS_ALIVE, P_OUT_OF_MAP, pet_defend, pet_sad, pl::petmode, PETMOVE, pets_should_arena_attack(), PLAYER, QUERY_FLAG, remove_friendly_object(), SIZEOFFREE, Ice::tmp, obj::type, diamondslots::x, obj::x, diamondslots::y, and obj::y.

Referenced by monster_find_enemy().

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

◆ pets_move()

◆ pets_move_golem()

void pets_move_golem ( object op)

Handles a golem's movement.

Updated this to allow more than the golem 'head' to attack.

Parameters
opgolem to be moved.

Definition at line 519 of file pets.c.

References attack_ob(), obj::contr, DIRX, DIRY, draw_ext_info(), draw_ext_info_format(), FLAG_ALIVE, FLAG_MONSTER, FOR_MAP_FINISH, FOR_MAP_PREPARE, get_map_flags(), pl::golem_count, llevDebug, LOG(), m, move_ob(), MSG_TYPE_SPELL, MSG_TYPE_SPELL_PET, NDI_UNIQUE, object_free_drop_inventory(), object_get_owner(), object_remove(), object_update(), object_was_destroyed, give::op, P_OUT_OF_MAP, QUERY_FLAG, range_golem, pl::ranges, remove_friendly_object(), CFweardisguise::tag, Ice::tmp, UP_OBJ_FACE, reputation::victim, diamondslots::x, and diamondslots::y.

Referenced by legacy_ob_process().

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

◆ pets_should_arena_attack()

int pets_should_arena_attack ( object pet,
object owner,
object target 
)

Determines if checks so pets don't attack players or other pets should be overruled by the arena petmode.

Parameters
petpet considered.
ownerpet's owner.
targetpotential pet target.
Return values
0pet shouldn't attack target.
1target is a suitable victim for the pet.

Definition at line 1086 of file pets.c.

References obj::contr, get_real_owner(), llevError, LOG(), op_on_battleground(), pl::party, pet_arena, pl::petmode, PLAYER, and obj::type.

Referenced by monster_check_enemy(), and pets_get_enemy().

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

◆ pets_summon_golem()

int pets_summon_golem ( object op,
object caster,
int  dir,
object spob 
)

Summons a monster.

Parameters
opwho is summoning.
casterobject casting the spell.
dirdirection to place the monster.
spobspell object casting. At this stage, all spob is really used for is to adjust some values in the monster.
Return values
0failed to summon something.
1summoned correctly something.

Definition at line 651 of file pets.c.

References add_friendly_object(), add_string(), AT_PHYSICAL, obj::attacktype, buf, caster_level(), archt::clone, liv::dam, determine_god(), determine_holy_arch(), draw_ext_info(), draw_ext_info_format(), obj::duration, FABS, find_god(), fix_summon_pet(), FLAG_FRIENDLY, FLAG_MONSTER, FREE_AND_CLEAR_STR, free_string(), freearr_x, freearr_y, GOLEM, llevError, LOG(), MAX, MAX_BUF, liv::maxgrace, MIN, obj::more, MSG_TYPE_SPELL, MSG_TYPE_SPELL_FAILURE, MSG_TYPE_SPELL_PET, obj::name, NDI_UNIQUE, ob_blocked(), object_find_free_spot(), object_free_drop_inventory(), object_get_owner(), object_insert_in_map_at(), object_remove(), object_set_owner(), give::op, obj::other_arch, PETMOVE, PLAYER, QUERY_FLAG, obj::race, range_golem, obj::resist, SET_FLAG, set_spell_skill(), SIZEOFFREE1, obj::slaying, liv::sp, SP_level_dam_adjust(), SP_level_duration_adjust(), SP_level_range_adjust(), SP_level_wc_adjust(), obj::stats, and Ice::tmp.

Referenced by cast_spell().

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

◆ pets_summon_object()

int pets_summon_object ( object op,
object caster,
object spell_ob,
int  dir,
const char *  stringarg 
)

◆ pets_terminate_all()

void pets_terminate_all ( object owner)

Removes all pets someone owns.

Parameters
ownerplayer we wish to remove all pets of.

Definition at line 225 of file pets.c.

References FLAG_REMOVED, free_objectlink(), get_friends_of(), oblnk::next, guildjoin::ob, object_free_drop_inventory(), object_remove(), QUERY_FLAG, and remove_friendly_object().

Referenced by apply_savebed(), command_kill_pets(), key_confirm_quit(), leave(), and save_player().

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