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) {
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)
Plugin animator file specs[Config] name
#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)
TIPS on SURVIVING Crossfire is populated with a wealth of different monsters These monsters can have varying immunities and attack types In some of them can be quite a bit smarter than others It will be important for new players to learn the abilities of different monsters and learn just how much it will take to kill them This section discusses how monsters can interact with players Most monsters in the game are out to mindlessly kill and destroy the players These monsters will help boost a player s after he kills them When fighting a large amount of monsters in a single attempt to find a narrower hallway so that you are not being attacked from all sides Charging into a room full of Beholders for instance would not be open the door and fight them one at a time For there are several maps designed for them Find these areas and clear them out All throughout these a player can find signs and books which they can read by stepping onto them and hitting A to apply the book sign These messages will help the player to learn the system One more always keep an eye on your food If your food drops to your character will soon so BE CAREFUL ! NPCs Non Player Character are special monsters which have intelligence Players may be able to interact with these monsters to help solve puzzles and find items of interest To speak with a monster you suspect to be a simply move to an adjacent square to them and push the double ie Enter your message
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
Magical Runes Runes are magical inscriptions on the dungeon floor
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)
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]
Story behind my Island The human king of the mainland has explorers scout for new territory On one expedition to an the explorers found some flecks of gold in the river they settled next to Upon notification of the king ordered a permanent colony be established in order to find and harvest the gold A while after the colony was built
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)