Go to the documentation of this file.
53 if (strcmp(
ob->arch->name,
"rune_mark") == 0)
63 switch (new_item->
type) {
105 if (rune->type ==
SIGN && strcmp(rune->arch->name,
"rune_mark") == 0)
124 if (book->type ==
BOOK)
144 if (wall->type ==
WALL)
160 if ((rune->type ==
SIGN) && (!strcmp(rune->arch->name,
"rune_mark"))) {
192 "You need to put a book or scroll with the message.");
198 if (
tmp->invisible) {
200 if (custom_name != NULL) {
201 snprintf(
buf,
sizeof(
buf),
"talking %s", custom_name);
203 snprintf(
buf,
sizeof(
buf),
"talking %s", book->
name);
210 snprintf(buf2,
sizeof(buf2),
"talking %s", book->
name_pl);
239 while (itest++ < 1000) {
279 if (!rune || !rune->
msg) {
281 "You need to put a marking rune with the group name.");
289 &&
tmp->slaying != NULL && strcmp(
tmp->slaying,
pl->map->path) == 0
290 &&
tmp->msg != NULL &&
tmp->msg == rune->
msg) {
302 "Could not create more groups.");
318 return force->path_attuned;
341 uint32_t old_flags[4];
361 if (!strcmp(underscore+1,
"win1"))
363 else if (!strcmp(underscore+1,
"win2"))
365 else if (!isdigit(*(underscore+1)))
474 for (flag = 0; flag < 4; flag++)
475 old_flags[flag] = wall->
flags[flag];
482 for (flag = 0; flag < 4; flag++)
483 wall->
flags[flag] = old_flags[flag];
511 int i, xt, yt, wall_removed;
514 snprintf(
message,
sizeof(
message),
"You change the floor to better suit your tastes.");
527 new_wall =
tmp->arch;
530 snprintf(
message,
sizeof(
message),
"You destroy the wall and redo the floor.");
545 if (wall_removed == 0 && floor != NULL) {
546 if (floor->
arch == new_floor->
arch) {
569 for (i = 1; i <= 8; i++) {
599 for (xt =
x-2; xt <=
x+2; xt++)
600 for (yt =
y-2; yt <=
y+2; yt++) {
628 object *current_wall;
636 char current_basename[
MAX_BUF];
641 strncpy(current_basename, current_wall->
arch->
name,
sizeof(current_basename));
642 current_basename[
sizeof(current_basename)-1] =
'\0';
643 underscore = strchr(current_basename,
'_');
644 if (underscore && isdigit(*(underscore+1))) {
648 strncpy(new_basename, new_wall->
arch->
name,
sizeof(new_basename));
649 new_basename[
sizeof(new_basename)-1] =
'\0';
650 underscore = strchr(new_basename,
'_');
651 if (underscore && isdigit(*(underscore+1))) {
655 if (!strncmp(current_basename, new_basename,
sizeof(new_basename))) {
671 snprintf(
message,
sizeof(
message),
"You redecorate the wall to better suit your tastes.");
677 for (xt =
x-1; xt <=
x+1; xt++)
678 for (yt =
y-1; yt <=
y+1; yt++) {
708 object *current_wall;
712 uint32_t old_flags[4];
729 if (!strcmp(underscore,
"win1")
730 || !strcmp(underscore,
"win2")) {
734 if (!strcmp(underscore,
"2_1_1"))
735 strcpy(underscore,
"win1");
736 else if (!strcmp(underscore,
"2_1_2"))
737 strcpy(underscore,
"win2");
746 "There is no wall there.");
760 for (flag = 0; flag < 4; flag++)
761 old_flags[flag] = current_wall->
flags[flag];
768 for (flag = 0; flag < 4; flag++)
769 window->
flags[flag] = old_flags[flag];
818 "This square has no floor, you can't build here.");
833 switch (new_item->
type) {
863 if (con_rune != NULL) {
904 LOG(
llevError,
"apply_builder_remove: (null) square at (%d, %d, %s)\n",
x,
y,
pl->map->path);
913 "Nothing to remove.");
918 switch (
item->type) {
921 "Can't remove a wall with that, build a floor.");
970 "You can't build or destroy under yourself.");
977 if ((1 >
x) || (1 >
y)
980 "Can't build on map edge.");
994 LOG(
llevError,
"apply_map_builder: undefined square at (%d, %d, %s)\n",
x,
y,
pl->map->path);
996 "You'd better not build here, it looks weird.");
1005 && ((
tmp->type !=
SIGN) || (strcmp(
tmp->arch->name,
"rune_mark")))) {
1007 "You can't build here.");
1032 "You need to mark raw materials to use.");
1038 "You can't use the marked item to build.");
1052 "You can't use this strange material.");
1061 "You can't build here.");
1085 "Don't know how to apply this material, sorry.");
1096 "Don't know how to apply this tool, sorry.");
#define GET_MAP_OB(M, X, Y)
static int apply_builder_window(object *pl, object *new_wall_win, short x, short y)
void LOG(LogLevel logLevel, const char *format,...)
#define QUERY_FLAG(xyz, p)
static void fix_walls(mapstruct *map, int x, int y)
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...) PRINTF_ARGS(6
static int apply_builder_floor(object *pl, object *new_floor, short x, short y)
void apply_builder_remove(object *pl, int dir)
static void remove_marking_runes(mapstruct *map, short x, short y)
#define MSG_TYPE_APPLY_BUILD
#define FOR_OB_AND_ABOVE_FINISH()
const char * object_get_value(const object *op, const char *const key)
static int find_or_create_connection_for_map(object *pl, short x, short y, object *rune)
object * object_insert_in_ob(object *op, object *where)
static object * get_connection_rune(object *pl, short x, short y)
#define INS_ABOVE_FLOOR_ONLY
void apply_map_builder(object *pl, int dir)
#define FOR_OB_AND_ABOVE_PREPARE(op_)
void object_free_drop_inventory(object *ob)
#define object_decrease_nrof_by_one(xyz)
short freearr_y[SIZEOFFREE]
void query_name(const object *op, char *buf, size_t size)
static int can_build_over(mapstruct *map, object *new_item, short x, short y)
sstring add_string(const char *str)
void object_update_speed(object *op)
object * object_create_arch(archetype *at)
static int apply_builder_wall(object *pl, object *new_wall, short x, short y)
#define INS_BELOW_ORIGINATOR
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
object * create_archetype(const char *name)
void free_string(sstring str)
static bool IS_PLAYER(object *op)
#define FOR_MAP_PREPARE(map_, mx_, my_, it_)
#define OUT_OF_REAL_MAP(M, X, Y)
#define FLAG_IS_BUILDABLE
const typedef char * sstring
archetype * find_archetype(const char *name)
void object_set_msg(object *op, const char *msg)
static int apply_builder_item(object *pl, object *new_item, short x, short y)
object * arch_to_object(archetype *at)
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
static object * get_msg_book(object *pl, short x, short y)
void object_remove(object *op)
archetype * try_find_archetype(const char *name)
short freearr_x[SIZEOFFREE]
static object * get_wall(mapstruct *map, int x, int y)
static int adjust_sign_msg(object *pl, short x, short y, object *tmp)
#define CUSTOM_NAME_FIELD
object * find_marked_object(object *op)
#define FOR_INV_PREPARE(op_, it_)
static int find_unused_connected_value(mapstruct *map)