Crossfire Server, Branches 1.12
R18729
|
Go to the source code of this file.
Functions | |
int | move_ob (object *op, int dir, object *originator) |
int | move_object (object *op, int dir) |
int | move_to (object *op, int x, int y) |
int | push_ob (object *who, int dir, object *pusher) |
void | recursive_roll (object *op, int dir, object *pusher) |
static int | roll_ob (object *op, int dir, object *pusher) |
int | teleport (object *teleporter, uint8 tele_type, object *user) |
int | transfer_ob (object *op, int x, int y, int randomly, object *originator) |
static int | try_fit (object *op, mapstruct *m, int x, int y) |
Those functions handle object moving and pushing.
Definition in file move.c.
Op is trying to move in direction dir.
op | what is moving. |
dir | what direction op wants to move. |
originator | typically the same as op, but can be different if originator is causing op to move (originator is pushing op). |
0 | op is not able to move to the desired space. |
1 | op was moved. |
Definition at line 72 of file move.c.
References obj::below, blocked_link(), check_doors(), check_earthwalls(), obj::contr, obj::direction, pl::do_los, esrv_map_scroll(), FLAG_REMOVED, FLAG_WIZPASS, freearr_x, freearr_y, get_map_flags(), get_map_from_coord(), obj::head, insert_ob_in_map(), obj::inv, llevDebug, llevError, LOG(), socket_struct::look_position, obj::map, obj::more, P_OUT_OF_MAP, PLAYER, QUERY_FLAG, remove_ob(), pl::socket, TRANSPORT, obj::type, socket_struct::update_look, obj::will_apply, WILL_APPLY_DOOR, WILL_APPLY_EARTHWALL, obj::x, and obj::y.
Referenced by cfapi_object_move(), flee_player(), move_golem(), move_object(), move_player_attack(), move_to(), pet_move(), and recursive_roll().
int move_object | ( | object * | op, |
int | dir | ||
) |
Try to move op in the direction "dir".
op | what to move. |
dir | moving direction. |
0 | something blocks the passage. |
1 | op was moved.. |
Definition at line 53 of file move.c.
References move_ob().
Referenced by check_spell_knockback(), circ1_move(), circ2_move(), move_monster(), move_player_mover(), move_randomly(), pace2_moveh(), pace2_movev(), pace_moveh(), pace_movev(), push_ob(), and rand_move().
int move_to | ( | object * | op, |
int | x, | ||
int | y | ||
) |
Move an object one square toward a specified destination on the same map. The move takes into account blocked squares for op, and things like that. No check is done to know if the object has enough speed to move.
op | object to move |
x | |
y | destination coordinates |
Definition at line 626 of file move.c.
References compute_path(), GET_MAP_FLAGS, GET_MAP_OB, obj::map, move_ob(), P_OUT_OF_MAP, obj::x, and obj::y.
Referenced by cfapi_object_transfer().
Something is pushing some other object.
who | object being pushed. |
dir | pushing direction. |
pusher | what is pushing who. |
1 | if pushing invokes a attack |
0 | no attack during pushing. |
Definition at line 492 of file move.c.
References CLEAR_FLAG, obj::contr, draw_ext_info_format(), obj::enemy, esrv_map_scroll(), FLAG_FRIENDLY, FLAG_NEUTRAL, FLAG_SLEEP, FLAG_STAND_STILL, FLAG_UNAGGRESSIVE, FLAG_WIZ, freearr_x, freearr_y, get_owner(), obj::head, insert_ob_in_map(), obj::level, socket_struct::look_position, obj::map, obj::more, move_object(), MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_FAILURE, MSG_TYPE_VICTIM, MSG_TYPE_VICTIM_WAS_PUSHED, obj::name, NDI_UNIQUE, pl::party, PLAYER, PREFER_HIGH, QUERY_FLAG, random_roll(), remove_ob(), pl::run_on, pl::socket, obj::stats, liv::Str, obj::type, socket_struct::update_look, obj::x, and obj::y.
Referenced by move_player_attack().
An object is pushed by another which is trying to take its place.
op | what is being pushed. |
dir | pushing direction. |
pusher | what is pushing op. |
Definition at line 340 of file move.c.
References draw_ext_info_format(), MAX_BUF, move_ob(), MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_FAILURE, MSG_TYPE_COMMAND_SUCCESS, NDI_BLACK, NDI_UNIQUE, query_name(), and roll_ob().
Referenced by move_player_attack().
An object is being pushed, and may push other objects.
This is not perfect yet. it does not roll objects behind multipart objects properly. Support for rolling multipart objects is questionable.
op | what is being pushed. |
dir | pushing direction. |
pusher | what is pushing op. |
0 | op couldn't move. |
1 | op, and potentially other objects, moved. |
Definition at line 432 of file move.c.
References obj::above, FLAG_CAN_ROLL, flags, freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, GET_MAP_OB, obj::head, insert_ob_in_map(), obj::map, obj::more, obj::move_type, OB_MOVE_BLOCK, P_IS_ALIVE, P_OUT_OF_MAP, PREFER_LOW, QUERY_FLAG, random_roll(), remove_ob(), obj::stats, liv::Str, try_fit(), obj::weight, obj::x, and obj::y.
Referenced by recursive_roll().
Teleport an item around a nearby random teleporter of specified type.
It is basically used so that shop_mats and normal teleporters can be used close to each other and not have the player put to the one of another type.
teleporter | what is teleporting user. |
tele_type | what object type user can be put on. this is either set to SHOP_MAT or TELEPORTER. |
user | what object to teleport. |
1 | user was destroyed. |
0 | user is still valid, but may have moved or not. |
Definition at line 244 of file move.c.
References obj::above, obj::arch, archt::clone, obj::contr, find_free_spot(), freearr_x, freearr_y, get_map_flags(), GET_MAP_MOVE_BLOCK, GET_MAP_OB, obj::head, insert_ob_in_map(), llevError, LOG(), obj::map, map_newmap_cmd(), obj::more, obj::name, OB_TYPE_MOVE_BLOCK, OUT_OF_REAL_MAP, P_OUT_OF_MAP, PLAYER, remove_ob(), SHOP_MAT, pl::socket, obj::type, obj::x, and obj::y.
Referenced by initteleport(), move_teleporter(), runteleport(), and shop_mat_type_move_on().
Move an object (even linked objects) to another spot on the same map.
Does nothing if there is no free spot.
op | what to move. |
x | |
y | new coordinates. |
randomly | if true, use find_free_spot() to find the destination, otherwise use find_first_free_spot(). |
originator | what is causing op to move. |
1 | op was destroyed. |
0 | op was moved. |
Definition at line 197 of file move.c.
References obj::arch, archt::clone, obj::contr, find_first_free_spot(), find_free_spot(), freearr_x, freearr_y, obj::head, insert_ob_in_map(), obj::map, map_newmap_cmd(), obj::more, PLAYER, remove_ob(), SIZEOFFREE, pl::socket, obj::type, obj::x, and obj::y.
Referenced by cfapi_object_transfer(), hole_type_move_on(), kill_player(), move_teleporter(), shop_mat_type_move_on(), and trapdoor_type_move_on().
Checks if an objects fits on a specified spot.
This is a new version of blocked, this one handles objects that can be passed through by monsters with the CAN_PASS_THRU defined.
Very new version handles also multipart objects This is currently only used for the boulder roll code.
op | what object to fit. |
m | |
x | |
y | where to put op. |
1 | object does not fit. |
0 | object fits. |
Definition at line 380 of file move.c.
References obj::above, DOOR, FLAG_ALIVE, get_map_flags(), GET_MAP_OB, obj::head, obj::more, OB_MOVE_BLOCK, P_OUT_OF_MAP, QUERY_FLAG, obj::type, obj::x, and obj::y.
Referenced by roll_ob().