Crossfire Server, Trunk
R21670
|
#include "global.h"
#include <assert.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/uio.h>
#include "loader.h"
#include "object.h"
#include "skills.h"
#include "sproto.h"
#include "stringbuffer.h"
Go to the source code of this file.
Variables | |
object * | active_objects |
static const char *const | flag_names [NUM_FLAGS+1] |
static object * | free_objects |
short | freearr_x [SIZEOFFREE] |
short | freearr_y [SIZEOFFREE] |
int | freedir [SIZEOFFREE] |
int | maxfree [SIZEOFFREE] |
const char *const | move_name [] |
int | nrofallocobjects = STARTMAX |
int | nroffreeobjects = STARTMAX |
static object | objarray [STARTMAX] |
object * | objects |
static const int | reduction_dir [SIZEOFFREE][3] |
Everything related to objects, in their basic form.
Definition in file object.c.
int absdir | ( | int | d | ) |
Computes an absolute direction.
d | direction to convert. |
Definition at line 3493 of file object.c.
Referenced by adjust_dir(), check_spell_knockback(), common_process_projectile(), fire_arch_from_position(), fire_bolt(), flee_player(), forklightning(), get_randomized_dir(), monster_compute_path(), monster_dist_att(), monster_disthit_att(), monster_hitrun_att(), monster_move(), monster_run_att(), monster_wait_att(), monster_wait_att2(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_swarm_spell(), path_to_player(), pets_move(), pets_summon_object(), player_fire_bow(), pray_at_altar(), spinner_type_move_on(), and turn_transport().
|
inlinestatic |
Adds a line to the buffer.
Definition at line 4684 of file object.c.
References stringbuffer_append_string().
Referenced by get_ob_diff().
Searches for any objects with a matching archetype in the inventory of the given object.
at | archetype to search for. |
op | where to search. |
Definition at line 2943 of file object.c.
References obj::arch, obj::below, and obj::inv.
Referenced by cast_heal(), cfapi_object_find_archetype_inside(), cfapi_object_get_property(), change_luck(), create_aura(), drain_specific_stat(), kill_player_not_permadeath(), perceive_self(), poison_living(), remove_depletion(), restore_player(), slow_living_by(), and START_TEST().
int can_see_monsterP | ( | mapstruct * | m, |
int | x, | ||
int | y, | ||
int | dir | ||
) |
Recursive routine to see if we can find a path to a certain point.
Modified to be map tile aware -.MSW
m | map we're on |
x | |
y | origin coordinates |
dir | direction we're going to. Must be less than SIZEOFFREE. |
Definition at line 3601 of file object.c.
References can_see_monsterP(), freearr_x, freearr_y, get_map_flags(), P_BLOCKSVIEW, P_OUT_OF_MAP, and reduction_dir.
Referenced by can_see_monsterP(), do_skill_ident(), monster_find_nearest_living_creature(), and spell_find_dir().
Compares two object lists.
ob1 | |
ob2 | objects to compare. |
Definition at line 170 of file object.c.
References compare_ob_value_lists_one().
Referenced by object_can_merge().
Compares value lists.
wants | what to search |
has | where to search. |
Definition at line 129 of file object.c.
References FALSE, _key_value::key, obj::key_values, _key_value::next, object_get_key_value(), TRUE, and _key_value::value.
Referenced by compare_ob_value_lists().
int dirdiff | ( | int | dir1, |
int | dir2 | ||
) |
Computes a direction difference.
dir1 | |
dir2 | directions to compare. |
Definition at line 3511 of file object.c.
Referenced by monster_cast_spell(), monster_use_range(), monster_use_scroll(), and monster_use_skill().
|
static |
Allocates more objects for the list of unused objects.
It is called from object_new() if the unused list is empty.
If there is not enough memory, fatal() is called.
Definition at line 970 of file object.c.
References CALLOC, fatal(), FLAG_FREED, FLAG_REMOVED, obj::next, nrofallocobjects, nroffreeobjects, OBJ_EXPAND, OUT_OF_MEMORY, obj::prev, and SET_FLAG.
Referenced by object_new().
|
inlinestatic |
Adds a double to the buffer. name must have a space at the end.
Definition at line 4696 of file object.c.
References stringbuffer_append_printf().
Referenced by get_ob_diff().
|
inlinestatic |
Adds a long to the buffer. name must have a space at the end.
Definition at line 4691 of file object.c.
References stringbuffer_append_printf().
Referenced by get_ob_diff(), and save_object_in_sb().
int find_dir_2 | ( | int | x, |
int | y | ||
) |
Computes a direction which you should travel to move of x and y.
x | |
y | delta. |
Definition at line 3456 of file object.c.
Referenced by enter_map(), get_rangevector(), and get_rangevector_from_mapcoord().
Definition at line 2035 of file object.c.
References FLAG_IS_FLOOR, FLAG_NO_PICK, FLAG_OVERLAY_FLOOR, FOR_MAP_FINISH, FOR_MAP_PREPARE, GET_MAP_TOP, INS_ABOVE_FLOOR_ONLY, INS_ON_TOP, obj::map, MOVE_FLY_HIGH, MOVE_FLY_LOW, QUERY_FLAG, obj::x, and obj::y.
Referenced by object_insert_in_map().
void get_ob_diff | ( | StringBuffer * | sb, |
const object * | op, | ||
const object * | op2 | ||
) |
Returns a pointer to a static string which contains all variables which are different in the two given objects.
This function is typically used to dump objects (op2=empty object), or to save objects
sb | buffer that will contain the difference. |
op | what object the different values will be taken from. |
op2 | object's original archetype. |
Definition at line 4713 of file object.c.
References liv::ac, ADD_STRINGLINE_ENTRY(), obj::anim_suffix, obj::animation, animations, obj::attack_movement, obj::attacktype, obj::body_info, body_locations, obj::carrying, liv::Cha, obj::client_type, COMPARE_FLAGS, liv::Con, obj::custom_name, liv::dam, obj::dam_modifier, liv::Dex, obj::direction, obj::duration, obj::duration_modifier, liv::exp, obj::expmul, obj::face, FAST_SAVE_DOUBLE(), FAST_SAVE_LONG(), FLAG_ANIMATE, FLAG_IS_LINKED, flag_names, FMT64, liv::food, obj::gen_sp_armour, GET_ANIM_ID, get_button_value(), get_string_move_type(), obj::glow_radius, liv::grace, liv::hp, liv::Int, obj::invisible, obj::item_power, _key_value::key, obj::key_values, obj::last_eat, obj::last_grace, obj::last_heal, obj::last_sp, obj::level, obj::lore, liv::luck, obj::magic, obj::map_layer, map_layer_name, obj::material, obj::materialname, liv::maxgrace, liv::maxhp, liv::maxsp, obj::move_allow, obj::move_block, obj::move_off, obj::move_on, obj::move_slow, obj::move_slow_penalty, obj::move_status, obj::move_type, obj::msg, Face::name, treasureliststruct::name, obj::name, archt::name, obj::name_pl, _key_value::next, obj::nrof, NROFATTACKS, NUM_BODY_LOCATIONS, NUM_FLAGS, object_get_key_value(), obj::other_arch, obj::path_attuned, obj::path_denied, obj::path_repelled, obj::pick_up, liv::Pow, QUERY_FLAG, obj::race, obj::randomitems, obj::range, obj::range_modifier, obj::resist, resist_save, obj::run_away, obj::skill, obj::slaying, obj::smoothlevel, snprintf, liv::sp, obj::speed, obj::speed_left, obj::state, obj::stats, liv::Str, stringbuffer_append_string(), obj::subtype, obj::title, obj::total_exp, obj::type, _key_value::value, obj::value, liv::wc, obj::weapon_speed, obj::weapon_speed_left, obj::weapontype, obj::weight, obj::weight_limit, obj::will_apply, liv::Wis, obj::x, and obj::y.
Referenced by add_one_item(), command_diff(), object_dump(), save_object_in_sb(), CREArtifactPanel::setItem(), and START_TEST().
void get_search_arr | ( | int * | search_arr | ) |
New function to make monster searching more efficient, and effective! This basically returns a randomized array (in the passed pointer) of the spaces to find monsters. In this way, it won't always look for monsters to the north first. However, the size of the array passed covers all the spaces, so within that size, all the spaces within the 3x3 area will be searched, just not in a predictable order.
search_arr | array that will be initialized. Must contain at least SIZEOFFREE elements. |
Definition at line 3363 of file object.c.
References permute(), SIZEOFFREE, SIZEOFFREE1, and SIZEOFFREE2.
Referenced by monster_find_nearest_living_creature(), pets_get_enemy(), and spell_find_dir().
|
static |
This returns a string of the integer movement type
sb | buffer that will contain the description. Must not be NULL. |
mt | move to describe. |
Definition at line 4640 of file object.c.
References MAX_BUF, MOVE_ALL, move_name, and stringbuffer_append_string().
Referenced by get_ob_diff().
void init_objects | ( | void | ) |
Sets up and initialises the linked list of free and used objects. Allocates a certain chunk of objects and puts them on the free list. Called by init_library();
Definition at line 93 of file object.c.
References FLAG_FREED, FLAG_REMOVED, obj::next, objarray, obj::prev, SET_FLAG, and STARTMAX.
Referenced by cctk_init_std_archetypes(), and init_library().
Searches for any objects with a matching archetype at the given map and coordinates.
m | |
x | |
y | where to search. Must be valid position. |
at | archetype to search for. |
Definition at line 2839 of file object.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, llevError, LOG(), and OUT_OF_REAL_MAP.
Referenced by cfapi_map_find_by_archetype_name(), put_in_icecube(), and town_portal_destroy_existing().
Searches for any objects with a matching type variable at the given map and coordinates.
m | |
x | |
y | where to search. Must be valid position. |
type | type to get. |
Definition at line 2866 of file object.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, and OUT_OF_REAL_MAP.
Referenced by identify(), remove_door(), and remove_locked_door().
Search some close squares in the given map at the given coordinates for live objects.
m | |
x | |
y | origin from which to search. |
exclude | an object that will be ignored. Can be NULL. |
Definition at line 3393 of file object.c.
References FLAG_MONSTER, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, freedir, get_map_flags(), GET_MAP_MOVE_BLOCK, obj::head, maxfree, MOVE_ALL, obj::move_type, P_IS_ALIVE, P_OUT_OF_MAP, PLAYER, QUERY_FLAG, and SIZEOFFREE.
void object_add_weight | ( | object * | op, |
signed long | weight | ||
) |
object_add_weight(object, weight) adds the specified weight to an object, and also updates how much the environment(s) is/are carrying.
Takes container weight reduction into account.
op | object to which we add weight. |
weight | weight to add. |
Definition at line 2567 of file object.c.
References obj::carrying, CONTAINER, obj::env, obj::stats, liv::Str, and obj::type.
Referenced by make_item_from_recipe(), object_decrease_nrof(), object_increase_nrof(), and object_insert_in_ob().
Examines the 2 objects given to it, and returns true if they can be merged together, including inventory.
Note that this function appears a lot longer than the macro it replaces - this is mostly for clarity - a decent compiler should hopefully reduce this to the same efficiency.
Check nrof variable before calling object_can_merge()
Improvements made with merge: Better checking on potion, and also check weight
ob1 | |
ob2 | objects to try to merge. |
Definition at line 199 of file object.c.
References obj::animation, obj::arch, obj::attacktype, obj::client_type, compare_ob_value_lists(), obj::custom_name, FABS, FLAG_ANIMATE, FLAG_APPLIED, FLAG_BEEN_APPLIED, FLAG_IDENTIFIED, obj::flags, obj::inv, obj::item_power, obj::key_values, obj::level, obj::lore, obj::magic, obj::map_layer, obj::materialname, MIN_ACTIVE_SPEED, obj::move_allow, obj::move_block, obj::move_off, obj::move_on, obj::move_slow, obj::move_slow_penalty, obj::move_type, obj::msg, obj::name, obj::nrof, object_can_merge(), QUERY_FLAG, obj::resist, SCROLL, SET_FLAG, obj::skill, obj::slaying, obj::speed, obj::stats, obj::subtype, obj::title, obj::type, obj::value, and obj::weight.
Referenced by cfapi_object_get_property(), give_initial_items(), local_check_loaded_object(), object_can_merge(), object_insert_in_map(), object_insert_in_ob(), object_merge(), and START_TEST().
Finds out if an object can be picked up.
Add a check so we can't pick up invisible objects (0.93.8)
who | who is trying to pick up. Can be a monster or a player. |
item | item we're trying to pick up. |
Definition at line 3646 of file object.c.
References obj::carrying, obj::contr, FLAG_ALIVE, FLAG_NO_PICK, get_weight_limit(), obj::head, obj::invisible, obj::more, PLAYER, QUERY_FLAG, obj::stats, liv::Str, TRANSPORT, obj::type, and obj::weight.
Referenced by cfapi_object_get_property(), check_pick(), command_take(), do_skill_detect_curse(), do_skill_detect_magic(), esrv_move_object(), examine(), monster_can_pick(), and pick_up().
Checks if any objects has a move_type that matches objects that effect this object on this space. Call apply() to process these events.
Any speed-modification due to SLOW_MOVE() of other present objects will affect the speed_left of the object. 4-21-95 added code to check if appropriate skill was readied - this will permit faster movement by the player through this terrain. -b.t.
MSW 2001-07-08: Check all objects on space, not just those below object being inserted. object_insert_in_map may not put new objects on top.
op | object that may trigger something. |
originator | player, monster or other object that caused 'op' to be inserted into 'map'. May be NULL. |
Definition at line 2733 of file object.c.
References obj::above, obj::count, FABS, find_skill_by_number(), FLAG_IS_HILLY, FLAG_IS_WOODED, FLAG_NO_APPLY, FLAG_NO_PICK, FLAG_WIZPASS, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, FOR_OB_AND_BELOW_FINISH, FOR_OB_AND_BELOW_PREPARE, GET_MAP_MOVE_BLOCK, GET_MAP_MOVE_ON, GET_MAP_MOVE_SLOW, GET_MAP_OB, obj::map, obj::move_block, MOVE_FLY_LOW, obj::move_on, obj::move_slow, obj::move_slow_penalty, obj::move_type, MOVE_WALK, ob_move_on(), object_was_destroyed, PLAYER, QUERY_FLAG, SK_CLIMBING, SK_WOODSMAN, obj::speed, obj::speed_left, obj::type, obj::x, and obj::y.
Referenced by change_abil(), and object_insert_in_map().
void object_clear | ( | object * | op | ) |
Frees everything allocated by an object, and also clears all variables and flags to default settings.
op | object to clear |
Definition at line 747 of file object.c.
References obj::above, obj::active_next, obj::active_prev, obj::attacked_by_count, obj::below, blank_face, Settings::casting_time, obj::casting_time, obj::container, obj::contr, obj::env, obj::expmul, obj::face, FLAG_FRIENDLY, FLAG_REMOVED, FREE_AND_CLEAR_STR, free_dialog_information(), obj::head, obj::inv, obj::lore, obj::map, obj::materialname, obj::more, obj::msg, obj::name, obj::name_pl, object_free_key_values(), offsetof, QUERY_FLAG, obj::race, remove_friendly_object(), SET_FLAG, settings, obj::skill, obj::slaying, and obj::title.
Referenced by cfapi_object_clear(), get_archetype_struct(), object_new(), object_reset(), and START_TEST().
void object_clear_owner | ( | object * | op | ) |
Clears the owner of specified object.
op | object we want to clear the owner of. Can be NULL. |
Definition at line 587 of file object.c.
References obj::owner, and obj::ownercount.
Referenced by do_mood_floor(), fix_stopped_arrow(), object_get_owner(), object_set_owner(), START_TEST(), and stop_projectile().
Copy object first frees everything allocated by the second object, and then copies the contents of the first object into the second object, allocating what needs to be allocated. Basically, any data that is malloc'd needs to be re-malloc/copied. Otherwise, if the first object is freed, the pointers in the new object will point at garbage.
src_ob | object that we copy.from |
dest_ob | object that we copy to. |
Definition at line 824 of file object.c.
References add_refcount(), obj::anim_suffix, obj::arch, obj::artifact, CLEAR_FLAG, obj::custom_name, FLAG_DIALOG_PARSED, FLAG_FREED, FLAG_REMOVED, FREE_AND_CLEAR, free_dialog_information(), free_string(), _key_value::key, obj::key_values, obj::lore, obj::materialname, obj::msg, obj::name, obj::name_pl, _key_value::next, object_free_key_values(), object_update_speed(), offsetof, QUERY_FLAG, obj::race, RANDOM, archt::reference_count, SET_FLAG, obj::skill, obj::slaying, obj::speed, obj::speed_left, SPELL_TAG_SIZE, obj::spell_tags, obj::title, and _key_value::value.
Referenced by add_abilities(), apply_race_and_class(), cast_create_food(), cfapi_object_clone(), change_book(), command_create(), do_learn_spell(), explosion(), forklightning(), infect_object(), key_change_class(), local_check_loaded_object(), magic_wall(), make_throw_ob(), move_bolt(), move_cone(), object_copy_with_inv(), object_create_clone(), pay_from_container(), place_special_exit(), polymorph_item(), polymorph_living(), put_decor(), put_doors(), sell_item(), setup(), START_TEST(), write_note(), write_rune(), and write_scroll().
Set the owner to clone's current owner and set the skill and experience objects to clone's objects (typically those objects that where the owner's current skill and experience objects at the time when clone's owner was set - not the owner's current skill and experience objects).
Use this function if player created an object (e.g. fire bullet, swarm spell), and this object creates further objects whose kills should be accounted for the player's original skill, even if player has changed skills meanwhile.
op | object to update. |
clone | object from which to get the owner. |
Definition at line 657 of file object.c.
References object_get_owner(), object_set_owner(), PLAYER, and obj::type.
Referenced by animate_bomb(), explode_bullet(), fire_arch_from_position(), poison_living(), and START_TEST().
Copy an object with an inventory, duplicate the inv too.
src_ob | object to copy. |
dest_ob | where to copy. |
Definition at line 952 of file object.c.
References FOR_INV_FINISH, FOR_INV_PREPARE, object_copy(), object_copy_with_inv(), object_insert_in_ob(), and object_new().
Referenced by arch_to_object(), do_harvest(), include_map_in_map(), object_copy_with_inv(), place_chest(), place_fountain_with_specials(), and place_monsters().
int object_count_active | ( | void | ) |
Objects statistics.
Definition at line 1527 of file object.c.
References obj::active_next, and active_objects.
Referenced by malloc_info(), and START_TEST().
int object_count_free | ( | void | ) |
Objects statistics.
Definition at line 1495 of file object.c.
References free_objects, and obj::next.
Referenced by malloc_info(), and START_TEST().
int object_count_used | ( | void | ) |
Object statistics.
Definition at line 1511 of file object.c.
References obj::next, and objects.
Referenced by malloc_info(), and START_TEST().
Create clone from object to another.
asrc | object to clone. |
Definition at line 3688 of file object.c.
References FOR_INV_FINISH, FOR_INV_PREPARE, obj::head, HEAD, obj::more, object_copy(), object_create_clone(), object_insert_in_ob(), and object_new().
Referenced by cfapi_object_clone(), convert_item(), generate_monster_inv(), move_creator(), object_create_clone(), and object_split().
Decreases a specified number from the amount of an object. If the amount reaches 0, the object is subsequently removed and freed.
This function will send an update to client if op is in a player inventory.
op | object to decrease. |
i | number to remove. |
Definition at line 2410 of file object.c.
References obj::container, obj::env, esrv_update_item(), first_player, fix_object(), FLAG_REMOVED, FOR_MAP_FINISH, FOR_MAP_PREPARE, obj::map, pl::next, obj::nrof, pl::ob, object_add_weight(), object_free_drop_inventory(), object_get_player_container(), object_remove(), object_sub_weight(), QUERY_FLAG, pl::socket, UPD_NROF, UPD_WEIGHT, socket_struct::update_look, obj::weight, obj::x, and obj::y.
Referenced by cfapi_object_set_property(), check_altar_sacrifice(), convert_item(), eat_item(), object_split(), operate_altar(), save_throw_object(), spell_consume_items(), and START_TEST().
Return the square of the distance between the two given objects.
ob1 | |
ob2 | objects we want to compute the distance of. |
Definition at line 3440 of file object.c.
References obj::x, and obj::y.
Referenced by cfapi_object_distance().
void object_dump | ( | const object * | op, |
StringBuffer * | sb | ||
) |
Dumps an object.
op | object to dump. Can be NULL. |
sb | buffer that will contain object information. Must not be NULL. |
Definition at line 415 of file object.c.
References obj::arch, obj::artifact, archt::clone, obj::count, empty_archetype, obj::env, get_ob_diff(), obj::head, obj::inv, obj::more, obj::name, archt::name, object_get_owner_const(), stringbuffer_append_printf(), and stringbuffer_append_string().
Referenced by animate_object(), command_dump(), do_dump(), dump_arch(), gate_type_process(), object_dump_all(), object_free(), object_insert_in_map(), object_insert_in_ob(), object_remove(), process_events(), CREArchetypePanel::setItem(), and START_TEST().
void object_dump_all | ( | void | ) |
Dumps all objects to console.
This is really verbose...Can be triggered by the dumpallobjects command while in DM mode.
All objects are dumped to stderr (or alternate logfile, if in server-mode)
Definition at line 468 of file object.c.
References obj::count, llevDebug, LOG(), obj::next, object_dump(), stringbuffer_finish(), and stringbuffer_new().
Referenced by command_dumpallobjects(), and START_TEST().
Find object in inventory by archetype name.
who | where to search. |
name | what to search. |
Definition at line 4031 of file object.c.
References obj::arch, obj::below, obj::inv, and archt::name.
Referenced by cfapi_object_find_by_arch_name(), and dragon_ability_gain().
Find object in inventory by flag.
who | where to search. |
flag | what to search. |
Definition at line 3985 of file object.c.
References obj::below, obj::inv, and QUERY_FLAG.
Referenced by use_alchemy().
Find applied object in inventory by flag.
who | where to search. |
flag | what to search. |
Definition at line 4008 of file object.c.
References obj::below, FLAG_APPLIED, obj::inv, and QUERY_FLAG.
Referenced by save_life().
Finds an object in inventory name.
who | the object to search |
name | name to search for |
Definition at line 3735 of file object.c.
References add_string(), obj::below, free_string(), obj::inv, and obj::name.
Referenced by apply_changes_to_player(), cfapi_object_find_by_name(), is_old_wraith_pl(), is_wraith_pl(), and move_detector().
object* object_find_by_name_global | ( | const char * | str | ) |
Finds an object by name.
Used only by the patch command, but not all that useful. Enables features like "patch name-of-other-player food 999"
str | name to search for. Must not be allocated by add_string(). |
Definition at line 511 of file object.c.
References add_string(), free_string(), obj::name, and obj::next.
Referenced by command_possess(), find_object_both(), and START_TEST().
Find object in inventory.
who | where to search. |
tag | what to search. |
Definition at line 3839 of file object.c.
References obj::below, obj::count, and obj::inv.
Referenced by command_cast_spell().
Returns the object which has the count-variable equal to the argument.
i | tag. |
Definition at line 491 of file object.c.
References obj::count, and obj::next.
Referenced by cftimer_process_event(), command_diff(), command_insert_into(), command_inventory(), command_possess(), command_stack_list(), dm_stack_peek(), find_object_both(), get_dm_object(), and START_TEST().
Find object in inventory.
who | where to search. |
type | what to search. |
Definition at line 3759 of file object.c.
References obj::below, obj::inv, and obj::type.
Referenced by fire_bow(), has_ability(), and transport_type_apply().
Find object in inventory.
who | where to search. |
type1 | what to search. |
type2 | what to search. |
Definition at line 3816 of file object.c.
References obj::below, obj::inv, and obj::type.
Referenced by dispel_rune(), and hit_player().
Find object in inventory by type and archetype name.
who | where to search. |
type | what to search. |
name | what to search. |
Definition at line 4056 of file object.c.
References obj::arch, obj::below, obj::inv, archt::name, and obj::type.
Referenced by check_login(), command_resistances(), dragon_eat_flesh(), dragon_focus_type_apply(), dragon_level_gain(), and perceive_self().
Find object in inventory by type and name.
who | where to search. |
type | what to search. |
name | what to search |
Definition at line 3887 of file object.c.
References obj::below, obj::inv, obj::name, and obj::type.
Referenced by check_probe(), check_spell_known(), describe_monster(), do_symptoms(), examine_monster(), find_symptom(), grant_immunity(), infect_object(), and old_describe_monster().
Find object in inventory by type and race.
who | where to search. |
type | what to search. |
race | what to search |
Definition at line 3912 of file object.c.
References obj::below, obj::inv, obj::race, and obj::type.
Referenced by monster_check_apply().
Find object in inventory by type and skill.
who | where to search. |
type | what to search. |
skill | what to search |
Definition at line 3962 of file object.c.
References obj::below, obj::inv, obj::skill, and obj::type.
Referenced by do_skill().
Find object in inventory by type and slaying.
who | where to search. |
type | what to search. |
slaying | what to search |
Definition at line 3937 of file object.c.
References obj::below, obj::inv, obj::slaying, and obj::type.
Referenced by attempt_recipe(), enter_exit(), find_key(), move_detector(), move_marker(), and op_on_battleground().
Find applied object in inventory.
who | where to search. |
type | what to search. |
Definition at line 3862 of file object.c.
References obj::below, FLAG_APPLIED, obj::inv, QUERY_FLAG, and obj::type.
Referenced by apply_can_apply_object(), attack_hth(), cast_create_missile(), do_skill_attack(), god_enchants_weapon(), monster_check_good_armour(), and monster_check_good_weapon().
Find object in inventory.
who | where to search. |
type | |
subtype | what to search. |
Definition at line 4080 of file object.c.
References obj::below, obj::inv, obj::subtype, and obj::type.
Referenced by become_follower(), cast_word_of_recall(), cftimer_create(), deep_swamp_type_process(), determine_god(), do_hidden_move(), god_examines_priest(), and monster_can_pick().
object* object_find_by_type_without_flags | ( | const object * | who, |
int | type, | ||
int * | flags, | ||
int | num_flags | ||
) |
Find an object in inventory that does not have any of the provided flags set.
who | where to search. |
type | what to search. |
flags | Array of integers corresponding to the set of flags that cannot have any set on the found item. |
num_flags | The size of the array flags above |
Definition at line 3783 of file object.c.
References obj::below, obj::inv, and QUERY_FLAG.
Referenced by find_key().
object_find_first_free_spot(archetype, mapstruct, x, y) works like object_find_free_spot(), but it will search max number of squares. It will return the first available spot, not a random choice. Changed 0.93.2: Have it return -1 if there is no free spot available.
ob | object to insert. |
m | |
x | |
y | where to insert the object. |
Definition at line 3320 of file object.c.
References freearr_x, freearr_y, ob_blocked(), and SIZEOFFREE.
Referenced by cfapi_object_teleport(), find_enclosed_spot(), keyplace(), place_chest(), place_exits(), place_fountain_with_specials(), place_monsters(), place_special_exit(), put_a_monster(), and transfer_ob().
object_find_free_spot(object, map, x, y, start, stop) will search for a spot at the given map and coordinates which will be able to contain the given object.
It returns a random choice among the alternatives found.
ob | object to insert. |
m | |
x | |
y | where to insert the object. |
start | |
stop | first (inclusive) and last (exclusive) positions, in the freearr_ arrays, to search. |
Definition at line 3280 of file object.c.
References AB_NO_PASS, freearr_x, freearr_y, maxfree, ob_blocked(), RANDOM, and SIZEOFFREE.
Referenced by animate_weapon(), cfapi_object_insert(), command_summon(), command_teleport(), do_harvest(), enter_map(), gate_type_process(), object_insert_to_free_spot_or_free(), pets_follow_owner(), pets_summon_golem(), pets_summon_object(), polymorph_living(), process_players1(), shop_mat_type_move_on(), teleport(), and transfer_ob().
int object_find_multi_free_spot_around | ( | const object * | ob, |
const object * | gen, | ||
int16_t * | hx, | ||
int16_t * | hy | ||
) |
Sets hx and hy to the coords to insert a possibly multi-tile ob at, around gen.
ob | object to insert. Must not be NULL. | |
gen | where to insert. Must not be NULL. | |
[out] | hx | |
[out] | hy | coordinates at which insertion is possible. |
Definition at line 3017 of file object.c.
References HEAD, obj::map, MAP_HEIGHT, MAP_WIDTH, ob_blocked(), object_get_multi_size(), RANDOM, obj::x, and obj::y.
Referenced by change_object().
int object_find_multi_free_spot_within_radius | ( | const object * | ob, |
const object * | gen, | ||
int * | hx, | ||
int * | hy | ||
) |
Sets hx and hy to the coords to insert a possibly multi-tile ob at, within radius of generator, which is stored in key_value "generator_radius". Radius defaults to 1.
ob | object to insert. Must not be NULL. | |
gen | where to insert. Must not be NULL. | |
[out] | hx | |
[out] | hy | coordinates at which insertion is possible. |
Definition at line 3133 of file object.c.
References get_map_flags(), HEAD, obj::map, ob_blocked(), object_get_multi_size(), object_get_value(), P_OUT_OF_MAP, RANDOM, obj::x, and obj::y.
Referenced by generate_monster_arch(), and generate_monster_inv().
void object_fix_multipart | ( | object * | tmp | ) |
Ensures specified object has its more parts correctly inserted in map.
Extracted from common/map.c:link_multipart_objects
tmp | object we want to fix. Must be on a map. |
Definition at line 4431 of file object.c.
References add_string(), obj::arch, arch_to_object(), free_string(), obj::head, INS_ABOVE_FLOOR_ONLY, INS_NO_MERGE, INS_NO_WALK_ON, llevError, LOG(), obj::map, obj::more, archt::more, obj::name, object_insert_in_map(), obj::title, obj::x, and obj::y.
Referenced by change_object(), generate_monster_inv(), and link_multipart_objects().
void object_free | ( | object * | ob, |
int | flags | ||
) |
Frees everything allocated by an object, removes it from the list of used objects, and puts it on the list of free objects. The IS_FREED() flag is set in the object.
The object must have been removed by object_remove() first for this function to succeed.
ob | object to free. Will become invalid when function returns. |
flags | the flags; see FREE_OBJ_xxx constants. |
Definition at line 1336 of file object.c.
References obj::arch, obj::artifact, obj::count, EVENT_DESTROY, execute_event(), FLAG_ALIVE, FLAG_FREED, FLAG_FRIENDLY, FLAG_IS_A_TEMPLATE, FLAG_NO_DROP, FLAG_REMOVED, FLAG_STARTEQUIP, FOR_INV_FINISH, FOR_INV_PREPARE, FREE_AND_CLEAR, FREE_AND_CLEAR_STR, free_arch(), free_dialog_information(), FREE_OBJ_DROP_ABOVE_FLOOR, FREE_OBJ_FREE_INVENTORY, FREE_OBJ_NO_DESTROY_CALLBACK, free_objects, GET_MAP_MOVE_BLOCK, mapdef::in_memory, INS_ABOVE_FLOOR_ONLY, obj::inv, llevDebug, llevError, llevMonster, LOG(), obj::lore, obj::map, MAP_IN_MEMORY, obj::materialname, obj::more, MOVE_ALL, obj::msg, obj::name, obj::name_pl, obj::next, nroffreeobjects, object_dump(), object_free(), object_free_drop_inventory(), object_free_key_values(), object_insert_in_map_at(), object_insert_to_free_spot_or_free(), object_remove(), object_update_speed(), obj::prev, QUERY_FLAG, obj::race, RANDOM, archt::reference_count, remove_friendly_object(), RUNE, SCRIPT_FIX_NOTHING, SET_FLAG, SIZEOFFREE, obj::skill, obj::slaying, obj::speed, obj::spell_tags, stringbuffer_finish(), stringbuffer_new(), obj::title, TRAP, obj::x, and obj::y.
Referenced by add_one_item(), alchemy_object(), apply_auto(), apply_by_living(), apply_race_and_class(), CREArtifactPanel::artifactChanged(), cast_create_missile(), cast_create_town_portal(), cfapi_object_insert(), command_create(), command_learn_spell_or_prayer(), command_reset(), command_summon(), command_teleport(), counterspell(), do_execute_event(), do_forget_spell(), do_goto(), do_harvest(), enter_exit(), enter_player_savebed(), CRECombatSimulator::fight(), free_no_drop(), god_gives_present(), knowledge_alchemy_face(), monsterFight(), object_free(), object_free_drop_inventory(), object_insert_in_map(), object_insert_in_ob(), object_merge(), object_split(), CRETreasurePanel::onGenerate(), peacemaker_type_process(), player_arrest(), polymorph_item(), polymorph_living(), polymorph_melt(), process_events(), process_object(), recharge(), save_object_in_sb(), scroll_failure(), START_TEST(), stop_projectile(), town_portal_destroy_existing(), town_portal_find_force(), and write_scroll().
void object_free_all_data | ( | void | ) |
Destroys all allocated objects.
Definition at line 531 of file object.c.
References FLAG_FREED, llevDebug, LOG(), obj::name, obj::next, nrofallocobjects, nroffreeobjects, QUERY_FLAG, and STARTMAX.
Referenced by cleanup().
void object_free_drop_inventory | ( | object * | ob | ) |
Frees everything allocated by an object, removes it from the list of used objects, and puts it on the list of free objects. The IS_FREED() flag is set in the object. The object must have been removed by object_remove() first for this function to succeed.
Inventory will be dropped on the ground if in a map, else freed too.
ob | object to free. Will become invalid when function returns. |
Definition at line 1316 of file object.c.
References object_free().
Referenced by add_abilities(), adjust_sign_msg(), alchemy_failure_effect(), apply_auto(), apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), arrow_type_process(), artifact_describe(), become_follower(), blindness_type_process(), cast_cause_disease(), cast_dust(), cast_raise_dead_spell(), cast_smite_spell(), cfapi_object_delete(), cfapi_object_insert(), change_book(), change_object(), check_bullet(), clean_object(), command_cast_spell(), command_free(), command_kill_pets(), common_process_projectile(), convert_item(), cure_disease(), decay_objects(), delete_unique_items(), destroy_object(), dispel_rune(), do_turn(), drop(), drop_object(), eat_special_food(), enter_map(), execute_word_of_recall(), explode_bullet(), explosion(), fire_arch_from_position(), fire_bolt(), fire_bow(), fix_generated_item(), fix_stopped_arrow(), fix_walls(), follower_remove_given_items(), free_all_objects(), free_player(), generate_monster(), generate_treasure(), give_initial_items(), god_intervention(), hit_player(), hit_with_arrow(), insert_objects(), key_change_class(), kill_object(), kill_player_permadeath(), load_objects(), locate_recipe_artifact(), lock_and_hide_doors(), loot_object(), monster_move(), monster_move_no_enemy(), move_aura(), move_bolt(), move_bullet(), move_cone(), move_creator(), move_disease(), move_duplicator(), move_marker(), move_missile(), move_player_mover(), move_swarm_spell(), move_symptom(), move_teleporter(), nuke_map_region(), object_decrease_nrof(), object_free(), object_insert_to_free_spot_or_free(), object_merge_spell(), object_replace_insert_in_map(), CREMainWindow::onReportSpellDamage(), pay_from_container(), pets_move(), pets_move_golem(), pets_remove_all(), pets_summon_golem(), pets_terminate_all(), pick_up_object(), place_chest(), place_exits(), place_fountain_with_specials(), poisoning_type_process(), prayer_failure(), print_monsters(), receive_play_again(), remove_adjacent_doors(), remove_contents(), remove_depletion(), remove_door(), remove_force(), remove_locked_door(), remove_marking_runes(), remove_monsters(), remove_special_prayers(), remove_symptoms(), remove_unpaid_objects(), restore_player(), retrofit_joined_wall(), rune_attack(), save_life(), save_throw_object(), second_arch_pass(), spell_effect_type_move_on(), spell_failure(), spring_trap(), START_TEST(), stop_item(), stop_projectile(), tailor_god_spell(), tear_down_wall(), and thrown_object_type_process().
void object_free_key_values | ( | object * | op | ) |
Zero the key_values on op, decrementing the shared-string refcounts and freeing the links.
op | object to clear. |
Definition at line 718 of file object.c.
References FREE_AND_CLEAR_STR, _key_value::key, obj::key_values, _key_value::next, and _key_value::value.
Referenced by free_arch(), free_artifact(), object_clear(), object_copy(), and object_free().
Utility function.
op | object we want the environment of. Can't be NULL. |
Definition at line 360 of file object.c.
References obj::env.
Referenced by animate_bomb(), cfapi_object_set_property(), do_execute_event(), explode_bullet(), spring_trap(), and START_TEST().
Search for a field by key.
ob | object where search |
key | key to search. Must be a passed in shared string - otherwise, this won't do the desired thing. |
Definition at line 4100 of file object.c.
References _key_value::key, obj::key_values, and _key_value::next.
Referenced by compare_ob_value_lists_one(), get_ob_diff(), object_set_value_s(), and process_object().
void object_get_multi_size | ( | const object * | ob, |
int * | sx, | ||
int * | sy, | ||
int * | hx, | ||
int * | hy | ||
) |
Computes the size of a multitile object.
ob | object we compute the size of. | |
[out] | sx | |
[out] | sy | will contain the coords of the bottom right tail relative to the head. Must not be NULL. |
[out] | hx | |
[out] | hy | will contain the coords of the head tile relative to the top left tile. Can be NULL. |
Definition at line 4490 of file object.c.
References obj::arch, archt::clone, HEAD, archt::more, obj::x, and obj::y.
Referenced by object_find_multi_free_spot_around(), object_find_multi_free_spot_within_radius(), process_map(), and update_transport_block().
Returns the object which this object marks as being the owner.
A id-scheme is used to avoid pointing to objects which have been freed and are now reused. If this is detected, the owner is set to NULL, and NULL is returned.
op | item to search owner of. |
Definition at line 568 of file object.c.
References obj::count, FLAG_FREED, FLAG_REMOVED, object_clear_owner(), obj::owner, obj::ownercount, and QUERY_FLAG.
Referenced by adj_attackroll(), attack_message(), attack_ob_simple(), blind_living(), cast_spell(), cfapi_object_get_property(), change_object(), command_kill_pets(), command_showpets(), common_process_projectile(), common_projectile_move_on(), cone_drop(), counterspell(), do_mood_floor(), do_symptoms(), explode_bullet(), find_target_for_friendly_spell(), find_traps(), fire_arch_from_position(), fix_summon_pet(), friendly_fire(), get_real_owner(), hit_player(), hit_with_one_attacktype(), infect_object(), kill_object(), monster_cast_spell(), monster_check_enemy(), monster_move(), monster_use_bow(), monster_use_range(), monster_use_scroll(), monster_use_skill(), move_ball_spell(), move_missile(), move_player_attack(), move_swarm_spell(), object_copy_owner(), object_set_owner(), peacemaker_type_process(), pets_get_enemy(), pets_move(), pets_move_golem(), pets_remove_all(), pets_summon_golem(), pets_summon_object(), pets_terminate_all(), poison_living(), polymorph_living(), push_ob(), remove_trap(), save_object(), save_objects(), scare_creature(), START_TEST(), steal(), tailor_god_spell(), trap_disarm(), and use_oratory().
Returns the object which this object marks as being the owner, constant version. Mostly written for object_dump, which takes a const object.
op | item to search owner of. |
Definition at line 394 of file object.c.
References obj::count, FLAG_FREED, FLAG_REMOVED, llevError, LOG(), obj::owner, obj::ownercount, and QUERY_FLAG.
Referenced by object_dump().
Finds the player carrying an object.
op | item for which we want the carrier (player). |
Definition at line 377 of file object.c.
References obj::env, PLAYER, and obj::type.
Referenced by cfapi_object_set_property(), drain_wand_charge(), identify(), lamp_type_apply(), lighter_type_apply(), object_decrease_nrof(), object_increase_nrof(), object_insert_in_ob(), object_remove(), pick_up_object(), remove_force(), send_changed_object(), and START_TEST().
const char* object_get_value | ( | const object * | op, |
const char *const | key | ||
) |
Get an extra value by key.
op | object we're considering |
key | key of which to retrieve the value. Doesn't need to be a shared string. |
Definition at line 4125 of file object.c.
References find_string(), _key_value::key, obj::key_values, _key_value::next, and _key_value::value.
Referenced by add_abilities(), append_spell(), apply_check_personalized_blessings(), apply_check_race_restrictions(), apply_handle_yield(), cfapi_object_get_key(), change_book(), check_spell_expiry(), command_cast_spell(), create_player_cmd(), do_exit_map(), do_harvest(), esrv_add_spells(), fix_player(), follower_remove_given_items(), generate_monster(), generate_monster_arch(), generate_monster_inv(), god_enchants_weapon(), kill_object(), knowledge_read(), matches_sacrifice(), monster_move_randomly(), mood_change(), object_find_multi_free_spot_within_radius(), object_give_identified_properties(), CREMainWindow::onReportDuplicate(), price_base(), reportSummon(), send_arch_info(), set_object_face_main(), set_object_face_other(), CREFacePanel::setItem(), CREAnimationPanel::setItem(), shop_price_buy(), shop_price_sell(), singing(), SP_level_wc_adjust(), spell_consume_items(), transport_type_apply(), turn_transport(), and use_oratory().
Increase the count of an object.
This function will send an update to client if needed.
op | object to increase. |
i | number to add. |
Definition at line 2497 of file object.c.
References obj::container, obj::env, esrv_update_item(), first_player, FLAG_REMOVED, FOR_MAP_FINISH, FOR_MAP_PREPARE, obj::map, pl::next, obj::nrof, pl::ob, object_add_weight(), object_get_player_container(), object_sub_weight(), QUERY_FLAG, pl::socket, UPD_NROF, socket_struct::update_look, obj::weight, obj::x, and obj::y.
Referenced by object_insert_in_ob(), and object_merge().
This function inserts the object in the two-way linked list which represents what is on a map.
It will update player count if the op is a player.
Player ground window will be updated if needed.
op | object to insert. Must be removed. Its coordinates must be valid for the map. |
m | map to insert into. Must not be NULL. |
originator | player, monster or other object that caused 'op' to be inserted into 'm'. May be NULL. |
flag | bitmask about special things to do (or not do) when this function is called. See the object.h file for the INS_xxx values. Passing 0 for flag gives proper default values, so flag really only needs to be set if special handling is needed. |
Definition at line 2099 of file object.c.
References obj::above, obj::below, CLEAR_FLAG, obj::contr, pl::do_los, find_insert_pos(), FLAG_ALIVE, FLAG_APPLIED, FLAG_FREED, FLAG_INV_LOCKED, FLAG_NO_STEAL, FLAG_REMOVED, FOR_MAP_FINISH, FOR_MAP_PREPARE, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, FREE_OBJ_FREE_INVENTORY, FREE_OBJ_NO_DESTROY_CALLBACK, get_map_from_coord(), GET_MAP_OB, obj::glow_radius, obj::head, pl::hidden, INS_BELOW_ORIGINATOR, INS_MAP_LOAD, INS_NO_MERGE, INS_NO_WALK_ON, LAMP, llevError, LOG(), obj::map, MAP_DARKNESS, obj::more, obj::nrof, object_can_merge(), object_check_move_on(), object_dump(), object_free(), object_insert_in_map(), object_merge_spell(), object_remove(), object_update(), obj::other_arch, out_of_map(), OUT_OF_REAL_MAP, obj::ox, obj::oy, PLAYER, mapdef::players, QUERY_FLAG, obj::range, SET_MAP_OB, SET_MAP_TOP, pl::socket, obj::speed, obj::speed_left, SPELL_EFFECT, stringbuffer_finish(), stringbuffer_new(), pl::transport, obj::type, UP_OBJ_INSERT, update_all_los(), socket_struct::update_look, obj::x, and obj::y.
Referenced by change_object(), fix_stopped_item(), generate_monster_arch(), object_fix_multipart(), object_insert_in_map(), object_insert_in_map_at(), pick_up(), and START_TEST().
object* object_insert_in_map_at | ( | object * | op, |
mapstruct * | m, | ||
object * | originator, | ||
int | flag, | ||
int | x, | ||
int | y | ||
) |
Same as object_insert_in_map() except it handle separate coordinates and do a clean job preparing multi-part monsters.
op | object to insert. |
m | map to insert into. |
originator | what caused op to be inserted. |
flag | Combination of INS_xxx values. |
x | |
y | coordinates to insert at. |
Definition at line 1838 of file object.c.
References obj::arch, archt::clone, HEAD, obj::map, obj::more, object_insert_in_map(), obj::x, and obj::y.
Referenced by alchemy_failure_effect(), animate_bomb(), animate_weapon(), apply_auto(), apply_builder_floor(), apply_builder_item(), apply_builder_wall(), apply_builder_window(), apply_container(), apply_handle_yield(), cast_bless(), cast_cause_disease(), cast_change_ability(), cast_cone(), cast_consecrate(), cast_create_obj(), cast_create_town_portal(), cast_curse(), cast_destruction(), cast_detection(), cast_heal(), cast_light(), cast_magic_storm(), cast_polymorph(), cast_raise_dead_spell(), cast_smite_spell(), cfapi_object_insert(), cfapi_object_teleport(), cfapi_object_transfer(), charge_mana_effect(), command_create(), command_reset(), common_process_projectile(), cone_drop(), convert_item(), converter_type_move_on(), create_bomb(), dimension_door(), do_harvest(), do_throw(), drop_object(), enter_map(), explode_bullet(), explosion(), CRECombatSimulator::fight(), fire_arch_from_position(), fire_bolt(), fire_bow(), fire_swarm(), fix_walls(), forklightning(), gate_type_process(), generate_monster_inv(), hit_with_arrow(), include_map_in_map(), key_change_class(), keyplace(), kill_object(), kill_player(), kill_player_not_permadeath(), kill_player_permadeath(), load_objects(), lock_and_hide_doors(), loot_object(), magic_wall(), make_map_floor(), make_map_walls(), monsterFight(), mood_change(), move_aura(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_creator(), move_missile(), move_ob(), move_symptom(), object_free(), object_insert_to_free_spot_or_free(), object_replace_insert_in_map(), pets_follow_owner(), pets_summon_golem(), pets_summon_object(), pick_up_object(), place_alchemy_objects(), place_chest(), place_exits(), place_fountain_with_specials(), place_monsters(), place_special_exit(), polymorph_item(), polymorph_living(), potion_type_apply(), process_players1(), push_ob(), put_a_monster(), put_decor(), put_doors(), put_floor(), put_in_icecube(), put_object_in_sack(), put_treasure(), recharge(), remove_door(), remove_force(), remove_locked_door(), remove_unpaid_objects(), retrofit_joined_wall(), roll_ob(), save_throw_object(), setup(), shop_mat_type_move_on(), spell_effect(), spell_failure(), spring_trap(), START_TEST(), stop_jump(), stop_projectile(), surround_by_doors(), teardown(), teleport(), transfer_ob(), transport_type_apply(), trap_show(), treasure_type_apply(), turn_one_transport(), write_mark(), and write_rune().
This function inserts the object op in the linked list inside the object environment.
It will send to client where is a player.
op | object to insert. Must be removed and not NULL. Must not be multipart. May become invalid after return, so use return value of the function. |
where | object to insert into. Must not be NULL. Should be the head part. |
Definition at line 2591 of file object.c.
References obj::above, obj::below, obj::carrying, CLEAR_FLAG, CONTAINER, obj::contr, obj::count, obj::env, esrv_send_item(), fix_object(), FLAG_APPLIED, FLAG_NO_FIX_PLAYER