/* * MTYPE.H: * * #defines required by the rest of the program * * Copyright (C) 1991, 1992, 1993, 1997 Brooke Paul & Brett Vickers * */ #ifndef READCFG #define READCFG /* pathnames */ #define ROOMPATH "../rooms" #define MONPATH "../objmon" #define OBJPATH "../objmon" #define PLAYERPATH "../player" #define DOCPATH "../help" #define POSTPATH "../post" #define BINPATH "../bin" #define LOGPATH "../log" #endif /* READCFG */ /* #define USEBANK */ /* I/O buffer sizes */ #define IBUFSIZE 1024 #define OBUFSIZE 8192 /* File permissions */ /*#define S_IWRITE 00660 */ /*#define S_IREAD 00006 */ #ifndef WIN32 #define O_BINARY 0 #endif #define ACC 00660 /* merror() error types */ #define FATAL 1 #define NONFATAL 0 #define COMMANDMAX 5 /* Monster and object files sizes (in terms of monsters or objects) */ #define MFILESIZE 100 #define OFILESIZE 100 /* memory limits */ #define RMAX 9000 /* Max number of these allowed to be created */ #define CMAX 2000 #define OMAX 2000 #define PMAX 256 #define RQMAX 600 /* Max number of these allowed in memory */ #define CQMAX 200 /* at any one time */ #define OQMAX 200 /* how often (in seconds) players get saved */ #define SAVEINTERVAL 1200 /* Save flags */ #define PERMONLY 1 #define ALLITEMS 0 /* Command status returns */ #define DISCONNECT 1 #define PROMPT 2 #define DOPROMPT 3 /* Warring Kingdoms */ #define AT_WAR 1 /* princes at war =1 / 0=peace */ #define REWARD 1000 /* base value for pledge and rescind */ #define MAXALVL 25 /*max size of exp level array */ /* Creature stats */ #define STR 1 #define DEX 2 #define CON 3 #define INT 4 #define PTY 5 /* Character classes */ #define ASSASSIN 1 #define BARBARIAN 2 #define CLERIC 3 #define FIGHTER 4 #define MAGE 5 #define PALADIN 6 #define RANGER 7 #define THIEF 8 #define BARD 9 #define MONK 10 #define DRUID 11 #define ALCHEMIST 12 #define CARETAKER 13 #define DM 14 /* Character races */ #define DWARF 1 #define ELF 2 #define HALFELF 3 #define HOBBIT 4 #define HUMAN 5 #define ORC 6 #define HALFGIANT 7 #define GNOME 8 #define TROLL 9 #define HALFORC 10 #define OGRE 11 #define DARKELF 12 #define GOBLIN 13 /* creature types */ #define PLAYER 0 #define MONSTER 1 #define NPC 2 /* object types */ #define ARMOR 5 #define POTION 6 #define SCROLL 7 #define WAND 8 #define CONTAINER 9 #define MONEY 10 #define KEY 11 #define LIGHTSOURCE 12 #define MISC 13 #define HERB 14 #define FOOD 15 #define DRINK 16 /* Proficiencies */ #define SHARP 0 #define THRUST 1 #define BLUNT 2 #define POLE 3 #define MISSILE 4 /* Spell Realms */ #define EARTH 1 #define WIND 2 #define FIRE 3 #define WATER 4 /* Daily use variables */ #define DL_BROAD 0 /* Daily broadcasts */ #define DL_ENCHA 1 /* Daily enchants */ #define DL_FHEAL 2 /* Daily heals */ #define DL_TRACK 3 /* Daily track spells */ #define DL_DEFEC 4 /* Daily defecations */ #define DL_CHARM 5 /* Daily charms */ #define DL_RCHRG 6 /* Daily wand recharges */ #define DL_TELEP 7 /* Daily tports */ #define DL_BROAE 8 /* Daily broad-emotes */ /* Last-time specifications */ #define LT_INVIS 0 #define LT_PROTE 1 #define LT_BLESS 2 #define LT_ATTCK 3 #define LT_TRACK 4 #define LT_MSCAV 4 #define LT_STEAL 5 #define LT_PICKL 6 #define LT_MWAND 6 #define LT_SERCH 7 #define LT_HEALS 8 #define LT_SPELL 9 #define LT_PEEKS 10 #define LT_PLYKL 11 #define LT_READS 12 #define LT_LIGHT 13 #define LT_HIDES 14 #define LT_TURNS 15 #define LT_HASTE 16 #define LT_DINVI 17 #define LT_DMAGI 18 #define LT_PRAYD 19 #define LT_PREPA 20 #define LT_LEVIT 21 #define LT_PSAVE 22 #define LT_RFIRE 23 #define LT_FLYSP 24 #define LT_RMAGI 25 #define LT_MOVED 26 #define LT_KNOWA 27 #define LT_HOURS 28 #define LT_RCOLD 29 #define LT_BRWAT 30 #define LT_SSHLD 31 #define LT_FEARS 33 #define LT_SILNC 34 #define LT_SINGS 35 #define LT_CHRMD 36 #define LT_MEDIT 37 #define LT_TOUCH 38 #define LT_SECCK 39 #define LT_PREPN 40 #define LT_SUSTN 41 /* Maximum number of items that can be worn/readied */ #define MAXWEAR 20 /* Wear locations */ #define BODY 1 #define ARMS 2 #define LEGS 3 #define NECK 4 #define NECK1 4 #define NECK2 5 #define HANDS 6 #define HEAD 7 #define FEET 8 #define FINGER 9 #define FINGER1 9 #define FINGER2 10 #define FINGER3 11 #define FINGER4 12 #define FINGER5 13 #define FINGER6 14 #define FINGER7 15 #define FINGER8 16 #define HELD 17 #define SHIELD 18 #define FACE 19 #define WIELD 20 /* Spell flags */ #define SVIGOR 0 /* vigor */ #define SHURTS 1 /* hurt */ #define SLIGHT 2 /* light */ #define SCUREP 3 /* curepoison */ #define SBLESS 4 /* bless */ #define SPROTE 5 /* protection */ #define SFIREB 6 /* fireball */ #define SINVIS 7 /* invisibility */ #define SRESTO 8 /* restore */ #define SDINVI 9 /* detect-invisibility */ #define SDMAGI 10 /* detect-magic */ #define STELEP 11 /* teleport */ #define SBEFUD 12 /* befuddle */ #define SLGHTN 13 /* lightning */ #define SICEBL 14 /* iceblade */ #define SENCHA 15 /* enchant */ #define SRECAL 16 /* word-of-recall */ #define SSUMMO 17 /* summon */ #define SMENDW 18 /* mend-wounds */ #define SFHEAL 19 /* heal */ #define STRACK 20 /* track */ #define SLEVIT 21 /* levitation */ #define SRFIRE 22 /* resist-fire */ #define SFLYSP 23 /* fly */ #define SRMAGI 24 /* resist-magic */ #define SSHOCK 25 /* shockbolt */ #define SRUMBL 26 /* rumble */ #define SBURNS 27 /* burn */ #define SBLIST 28 /* blister */ #define SDUSTG 29 /* dustgust */ #define SWBOLT 30 /* waterbolt */ #define SCRUSH 31 /* stonecrush */ #define SENGUL 32 /* engulf */ #define SBURST 33 /* burstflame */ #define SSTEAM 34 /* steamblast */ #define SSHATT 35 /* shatterstone */ #define SIMMOL 36 /* immolate */ #define SBLOOD 37 /* bloodboil */ #define STHUND 38 /* thunderbolt */ #define SEQUAK 39 /* earthquake */ #define SFLFIL 40 /* flamefill */ #define SKNOWA 41 /* know-alignment */ #define SREMOV 42 /* remove-curse */ #define SRCOLD 43 /* resist-cold */ #define SBRWAT 44 /* breathe water */ #define SSSHLD 45 /* stone shield */ #define SLOCAT 46 /* locate player */ #define SDREXP 47 /* drain energy (exp) */ #define SRMDIS 48 /* cure disease */ #define SRMBLD 49 /* cure blindess */ #define SFEARS 50 /* fear */ #define SRVIGO 51 /* room vigor */ #define STRANO 52 /* item transport */ #define SBLIND 53 /* cause blindness */ #define SSILNC 54 /* cause silence */ #define SFORTU 55 /* fortune */ /*Trap types */ #define TRAP_PIT 1 /* Pit trap */ #define TRAP_DART 2 /* Poison dart trap */ #define TRAP_BLOCK 3 /* Falling block */ #define TRAP_MPDAM 4 /* Mp damaging trap */ #define TRAP_RMSPL 5 /* Spell loss trap */ #define TRAP_NAKED 6 /* player loses all items */ #define TRAP_ALARM 7 /* monster alarm trap */ /* Spell casting types */ #define CAST 0 /* Room flags */ #define RSHOPP 0 /* Shoppe */ #define RDUMPR 1 /* Dump */ #define RPAWNS 2 /* Pawn Shoppe */ #define RTRAIN 3 /* Training class bits (3-6) */ #define RREPAI 7 /* Repair Shoppe */ #define RDARKR 8 /* Room is dark always */ #define RDARKN 9 /* Room is dark at night */ #define RPOSTO 10 /* Post office */ #define RNOKIL 11 /* Safe room, no playerkilling */ #define RNOTEL 12 /* Cannot teleport to this room */ #define RHEALR 13 /* Heal faster in this room */ #define RONEPL 14 /* 1-player only inside */ #define RTWOPL 15 /* 2-players only inside */ #define RTHREE 16 /* 3-players only inside */ #define RNOMAG 17 /* No magic allowed in room */ #define RPTRAK 18 /* Permanent tracks in room */ #define REARTH 19 /* Earth realm */ #define RWINDR 20 /* Wind realm */ #define RFIRER 21 /* Fire realm */ #define RWATER 22 /* Water realm */ #define RPLWAN 23 /* Player-dependent monster wanders */ #define RPHARM 24 /* player harming room */ #define RPPOIS 25 /* player poison room */ #define RPMPDR 26 /* player mp drain room */ #define RPBEFU 27 /* player befuddle room */ #define RNOLEA 28 /* player can not be summon out */ #define RPLDGK 29 /* player can pledge in room */ #define RRSCND 30 /* player can rescind in room */ #define RNOPOT 31 /* No potion room */ #define RPMEXT 32 /* Player magic spell extend */ #define RNOLOG 33 /* No player login */ #define RELECT 34 /* Election Booth */ #define RNDOOR 35 /* Indoors */ #define RISH2O 36 /* Room is a water source */ /* Player flags */ #define PBLESS 0 /* Bless spell */ #define PHIDDN 1 /* Hidden */ #define PINVIS 2 /* Invisibility */ #define PNOBRD 3 /* Don't show broadcasts */ #define PNOLDS 4 /* Don't show long description */ #define PNOSDS 5 /* Don't show short description */ #define PNORNM 6 /* Don't show room name */ #define PNOEXT 7 /* Don't show exits */ #define PPROTE 8 /* Protection spell */ #define PNOAAT 9 /* no auto attack for players */ #define PDMINV 10 /* DM Invisibility */ #define PNOCMP 11 /* Non-compact */ #define PMALES 12 /* Sex == male */ #define PHEXLN 13 /* Hexline */ #define PWIMPY 14 /* Wimpy mode */ #define PEAVES 15 /* Eavesdropping mode */ #define PPOISN 16 /* Poisoned */ #define PLIGHT 17 /* Light spell cast */ #define PPROMP 18 /* Display status prompt */ #define PHASTE 19 /* Haste flag (for rangers) */ #define PDMAGI 20 /* Detect magic */ #define PDINVI 21 /* Detect invisible */ #define PPRAYD 22 /* Prayer activated */ #define PROBOT 23 /* Robot mode */ #define PPREPA 24 /* Prepared for trap */ #define PLEVIT 25 /* Levitation */ #define PANSIC 26 /* Ansi Color */ #define PSPYON 27 /* Spying on someone */ #define PCHAOS 28 /* Chaotic/!Lawful */ #define PREADI 29 /* Reading a file */ #define PRFIRE 30 /* Resisting fire */ #define PFLYSP 31 /* Flying */ #define PRMAGI 32 /* Resist magic */ #define PKNOWA 33 /* Know alignment */ #define PNOSUM 34 /* Nosummon flag */ #define PIGNOR 35 /* Ignore all send */ #define PRCOLD 36 /* Resist-cold flag */ #define PBRWAT 37 /* Breathe wateR flag */ #define PSSHLD 38 /* Resist-cold flag */ #define PPLDGK 39 /* player pledge to a prince */ #define PKNGDM 40 /* Pledge to prince 0/1 */ #define PDISEA 41 /* Player is diseased */ #define PBLIND 42 /* Player is blind */ #define PFEARS 43 /* Player is fearful */ #define PSILNC 44 /* Player has been silenced */ #define PCHARM 45 /* Player is charmed */ #define PNLOGN 46 /* No login messages sent */ #define PLECHO 47 /* Echo comms to sender */ #define PSECOK 48 /* Player has passed security check */ #define PAUTHD 49 /* No-port that has been authorized */ #define PALIAS 50 /* DM is aliasing */ #define PPREPN 51 /* Player is preparing an object */ #define PNSUSN 52 /* Player needs sustenance */ #define PIGCLA 53 /* Player is ignoring class comms. */ /* Monster flags */ #define MPERMT 0 /* Permanent monster */ #define MHIDDN 1 /* Hidden */ #define MINVIS 2 /* Invisible */ #define MTOMEN 3 /* Man to men on plural */ #define MDROPS 4 /* Don't add s on plural */ #define MNOPRE 5 /* No prefix */ #define MAGGRE 6 /* Aggressive */ #define MGUARD 7 /* Guards treasure */ #define MBLOCK 8 /* Blocks exits */ #define MFOLLO 9 /* Monster follows attacker */ #define MFLEER 10 /* Monster flees */ #define MSCAVE 11 /* Monster is a scavenger */ #define MMALES 12 /* Sex == male */ #define MPOISS 13 /* Poisoner */ #define MUNDED 14 /* Undead */ #define MUNSTL 15 /* Cannot be stolen from */ #define MPOISN 16 /* Poisoned */ #define MMAGIC 17 /* Can cast spells */ #define MHASSC 18 /* Has already scavenged something */ #define MBRETH 19 /* Breath weapon */ #define MMGONL 20 /* Can only be harmed by magic */ #define MDINVI 21 /* Detect invisibility */ #define MENONL 22 /* Can only be harmed by magic/ench.weapon */ #define MTALKS 23 /* Monster can talk interactively */ #define MUNKIL 24 /* Monster cannot be harmed */ #define MNRGLD 25 /* Monster has fixed amt of gold */ #define MTLKAG 26 /* Becomes aggressive after talking */ #define MRMAGI 27 /* Resist magic */ #define MBRWP1 28 /* MBRWP1 & MBRWP2 type of breath */ #define MBRWP2 29 /* 00 =fire, 01= ice, 10 =gas, 11= acid */ #define MENEDR 30 /* Energy (exp) drain */ #define MKNGDM 31 /* monster belongs to kingdom 0/1 */ #define MPLDGK 32 /* Players can pledge to monster */ #define MRSCND 33 /* Players can rescind to monster */ #define MDISEA 34 /* Monster causes disease */ #define MDISIT 35 /* Monster can dissolve items */ #define MPURIT 36 /* Player can purchase from monster */ #define MTRADE 37 /* Monster will give items */ #define MPGUAR 38 /* Passive exit guard */ #define MGAGGR 39 /* Monster aggro to good players */ #define MEAGGR 40 /* Monster aggro to evil players */ #define MDEATH 41 /* Monster has additon desc after death */ #define MMAGIO 42 /* Monster cast magic percent flag (prof 1) */ #define MRBEFD 43 /* Monster resists stun only */ #define MNOCIR 44 /* Monster cannot be circled */ #define MBLNDR 45 /* Monster blinds */ #define MDMFOL 46 /* Monster will follow DM */ #define MFEARS 47 /* Monster is fearful */ #define MSILNC 48 /* Monster is silenced */ #define MBLIND 49 /* Monster is blind */ #define MCHARM 50 /* Monster is charmed */ #define MMOBIL 51 /* Mobile monster */ #define MROBOT 52 /* Logic Monster */ #define MIREGP 53 /* Irregular plural name */ /* Object flags */ #define OPERMT 0 /* Permanent item (not yet taken) */ #define OHIDDN 1 /* Hidden */ #define OINVIS 2 /* Invisible */ #define OSOMEA 3 /* "some" prefix */ #define ODROPS 4 /* Don't add s on plural */ #define ONOPRE 5 /* No prefix */ #define OCONTN 6 /* Container object */ #define OWTLES 7 /* Container of weightless holding */ #define OTEMPP 8 /* Temporarily permanent */ #define OPERM2 9 /* Permanent INVENTORY item */ #define ONOMAG 10 /* Mages cannot wear/use it */ #define OLIGHT 11 /* Object serves as a light */ #define OGOODO 12 /* Usable only by good players */ #define OEVILO 13 /* Usable only by evil players */ #define OENCHA 14 /* Object enchanted */ #define ONOFIX 15 /* Cannot be repaired */ #define OCLIMB 16 /* Climbing gear */ #define ONOTAK 17 /* Cannot be taken */ #define OSCENE 18 /* Part of room description/scenery */ #define OSIZE1 19 /* OSIZE: 00=all wear, 01=small wear, */ #define OSIZE2 20 /* 10=medium wear, 11=large wear */ #define ORENCH 21 /* Random enchantment flag */ #define OCURSE 22 /* The item is cursed */ #define OWEARS 23 /* The item is being worn */ #define OUSEFL 24 /* Can be used from the floor */ #define OCNDES 25 /* Container devours items */ #define ONOMAL 26 /* Usable by only females */ #define ONOFEM 27 /* Usable by only males */ #define ODDICE 28 /* damage based on object nds */ #define OPLDGK 29 /* pledge players may only use */ #define OKNGDM 30 /* object belongs to kingdom 0/1 */ #define OCLSEL 31 /* class selective weapon */ #define OASSNO 32 /* class selective: assassin */ #define OBARBO 33 /* class selective: barbarian */ #define OCLERO 34 /* class selective: cleric */ #define OFIGHO 35 /* class selective: fighter */ #define OMAGEO 36 /* class selective: mage */ #define OPALAO 37 /* class selective: paladin */ #define ORNGRO 38 /* class selective: ranger */ #define OTHIEO 39 /* class selective: thief */ #define OBARDO 40 /* class selective: bard */ #define OMONKO 41 /* class selective: monk */ #define ONSHAT 42 /* weapon will never shatter */ #define OALCRT 43 /* weapon will always critical */ #define OLUCKY 44 /* Item is a luck charm */ #define OCURSW 45 /* Item is cursed & worn */ #define OHBREW 46 /* Herb brew */ #define OHNGST 47 /* Herb ingest */ #define OHPAST 48 /* Herb paste */ #define OHAPLY 49 /* Herb apply */ #define ONPREP 50 /* Object is being prepared */ #define ODPREP 51 /* Object preparation is complete */ #define OTMPEN 52 /* Object is temporarily enchanted */ #define ODRUDO 53 /* class selective: druid */ #define OALCHO 54 /* class selective: alchemist */ #define OIREGP 55 /* Irregualr plural name */ /* Exit flags */ #define XSECRT 0 /* Secret */ #define XINVIS 1 /* Invisible */ #define XLOCKD 2 /* Locked */ #define XCLOSD 3 /* Closed */ #define XLOCKS 4 /* Lockable */ #define XCLOSS 5 /* Closable */ #define XUNPCK 6 /* Un-pickable lock */ #define XNAKED 7 /* Naked exit */ #define XCLIMB 8 /* Climbing gear required to go up */ #define XREPEL 9 /* Climbing gear require to repel */ #define XDCLIM 10 /* Very difficult climb */ #define XFLYSP 11 /* Must fly to go that way */ #define XFEMAL 12 /* female only exit */ #define XMALES 13 /* male only exit */ #define XPLDGK 14 /* pledge player exit only */ #define XKNGDM 15 /* exit for kingdom 0/1 */ #define XNGHTO 16 /* only open at night */ #define XDAYON 17 /* only open during day */ #define XPGUAR 18 /* passive guarded exit */ #define XNOSEE 19 /* Can not use / see exit */ #define XPLSEL 20 /* Class selective exit */ #define XPASSN 21 #define XPBARB 22 #define XPCLER 23 #define XPFGHT 24 #define XPMAGE 25 #define XPPALA 26 #define XPRNGR 27 #define XPTHEF 28 #define XPBARD 29 #define XPMONK 30 #define XPDRUD 31 #define XPALCH 32 /* specials */ #define SP_MAPSC 1 /* Map or scroll */ #define SP_COMBO 2 /* Combination lock */ #define SP_HERB_HEAL 3 /* Various Herbs */ #define SP_HERB_HARM 4 #define SP_HERB_POISON 5 #define SP_HERB_DISEASE 6 #define SP_HERB_CURE_POISON 7 #define SP_HERB_CURE_DISEASE 8 /* obj_str and crt_str flags */ #define CAP 1 #define INV 2 #define MAG 4 #define RETURN(a,b,c) Ply[a].io->fn = b; Ply[a].io->fnparam = c; return; #define F_ISSET(p,f) ((p)->flags[(f)/8] & 1<<((f)%8)) #define F_SET(p,f) ((p)->flags[(f)/8] |= 1<<((f)%8)) #define F_CLR(p,f) ((p)->flags[(f)/8] &= ~(1<<((f)%8))) #define S_ISSET(p,f) ((p)->spells[(f)/8] & 1<<((f)%8)) #define S_SET(p,f) ((p)->spells[(f)/8] |= 1<<((f)%8)) #define S_CLR(p,f) ((p)->spells[(f)/8] &= ~(1<<((f)%8))) #define Q_ISSET(p,f) ((p)->quests[(f)/8] & 1<<((f)%8)) #define Q_SET(p,f) ((p)->quests[(f)/8] |= 1<<((f)%8)) #define Q_CLR(p,f) ((p)->quests[(f)/8] &= ~(1<<((f)%8))) #define BOOL(a) ((a) ? 1 : 0) #define EQUAL(a,b) ((a) && (b) && \ (!strncmp((a)->name,(b),strlen(b)) || \ !strncmp((a)->key[0],(b),strlen(b)) || \ !strncmp((a)->key[1],(b),strlen(b)) || \ !strncmp((a)->key[2],(b),strlen(b)))) #define LT(a,b) ((a)->lasttime[(b)].ltime + (a)->lasttime[(b)].interval) #define mrand(a,b) ((a)+(rand()%((b)*10-(a)*10+10))/10) #define mdice(a) (dice((a)->ndice,(a)->sdice,(a)->pdice)) #define MIN(a,b) (((a)<(b)) ? (a):(b)) #define MAX(a,b) (((a)>(b)) ? (a):(b)) #define BLACK 30 #define RED 31 #define GREEN 32 #define YELLOW 33 #define BLUE 34 #define MAGENTA 35 #define CYAN 36 #define WHITE 37 #define BOLD 1 #define BLINK 5 #define CANCELLED 8 #define NORMAL 0 #define ANSI(a,b) if( (a) > -1 ) { if( F_ISSET(Ply[(a)].ply, PANSIC)) \ print((a), "%c[%dm", 27, (b));}