1 /* $NetBSD: rogue.h,v 1.13 2002/10/01 14:18:57 mrg Exp $ */ 2 3 /* 4 * Copyright (c) 1988, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * Timothy C. Stoehr. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the University of 21 * California, Berkeley and its contributors. 22 * 4. Neither the name of the University nor the names of its contributors 23 * may be used to endorse or promote products derived from this software 24 * without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * @(#)rogue.h 8.1 (Berkeley) 5/31/93 39 */ 40 41 /* 42 * rogue.h 43 * 44 * This source herein may be modified and/or distributed by anybody who 45 * so desires, with the following restrictions: 46 * 1.) This notice shall not be removed. 47 * 2.) Credit shall not be taken for the creation of this source. 48 * 3.) This code is not to be traded, sold, or used for personal 49 * gain or profit. 50 */ 51 52 #define boolean char 53 54 #define NOTHING ((unsigned short) 0) 55 #define OBJECT ((unsigned short) 01) 56 #define MONSTER ((unsigned short) 02) 57 #define STAIRS ((unsigned short) 04) 58 #define HORWALL ((unsigned short) 010) 59 #define VERTWALL ((unsigned short) 020) 60 #define DOOR ((unsigned short) 040) 61 #define FLOOR ((unsigned short) 0100) 62 #define TUNNEL ((unsigned short) 0200) 63 #define TRAP ((unsigned short) 0400) 64 #define HIDDEN ((unsigned short) 01000) 65 66 #define ARMOR ((unsigned short) 01) 67 #define WEAPON ((unsigned short) 02) 68 #define SCROL ((unsigned short) 04) 69 #define POTION ((unsigned short) 010) 70 #define GOLD ((unsigned short) 020) 71 #define FOOD ((unsigned short) 040) 72 #define WAND ((unsigned short) 0100) 73 #define RING ((unsigned short) 0200) 74 #define AMULET ((unsigned short) 0400) 75 #define ALL_OBJECTS ((unsigned short) 0777) 76 77 #define LEATHER 0 78 #define RINGMAIL 1 79 #define SCALE 2 80 #define CHAIN 3 81 #define BANDED 4 82 #define SPLINT 5 83 #define PLATE 6 84 #define ARMORS 7 85 86 #define BOW 0 87 #define DART 1 88 #define ARROW 2 89 #define DAGGER 3 90 #define SHURIKEN 4 91 #define MACE 5 92 #define LONG_SWORD 6 93 #define TWO_HANDED_SWORD 7 94 #define WEAPONS 8 95 96 #define MAX_PACK_COUNT 24 97 98 #define PROTECT_ARMOR 0 99 #define HOLD_MONSTER 1 100 #define ENCH_WEAPON 2 101 #define ENCH_ARMOR 3 102 #define IDENTIFY 4 103 #define TELEPORT 5 104 #define SLEEP 6 105 #define SCARE_MONSTER 7 106 #define REMOVE_CURSE 8 107 #define CREATE_MONSTER 9 108 #define AGGRAVATE_MONSTER 10 109 #define MAGIC_MAPPING 11 110 #define CON_MON 12 111 #define SCROLS 13 112 113 #define INCREASE_STRENGTH 0 114 #define RESTORE_STRENGTH 1 115 #define HEALING 2 116 #define EXTRA_HEALING 3 117 #define POISON 4 118 #define RAISE_LEVEL 5 119 #define BLINDNESS 6 120 #define HALLUCINATION 7 121 #define DETECT_MONSTER 8 122 #define DETECT_OBJECTS 9 123 #define CONFUSION 10 124 #define LEVITATION 11 125 #define HASTE_SELF 12 126 #define SEE_INVISIBLE 13 127 #define POTIONS 14 128 129 #define TELE_AWAY 0 130 #define SLOW_MONSTER 1 131 #define INVISIBILITY 2 132 #define POLYMORPH 3 133 #define HASTE_MONSTER 4 134 #define MAGIC_MISSILE 5 135 #define CANCELLATION 6 136 #define DO_NOTHING 7 137 #define DRAIN_LIFE 8 138 #define COLD 9 139 #define FIRE 10 140 #define WANDS 11 141 142 #define STEALTH 0 143 #define R_TELEPORT 1 144 #define REGENERATION 2 145 #define SLOW_DIGEST 3 146 #define ADD_STRENGTH 4 147 #define SUSTAIN_STRENGTH 5 148 #define DEXTERITY 6 149 #define ADORNMENT 7 150 #define R_SEE_INVISIBLE 8 151 #define MAINTAIN_ARMOR 9 152 #define SEARCHING 10 153 #define RINGS 11 154 155 #define RATION 0 156 #define FRUIT 1 157 158 #define NOT_USED ((unsigned short) 0) 159 #define BEING_WIELDED ((unsigned short) 01) 160 #define BEING_WORN ((unsigned short) 02) 161 #define ON_LEFT_HAND ((unsigned short) 04) 162 #define ON_RIGHT_HAND ((unsigned short) 010) 163 #define ON_EITHER_HAND ((unsigned short) 014) 164 #define BEING_USED ((unsigned short) 017) 165 166 #define NO_TRAP -1 167 #define TRAP_DOOR 0 168 #define BEAR_TRAP 1 169 #define TELE_TRAP 2 170 #define DART_TRAP 3 171 #define SLEEPING_GAS_TRAP 4 172 #define RUST_TRAP 5 173 #define TRAPS 6 174 175 #define STEALTH_FACTOR 3 176 #define R_TELE_PERCENT 8 177 178 #define UNIDENTIFIED ((unsigned short) 00) /* MUST BE ZERO! */ 179 #define IDENTIFIED ((unsigned short) 01) 180 #define CALLED ((unsigned short) 02) 181 182 #define DROWS 24 183 #define DCOLS 80 184 #define NMESSAGES 5 185 #define MAX_TITLE_LENGTH 30 186 #define MAXSYLLABLES 40 187 #define MAX_METAL 14 188 #define WAND_MATERIALS 30 189 #define GEMS 14 190 191 #define GOLD_PERCENT 46 192 193 #define MAX_OPT_LEN 40 194 195 #define MAX_ID_TITLE_LEN 64 196 struct id { 197 short value; 198 char title[MAX_ID_TITLE_LEN]; 199 char *real; 200 unsigned short id_status; 201 }; 202 203 /* The following #defines provide more meaningful names for some of the 204 * struct object fields that are used for monsters. This, since each monster 205 * and object (scrolls, potions, etc) are represented by a struct object. 206 * Ideally, this should be handled by some kind of union structure. 207 */ 208 209 #define m_damage damage 210 #define hp_to_kill quantity 211 #define m_char ichar 212 #define first_level is_protected 213 #define last_level is_cursed 214 #define m_hit_chance class 215 #define stationary_damage identified 216 #define drop_percent which_kind 217 #define trail_char d_enchant 218 #define slowed_toggle quiver 219 #define moves_confused hit_enchant 220 #define nap_length picked_up 221 #define disguise what_is 222 #define next_monster next_object 223 224 struct obj { /* comment is monster meaning */ 225 unsigned long m_flags; /* monster flags */ 226 const char *damage; /* damage it does */ 227 short quantity; /* hit points to kill */ 228 short ichar; /* 'A' is for aquatar */ 229 short kill_exp; /* exp for killing it */ 230 short is_protected; /* level starts */ 231 short is_cursed; /* level ends */ 232 short class; /* chance of hitting you */ 233 short identified; /* 'F' damage, 1,2,3... */ 234 unsigned short which_kind; /* item carry/drop % */ 235 short o_row, o_col, o; /* o is how many times stuck at o_row, o_col */ 236 short row, col; /* current row, col */ 237 short d_enchant; /* room char when detect_monster */ 238 short quiver; /* monster slowed toggle */ 239 short trow, tcol; /* target row, col */ 240 short hit_enchant; /* how many moves is confused */ 241 unsigned short what_is; /* imitator's charactor (?!%: */ 242 short picked_up; /* sleep from wand of sleep */ 243 unsigned short in_use_flags; 244 struct obj *next_object; /* next monster */ 245 }; 246 247 typedef struct obj object; 248 249 #define INIT_AW (object*)0 250 #define INIT_RINGS (object*)0 251 #define INIT_HP 12 252 #define INIT_STR 16 253 #define INIT_EXPLEVEL 1 254 #define INIT_EXP 0 255 #define INIT_PACK {0} 256 #define INIT_GOLD 0 257 #define INIT_CHAR '@' 258 #define INIT_MOVES 1250 259 260 struct fightr { 261 object *armor; 262 object *weapon; 263 object *left_ring, *right_ring; 264 short hp_current; 265 short hp_max; 266 short str_current; 267 short str_max; 268 object pack; 269 long gold; 270 short exp; 271 long exp_points; 272 short row, col; 273 short fchar; 274 short moves_left; 275 }; 276 277 typedef struct fightr fighter; 278 279 struct dr { 280 short oth_room; 281 short oth_row, 282 oth_col; 283 short door_row, 284 door_col; 285 }; 286 287 typedef struct dr door; 288 289 struct rm { 290 short bottom_row, right_col, left_col, top_row; 291 door doors[4]; 292 unsigned short is_room; 293 }; 294 295 typedef struct rm room; 296 297 #define MAXROOMS 9 298 #define BIG_ROOM 10 299 300 #define NO_ROOM -1 301 302 #define PASSAGE -3 /* cur_room value */ 303 304 #define AMULET_LEVEL 26 305 306 #define R_NOTHING ((unsigned short) 01) 307 #define R_ROOM ((unsigned short) 02) 308 #define R_MAZE ((unsigned short) 04) 309 #define R_DEADEND ((unsigned short) 010) 310 #define R_CROSS ((unsigned short) 020) 311 312 #define MAX_EXP_LEVEL 21 313 #define MAX_EXP 10000001L 314 #define MAX_GOLD 999999 315 #define MAX_ARMOR 99 316 #define MAX_HP 999 317 #define MAX_STRENGTH 99 318 #define LAST_DUNGEON 99 319 320 #define STAT_LEVEL 01 321 #define STAT_GOLD 02 322 #define STAT_HP 04 323 #define STAT_STRENGTH 010 324 #define STAT_ARMOR 020 325 #define STAT_EXP 040 326 #define STAT_HUNGER 0100 327 #define STAT_LABEL 0200 328 #define STAT_ALL 0377 329 330 #define PARTY_TIME 10 /* one party somewhere in each 10 level span */ 331 332 #define MAX_TRAPS 10 /* maximum traps per level */ 333 334 #define HIDE_PERCENT 12 335 336 struct tr { 337 short trap_type; 338 short trap_row, trap_col; 339 }; 340 341 typedef struct tr trap; 342 343 extern fighter rogue; 344 extern room rooms[]; 345 extern trap traps[]; 346 extern unsigned short dungeon[DROWS][DCOLS]; 347 extern object level_objects; 348 349 extern struct id id_scrolls[]; 350 extern struct id id_potions[]; 351 extern struct id id_wands[]; 352 extern struct id id_rings[]; 353 extern struct id id_weapons[]; 354 extern struct id id_armors[]; 355 356 extern object mon_tab[]; 357 extern object level_monsters; 358 359 #define MONSTERS 26 360 361 #define HASTED 01L 362 #define SLOWED 02L 363 #define INVISIBLE 04L 364 #define ASLEEP 010L 365 #define WAKENS 020L 366 #define WANDERS 040L 367 #define FLIES 0100L 368 #define FLITS 0200L 369 #define CAN_FLIT 0400L /* can, but usually doesn't, flit */ 370 #define CONFUSED 01000L 371 #define RUSTS 02000L 372 #define HOLDS 04000L 373 #define FREEZES 010000L 374 #define STEALS_GOLD 020000L 375 #define STEALS_ITEM 040000L 376 #define STINGS 0100000L 377 #define DRAINS_LIFE 0200000L 378 #define DROPS_LEVEL 0400000L 379 #define SEEKS_GOLD 01000000L 380 #define FREEZING_ROGUE 02000000L 381 #define RUST_VANISHED 04000000L 382 #define CONFUSES 010000000L 383 #define IMITATES 020000000L 384 #define FLAMES 040000000L 385 #define STATIONARY 0100000000L /* damage will be 1,2,3,... */ 386 #define NAPPING 0200000000L /* can't wake up for a while */ 387 #define ALREADY_MOVED 0400000000L 388 389 #define SPECIAL_HIT (RUSTS|HOLDS|FREEZES|STEALS_GOLD|STEALS_ITEM|STINGS|DRAINS_LIFE|DROPS_LEVEL) 390 391 #define WAKE_PERCENT 45 392 #define FLIT_PERCENT 40 393 #define PARTY_WAKE_PERCENT 75 394 395 #define HYPOTHERMIA 1 396 #define STARVATION 2 397 #define POISON_DART 3 398 #define QUIT 4 399 #define WIN 5 400 #define KFIRE 6 401 402 #define UPWARD 0 403 #define UPRIGHT 1 404 #define RIGHT 2 405 #define DOWNRIGHT 3 406 #define DOWN 4 407 #define DOWNLEFT 5 408 #define LEFT 6 409 #define UPLEFT 7 410 #define DIRS 8 411 412 #define ROW1 7 413 #define ROW2 15 414 415 #define COL1 26 416 #define COL2 52 417 418 #define MOVED 0 419 #define MOVE_FAILED -1 420 #define STOPPED_ON_SOMETHING -2 421 #define CANCEL '\033' 422 #define LIST '*' 423 424 #define HUNGRY 300 425 #define WEAK 150 426 #define FAINT 20 427 #define STARVE 0 428 429 #define MIN_ROW 1 430 431 struct rogue_time { 432 short year; /* >= 1987 */ 433 short month; /* 1 - 12 */ 434 short day; /* 1 - 31 */ 435 short hour; /* 0 - 23 */ 436 short minute; /* 0 - 59 */ 437 short second; /* 0 - 59 */ 438 }; 439 440 #include <curses.h> 441 442 /* 443 * external routine declarations. 444 */ 445 #include <stdio.h> 446 #include <string.h> 447 #include <sys/types.h> 448 #include <unistd.h> 449 450 object *alloc_object __P((void)); 451 object *check_duplicate __P((object *, object *)); 452 const char *get_ench_color __P((void)); 453 object *get_letter_object __P((int)); 454 object *get_thrown_at_monster __P((object *, short, short *, short *)); 455 object *get_zapped_monster __P((short, short *, short *)); 456 object *gr_monster __P((object *, int)); 457 object *gr_object __P((void)); 458 char *md_getenv __P((const char *)); 459 const char * 460 md_gln __P((void)); 461 char *md_malloc __P((int)); 462 const char *mon_name __P((const object *)); 463 const char *name_of __P((const object *)); 464 object *object_at __P((object *, short, short)); 465 object *pick_up __P((int, int, short *)); 466 void add_exp __P((int, boolean)); 467 void add_mazes __P((void)); 468 void add_traps __P((void)); 469 void aggravate __P((void)); 470 void aim_monster __P((object *)); 471 void bounce __P((short, short, short, short, short)); 472 void byebye __P((int)); 473 void c_object_for_wizard __P((void)); 474 void call_it __P((void)); 475 boolean can_move __P((int, int, int, int)); 476 boolean can_turn __P((int, int)); 477 void center __P((short, const char *)); 478 void check_gold_seeker __P((object *)); 479 boolean check_hunger __P((boolean)); 480 boolean check_imitator __P((object *)); 481 void check_message __P((void)); 482 int check_up __P((void)); 483 void clean_up __P((const char *)) __attribute__((__noreturn__)); 484 void clear_level __P((void)); 485 void cnfs __P((void)); 486 int coin_toss __P((void)); 487 int connect_rooms __P((short, short)); 488 void cough_up __P((object *)); 489 void create_monster __P((void)); 490 int damage_for_strength __P((void)); 491 void darken_room __P((short)); 492 void disappear __P((object *)); 493 void do_args __P((int, char **)); 494 void do_opts __P((void)); 495 void do_put_on __P((object *, boolean)); 496 void do_shell __P((void)); 497 void do_wear __P((object *)); 498 void do_wield __P((object *)); 499 void dr_course __P((object *, boolean, short, short)); 500 void drain_life __P((void)); 501 void draw_magic_map __P((void)); 502 void draw_simple_passage __P((short, short, short, short, short)); 503 void drop __P((void)); 504 int drop_check __P((void)); 505 void drop_level __P((void)); 506 void eat __P((void)); 507 void edit_opts __P((void)); 508 void env_get_value __P((char **, char *, boolean)); 509 void error_save __P((int)) __attribute__((__noreturn__)); 510 void fight __P((int)); 511 void fill_it __P((int, boolean)); 512 void fill_out_level __P((void)); 513 boolean flame_broil __P((object *)); 514 int flit __P((object *)); 515 void flop_weapon __P((object *, short, short)); 516 void free_object __P((object *)); 517 void free_stuff __P((object *)); 518 void freeze __P((object *)); 519 int get_armor_class __P((const object *)); 520 int get_com_id __P((int *, short)); 521 int get_damage __P((const char *, boolean)); 522 void get_desc __P((const object *, char *)); 523 int get_dir __P((short, short, short, short)); 524 void get_dir_rc __P((short, short *, short *, short)); 525 char get_dungeon_char __P((short, short)); 526 int get_exp_level __P((long)); 527 void get_food __P((object *, boolean)); 528 int get_hit_chance __P((const object *)); 529 int get_input_line __P((const char *, const char *, char *, const char *, boolean, boolean)); 530 char get_mask_char __P((unsigned short)); 531 int get_number __P((const char *)); 532 boolean get_oth_room __P((short, short *, short *)); 533 int get_rand __P((int, int)); 534 short get_room_number __P((int, int)); 535 int get_value __P((const object *)); 536 int get_w_damage __P((const object *)); 537 void get_wand_and_ring_materials __P((void)); 538 int get_weapon_damage __P((const object *)); 539 char gmc __P((object *)); 540 char gmc_row_col __P((int, int)); 541 void go_blind __P((void)); 542 boolean gold_at __P((int, int)); 543 void gr_armor __P((object *)); 544 char gr_dir __P((void)); 545 char gr_obj_char __P((void)); 546 void gr_potion __P((object *)); 547 void gr_ring __P((object *, boolean)); 548 short gr_room __P((void)); 549 void gr_row_col __P((short *, short *, unsigned short)); 550 void gr_scroll __P((object *)); 551 void gr_wand __P((object *)); 552 void gr_weapon __P((object *, int)); 553 void hallucinate __P((void)); 554 boolean has_amulet __P((void)); 555 boolean has_been_touched __P((const struct rogue_time *, const struct rogue_time *)); 556 void heal __P((void)); 557 void hide_boxed_passage __P((int, int, int, int, int)); 558 void hold_monster __P((void)); 559 int hp_raise __P((void)); 560 void id_all __P((void)); 561 void id_com __P((void)); 562 void id_trap __P((void)); 563 void id_type __P((void)); 564 void idntfy __P((void)); 565 boolean imitating __P((int, int)); 566 int init __P((int, char **)); 567 void init_str __P((char **, const char *)); 568 void insert_score __P((char [][], char [][], const char *, short, short, const object *, int)); 569 void inv_armor_weapon __P((boolean)); 570 void inv_rings __P((void)); 571 void inventory __P((const object *, unsigned short)); 572 boolean is_all_connected __P((void)); 573 boolean is_digit __P((int)); 574 boolean is_direction __P((short, short *)); 575 boolean is_pack_letter __P((short *, unsigned short *)); 576 boolean is_passable __P((int, int)); 577 boolean is_vowel __P((short)); 578 void kick_into_pack __P((void)); 579 void killed_by __P((const object *, short)) __attribute__((__noreturn__)); 580 long lget_number __P((const char *)); 581 void light_passage __P((int, int)); 582 void light_up_room __P((int)); 583 boolean m_confuse __P((object *)); 584 void make_level __P((void)); 585 void make_maze __P((short, short, short, short, short, short)); 586 void make_party __P((void)); 587 void make_room __P((short, short, short, short)); 588 void make_scroll_titles __P((void)); 589 boolean mask_pack __P((const object *, unsigned short)); 590 boolean mask_room __P((short, short *, short *, unsigned short)); 591 boolean md_df __P((const char *)); 592 void md_exit __P((int)) __attribute__((__noreturn__)); 593 void md_gct __P((struct rogue_time *)); 594 int md_get_file_id __P((const char *)); 595 void md_gfmt __P((const char *, struct rogue_time *)); 596 int md_gseed __P((void)); 597 void md_heed_signals __P((void)); 598 void md_ignore_signals __P((void)); 599 int md_link_count __P((const char *)); 600 void md_lock __P((boolean)); 601 void md_shell __P((const char *)); 602 void md_sleep __P((int)); 603 void md_slurp __P((void)); 604 void message __P((const char *, boolean)); 605 void mix_colors __P((void)); 606 void mix_random_rooms __P((void)); 607 int mon_can_go __P((const object *, int, int)); 608 int mon_damage __P((object *, short)); 609 void mon_hit __P((object *)); 610 boolean mon_sees __P((const object *, int, int)); 611 int move_confused __P((object *)); 612 void move_mon_to __P((object *, int, int)); 613 void move_onto __P((void)); 614 int mtry __P((object *, int, int)); 615 void multiple_move_rogue __P((short)); 616 void mv_1_monster __P((object *, int, int)); 617 void mv_aquatars __P((void)); 618 void mv_mons __P((void)); 619 int name_cmp __P((char *, const char *)); 620 short next_avail_ichar __P((void)); 621 boolean next_to_something __P((int, int)); 622 void nickize __P((char *, const char *, const char *)); 623 int no_room_for_monster __P((int)); 624 int one_move_rogue __P((short, short)); 625 void onintr __P((int)); 626 void opt_erase __P((int)); 627 void opt_go __P((int)); 628 void opt_show __P((int)); 629 short pack_count __P((const object *)); 630 short pack_letter __P((const char *, unsigned short)); 631 void pad __P((const char *, short)); 632 void party_monsters __P((int, int)); 633 short party_objects __P((int)); 634 void place_at __P((object *, int, int)); 635 void plant_gold __P((int, int, boolean)); 636 void play_level __P((void)); 637 void player_init __P((void)); 638 void potion_heal __P((int)); 639 int pr_com_id __P((int)); 640 int pr_motion_char __P((int)); 641 void print_stats __P((int)); 642 void put_amulet __P((void)); 643 void put_door __P((room *, short, short *, short *)); 644 void put_gold __P((void)); 645 void put_m_at __P((int, int, object *)); 646 void put_mons __P((void)); 647 void put_objects __P((void)); 648 void put_on_ring __P((void)); 649 void put_player __P((short)); 650 void put_scores __P((const object *, short)) __attribute__((__noreturn__)); 651 void put_stairs __P((void)); 652 void quaff __P((void)); 653 void quit __P((boolean)); 654 int r_index __P((const char *, int, boolean)); 655 void r_read __P((FILE *, char *, int)); 656 void r_write __P((FILE *, const char *, int)); 657 void rand_around __P((short, short *, short *)); 658 int rand_percent __P((int)); 659 void rand_place __P((object *)); 660 void read_pack __P((object *, FILE *, boolean)); 661 void read_scroll __P((void)); 662 void read_string __P((char *, FILE *, size_t)); 663 void recursive_deadend __P((short, const short *, short, short)); 664 boolean reg_move __P((void)); 665 void relight __P((void)); 666 void remessage __P((short)); 667 void remove_ring __P((void)); 668 void rest __P((int)); 669 void restore __P((const char *)); 670 int rgetchar __P((void)); 671 void ring_stats __P((boolean)); 672 int rogue_can_see __P((int, int)); 673 void rogue_damage __P((short, object *, short)); 674 void rogue_hit __P((object *, boolean)); 675 int rogue_is_around __P((int, int)); 676 long rrandom __P((void)); 677 void rust __P((object *)); 678 void rw_dungeon __P((FILE *, boolean)); 679 void rw_id __P((struct id *, FILE *, int, boolean)); 680 void rw_rooms __P((FILE *, boolean)); 681 void s_con_mon __P((object *)); 682 int same_col __P((int, int)); 683 int same_row __P((int, int)); 684 void save_game __P((void)); 685 void save_into_file __P((const char *)); 686 void save_screen __P((void)); 687 void search __P((short, boolean)); 688 boolean seek_gold __P((object *)); 689 void sell_pack __P((void)); 690 void sf_error __P((void)) __attribute__((__noreturn__)); 691 void show_average_hp __P((void)); 692 void show_monsters __P((void)); 693 void show_objects __P((void)); 694 void show_traps __P((void)); 695 void single_inv __P((short)); 696 void sound_bell __P((void)); 697 void special_hit __P((object *)); 698 void srrandom __P((int)); 699 void start_window __P((void)); 700 void steal_gold __P((object *)); 701 void steal_item __P((object *)); 702 void sting __P((object *)); 703 void stop_window __P((void)); 704 void take_a_nap __P((void)); 705 void take_from_pack __P((object *, object *)); 706 void take_off __P((void)); 707 void tele __P((void)); 708 void tele_away __P((object *)); 709 void throw __P((void)); 710 boolean throw_at_monster __P((object *, object *)); 711 int to_hit __P((const object *)); 712 short trap_at __P((int, int)); 713 void trap_player __P((int, int)); 714 boolean try_to_cough __P((short, short, object *)); 715 void turn_passage __P((short, boolean)); 716 void un_put_on __P((object *)); 717 void unblind __P((void)); 718 void unconfuse __P((void)); 719 void uncurse_all __P((void)); 720 void unhallucinate __P((void)); 721 void unwear __P((object *)); 722 void unwield __P((object *)); 723 void vanish __P((object *, short, object *)); 724 void visit_rooms __P((int)); 725 void wait_for_ack __P((void)); 726 void wake_room __P((short, boolean, short, short)); 727 void wake_up __P((object *)); 728 void wanderer __P((void)); 729 void wdrain_life __P((object *)); 730 void wear __P((void)); 731 void wield __P((void)); 732 void win __P((void)) __attribute__((__noreturn__)); 733 void wizardize __P((void)); 734 void write_pack __P((const object *, FILE *)); 735 void write_string __P((char *, FILE *)); 736 long xxx __P((boolean)); 737 void xxxx __P((char *, short)); 738 void zap_monster __P((object *, unsigned short)); 739 void zapp __P((void)); 740 object *add_to_pack __P((object *, object *, int)); 741 struct id *get_id_table __P((const object *)); 742 unsigned short gr_what_is __P((void)); 743 744 extern boolean ask_quit; 745 extern boolean being_held; 746 extern boolean cant_int; 747 extern boolean con_mon; 748 extern boolean detect_monster; 749 extern boolean did_int; 750 extern boolean interrupted; 751 extern boolean is_wood[]; 752 extern boolean jump; 753 extern boolean maintain_armor; 754 extern boolean mon_disappeared; 755 extern boolean msg_cleared; 756 extern boolean no_skull; 757 extern boolean passgo; 758 extern boolean r_see_invisible; 759 extern boolean r_teleport; 760 extern boolean save_is_interactive; 761 extern boolean score_only; 762 extern boolean see_invisible; 763 extern boolean sustain_strength; 764 extern boolean trap_door; 765 extern boolean wizard; 766 extern char hit_message[]; 767 #define HUNGER_STR_LEN 8 768 extern char hunger_str[HUNGER_STR_LEN]; 769 extern char login_name[MAX_OPT_LEN]; 770 extern const char *byebye_string; 771 extern const char *curse_message; 772 extern const char *error_file; 773 extern char *fruit; 774 extern const char *const m_names[]; 775 extern const char *more; 776 extern const char *new_level_message; 777 extern char *nick_name; 778 extern const char *press_space; 779 extern char *save_file; 780 extern const char *you_can_move_again; 781 extern const long level_points[]; 782 extern short add_strength; 783 extern short auto_search; 784 extern short bear_trap; 785 extern short blind; 786 extern short confused; 787 extern short cur_level; 788 extern short cur_room; 789 extern short e_rings; 790 extern short extra_hp; 791 extern short foods; 792 extern short halluc; 793 extern short haste_self; 794 extern short less_hp; 795 extern short levitate; 796 extern short m_moves; 797 extern short max_level; 798 extern short party_room; 799 extern short r_rings; 800 extern short regeneration; 801 extern short ring_exp; 802 extern short stealthy; 803 extern gid_t gid; 804 extern gid_t egid; 805