Crossfire Server, Trunk
R22010
|
#include "global.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "living.h"
#include "skills.h"
#include "spells.h"
#include "sproto.h"
#include "tod.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.
|
static |
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 184 of file build_map.c.
References add_string(), buf, draw_ext_info(), free_string(), get_msg_book(), MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), object_set_msg(), and snprintf.
Referenced by apply_builder_item().
|
static |
Floor building function.
Floors can be built:
pl | player building. |
new_floor | new floor object |
x | |
y | where to build. |
Definition at line 506 of file build_map.c.
References arch_to_object(), draw_ext_info(), fix_walls(), FLAG_IS_BUILDABLE, FLAG_IS_FLOOR, FLAG_UNIQUE, FOR_MAP_FINISH, FOR_MAP_PREPARE, freearr_x, freearr_y, GET_MAP_OB, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), OUT_OF_REAL_MAP, QUERY_FLAG, SET_FLAG, and snprintf.
Referenced by apply_map_builder().
|
static |
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 796 of file build_map.c.
References add_button_link(), adjust_sign_msg(), draw_ext_info(), draw_ext_info_format(), find_or_create_connection_for_map(), FLAG_IS_FLOOR, FLAG_NO_PICK, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, get_connection_rune(), GET_MAP_OB, MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), QUERY_FLAG, query_name(), and SET_FLAG.
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 889 of file build_map.c.
References draw_ext_info(), draw_ext_info_format(), FLAG_IS_FLOOR, FLAG_IS_LINKED, freearr_x, freearr_y, GET_MAP_OB, llevError, LOG(), MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), QUERY_FLAG, query_name(), and remove_button_link().
Referenced by apply_map_builder().
|
static |
Wall building function
Walls can be built:
pl | player building. |
new_wall | new wall object |
x | |
y | where to build. |
Definition at line 626 of file build_map.c.
References draw_ext_info(), fix_walls(), get_wall(), MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), OUT_OF_REAL_MAP, remove_marking_runes(), and snprintf.
Referenced by apply_map_builder().
|
static |
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 706 of file build_map.c.
References arch_to_object(), draw_ext_info(), find_archetype(), get_wall(), MAX_BUF, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_free_drop_inventory(), object_insert_in_map_at(), and object_remove().
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 959 of file build_map.c.
References apply_builder_floor(), apply_builder_item(), apply_builder_remove(), apply_builder_wall(), apply_builder_window(), can_build_over(), draw_ext_info(), find_archetype(), find_marked_object(), FLAG_IS_BUILDABLE, FLAG_UNPAID, FOR_OB_AND_ABOVE_FINISH, FOR_OB_AND_ABOVE_PREPARE, freearr_x, freearr_y, GET_MAP_OB, llevError, LOG(), MAP_HEIGHT, MAP_WIDTH, MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_create_arch(), object_decrease_nrof_by_one, QUERY_FLAG, range_builder, SET_FLAG, ST_BD_BUILD, ST_BD_REMOVE, ST_MAT_FLOOR, ST_MAT_ITEM, ST_MAT_WALL, and ST_MAT_WINDOW.
Referenced by fire().
|
static |
Check if objects on a square interfere with building.
map | map we're building on. |
new_item | item the player is trying to build, must not be NULL. |
x | |
y | coordinates where to build. |
Definition at line 48 of file build_map.c.
References FLAG_IS_BUILDABLE, FOR_MAP_FINISH, FOR_MAP_PREPARE, and QUERY_FLAG.
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 271 of file build_map.c.
References add_string(), create_archetype(), draw_ext_info(), find_unused_connected_value(), FOR_INV_FINISH, FOR_INV_PREPARE, FORCE_NAME, get_connection_rune(), MSG_TYPE_APPLY, MSG_TYPE_APPLY_BUILD, NDI_UNIQUE, object_insert_in_ob(), object_set_msg(), and object_update_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 233 of file build_map.c.
References mapdef::buttons.
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 335 of file build_map.c.
References arch_to_object(), get_wall(), MAP_HEIGHT, MAP_WIDTH, MAX_BUF, object_free_drop_inventory(), object_insert_in_map_at(), object_remove(), and try_find_archetype().
Referenced by apply_builder_floor(), and apply_builder_wall().
|
static |
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 103 of file build_map.c.
References FOR_MAP_FINISH, and FOR_MAP_PREPARE.
Referenced by apply_builder_item(), and find_or_create_connection_for_map().
|
static |
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 122 of file build_map.c.
References FOR_MAP_FINISH, and FOR_MAP_PREPARE.
Referenced by adjust_sign_msg().
|
static |
Returns first item of type WALL.
map | |
x | |
y | where to search. |
Definition at line 142 of file build_map.c.
References FOR_MAP_FINISH, and FOR_MAP_PREPARE.
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 158 of file build_map.c.
References FOR_MAP_FINISH, FOR_MAP_PREPARE, object_free_drop_inventory(), and object_remove().
Referenced by apply_builder_wall().