22 #define FABS(x) ((x) < 0 ? -(x) : (x)) 25 #include <sys/param.h> 36 #define VERY_BIG_BUF 1024 39 #define MAX_ANIMATIONS 256 60 #define ST_BD_REMOVE 2 67 #define ST_MAT_FLOOR 1 70 #define ST_MAT_WINDOW 4 106 #define PU_NOTHING 0x00000000 108 #define PU_DEBUG 0x10000000 109 #define PU_INHIBIT 0x20000000 110 #define PU_STOP 0x40000000 111 #define PU_NEWMODE 0x80000000 113 #define PU_RATIO 0x0000000F 115 #define PU_FOOD 0x00000010 116 #define PU_DRINK 0x00000020 117 #define PU_VALUABLES 0x00000040 118 #define PU_BOW 0x00000080 120 #define PU_ARROW 0x00000100 121 #define PU_HELMET 0x00000200 122 #define PU_SHIELD 0x00000400 123 #define PU_ARMOUR 0x00000800 125 #define PU_BOOTS 0x00001000 126 #define PU_GLOVES 0x00002000 127 #define PU_CLOAK 0x00004000 128 #define PU_KEY 0x00008000 130 #define PU_MISSILEWEAPON 0x00010000 131 #define PU_MELEEWEAPON 0x00020000 132 #define PU_MAGICAL 0x00040000 133 #define PU_POTION 0x00080000 135 #define PU_SPELLBOOK 0x00100000 136 #define PU_SKILLSCROLL 0x00200000 137 #define PU_READABLES 0x00400000 138 #define PU_MAGIC_DEVICE 0x00800000 140 #define PU_NOT_CURSED 0x01000000 141 #define PU_JEWELS 0x02000000 142 #define PU_FLESH 0x04000000 143 #define PU_CONTAINER 0x08000000 152 #define SIZEOFFREE1 8 153 #define SIZEOFFREE2 24 154 #define SIZEOFFREE 49 156 #define NROF_SOUNDS (23+NROFREALSPELLS) 162 #define IS_WEAPON(op) \ 163 (op->type == ARROW || op->type == BOW || op->type == WEAPON) 165 #define IS_ARMOR(op) \ 166 (op->type == ARMOUR || op->type == HELMET || \ 167 op->type == BOOTS || op->type == GLOVES) 169 #define IS_SHIELD(op) \ 172 #define IS_LIVE(op) \ 173 ((op->type == PLAYER || QUERY_FLAG(op, FLAG_MONSTER) || \ 174 (QUERY_FLAG(op, FLAG_ALIVE) && !QUERY_FLAG(op, FLAG_GENERATOR) && \ 175 !(op->type == DOOR))) && (!QUERY_FLAG(op, FLAG_IS_A_TEMPLATE))) 177 #define IS_ARROW(op) \ 178 (op->type == ARROW || \ 179 (op->type == SPELL_EFFECT && (op->subtype == SP_BULLET || op->subtype == SP_MAGIC_MISSILE))) 183 #define HAS_RANDOM_ITEMS(op) (op->randomitems && (!QUERY_FLAG(op, FLAG_IS_A_TEMPLATE))) 223 #define SET_FLAG(xyz, p) set_flag(xyz, p) 224 #define CLEAR_FLAG(xyz, p) clear_flag(xyz, p) 225 #define QUERY_FLAG(xyz, p) query_flag(xyz, p) 226 #define COMPARE_FLAGS(p, q) compare_flags(p, q) 232 #define FLAG_REMOVED 2 234 #define FLAG_WAS_WIZ 4 235 #define FLAG_APPLIED 5 236 #define FLAG_UNPAID 6 237 #define FLAG_USE_SHIELD 7 239 #define FLAG_NO_PICK 8 240 #define FLAG_CLIENT_ANIM_SYNC 9 241 #define FLAG_CLIENT_ANIM_RANDOM 10 242 #define FLAG_ANIMATE 11 243 #define FLAG_DIALOG_PARSED 12 244 #define FLAG_NO_SAVE 13 245 #define FLAG_MONSTER 14 246 #define FLAG_FRIENDLY 15 248 #define FLAG_GENERATOR 16 249 #define FLAG_IS_THROWN 17 250 #define FLAG_AUTO_APPLY 18 251 #define FLAG_TREASURE 19 252 #define FLAG_PLAYER_SOLD 20 253 #define FLAG_SEE_INVISIBLE 21 254 #define FLAG_CAN_ROLL 22 255 #define FLAG_OVERLAY_FLOOR 23 256 #define FLAG_IS_TURNABLE 24 257 #define FLAG_PROBE 25 260 #define FLAG_IS_USED_UP 28 261 #define FLAG_IDENTIFIED 29 262 #define FLAG_REFLECTING 30 263 #define FLAG_CHANGING 31 266 #define FLAG_SPLITTING 32 267 #define FLAG_HITBACK 33 268 #define FLAG_STARTEQUIP 34 269 #define FLAG_BLOCKSVIEW 35 270 #define FLAG_UNDEAD 36 271 #define FLAG_SCARED 37 272 #define FLAG_UNAGGRESSIVE 38 273 #define FLAG_REFL_MISSILE 39 275 #define FLAG_REFL_SPELL 40 276 #define FLAG_NO_MAGIC 41 277 #define FLAG_NO_FIX_PLAYER 42 278 #define FLAG_IS_LIGHTABLE 43 279 #define FLAG_TEAR_DOWN 44 280 #define FLAG_RUN_AWAY 45 287 #define FLAG_UNIQUE 49 288 #define FLAG_NO_DROP 50 289 #define FLAG_WIZCAST 51 290 #define FLAG_CAST_SPELL 52 291 #define FLAG_USE_SCROLL 53 292 #define FLAG_USE_RANGE 54 293 #define FLAG_USE_BOW 55 295 #define FLAG_USE_ARMOUR 56 296 #define FLAG_USE_WEAPON 57 297 #define FLAG_USE_RING 58 298 #define FLAG_READY_RANGE 59 299 #define FLAG_READY_BOW 60 300 #define FLAG_XRAYS 61 301 #define FLAG_NO_APPLY 62 302 #define FLAG_IS_FLOOR 63 305 #define FLAG_LIFESAVE 64 306 #define FLAG_NO_STRENGTH 65 307 #define FLAG_SLEEP 66 308 #define FLAG_STAND_STILL 67 309 #define FLAG_RANDOM_MOVE 68 310 #define FLAG_ONLY_ATTACK 69 311 #define FLAG_CONFUSED 70 312 #define FLAG_STEALTH 71 314 #define FLAG_WIZPASS 72 315 #define FLAG_IS_LINKED 73 316 #define FLAG_CURSED 74 317 #define FLAG_DAMNED 75 318 #define FLAG_SEE_ANYWHERE 76 319 #define FLAG_KNOWN_MAGICAL 77 320 #define FLAG_KNOWN_CURSED 78 321 #define FLAG_CAN_USE_SKILL 79 323 #define FLAG_BEEN_APPLIED 80 324 #define FLAG_READY_SCROLL 81 328 #define FLAG_MAKE_INVIS 85 329 #define FLAG_INV_LOCKED 86 330 #define FLAG_IS_WOODED 87 332 #define FLAG_IS_HILLY 88 333 #define FLAG_READY_SKILL 89 334 #define FLAG_READY_WEAPON 90 335 #define FLAG_NO_SKILL_IDENT 91 336 #define FLAG_BLIND 92 337 #define FLAG_SEE_IN_DARK 93 338 #define FLAG_IS_CAULDRON 94 342 #define FLAG_NO_STEAL 96 343 #define FLAG_ONE_HIT 97 346 #define FLAG_CLIENT_SENT 98 352 #define FLAG_BERSERK 99 354 #define FLAG_NEUTRAL 100 355 #define FLAG_NO_ATTACK 101 356 #define FLAG_NO_DAMAGE 102 357 #define FLAG_OBJ_ORIGINAL 103 362 #define FLAG_ACTIVATE_ON_PUSH 105 363 #define FLAG_ACTIVATE_ON_RELEASE 106 364 #define FLAG_IS_WATER 107 365 #define FLAG_CONTENT_ON_GEN 108 366 #define FLAG_IS_A_TEMPLATE 109 367 #define FLAG_IS_BUILDABLE 110 369 #define FLAG_BLESSED 112 370 #define FLAG_KNOWN_BLESSED 113 371 #define FLAG_PARALYZED 114 374 #define NUM_FLAGS 114 392 #define MOVE_WALK 0x1 393 #define MOVE_FLY_LOW 0x2 394 #define MOVE_FLY_HIGH 0x4 395 #define MOVE_FLYING 0x6 396 #define MOVE_SWIM 0x8 397 #define MOVE_BOAT 0x10 398 #define MOVE_ALL 0x1f 409 #define MOVE_BLOCK_DEFAULT MOVE_SWIM 423 #define OB_MOVE_BLOCK(ob1, ob2) \ 424 ((ob1->move_type&ob2->move_block) == ob1->move_type) 432 #define OB_TYPE_MOVE_BLOCK(ob1, type) \ 433 ((type != 0) && (ob1->move_type&type) == ob1->move_type) 436 #define GENERATE_TYPE(xyz) ((xyz)->stats.sp) 437 #define GENERATE_SPEED(xyz) ((xyz)->stats.maxsp) 439 #define EXIT_PATH(xyz) (xyz)->slaying 440 #define EXIT_LEVEL(xyz) (xyz)->stats.food 441 #define EXIT_X(xyz) (xyz)->stats.hp 442 #define EXIT_Y(xyz) (xyz)->stats.sp 443 #define EXIT_ALT_X(xyz) (xyz)->stats.maxhp 444 #define EXIT_ALT_Y(xyz) (xyz)->stats.maxsp 450 #define MAX_LIGHT_RADII 4 454 #define MAX_DARKNESS 5 459 #define MAX_WEAPON_ITEM_POWER 100 463 #define DIRX(xyz) freearr_x[(xyz)->direction] 464 #define DIRY(xyz) freearr_y[(xyz)->direction] 466 #define ARMOUR_SPEED(xyz) (xyz)->last_sp 467 #define ARMOUR_SPELLS(xyz) (xyz)->gen_sp_armour 468 #define WEAPON_SPEED(xyz) (xyz)->last_sp 542 #define ST_PLAY_AGAIN 1 543 #define ST_ROLL_STAT 2 544 #define ST_CHANGE_CLASS 3 545 #define ST_CONFIRM_QUIT 4 546 #define ST_GET_NAME 6 547 #define ST_GET_PASSWORD 7 548 #define ST_CONFIRM_PASSWORD 8 549 #define ST_GET_PARTY_PASSWORD 10 550 #define ST_CHANGE_PASSWORD_OLD 11 551 #define ST_CHANGE_PASSWORD_NEW 12 552 #define ST_CHANGE_PASSWORD_CONFIRM 13 555 #define BLANK_FACE_NAME "blank.111" 556 #define EMPTY_FACE_NAME "empty.111" 557 #define SMOOTH_FACE_NAME "default_smoothed.111" 563 #define PREFER_HIGH 1 578 #define AP_BASIC_FLAGS 15 581 #define AP_NO_MERGE 16 582 #define AP_IGNORE_CURSE 32 585 #define AP_NOPRINT 128 595 #define AC_PLAYER_STAT_LIMIT 1 596 #define AC_PLAYER_STAT_NO_CHANGE 2 628 #define CAN_APPLY_NEVER 0x1 629 #define CAN_APPLY_RESTRICTION 0x2 630 #define CAN_APPLY_NOT_MASK 0xf 631 #define CAN_APPLY_UNAPPLY 0x10 632 #define CAN_APPLY_UNAPPLY_MULT 0x20 633 #define CAN_APPLY_UNAPPLY_CHOICE 0x40 637 #define MIN_ACTIVE_SPEED 0.00001 642 #define RANDOM() cf_random() 643 #define SRANDOM(seed) cf_srandom(seed) 649 #define WEIGHT(op) (op->nrof ? op->weight : op->weight+op->carrying) 668 #define FOR_INV_PREPARE(op_, it_) \ 670 object *it_ = (op_)->inv; \ 671 FOR_OB_AND_BELOW_PREPARE(it_); 675 #define FOR_INV_FINISH() \ 676 FOR_OB_AND_BELOW_FINISH(); \ 685 #define FOR_ABOVE_PREPARE(op_, it_) \ 687 object *it_ = (op_)->above; \ 688 FOR_OB_AND_ABOVE_PREPARE(it_); 692 #define FOR_ABOVE_FINISH() \ 693 FOR_OB_AND_ABOVE_FINISH(); \ 702 #define FOR_BELOW_PREPARE(op_, it_) \ 704 object *it_ = (op_)->below; \ 705 FOR_OB_AND_BELOW_PREPARE(it_); 709 #define FOR_BELOW_FINISH() \ 710 FOR_OB_AND_BELOW_FINISH(); \ 721 #define FOR_MAP_PREPARE(map_, mx_, my_, it_) \ 723 object *it_ = GET_MAP_OB((map_), (mx_), (my_)); \ 724 FOR_OB_AND_ABOVE_PREPARE(it_); 728 #define FOR_MAP_FINISH() \ 729 FOR_OB_AND_ABOVE_FINISH(); \ 737 #define FOR_OB_AND_ABOVE_PREPARE(op_) FOR_OB_PREPARE(op_, above, __LINE__) 741 #define FOR_OB_AND_ABOVE_FINISH() FOR_OB_FINISH() 748 #define FOR_OB_AND_BELOW_PREPARE(op_) FOR_OB_PREPARE(op_, below, __LINE__) 752 #define FOR_OB_AND_BELOW_FINISH() FOR_OB_FINISH() 761 #define FOR_OB_PREPARE(op_, field_, suffix_) FOR_OB_PREPARE2(op_, field_, suffix_) 769 #define FOR_OB_PREPARE2(op_, field_, suffix_) \ 771 object *next##suffix_ = (op_); \ 772 tag_t next_tag##suffix_ = next##suffix_ == NULL ? 0 : next##suffix_->count;\ 773 while (((op_) = next##suffix_) != NULL) { \ 774 if (object_was_destroyed(next##suffix_, next_tag##suffix_)) {\ 777 next##suffix_ = next##suffix_->field_; \ 778 next_tag##suffix_ = next##suffix_ == NULL ? 0 : next##suffix_->count; 782 #define FOR_OB_FINISH() \ void cf_srandom(unsigned long seed)
static const int32_t MAX_FOOD