Crossfire Server, Branches 1.12
R18729
|
#include <global.h>
#include <living.h>
#include <spells.h>
#include <skills.h>
#include <tod.h>
#include <sproto.h>
Go to the source code of this file.
Functions | |
static int | adjust_sign_msg (object *pl, short x, short y, object *tmp) |
static int | apply_builder_floor (object *pl, object *new_floor, short x, short y) |
static int | apply_builder_item (object *pl, object *new_item, short x, short y) |
void | apply_builder_remove (object *pl, int dir) |
static int | apply_builder_wall (object *pl, object *new_wall, short x, short y) |
static int | apply_builder_window (object *pl, object *new_wall_win, short x, short y) |
void | apply_map_builder (object *pl, int dir) |
static int | can_build_over (struct mapdef *map, object *new_item, short x, short y) |
static int | find_or_create_connection_for_map (object *pl, short x, short y, object *rune) |
static int | find_unused_connected_value (struct mapdef *map) |
static void | fix_walls (struct mapdef *map, int x, int y) |
static object * | get_connection_rune (object *pl, short x, short y) |
static object * | get_msg_book (object *pl, short x, short y) |
static object * | get_wall (struct mapdef *map, int x, int y) |
static void | remove_marking_runes (struct mapdef *map, short x, short y) |
This file handles all ingame construction functions: builders, destroyers, building materials.
Basically, those enable a player to alter in real-time a map.
Definition in file build_map.c.
Make the built object inherit the msg of books that are used with it. For objects already invisible (i.e. magic mouths & ears), also make it it inherit the face and the name with "talking " prepended.
The book is removed during the operation.
pl | player building. |
x | |
y | building coordinates. |
tmp | object that is being built. |
Definition at line 202 of file build_map.c.
References add_refcount(), add_string(), obj::custom_name, draw_ext_info(), obj::face, free_object(), free_string(), get_msg_book(), obj::invisible, MAX_BUF, obj::msg, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, obj::name, obj::name_pl, NDI_UNIQUE, remove_ob(), and snprintf().
Referenced by apply_builder_item().
Floor building function.
Floors can be built:
pl | player building. |
new_floor | new floor object |
x | |
y | where to build. |
Definition at line 519 of file build_map.c.
References obj::above, obj::arch, arch_to_object(), draw_ext_info(), fix_walls(), FLAG_IS_BUILDABLE, FLAG_IS_FLOOR, FLAG_UNIQUE, FLOOR, free_object(), freearr_x, freearr_y, GET_MAP_OB, INS_BELOW_ORIGINATOR, INS_ON_TOP, insert_ob_in_map_at(), obj::map, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, OUT_OF_REAL_MAP, QUERY_FLAG, remove_ob(), SET_FLAG, snprintf(), obj::type, and WALL.
Referenced by apply_map_builder().
Generic item builder.
Item must be put on a square with a floor, you can have something under.
Type of inserted item is tested for specific cases (doors & such).
Item is inserted above the floor.
Note that it is the responsability of the caller to check whether the space is buildable or not.
pl | player building. |
new_item | new item being built |
x | |
y | where to build. |
Definition at line 814 of file build_map.c.
References obj::above, add_button_link(), adjust_sign_msg(), obj::arch, BUTTON, CF_HANDLE, DETECTOR, DOOR, draw_ext_info(), draw_ext_info_format(), find_or_create_connection_for_map(), FLAG_IS_FLOOR, FLAG_NO_PICK, FLOOR, free_object(), GATE, get_connection_rune(), GET_MAP_OB, INS_ABOVE_FLOOR_ONLY, insert_ob_in_map_at(), MAGIC_EAR, obj::map, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, PEDESTAL, QUERY_FLAG, query_name(), remove_ob(), SET_FLAG, SIGN, TIMED_GATE, and obj::type.
Referenced by apply_map_builder().
void apply_builder_remove | ( | object * | pl, |
int | dir | ||
) |
Item remover.
Removes first buildable item, either under or above the floor
pl | player removing an item. |
dir | direction the player is trying to remove. |
Definition at line 907 of file build_map.c.
References obj::above, BUTTON, CF_HANDLE, DETECTOR, DOOR, draw_ext_info(), draw_ext_info_format(), FLAG_IS_FLOOR, FLAG_IS_LINKED, FLOOR, free_object(), freearr_x, freearr_y, GATE, GET_MAP_OB, llevError, LOG(), MAGIC_EAR, obj::map, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, mapdef::path, PEDESTAL, QUERY_FLAG, query_name(), remove_button_link(), remove_ob(), SIGN, TIMED_GATE, obj::type, WALL, obj::x, and obj::y.
Referenced by apply_map_builder().
Wall building function
Walls can be built:
pl | player building. |
new_wall | new wall object |
x | |
y | where to build. |
Definition at line 644 of file build_map.c.
References obj::arch, draw_ext_info(), fix_walls(), free_object(), get_wall(), INS_ABOVE_FLOOR_ONLY, insert_ob_in_map_at(), obj::map, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, OUT_OF_REAL_MAP, remove_marking_runes(), remove_ob(), snprintf(), obj::type, and WALL.
Referenced by apply_map_builder().
Window building function
Windows can be built only on top of existing vertical or horizontal walls (*wall_2_1_1 or *wall_2_1_2).
pl | player building. |
new_wall_win | new windowed wall object |
x | |
y | where to build. |
Definition at line 724 of file build_map.c.
References obj::arch, arch_to_object(), draw_ext_info(), find_archetype(), obj::flags, free_object(), get_wall(), INS_ABOVE_FLOOR_ONLY, insert_ob_in_map_at(), obj::map, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, remove_ob(), obj::type, and WALL.
Referenced by apply_map_builder().
void apply_map_builder | ( | object * | pl, |
int | dir | ||
) |
Global building function
This is the general map building function. Called when the player 'fires' a builder or remover object.
pl | player building or removing. |
dir | building direction. |
Definition at line 978 of file build_map.c.
References obj::above, apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), obj::arch, can_build_over(), obj::contr, decrease_ob, draw_ext_info(), find_archetype(), find_marked_object(), FLAG_IS_BUILDABLE, freearr_x, freearr_y, GET_MAP_OB, llevError, LOG(), obj::map, MAP_HEIGHT, MAP_WIDTH, MATERIAL, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, archt::name, NDI_UNIQUE, object_create_arch(), mapdef::path, PLAYER, QUERY_FLAG, range_builder, pl::ranges, SET_FLAG, SIGN, obj::slaying, ST_BD_BUILD, ST_BD_REMOVE, ST_MAT_FLOOR, ST_MAT_ITEM, ST_MAT_WALL, ST_MAT_WINDOW, obj::subtype, obj::type, obj::x, and obj::y.
Referenced by fire().
Check if objects on a square interfere with building.
map | map we're building on. |
new_item | item the player is trying to build. |
x | |
y | coordinates where to build. |
Definition at line 57 of file build_map.c.
References obj::above, obj::arch, BOOK, BUTTON, CF_HANDLE, archt::clone, DETECTOR, DOOR, FLAG_IS_BUILDABLE, GATE, GET_MAP_OB, obj::head, MAGIC_EAR, obj::more, archt::name, PEDESTAL, QUERY_FLAG, SIGN, obj::type, obj::x, and obj::y.
Referenced by apply_map_builder().
|
static |
Helper function for door/button/connected item building.
Will search the specified spot for a marking rune. If not found, returns -1 Else, searches a force in op's inventory matching the map's name and the rune's text. If found, returns the connection value associated else searches a new connection value, and adds the force to the player.
pl | player building. |
x | |
y | coordinates where to build. |
rune | rune used to indicate the connection value. If NULL, building is searched for one. |
Definition at line 290 of file build_map.c.
References add_string(), obj::below, create_archetype(), draw_ext_info(), find_unused_connected_value(), FORCE, FORCE_NAME, get_connection_rune(), insert_ob_in_ob(), obj::inv, obj::map, obj::msg, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, mapdef::path, obj::path_attuned, obj::slaying, obj::speed, obj::type, and update_ob_speed().
Referenced by apply_builder_item().
|
static |
Returns an unused value for 'connected'.
Tries 1000 random values, then returns -1.
map | map for which to find a value |
Definition at line 252 of file build_map.c.
References mapdef::buttons, oblinkpt::next, and oblinkpt::value.
Referenced by find_or_create_connection_for_map().
|
static |
Fixes walls around specified spot
Basically it ensures the correct wall is put where needed.
map | |
x | |
y | position to fix. |
Definition at line 348 of file build_map.c.
References obj::arch, arch_to_object(), find_archetype(), obj::flags, free_object(), get_wall(), INS_ABOVE_FLOOR_ONLY, insert_ob_in_map_at(), MAP_HEIGHT, MAP_WIDTH, MAX_BUF, archt::name, remove_ob(), obj::type, and WALL.
Referenced by apply_builder_floor(), and apply_builder_wall().
Returns the marking rune on the square, for purposes of building connections.
pl | player trying to build. |
x | |
y | coordinates to search. |
Definition at line 111 of file build_map.c.
References obj::above, obj::arch, GET_MAP_OB, obj::map, archt::name, SIGN, and obj::type.
Referenced by apply_builder_item(), and find_or_create_connection_for_map().
Returns the book/scroll on the current square, for purposes of building
pl | player trying to build. |
x | |
y | coordinates to search. |
Definition at line 131 of file build_map.c.
References obj::above, BOOK, GET_MAP_OB, obj::map, and obj::type.
Referenced by adjust_sign_msg().
Returns first item of type WALL.
map | |
x | |
y | where to search. |
Definition at line 152 of file build_map.c.
References obj::above, GET_MAP_OB, obj::type, and WALL.
Referenced by apply_builder_wall(), apply_builder_window(), and fix_walls().
|
static |
Erases all marking runes at specified location (before building a wall)
map | |
x | |
y | coordinates to erase runes at. |
Definition at line 170 of file build_map.c.
References obj::above, obj::arch, free_object(), GET_MAP_OB, archt::name, remove_ob(), SIGN, and obj::type.
Referenced by apply_builder_wall().