2017-01-31 19:56:04 -05:00
|
|
|
/*
|
|
|
|
|
rogue.h - A very large header file
|
|
|
|
|
|
|
|
|
|
UltraRogue: The Ultimate Adventure in the Dungeons of Doom
|
|
|
|
|
Copyright (C) 1984, 1991, 1997 Herb Chong
|
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
|
|
Based on "Advanced Rogue"
|
|
|
|
|
Copyright (C) 1984, 1985 Michael Morgan, Ken Dalka
|
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
|
|
Based on "Rogue: Exploring the Dungeons of Doom"
|
|
|
|
|
Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
|
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
|
|
See the file LICENSE.TXT for full copyright and licensing information.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
|
|
#ifndef LINT
|
|
|
|
|
#include <curses.h>
|
|
|
|
|
#else
|
|
|
|
|
#include "lint-curses.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define SHOTPENALTY 2 /* In line of sight of missile */
|
|
|
|
|
#define DOORPENALTY 1 /* Moving out of current room */
|
|
|
|
|
|
|
|
|
|
/* Maximum number of different things */
|
|
|
|
|
#define MAXROOMS 9 /* max rooms per normal level */
|
|
|
|
|
#define MAXDOORS 4 /* max doors to a room */
|
|
|
|
|
#define MAXOBJ 6 /* max number of items to find on a level */
|
|
|
|
|
#define MAXTREAS 30 /* max number monsters/treasure in treasure room */
|
|
|
|
|
#define MAXTRAPS 80 /* max traps per level */
|
|
|
|
|
#define MAXTRPTRY 16 /* max attempts/level allowed for setting traps */
|
|
|
|
|
#define MAXPURCH 8 /* max purchases per trading post visit */
|
|
|
|
|
#define NUMMONST (sizeof(monsters) / sizeof(struct monster) - 2)
|
|
|
|
|
#define NUMSUMMON 48 /* number of creatures that can summon hero */
|
|
|
|
|
#define NLEVMONS 8 /* number of new monsters per level */
|
|
|
|
|
#define LINELEN 512 /* characters in a buffer */
|
|
|
|
|
|
|
|
|
|
/* The character types */
|
|
|
|
|
#define C_FIGHTER 0
|
|
|
|
|
#define C_PALADIN 1
|
|
|
|
|
#define C_RANGER 2
|
|
|
|
|
#define C_CLERIC 3
|
|
|
|
|
#define C_DRUID 4
|
|
|
|
|
#define C_MAGICIAN 5
|
|
|
|
|
#define C_ILLUSION 6
|
|
|
|
|
#define C_THIEF 7
|
|
|
|
|
#define C_ASSASIN 8
|
|
|
|
|
#define C_NINJA 9
|
|
|
|
|
#define C_MONSTER 10
|
|
|
|
|
#define C_NOTSET 11 /* Must not be a value from above */
|
|
|
|
|
|
|
|
|
|
/* used for ring stuff */
|
|
|
|
|
#define LEFT_1 0
|
|
|
|
|
#define LEFT_2 1
|
|
|
|
|
#define LEFT_3 2
|
|
|
|
|
#define LEFT_4 3
|
|
|
|
|
#define LEFT_5 4
|
|
|
|
|
#define RIGHT_1 5
|
|
|
|
|
#define RIGHT_2 6
|
|
|
|
|
#define RIGHT_3 7
|
|
|
|
|
#define RIGHT_4 8
|
|
|
|
|
#define RIGHT_5 9
|
|
|
|
|
|
|
|
|
|
/* All the fun defines */
|
|
|
|
|
#define next(ptr) ((ptr)?(ptr->l_next):NULL)
|
|
|
|
|
#define prev(ptr) ((ptr)?(ptr->l_prev):NULL)
|
|
|
|
|
#define identifier(ptr) (ptr->o_ident)
|
|
|
|
|
#define winat(y,x) ( (char) \
|
|
|
|
|
((mvwinch(mw,y,x) == ' ') ? mvwinch(stdscr,y,x) : winch(mw)) )
|
|
|
|
|
|
|
|
|
|
#define debug if (wizard && wiz_verbose) msg
|
|
|
|
|
#define verify(b) if (b) verify_function(__FILE__, __LINE__);
|
|
|
|
|
#define DISTANCE(c1, c2) ( ((c2).x - (c1).x)*((c2).x - (c1).x) + \
|
|
|
|
|
((c2).y - (c1).y)*((c2).y - (c1).y) )
|
|
|
|
|
|
|
|
|
|
#define xyDISTANCE(y1, x1, y2, x2) ((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1))
|
|
|
|
|
#define OBJPTR(what) ((*what).data.obj)
|
|
|
|
|
#define THINGPTR(what) ((*what).data.th)
|
|
|
|
|
#define ce(a, b) ((a).x == (b).x && (a).y == (b).y)
|
|
|
|
|
#define hero player.t_pos
|
|
|
|
|
#define pstats player.t_stats
|
|
|
|
|
#define max_stats player.maxstats
|
|
|
|
|
#define pack player.t_pack
|
|
|
|
|
#define attach(a, b) _attach(&a, b)
|
|
|
|
|
#define detach(a, b) _detach(&a, b)
|
|
|
|
|
#define free_list(a) _free_list(&a)
|
|
|
|
|
#ifndef max
|
|
|
|
|
#define max(a, b) ((a) > (b) ? (a) : (b))
|
|
|
|
|
#define min(a, b) ((a) < (b) ? (a) : (b))
|
|
|
|
|
#endif
|
|
|
|
|
#define GOLDCALC (rnd(50 + 30 * level) + 2)
|
|
|
|
|
#define o_charges o_ac
|
|
|
|
|
#define mi_wght mi_worth
|
|
|
|
|
|
|
|
|
|
/* Things that appear on the screens */
|
|
|
|
|
#define WALL ' '
|
|
|
|
|
#define PASSAGE '#'
|
|
|
|
|
#define DOOR '+'
|
|
|
|
|
#define FLOOR '.'
|
|
|
|
|
#define VPLAYER '@'
|
|
|
|
|
#define IPLAYER '_'
|
|
|
|
|
#define POST '^'
|
|
|
|
|
#define LAIR '('
|
|
|
|
|
#define RUSTTRAP ';'
|
|
|
|
|
#define TRAPDOOR '>'
|
|
|
|
|
#define ARROWTRAP '{'
|
|
|
|
|
#define SLEEPTRAP '$'
|
|
|
|
|
#define BEARTRAP '}'
|
|
|
|
|
#define TELTRAP '~'
|
|
|
|
|
#define DARTTRAP '`'
|
|
|
|
|
#define POOL '"'
|
|
|
|
|
#define MAZETRAP '\\'
|
|
|
|
|
#define FIRETRAP '<'
|
|
|
|
|
#define POISONTRAP '['
|
|
|
|
|
#define ARTIFACT ','
|
|
|
|
|
#define SECRETDOOR '&'
|
|
|
|
|
#define STAIRS '%'
|
|
|
|
|
#define GOLD '*'
|
|
|
|
|
#define POTION '!'
|
|
|
|
|
#define SCROLL '?'
|
|
|
|
|
#define MAGIC '$'
|
|
|
|
|
#define BMAGIC '>' /* Blessed magic */
|
|
|
|
|
#define CMAGIC '<' /* Cursed magic */
|
|
|
|
|
#define FOOD ':'
|
|
|
|
|
#define WEAPON ')'
|
|
|
|
|
#define ARMOR ']'
|
|
|
|
|
#define RING '='
|
|
|
|
|
#define STICK '/'
|
|
|
|
|
|
|
|
|
|
/* Various constants */
|
|
|
|
|
#define HOLDTIME 2
|
|
|
|
|
#define BEARTIME 3
|
|
|
|
|
#define SLEEPTIME 4
|
|
|
|
|
#define FREEZETIME 6
|
|
|
|
|
#define STINKTIME 6
|
|
|
|
|
#define CHILLTIME (roll(2, 4))
|
|
|
|
|
#define STONETIME 8
|
|
|
|
|
#define SICKTIME 10
|
|
|
|
|
#define CLRDURATION 15
|
|
|
|
|
#define HUHDURATION 20
|
|
|
|
|
#define SMELLTIME 20
|
|
|
|
|
#define HEROTIME 20
|
|
|
|
|
#define HEALTIME 30
|
|
|
|
|
#define WANDERTIME 140
|
|
|
|
|
#define GONETIME 200
|
|
|
|
|
#define PHASEDURATION 300
|
|
|
|
|
#define SEEDURATION 850
|
|
|
|
|
|
|
|
|
|
#define STPOS 0
|
|
|
|
|
#define BEFORE 1
|
|
|
|
|
#define AFTER 2
|
|
|
|
|
|
|
|
|
|
#define MORETIME 150
|
|
|
|
|
#define HUNGERTIME 1300
|
|
|
|
|
#define STOMACHSIZE 2000
|
|
|
|
|
|
|
|
|
|
#define BOLT_LENGTH 10
|
|
|
|
|
#define MARKLEN 20
|
|
|
|
|
|
|
|
|
|
#define LINEFEED 10
|
|
|
|
|
#define CARRIAGE_RETURN 13
|
|
|
|
|
#define ESCAPE 27
|
|
|
|
|
|
|
|
|
|
/* Adjustments for save against things */
|
|
|
|
|
#define VS_POISON 0
|
|
|
|
|
#define VS_PARALYZATION 0
|
|
|
|
|
#define VS_DEATH 0
|
|
|
|
|
#define VS_PETRIFICATION 1
|
|
|
|
|
#define VS_WAND 2
|
|
|
|
|
#define VS_BREATH 3
|
|
|
|
|
#define VS_MAGIC 4
|
|
|
|
|
|
|
|
|
|
/*attributes for treasures in dungeon */
|
|
|
|
|
#define ISNORMAL 0x00000000UL /* Neither blessed nor cursed */
|
|
|
|
|
#define ISCURSED 0x00000001UL /* cursed */
|
|
|
|
|
#define ISKNOW 0x00000002UL /* has been identified */
|
|
|
|
|
#define ISPOST 0x00000004UL /* object is in a trading post */
|
|
|
|
|
#define ISMETAL 0x00000008UL /* is metallic */
|
|
|
|
|
#define ISPROT 0x00000010UL /* object is protected */
|
|
|
|
|
#define ISBLESSED 0x00000020UL /* blessed */
|
|
|
|
|
#define ISZAPPED 0x00000040UL /* weapon has been charged by dragon */
|
|
|
|
|
#define ISVORPED 0x00000080UL /* vorpalized weapon */
|
|
|
|
|
#define ISSILVER 0x00000100UL /* silver weapon */
|
|
|
|
|
#define ISPOISON 0x00000200UL /* poisoned weapon */
|
|
|
|
|
#define CANRETURN 0x00000400UL /* weapon returns if misses */
|
|
|
|
|
#define ISOWNED 0x00000800UL /* weapon returns always */
|
|
|
|
|
#define ISLOST 0x00001000UL /* weapon always disappears */
|
|
|
|
|
#define ISMISL 0x00002000UL /* missile weapon */
|
|
|
|
|
#define ISMANY 0x00004000UL /* show up in a group */
|
|
|
|
|
#define CANBURN 0x00008000UL /* burns monsters */
|
|
|
|
|
#define ISSHARP 0x00010000UL /* cutting edge */
|
|
|
|
|
#define ISTWOH 0x00020000UL /* needs two hands to wield */
|
|
|
|
|
#define ISLITTLE 0x00040000UL /* small weapon */
|
|
|
|
|
#define ISLAUNCHER 0x00080000UL /* used to throw other weapons */
|
|
|
|
|
#define TYP_MAGIC_MASK 0x0f000000UL
|
|
|
|
|
#define POT_MAGIC 0x01000000UL
|
|
|
|
|
#define SCR_MAGIC 0x02000000UL
|
|
|
|
|
#define ZAP_MAGIC 0x04000000UL
|
|
|
|
|
#define SP_WIZARD 0x10000000UL /* only wizards */
|
|
|
|
|
#define SP_ILLUSION 0x20000000UL /* only illusionists */
|
|
|
|
|
#define SP_CLERIC 0x40000000UL /* only clerics/paladins */
|
|
|
|
|
#define SP_DRUID 0x80000000UL /* only druids/rangers */
|
|
|
|
|
#define SP_MAGIC 0x30000000UL /* wizard or illusionist */
|
|
|
|
|
#define SP_PRAYER 0xc0000000UL /* cleric or druid */
|
|
|
|
|
#define SP_ALL 0xf0000000UL /* all special classes */
|
|
|
|
|
#define _TWO_ ISBLESSED /* more powerful spell */
|
|
|
|
|
|
|
|
|
|
/* Various flag bits */
|
|
|
|
|
#define ISDARK 0x00000001UL
|
|
|
|
|
#define ISGONE 0x00000002UL
|
|
|
|
|
#define ISTREAS 0x00000004UL
|
|
|
|
|
#define ISFOUND 0x00000008UL
|
|
|
|
|
#define ISTHIEFSET 0x00000010UL
|
|
|
|
|
#define WASDARK 0x00000020UL
|
|
|
|
|
|
|
|
|
|
/* struct thing t_flags (might include player) for monster attributes */
|
|
|
|
|
#define ISBLIND 0x00000001UL
|
|
|
|
|
#define ISINWALL 0x00000002UL
|
|
|
|
|
#define ISRUN 0x00000004UL
|
|
|
|
|
#define ISFLEE 0x00000008UL
|
|
|
|
|
#define ISINVIS 0x00000010UL
|
|
|
|
|
#define ISMEAN 0x00000020UL
|
|
|
|
|
#define ISGREED 0x00000040UL
|
|
|
|
|
#define CANSHOOT 0x00000080UL
|
|
|
|
|
#define ISHELD 0x00000100UL
|
|
|
|
|
#define ISHUH 0x00000200UL
|
|
|
|
|
#define ISREGEN 0x00000400UL
|
|
|
|
|
#define CANHUH 0x00000800UL
|
|
|
|
|
#define CANSEE 0x00001000UL
|
|
|
|
|
#define HASFIRE 0x00002000UL
|
|
|
|
|
#define ISSLOW 0x00004000UL
|
|
|
|
|
#define ISHASTE 0x00008000UL
|
|
|
|
|
#define ISCLEAR 0x00010000UL
|
|
|
|
|
#define CANINWALL 0x00020000UL
|
|
|
|
|
#define ISDISGUISE 0x00040000UL
|
|
|
|
|
#define CANBLINK 0x00080000UL
|
|
|
|
|
#define CANSNORE 0x00100000UL
|
|
|
|
|
#define HALFDAMAGE 0x00200000UL
|
|
|
|
|
#define CANSUCK 0x00400000UL
|
|
|
|
|
#define CANRUST 0x00800000UL
|
|
|
|
|
#define CANPOISON 0x01000000UL
|
|
|
|
|
#define CANDRAIN 0x02000000UL
|
|
|
|
|
#define ISUNIQUE 0x04000000UL
|
|
|
|
|
#define STEALGOLD 0x08000000UL
|
|
|
|
|
#define STEALMAGIC 0x10000001UL
|
|
|
|
|
#define CANDISEASE 0x10000002UL
|
|
|
|
|
#define HASDISEASE 0x10000004UL
|
|
|
|
|
#define CANSUFFOCATE 0x10000008UL
|
|
|
|
|
#define DIDSUFFOCATE 0x10000010UL
|
|
|
|
|
#define BOLTDIVIDE 0x10000020UL
|
|
|
|
|
#define BLOWDIVIDE 0x10000040UL
|
|
|
|
|
#define NOCOLD 0x10000080UL
|
|
|
|
|
#define TOUCHFEAR 0x10000100UL
|
|
|
|
|
#define BMAGICHIT 0x10000200UL
|
|
|
|
|
#define NOFIRE 0x10000400UL
|
|
|
|
|
#define NOBOLT 0x10000800UL
|
|
|
|
|
#define CARRYGOLD 0x10001000UL
|
|
|
|
|
#define CANITCH 0x10002000UL
|
|
|
|
|
#define HASITCH 0x10004000UL
|
|
|
|
|
#define DIDDRAIN 0x10008000UL
|
|
|
|
|
#define WASTURNED 0x10010000UL
|
|
|
|
|
#define CANSELL 0x10020000UL
|
|
|
|
|
#define CANBLIND 0x10040000UL
|
|
|
|
|
#define CANBBURN 0x10080000UL
|
|
|
|
|
#define ISCHARMED 0x10100000UL
|
|
|
|
|
#define CANSPEAK 0x10200000UL
|
|
|
|
|
#define CANFLY 0x10400000UL
|
|
|
|
|
#define ISFRIENDLY 0x10800000UL
|
|
|
|
|
#define CANHEAR 0x11000000UL
|
|
|
|
|
#define ISDEAF 0x12000000UL
|
|
|
|
|
#define CANSCENT 0x14000000UL
|
|
|
|
|
#define ISUNSMELL 0x18000000UL
|
|
|
|
|
#define WILLRUST 0x20000001UL
|
|
|
|
|
#define WILLROT 0x20000002UL
|
|
|
|
|
#define SUPEREAT 0x20000004UL
|
|
|
|
|
#define PERMBLIND 0x20000008UL
|
|
|
|
|
#define MAGICHIT 0x20000010UL
|
|
|
|
|
#define CANINFEST 0x20000020UL
|
|
|
|
|
#define HASINFEST 0x20000040UL
|
|
|
|
|
#define NOMOVE 0x20000080UL
|
|
|
|
|
#define CANSHRIEK 0x20000100UL
|
|
|
|
|
#define CANDRAW 0x20000200UL
|
|
|
|
|
#define CANSMELL 0x20000400UL
|
|
|
|
|
#define CANPARALYZE 0x20000800UL
|
|
|
|
|
#define CANROT 0x20001000UL
|
|
|
|
|
#define ISSCAVENGE 0x20002000UL
|
|
|
|
|
#define DOROT 0x20004000UL
|
|
|
|
|
#define CANSTINK 0x20008000UL
|
|
|
|
|
#define HASSTINK 0x20010000UL
|
|
|
|
|
#define ISSHADOW 0x20020000UL
|
|
|
|
|
#define CANCHILL 0x20040000UL
|
|
|
|
|
#define CANHUG 0x20080000UL
|
|
|
|
|
#define CANSURPRISE 0x20100000UL
|
|
|
|
|
#define CANFRIGHTEN 0x20200000UL
|
|
|
|
|
#define CANSUMMON 0x20400000UL
|
|
|
|
|
#define TOUCHSTONE 0x20800000UL
|
|
|
|
|
#define LOOKSTONE 0x21000000UL
|
|
|
|
|
#define CANHOLD 0x22000000UL
|
|
|
|
|
#define DIDHOLD 0x24000000UL
|
|
|
|
|
#define DOUBLEDRAIN 0x28000000UL
|
|
|
|
|
#define ISUNDEAD 0x30000001UL
|
|
|
|
|
#define BLESSMAP 0x30000002UL
|
|
|
|
|
#define BLESSGOLD 0x30000004UL
|
|
|
|
|
#define BLESSMONS 0x30000008UL
|
|
|
|
|
#define BLESSMAGIC 0x30000010UL
|
|
|
|
|
#define BLESSFOOD 0x30000020UL
|
|
|
|
|
#define CANBRANDOM 0x30000040UL /* Types of breath */
|
|
|
|
|
#define CANBACID 0x30000080UL
|
|
|
|
|
#define CANBFIRE 0x30000100UL
|
|
|
|
|
#define CANBBOLT 0x30000200UL
|
|
|
|
|
#define CANBGAS 0x30000400UL
|
|
|
|
|
#define CANBICE 0x30000800UL
|
|
|
|
|
#define CANBPGAS 0x30001000UL /* Paralyze gas */
|
|
|
|
|
#define CANBSGAS 0x30002000UL /* Sleeping gas */
|
|
|
|
|
#define CANBSLGAS 0x30004000UL /* Slow gas */
|
|
|
|
|
#define CANBFGAS 0x30008000UL /* Fear gas */
|
|
|
|
|
#define CANBREATHE 0x3000ffc0UL /* Can it breathe at all? */
|
|
|
|
|
#define STUMBLER 0x30010000UL
|
|
|
|
|
#define POWEREAT 0x30020000UL
|
|
|
|
|
#define ISELECTRIC 0x30040000UL
|
|
|
|
|
#define HASOXYGEN 0x30080000UL /* Doesn't need to breath air */
|
|
|
|
|
#define POWERDEXT 0x30100000UL
|
|
|
|
|
#define POWERSTR 0x30200000UL
|
|
|
|
|
#define POWERWISDOM 0x30400000UL
|
|
|
|
|
#define POWERINTEL 0x30800000UL
|
|
|
|
|
#define POWERCONST 0x31000000UL
|
|
|
|
|
#define SUPERHERO 0x32000000UL
|
|
|
|
|
#define ISUNHERO 0x34000000UL
|
|
|
|
|
#define CANCAST 0x38000000UL
|
|
|
|
|
#define CANTRAMPLE 0x40000001UL
|
|
|
|
|
#define CANSWIM 0x40000002UL
|
|
|
|
|
#define LOOKSLOW 0x40000004UL
|
|
|
|
|
#define CANWIELD 0x40000008UL
|
|
|
|
|
#define CANDARKEN 0x40000010UL
|
|
|
|
|
#define ISFAST 0x40000020UL
|
|
|
|
|
#define CANBARGAIN 0x40000040UL
|
|
|
|
|
#define NOMETAL 0x40000080UL
|
|
|
|
|
#define CANSPORE 0x40000100UL
|
|
|
|
|
#define NOSHARP 0x40000200UL
|
|
|
|
|
#define DRAINWISDOM 0x40000400UL
|
|
|
|
|
#define DRAINBRAIN 0x40000800UL
|
|
|
|
|
#define ISLARGE 0x40001000UL
|
|
|
|
|
#define ISSMALL 0x40002000UL
|
|
|
|
|
#define CANSTAB 0x40004000UL
|
|
|
|
|
#define ISFLOCK 0x40008000UL
|
|
|
|
|
#define ISSWARM 0x40010000UL
|
|
|
|
|
#define CANSTICK 0x40020000UL
|
|
|
|
|
#define CANTANGLE 0x40040000UL
|
|
|
|
|
#define DRAINMAGIC 0x40080000UL
|
|
|
|
|
#define SHOOTNEEDLE 0x40100000UL
|
|
|
|
|
#define CANZAP 0x40200000UL
|
|
|
|
|
#define HASARMOR 0x40400000UL
|
|
|
|
|
#define CANTELEPORT 0x40800000UL
|
|
|
|
|
#define ISBERSERK 0x41000000UL
|
|
|
|
|
#define ISFAMILIAR 0x42000000UL
|
|
|
|
|
#define HASFAMILIAR 0x44000000UL
|
|
|
|
|
#define SUMMONING 0x48000000UL
|
|
|
|
|
#define CANREFLECT 0x50000001UL
|
|
|
|
|
#define LOWFRIENDLY 0x50000002UL
|
|
|
|
|
#define MEDFRIENDLY 0x50000004UL
|
|
|
|
|
#define HIGHFRIENDLY 0x50000008UL
|
|
|
|
|
#define MAGICATTRACT 0x50000010UL
|
|
|
|
|
#define ISGOD 0x50000020UL
|
|
|
|
|
#define CANLIGHT 0x50000040UL
|
|
|
|
|
#define HASSHIELD 0x50000080UL
|
|
|
|
|
#define HASMSHIELD 0x50000100UL
|
|
|
|
|
#define LOWCAST 0x50000200UL
|
|
|
|
|
#define MEDCAST 0x50000400UL
|
|
|
|
|
#define HIGHCAST 0x50000800UL
|
|
|
|
|
#define WASSUMMONED 0x50001000UL
|
|
|
|
|
#define HASSUMMONED 0x50002000UL
|
|
|
|
|
#define CANTRUESEE 0x50004000UL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define FLAGSHIFT 28UL
|
|
|
|
|
#define FLAGINDEX 0x0000000fL
|
|
|
|
|
#define FLAGMASK 0x0fffffffL
|
|
|
|
|
|
|
|
|
|
/* on - check if a monster flag is on */
|
|
|
|
|
#define on(th, flag) \
|
|
|
|
|
((th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & (flag & FLAGMASK))
|
|
|
|
|
|
|
|
|
|
/* off - check if a monster flag is off */
|
|
|
|
|
#define off(th, flag) \
|
|
|
|
|
(!((th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] & (flag & FLAGMASK)))
|
|
|
|
|
|
|
|
|
|
/* turn_on - turn on a monster flag */
|
|
|
|
|
#define turn_on(th, flag) \
|
|
|
|
|
( (th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] |= (flag & FLAGMASK))
|
|
|
|
|
|
|
|
|
|
/* turn_off - turn off a monster flag */
|
|
|
|
|
#define turn_off(th, flag) \
|
|
|
|
|
( (th).t_flags[(flag >> FLAGSHIFT) & FLAGINDEX] &= ~(flag & FLAGMASK))
|
|
|
|
|
|
|
|
|
|
#define SAME_POS(c1,c2) ( (c1.x == c2.x) && (c1.y == c2.y) )
|
|
|
|
|
|
|
|
|
|
/* types of things */
|
|
|
|
|
/* All magic spells duplicate a potion, scroll, or stick effect */
|
|
|
|
|
|
|
|
|
|
#define TYP_POTION 0
|
|
|
|
|
#define TYP_SCROLL 1
|
|
|
|
|
#define TYP_RING 2
|
|
|
|
|
#define TYP_STICK 3
|
|
|
|
|
#define MAXMAGICTYPES 4 /* max number of items in magic class */
|
|
|
|
|
#define MAXMAGICITEMS 50 /* max number of items in magic class */
|
|
|
|
|
#define TYP_FOOD 4
|
|
|
|
|
#define TYP_WEAPON 5
|
|
|
|
|
#define TYP_ARMOR 6
|
|
|
|
|
#define TYP_ARTIFACT 7
|
|
|
|
|
#define NUMTHINGS (sizeof(things) / sizeof(struct magic_item))
|
|
|
|
|
|
|
|
|
|
/* Artifact types */
|
|
|
|
|
#define TR_PURSE 0
|
|
|
|
|
#define TR_PHIAL 1
|
|
|
|
|
#define TR_AMULET 2
|
|
|
|
|
#define TR_PALANTIR 3
|
|
|
|
|
#define TR_CROWN 4
|
|
|
|
|
#define TR_SCEPTRE 5
|
|
|
|
|
#define TR_SILMARIL 6
|
|
|
|
|
#define TR_WAND 7
|
|
|
|
|
#define MAXARTIFACT (sizeof(arts) / sizeof(struct init_artifact))
|
|
|
|
|
|
|
|
|
|
/* Artifact flags */
|
|
|
|
|
#define ISUSED 01
|
|
|
|
|
#define ISACTIVE 02
|
|
|
|
|
|
|
|
|
|
/* Potion types - add also to magic_item.c and potions.c */
|
|
|
|
|
#define P_CLEAR 0
|
|
|
|
|
#define P_GAINABIL 1
|
|
|
|
|
#define P_SEEINVIS 2
|
|
|
|
|
#define P_HEALING 3
|
|
|
|
|
#define P_MONSTDET 4
|
|
|
|
|
#define P_TREASDET 5
|
|
|
|
|
#define P_RAISELEVEL 6
|
|
|
|
|
#define P_HASTE 7
|
|
|
|
|
#define P_RESTORE 8
|
|
|
|
|
#define P_PHASE 9
|
|
|
|
|
#define P_INVIS 10
|
|
|
|
|
#define P_SMELL 11
|
|
|
|
|
#define P_HEAR 12
|
|
|
|
|
#define P_SHERO 13
|
|
|
|
|
#define P_DISGUISE 14
|
|
|
|
|
#define P_FIRERESIST 15
|
|
|
|
|
#define P_COLDRESIST 16
|
|
|
|
|
#define P_HASOXYGEN 17
|
|
|
|
|
#define P_LEVITATION 18
|
|
|
|
|
#define P_REGENERATE 19
|
|
|
|
|
#define P_SHIELD 20
|
|
|
|
|
#define P_TRUESEE 21
|
|
|
|
|
#define MAXPOTIONS 22
|
|
|
|
|
|
|
|
|
|
/* Scroll types - add also to magic_item.c and scrolls.c */
|
|
|
|
|
#define S_CONFUSE 0
|
|
|
|
|
#define S_MAP 1
|
|
|
|
|
#define S_LIGHT 2
|
|
|
|
|
#define S_HOLD 3
|
|
|
|
|
#define S_SLEEP 4
|
|
|
|
|
#define S_ENCHANT 5
|
|
|
|
|
#define S_IDENTIFY 6
|
|
|
|
|
#define S_SCARE 7
|
|
|
|
|
#define S_GFIND 8
|
|
|
|
|
#define S_SELFTELEP 9
|
|
|
|
|
#define S_CREATE 10
|
|
|
|
|
#define S_REMOVECURSE 11
|
|
|
|
|
#define S_PETRIFY 12
|
|
|
|
|
#define S_GENOCIDE 13
|
|
|
|
|
#define S_CURING 14
|
|
|
|
|
#define S_MAKEITEMEM 15
|
|
|
|
|
#define S_PROTECT 16
|
|
|
|
|
#define S_NOTHING 17
|
|
|
|
|
#define S_SILVER 18
|
|
|
|
|
#define S_OWNERSHIP 19
|
|
|
|
|
#define S_FOODDET 20
|
|
|
|
|
#define S_ELECTRIFY 21
|
|
|
|
|
#define S_CHARM 22
|
|
|
|
|
#define S_SUMMON 23
|
|
|
|
|
#define S_REFLECT 24
|
|
|
|
|
#define S_SUMFAMILIAR 25
|
|
|
|
|
#define S_FEAR 26
|
|
|
|
|
#define S_MSHIELD 27
|
|
|
|
|
#define MAXSCROLLS 28
|
|
|
|
|
|
|
|
|
|
/* Rod/Wand/Staff types - add also to magic_item.c and sticks.c */
|
|
|
|
|
#define WS_LIGHT 0
|
|
|
|
|
#define WS_HIT 1
|
|
|
|
|
#define WS_ELECT 2
|
|
|
|
|
#define WS_FIRE 3
|
|
|
|
|
#define WS_COLD 4
|
|
|
|
|
#define WS_POLYMORPH 5
|
|
|
|
|
#define WS_MISSILE 6
|
|
|
|
|
#define WS_SLOW_M 7
|
|
|
|
|
#define WS_DRAIN 8
|
|
|
|
|
#define WS_CHARGE 9
|
|
|
|
|
#define WS_MONSTELEP 10
|
|
|
|
|
#define WS_CANCEL 11
|
|
|
|
|
#define WS_CONFMON 12
|
|
|
|
|
#define WS_DISINTEGRATE 13
|
|
|
|
|
#define WS_ANTIMATTER 14
|
|
|
|
|
#define WS_PARALYZE 15
|
|
|
|
|
#define WS_XENOHEALING 16
|
|
|
|
|
#define WS_NOTHING 17
|
|
|
|
|
#define WS_INVIS 18
|
|
|
|
|
#define WS_BLAST 19
|
|
|
|
|
#define WS_WEB 20
|
|
|
|
|
#define WS_KNOCK 21
|
|
|
|
|
#define WS_CLOSE 22
|
|
|
|
|
#define MAXSTICKS 23
|
|
|
|
|
|
|
|
|
|
/* Ring types */
|
|
|
|
|
#define R_PROTECT 0
|
|
|
|
|
#define R_ADDSTR 1
|
|
|
|
|
#define R_SUSABILITY 2
|
|
|
|
|
#define R_SEARCH 3
|
|
|
|
|
#define R_SEEINVIS 4
|
|
|
|
|
#define R_ALERT 5
|
|
|
|
|
#define R_AGGR 6
|
|
|
|
|
#define R_ADDHIT 7
|
|
|
|
|
#define R_ADDDAM 8
|
|
|
|
|
#define R_REGEN 9
|
|
|
|
|
#define R_DIGEST 10
|
|
|
|
|
#define R_TELEPORT 11
|
|
|
|
|
#define R_STEALTH 12
|
|
|
|
|
#define R_ADDINTEL 13
|
|
|
|
|
#define R_ADDWISDOM 14
|
|
|
|
|
#define R_HEALTH 15
|
|
|
|
|
#define R_VREGEN 16
|
|
|
|
|
#define R_LIGHT 17
|
|
|
|
|
#define R_DELUSION 18
|
|
|
|
|
#define R_CARRYING 19
|
|
|
|
|
#define R_ADORNMENT 20
|
|
|
|
|
#define R_LEVITATION 21
|
|
|
|
|
#define R_FIRERESIST 22
|
|
|
|
|
#define R_COLDRESIST 23
|
|
|
|
|
#define R_ELECTRESIST 24
|
|
|
|
|
#define R_RESURRECT 25
|
|
|
|
|
#define R_BREATHE 26
|
|
|
|
|
#define R_FREEDOM 27
|
|
|
|
|
#define R_WIZARD 28
|
|
|
|
|
#define R_PIETY 29
|
|
|
|
|
#define R_TELCONTROL 30
|
|
|
|
|
#define R_TRUESEE 31
|
|
|
|
|
#define MAXRINGS 32
|
|
|
|
|
|
|
|
|
|
/* Weapon types */
|
|
|
|
|
#define SLING 0 /* sling */
|
|
|
|
|
#define ROCK 1 /* rocks */
|
|
|
|
|
#define BULLET 2 /* sling bullet */
|
|
|
|
|
#define BOW 3 /* short bow */
|
|
|
|
|
#define ARROW 4 /* arrow */
|
|
|
|
|
#define SILVERARROW 5 /* silver arrows */
|
|
|
|
|
#define FLAMEARROW 6 /* flaming arrows */
|
|
|
|
|
#define FOOTBOW 7 /* footbow */
|
|
|
|
|
#define FBBOLT 8 /* footbow bolt */
|
|
|
|
|
#define CROSSBOW 9 /* crossbow */
|
|
|
|
|
#define BOLT 10 /* crossbow bolt */
|
|
|
|
|
|
|
|
|
|
#define DART 11 /* darts */
|
|
|
|
|
#define DAGGER 12 /* dagger */
|
|
|
|
|
#define HAMMER 13 /* hammer */
|
|
|
|
|
#define LEUKU 14 /* leuku */
|
|
|
|
|
#define JAVELIN 15 /* javelin */
|
|
|
|
|
#define TOMAHAWK 16 /* tomahawk */
|
|
|
|
|
#define MACHETE 17 /* machete */
|
|
|
|
|
#define THROW_AXE 18 /* throwing axe */
|
|
|
|
|
#define SHORT_SPEAR 19 /* spear */
|
|
|
|
|
#define BOOMERANG 20 /* boomerangs */
|
|
|
|
|
#define LONG_SPEAR 21 /* spear */
|
|
|
|
|
#define SHURIKEN 22 /* shurikens */
|
|
|
|
|
#define MOLOTOV 23 /* molotov cocktails */
|
|
|
|
|
#define GRENADE 24 /* grenade for explosions */
|
|
|
|
|
#define CLUB 25 /* club */
|
|
|
|
|
#define PITCHFORK 26 /* pitchfork */
|
|
|
|
|
#define SHORT_SWORD 27 /* short sword */
|
|
|
|
|
#define HAND_AXE 28 /* hand axe */
|
|
|
|
|
#define PARTISAN 29 /* partisan */
|
|
|
|
|
#define GRAIN_FLAIL 30 /* grain flail */
|
|
|
|
|
#define SINGLESTICK 31 /* singlestick */
|
|
|
|
|
#define RAPIER 32 /* rapier */
|
|
|
|
|
#define SICKLE 33 /* sickle */
|
|
|
|
|
#define HATCHET 34 /* hatchet */
|
|
|
|
|
#define SCIMITAR 35 /* scimitar */
|
|
|
|
|
#define LIGHT_MACE 36 /* mace */
|
|
|
|
|
#define MORNINGSTAR 37 /* morning star */
|
|
|
|
|
#define BROAD_SWORD 38 /* broad sword */
|
|
|
|
|
#define MINER_PICK 39 /* miner's pick */
|
|
|
|
|
#define GUISARME 40 /* guisarme */
|
|
|
|
|
#define WAR_FLAIL 41 /* war flail */
|
|
|
|
|
#define CRYSKNIFE 42 /* crysknife */
|
|
|
|
|
#define BATTLE_AXE 43 /* battle axe */
|
|
|
|
|
#define CUTLASS 44 /* cutlass sword */
|
|
|
|
|
#define GLAIVE 45 /* glaive */
|
|
|
|
|
#define PERTUSKA 46 /* pertuska */
|
|
|
|
|
#define LONG_SWORD 47 /* long sword */
|
|
|
|
|
#define LANCE 48 /* lance */
|
|
|
|
|
#define RANSEUR 49 /* ranseur */
|
|
|
|
|
#define SABRE 50 /* sabre */
|
|
|
|
|
#define SPETUM 51 /* spetum */
|
|
|
|
|
#define HALBERD 52 /* halberd */
|
|
|
|
|
#define TRIDENT 53 /* trident */
|
|
|
|
|
#define WAR_PICK 54 /* war pick */
|
|
|
|
|
#define BARDICHE 55 /* bardiche */
|
|
|
|
|
#define HEAVY_MACE 56 /* mace */
|
|
|
|
|
#define SCYTHE 57 /* great scythe */
|
|
|
|
|
#define QUARTERSTAFF 58 /* quarter staff */
|
|
|
|
|
#define BAST_SWORD 59 /* bastard sword */
|
|
|
|
|
#define PIKE 60 /* pike */
|
|
|
|
|
#define TWO_FLAIL 61 /* two-handed flail */
|
|
|
|
|
#define TWO_MAUL 62 /* two-handed maul */
|
|
|
|
|
#define TWO_PICK 63 /* two-handed pick */
|
|
|
|
|
#define TWO_SWORD 64 /* two-handed sword */
|
|
|
|
|
#define CLAYMORE 65 /* claymore sword */
|
|
|
|
|
#define MAXWEAPONS (sizeof(weaps) / sizeof(struct init_weps))
|
|
|
|
|
#define NONE 100 /* no weapon */
|
|
|
|
|
|
|
|
|
|
/* Armor types */
|
|
|
|
|
#define SOFT_LEATHER 0
|
|
|
|
|
#define CUIRBOLILLI 1
|
|
|
|
|
#define HEAVY_LEATHER 2
|
|
|
|
|
#define RING_MAIL 3
|
|
|
|
|
#define STUDDED_LEATHER 4
|
|
|
|
|
#define SCALE_MAIL 5
|
|
|
|
|
#define PADDED_ARMOR 6
|
|
|
|
|
#define CHAIN_MAIL 7
|
|
|
|
|
#define BRIGANDINE 8
|
|
|
|
|
#define SPLINT_MAIL 9
|
|
|
|
|
#define BANDED_MAIL 10
|
|
|
|
|
#define GOOD_CHAIN 11
|
|
|
|
|
#define PLATE_MAIL 12
|
|
|
|
|
#define PLATE_ARMOR 13
|
|
|
|
|
#define MITHRIL 14
|
|
|
|
|
#define CRYSTAL_ARMOR 15
|
|
|
|
|
#define MAXARMORS (sizeof(armors) / sizeof(struct init_armor))
|
|
|
|
|
|
|
|
|
|
/* Food types */
|
|
|
|
|
#define FD_RATION 0
|
|
|
|
|
#define FD_FRUIT 1
|
|
|
|
|
#define FD_CRAM 2
|
|
|
|
|
#define FD_CAKES 3
|
|
|
|
|
#define FD_LEMBA 4
|
|
|
|
|
#define FD_MIRUVOR 5
|
|
|
|
|
#define MAXFOODS (sizeof(fd_data) / sizeof(struct magic_item))
|
|
|
|
|
|
|
|
|
|
/* stuff to do with encumberance */
|
|
|
|
|
#define F_OK 0 /* have plenty of food in stomach */
|
|
|
|
|
#define F_HUNGRY 1 /* player is hungry */
|
|
|
|
|
#define F_WEAK 2 /* weak from lack of food */
|
|
|
|
|
#define F_FAINT 3 /* fainting from lack of food */
|
|
|
|
|
|
|
|
|
|
/* return values for get functions */
|
|
|
|
|
#define NORM 0 /* normal exit */
|
|
|
|
|
#define QUIT 1 /* quit option setting */
|
|
|
|
|
#define MINUS 2 /* back up one option */
|
|
|
|
|
|
|
|
|
|
/* These are the types of inventory styles. */
|
|
|
|
|
#define INV_SLOW 0
|
|
|
|
|
#define INV_OVER 1
|
|
|
|
|
#define INV_CLEAR 2
|
|
|
|
|
|
|
|
|
|
/* These will eventually become enumerations */
|
|
|
|
|
#define MESSAGE TRUE
|
|
|
|
|
#define NOMESSAGE FALSE
|
|
|
|
|
#define POINTS TRUE
|
|
|
|
|
#define NOPOINTS FALSE
|
|
|
|
|
#define LOWERCASE TRUE
|
|
|
|
|
#define UPPERCASE FALSE
|
|
|
|
|
#define WANDER TRUE
|
|
|
|
|
#define NOWANDER FALSE
|
|
|
|
|
#define GRAB TRUE
|
|
|
|
|
#define NOGRAB FALSE
|
|
|
|
|
#define FAMILIAR TRUE
|
|
|
|
|
#define NOFAMILIAR FALSE
|
|
|
|
|
#define MAXSTATS TRUE
|
|
|
|
|
#define NOMAXSTATS FALSE
|
|
|
|
|
#define FORCE TRUE
|
|
|
|
|
#define NOFORCE FALSE
|
|
|
|
|
#define THROWN TRUE
|
|
|
|
|
#define NOTHROWN FALSE
|
|
|
|
|
|
|
|
|
|
/* Ways to die */
|
|
|
|
|
#define D_PETRIFY -1
|
|
|
|
|
#define D_ARROW -2
|
|
|
|
|
#define D_DART -3
|
|
|
|
|
#define D_POISON -4
|
|
|
|
|
#define D_BOLT -5
|
|
|
|
|
#define D_SUFFOCATION -6
|
|
|
|
|
#define D_POTION -7
|
|
|
|
|
#define D_INFESTATION -8
|
|
|
|
|
#define D_DROWN -9
|
|
|
|
|
#define D_FALL -10
|
|
|
|
|
#define D_FIRE -11
|
|
|
|
|
#define D_SPELLFUMBLE -12
|
|
|
|
|
#define D_DRAINLIFE -13
|
|
|
|
|
#define D_ARTIFACT -14
|
|
|
|
|
#define D_GODWRATH -15
|
|
|
|
|
#define D_CLUMSY -16
|
|
|
|
|
|
|
|
|
|
/* values for games end */
|
|
|
|
|
#define SCOREIT -1
|
|
|
|
|
#define KILLED 0
|
|
|
|
|
#define CHICKEN 1
|
|
|
|
|
#define WINNER 2
|
|
|
|
|
#define TOTAL 3
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* definitions for function step_ok: MONSTOK indicates it is OK to step on a
|
|
|
|
|
* monster -- it is only OK when stepping diagonally AROUND a monster
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define MONSTOK 1
|
|
|
|
|
#define NOMONST 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define good_monster(m) (on(m, ISCHARMED) || \
|
|
|
|
|
on(m, ISFRIENDLY) || \
|
|
|
|
|
on(m, ISFAMILIAR))
|
|
|
|
|
|
|
|
|
|
/* Now we define the structures and types */
|
|
|
|
|
|
|
|
|
|
/* level types */
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
NORMLEV, /* normal level */
|
|
|
|
|
POSTLEV, /* trading post level */
|
|
|
|
|
MAZELEV, /* maze level */
|
|
|
|
|
THRONE /* unique monster's throne room */
|
|
|
|
|
} LEVTYPE;
|
|
|
|
|
|
|
|
|
|
/* Help list */
|
|
|
|
|
|
|
|
|
|
struct h_list
|
|
|
|
|
{
|
|
|
|
|
char h_ch;
|
|
|
|
|
char *h_desc;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Coordinate data type */
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
int x;
|
|
|
|
|
int y;
|
|
|
|
|
} coord;
|
|
|
|
|
|
|
|
|
|
/* Linked list data type */
|
|
|
|
|
typedef struct linked_list
|
|
|
|
|
{
|
|
|
|
|
struct linked_list *l_next;
|
|
|
|
|
struct linked_list *l_prev;
|
|
|
|
|
|
|
|
|
|
union
|
|
|
|
|
{
|
|
|
|
|
struct object *obj;
|
|
|
|
|
struct thing *th;
|
|
|
|
|
void *l_data;
|
|
|
|
|
} data;
|
|
|
|
|
|
|
|
|
|
} linked_list;
|
|
|
|
|
|
|
|
|
|
/* Stuff about magic items */
|
|
|
|
|
|
|
|
|
|
struct magic_item
|
|
|
|
|
{
|
|
|
|
|
char *mi_name;
|
|
|
|
|
char *mi_abrev;
|
|
|
|
|
int mi_prob;
|
|
|
|
|
long mi_worth;
|
|
|
|
|
int mi_curse;
|
|
|
|
|
int mi_bless;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Room structure */
|
|
|
|
|
struct room
|
|
|
|
|
{
|
|
|
|
|
coord r_pos; /* Upper left corner */
|
|
|
|
|
coord r_max; /* Size of room */
|
|
|
|
|
coord r_exit[MAXDOORS]; /* Where the exits are */
|
|
|
|
|
int r_flags; /* Info about the room */
|
|
|
|
|
int r_nexits; /* Number of exits */
|
|
|
|
|
short r_fires; /* Number of fires in room */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Initial artifact stats */
|
|
|
|
|
struct init_artifact
|
|
|
|
|
{
|
|
|
|
|
char *ar_name; /* name of the artifact */
|
|
|
|
|
int ar_level; /* first level where it appears */
|
|
|
|
|
int ar_rings; /* number of ring effects */
|
|
|
|
|
int ar_potions; /* number of potion effects */
|
|
|
|
|
int ar_scrolls; /* number of scroll effects */
|
|
|
|
|
int ar_wands; /* number of wand effects */
|
|
|
|
|
int ar_worth; /* gold pieces */
|
|
|
|
|
int ar_weight; /* weight of object */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Array of all traps on this level */
|
|
|
|
|
|
|
|
|
|
struct trap
|
|
|
|
|
{
|
|
|
|
|
coord tr_pos; /* Where trap is */
|
|
|
|
|
long tr_flags; /* Info about trap (i.e. ISFOUND) */
|
|
|
|
|
char tr_type; /* What kind of trap */
|
|
|
|
|
char tr_show; /* What disguised trap looks like */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Structure describing a fighting being */
|
|
|
|
|
|
|
|
|
|
struct stats
|
|
|
|
|
{
|
|
|
|
|
char *s_dmg; /* String describing damage done */
|
|
|
|
|
long s_exp; /* Experience */
|
|
|
|
|
long s_hpt; /* Hit points */
|
|
|
|
|
int s_pack; /* current weight of his pack */
|
|
|
|
|
int s_carry; /* max weight he can carry */
|
|
|
|
|
int s_lvl; /* Level of mastery */
|
|
|
|
|
int s_arm; /* Armor class */
|
|
|
|
|
int s_acmod; /* Armor clss modifier */
|
|
|
|
|
int s_power; /* Spell points */
|
|
|
|
|
int s_str; /* Strength */
|
|
|
|
|
int s_intel; /* Intelligence */
|
|
|
|
|
int s_wisdom; /* Wisdom */
|
|
|
|
|
int s_dext; /* Dexterity */
|
|
|
|
|
int s_const; /* Constitution */
|
|
|
|
|
int s_charisma; /* Charisma */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Structure describing a fighting being (monster at initialization) */
|
|
|
|
|
|
|
|
|
|
struct mstats
|
|
|
|
|
{
|
|
|
|
|
short s_str; /* Strength */
|
|
|
|
|
long s_exp; /* Experience */
|
|
|
|
|
int s_lvl; /* Level of mastery */
|
|
|
|
|
int s_arm; /* Armor class */
|
|
|
|
|
char *s_hpt; /* Hit points */
|
|
|
|
|
char *s_dmg; /* String describing damage done */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Structure for monsters and player */
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
NOTE: In initial v1.04 code the t_chasee variable will be
|
|
|
|
|
reset during the save/restore process. Eventually
|
|
|
|
|
need to implement a "thing" manager where I can
|
|
|
|
|
refer to "things" by number such that references
|
|
|
|
|
to them can be saved. Problems exist with regard
|
|
|
|
|
to removing references to "things" that have been
|
|
|
|
|
killed.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
typedef struct thing
|
|
|
|
|
{
|
|
|
|
|
long chasee_index, horde_index; /* Used in save/rest process */
|
|
|
|
|
struct linked_list *t_pack; /* What the thing is carrying */
|
|
|
|
|
struct stats t_stats; /* Physical description */
|
|
|
|
|
struct stats maxstats; /* maximum(or initial) stats */
|
|
|
|
|
int t_ischasing; /* Are we chasing someone? */
|
|
|
|
|
struct thing *t_chasee; /* Who are we chasing */
|
|
|
|
|
struct object *t_horde; /* What are we hordeing */
|
|
|
|
|
coord t_pos; /* Cuurent Position */
|
|
|
|
|
coord t_oldpos; /* Last Position */
|
|
|
|
|
coord t_nxtpos; /* Next Position */
|
|
|
|
|
long t_flags[16]; /* State word */
|
|
|
|
|
int t_praycnt; /* Times prayed... */
|
|
|
|
|
int t_trans; /* # of transactions at post */
|
|
|
|
|
int t_turn; /* If slowed, is it a turn to move */
|
|
|
|
|
int t_wasshot; /* Was character shot last round? */
|
|
|
|
|
int t_ctype; /* Character type */
|
|
|
|
|
int t_index; /* Index into monster table */
|
|
|
|
|
int t_no_move; /* How long the thing can't move */
|
|
|
|
|
int t_rest_hpt; /* used in hit point regeneration */
|
|
|
|
|
int t_rest_pow; /* used in spell point regeneration */
|
|
|
|
|
int t_doorgoal; /* What door are we heading to? */
|
|
|
|
|
char t_type; /* What it is */
|
|
|
|
|
char t_disguise; /* What mimic looks like */
|
|
|
|
|
char t_oldch; /* Character that was where it was */
|
|
|
|
|
} thing;
|
|
|
|
|
|
|
|
|
|
/* Array containing information on all the various types of monsters */
|
|
|
|
|
|
|
|
|
|
struct monster
|
|
|
|
|
{
|
|
|
|
|
char *m_name; /* What to call the monster */
|
|
|
|
|
short m_carry; /* Probability of carrying something */
|
|
|
|
|
int m_normal; /* Does monster exist? */
|
|
|
|
|
int m_wander; /* Does monster wander? */
|
|
|
|
|
char m_appear; /* What does monster look like? */
|
|
|
|
|
char *m_intel; /* Intelligence range */
|
|
|
|
|
unsigned long m_flags[16]; /* Things about the monster */
|
|
|
|
|
char *m_typesum; /* type of creature can he summon */
|
|
|
|
|
short m_numsum; /* how many creatures can he summon */
|
|
|
|
|
short m_add_exp; /* Added experience per hit point */
|
|
|
|
|
struct mstats m_stats; /* Initial stats */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Structure for a thing that the rogue can carry */
|
|
|
|
|
|
|
|
|
|
typedef struct object
|
|
|
|
|
{
|
|
|
|
|
coord o_pos; /* Where it lives on the screen */
|
|
|
|
|
struct linked_list *next_obj; /* The next obj. for stacked objects */
|
|
|
|
|
struct linked_list *o_bag; /* bag linked list pointer */
|
|
|
|
|
char *o_text; /* What it says if you read it */
|
|
|
|
|
char *o_damage; /* Damage if used like sword */
|
|
|
|
|
char *o_hurldmg; /* Damage if thrown */
|
|
|
|
|
long o_flags; /* Information about objects */
|
|
|
|
|
long ar_flags; /* general flags */
|
|
|
|
|
char o_type; /* What kind of object it is */
|
|
|
|
|
int o_ident; /* identifier for object */
|
|
|
|
|
unsigned int o_count; /* Count for plural objects */
|
|
|
|
|
int o_which; /* Which object of a type it is */
|
|
|
|
|
int o_hplus; /* Plusses to hit */
|
|
|
|
|
int o_dplus; /* Plusses to damage */
|
|
|
|
|
int o_ac; /* Armor class */
|
|
|
|
|
int o_group; /* Group number for this object */
|
|
|
|
|
int o_weight; /* weight of this object */
|
|
|
|
|
char o_launch; /* What you need to launch it */
|
|
|
|
|
char o_mark[MARKLEN]; /* Mark the specific object */
|
|
|
|
|
long o_worth;
|
|
|
|
|
} object;
|
|
|
|
|
|
|
|
|
|
/* weapon structure */
|
|
|
|
|
|
|
|
|
|
struct init_weps
|
|
|
|
|
{
|
|
|
|
|
char *w_name; /* name of weapon */
|
|
|
|
|
char *w_dam; /* hit damage */
|
|
|
|
|
char *w_hrl; /* hurl damage */
|
|
|
|
|
char w_launch; /* need to launch it */
|
|
|
|
|
int w_wght; /* weight of weapon */
|
|
|
|
|
long w_worth; /* worth of this weapon */
|
|
|
|
|
long w_flags; /* flags */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* armor structure */
|
|
|
|
|
|
|
|
|
|
struct init_armor
|
|
|
|
|
{
|
|
|
|
|
char *a_name; /* name of armor */
|
|
|
|
|
long a_worth; /* worth of armor */
|
|
|
|
|
int a_prob; /* chance of getting armor */
|
|
|
|
|
int a_class; /* normal armor class */
|
|
|
|
|
int a_wght; /* weight of armor */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct matrix
|
|
|
|
|
{
|
|
|
|
|
int base; /* Base to-hit value (AC 10) */
|
|
|
|
|
int max_lvl;/* Maximum level for changing value */
|
|
|
|
|
int factor; /* Amount base changes each time */
|
|
|
|
|
int offset; /* What to offset level */
|
|
|
|
|
int range; /* Range of levels for each offset */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
ANSI C Prototype Additions
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* armor.c */
|
|
|
|
|
extern void wear(void);
|
|
|
|
|
extern void take_off(void);
|
|
|
|
|
extern void waste_time(void);
|
|
|
|
|
extern int wear_ok(struct thing *th, struct object *obj, int print_message);
|
|
|
|
|
|
|
|
|
|
/* artifact.c */
|
|
|
|
|
extern void apply(void);
|
|
|
|
|
extern int possessed(int artifact);
|
|
|
|
|
extern int is_carrying(int artifact);
|
|
|
|
|
extern int make_artifact(void);
|
|
|
|
|
extern struct object *new_artifact(int which, struct object *cur);
|
|
|
|
|
extern void do_minor(struct object *obj);
|
|
|
|
|
extern void do_major(void);
|
|
|
|
|
extern void do_phial(void);
|
|
|
|
|
extern void do_palantir(void);
|
|
|
|
|
extern void do_sceptre(void);
|
|
|
|
|
extern void do_silmaril(void);
|
|
|
|
|
extern void do_amulet(void);
|
|
|
|
|
extern void do_bag(struct object *obj);
|
|
|
|
|
extern void do_wand(void);
|
|
|
|
|
extern void do_crown(void);
|
|
|
|
|
extern void level_eval(void);
|
|
|
|
|
|
|
|
|
|
/* bag.c */
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
{
|
|
|
|
|
void *varg;
|
|
|
|
|
int *iarg;
|
|
|
|
|
struct object *obj;
|
|
|
|
|
} bag_arg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern struct object *apply_to_bag(struct linked_list *bag_p, int type,
|
|
|
|
|
int (*bff_p)(struct object *obj, bag_arg *arg),
|
|
|
|
|
int (*baf_p)(struct object *obj, bag_arg *arg, int id),
|
|
|
|
|
void *user_arg);
|
|
|
|
|
extern int count_bag(linked_list *bag_p, int type,
|
|
|
|
|
int (*bff_p)(struct object *obj, bag_arg *arg));
|
|
|
|
|
extern void del_bag(linked_list *bag_p, object *obj_p);
|
|
|
|
|
extern struct object *pop_bag(linked_list **bag_pp, object *obj_p);
|
|
|
|
|
extern void push_bag(linked_list **bag_pp, object *obj_p);
|
|
|
|
|
extern struct object *scan_bag(linked_list *bag_p, int type, int id);
|
|
|
|
|
extern struct object *select_bag(linked_list *bag_p, int type,
|
|
|
|
|
int (*bff_p)(struct object *obj, bag_arg *arg), int index);
|
|
|
|
|
|
|
|
|
|
/* chase.c */
|
|
|
|
|
|
|
|
|
|
extern void do_chase(struct thing *th, int flee);
|
|
|
|
|
extern void chase_it(coord *runner, struct thing *th);
|
|
|
|
|
extern void runto(void);/* coord *runner, coord *spot); */
|
|
|
|
|
extern int chase(struct thing *tp, coord *ee, int flee);
|
|
|
|
|
extern struct room *roomin(coord cp);
|
|
|
|
|
extern struct linked_list *find_mons(int y, int x);
|
|
|
|
|
extern struct linked_list *f_mons_a(int y, int x, int hit_bad);
|
|
|
|
|
extern int diag_ok(coord *sp, coord *ep, struct thing *flgptr);
|
|
|
|
|
extern int cansee(int y, int x);
|
|
|
|
|
extern coord *find_shoot(struct thing *tp, coord *dir);
|
|
|
|
|
extern coord *can_shoot(coord *er, coord *ee, coord *dir);
|
|
|
|
|
extern int straight_shot(int ery, int erx, int eey, int eex, coord *dir);
|
|
|
|
|
extern struct linked_list *get_hurl(struct thing *tp);
|
|
|
|
|
extern struct object *pick_weap(struct thing *tp);
|
|
|
|
|
extern int can_blink(struct thing *tp);
|
|
|
|
|
|
|
|
|
|
/* command.c */
|
|
|
|
|
|
|
|
|
|
extern char fight_ch;
|
|
|
|
|
extern char countch;
|
|
|
|
|
extern void command(void);
|
|
|
|
|
extern void do_after_effects(void);
|
|
|
|
|
extern void make_omnipotent(void);
|
|
|
|
|
extern void quit_handler(int sig);
|
|
|
|
|
extern void quit(void);
|
|
|
|
|
extern void search(int is_thief);
|
|
|
|
|
extern void help(void);
|
|
|
|
|
extern void identify(void);
|
|
|
|
|
extern void d_level(void);
|
|
|
|
|
extern void u_level(void);
|
|
|
|
|
extern void call(int mark);
|
|
|
|
|
extern int att_bonus(void);
|
|
|
|
|
|
|
|
|
|
/* daemon.c */
|
|
|
|
|
|
|
|
|
|
extern int demoncnt;
|
|
|
|
|
|
|
|
|
|
struct delayed_action
|
|
|
|
|
{
|
|
|
|
|
int d_type;
|
|
|
|
|
int d_when;
|
|
|
|
|
int d_id;
|
|
|
|
|
void *d_arg;
|
|
|
|
|
int d_time;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define EMPTY 0
|
|
|
|
|
#define DAEMON 1
|
|
|
|
|
#define FUSE 2
|
|
|
|
|
|
|
|
|
|
typedef void fuse;
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
{
|
|
|
|
|
void *varg;
|
|
|
|
|
int *iarg;
|
|
|
|
|
struct linked_list *ll;
|
|
|
|
|
} fuse_arg;
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
{
|
|
|
|
|
void *varg;
|
|
|
|
|
int *iarg;
|
|
|
|
|
struct thing *thingptr;
|
|
|
|
|
} daemon_arg;
|
|
|
|
|
|
|
|
|
|
struct fuse
|
|
|
|
|
{
|
|
|
|
|
int index;
|
|
|
|
|
fuse (*func)(fuse_arg *arg);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct daemon
|
|
|
|
|
{
|
|
|
|
|
int index;
|
2017-01-31 20:33:49 -05:00
|
|
|
void (*func)(daemon_arg *arg);
|
2017-01-31 19:56:04 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define MAXDAEMONS 60
|
|
|
|
|
|
|
|
|
|
#define FUSE_NULL 0
|
|
|
|
|
#define FUSE_SWANDER 1
|
|
|
|
|
#define FUSE_UNCONFUSE 2
|
|
|
|
|
#define FUSE_UNSCENT 3
|
|
|
|
|
#define FUSE_SCENT 4
|
|
|
|
|
#define FUSE_UNHEAR 5
|
|
|
|
|
#define FUSE_HEAR 6
|
|
|
|
|
#define FUSE_UNSEE 7
|
|
|
|
|
#define FUSE_UNSTINK 8
|
|
|
|
|
#define FUSE_UNCLRHEAD 9
|
|
|
|
|
#define FUSE_UNPHASE 10
|
|
|
|
|
#define FUSE_SIGHT 11
|
|
|
|
|
#define FUSE_RES_STRENGTH 12
|
|
|
|
|
#define FUSE_NOHASTE 13
|
|
|
|
|
#define FUSE_NOSLOW 14
|
|
|
|
|
#define FUSE_SUFFOCATE 15
|
|
|
|
|
#define FUSE_CURE_DISEASE 16
|
|
|
|
|
#define FUSE_UNITCH 17
|
|
|
|
|
#define FUSE_APPEAR 18
|
|
|
|
|
#define FUSE_UNELECTRIFY 19
|
|
|
|
|
#define FUSE_UNBHERO 20
|
|
|
|
|
#define FUSE_UNSHERO 21
|
|
|
|
|
#define FUSE_UNXRAY 22
|
|
|
|
|
#define FUSE_UNDISGUISE 23
|
|
|
|
|
#define FUSE_SHERO 24
|
|
|
|
|
#define FUSE_WGHTCHK 25
|
|
|
|
|
#define FUSE_UNSUMMON 26
|
|
|
|
|
#define FUSE_UNGAZE 27
|
|
|
|
|
#define FUSE_UNCOLD 28
|
|
|
|
|
#define FUSE_UNHOT 29
|
|
|
|
|
#define FUSE_UNFLY 30
|
|
|
|
|
#define FUSE_UNBREATHE 31
|
|
|
|
|
#define FUSE_UNREGEN 32
|
|
|
|
|
#define FUSE_UNSUPEREAT 33
|
|
|
|
|
#define FUSE_UNSHIELD 34
|
|
|
|
|
#define FUSE_UNMSHIELD 35
|
|
|
|
|
#define FUSE_UNTRUESEE 36
|
|
|
|
|
#define FUSE_MAX 37
|
|
|
|
|
|
|
|
|
|
#define DAEMON_NULL 0
|
|
|
|
|
#define DAEMON_DOCTOR 1
|
|
|
|
|
#define DAEMON_ROLLWAND 2
|
|
|
|
|
#define DAEMON_STOMACH 3
|
|
|
|
|
#define DAEMON_RUNNERS 4
|
|
|
|
|
#define DAEMON_MAX 5
|
|
|
|
|
|
|
|
|
|
extern struct delayed_action d_list[MAXDAEMONS];
|
|
|
|
|
extern struct daemon daemons[DAEMON_MAX];
|
|
|
|
|
extern struct fuse fuses[FUSE_MAX];
|
|
|
|
|
|
|
|
|
|
extern struct delayed_action *d_slot(void);
|
|
|
|
|
extern struct delayed_action *find_slot(int id, int type);
|
|
|
|
|
extern void start_daemon(int id, void *arg, int whendo);
|
|
|
|
|
extern void kill_daemon(int id);
|
|
|
|
|
extern void do_daemons(int now);
|
|
|
|
|
extern void light_fuse(int id, void *arg, int time, int whendo);
|
|
|
|
|
extern void lengthen_fuse(int id, int xtime);
|
|
|
|
|
extern void extinguish_fuse(int id);
|
|
|
|
|
extern void do_fuses(int flag);
|
|
|
|
|
extern void activity(void);
|
|
|
|
|
|
|
|
|
|
/* daemons.c */
|
|
|
|
|
|
|
|
|
|
extern void doctor_spell_points(struct thing *tp);
|
2017-01-31 20:33:49 -05:00
|
|
|
extern void runners(daemon_arg *arg);
|
|
|
|
|
extern void doctor(daemon_arg *tp);
|
|
|
|
|
extern void rollwand(daemon_arg *arg);
|
|
|
|
|
extern void stomach(daemon_arg *arg);
|
2017-01-31 19:56:04 -05:00
|
|
|
extern fuse swander(fuse_arg *arg);
|
|
|
|
|
extern fuse unconfuse(fuse_arg *arg);
|
|
|
|
|
extern fuse unscent(fuse_arg *arg);
|
|
|
|
|
extern fuse scent(fuse_arg *arg);
|
|
|
|
|
extern fuse unhear(fuse_arg *arg);
|
|
|
|
|
extern fuse hear(fuse_arg *arg);
|
|
|
|
|
extern fuse unsee(fuse_arg *arg);
|
|
|
|
|
extern fuse unstink(fuse_arg *arg);
|
|
|
|
|
extern fuse unclrhead(fuse_arg *arg);
|
|
|
|
|
extern fuse unphase(fuse_arg *arg);
|
|
|
|
|
extern fuse sight(fuse_arg *arg);
|
|
|
|
|
extern fuse res_strength(fuse_arg *arg);
|
|
|
|
|
extern fuse nohaste(fuse_arg *arg);
|
|
|
|
|
extern fuse noslow(fuse_arg *arg);
|
|
|
|
|
extern fuse suffocate(fuse_arg *arg);
|
|
|
|
|
extern fuse cure_disease(fuse_arg *arg);
|
|
|
|
|
extern fuse un_itch(fuse_arg *arg);
|
|
|
|
|
extern fuse appear(fuse_arg *arg);
|
|
|
|
|
extern fuse unelectrify(fuse_arg *arg);
|
|
|
|
|
extern fuse unshero(fuse_arg *arg);
|
|
|
|
|
extern fuse unbhero(fuse_arg *arg);
|
|
|
|
|
extern fuse undisguise(fuse_arg *arg);
|
|
|
|
|
extern fuse unsummon(fuse_arg *monst);
|
|
|
|
|
extern fuse ungaze(fuse_arg *arg);
|
|
|
|
|
extern fuse shero(fuse_arg *arg);
|
|
|
|
|
extern fuse uncold(fuse_arg *arg);
|
|
|
|
|
extern fuse unhot(fuse_arg *arg);
|
|
|
|
|
extern fuse unfly(fuse_arg *arg);
|
|
|
|
|
extern fuse unbreathe(fuse_arg *arg);
|
|
|
|
|
extern fuse unregen(fuse_arg *arg);
|
|
|
|
|
extern fuse unsupereat(fuse_arg *arg);
|
|
|
|
|
extern fuse unshield(fuse_arg *arg);
|
|
|
|
|
extern fuse unmshield(fuse_arg *arg);
|
|
|
|
|
extern fuse untruesee(fuse_arg *arg);
|
|
|
|
|
extern fuse wghtchk(fuse_arg *arg);
|
|
|
|
|
|
|
|
|
|
/* encumb.h */
|
|
|
|
|
|
|
|
|
|
extern void updpack(void);
|
|
|
|
|
extern int packweight(void);
|
|
|
|
|
extern int itemweight(struct object *wh);
|
|
|
|
|
extern int playenc(void);
|
|
|
|
|
extern int totalenc(void);
|
|
|
|
|
extern int hitweight(void);
|
|
|
|
|
|
|
|
|
|
/* fight.c */
|
|
|
|
|
|
|
|
|
|
extern void do_fight(coord dir, int tothedeath);
|
|
|
|
|
extern int fight(coord *mp, struct object *weap, int thrown);
|
|
|
|
|
extern int attack(struct thing *mp, struct object *weapon, int thrown);
|
|
|
|
|
extern int mon_mon_attack(struct thing *attacker, struct linked_list *mon,
|
|
|
|
|
struct object *weapon, int thrown);
|
|
|
|
|
extern int swing(int class, int at_lvl, int op_arm, int wplus);
|
|
|
|
|
extern void init_exp(void);
|
|
|
|
|
extern int next_exp_level(int print_message);
|
|
|
|
|
extern void check_level(void);
|
|
|
|
|
extern int roll_em(struct thing *att_er, struct thing *def_er,
|
|
|
|
|
struct object *weap, int thrown, struct object *cur_weapon);
|
|
|
|
|
extern const char *prname(char *who);
|
|
|
|
|
extern void hit(char *ee);
|
|
|
|
|
extern void miss(char *ee);
|
|
|
|
|
extern int save_throw(int which, struct thing *tp);
|
|
|
|
|
extern int save(int which);
|
|
|
|
|
extern int dext_plus(int dexterity);
|
|
|
|
|
extern int dext_prot(int dexterity);
|
|
|
|
|
extern int str_plus(int str);
|
|
|
|
|
extern int add_dam(int str);
|
|
|
|
|
extern int hung_dam(void);
|
|
|
|
|
extern void raise_level(void);
|
|
|
|
|
extern void thunk(struct object *weap, char *mname);
|
|
|
|
|
extern void m_thunk(struct object *weap, char *mname);
|
|
|
|
|
extern void bounce(struct object *weap, char *mname);
|
|
|
|
|
extern void m_bounce(struct object *weap, char *mname);
|
|
|
|
|
extern void remove_monster(coord *mp, struct linked_list *item);
|
|
|
|
|
extern int is_magic(struct object *obj);
|
|
|
|
|
extern void killed(struct thing *killer,struct linked_list *item,
|
|
|
|
|
int print_message, int give_points);
|
|
|
|
|
extern struct object *wield_weap(struct object *weapon, struct thing *mp);
|
|
|
|
|
extern void summon_help(struct thing *mons, int force);
|
|
|
|
|
extern int maxdamage(char *cp);
|
|
|
|
|
|
|
|
|
|
/* getplay.c */
|
|
|
|
|
|
|
|
|
|
extern int geta_player(void);
|
|
|
|
|
extern void puta_player(void);
|
|
|
|
|
extern void do_getplayer(void);
|
|
|
|
|
extern void print_stored(void);
|
|
|
|
|
extern char *which_class(int c_class);
|
|
|
|
|
|
|
|
|
|
/* ident.c */
|
|
|
|
|
|
|
|
|
|
extern char print_letters[];
|
|
|
|
|
extern int get_ident(struct object *obj_p);
|
|
|
|
|
extern void free_ident(struct object *obj_p);
|
|
|
|
|
extern int unprint_id(char *print_id);
|
|
|
|
|
extern int max_print(void);
|
|
|
|
|
|
|
|
|
|
/* init.c */
|
|
|
|
|
|
|
|
|
|
extern void init_materials(void);
|
|
|
|
|
extern void init_player(void);
|
|
|
|
|
extern void init_flags(void);
|
|
|
|
|
extern void init_things(void);
|
|
|
|
|
extern void init_fd(void);
|
|
|
|
|
extern void init_colors(void);
|
|
|
|
|
extern void init_names(void);
|
|
|
|
|
extern void init_stones(void);
|
|
|
|
|
extern void badcheck(char *name, struct magic_item *magic, int bound);
|
|
|
|
|
|
|
|
|
|
/* io.c */
|
|
|
|
|
|
|
|
|
|
extern int get_string(char *buffer, WINDOW *win);
|
|
|
|
|
extern void msg(const char *fmt, ...);
|
|
|
|
|
extern void addmsg(const char *fmt, ...);
|
|
|
|
|
extern void endmsg(void);
|
|
|
|
|
extern void doadd(const char *fmt, va_list ap);
|
|
|
|
|
extern char readchar(void);
|
|
|
|
|
extern char readcharw(WINDOW *scr);
|
|
|
|
|
extern void status(int display);
|
|
|
|
|
extern void wait_for(int ch);
|
|
|
|
|
extern void show_win(WINDOW *scr, char *message);
|
|
|
|
|
extern void restscr(WINDOW *scr);
|
|
|
|
|
extern void add_line(const char *fmt, ...);
|
|
|
|
|
extern void end_line(void);
|
|
|
|
|
extern void hearmsg(const char *fmt, ...);
|
|
|
|
|
extern void seemsg(const char *fmt, ...);
|
|
|
|
|
|
|
|
|
|
/* list.c */
|
|
|
|
|
|
|
|
|
|
extern void *ur_alloc(size_t size);
|
|
|
|
|
extern void ur_free(void *buf_p);
|
|
|
|
|
extern void _detach(struct linked_list **list, struct linked_list *item);
|
|
|
|
|
extern void _attach(struct linked_list **list, struct linked_list *item);
|
|
|
|
|
extern void _attach_after(linked_list **list_pp, linked_list *list_p, linked_list *new_p);
|
|
|
|
|
extern void _free_list(struct linked_list **ptr);
|
|
|
|
|
extern void discard(struct linked_list *item);
|
|
|
|
|
extern void throw_away(struct object *ptr);
|
|
|
|
|
extern struct linked_list *new_item(int size);
|
|
|
|
|
extern void *new_alloc(size_t size);
|
|
|
|
|
extern struct linked_list *new_list(void);
|
|
|
|
|
|
|
|
|
|
/* magic.c */
|
|
|
|
|
|
|
|
|
|
/* for printing out messages */
|
|
|
|
|
|
|
|
|
|
#define CAST_NORMAL 0x000 /* cast normal version */
|
|
|
|
|
#define CAST_CURSED 0x001 /* cast cursed version */
|
|
|
|
|
#define CAST_BLESSED 0x002 /* cast blessed version */
|
|
|
|
|
#define CAST_CROWN 0x010 /* crown helped out */
|
|
|
|
|
#define CAST_SEPTRE 0x020 /* septre helped out */
|
|
|
|
|
|
|
|
|
|
#define MAX_SPELLS 100 /* Max # sorted_spells */
|
|
|
|
|
#define MIN_FUMBLE_CHANCE 5
|
|
|
|
|
#define MAX_FUMBLE_CHANCE 95
|
|
|
|
|
|
|
|
|
|
/* Spells that a monster can cast */
|
|
|
|
|
|
|
|
|
|
#define M_SELFTELEP 0
|
|
|
|
|
#define M_HLNG2 1
|
|
|
|
|
#define M_REGENERATE 2
|
|
|
|
|
#define M_HLNG 3
|
|
|
|
|
#define NUM_RUN 4
|
|
|
|
|
#define M_HASTE 4
|
|
|
|
|
#define M_SEEINVIS 5
|
|
|
|
|
#define M_SHERO 6
|
|
|
|
|
#define M_PHASE 7
|
|
|
|
|
#define M_INVIS 8
|
|
|
|
|
#define M_CANCEL 9
|
|
|
|
|
#define M_OFFENSE 10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct spells
|
|
|
|
|
{
|
|
|
|
|
int sp_level; /* level of casting spell */
|
|
|
|
|
int sp_which; /* which scroll or potion */
|
|
|
|
|
unsigned long sp_flags; /* scroll, blessed, known */
|
|
|
|
|
int sp_cost; /* generated in incant() */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
extern void incant(struct thing *caster, coord shoot_dir);
|
|
|
|
|
extern char *spell_name(struct spells *sp, char *buf);
|
|
|
|
|
extern char *spell_abrev(struct spells *sp, char *buf);
|
|
|
|
|
extern void fumble_spell(struct thing *caster, int num_fumbles);
|
|
|
|
|
extern void learn_new_spells(void);
|
|
|
|
|
extern struct spells *pick_monster_spell(struct thing *caster);
|
|
|
|
|
extern int sort_spells(const void *a, const void *b);
|
|
|
|
|
|
|
|
|
|
/* magicitm.c */
|
|
|
|
|
|
|
|
|
|
extern struct magic_item things[]; /* Chances for each type of item*/
|
|
|
|
|
extern struct magic_item s_magic[]; /* Names and chances for scrolls*/
|
|
|
|
|
extern struct magic_item p_magic[]; /* Names and chances for potions*/
|
|
|
|
|
extern struct magic_item r_magic[]; /* Names and chances for rings */
|
|
|
|
|
extern struct magic_item ws_magic[]; /* Names and chances for sticks */
|
|
|
|
|
extern struct magic_item fd_data[]; /* Names and chances for food */
|
|
|
|
|
extern struct init_weps weaps[]; /* weapons and attributes */
|
|
|
|
|
extern struct init_armor armors[]; /* armors and attributes */
|
|
|
|
|
extern struct init_artifact arts[]; /* artifacts and attributes */
|
|
|
|
|
extern int maxarmors;
|
|
|
|
|
extern int maxartifact;
|
|
|
|
|
extern int maxfoods;
|
|
|
|
|
extern int maxpotions;
|
|
|
|
|
extern int maxrings;
|
|
|
|
|
extern int maxscrolls;
|
|
|
|
|
extern int maxsticks;
|
|
|
|
|
extern int maxweapons;
|
|
|
|
|
extern int numthings;
|
|
|
|
|
extern char *s_names[]; /* Names of the scrolls */
|
|
|
|
|
extern char *p_colors[]; /* Colors of the potions */
|
|
|
|
|
extern char *r_stones[]; /* Stone settings of the rings */
|
|
|
|
|
extern char *guess_items[MAXMAGICTYPES][MAXMAGICITEMS];
|
|
|
|
|
/* Players guess at what magic is */
|
|
|
|
|
extern int know_items[MAXMAGICTYPES][MAXMAGICITEMS];
|
|
|
|
|
/* Does he know what a magic item does */
|
|
|
|
|
extern char *ws_type[]; /* Is it a wand or a staff */
|
|
|
|
|
extern char *ws_made[]; /* What sticks are made of */
|
|
|
|
|
|
|
|
|
|
/* main.c */
|
|
|
|
|
|
|
|
|
|
extern FILE *fd_score;
|
2017-02-26 16:51:29 -05:00
|
|
|
extern FILE *file_log;
|
2017-01-31 19:56:04 -05:00
|
|
|
extern int summoned;
|
|
|
|
|
extern coord dta;
|
|
|
|
|
extern int main(int argc, char *argv[]);
|
|
|
|
|
extern void fatal(char *s);
|
|
|
|
|
extern int rnd(int range);
|
|
|
|
|
extern unsigned char ucrnd(unsigned char range);
|
|
|
|
|
extern short srnd(short range);
|
|
|
|
|
extern unsigned long ulrnd(unsigned long range);
|
|
|
|
|
extern int roll(int number, int sides);
|
|
|
|
|
|
|
|
|
|
/* maze.c */
|
|
|
|
|
|
|
|
|
|
extern void do_maze(void);
|
|
|
|
|
extern void draw_maze(void);
|
|
|
|
|
extern char *moffset(int y, int x);
|
|
|
|
|
extern char *foffset(int y, int x);
|
|
|
|
|
extern int findcells(int y, int x);
|
|
|
|
|
extern void rmwall(int newy, int newx, int oldy, int oldx);
|
|
|
|
|
extern void crankout(void);
|
|
|
|
|
|
|
|
|
|
/* memory.c */
|
|
|
|
|
|
|
|
|
|
extern void mem_debug(const int level);
|
|
|
|
|
extern void mem_tracking(int flag);
|
|
|
|
|
extern int mem_check(char *fname, int line);
|
|
|
|
|
extern void *mem_malloc(const size_t bytes);
|
|
|
|
|
extern void mem_free(const void *ptr);
|
|
|
|
|
extern void *mem_realloc(const void *ptr, const size_t new_size);
|
|
|
|
|
extern int mem_validate(const void *ptr);
|
|
|
|
|
|
|
|
|
|
/* misc.c */
|
|
|
|
|
|
|
|
|
|
extern char *tr_name(char ch, char *buf);
|
|
|
|
|
extern void look(int wakeup);
|
|
|
|
|
extern char secretdoor(int y, int x);
|
|
|
|
|
extern struct linked_list *find_obj(int y, int x);
|
|
|
|
|
extern void eat(void);
|
|
|
|
|
extern void chg_str(int amt, int both, int lost);
|
|
|
|
|
extern void chg_dext(int amt, int both, int lost);
|
|
|
|
|
extern void add_haste(int blessed);
|
|
|
|
|
extern void aggravate(void);
|
|
|
|
|
extern char *vowelstr(char *str);
|
|
|
|
|
extern int is_current(struct object *obj);
|
|
|
|
|
extern int get_dir(void);
|
|
|
|
|
extern int is_wearing(int type);
|
|
|
|
|
extern int maze_view(int y, int x);
|
|
|
|
|
extern void listen(void);
|
|
|
|
|
extern void nothing_message(int flags);
|
|
|
|
|
extern void feel_message(void);
|
|
|
|
|
extern int const_bonus(void);
|
|
|
|
|
extern int int_wis_bonus(void);
|
|
|
|
|
extern void electrificate(void);
|
|
|
|
|
extern void feed_me(int hungry_state);
|
|
|
|
|
extern int get_monster_number(char *message);
|
|
|
|
|
|
|
|
|
|
/* monsdata.c */
|
|
|
|
|
|
|
|
|
|
extern struct monster monsters[];
|
|
|
|
|
extern int nummonst;
|
|
|
|
|
|
|
|
|
|
/* monsters.c */
|
|
|
|
|
|
|
|
|
|
extern struct linked_list *summon_monster(int type, int familiar, int print_message);
|
|
|
|
|
extern int randmonster(int wander, int grab);
|
|
|
|
|
extern void new_monster(struct linked_list *item, int type, coord *cp, int max_monster);
|
|
|
|
|
extern void wanderer(void);
|
|
|
|
|
extern struct linked_list *wake_monster(int y, int x);
|
|
|
|
|
extern void genocide(int flags);
|
|
|
|
|
extern void id_monst(int monster);
|
|
|
|
|
extern void check_residue(struct thing *tp);
|
|
|
|
|
extern void sell(struct thing *tp);
|
|
|
|
|
extern void carried_weapon(struct thing *owner, struct object *weapon);
|
|
|
|
|
|
|
|
|
|
/* move.c */
|
|
|
|
|
|
|
|
|
|
extern coord nh;
|
|
|
|
|
extern void do_run(char ch);
|
|
|
|
|
extern int step_ok(int y, int x, int can_on_monst, struct thing *flgptr);
|
|
|
|
|
extern void corr_move(int dy, int dx);
|
|
|
|
|
extern void do_move(int dy, int dx);
|
|
|
|
|
extern void light(coord *cp);
|
|
|
|
|
extern int blue_light(int flags);
|
|
|
|
|
extern char show(int y, int x);
|
|
|
|
|
extern char be_trapped(struct thing *th, coord tc);
|
|
|
|
|
extern void dip_it(void);
|
|
|
|
|
extern struct trap *trap_at(int y, int x);
|
|
|
|
|
extern void set_trap(struct thing *tp, int y, int x);
|
|
|
|
|
extern coord rndmove(struct thing *who);
|
|
|
|
|
extern int isatrap(int ch);
|
|
|
|
|
|
|
|
|
|
/* newlvl.c */
|
|
|
|
|
|
|
|
|
|
extern void new_level(LEVTYPE ltype, int special);
|
|
|
|
|
extern void put_things(LEVTYPE ltype);
|
|
|
|
|
extern int throne_monster;
|
|
|
|
|
extern void do_throne(int special);
|
|
|
|
|
extern void create_lucifer(coord *stairs);
|
|
|
|
|
|
|
|
|
|
/* options.c */
|
|
|
|
|
|
|
|
|
|
typedef union
|
|
|
|
|
{
|
|
|
|
|
void *varg;
|
|
|
|
|
char *str;
|
|
|
|
|
int *iarg;
|
|
|
|
|
} opt_arg;
|
|
|
|
|
|
|
|
|
|
struct optstruct
|
|
|
|
|
{
|
|
|
|
|
char *o_name; /* option name */
|
|
|
|
|
char *o_prompt; /* prompt for interactive entry */
|
|
|
|
|
opt_arg o_opt; /* pointer to thing to set */
|
|
|
|
|
void (*o_putfunc)(opt_arg *arg,WINDOW *win);/* func to print value */
|
|
|
|
|
int (*o_getfunc)(opt_arg *arg,WINDOW *win);/* func to get value */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
typedef struct optstruct OPTION;
|
|
|
|
|
|
|
|
|
|
extern void parse_opts(char *str);
|
|
|
|
|
extern void option(void);
|
|
|
|
|
extern void put_bool(opt_arg *iarg, WINDOW *win);
|
|
|
|
|
extern void put_str(opt_arg *str, WINDOW *win);
|
|
|
|
|
extern void put_abil(opt_arg *ability, WINDOW *win);
|
|
|
|
|
extern void put_inv(opt_arg *inv, WINDOW *win);
|
|
|
|
|
extern int get_bool(opt_arg *bp, WINDOW *win);
|
|
|
|
|
extern int get_str(opt_arg *opt, WINDOW *win);
|
|
|
|
|
extern int get_abil(opt_arg *abil, WINDOW *win);
|
|
|
|
|
extern int get_inv(opt_arg *inv, WINDOW *win);
|
|
|
|
|
|
|
|
|
|
/* pack.c */
|
|
|
|
|
|
|
|
|
|
extern void swap_top(struct linked_list *top, struct linked_list *node);
|
|
|
|
|
extern void get_all(struct linked_list *top);
|
|
|
|
|
extern struct linked_list *get_stack(struct linked_list *item);
|
|
|
|
|
extern int add_pack(struct linked_list *item, int print_message);
|
|
|
|
|
extern void pack_report(object *obj, int print_message, char *message);
|
|
|
|
|
extern void inventory(struct linked_list *container, int type);
|
|
|
|
|
extern void pick_up(char ch);
|
|
|
|
|
extern struct object *get_object(struct linked_list *container, char *purpose, int type, int (*bff_p)(struct object *obj, bag_arg *junk) );
|
|
|
|
|
extern struct linked_list *get_item(char *purpose, int type);
|
|
|
|
|
extern void del_pack(struct linked_list *what);
|
|
|
|
|
extern void discard_pack(struct object *obj_p);
|
|
|
|
|
extern void rem_pack(struct object *obj_p);
|
|
|
|
|
extern void cur_null(struct object *op);
|
|
|
|
|
extern void idenpack(void);
|
|
|
|
|
extern void show_floor(void);
|
|
|
|
|
|
|
|
|
|
/* passages.c */
|
|
|
|
|
|
|
|
|
|
struct rdes
|
|
|
|
|
{
|
|
|
|
|
int conn[MAXROOMS]; /* possible to connect to room i? */
|
|
|
|
|
int isconn[MAXROOMS]; /* connection been made to room i? */
|
|
|
|
|
int ingraph; /* this room in graph already? */
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern void do_passages(void);
|
|
|
|
|
extern void conn(int r1, int r2);
|
|
|
|
|
extern void door(struct room *rm, coord *cp);
|
|
|
|
|
|
|
|
|
|
/* player.c */
|
|
|
|
|
|
|
|
|
|
extern void prayer(void);
|
|
|
|
|
extern int gsense(void);
|
|
|
|
|
extern int is_stealth(struct thing *tp);
|
|
|
|
|
extern void steal(void);
|
|
|
|
|
extern void affect(void);
|
|
|
|
|
extern void undead_sense(void);
|
|
|
|
|
|
|
|
|
|
/* potions.c */
|
|
|
|
|
|
|
|
|
|
extern void quaff(struct thing *quaffer, int which, int flag);
|
|
|
|
|
extern void lower_level(int who);
|
|
|
|
|
extern void res_dexterity(void);
|
|
|
|
|
extern void res_wisdom(void);
|
|
|
|
|
extern void res_intelligence(void);
|
|
|
|
|
extern void add_strength(int cursed);
|
|
|
|
|
extern void add_intelligence(int cursed);
|
|
|
|
|
extern void add_wisdom(int cursed);
|
|
|
|
|
extern void add_dexterity(int cursed);
|
|
|
|
|
extern void add_const(int cursed);
|
|
|
|
|
extern void monquaff(struct thing *quaffer, int which, int flag);
|
|
|
|
|
|
|
|
|
|
/* properti.c */
|
|
|
|
|
|
|
|
|
|
extern int baf_print_item(struct object *obj_p, bag_arg *type, int id);
|
|
|
|
|
extern int baf_identify(struct object *obj_p, bag_arg *junk, int id);
|
|
|
|
|
extern int baf_curse(struct object *obj_p, bag_arg *junk, int id);
|
|
|
|
|
extern int baf_decrement_test(struct object *obj_p, bag_arg *count_p, int id);
|
|
|
|
|
extern int baf_increment(struct object *obj_p, bag_arg *count_p, int id);
|
|
|
|
|
extern int bafcweapon(struct object *obj_p, bag_arg *junk, int id);
|
|
|
|
|
extern int bafcarmor(struct object *obj_p, bag_arg *junk, int id);
|
|
|
|
|
extern int bff_group(struct object *obj_p, bag_arg *new_obj_p);
|
|
|
|
|
extern int bff_callable(struct object *obj_p, bag_arg *junk);
|
|
|
|
|
extern int bff_markable(struct object *obj_p, bag_arg *junk);
|
|
|
|
|
extern int bffron(object *obj_p, bag_arg *junk);
|
|
|
|
|
extern int bff_zappable(struct object *obj_p, bag_arg *junk);
|
|
|
|
|
|
|
|
|
|
/* random.c */
|
|
|
|
|
|
|
|
|
|
extern void ur_srandom(unsigned x);
|
|
|
|
|
extern long ur_random(void);
|
|
|
|
|
|
|
|
|
|
/* rings.c */
|
|
|
|
|
|
|
|
|
|
extern void ring_on(void);
|
|
|
|
|
extern void ring_off(void);
|
|
|
|
|
extern int ring_eat(int hand);
|
|
|
|
|
extern char *ring_num(struct object *obj, char *buf);
|
|
|
|
|
extern int ring_value(int type);
|
|
|
|
|
|
|
|
|
|
/* rip.c */
|
|
|
|
|
|
|
|
|
|
extern void death(int monst);
|
|
|
|
|
extern void score(long amount, int lvl, int flags, int monst);
|
|
|
|
|
extern void total_winner(void);
|
|
|
|
|
extern char *killname(int monst, char *buf);
|
|
|
|
|
extern void showpack(char *howso);
|
|
|
|
|
extern void byebye(void);
|
|
|
|
|
extern int save_resurrect(int bonus);
|
|
|
|
|
|
|
|
|
|
/* rogue.c */
|
|
|
|
|
|
|
|
|
|
extern const char *monstern;
|
|
|
|
|
extern const struct h_list helpstr[];
|
|
|
|
|
extern const char *cnames[][15]; /* Character level names */
|
|
|
|
|
extern char *spacemsg;
|
|
|
|
|
extern char *morestr;
|
|
|
|
|
extern char *retstr;
|
|
|
|
|
|
|
|
|
|
/* state.c */
|
|
|
|
|
|
|
|
|
|
extern int mpos; /* Where cursor is on top line */
|
|
|
|
|
extern struct trap traps[];
|
|
|
|
|
extern struct room rooms[]; /* One for each room -- A level */
|
|
|
|
|
extern struct thing player; /* The rogue */
|
|
|
|
|
extern struct thing *beast; /* The last monster attacking */
|
|
|
|
|
extern struct object *cur_armor; /* What a well dresssed rogue wears */
|
|
|
|
|
extern struct object *cur_weapon; /* Which weapon he is wielding */
|
|
|
|
|
extern struct object *cur_ring[]; /* What rings are being worn */
|
|
|
|
|
extern struct linked_list *fam_ptr; /* A ptr to the familiar */
|
|
|
|
|
extern struct linked_list *lvl_obj; /* List of objects on this level */
|
|
|
|
|
extern struct linked_list *mlist; /* List of monsters on the level */
|
|
|
|
|
extern struct linked_list *curr_mons; /* The mons. currently moving */
|
|
|
|
|
extern struct linked_list *next_mons; /* The mons. after curr_mons */
|
|
|
|
|
|
|
|
|
|
extern int prscore; /* Print scores */
|
|
|
|
|
extern int prversion; /* Print version info */
|
|
|
|
|
|
|
|
|
|
extern WINDOW *cw; /* Window that the player sees */
|
|
|
|
|
extern WINDOW *hw; /* Used for the help command */
|
|
|
|
|
extern WINDOW *mw; /* Used to store mosnters */
|
|
|
|
|
extern LEVTYPE levtype;
|
|
|
|
|
extern coord delta; /* Change indicated to get_dir() */
|
|
|
|
|
|
|
|
|
|
extern char *release; /* Release number of rogue */
|
|
|
|
|
extern char *lastfmt;
|
|
|
|
|
extern char *lastarg;
|
|
|
|
|
extern unsigned long total; /* Total dynamic memory bytes */
|
|
|
|
|
extern long purse; /* How much gold the rogue has */
|
|
|
|
|
extern int line_cnt; /* Counter for inventory style */
|
|
|
|
|
extern int newpage;
|
|
|
|
|
extern int resurrect; /* resurrection counter */
|
|
|
|
|
extern int foodlev; /* how fast he eats food */
|
|
|
|
|
extern int see_dist; /* (how far he can see)^2 */
|
|
|
|
|
extern int level; /* What level rogue is on */
|
|
|
|
|
extern int ntraps; /* Number of traps on this level */
|
|
|
|
|
extern int no_command; /* Number of turns asleep */
|
|
|
|
|
extern int no_food; /* Number of levels without food */
|
|
|
|
|
extern int count; /* Number of times to repeat command */
|
|
|
|
|
extern int dnum; /* Dungeon number */
|
|
|
|
|
extern int max_level; /* Deepest player has gone */
|
|
|
|
|
extern int food_left; /* Amount of food in hero's stomach */
|
|
|
|
|
extern int group; /* Current group number */
|
|
|
|
|
extern int hungry_state; /* How hungry is he */
|
|
|
|
|
extern int infest_dam; /* Damage from parasites */
|
|
|
|
|
extern int lost_str; /* Amount of strength lost */
|
|
|
|
|
extern int lost_dext; /* amount of dexterity lost */
|
|
|
|
|
extern int hold_count; /* Number of monsters holding player */
|
|
|
|
|
extern int trap_tries; /* Number of attempts to set traps */
|
|
|
|
|
extern int has_artifact; /* set for possesion of artifacts */
|
|
|
|
|
extern int picked_artifact; /* set for any artifacts picked up */
|
|
|
|
|
extern int msg_index; /* pointer to current message buffer */
|
|
|
|
|
extern int luck; /* how expensive things to buy thing */
|
|
|
|
|
extern int fam_type; /* Type of familiar */
|
|
|
|
|
extern int times_prayed; /* The number of time prayed */
|
|
|
|
|
extern int mons_summoned; /* Number of summoned monsters */
|
|
|
|
|
extern int char_type; /* what type of character is player */
|
|
|
|
|
extern int pool_teleport; /* just teleported from a pool */
|
|
|
|
|
extern int inwhgt; /* true if from wghtchk() */
|
|
|
|
|
extern int running; /* True if player is running */
|
|
|
|
|
extern int fighting; /* True if player is fighting */
|
|
|
|
|
extern int playing; /* True until he quits */
|
|
|
|
|
extern int wizard; /* True if allows wizard commands */
|
|
|
|
|
extern int wiz_verbose; /* True if show debug messages */
|
|
|
|
|
extern int after; /* True if we want after daemons */
|
|
|
|
|
extern int fight_flush; /* True if toilet input */
|
|
|
|
|
extern int terse; /* True if we should be short */
|
|
|
|
|
extern int doorstop; /* Stop running when we pass a door */
|
|
|
|
|
extern int jump; /* Show running as series of jumps */
|
|
|
|
|
extern int door_stop; /* Current status of doorstop */
|
|
|
|
|
extern int firstmove; /* First move after setting door_stop */
|
|
|
|
|
extern int waswizard; /* Was a wizard sometime */
|
|
|
|
|
extern int canwizard; /* Will be permitted to do this */
|
|
|
|
|
extern int askme; /* Ask about unidentified things */
|
|
|
|
|
extern int moving; /* move using 'm' command */
|
2017-02-09 16:29:45 -05:00
|
|
|
extern int use_savedir; /* Savefile is in system savedir */
|
2017-01-31 19:56:04 -05:00
|
|
|
|
|
|
|
|
extern int inv_type; /* Inven style. Bool so options works */
|
|
|
|
|
extern char take; /* Thing the rogue is taking */
|
|
|
|
|
extern char PLAYER; /* what the player looks like */
|
|
|
|
|
extern char prbuf[]; /* Buffer for sprintfs */
|
|
|
|
|
extern char runch; /* Direction player is running */
|
|
|
|
|
extern char whoami[]; /* Name of player */
|
|
|
|
|
extern char fruit[]; /* Favorite fruit */
|
|
|
|
|
extern char msgbuf[10][2 * LINELEN]; /* message buffer */
|
|
|
|
|
extern char file_name[]; /* Save file name */
|
|
|
|
|
extern char score_file[]; /* Score file name */
|
|
|
|
|
|
|
|
|
|
extern struct linked_list *arrow, *bolt, *rock, *silverarrow, *fbbolt;
|
|
|
|
|
extern struct linked_list *bullet, *firearrow, *dart, *dagger, *shuriken;
|
|
|
|
|
extern struct linked_list *oil, *grenade;
|
|
|
|
|
extern struct room *oldrp; /* Roomin(&oldpos) */
|
|
|
|
|
|
|
|
|
|
extern void ur_write_thing(FILE *savef, struct thing *t);
|
|
|
|
|
extern struct thing *ur_read_thing(FILE *savef);
|
|
|
|
|
extern void ur_write_object_stack(FILE *savef, struct linked_list *l);
|
|
|
|
|
extern void ur_write_bag(FILE *savef, struct linked_list *l);
|
|
|
|
|
extern struct linked_list *ur_read_bag(FILE *savef);
|
|
|
|
|
extern struct linked_list *ur_read_object_stack(FILE *savef);
|
|
|
|
|
extern int restore_file(FILE *savef);
|
|
|
|
|
|
|
|
|
|
/* rooms.c */
|
|
|
|
|
|
|
|
|
|
extern void do_rooms(void);
|
|
|
|
|
extern void draw_room(struct room *rp);
|
|
|
|
|
extern void horiz(int cnt);
|
|
|
|
|
extern void vert(int cnt);
|
|
|
|
|
extern void rnd_pos(struct room *rp, coord *cp);
|
|
|
|
|
extern int rnd_room(void);
|
|
|
|
|
|
|
|
|
|
/* save.c */
|
|
|
|
|
|
|
|
|
|
extern int restore(char *file);
|
|
|
|
|
extern int save_game(void);
|
|
|
|
|
extern void save_file(FILE *savefd);
|
|
|
|
|
|
|
|
|
|
/* scrolls.c */
|
|
|
|
|
|
|
|
|
|
extern void read_scroll(struct thing *reader, int which, int flags);
|
|
|
|
|
extern struct linked_list *creat_mons(struct thing *person,int monster,int message);
|
|
|
|
|
extern int place_mons(int y, int x, coord *pos);
|
|
|
|
|
extern int is_r_on(struct object *obj);
|
|
|
|
|
extern void monread(struct thing *reader, int which, int flags);
|
|
|
|
|
|
|
|
|
|
/* status.c */
|
|
|
|
|
|
|
|
|
|
extern int has_defensive_spell(struct thing th);
|
|
|
|
|
|
|
|
|
|
/* sticks.c */
|
|
|
|
|
|
|
|
|
|
extern void fix_stick(struct object *cur);
|
|
|
|
|
extern void do_zap(struct thing *zapper, int which, unsigned long flags);
|
|
|
|
|
extern void drain(int ymin, int ymax, int xmin, int xmax);
|
|
|
|
|
extern char *charge_str(struct object *obj, char *buf);
|
|
|
|
|
extern void shoot_bolt(struct thing *shooter, coord start, coord dir, int get_points, int reason, char *name, int damage);
|
|
|
|
|
extern void monster_do_zap(struct thing *zapper, int which, int flags);
|
|
|
|
|
extern void cancel_player(int not_unique);
|
|
|
|
|
|
|
|
|
|
/* things.c */
|
|
|
|
|
|
|
|
|
|
extern char *inv_name(struct object *obj, int lowercase);
|
|
|
|
|
extern void rem_obj(struct linked_list *item, int dis);
|
|
|
|
|
extern void add_obj(struct linked_list *item, int y, int x);
|
|
|
|
|
extern int drop(struct linked_list *item);
|
|
|
|
|
extern int dropcheck(struct object *op);
|
|
|
|
|
extern struct linked_list *new_thing(void);
|
|
|
|
|
extern struct linked_list *spec_item(char type, int which, int hit, int damage);
|
|
|
|
|
extern int pick_one(struct magic_item *magic, int nitems);
|
|
|
|
|
extern char *blesscurse(long flags);
|
|
|
|
|
extern int extras(void);
|
|
|
|
|
extern char *name_type(int type);
|
|
|
|
|
extern linked_list *make_item(object *obj_p);
|
|
|
|
|
extern int is_member(char *list_p, int member);
|
|
|
|
|
|
|
|
|
|
/* trader.c */
|
|
|
|
|
|
|
|
|
|
extern void do_post(void);
|
|
|
|
|
extern void buy_it(char itemtype, int flags);
|
|
|
|
|
extern void sell_it(void);
|
|
|
|
|
extern void describe_it(struct object *obj);
|
|
|
|
|
extern int open_market(void);
|
|
|
|
|
extern int get_worth(struct object *obj);
|
|
|
|
|
extern void trans_line(void);
|
|
|
|
|
|
|
|
|
|
/* verify.c */
|
|
|
|
|
|
|
|
|
|
extern void verify_function(const char *file, const int line);
|
|
|
|
|
|
|
|
|
|
/* vers.c */
|
|
|
|
|
|
|
|
|
|
extern char *save_format;
|
|
|
|
|
extern char *version;
|
|
|
|
|
extern char *release;
|
|
|
|
|
|
|
|
|
|
/* weapons.c */
|
|
|
|
|
|
|
|
|
|
extern coord do_motion(int ob, int ydelta, int xdelta, struct thing *tp);
|
|
|
|
|
extern void fall(struct thing *tp, struct linked_list *item, int pr, int
|
|
|
|
|
player_owned);
|
|
|
|
|
extern int hit_monster(int y, int x, struct object *weapon, struct thing *thrower);
|
|
|
|
|
extern int wield_ok(struct thing *wieldee, struct object *obj, int print_message);
|
|
|
|
|
extern int shoot_ok(int ch);
|
|
|
|
|
extern int fallpos(coord pos, coord *newpos);
|
|
|
|
|
extern void wield(void);
|
|
|
|
|
extern char *num(int n1, int n2, char *buf);
|
|
|
|
|
extern void init_weapon(struct object *weap, int type);
|
|
|
|
|
extern void missile(int ydelta, int xdelta, struct linked_list *item, struct thing *tp);
|
|
|
|
|
|
|
|
|
|
/* wizard.c */
|
|
|
|
|
|
|
|
|
|
extern void whatis(struct linked_list *what);
|
|
|
|
|
extern void teleport(void);
|
|
|
|
|
extern int passwd(void);
|
|
|
|
|
|
|
|
|
|
/* mdport.c */
|
|
|
|
|
char *md_strdup(const char *s);
|
|
|
|
|
long md_random(void);
|
|
|
|
|
void md_srandom(long seed);
|
|
|
|
|
int md_readchar(WINDOW *win);
|
2017-02-09 16:29:45 -05:00
|
|
|
int md_getuid(void);
|
2017-02-15 20:38:12 -05:00
|
|
|
void md_normaluser(void);
|
2017-09-03 19:58:22 -04:00
|
|
|
void md_onsignal_autosave(void);
|
|
|
|
|
void md_ignore_signals(void);
|
2017-01-31 19:56:04 -05:00
|
|
|
|
|
|
|
|
#define NOOP(x) (x += 0)
|
2017-01-31 20:33:49 -05:00
|
|
|
#define CCHAR(x) ( (char) (x & A_CHARTEXT) )
|