Crossfire Server, Branch 1.12
R12190
|
Everything related to objects, in their basic form. More...
#include <stdlib.h>
#include <string.h>
#include <global.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <object.h>
#include <skills.h>
#include <loader.h>
#include <sproto.h>
#include "stringbuffer.h"
Go to the source code of this file.
Functions | |
int | absdir (int d) |
Computes an absolute direction. | |
void | add_weight (object *op, signed long weight) |
add_weight(object, weight) adds the specified weight to an object, and also updates how much the environment(s) is/are carrying. | |
int | can_merge (object *ob1, object *ob2) |
Examines the 2 objects given to it, and returns true if they can be merged together, including inventory. | |
int | can_pick (const object *who, const object *item) |
Finds out if an object can be picked up. | |
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. | |
int | check_move_on (object *op, object *originator) |
Checks if any objects has a move_type that matches objects that effect this object on this space. | |
void | clear_object (object *op) |
Frees everything allocated by an object, and also clears all variables and flags to default settings. | |
void | clear_owner (object *op) |
Clears the owner of specified object. | |
static int | compare_ob_value_lists (const object *ob1, const object *ob2) |
Compares two object lists. | |
static int | compare_ob_value_lists_one (const object *wants, const object *has) |
Compares value lists. | |
void | copy_object (object *op2, object *op) |
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. | |
void | copy_object_with_inv (object *src_ob, object *dest_ob) |
copy an object with an inventory... | |
void | copy_owner (object *op, object *clone) |
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). | |
int | count_active (void) |
Objects statistics. | |
int | count_free (void) |
Objects statistics. | |
int | count_used (void) |
Object statistics. | |
object * | decrease_ob_nr (object *op, uint32 i) |
Decreases a specified number from the amount of an object. | |
int | dirdiff (int dir1, int dir2) |
Computes a direction difference. | |
int | distance (const object *ob1, const object *ob2) |
Return the square of the distance between the two given objects. | |
void | dump_all_objects (void) |
Dumps all objects to console. | |
void | dump_object (object *op, StringBuffer *sb) |
Dumps an object. | |
static void | expand_objects (void) |
Allocates more objects for the list of unused objects. | |
int | find_dir (mapstruct *m, int x, int y, object *exclude) |
Search some close squares in the given map at the given coordinates for live objects. | |
int | find_dir_2 (int x, int y) |
Computes a direction which you should travel to move of x and y. | |
int | find_first_free_spot (const object *ob, mapstruct *m, int x, int y) |
find_first_free_spot(archetype, mapstruct, x, y) works like find_free_spot(), but it will search max number of squares. | |
int | find_free_spot (const object *ob, mapstruct *m, int x, int y, int start, int stop) |
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. | |
int | find_multi_free_spot_around (object *ob, object *gen, int *hx, int *hy) |
Sets hx and hy to the coords to insert a possibly multi-tile ob at, around gen. | |
int | find_multi_free_spot_within_radius (object *ob, 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". | |
object * | find_obj_by_type_subtype (const object *who, int type, int subtype) |
Find object in inventory. | |
object * | find_object (tag_t i) |
Returns the object which has the count-variable equal to the argument. | |
object * | find_object_name (const char *str) |
Finds an object by name. | |
void | fix_multipart_object (object *tmp) |
Ensures specified object has its more parts correctly inserted in map. | |
void | flag_inv (object *op, int flag) |
Activate recursively a flag on an object's inventory. | |
void | free_all_object_data (void) |
Destroys all allocated objects. | |
void | free_key_values (object *op) |
Zero the key_values on op, decrementing the shared-string refcounts and freeing the links. | |
void | free_object (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. | |
void | free_object2 (object *ob, int free_inventory) |
Frees everything allocated by an object, removes it from the list of used objects, and puts it on the list of free objects. | |
void | get_multi_size (object *ob, int *sx, int *sy, int *hx, int *hy) |
Computes the size of a multitile object. | |
key_value * | get_ob_key_link (const object *ob, const char *key) |
Search for a field by key. | |
const char * | get_ob_key_value (const object *op, const char *const key) |
Get an extra value by key. | |
object * | get_object (void) |
Grabs an object from the list of unused objects, makes sure it is initialised, and returns it. | |
object * | get_owner (object *op) |
Returns the object which this object marks as being the owner. | |
object * | get_player_container (object *op) |
Finds the player carrying an object. | |
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. | |
object * | get_split_ob (object *orig_ob, uint32 nr, char *err, size_t size) |
get_split_ob(ob,nr) splits up ob into two parts. | |
static void | increase_ob_nr (object *op, uint32 i) |
Increase the count of an object. | |
object * | insert_ob_in_map (object *op, mapstruct *m, object *originator, int flag) |
This function inserts the object in the two-way linked list which represents what is on a map. | |
object * | insert_ob_in_map_at (object *op, mapstruct *m, object *originator, int flag, int x, int y) |
Same as insert_ob_in_map() except it handle separate coordinates and do a clean job preparing multi-part monsters. | |
object * | insert_ob_in_ob (object *op, object *where) |
This function inserts the object op in the linked list inside the object environment. | |
int | item_matched_string (object *pl, object *op, const char *name) |
This is a subset of the parse_id command. | |
object * | merge_ob (object *op, object *top) |
This function goes through all objects below and including top, and merges op to the first matching object. | |
void | merge_spell (object *op, sint16 x, sint16 y) |
This sees if there are any objects on the space that can merge with op. | |
object * | object_create_clone (object *asrc) |
Create clone from object to another. | |
object * | object_get_env_recursive (object *op) |
Utility function. | |
static void | permute (int *arr, int begin, int end) |
Randomly permutes an array. | |
object * | present (uint8 type, mapstruct *m, int x, int y) |
Searches for any objects with a matching type variable at the given map and coordinates. | |
object * | present_arch (const archetype *at, mapstruct *m, int x, int y) |
Searches for any objects with a matching archetype at the given map and coordinates. | |
object * | present_arch_in_ob (const archetype *at, const object *op) |
Searches for any objects with a matching archetype in the inventory of the given object. | |
object * | present_in_ob (uint8 type, const object *op) |
Searches for any objects with a matching type variable in the inventory of the given object. | |
object * | present_in_ob_by_name (int type, const char *str, const object *op) |
Searches for any objects with a matching type & name variable in the inventory of the given object. | |
void | remove_from_active_list (object *op) |
This function removes object 'op' from the list of active objects. | |
void | remove_ob (object *op) |
This function removes the object op from the linked list of objects which it is currently tied to. | |
void | replace_insert_ob_in_map (const char *arch_string, object *op) |
This function inserts an object of a specified archetype in the map, but if it finds objects of its own type, it'll remove them first. | |
void | reset_object (object *op) |
Sets to 0 vital variables in an object. | |
void | set_cheat (object *op) |
set_cheat(object) sets the cheat flag (WAS_WIZ) in the object and in all it's inventory (recursively). | |
int | set_ob_key_value (object *op, const char *key, const char *value, int add_key) |
Updates the key in op to value. | |
static int | set_ob_key_value_s (object *op, const char *canonical_key, const char *value, int add_key) |
Updates or sets a key value. | |
void | set_owner (object *op, object *owner) |
Sets the owner and sets the skill and exp pointers to owner's current skill and experience objects. | |
void | sub_weight (object *op, signed long weight) |
Recursively (outwards) subtracts a number from the weight of an object (and what is carried by it's environment(s)). | |
signed long | sum_weight (object *op) |
sum_weight() is a recursive function which calculates the weight an object is carrying. | |
void | unflag_inv (object *op, int flag) |
Desactivate recursively a flag on an object inventory. | |
void | update_ob_speed (object *op) |
Updates the speed of an object. | |
void | update_object (object *op, int action) |
update_object() updates the array which represents the map. | |
void | update_turn_face (object *op) |
If an object with the IS_TURNABLE() flag needs to be turned due to the closest player being on the other side, this function can be called to update the face variable, _and_ how it looks on the map. | |
Variables | |
object * | active_objects |
List of active objects that need to be processed. | |
object * | free_objects |
Pointer to the list of unused objects. | |
short | freearr_x [SIZEOFFREE] |
X offset when searching around a spot. | |
short | freearr_y [SIZEOFFREE] |
Y offset when searching around a spot. | |
int | freedir [SIZEOFFREE] |
Direction we're pointing on this spot. | |
int | maxfree [SIZEOFFREE] |
Number of spots around a location, including that location (except for 0) | |
int | nrofallocobjects = STARTMAX |
How many OBs allocated (free + used) | |
int | nroffreeobjects = STARTMAX |
How many OBs allocated and free (free) | |
object | objarray [STARTMAX] |
All objects, allocated this way at first. | |
object * | objects |
Pointer to the list of used objects. | |
static const int | reduction_dir [SIZEOFFREE][3] |
Basically, this is a table of directions, and what directions one could go to go back to us. |
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 3417 of file object.c.
Referenced by check_spell_knockback(), common_process_projectile(), compute_path(), dist_att(), disthit_att(), fire_bolt(), fire_bullet(), flee_player(), forklightning(), hitrun_att(), monster_cast_spell(), monster_use_bow(), monster_use_range(), monster_use_scroll(), monster_use_skill(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_monster(), move_player(), move_swarm_spell(), path_to_player(), pet_move(), player_fire_bow(), pray_at_altar(), run_att(), spinner_type_move_on(), summon_object(), turn_transport(), wait_att(), and wait_att2().
void add_weight | ( | object * | op, |
signed long | weight | ||
) |
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 2486 of file object.c.
References CONTAINER.
Referenced by increase_ob_nr(), insert_ob_in_ob(), and make_item_from_recipe().
int can_merge | ( | object * | ob1, |
object * | ob2 | ||
) |
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 can_merge()
Improvements made with merge: Better checking on potion, and also check weight
ob1 | |
ob2 | objects to try to merge. |
Definition at line 178 of file object.c.
References can_merge(), compare_ob_value_lists(), FABS, FLAG_ANIMATE, FLAG_APPLIED, FLAG_BEEN_APPLIED, FLAG_IDENTIFIED, MIN_ACTIVE_SPEED, QUERY_FLAG, SCROLL, and SET_FLAG.
Referenced by can_merge(), cfapi_object_get_property(), insert_ob_in_map(), insert_ob_in_ob(), local_check_loaded_object(), merge_ob(), and START_TEST().
int can_pick | ( | const object * | who, |
const object * | item | ||
) |
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 3569 of file object.c.
References FLAG_ALIVE, FLAG_NO_PICK, PLAYER, and QUERY_FLAG.
Referenced by cfapi_object_get_property(), check_pick(), command_take(), do_skill_detect_curse(), do_skill_detect_magic(), esrv_move_object(), monster_can_pick(), and pick_up().
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 3524 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(), find_nearest_living_creature(), and spell_find_dir().
int check_move_on | ( | object * | op, |
object * | originator | ||
) |
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. insert_ob_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 2651 of file object.c.
References FABS, find_skill_by_number(), FLAG_IS_HILLY, FLAG_IS_WOODED, FLAG_NO_APPLY, FLAG_NO_PICK, FLAG_WIZPASS, GET_MAP_MOVE_BLOCK, GET_MAP_MOVE_ON, GET_MAP_MOVE_SLOW, GET_MAP_OB, MOVE_FLY_LOW, MOVE_WALK, ob_move_on(), PLAYER, QUERY_FLAG, SK_CLIMBING, and SK_WOODSMAN.
Referenced by change_abil(), and insert_ob_in_map().
void clear_object | ( | 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 688 of file object.c.
References blank_face, Settings::casting_time, FLAG_FRIENDLY, FLAG_REMOVED, FREE_AND_CLEAR, FREE_AND_CLEAR_STR, free_dialog_information(), free_key_values(), offsetof, QUERY_FLAG, remove_friendly_object(), SET_FLAG, and settings.
Referenced by cfapi_object_clear(), first_arch_pass(), get_archetype_struct(), get_object(), reset_object(), and START_TEST().
void 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 544 of file object.c.
Referenced by set_owner(), START_TEST(), and stop_projectile().
static int compare_ob_value_lists | ( | const object * | ob1, |
const object * | ob2 | ||
) | [static] |
Compares two object lists.
ob1 | |
ob2 | objects to compare. |
Definition at line 149 of file object.c.
References compare_ob_value_lists_one().
Referenced by can_merge().
static int compare_ob_value_lists_one | ( | const object * | wants, |
const object * | has | ||
) | [static] |
Compares value lists.
wants | what to search |
has | where to search. |
Definition at line 108 of file object.c.
References FALSE, get_ob_key_link(), and TRUE.
Referenced by compare_ob_value_lists().
void copy_object | ( | object * | op2, |
object * | op | ||
) |
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.
op2 | object that we copy.from |
op | object that we copy to. |
Definition at line 758 of file object.c.
References add_refcount(), CLEAR_FLAG, FLAG_DIALOG_PARSED, FLAG_FREED, FLAG_REMOVED, FREE_AND_CLEAR, free_dialog_information(), free_key_values(), free_string(), NROFATTACKS, offsetof, QUERY_FLAG, SET_FLAG, and update_ob_speed().
Referenced by add_abilities(), cast_create_food(), cfapi_object_clone(), change_book(), command_create(), copy_object_with_inv(), do_learn_spell(), explosion(), first_arch_pass(), forklightning(), infect_object(), key_change_class(), local_check_loaded_object(), magic_wall(), make_throw_ob(), move_bolt(), move_cone(), object_create_clone(), pay_from_container(), place_alchemy_objects(), place_chest(), place_fountain_with_specials(), place_special_exit(), polymorph_item(), polymorph_living(), put_decor(), put_doors(), sell_item(), setup(), START_TEST(), write_note(), write_rune(), and write_scroll().
void copy_object_with_inv | ( | object * | src_ob, |
object * | dest_ob | ||
) |
copy an object with an inventory...
i.e., duplicate the inv too.
src_ob | object to copy. |
dest_ob | where to copy. |
Definition at line 862 of file object.c.
References copy_object(), get_object(), and insert_ob_in_ob().
Referenced by arch_to_object(), do_harvest(), include_map_in_map(), and place_monsters().
void copy_owner | ( | object * | op, |
object * | clone | ||
) |
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 614 of file object.c.
References get_owner(), PLAYER, and set_owner().
Referenced by animate_bomb(), explode_bullet(), fire_arch_from_position(), poison_living(), and START_TEST().
int count_active | ( | void | ) |
Objects statistics.
Definition at line 1465 of file object.c.
References active_objects.
Referenced by malloc_info(), and START_TEST().
int count_free | ( | void | ) |
Objects statistics.
Definition at line 1433 of file object.c.
References free_objects.
Referenced by malloc_info(), and START_TEST().
int count_used | ( | void | ) |
Object statistics.
Definition at line 1449 of file object.c.
References objects.
Referenced by malloc_info(), and START_TEST().
object* decrease_ob_nr | ( | object * | op, |
uint32 | i | ||
) |
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 2345 of file object.c.
References esrv_update_item(), first_player, FLAG_REMOVED, free_object(), GET_MAP_OB, get_player_container(), pl::next, pl::ob, QUERY_FLAG, remove_ob(), sub_weight(), and UPD_NROF.
Referenced by cfapi_object_set_property(), check_altar_sacrifice(), convert_item(), eat_item(), get_split_ob(), operate_altar(), save_throw_object(), and START_TEST().
int dirdiff | ( | int | dir1, |
int | dir2 | ||
) |
Computes a direction difference.
dir1 | |
dir2 | directions to compare. |
Definition at line 3434 of file object.c.
Referenced by monster_cast_spell(), monster_use_range(), monster_use_scroll(), and monster_use_skill().
int distance | ( | const object * | ob1, |
const object * | ob2 | ||
) |
Return the square of the distance between the two given objects.
ob1 | |
ob2 | objects we want to compute the distance of. |
Definition at line 3364 of file object.c.
Referenced by cfapi_object_distance(), keyplace(), and play_sound_map().
void dump_all_objects | ( | 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 416 of file object.c.
References dump_object(), llevDebug, LOG(), objects, stringbuffer_finish(), and stringbuffer_new().
Referenced by command_dumpallobjects(), and START_TEST().
void dump_object | ( | 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 372 of file object.c.
References empty_archetype, get_ob_diff(), stringbuffer_append_printf(), and stringbuffer_append_string().
Referenced by animate_object(), command_dump(), command_dumpbelow(), dump_all_objects(), dump_arch(), free_object2(), gate_type_process(), insert_ob_in_map(), insert_ob_in_ob(), process_events(), remove_ob(), and START_TEST().
static void expand_objects | ( | void | ) | [static] |
Allocates more objects for the list of unused objects.
It is called from get_object() if the unused list is empty.
If there is not enough memory, fatal() is called.
Definition at line 880 of file object.c.
References CALLOC, fatal(), FLAG_FREED, FLAG_REMOVED, free_objects, nrofallocobjects, nroffreeobjects, OBJ_EXPAND, OUT_OF_MEMORY, and SET_FLAG.
Referenced by get_object().
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 3313 of file object.c.
References FLAG_MONSTER, freearr_x, freearr_y, freedir, get_map_flags(), GET_MAP_MOVE_BLOCK, GET_MAP_OB, maxfree, MOVE_ALL, P_IS_ALIVE, P_OUT_OF_MAP, PLAYER, QUERY_FLAG, and SIZEOFFREE.
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 3380 of file object.c.
Referenced by enter_map(), get_rangevector(), get_rangevector_from_mapcoord(), monster_use_bow(), monster_use_range(), monster_use_skill(), and pet_move().
int find_first_free_spot | ( | const object * | ob, |
mapstruct * | m, | ||
int | x, | ||
int | y | ||
) |
find_first_free_spot(archetype, mapstruct, x, y) works like 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 3240 of file object.c.
References freearr_x, freearr_y, ob_blocked(), and SIZEOFFREE.
Referenced by cfapi_object_teleport(), change_object(), find_enclosed_spot(), hit_player(), keyplace(), place_chest(), place_exits(), place_fountain_with_specials(), place_monsters(), place_special_exit(), put_a_monster(), and transfer_ob().
int find_free_spot | ( | const object * | ob, |
mapstruct * | m, | ||
int | x, | ||
int | y, | ||
int | start, | ||
int | stop | ||
) |
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 3200 of file object.c.
References AB_NO_PASS, freearr_x, freearr_y, maxfree, ob_blocked(), and SIZEOFFREE.
Referenced by animate_weapon(), command_summon(), command_teleport(), do_harvest(), enter_map(), follow_owner(), free_object2(), gate_type_process(), polymorph_living(), process_players1(), shop_mat_type_move_on(), summon_golem(), summon_object(), teleport(), and transfer_ob().
int find_multi_free_spot_around | ( | object * | ob, |
object * | gen, | ||
int * | hx, | ||
int * | 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 2935 of file object.c.
References get_multi_size(), MAP_HEIGHT, MAP_WIDTH, and ob_blocked().
int find_multi_free_spot_within_radius | ( | object * | ob, |
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 3052 of file object.c.
References get_map_flags(), get_multi_size(), get_ob_key_value(), ob_blocked(), P_OUT_OF_MAP, and strtol().
Referenced by generate_monster_arch(), and generate_monster_inv().
object* find_obj_by_type_subtype | ( | const object * | who, |
int | type, | ||
int | subtype | ||
) |
Find object in inventory.
who | where to search. |
type | |
subtype | what to search. |
Definition at line 3656 of file object.c.
Referenced by cast_word_of_recall(), cfapi_object_find(), cftimer_create(), deep_swamp_type_process(), and do_hidden_move().
object* find_object | ( | tag_t | i | ) |
Returns the object which has the count-variable equal to the argument.
i | tag. |
Definition at line 439 of file object.c.
References objects.
Referenced by cfapi_object_find(), 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().
object* find_object_name | ( | 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 459 of file object.c.
References add_string(), free_string(), and objects.
Referenced by cfapi_object_find(), command_possess(), find_object_both(), and START_TEST().
void fix_multipart_object | ( | 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 4007 of file object.c.
References add_string(), arch_to_object(), free_string(), insert_ob_in_map(), llevError, and LOG().
Referenced by generate_monster_inv(), and link_multipart_objects().
void flag_inv | ( | object * | op, |
int | flag | ||
) |
Activate recursively a flag on an object's inventory.
op | object to recurse. Can have an empty inventory. |
flag | flag to set. |
Definition at line 2876 of file object.c.
References flag_inv(), and SET_FLAG.
Referenced by flag_inv(), local_check_loaded_object(), and set_cheat().
void free_all_object_data | ( | void | ) |
Destroys all allocated objects.
Definition at line 479 of file object.c.
References FLAG_FREED, free_objects, llevDebug, LOG(), nrofallocobjects, nroffreeobjects, objects, QUERY_FLAG, and STARTMAX.
Referenced by cleanup().
void 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 659 of file object.c.
References FREE_AND_CLEAR_STR.
Referenced by clear_object(), copy_object(), free_arch(), free_artifact(), and free_object2().
void free_object | ( | 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 remove_ob() 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 1238 of file object.c.
References free_object2().
Referenced by add_abilities(), adjust_sign_msg(), alchemy(), alchemy_failure_effect(), alchemy_object(), apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), arrow_type_process(), artifact_msg(), auto_apply(), become_follower(), blindness_type_process(), cast_cause_disease(), cast_create_missile(), cast_create_town_portal(), cast_dust(), cast_raise_dead_spell(), cast_smite_spell(), cfapi_object_delete(), cfapi_object_insert(), change_book(), change_object(), check_bullet(), check_special_prayers(), clean_object(), command_arrest(), command_cast_spell(), command_create(), command_free(), command_goto(), command_kill_pets(), command_learn_spell_or_prayer(), command_reset(), command_summon(), command_teleport(), common_process_projectile(), convert_item(), counterspell(), cure_disease(), decay_objects(), decrease_ob_nr(), delete_unique_items(), destroy_object(), dispel_rune(), do_forget_spell(), do_turn(), drop(), drop_object(), eat_special_food(), enter_exit(), enter_map(), enter_player_savebed(), execute_event(), execute_word_of_recall(), explode_bullet(), explosion(), fire_arch_from_position(), fire_bolt(), fire_bow(), fire_bullet(), first_arch_pass(), fix_generated_item(), fix_stopped_arrow(), fix_walls(), follower_remove_given_items(), free_all_objects(), free_object2(), free_player(), generate_treasure(), give_initial_items(), god_intervention(), hit_player(), hit_with_arrow(), insert_ob_in_map(), insert_ob_in_ob(), insert_objects(), key_change_class(), kill_object(), kill_player(), load_objects(), locate_recipe_artifact(), lock_and_hide_doors(), loot_object(), merge_ob(), merge_spell(), monster_move_no_enemy(), move_aura(), move_bolt(), move_bullet(), move_cone(), move_creator(), move_disease(), move_duplicator(), move_golem(), move_marker(), move_missile(), move_monster(), move_player_mover(), move_swarm_spell(), move_symptom(), move_teleporter(), nuke_map_region(), pay_from_container(), pet_move(), pick_up_object(), place_chest(), place_exits(), place_fountain_with_specials(), player_apply(), poisoning_type_process(), polymorph_item(), polymorph_living(), polymorph_melt(), potion_type_apply(), prayer_failure(), print_monsters(), process_events(), process_object(), receive_play_again(), recharge(), remove_adjacent_doors(), remove_all_pets(), remove_contents(), remove_door(), remove_force(), remove_locked_door(), remove_marking_runes(), remove_monsters(), remove_symptoms(), remove_unpaid_objects(), replace_insert_ob_in_map(), retrofit_joined_wall(), rune_attack(), save_life(), save_throw_object(), scroll_failure(), second_arch_pass(), spell_effect_type_move_on(), spell_failure(), spring_trap(), START_TEST(), stop_item(), stop_projectile(), summon_golem(), tailor_god_spell(), tear_down_wall(), terminate_all_pets(), thrown_object_type_process(), and write_scroll().
void free_object2 | ( | object * | ob, |
int | free_inventory | ||
) |
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 remove_ob() first for this function to succeed.
ob | object to free. Will become invalid when function returns. |
free_inventory | if set, free inventory as well. Else drop items in inventory to the ground. |
Definition at line 1258 of file object.c.
References dump_object(), EVENT_DESTROY, execute_event(), find_free_spot(), FLAG_ALIVE, FLAG_FREED, FLAG_FRIENDLY, FLAG_IS_A_TEMPLATE, FLAG_NO_DROP, FLAG_REMOVED, FLAG_STARTEQUIP, FREE_AND_CLEAR, FREE_AND_CLEAR_STR, free_arch(), free_dialog_information(), free_key_values(), free_object(), free_object2(), free_objects, freearr_x, freearr_y, GET_MAP_MOVE_BLOCK, insert_ob_in_map(), llevDebug, llevError, llevMonster, LOG(), MAP_IN_MEMORY, MOVE_ALL, nroffreeobjects, objects, QUERY_FLAG, remove_friendly_object(), remove_ob(), RUNE, SCRIPT_FIX_NOTHING, SET_FLAG, SIZEOFFREE, stringbuffer_finish(), stringbuffer_new(), TRAP, and update_ob_speed().
Referenced by free_no_drop(), free_object(), free_object2(), and god_gives_present().
void get_multi_size | ( | 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 4066 of file object.c.
Referenced by find_multi_free_spot_around(), find_multi_free_spot_within_radius(), process_map(), and update_transport_block().
key_value* get_ob_key_link | ( | const object * | ob, |
const char * | key | ||
) |
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 3676 of file object.c.
Referenced by compare_ob_value_lists_one(), and set_ob_key_value_s().
const char* get_ob_key_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 3701 of file object.c.
References find_string().
Referenced by apply_special(), cfapi_object_get_key(), check_race_restrictions(), check_spell_expiry(), command_use(), do_harvest(), find_multi_free_spot_within_radius(), follower_remove_given_items(), generate_monster(), generate_monster_arch(), generate_monster_inv(), god_enchants_weapon(), handle_apply_yield(), kill_object(), query_cost(), set_object_face_main(), set_object_face_other(), transport_type_apply(), and turn_transport().
object* get_object | ( | void | ) |
Grabs an object from the list of unused objects, makes sure it is initialised, and returns it.
If there are no free objects, expand_objects() is called to get more.
Definition at line 921 of file object.c.
References clear_object(), expand_objects(), FLAG_FREED, FLAG_REMOVED, free_objects, llevError, LOG(), nroffreeobjects, ob_count, objects, QUERY_FLAG, and SET_FLAG.
Referenced by add_abilities(), arch_to_object(), artifact_msg(), cast_create_food(), cfapi_object_clone(), cfapi_object_create(), command_goto(), command_reset(), command_summon(), command_teleport(), copy_object_with_inv(), create_singularity(), do_harvest(), do_learn_spell(), enter_player_savebed(), explosion(), first_arch_pass(), forklightning(), generate_treasure(), get_jail_exit(), infect_object(), key_change_class(), load_objects(), magic_wall(), make_throw_ob(), move_bolt(), move_cone(), object_create_clone(), pay_from_container(), place_alchemy_objects(), place_fountain_with_specials(), place_special_exit(), polymorph_item(), sell_item(), setup(), START_TEST(), write_note(), write_rune(), and write_scroll().
object* get_owner | ( | object * | op | ) |
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.
Changed 2004-02-12 - if the player is setting at the play again prompt, he is removed, and we don't want to treat him as an owner of anything, so check removed flag. I don't expect that this should break anything - once an object is removed, it is basically dead anyways.
op | item to search owner of. |
Definition at line 524 of file object.c.
References FLAG_FREED, FLAG_REMOVED, llevError, LOG(), and QUERY_FLAG.
Referenced by adj_attackroll(), attack_message(), attack_ob_simple(), blind_living(), cast_spell(), cfapi_object_get_property(), command_kill_pets(), command_showpets(), copy_owner(), explode_bullet(), find_target_for_friendly_spell(), fire_arch_from_position(), fix_summon_pet(), friendly_fire(), get_pet_enemy(), get_real_owner(), hit_player(), hit_with_one_attacktype(), infect_object(), kill_object(), monster_cast_spell(), monster_use_bow(), monster_use_range(), monster_use_scroll(), monster_use_skill(), move_ball_spell(), move_golem(), move_missile(), move_monster(), move_player_attack(), move_swarm_spell(), peacemaker_type_process(), pet_move(), poison_living(), polymorph_living(), push_ob(), remove_all_pets(), scare_creature(), START_TEST(), steal(), summon_golem(), summon_object(), tailor_god_spell(), terminate_all_pets(), and use_oratory().
object* get_player_container | ( | object * | op | ) |
Finds the player carrying an object.
op | item for which we want the carrier (player). |
Definition at line 356 of file object.c.
References PLAYER.
Referenced by cfapi_object_find(), cfapi_object_set_property(), decrease_ob_nr(), drain_wand_charge(), identify(), increase_ob_nr(), insert_ob_in_ob(), lamp_type_apply(), lighter_type_apply(), pick_up_object(), remove_force(), remove_ob(), send_changed_object(), 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 3283 of file object.c.
References permute(), SIZEOFFREE, SIZEOFFREE1, and SIZEOFFREE2.
Referenced by find_nearest_living_creature(), and get_pet_enemy().
object* get_split_ob | ( | object * | orig_ob, |
uint32 | nr, | ||
char * | err, | ||
size_t | size | ||
) |
get_split_ob(ob,nr) splits up ob into two parts.
The part which is returned contains nr objects, and the remaining parts contains the rest (or is removed and freed if that number is 0). On failure, NULL is returned, and the reason LOG()ed.
This function will send an update to the client if the remaining object is in a player inventory.
orig_ob | object from which to split. |
nr | number of elements to split. |
err | buffer that will contain failure reason if NULL is returned. Can be NULL. |
size | err's size |
Definition at line 2313 of file object.c.
References decrease_ob_nr(), llevDebug, LOG(), object_create_clone(), and snprintf().
Referenced by animate_weapon(), apply_container(), apply_special(), cfapi_object_split(), do_throw(), drop_object(), fire_bow(), improve_armour(), lamp_type_apply(), lighter_type_apply(), loot_object(), pick_up_object(), put_object_in_sack(), and START_TEST().
static void increase_ob_nr | ( | object * | op, |
uint32 | i | ||
) | [static] |
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 2423 of file object.c.
References add_weight(), esrv_update_item(), first_player, FLAG_REMOVED, GET_MAP_OB, get_player_container(), pl::next, pl::ob, QUERY_FLAG, and UPD_NROF.
Referenced by insert_ob_in_ob(), and merge_ob().
object* insert_ob_in_map | ( | object * | op, |
mapstruct * | m, | ||
object * | originator, | ||
int | flag | ||
) |
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 1992 of file object.c.
References can_merge(), check_move_on(), CLEAR_FLAG, dump_object(), FLAG_ALIVE, FLAG_APPLIED, FLAG_FREED, FLAG_INV_LOCKED, FLAG_IS_FLOOR, FLAG_NO_PICK, FLAG_NO_STEAL, FLAG_OVERLAY_FLOOR, FLAG_REMOVED, free_object(), get_map_from_coord(), GET_MAP_OB, GET_MAP_TOP, insert_ob_in_map(), LAMP, llevError, LOG(), MAP_DARKNESS, merge_spell(), MOVE_FLY_HIGH, MOVE_FLY_LOW, out_of_map(), OUT_OF_REAL_MAP, PLAYER, QUERY_FLAG, remove_ob(), SET_MAP_OB, SET_MAP_TOP, SPELL_EFFECT, stringbuffer_finish(), stringbuffer_new(), update_all_los(), and update_object().
Referenced by alchemy_failure_effect(), animate_bomb(), animate_weapon(), auto_apply(), cast_cause_disease(), cast_cone(), cast_consecrate(), cast_create_obj(), cast_create_town_portal(), cast_destruction(), cast_detection(), cast_light(), cast_magic_storm(), cast_polymorph(), cast_raise_dead_spell(), cast_smite_spell(), cfapi_object_insert(), change_object(), charge_mana_effect(), command_create(), command_reset(), common_process_projectile(), cone_drop(), converter_type_move_on(), create_bomb(), dimension_door(), do_harvest(), do_throw(), drop_object(), enter_map(), explode_bullet(), explosion(), fire_arch_from_position(), fire_bolt(), fire_bow(), fire_bullet(), fire_swarm(), fix_multipart_object(), fix_stopped_item(), follow_owner(), forklightning(), free_object2(), gate_type_process(), generate_monster_arch(), handle_apply_yield(), hit_player(), hit_with_arrow(), insert_multisquare_ob_in_map(), insert_ob_in_map(), insert_ob_in_map_at(), key_change_class(), keyplace(), kill_object(), kill_player(), load_objects(), lock_and_hide_doors(), loot_object(), magic_wall(), make_map_floor(), make_map_walls(), mood_change(), move_aura(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_missile(), move_ob(), move_symptom(), pick_up(), place_alchemy_objects(), place_chest(), place_exits(), place_fountain_with_specials(), place_special_exit(), polymorph_item(), polymorph_living(), potion_type_apply(), push_ob(), put_a_monster(), put_decor(), put_doors(), put_floor(), put_treasure(), recharge(), remove_door(), remove_force(), remove_locked_door(), remove_unpaid_objects(), replace_insert_ob_in_map(), 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(), summon_golem(), summon_object(), surround_by_doors(), teleport(), transfer_ob(), transport_type_apply(), trap_show(), treasure_type_apply(), turn_one_transport(), write_mark(), and write_rune().
object* insert_ob_in_map_at | ( | object * | op, |
mapstruct * | m, | ||
object * | originator, | ||
int | flag, | ||
int | x, | ||
int | y | ||
) |
Same as insert_ob_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 1761 of file object.c.
References insert_ob_in_map().
Referenced by apply_builder_floor(), apply_builder_item(), apply_builder_wall(), apply_builder_window(), apply_container(), cfapi_object_insert(), cfapi_object_teleport(), cfapi_object_transfer(), command_create(), convert_item(), fix_walls(), generate_monster_inv(), move_creator(), process_players1(), put_object_in_sack(), START_TEST(), and turn_one_transport().
object* insert_ob_in_ob | ( | object * | op, |
object * | where | ||
) |
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 2510 of file object.c.
References add_weight(), can_merge(), CLEAR_FLAG, CONTAINER, dump_object(), esrv_send_item(), fix_object(), FLAG_APPLIED, FLAG_NO_FIX_PLAYER, FLAG_OBJ_ORIGINAL, FLAG_REMOVED, free_object(), get_player_container(), increase_ob_nr(), llevDebug, llevError, LOG(), MAP_DARKNESS, P_NEED_UPDATE, QUERY_FLAG, SET_FLAG, SET_MAP_FLAGS, SKILL, stringbuffer_finish(), stringbuffer_new(), update_all_los(), and update_position().
Referenced by add_abilities(), alchemy_failure_effect(), animate_weapon(), apply_container(), apply_special(), attempt_recipe(), auto_apply(), blind_living(), cast_bless(), cast_change_ability(), cast_create_town_portal(), cast_curse(), cast_word_of_recall(), cfapi_object_insert(), change_luck(), change_object(), command_create(), command_insert_into(), command_use(), confuse_living(), copy_object_with_inv(), create_aura(), do_harvest(), do_learn_spell(), do_symptoms(), do_throw(), do_turn(), dragon_ability_gain(), drain_specific_stat(), eat_special_food(), find_or_create_connection_for_map(), fix_container(), fix_generated_item(), give_skill_by_name(), god_gives_present(), grant_immunity(), handle_apply_yield(), hit_with_arrow(), improve_armour(), infect_object(), insert_objects(), keyplace(), kill_player(), lamp_type_apply(), lighter_type_apply(), local_check_loaded_object(), magic_wall(), make_object_glow(), make_throw_ob(), monster_check_pickup(), move_aura(), move_marker(), object_create_clone(), pick_up_object(), place_chest(), poison_living(), potion_type_apply(), put_object_in_sack(), put_treasure(), remove_force(), save_throw_object(), second_arch_pass(), sell_item(), slow_living(), START_TEST(), stick_arrow(), swap_random_stats(), transmute_item_to_flower(), transport_type_apply(), write_note(), write_rune(), and write_scroll().
int item_matched_string | ( | object * | pl, |
object * | op, | ||
const char * | name | ||
) |
This is a subset of the parse_id command.
Basically, name can be a string seperated lists of things to match, with certain keywords. pl is the player (only needed to set count properly) op is the item we are trying to match. Calling function takes care of what action might need to be done and if it is valid (pickup, drop, etc.) Return NONZERO if we have a match. A higher value means a better match. 0 means no match.
Brief outline of the procedure: We take apart the name variable into the individual components. cases for 'all' and unpaid are pretty obvious. Next, we check for a count (either specified in name, or in the player object.) If count is 1, make a quick check on the name. IF count is >1, we need to make plural name. Return if match. Last, make a check on the full name.
Details on values output (highest is output): match type return value --------------------------------------- nothing 0 'all' 1 'unpaid' 2 'cursed' 2 'unlocked' 2 partial custom name 3 op->name with count >1 4 op->name with count <2 6 op->name_pl with count >1 6 inside base name 12 inside short name 12 begin of base name 14 custom name 15 base name 16 short name 18 full name 20 (note, count is extracted from begin of name parameter or from pl->contr->count, name has priority)
pl | object we're searching an item for. Must not be NULL. |
op | object we're considering. Must not be NULL. |
name | string we're searching. |
Definition at line 3901 of file object.c.
References FLAG_CURSED, FLAG_DAMNED, FLAG_INV_LOCKED, FLAG_KNOWN_CURSED, FLAG_UNPAID, HUGE_BUF, MAX_BUF, PLAYER, query_base_name(), QUERY_FLAG, query_name(), query_short_name(), strcasecmp(), and strncasecmp().
Referenced by check_pick(), command_drop(), command_take(), find_best_apply_object_match(), START_TEST(), and write_rune().
object* merge_ob | ( | object * | op, |
object * | top | ||
) |
This function goes through all objects below and including top, and merges op to the first matching object.
Will correctly send updated objects to client if needed.
op | object to merge. |
top | from which item to merge. If NULL, it is calculated. |
Definition at line 1724 of file object.c.
References can_merge(), free_object(), increase_ob_nr(), and remove_ob().
Referenced by cfapi_object_merge(), command_lock_item(), command_rename_item(), fix_stopped_item(), get_payment(), hit_with_arrow(), lock_item_cmd(), stop_projectile(), and unapply_special().
void merge_spell | ( | object * | op, |
sint16 | x, | ||
sint16 | y | ||
) |
This sees if there are any objects on the space that can merge with op.
Note that op does not need to actually be inserted on the map (when called from insert_ob_in_map, it won't be), but op->map should be set correctly.
Note that even if we find a match on the space, we keep progressing looking for more. This is because op->range is set to 0 in explosion, so what may not have been mergable now is.
op | object to try to merge into. |
x | |
y | coordinates to look at for merging. |
Definition at line 1792 of file object.c.
References FREE_AND_CLEAR, free_object(), GET_MAP_OB, llevError, LOG(), MAX, remove_ob(), Statistics::spell_hash_full, Statistics::spell_merges, and statistics.
Referenced by explosion(), and insert_ob_in_map().
object* object_create_clone | ( | object * | asrc | ) |
Create clone from object to another.
asrc | object to clone. |
Definition at line 3608 of file object.c.
References copy_object(), get_object(), insert_ob_in_ob(), and object_create_clone().
Referenced by cfapi_object_clone(), convert_item(), generate_monster_inv(), get_split_ob(), move_creator(), and object_create_clone().
object* object_get_env_recursive | ( | object * | op | ) |
Utility function.
op | object we want the environment of. Can't be NULL. |
Definition at line 339 of file object.c.
Referenced by animate_bomb(), cfapi_object_set_property(), execute_event(), explode_bullet(), spring_trap(), and START_TEST().
static void permute | ( | int * | arr, |
int | begin, | ||
int | end | ||
) | [static] |
Randomly permutes an array.
arr | array to permute. |
begin | |
end | first and last (exclusive) indexes to permute. |
Definition at line 3259 of file object.c.
Referenced by get_search_arr().
Searches for any objects with a matching type variable at the given map and coordinates.
type | type to get. |
m | |
x | |
y | where to search. Must be valid position. |
Definition at line 2782 of file object.c.
References GET_MAP_OB, llevError, LOG(), and out_of_map().
Referenced by identify(), remove_door(), and remove_locked_door().
object* present_arch | ( | const archetype * | at, |
mapstruct * | m, | ||
int | x, | ||
int | y | ||
) |
Searches for any objects with a matching archetype at the given map and coordinates.
at | archetype to search for. |
m | |
x | |
y | where to search. Must be valid position. |
Definition at line 2755 of file object.c.
References GET_MAP_OB, llevError, LOG(), and out_of_map().
Referenced by cast_create_town_portal(), cfapi_map_present_arch_by_name(), and save_throw_object().
object* present_arch_in_ob | ( | const archetype * | at, |
const object * | op | ||
) |
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 2859 of file object.c.
Referenced by cast_heal(), cfapi_object_find_archetype_inside(), cfapi_object_get_property(), change_luck(), create_aura(), drain_specific_stat(), god_intervention(), kill_player(), perceive_self(), poison_living(), potion_type_apply(), slow_living(), and START_TEST().
object* present_in_ob | ( | uint8 | type, |
const object * | op | ||
) |
Searches for any objects with a matching type variable in the inventory of the given object.
type | type to search for. |
op | object to search into. |
Definition at line 2806 of file object.c.
Referenced by blind_living(), cfapi_object_get_property(), and examine_monster().
object* present_in_ob_by_name | ( | int | type, |
const char * | str, | ||
const object * | op | ||
) |
Searches for any objects with a matching type & name variable in the inventory of the given object.
This is mostly used by spell effect code, so that we only have one spell effect at a time. type can be used to narrow the search - if type is set, the type must also match. -1 can be passed for the type, in which case the type does not need to pass. str is the string to match against. Note that we match against the object name, not the archetype name. this is so that the spell code can use one object type (force), but change it's name to be unique.
type | object type to search for. -1 means to ignore it. |
str | object name to search for. |
op | where to search. |
Definition at line 2840 of file object.c.
Referenced by become_follower(), cast_heal(), cfapi_object_get_property(), and confuse_living().
void remove_from_active_list | ( | object * | op | ) |
This function removes object 'op' from the list of active objects.
This should only be used for style maps or other such reference maps where you don't want an object that isn't in play chewing up cpu time getting processed. The reverse of this is to call update_ob_speed, which will do the right thing based on the speed of the object.
op | object to remove. |
Definition at line 1070 of file object.c.
References active_objects.
Referenced by load_objects(), and START_TEST().
void remove_ob | ( | object * | op | ) |
This function removes the object op from the linked list of objects which it is currently tied to.
When this function is done, the object will have no environment. If the object previously had an environment, the x and y coordinates will be updated to the previous environment.
Will inform the client of the removal if needed.
op | object to remove. Must not be removed yet, else abort() is called. |
Definition at line 1515 of file object.c.
References CLEAR_FLAG, CONTAINER, pl::count, dump_object(), esrv_del_item(), fix_object(), FLAG_APPLIED, FLAG_BLOCKSVIEW, FLAG_NO_APPLY, FLAG_NO_FIX_PLAYER, FLAG_REMOVED, get_map_from_coord(), GET_MAP_OB, get_player_container(), llevError, LOG(), MAP_SAVING, ob_move_on(), P_NEED_UPDATE, mapdef::path, PLAYER, QUERY_FLAG, remove_ob(), SET_FLAG, SET_MAP_FLAGS, SET_MAP_OB, SET_MAP_TOP, stringbuffer_finish(), stringbuffer_new(), sub_weight(), update_all_los(), update_object(), and update_position().
Referenced by add_abilities(), adjust_sign_msg(), alchemy_object(), animate_bomb(), animate_weapon(), apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), apply_savebed(), arrow_type_process(), attempt_jump(), auto_apply(), become_follower(), blindness_type_process(), cast_consecrate(), cast_create_town_portal(), cast_dust(), cast_raise_dead_spell(), cfapi_object_insert(), cfapi_object_remove(), cfapi_object_teleport(), change_object(), check_altar_sacrifice(), check_bullet(), check_login(), check_special_prayers(), clean_object(), command_cast_spell(), command_free(), command_insert_into(), command_kick(), command_kill_pets(), command_remove(), command_reset(), common_process_projectile(), convert_item(), counterspell(), cure_disease(), decay_objects(), decrease_ob_nr(), delete_unique_items(), destroy_object(), dimension_door(), dispel_rune(), do_forget_spell(), do_harvest(), do_server(), do_throw(), do_turn(), drop(), drop_object(), enter_exit(), enter_map(), execute_event(), execute_word_of_recall(), explode_bullet(), explosion(), fire_bow(), fix_generated_item(), fix_stopped_arrow(), fix_walls(), follow_owner(), follower_remove_given_items(), free_all_objects(), free_no_drop(), free_object2(), free_player(), gate_type_process(), generate_treasure(), give_initial_items(), god_intervention(), hit_player(), hit_with_arrow(), insert_ob_in_map(), key_change_class(), key_confirm_quit(), kill_object(), kill_player(), lock_and_hide_doors(), loot_object(), merge_ob(), merge_spell(), monster_check_pickup(), monster_move_no_enemy(), move_aura(), move_ball_spell(), move_bolt(), move_bullet(), move_cone(), move_disease(), move_duplicator(), move_golem(), move_marker(), move_missile(), move_monster(), move_ob(), move_player_mover(), move_swarm_spell(), move_symptom(), move_teleporter(), nuke_map_region(), pay_from_container(), pet_move(), pick_up_object(), place_exits(), play_again(), player_apply(), poisoning_type_process(), polymorph_item(), polymorph_living(), polymorph_melt(), potion_type_apply(), process_object(), process_players1(), push_ob(), put_object_in_sack(), recharge(), remove_adjacent_doors(), remove_contents(), remove_door(), remove_force(), remove_locked_door(), remove_marking_runes(), remove_monsters(), remove_ob(), remove_symptoms(), remove_unpaid_objects(), replace_insert_ob_in_map(), retrofit_joined_wall(), roll_ob(), rune_attack(), save_life(), save_throw_object(), shop_mat_type_move_on(), spell_effect_type_move_on(), spring_trap(), START_TEST(), stick_arrow(), stop_item(), stop_projectile(), summon_golem(), tear_down_wall(), teleport(), terminate_all_pets(), thrown_object_type_process(), transfer_ob(), transmute_item_to_flower(), transport_type_apply(), treasure_type_apply(), turn_one_transport(), and write_scroll().
void replace_insert_ob_in_map | ( | const char * | arch_string, |
object * | op | ||
) |
This function inserts an object of a specified archetype in the map, but if it finds objects of its own type, it'll remove them first.
arch_string | object's archetype to insert. |
op | object to insert it under: supplies x and the map. |
Definition at line 2271 of file object.c.
References arch_to_object(), find_archetype(), free_object(), GET_MAP_OB, insert_ob_in_map(), and remove_ob().
Referenced by save_throw_object(), and START_TEST().
void reset_object | ( | object * | op | ) |
Sets to 0 vital variables in an object.
op | object to reset. |
Definition at line 639 of file object.c.
References clear_object().
Referenced by cfapi_object_reset(), check_login(), init_artifacts(), and START_TEST().
void set_cheat | ( | object * | op | ) |
set_cheat(object) sets the cheat flag (WAS_WIZ) in the object and in all it's inventory (recursively).
If checksums are used, a player will get set_cheat called for him/her-self and all object carried by a call to this function.
op | object for which to set the flag. |
Definition at line 2913 of file object.c.
References flag_inv(), FLAG_WAS_WIZ, and SET_FLAG.
Referenced by cfapi_object_set_property().
int set_ob_key_value | ( | object * | op, |
const char * | key, | ||
const char * | value, | ||
int | add_key | ||
) |
Updates the key in op to value.
op | object we're considering. |
key | key to set or update. Doesn't need to be a shared string. |
value | value to set. Doesn't need to be a shared string. |
add_key | if 0, will not add the key if it doesn't exist in op. |
Definition at line 3826 of file object.c.
References add_string(), FALSE, find_string(), free_string(), set_ob_key_value_s(), and TRUE.
Referenced by cfapi_object_set_key(), do_harvest(), generate_monster(), generate_monster_arch(), generate_monster_inv(), god_enchants_weapon(), god_gives_present(), set_object_face_other(), and store_spell_expiry().
static int set_ob_key_value_s | ( | object * | op, |
const char * | canonical_key, | ||
const char * | value, | ||
int | add_key | ||
) | [static] |
Updates or sets a key value.
op | object we're considering. |
canonical_key | key to set or update. Must be a shared string. |
value | value to set. Doesn't need to be a shared string. |
add_key | if 0, will not add the key if it doesn't exist in op. |
Definition at line 3741 of file object.c.
References add_refcount(), add_string(), FALSE, FREE_AND_CLEAR_STR, get_ob_key_link(), llevDebug, LOG(), and TRUE.
Referenced by set_ob_key_value().
void set_owner | ( | object * | op, |
object * | owner | ||
) |
Sets the owner and sets the skill and exp pointers to owner's current skill and experience objects.
op | object of which to set the owner |
owner | new owner for object. Can be NULL, in which case it's equivalent of calling clear_owner(op) |
Definition at line 564 of file object.c.
References clear_owner(), llevError, and LOG().
Referenced by animate_weapon(), cast_cause_disease(), cast_cone(), cast_smite_spell(), cfapi_object_set_property(), cone_drop(), copy_owner(), create_aura(), create_bomb(), do_mood_floor(), do_symptoms(), do_throw(), fire_arch_from_position(), fire_bolt(), fire_bow(), fire_bullet(), fire_swarm(), fix_summon_pet(), hit_player(), infect_object(), magic_wall(), mood_change(), polymorph_living(), START_TEST(), summon_golem(), summon_object(), use_oratory(), and write_rune().
void sub_weight | ( | object * | op, |
signed long | weight | ||
) |
Recursively (outwards) subtracts a number from the weight of an object (and what is carried by it's environment(s)).
Takes into account the container's weight reduction.
op | object to which weight is substracted. |
weight | weight to remove. |
Definition at line 1489 of file object.c.
References CONTAINER.
Referenced by decrease_ob_nr(), make_item_from_recipe(), remove_ob(), and START_TEST().
signed long sum_weight | ( | object * | op | ) |
sum_weight() is a recursive function which calculates the weight an object is carrying.
It goes through in figures out how much containers are carrying, and sums it up.
This takes into account the container's weight reduction.
op | object we want the weight of. |
Definition at line 317 of file object.c.
References CONTAINER, and sum_weight().
Referenced by cfapi_object_set_property(), check_login(), command_fix_me(), fix_container(), fix_weight(), load_objects(), START_TEST(), sum_weight(), and transport_type_apply().
void unflag_inv | ( | object * | op, |
int | flag | ||
) |
Desactivate recursively a flag on an object inventory.
op | object to recurse. Can have an empty inventory. |
flag | flag to unset. |
Definition at line 2894 of file object.c.
References CLEAR_FLAG, and unflag_inv().
Referenced by convert_item(), generate_monster_inv(), move_creator(), and unflag_inv().
void update_ob_speed | ( | object * | op | ) |
Updates the speed of an object.
If the speed changes from 0 to another value, or vice versa, then add/remove the object from the active list. This function needs to be called whenever the speed of an object changes.
op | object to update. Must not be freed and still have a speed. |
Definition at line 1008 of file object.c.
References active_objects, arch_init, FABS, FLAG_FREED, llevError, LOG(), MIN_ACTIVE_SPEED, and QUERY_FLAG.
Referenced by add_abilities(), animate_weapon(), apply_savebed(), cast_word_of_recall(), cfapi_object_set_property(), check_login(), check_trigger(), command_remove(), copy_object(), do_auto_apply(), do_throw(), drain_wand_charge(), eat_special_food(), find_or_create_connection_for_map(), fire_bow(), fix_auto_apply(), fix_object(), fix_stopped_arrow(), free_object2(), gate_type_process(), kill_object(), local_check_loaded_object(), move_cone(), move_detector(), move_hole(), move_marker(), power_crystal_type_apply(), process_events(), recharge(), remove_door(), remove_locked_door(), setup(), START_TEST(), swap_random_stats(), timed_gate_type_process(), transmute_item_to_flower(), trigger_connected(), and trigger_move().
void update_object | ( | object * | op, |
int | action | ||
) |
update_object() updates the array which represents the map.
It takes into account invisible objects (and represent squares covered by invisible objects by whatever is below them (unless it's another invisible object, etc...)
If the object being updated is beneath a player, the look-window of that player is updated (this might be a suboptimal way of updating that window, though, since update_object() is called _often_)
op | object to update |
action | Hint of what the caller believes need to be done. One of UP_OBJ_xxx values. For example, if the only thing that has changed is the face (due to an animation), we don't need to call update_position until that actually comes into view of a player. OTOH, many other things, like addition/removal of walls or living creatures may need us to update the flags now. |
Definition at line 1112 of file object.c.
References esrv_update_item(), FLAG_ALIVE, FLAG_BLOCKSVIEW, FLAG_CLIENT_ANIM_RANDOM, FLAG_CLIENT_ANIM_SYNC, FLAG_DAMNED, FLAG_NO_MAGIC, flags, GET_MAP_FLAGS, GET_MAP_MOVE_BLOCK, GET_MAP_MOVE_OFF, GET_MAP_MOVE_ON, GET_MAP_MOVE_SLOW, GET_MAP_PLAYER, llevDebug, llevError, LOG(), MAP_HEIGHT, MAP_SAVING, MAP_WIDTH, P_BLOCKSVIEW, P_IS_ALIVE, P_NEED_UPDATE, P_NO_CLERIC, P_NO_ERROR, P_NO_MAGIC, P_PLAYER, PLAYER, QUERY_FLAG, SET_MAP_FLAGS, UPD_FACE, update_object(), and update_position().
Referenced by animate_object(), animate_trigger(), animate_turning(), cast_invisible(), cf_handle_type_apply(), cfapi_object_set_property(), cfapi_object_update(), check_trigger(), command_invisible(), common_trap_type_process(), do_skill_attack(), fix_stopped_arrow(), gate_type_process(), hide(), hit_map(), identify(), insert_ob_in_map(), key_change_class(), make_visible(), move_golem(), move_hole(), remove_ob(), tear_down_wall(), trapdoor_type_move_on(), trigger_connected(), trigger_type_process(), unblock_exits(), update_button(), update_object(), and update_turn_face().
void update_turn_face | ( | object * | op | ) |
If an object with the IS_TURNABLE() flag needs to be turned due to the closest player being on the other side, this function can be called to update the face variable, _and_ how it looks on the map.
op | object to update. |
Definition at line 990 of file object.c.
References FLAG_IS_TURNABLE, QUERY_FLAG, SET_ANIMATION, and update_object().
Referenced by director_type_move_on(), forklightning(), move_bolt(), move_bullet(), spinner_type_move_on(), and START_TEST().
object* active_objects |
List of active objects that need to be processed.
Definition at line 72 of file object.c.
Referenced by cast_invisible(), count_active(), init_objects(), process_events(), remove_from_active_list(), and update_ob_speed().
object* free_objects |
Pointer to the list of unused objects.
Definition at line 71 of file object.c.
Referenced by count_free(), expand_objects(), free_all_object_data(), free_object2(), get_object(), and init_objects().
short freearr_x[SIZEOFFREE] |
{ 0, 0, 1, 1, 1, 0, -1, -1, -1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2, -1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, -1, -2, -3, -3, -3, -3, -3, -3, -3, -2, -1 }
X offset when searching around a spot.
Definition at line 75 of file object.c.
Referenced by animate_bomb(), animate_weapon(), apply_builder_floor(), apply_builder_remove(), apply_map_builder(), attempt_jump(), can_see_monsterP(), cast_cause_disease(), cast_cone(), cast_create_obj(), cast_light(), cast_polymorph(), cast_raise_dead_spell(), cast_spell(), cast_transfer(), change_object(), command_summon(), command_teleport(), common_process_projectile(), communicate(), compute_path(), counterspell(), CREAnimationControl::CREAnimationControl(), create_bomb(), dimension_door(), dispel_rune(), do_harvest(), do_skill_ident(), do_throw(), enter_map(), expand_sight(), explosion(), find_closest_monster(), find_dir(), find_doors_in_room_recursive(), find_enclosed_spot(), find_first_free_spot(), find_free_spot(), find_monster_in_room_recursive(), find_nearest_living_creature(), find_spot_in_room_recursive(), find_target_for_friendly_spell(), find_traps(), fire_bullet(), fix_summon_pet(), follow_owner(), forklightning(), free_object2(), gate_type_process(), get_pet_enemy(), get_pointed_target(), hideability(), hit_map(), hit_player(), keyplace(), magic_wall(), monster_use_bow(), move_aura(), move_ball_spell(), move_bolt(), move_cone(), move_golem(), move_ob(), move_player_attack(), move_player_mover(), move_swarm_spell(), path_to_player(), pet_move(), pick_arrow_target(), pick_lock(), place_chest(), place_exits(), place_fountain_with_specials(), place_monsters(), place_special_exit(), player_fire_bow(), probe(), process_players1(), push_ob(), put_a_monster(), remove_adjacent_doors(), remove_door(), remove_locked_door(), remove_trap(), roll_ob(), shop_mat_type_move_on(), singing(), skill_attack(), spell_find_dir(), stand_near_hostile(), steal(), summon_golem(), summon_object(), surround_by_doors(), teleport(), transfer_ob(), turn_one_transport(), use_oratory(), and write_rune().
short freearr_y[SIZEOFFREE] |
{ 0, -1, -1, 0, 1, 1, 1, 0, -1, -2, -2, -2, -1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2, -3, -3, -3, -3, -2, -1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, -1, -2, -3, -3, -3 }
Y offset when searching around a spot.
Definition at line 81 of file object.c.
Referenced by animate_weapon(), apply_builder_floor(), apply_builder_remove(), apply_map_builder(), attempt_jump(), can_see_monsterP(), cast_cause_disease(), cast_cone(), cast_create_obj(), cast_light(), cast_polymorph(), cast_raise_dead_spell(), cast_spell(), cast_transfer(), change_object(), command_summon(), command_teleport(), common_process_projectile(), communicate(), compute_path(), counterspell(), CREAnimationControl::CREAnimationControl(), create_bomb(), dimension_door(), dispel_rune(), do_harvest(), do_skill_ident(), do_throw(), enter_map(), expand_sight(), explosion(), find_closest_monster(), find_dir(), find_doors_in_room_recursive(), find_enclosed_spot(), find_first_free_spot(), find_free_spot(), find_monster_in_room_recursive(), find_nearest_living_creature(), find_spot_in_room_recursive(), find_target_for_friendly_spell(), find_traps(), fire_bullet(), fix_summon_pet(), follow_owner(), forklightning(), free_object2(), gate_type_process(), get_pet_enemy(), get_pointed_target(), hideability(), hit_map(), hit_player(), keyplace(), magic_wall(), monster_use_bow(), move_aura(), move_ball_spell(), move_bolt(), move_cone(), move_golem(), move_ob(), move_player_attack(), move_player_mover(), move_swarm_spell(), path_to_player(), pet_move(), pick_arrow_target(), pick_lock(), place_chest(), place_exits(), place_fountain_with_specials(), place_monsters(), place_special_exit(), player_fire_bow(), probe(), process_players1(), push_ob(), put_a_monster(), remove_adjacent_doors(), remove_door(), remove_locked_door(), remove_trap(), roll_ob(), shop_mat_type_move_on(), singing(), skill_attack(), spell_find_dir(), stand_near_hostile(), steal(), summon_golem(), summon_object(), surround_by_doors(), teleport(), transfer_ob(), turn_one_transport(), use_oratory(), and write_rune().
int freedir[SIZEOFFREE] |
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 2, 2, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 1, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 6, 7, 8, 8, 8, 8, 8 }
Direction we're pointing on this spot.
Definition at line 93 of file object.c.
Referenced by find_dir(), spell_find_dir(), and summon_object().
int maxfree[SIZEOFFREE] |
{ 0, 9, 10, 13, 14, 17, 18, 21, 22, 25, 26, 27, 30, 31, 32, 33, 36, 37, 39, 39, 42, 43, 44, 45, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49 }
Number of spots around a location, including that location (except for 0)
Definition at line 87 of file object.c.
Referenced by find_dir(), and find_free_spot().
int nrofallocobjects = STARTMAX |
How many OBs allocated (free + used)
Definition at line 67 of file object.c.
Referenced by expand_objects(), free_all_object_data(), and swap_below_max().
int nroffreeobjects = STARTMAX |
How many OBs allocated and free (free)
Definition at line 66 of file object.c.
Referenced by expand_objects(), free_all_object_data(), free_object2(), get_object(), and swap_below_max().
All objects, allocated this way at first.
Definition at line 65 of file object.c.
Referenced by init_objects().
object* objects |
Pointer to the list of used objects.
Definition at line 70 of file object.c.
Referenced by count_used(), dump_all_objects(), find_object(), find_object_name(), free_all_object_data(), free_all_objects(), free_object2(), get_object(), and init_objects().
const int reduction_dir[SIZEOFFREE][3] [static] |
Basically, this is a table of directions, and what directions one could go to go back to us.
Eg, entry 15 below is 4, 14, 16. This basically means that if direction is 15, then it could either go direction 4, 14, or 16 to get back to where we are. Moved from spell_util.c to object.c with the other related direction functions.
peterm: do LOS stuff for ball lightning. Go after the closest VISIBLE monster.
Definition at line 3454 of file object.c.
Referenced by can_see_monsterP().