billr@saab.CNA.TEK.COM (Bill Randle) (07/13/89)
Submitted-by: "Laurence R. Brothers" <brothers@paul.rutgers.edu> Posting-number: Volume 7, Issue 28 Archive-name: omega3/Part09 Supersedes: omega2: Volume 5, Issue 11-29,38-40 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 9 (of 20)." # Contents: odefs.h oitem.c omotd.txt # Wrapped by billr@saab on Thu Jun 29 08:14:04 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'odefs.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'odefs.h'\" else echo shar: Extracting \"'odefs.h'\" \(28627 characters\) sed "s/^X//" >'odefs.h' <<'END_OF_FILE' X/* omega copyright (c) 1987,1988,1989 by Laurence Raphael Brothers */ X/* This file is the header file for all omega modules */ X/* odefs.h */ X X/* omega will NOT function unless the implementor sets the appropriate Xdefinitions in the following section. */ X X/*--------------------------USER DEFINITIONS--------------------------*/ X X/* The average system V user should probably uncomment the following Xtwo definitions. */ X X/* Implementor should uncomment the following if his system uses Xstring.h instead of strings.h (try man strings) */ X X#define STRING X#ifdef MSDOS X#define SYSTEMV X#endif X X/* Implementor should uncomment the following if random and srandom X are not available (try man random) */ X X/* #define NORANDOM */ X X/* Implementor should uncomment the following if omega appears to Xredraw the screen excessively. */ X X/* #define EXCESSIVE_REDRAW */ X X/* The following definition is recommended. Remove it only if you have Xhuge amounts of disk space and are annoyed at waiting a few more seconds Xon save and restore. */ X X/* Implementor should set the following three definitions: */ X X/* OMEGALIB is where all the data files reside. X Note the final / is necessary. X This might usually be "/usr/games/lib/omegalib/" */ X X#define OMEGALIB "/es/quasar/games/lib/omega/" X X/* set WIZARD to implementor's username */ X X#define WIZARD "quasar" X X/* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */ X/* dbx still intercepts the signals first, so it's ok for debugging */ X X#define CATCH_SIGNALS 1 X X X/*---------------------------SYSTEM DEFINITIONS---------------------------*/ X X/* Don't change anything from here on (unless you know what you're doing) */ X#define VERSION 75 X#define VERSIONSTRING "omega version 0.75 (beta)" X X#define VACANT 0 X#define ABORT -1 X#define CASHVALUE -2 X X/* moderately arbitrary but probably cannot be easily changed */ X#define MAXWIDTH 64 X#define MAXLENGTH 64 X#define SMALLSCREENLENGTH 16 X X/* number of slots in inventory. Cannot be changed without work */ X#define MAXITEMS 16 X X/* number of slots in pack. Should be <= 26. */ X#define MAXPACK 26 X X/* number of items in pawn shop. Should be <= 26 */ X#define PAWNITEMS 10 X X/* Verbosity levels */ X#define TERSE 0 X#define MEDIUM 1 X#define VERBOSE 2 X X/* Arbitrary. Max of the levels in the dungeons */ X#define MAXLEVELS 21 X X/* levels in each dungeon */ X#define ASTRALLEVELS 5 X#define SEWERLEVELS 18 X#define CASTLELEVELS 16 X#define CAVELEVELS 10 X#define VOLCANOLEVELS 20 X X/* Overall Game Progress Vector Bits */ X/* Long had BETTER have at least 32 bits.... */ X#define SPOKE_TO_DRUID 1L X#define COMPLETED_CAVES 2L X#define COMPLETED_SEWERS 4L X#define COMPLETED_CASTLE 8L X#define COMPLETED_ASTRAL 16L X#define COMPLETED_VOLCANO 32L X#define KILLED_DRAGONLORD 64L X#define KILLED_EATER 128L X#define KILLED_LAWBRINGER 256L X#define COMPLETED_CHALLENGE 512L X#define SOLD_CONDO 1024L X#define FAST_MOVE 2048L X#define SKIP_PLAYER 4096L X#define SKIP_MONSTERS 8192L X#define MOUNTED 16384L X#define SUPPRESS_PRINTING 32768L X#define LOST 65536L X#define ARENA_MODE 131072L X#define CHEATED 262144L X#define BANK_BROKEN 524288L X#define CLUB_MEMBER 1048576L X#define PREPARED_VOID 2097152L X#define DESTROYED_ORDER 4194304L X#define GAVE_STARGEM 8388608L X#define ATTACKED_ORACLE 16777216L X#define UNDEAD_GUARDS 33554432L X X/* general environment types */ X#define E_NEVER_NEVER_LAND 0 X#define E_COUNTRYSIDE 1 X#define E_CITY 2 X#define E_VILLAGE 3 X#define E_TACTICAL_MAP 4 X#define E_SEWERS 5 X#define E_CASTLE 6 X#define E_CAVES 7 X#define E_VOLCANO 8 X#define E_ASTRAL 9 X#define E_ARENA 10 X#define E_HOVEL 11 X#define E_MANSION 12 X#define E_HOUSE 13 X#define E_DLAIR 14 X#define E_ABYSS 15 X#define E_STARPEAK 16 X#define E_MAGIC_ISLE 17 X#define E_TEMPLE 18 X#define E_CIRCLE 19 X#define E_COURT 20 X#define E_MAX E_COURT X X/* player game status */ X#define DEAD 1 X#define QUIT 2 X#define WIN 3 X#define BIGWIN 4 X X/* kind of arbitrary */ X#define MAXROOMS 48 X#define MAXCONNECTIONS 4 X X/* some random characters */ X#define ESCAPE 27 X#define RETURN 13 X#define LINEFEED 10 X#define BACKSPACE 8 X#define DELETE 127 X X X/* tac mode action definitions */ X/* have to remember to find where these are used, mostly unused, now! */ X#define DISENGAGE 10 X#define BLOCK 20 X#define CUT 30 X#define THRUST 40 X#define MAGIC 50 X#define LUNGE 60 X#define RIPOSTE 70 X#define WIELD 80 X#define PICK_UP 90 X X/* as in attack low, block high, etc. */ X/* These values may be added to the ones above to get things like X block high, cut low, etc. CLEVER is only used by some monsters X to cheat with.... */ X#define LOW 1 X#define CENTER 2 X#define HIGH 3 X#define CLEVER 4 X X X/* weapon types */ X#define CUTTING 1 X#define THRUSTING 2 X#define STRIKING 3 X#define MISSILE 4 X X/* random aux constants */ X/* aux field for private residences in city */ X#define BURGLED 2 X#define LOCKED 3 X#define UNLOCKED 0 X X/* cannot use M command on site with this aux value */ X#define NOCITYMOVE 666 X X/* bow and crossbow object aux fields */ X#define LOADED 1 X#define UNLOADED 0 X X/* alignment used randomly throughout*/ X#define LAWFUL 1 X#define CHAOTIC 2 X#define NEUTRAL 3 X X/* spells */ X#define NUMSPELLS 41 X X#define S_MON_DET 0 X#define S_OBJ_DET 1 X#define S_MISSILE 2 X#define S_FIREBOLT 3 X#define S_TELEPORT 4 X#define S_LBALL 5 X#define S_SLEEP 6 X#define S_DISRUPT 7 X#define S_DISINTEGRATE 8 X#define S_POLYMORPH 9 X#define S_HEAL 10 X#define S_DISPEL 11 X#define S_IDENTIFY 12 X#define S_BREATHE 13 X#define S_INVISIBLE 14 X#define S_WARP 15 X#define S_ENCHANT 16 X#define S_BLESS 17 X#define S_RESTORE 18 X#define S_CURE 19 X#define S_TRUESIGHT 20 X#define S_HELLFIRE 21 X#define S_KNOWLEDGE 22 X#define S_HERO 23 X#define S_RETURN 24 X#define S_DESECRATE 25 X#define S_HASTE 26 X#define S_SUMMON 27 X#define S_SANCTUARY 28 X#define S_ACCURACY 29 X#define S_RITUAL 30 X#define S_FEAR 31 X#define S_APPORT 32 X#define S_SHADOWFORM 33 X#define S_ALERT 34 X#define S_REGENERATE 35 X#define S_SANCTIFY 36 X#define S_CLAIRVOYANCE 37 X#define S_DRAIN 38 X#define S_LEVITATE 39 X#define S_WISH 40 X X/* ranks in guilds, etc */ X#define NUMRANKS 9 X X#define LEGION 0 X#define ARENA 1 X#define COLLEGE 2 X#define THIEVES 3 X#define ORDER 4 X#define CIRCLE 5 X#define NOBILITY 6 X#define PRIESTHOOD 7 X#define ADEPT 8 X X#define LEGIONAIRE 1 X#define CENTURION 2 X#define FORCE_LEADER 3 X#define COLONEL 4 X#define COMMANDANT 5 X X#define TRAINEE 1 X#define BESTIARIUS 2 X#define RETIARIUS 3 X#define GLADIATOR 4 X#define CHAMPION 5 X X#define NOVICE 1 X#define STUDENT 2 X#define PRECEPTOR 3 X#define MAGE 4 X#define ARCHMAGE 5 X X#define TMEMBER 1 X#define ATHIEF 2 X#define THIEF 3 X#define TMASTER 4 X#define SHADOWLORD 5 X X#define GALLANT 1 X#define GUARDIAN 2 X#define CHEVALIER 3 X#define PALADIN 4 X#define JUSTICIAR 5 X X#define INITIATE 1 X#define ENCHANTER 2 X#define SORCEROR 3 X#define HIGHSORCEROR 4 X#define PRIME 5 X X#define COMMONER 1 X#define ESQUIRE 2 X#define KNIGHT 3 X#define LORD 4 X#define DUKE 5 X X#define LAY 1 X#define ACOLYTE 2 X#define PRIEST 3 X#define SPRIEST 4 X#define HIGHPRIEST 5 X X/* different priesthoods */ X#define ODIN 1 X#define SET 2 X#define ATHENA 3 X#define HECATE 4 X#define DRUID 5 X#define DESTINY 6 X X X X/* MONSTER STATUS/ABILITY BITS */ X#define AWAKE 1 X#define MOBILE 2 X#define HOSTILE 4 X#define WANDERING 16 X#define HUNGRY 32 X#define GREEDY 64 X#define NEEDY 128 X#define ONLYSWIM 256 X#define FLYING 512 X#define INTANGIBLE 1024 X#define M_INVISIBLE 2048 X#define SWIMMING 4096 X#define POISONOUS 8192 X#define EDIBLE 16384 X X X/* PLAYER STATUS INDICES */ X#define NUMSTATI 25 X X#define ACCURACY 0 X#define BLINDED 1 X#define SLOWED 2 X#define DISPLACED 3 X#define SLEPT 4 X#define DISEASED 5 X#define POISONED 6 X#define HASTED 7 X#define BREATHING 8 X#define INVISIBLE 9 X#define REGENERATING 10 X#define VULNERABLE 11 X#define BERSERK 12 X#define IMMOBILE 13 X#define ALERT 14 X#define AFRAID 15 X#define HERO 16 X#define LEVITATING 17 X#define ACCURATE 18 X#define TRUESIGHT 19 X#define SHADOWFORM 20 X#define ILLUMINATION 21 X#define DEFLECTION 22 X#define PROTECTION 23 X/* PROTECTION is deviant -- indicates protective value, not duration */ X#define RETURNING 24 X/* RETURNING is somewhat deviant--how many turns 'til RETURN spell goes off */ X X/* player immunity indices */ X/* also monster immunity bits (2^n) */ X/* also damage types */ X#define NUMIMMUNITIES 14 X X#define UNSTOPPABLE 0 X#define NORMAL_DAMAGE 1 X#define FLAME 2 X#define COLD 3 X#define ELECTRICITY 4 X#define POISON 5 X#define ACID 6 X#define FEAR 7 X#define SLEEP 8 X#define NEGENERGY 9 X#define OTHER_MAGIC 10 X#define THEFT 11 X#define GAZE 12 X#define INFECTION 13 X#define EVERYTHING -1 X X X/* location lstatus bits */ X#define SEEN 1 X#define LIT 2 X#define SECRET 4 X#define STOPS 8 X X X/* room string id */ X/* for use in roomname() */ X#define NUMROOMNAMES 30 X X/* normal room name indices start after the RS_ constants */ X#define ROOMBASE 39 X#define RS_COURT 38 X#define RS_ZORCH 37 X#define RS_CIRCLE 36 X#define RS_MAGIC_ISLE 35 X#define RS_STARPEAK 34 X#define RS_VOLCANO 33 X#define RS_HIGHASTRAL 32 X#define RS_FIREPLANE 31 X#define RS_AIRPLANE 30 X#define RS_WATERPLANE 29 X#define RS_EARTHPLANE 28 X#define RS_LOWERASTRAL 27 X#define RS_CLOSET 26 X#define RS_SECRETPASSAGE 25 X#define RS_DININGROOM 24 X#define RS_BATHROOM 23 X#define RS_BEDROOM 22 X#define RS_KITCHEN 21 X#define RS_DROWNED_SEWER 20 X#define RS_DRAINED_SEWER 19 X#define RS_SEWER_DUCT 18 X#define RS_ARENA 17 X#define RS_COUNTRYSIDE 16 X#define RS_DRUID 15 X#define RS_HECATE 14 X#define RS_ATHENA 13 X#define RS_SET 12 X#define RS_ODIN 11 X#define RS_DESTINY 10 X#define RS_ADEPT 9 X#define RS_WYRM 8 X#define RS_OCEAN 7 X#define RS_PONDS 6 X#define RS_DRAGONLORD 5 X#define RS_GOBLINKING 4 X#define RS_CAVERN 3 X#define RS_CORRIDOR 2 X#define RS_WALLSPACE 1 X X/* objects, locations, and terrain; characters to draw */ X#define SPACE ' ' X#define WALL '#' X#define PORTCULLIS '7' X#define OPEN_DOOR '|' X#define CLOSED_DOOR '-' X#define WHIRLWIND '6' X#define ABYSS '0' X#define LAVA '`' X#define HEDGE '\"' X#define WATER '~' X#define FIRE ';' X#define TRAP '^' X#define LIFT '_' X#define UP '<' X#define DOWN '>' X#define FLOOR '.' X#define PLAYER '@' X#define CORPSE '+' X#define STATUE '1' X#define RUBBLE '4' X#define ALTAR '8' X#define CASH '$' /* various kinds of money */ X#define PILE '*' /* several objects in one place */ X#define FOOD '%' X#define WEAPON ')' X#define MISSILEWEAPON '(' X#define SCROLL '?' X#define POTION '!' X#define ARMOR ']' X#define SHIELD '[' X#define CLOAK '}' X#define BOOTS '{' X#define STICK '/' X X#define RING '=' X#define THING '\\' X#define ARTIFACT '&' X X/* TERRAIN TYPES */ X#define PLAINS '-' X#define TUNDRA '_' X#define ROAD '.' X#define MOUNTAINS '^' X#define PASS 'v' X#define RIVER '~' X#define CITY 'O' X#define VILLAGE 'o' X#define FOREST '(' X#define JUNGLE ')' X#define SWAMP '=' X#define VOLCANO '!' X#define CASTLE '%' X#define TEMPLE 'X' X#define CAVES '*' X#define DESERT '\"' X#define CHAOS_SEA '+' X#define STARPEAK '|' X#define DRAGONLAIR '$' X#define MAGIC_ISLE '&' X X#define CHAIR '5' X#define SAFE '3' X#define FURNITURE '2' X#define BED '9' X X/* wow, all characters used! */ X X X/* total number of player options */ X#define NUMOPTIONS 9 X X/* number of options with TRUE/FALSE values */ X#define NUMTFOPTIONS 7 X X/* The slot number of the two options not in Player.options */ X#define VERBOSITY_LEVEL 8 X#define SEARCH_DURATION 9 X X/* Player.options bits */ X#define BELLICOSE 1 X#define JUMPMOVE 2 X#define RUNSTOP 4 X#define PICKUP 8 X#define CONFIRM 16 X#define TOPINV 32 X#define PACKADD 64 X X/* This has to be changed whenever an item is added */ X#define NUMSCROLLS 24 X#define NUMPOTIONS 18 X#define NUMFOODS 16 X#define NUMTHINGS 26 X#define NUMWEAPONS 41 X#define NUMARMOR 17 X#define NUMSHIELDS 8 X#define NUMCLOAKS 7 X#define NUMBOOTS 7 X#define NUMRINGS 10 X#define NUMSTICKS 17 X#define NUMARTIFACTS 24 X X/* running sum of itemtypes, for indexing into Objects array */ X#define THINGID 0 X#define FOODID NUMTHINGS X#define SCROLLID (FOODID + NUMFOODS) X#define POTIONID (SCROLLID + NUMSCROLLS) X#define WEAPONID (POTIONID + NUMPOTIONS) X#define ARMORID (WEAPONID + NUMWEAPONS) X#define SHIELDID (ARMORID + NUMARMOR) X#define CLOAKID (SHIELDID + NUMSHIELDS) X#define BOOTID (CLOAKID + NUMCLOAKS) X#define RINGID (BOOTID + NUMBOOTS) X#define STICKID (RINGID + NUMRINGS) X#define ARTIFACTID (STICKID + NUMSTICKS) X#define CASHID (ARTIFACTID+NUMARTIFACTS) X/* Corpse's aux field is monster id */ X#define CORPSEID (CASHID+1) X X#define TOTALITEMS (CORPSEID+1) X X/* describing unique items and monsters */ X#define COMMON 0 X#define UNIQUE_UNMADE 1 X#define UNIQUE_MADE 2 X X/* general item function id's */ X#define I_NO_OP 0 X#define I_NOTHING 1 X X /* note some of these functions are for other types of items too */ X X /* scroll functions */ X#define I_BLESS 101 X#define I_ACQUIRE 102 X#define I_ENCHANT 103 X#define I_TELEPORT 104 X#define I_WISH 105 X#define I_CLAIRVOYANCE 106 X#define I_DISPLACE 107 X#define I_ID 108 X#define I_FIREFLASH 109 X#define I_SPELLS 110 X#define I_JANE_T 111 X#define I_ALERT 112 X#define I_FLUX 113 X#define I_CHARGE 114 X#define I_WARP 115 X#define I_KNOWLEDGE 116 X#define I_LAW 117 X#define I_HINT 118 X#define I_HERO 119 X#define I_TRUESIGHT 120 X#define I_ILLUMINATE 121 X#define I_DEFLECT 122 X X /* potion functions */ X#define I_HEAL 201 X#define I_OBJDET 202 X#define I_MONDET 203 X#define I_SLEEP_SELF 204 X#define I_RESTORE 205 X#define I_NEUTRALIZE_POISON 206 X#define I_SPEED 207 X#define I_AZOTH 208 X#define I_REGENERATE 210 X#define I_INVISIBLE 211 X#define I_BREATHING 212 X#define I_FEAR_RESIST 213 X#define I_AUGMENT 214 X#define I_CHAOS 215 X#define I_ACCURACY 216 X#define I_LEVITATION 217 X#define I_CURE 218 X X /* stick functions */ X#define I_FIREBOLT 301 X#define I_LBOLT 302 X#define I_MISSILE 303 X#define I_SLEEP_OTHER 304 X#define I_FIREBALL 305 X#define I_LBALL 306 X#define I_SUMMON 307 X#define I_HIDE 308 X#define I_DISRUPT 309 X#define I_DISINTEGRATE 310 X#define I_SNOWBALL 311 X#define I_APPORT 312 X#define I_DISPEL 313 X#define I_POLYMORPH 314 X#define I_FEAR 315 X X /* food functions */ X#define I_FOOD 401 X#define I_LEMBAS 402 X#define I_STIM 403 X#define I_POW 404 X#define I_IMMUNE 405 X#define I_POISON_FOOD 406 X#define I_CORPSE 407 X#define I_PEPPER_FOOD 408 X#define I_CANNIBAL 409 X#define I_INEDIBLE 410 X X /* boots functions */ X#define I_PERM_SPEED 501 X#define I_PERM_HERO 502 X#define I_PERM_LEVITATE 503 X#define I_PERM_AGILITY 504 X#define I_BOOTS_JUMPING 505 X#define I_BOOTS_7LEAGUE 506 X X /* cloak functions */ X#define I_PERM_DISPLACE 601 X#define I_PERM_NEGIMMUNE 602 X#define I_PERM_INVISIBLE 603 X#define I_PERM_ACCURACY 604 X#define I_PERM_PROTECTION 605 X#define I_PERM_TRUESIGHT 606 X X /* ring functions */ X#define I_PERM_VISION 701 X#define I_PERM_BURDEN 702 X#define I_PERM_STRENGTH 703 X#define I_PERM_GAZE_IMMUNE 704 X#define I_PERM_FIRE_RESIST 705 X#define I_PERM_POISON_RESIST 706 X#define I_PERM_REGENERATE 707 X#define I_PERM_KNOWLEDGE 708 X X /* armor functions */ X#define I_PERM_ENERGY_RESIST 801 X#define I_PERM_BREATHING 802 X#define I_PERM_FEAR_RESIST 803 X#define I_NORMAL_ARMOR 804 X X/* artifact functions */ X#define I_ORBFIRE 901 X#define I_ORBWATER 902 X#define I_ORBEARTH 903 X#define I_ORBAIR 904 X#define I_ORBMASTERY 905 X#define I_ORBDEAD 906 X#define I_CRYSTAL 907 X#define I_ANTIOCH 908 X#define I_KOLWYNIA 909 X#define I_DEATH 910 X#define I_ENCHANTMENT 911 X#define I_HELM 912 X#define I_LIFE 913 X#define I_JUGGERNAUT 914 X#define I_SYMBOL 915 X#define I_STARGEM 916 X#define I_SCEPTRE 917 X#define I_PLANES 918 X X/* weapons functions */ X#define I_NORMAL_WEAPON 1001 X#define I_LIGHTSABRE 1002 X#define I_DEMONBLADE 1003 X#define I_MACE_DISRUPT 1004 X#define I_TANGLE 1005 X#define I_ARROW 1006 X#define I_BOLT 1007 X#define I_VORPAL 1008 X#define I_DESECRATE 1009 X#define I_FIRESTAR 1010 X#define I_DEFEND 1011 X#define I_VICTRIX 1012 X#define I_EMPIRE 1013 X#define I_SCYTHE 1014 X#define I_ACIDWHIP 1015 X X/* thing functions */ X#define I_PICK 1101 X#define I_KEY 1102 X#define I_SHOVEL 1103 /* unused */ X#define I_EXCAVATOR 1104 /* unused */ X#define I_PERM_ILLUMINATE 1105 X#define I_TRAP 1106 X#define I_RAISE_PORTCULLIS 1107 X X/* shield functions */ X#define I_PERM_DEFLECT 1201 X#define I_NORMAL_SHIELD 1202 X X/* monster function ids */ X/* Its conceivable for a function of one type to be called when another Xwould usually occur. A monster's special function may be an extra move, Xfor example. */ X X#define M_NO_OP -1 X X/* talk functions */ X#define M_TALK_STUPID 101 X#define M_TALK_SILENT 102 X#define M_TALK_HUNGRY 103 X#define M_TALK_GREEDY 104 X#define M_TALK_TITTER 105 X#define M_TALK_MAN 106 X#define M_TALK_ROBOT 107 X#define M_TALK_EVIL 108 X#define M_TALK_BURBLE 109 X#define M_TALK_SLITHY 110 X#define M_TALK_MIMSY 111 X#define M_TALK_SEDUCTOR 112 X#define M_TALK_MP 113 X#define M_TALK_IM 114 X#define M_TALK_GUARD 115 X#define M_TALK_GHOST 116 X#define M_TALK_HINT 117 X#define M_TALK_BEG 118 X#define M_TALK_EF 119 X#define M_TALK_GF 120 X#define M_TALK_MORGON 121 X#define M_TALK_LB 122 X#define M_TALK_DEMONLOVER 123 X#define M_TALK_ASSASSIN 124 X#define M_TALK_NINJA 125 X#define M_TALK_THIEF 126 X#define M_TALK_MERCHANT 127 X#define M_TALK_HORSE 128 X#define M_TALK_PARROT 129 X#define M_TALK_ANIMAL 130 X#define M_TALK_HYENA 131 X#define M_TALK_SERVANT 132 X#define M_TALK_SCREAM 133 X#define M_TALK_DRUID 134 X#define M_TALK_ARCHMAGE 135 X#define M_TALK_PRIME 136 X X/* ability functions */ X#define M_SP_SURPRISE 201 X#define M_SP_MP 202 X#define M_SP_THIEF 203 X#define M_SP_AGGRAVATE 204 X#define M_SP_POISON_CLOUD 205 X#define M_SP_HUGE 206 X#define M_SP_SUMMON 207 X#define M_SP_ILLUSION 208 X#define M_SP_FLUTTER 209 X#define M_SP_ESCAPE 210 X#define M_SP_SPELL 211 X#define M_SP_EXPLODE 212 X#define M_SP_DEMON 213 X#define M_SP_ACID_CLOUD 214 X#define M_SP_WHIRL 215 X#define M_SP_GHOST 216 X#define M_SP_WHISTLEBLOWER 217 X#define M_SP_EATER 218 X#define M_SP_LAWBRINGER 219 X#define M_SP_DRAGONLORD 220 X#define M_SP_DE 221 X#define M_SP_DEMONLOVER 222 X#define M_SP_SEDUCTOR 223 X#define M_SP_MASTER 224 X#define M_SP_WYRM 225 X#define M_SP_BLACKOUT 226 X#define M_SP_BOG 227 X#define M_SP_MERCHANT 228 X#define M_SP_WERE 229 X#define M_SP_LEASH 230 X#define M_SP_SERVANT 231 X#define M_SP_AV 232 X#define M_SP_LW 233 X#define M_SP_SWARM 234 X#define M_SP_ANGEL 235 X#define M_SP_MB 236 X#define M_SP_MIRROR 237 X#define M_SP_RAISE 238 X#define M_SP_DEATH 239 X#define M_SP_COURT 240 X#define M_SP_LAIR 241 X#define M_SP_PRIME 242 X X/* rangestrike functions */ X#define M_STRIKE_MISSILE 301 X#define M_STRIKE_FBOLT 302 X#define M_STRIKE_LBALL 303 X#define M_STRIKE_FBALL 304 X#define M_STRIKE_BLIND 305 X#define M_STRIKE_SNOWBALL 306 X#define M_STRIKE_MASTER 307 X#define M_STRIKE_SONIC 308 X X/* combat functions */ X#define M_MELEE_NORMAL 401 X#define M_MELEE_FIRE 402 X#define M_MELEE_DRAGON 403 X#define M_MELEE_MP 404 X#define M_MELEE_ELEC 405 X#define M_MELEE_POISON 406 X#define M_MELEE_NG 407 X#define M_MELEE_SUCCUBUS 408 X#define M_MELEE_SPIRIT 409 X#define M_MELEE_DISEASE 410 X#define M_MELEE_SLEEP 411 X#define M_MELEE_COLD 412 X#define M_MELEE_MASTER 413 X#define M_MELEE_GRAPPLE 414 X#define M_MELEE_DEATH 415 X X/* movement functions */ X#define M_MOVE_NORMAL 501 X#define M_MOVE_FLUTTER 502 X#define M_MOVE_TELEPORT 503 X#define M_MOVE_FOLLOW 504 X#define M_MOVE_RANDOM 505 X#define M_MOVE_SMART 506 X#define M_MOVE_SPIRIT 507 X#define M_MOVE_SCAREDY 508 X#define M_MOVE_CONFUSED 509 X#define M_MOVE_ANIMAL 510 X X/* MLx -> index to Monsters starting for level x */ X/* MLx -> number of monsters of level x or less */ X/* NML_x -> number of monsters of level x */ X/* NML-X must be changed whenever a monster is added */ X#define ML0 0 X#define NML_0 9 X#define ML1 (ML0 + NML_0) X#define NML_1 22 X#define ML2 (ML1 + NML_1) X#define NML_2 14 X#define ML3 (ML2 + NML_2) X#define NML_3 15 X#define ML4 (ML3 + NML_3) X#define NML_4 18 X#define ML5 (ML4 + NML_4) X#define NML_5 14 X#define ML6 (ML5 + NML_5) X#define NML_6 13 X#define ML7 (ML6 + NML_6) X#define NML_7 15 X#define ML8 (ML7 + NML_7) X#define NML_8 12 X#define ML9 (ML8 + NML_8) X#define NML_9 8 X#define ML10 (ML9 + NML_9) X#define NML_10 10 X X#define NUMMONSTERS (ML10 + NML_10) X X/* Some monster ID's : (Those that are explicitly named in code) */ X/* Actually, there are still many magic constants floating around. */ X/* Eventually I'll get around to making each monster's id a constant.... */ X#define RANDOM -1 X#define NPC (ML0+4) X#define HISCORE_NPC (ML0+8) X#define BUNNY (ML0+5) X#define BLACKSNAKE (ML1+14) X#define HAWK (ML1+13) X#define IMPALA (ML1+19) X#define WOLF (ML2+10) X#define LION (ML3+8) X#define BRIGAND (ML3+9) X#define QUAIL (ML1+11) X#define BADGER (ML1+12) X#define DEER (ML1+14) X#define BEAR (ML3+10) X#define ANTEATER (ML1+16) X#define PARROT (ML1+20) X#define MAMBA (ML3+11) X#define ANT (ML2+11) X#define HYENA (ML1+21) X#define ELEPHANT (ML2+12) X#define TROUT (ML1+18) X#define BASS (ML1+19) X#define MANOWAR (ML3+12) X#define CROC (ML4+8) X#define BOGTHING (ML5+8) X#define CAMEL (ML1+15) X#define SHEEP (ML0+5) X#define GHOST (ML2+6) X#define HAUNT (ML4+5) X#define SPECTRE (ML5+5) X#define LICHE (ML6+5) X#define HORSE (ML2+13) X X X/* location functions */ X#define L_NO_OP 0 X X/* random sites */ X#define L_LIFT 1 X#define L_BALANCESTONE 2 X#define L_FIRE 3 X#define L_WHIRLWIND 4 X#define L_VOIDSTONE 5 X#define L_WARNING 6 X#define L_ARENA_EXIT 7 X#define L_HOUSE_EXIT 8 X#define L_SAFE 9 X X/* city level shop and guild functions */ X/* following are those in CitySiteList */ X#define NUMCITYSITES 26 X#define CITYSITEBASE 10 X#define L_CHARITY 10 X#define L_ARMORER 11 X#define L_CLUB 12 X#define L_GYM 13 X#define L_THIEVES_GUILD 14 X#define L_COLLEGE 15 X#define L_HEALER 16 X#define L_CASINO 17 X#define L_TAVERN 18 X#define L_MERC_GUILD 19 X#define L_ALCHEMIST 20 X#define L_SORCERORS 21 X#define L_CASTLE 22 X#define L_ARENA 23 X#define L_DPW 24 X#define L_LIBRARY 25 X#define L_PAWN_SHOP 26 X#define L_BANK 27 X#define L_CONDO 28 X#define L_ORACLE 29 X#define L_ORDER 30 X#define L_DINER 31 X#define L_COMMANDANT 32 X#define L_CRAP 33 X#define L_TEMPLE 34 X#define L_COUNTRYSIDE 35 X/* end of city sites */ X X/* random sites */ X#define L_JAIL 36 X#define L_TEMPLE_WARNING 37 X#define L_LAWSTONE 38 X#define L_CHAOSTONE 39 X X/* final abyss sites ignore levitation*/ X#define L_EARTH_STATION 40 X#define L_FIRE_STATION 41 X#define L_WATER_STATION 42 X#define L_AIR_STATION 43 X#define L_VOID_STATION 44 X#define L_VOID 45 X#define L_VOICE1 46 X#define L_VOICE2 47 X#define L_VOICE3 48 X X#define L_SACRIFICESTONE 49 X X/* circle hq sites */ X#define L_TOME1 50 X#define L_TOME2 51 X#define L_ENTER_CIRCLE 52 X#define L_CIRCLE_LIBRARY 53 X X/* other site functions */ X#define L_BROTHEL 54 X#define L_DRUID 55 X#define L_ALTAR 56 X X#define L_GARDEN 57 X#define L_ADEPT 58 X#define L_SEWER 59 X X#define L_OMEGA 60 X#define L_CARTOGRAPHER 61 X#define L_STABLES 62 X#define L_COMMONS 63 X#define L_GRANARY 64 X#define L_MAZE 65 X#define L_HOVEL 66 X#define L_HOUSE 67 X#define L_MANSION 68 X#define L_OCCUPIED_HOUSE 69 X#define L_TACTICAL_EXIT 70 X#define L_VAULT 71 X#define L_CEMETARY 72 X#define L_THRONE 73 X#define L_ESCALATOR 74 X#define L_ENTER_COURT 75 X X#define L_TRIFID 76 X#define L_FINAL_ABYSS 77 X#define L_RAISE_PORTCULLIS 78 X X#define L_MINDSTONE 79 X X/* above LEVITATION_AVOIDANCE, no effect if player is levitating */ X#define LEVITATION_AVOIDANCE 80 X X/* random sites */ X#define L_CHAOS 81 X#define L_WATER 82 X#define L_LAVA 83 X#define L_MAGIC_POOL 84 X#define L_PORTCULLIS_TRAP 85 X#define L_DROP_EVERY_PORTCULLIS 87 X#define L_PORTCULLIS 88 X X X/* traps */ X#define NUMTRAPS 13 X#define TRAP_BASE 89 X X/* traps */ X#define L_TRAP_DART 89 X#define L_TRAP_PIT 90 X#define L_TRAP_DOOR 91 X#define L_TRAP_SNARE 92 X#define L_TRAP_BLADE 93 X#define L_TRAP_FIRE 94 X#define L_TRAP_TELEPORT 95 X#define L_TRAP_DISINTEGRATE 96 X#define L_TRAP_SLEEP_GAS 97 X#define L_TRAP_ACID 98 X#define L_TRAP_MANADRAIN 99 X#define L_TRAP_ABYSS 100 X#define L_TRAP_SIREN 101 X X/* more random sites */ X#define L_STATUE_WAKE 102 X#define L_STATUE_RANDOM 103 X X#define L_HEDGE 104 X#define L_RUBBLE 105 X X#define L_ABYSS 106 X X/* player possession slots */ X/* slot 0 should not be filled when out of inventory_control() */ X X#define O_UP_IN_AIR 0 X#define O_READY_HAND 1 X#define O_WEAPON_HAND 2 X#define O_LEFT_SHOULDER 3 X#define O_RIGHT_SHOULDER 4 X#define O_BELT1 5 X#define O_BELT2 6 X#define O_BELT3 7 X#define O_SHIELD 8 X#define O_ARMOR 9 X#define O_BOOTS 10 X#define O_CLOAK 11 X#define O_RING1 12 X#define O_RING2 13 X#define O_RING3 14 X#define O_RING4 15 X Xtypedef unsigned char uchar; X/* structure definitions */ X Xstruct room { X int lighted; X int left,right,top,bottom; X int rsi; /* index into roomname switch */ X}; X X X Xstruct spell { X char known; X char id; X char powerdrain; X} ; X X Xstruct monster { X struct objectlist *possessions; X uchar attacked; X int aux1,aux2,x,y,click; X int id,hp,hit,ac,dmg,sense,wakeup,level,speed; X uchar sleep,treasure; X long xpv; X int corpseweight,corpsevalue,transformid,startthing; X uchar uniqueness; X int talkf,movef,meleef,strikef,specialf; X long status,immunity; X char monchar; X char *monstring,*corpsestr,*meleestr; X}; X X Xstruct monsterlist { X struct monster *m; X struct monsterlist *next; X}; X X X X Xstruct player { X int str,con,dex,agi,iq,pow,maxstr,maxcon,maxdex,maxagi,maxiq,maxpow; X long xp; X int level,hp,maxhp,hit,dmg,absorption,speed,click; X int defense,food,alignment; X long mana,maxmana; X long cash; X int patron,birthday; X char preference; X int sx,sy; /* sanctuary coordinates */ X int x,y; /* current player coordinates */ X int itemweight,maxweight; X int immunity[NUMIMMUNITIES]; X int status[NUMSTATI]; X long options; X int rank[NUMRANKS]; X long guildxp[NUMRANKS]; X char name[64]; X char meleestr[64]; X struct object *possessions[MAXITEMS]; X struct object *pack[MAXPACK]; X int packptr; X}; X Xstruct object { X int id,weight,plus,charge,dmg,hit,aux,number,fragility; X long basevalue; X uchar known,used; X int blessing; X uchar type,uniqueness; X int usef; X uchar level; X char objchar,*objstr,*truename,*cursestr; X}; X X X Xstruct objectlist { X struct object *thing; X struct objectlist *next; X}; X X X X/* terrain locations */ Xstruct terrain { X char base_terrain_type; X char current_terrain_type; X char aux; X char explored; X}; X X/* dungeon locations */ Xstruct location { X char p_locf; /* function executed when moved on */ X uchar lstatus; /* seen,stopsrun,lit,secret, */ X char roomnumber; /* so room can be named */ X char locchar; /* terrain type */ X char showchar; /*char instantaneously drawn for site */ X int aux; /* signifies various things */ X uchar buildaux; /* used in constructing level */ X struct objectlist *things; X struct monster *creature; X }; X X Xstruct level { X char depth; /* which level is this */ X struct level *next; /* pointer to next level in dungeon */ X#ifndef MSDOS X struct location site[MAXWIDTH][MAXLENGTH]; /* dungeon data */ X#else X /* Over 64K worth of data! */ X struct location *site[MAXWIDTH]; /* dungeon data */ X#endif X char generated; /* has the level been made (visited) yet? */ X char numrooms; /* number of rooms on level */ X char tunnelled; /* amount of tunnelling done on this level */ X struct monsterlist *mlist; /* List of monsters on level */ X int environment; /* where kind of level is this? */ X int deepest; /*If level is dungeon head, deepest level made */ X}; X X X/* random typedef's */ X Xtypedef struct monsterlist mltype; Xtypedef mltype *pml; X Xtypedef struct monster montype; Xtypedef montype *pmt; X Xtypedef struct location loctype; Xtypedef loctype *plc; X Xtypedef struct level levtype; Xtypedef levtype *plv; X Xtypedef struct object objtype; Xtypedef objtype *pob; X Xtypedef struct objectlist oltype; Xtypedef oltype *pol; X X/* random function declarations from system libraries */ X X#ifndef MSDOS Xchar *malloc(),*calloc(),*getlogin(); Xint free(); Xlong time(); X#else X#include <stdlib.h> X#include <time.h> X#define getlogin() "pcuser" X#define mnumprint(n) mlongprint((long)(n)) X#define menunumprint(n) menulongprint((long)(n)) X#define gain_experience(n) gain_lexperience((long)(n)) X#undef sign X#undef max X#undef min X#undef abs X/* These must be made to work for both longs and ints */ X#define sign(n) (((n) < 0) ? -1 : (((n) > 0) ? 1 : 0)) X#define max(a,b) (((a) > (b)) ? (a) : (b)) X#define min(a,b) (((a) < (b)) ? (a) : (b)) X#define abs(n) (((n) < 0) ? (-(n)) : (n)) X#endif X X#ifdef NORANDOM X#ifndef MSDOS Xint rand(); Xint srand(); X#endif X#define RANDFUNCTION rand() X#define SRANDFUNCTION srand((int)(time((long *)NULL)+Seed)) X#endif X X#ifndef NORANDOM Xlong random(); Xint srandom(); X#define RANDFUNCTION random() X#define SRANDFUNCTION srandom((int)(time((long *)NULL)+Seed)) X#endif X X X#define pow2(n) (1 << n) X X X/* systemV for some reason uses string.h instead of strings.h */ X/* Also, random and srandom are unlikely to be found on system V... */ X X#ifdef STRING X#include <string.h> X#endif X X#ifndef STRING X#include <strings.h> X#endif X X#ifndef MSDOS X#include <stdio.h> X#else X/* Include stdio.h only if not already include (by curses.h) */ X#ifndef NULL X#include <stdio.h> X#endif X#endif X X#ifndef TRUE X#define TRUE 1 X#define FALSE 0 X#endif X X#ifdef MSDOS Xplv msdos_changelevel(); X#endif END_OF_FILE if test 28627 -ne `wc -c <'odefs.h'`; then echo shar: \"'odefs.h'\" unpacked with wrong size! fi # end of 'odefs.h' fi if test -f 'oitem.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'oitem.c'\" else echo shar: Extracting \"'oitem.c'\" \(22969 characters\) sed "s/^X//" >'oitem.c' <<'END_OF_FILE' X/* omega copyright (C) 1987,1988,1989 by Laurence Raphael Brothers */ X/* oitem.c */ X X#include "oglob.h" X X/* make a random new object, returning pointer */ X/* may return NULL. */ Xpob create_object(itemlevel) Xint itemlevel; X{ X pob new; X int r; X int ok = FALSE; X X while (! ok) { X new = ((pob) malloc(sizeof(objtype))); X r= random_range(135); X if (r < 20) make_thing(new,-1); X else if (r < 40) make_food(new,-1); X else if (r < 50) make_scroll(new,-1); X else if (r < 60) make_potion(new,-1); X else if (r < 70) make_weapon(new,-1); X else if (r < 80) make_armor(new,-1); X else if (r < 90) make_shield(new,-1); X else if (r < 100) make_stick(new,-1); X else if (r < 110) make_boots(new,-1); X else if (r < 120) make_cloak(new,-1); X else if (r < 130) make_ring(new,-1); X else make_artifact(new,-1); X /* not ok if object is too good for level, or if unique and already made */ X /* 1/100 chance of finding object if too good for level */ X ok = ((new->uniqueness != UNIQUE_MADE) && X ((new->level < itemlevel+random_range(3)) X || (random_range(100)==23))); X if (!ok) free((char *) new); X } X if (new->uniqueness == UNIQUE_UNMADE) X Objects[new->id].uniqueness=UNIQUE_MADE; X /* allocate string space for item names -- should fix name mangling bug */ X new->objstr = salloc(Objects[new->id].objstr); X new->truename = salloc(Objects[new->id].truename); X new->cursestr = salloc(Objects[new->id].cursestr); X return(new); X} X Xvoid make_cash(new,level) Xpob new; Xint level; X{ X *new = Objects[CASHID]; X new->basevalue = random_range(level*level+10)+1; /* aux is AU value */ X new->objstr = salloc(cashstr()); X new->cursestr = new->truename = new->objstr; X} X Xvoid make_food(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMFOODS); X *new = Objects[FOODID+id]; X} X X Xvoid make_corpse(new,m) Xpob new; Xstruct monster *m; X{ X *new = Objects[CORPSEID]; X new->charge = m->id; X new->weight = m->corpseweight; X new->basevalue = m->corpsevalue; X new->known = 2; X new->objstr = salloc(m->corpsestr); X new->truename = new->cursestr = new->objstr; X if (m->monchar == '@') X new->usef = I_CANNIBAL; X else if (m_statusp(m,EDIBLE)) { X new->usef = I_FOOD; X new->aux = 6; X } X else if (m_statusp(m,POISONOUS)) X new->usef = I_POISON_FOOD; X /* Special corpse-eating effects */ X else switch(m->id) { X case ML1+1: /*tse tse fly */ X case ML4+9: /*torpor beast */ X new->usef = I_SLEEP_SELF; X break; X case ML2+5: X new->usef = I_INVISIBLE; X break; X case ML1+5: /* blipper */ X new->usef = I_TELEPORT; X break; X case ML2+3: /* floating eye -- it's traditional.... */ X new->usef = I_CLAIRVOYANCE; X break; X case ML4+11: /*astral fuzzy */ X new->usef = I_DISPLACE; X break; X case ML4+12: /*s o law */ X new->usef = I_CHAOS; X break; X case ML4+13: /*s o chaos */ X new->usef = I_LAW; X break; X case ML5+9: /* astral vampire */ X new->usef = I_ENCHANT; X break; X case ML5+11: /* manaburst */ X new->usef = I_SPELLS; X break; X case ML6+9: /* rakshasa */ X new->usef = I_TRUESIGHT; X break; X case ML7+0: /* behemoth */ X new->usef = I_HEAL; X break; X case ML7+2: /* unicorn */ X new->usef = I_NEUTRALIZE_POISON; X break; X case ML8+10: /*coma beast */ X new->usef = I_ALERT; X break; X default: X new->usef = I_INEDIBLE; X break; X } X} X X X X Xvoid make_ring(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMRINGS); X *new = Objects[RINGID+id]; X if (new->blessing == 0) new->blessing = itemblessing(); X if (new->plus == 0) new->plus = itemplus()+1; X if (new->blessing < 0) new->plus = -1 - abs(new->plus); X} X Xvoid make_thing(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMTHINGS); X *new = Objects[THINGID+id]; X if (strcmp(new->objstr,"grot") == 0) { X new->objstr = salloc(grotname()); X new->truename = new->cursestr = new->objstr; X } X} X X Xvoid make_scroll(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMSCROLLS); X *new = Objects[SCROLLID+id]; X /* if a scroll of spells, aux is the spell id in Spells */ X if (new->id == SCROLLID+1) { X new->aux = random_range(NUMSPELLS); X } X} X Xvoid make_potion(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMPOTIONS); X *new = Objects[POTIONID+id]; X if (new->plus == 0) new->plus = itemplus(); X} X Xvoid make_weapon(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMWEAPONS); X *new = Objects[WEAPONID+id]; X if ((id == 28) || (id == 29)) /* bolt or arrow */ X new->number = random_range(20)+1; X if (new->blessing == 0) new->blessing = itemblessing(); X if (new->plus == 0) { X new->plus = itemplus(); X if (new->blessing < 0) X new->plus = -1 - abs(new->plus); X else if (new->blessing > 0) X new->plus = 1 + abs(new->plus); X } X} X Xvoid make_shield(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMSHIELDS); X *new = Objects[SHIELDID+id]; X if (new->plus == 0) X new->plus = itemplus(); X if (new->blessing == 0) new->blessing = itemblessing(); X if (new->blessing < 0) X new->plus = -1 - abs(new->plus); X else if (new->blessing > 0) X new->plus = 1 + abs(new->plus); X} X Xvoid make_armor(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMARMOR); X *new = Objects[ARMORID+id]; X if (new->plus == 0) new->plus = itemplus(); X if (new->blessing == 0) new->blessing = itemblessing(); X if (new->blessing < 0) X new->plus = -1 - abs(new->plus); X else if (new->blessing > 0) X new->plus = 1 + abs(new->plus); X} X Xvoid make_cloak(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMCLOAKS); X Objects[CLOAKID+4].plus = 2; X *new = Objects[CLOAKID+id]; X if (new->blessing == 0) new->blessing = itemblessing(); X} X Xvoid make_boots(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMBOOTS); X *new = Objects[BOOTID+id]; X if (new->blessing == 0) new->blessing = itemblessing(); X} X Xvoid make_stick(new,id) Xpob new; Xint id; X{ X if (id == -1) id = random_range(NUMSTICKS); X *new = Objects[STICKID+id]; X new->charge = itemcharge(); X if (new->blessing == 0) new->blessing = itemblessing(); X} X Xvoid make_artifact(new,id) Xpob new; X{ X if (id == -1) id = random_range(NUMARTIFACTS); X *new = Objects[ARTIFACTID+id]; X} X X X X X/* item name functions */ X Xchar *scrollname(reset,id) Xint reset,id; X{ X#define ids scroll_ids X int i,j,k; X X if (reset) { X for(i=0;i<30;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(30); X k = ids[i % 30]; X ids[i % 30]=ids[j]; X ids[j]=k; X } X } X else { X switch(ids[id]) { X case 0: strcpy(Str4,"scroll-GRISTOGRUE"); break; X case 1: strcpy(Str4,"scroll-Kho Reck Tighp"); break; X case 2: strcpy(Str4,"scroll-E Z"); break; X case 3: strcpy(Str4,"scroll-Kevitz"); break; X case 4: strcpy(Str4,"scroll-Arcanum Prime"); break; X case 5: strcpy(Str4,"scroll-NYARLATHOTEP"); break; X case 6: strcpy(Str4,"scroll-Gilthoniel"); break; X case 7: strcpy(Str4,"scroll-Zarathustra"); break; X case 8: strcpy(Str4,"scroll-Ancient Lore"); break; X case 9: strcpy(Str4,"scroll-Eyes Only"); break; X case 10: strcpy(Str4,"scroll-Ambogar Empheltz"); break; X case 11: strcpy(Str4,"scroll-Isengard"); break; X case 12: strcpy(Str4,"scroll-Deosil Widdershins"); break; X case 13: strcpy(Str4,"scroll-Magister Paracelsus"); break; X case 14: strcpy(Str4,"scroll-Qlipphotic Summons"); break; X case 15: strcpy(Str4,"scroll-Aratron Samael"); break; X case 16: strcpy(Str4,"scroll-De Wormiis Mysterius"); break; X case 17: strcpy(Str4,"scroll-Necronomicon"); break; X case 18: strcpy(Str4,"scroll-Pnakotic Manuscript"); break; X case 19: strcpy(Str4,"scroll-Codex of Xalimar"); break; X case 20: strcpy(Str4,"scroll-The Mabinogion"); break; X case 21: strcpy(Str4,"scroll-Ginseng Shiatsu"); break; X case 22: strcpy(Str4,"scroll-Tome of Tromax"); break; X case 23: strcpy(Str4,"scroll-Book of the Dead "); break; X case 24: strcpy(Str4,"scroll-The Flame Tongue"); break; X case 25: strcpy(Str4,"scroll-Karst Khogar"); break; X case 26: strcpy(Str4,"scroll-The Yellow Sign"); break; X case 27: strcpy(Str4,"scroll-The Kevillist Manifesto"); break; X case 28: strcpy(Str4,"scroll-Goshtar Script"); break; X case 29: strcpy(Str4,"scroll-Pendragon Encryption"); break; X } X } X return(Str4); X} X#undef ids X X Xchar *grotname() X{ X switch(random_range(20)) { X case 0: strcpy(Str4,"pot lid"); break; X case 1: strcpy(Str4,"mound of offal"); break; X case 2: strcpy(Str4,"sword that was broken"); break; X case 3: strcpy(Str4,"salted snail"); break; X case 4: strcpy(Str4,"key"); break; X case 5: strcpy(Str4,"toadstool"); break; X case 6: strcpy(Str4,"greenish spindle"); break; X case 7: strcpy(Str4,"tin soldier"); break; X case 8: strcpy(Str4,"broken yo-yo"); break; X case 9: strcpy(Str4,"NYC subway map"); break; X case 10: strcpy(Str4,"Nixon's the One! button"); break; X case 11: strcpy(Str4,"beer can (empty)"); break; X case 12: strcpy(Str4,"golden bejewelled falcon"); break; X case 13: strcpy(Str4,"hamster cage"); break; X case 14: strcpy(Str4,"wooden nickel"); break; X case 15: strcpy(Str4,"three-dollar bill"); break; X case 16: strcpy(Str4,"rosebud"); break; X case 17: strcpy(Str4,"water pistol"); break; X case 18: strcpy(Str4,"shattered skull"); break; X case 19: strcpy(Str4,"jawbone of an ass"); break; X } X return(Str4); X} X X X X Xchar *potionname(reset,id) Xint reset,id; X{ X#define ids potion_ids X int i,j,k; X X if (reset) { X for(i=0;i<20;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(20); X k = ids[i % 20]; X ids[i % 20]=ids[j]; X ids[j]=k; X } X } X else { X switch (ids[id]) { X case 0: strcpy(Str4,"vial of dewy liquid"); break; X case 1: strcpy(Str4,"jug of tarry black substance"); break; X case 2: strcpy(Str4,"flask of cold smoking froth"); break; X case 3: strcpy(Str4,"phial of glowing fluid"); break; X case 4: strcpy(Str4,"bottle of sickening slime"); break; X case 5: strcpy(Str4,"sac of greenish gel"); break; X case 6: strcpy(Str4,"wineskin of odorous goo"); break; X case 7: strcpy(Str4,"canteen of sweet sap"); break; X case 8: strcpy(Str4,"urn of clear fluid"); break; X case 9: strcpy(Str4,"clotted grey ooze"); break; X case 10: strcpy(Str4,"keg of bubbly golden fluid"); break; X case 11: strcpy(Str4,"tube of minty paste"); break; X case 12: strcpy(Str4,"pitcher of aromatic liquid"); break; X case 13: strcpy(Str4,"pot of rancid grease"); break; X case 14: strcpy(Str4,"thermos of hot black liquid"); break; X case 15: strcpy(Str4,"magnum of deep red liquid"); break; X case 16: strcpy(Str4,"vase full of ichor"); break; X case 17: strcpy(Str4,"container of white cream"); break; X case 18: strcpy(Str4,"syringe of clear fluid"); break; X case 19: strcpy(Str4,"can of volatile essence"); break; X } X return(Str4); X } X} X#undef ids X X Xchar *stickname(reset,id) Xint reset,id; X{ X#define ids stick_ids X int i,j,k; X X if (reset) { X for(i=0;i<20;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(20); X k = ids[i % 20]; X ids[i % 20]=ids[j]; X ids[j]=k; X } X } X else { X switch (ids[id]) { X case 0: strcpy(Str4,"oaken staff"); break; X case 1: strcpy(Str4,"heavy metal rod"); break; X case 2: strcpy(Str4,"shaft of congealed light"); break; X case 3: strcpy(Str4,"slender ceramic wand"); break; X case 4: strcpy(Str4,"rune-inscribed bone wand"); break; X case 5: strcpy(Str4,"knurly staff"); break; X case 6: strcpy(Str4,"steel knobbed rod"); break; X case 7: strcpy(Str4,"lucite wand"); break; X case 8: strcpy(Str4,"sturdy alpenstock"); break; X case 9: strcpy(Str4,"gem-studded ebony staff"); break; X case 10: strcpy(Str4,"chromed sequinned staff"); break; X case 11: strcpy(Str4,"old peeling stick"); break; X case 12: strcpy(Str4,"jointed metal rod"); break; X case 13: strcpy(Str4,"wand with lead ferrules"); break; X case 14: strcpy(Str4,"forked wooden stick"); break; X case 15: strcpy(Str4,"cane with gold eagle handle"); break; X case 16: strcpy(Str4,"crystalline wand"); break; X case 17: strcpy(Str4,"metal stick with trigger"); break; X case 18: strcpy(Str4,"leather-handled stone rod"); break; X case 19: strcpy(Str4,"tiny mithril wand"); break; X } X return(Str4); X } X} X#undef ids X Xchar *ringname(reset,id) Xint reset,id; X{ X#define ids ring_ids X int i,j,k; X X if (reset) { X for(i=0;i<20;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(20); X k = ids[i % 20]; X ids[i % 20]=ids[j]; X ids[j]=k; X } X } X else { X switch (ids[id]) { X case 0: strcpy(Str4,"gold ring with a blue gem"); break; X case 1: strcpy(Str4,"brass ring"); break; X case 2: strcpy(Str4,"mithril ring with a red gem"); break; X case 3: strcpy(Str4,"platinum ring"); break; X case 4: strcpy(Str4,"gold dragon's head ring"); break; X case 5: strcpy(Str4,"bronze ring"); break; X case 6: strcpy(Str4,"aardvark seal ring"); break; X case 7: strcpy(Str4,"grey metal ring"); break; X case 8: strcpy(Str4,"silver skull ring"); break; X case 9: strcpy(Str4,"onyx ring"); break; X case 10: strcpy(Str4,"Collegium Magii class ring"); break; X case 11: strcpy(Str4,"worn stone ring"); break; X case 12: strcpy(Str4,"diorite ring"); break; X case 13: strcpy(Str4,"ancient scarab ring"); break; X case 14: strcpy(Str4,"plastic charm ring"); break; X case 15: strcpy(Str4,"soapy gypsum ring"); break; X case 16: strcpy(Str4,"glass ring"); break; X case 17: strcpy(Str4,"glowing bluestone ring"); break; X case 18: strcpy(Str4,"ring with eye sigil"); break; X case 19: strcpy(Str4,"zirconium ring"); break; X } X return(Str4); X } X} X#undef ids X X Xchar *cloakname(reset,id) Xint reset,id; X{ X#define ids cloak_ids X int i,j,k; X X if (reset) { X for(i=0;i<20;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(20); X k = ids[i % 20]; X ids[i % 20]=ids[j]; X ids[j]=k; X } X } X else { X switch (ids[id]) { X case 0: strcpy(Str4,"tattered piece of cloth"); break; X case 1: strcpy(Str4,"fuligin cloak"); break; X case 2: strcpy(Str4,"chintz cloak"); break; X case 3: strcpy(Str4,"diaphanous cape"); break; X case 4: strcpy(Str4,"red half-cloak"); break; X case 5: strcpy(Str4,"mouse-hide cloak"); break; X case 6: strcpy(Str4,"kelly green cloak"); break; X case 7: strcpy(Str4,"cloth-of-gold cloak"); break; X case 8: strcpy(Str4,"dirty old cloak"); break; X case 9: strcpy(Str4,"weightless cloak"); break; X case 10: strcpy(Str4,"boat cloak"); break; X case 11: strcpy(Str4,"greasy tarpaulin"); break; X case 12: strcpy(Str4,"sable cloak"); break; X case 13: strcpy(Str4,"soft velvet cloak"); break; X case 14: strcpy(Str4,"opera cape"); break; X case 15: strcpy(Str4,"elegant brocade cloak"); break; X case 16: strcpy(Str4,"cloak of many colors"); break; X case 17: strcpy(Str4,"grey-green rag"); break; X case 18: strcpy(Str4,"puce and chartreuse cloak"); break; X case 19: strcpy(Str4,"smoky cloak"); break; X } X return(Str4); X } X} X#undef ids X Xchar *bootname(reset,id) Xint reset,id; X{ X#define ids boot_ids X int i,j,k; X X if (reset) { X for(i=0;i<20;i++) X ids[i]=i; X for(i=0;i<500;i++) { X j = random_range(20); X k = ids[i % 20]; X ids[i % 20]=ids[j]; X ids[j]=k; X } X } X else { X switch (ids[id]) { X case 0: strcpy(Str4,"sturdy leather boots"); break; X case 1: strcpy(Str4,"calf-length moccasins"); break; X case 2: strcpy(Str4,"dark-colored tabi"); break; X case 3: strcpy(Str4,"patent-leather shoes"); break; X case 4: strcpy(Str4,"beaten-up gumshoes"); break; X case 5: strcpy(Str4,"alligator-hide boots"); break; X case 6: strcpy(Str4,"comfortable sandals"); break; X case 7: strcpy(Str4,"roller skates"); break; X case 8: strcpy(Str4,"purple suede gaiters"); break; X case 9: strcpy(Str4,"mirror-plated wingtips"); break; X case 10: strcpy(Str4,"heavy workboots"); break; X case 11: strcpy(Str4,"polyurethane-soled sneakers"); break; X case 12: strcpy(Str4,"clodhoppers"); break; X case 13: strcpy(Str4,"wooden shoes"); break; X case 14: strcpy(Str4,"ski boots"); break; X case 15: strcpy(Str4,"hob-nailed boots"); break; X case 16: strcpy(Str4,"elven boots"); break; X case 17: strcpy(Str4,"cowboy boots"); break; X case 18: strcpy(Str4,"flipflop slippers"); break; X case 19: strcpy(Str4,"riding boots"); break; X } X return(Str4); X } X} X#undef ids X X X Xint itemplus() X{ X int p = 0; X X while (random_range(2) == 0) X p++; X return(p); X} X X X Xint itemcharge() X{ X return(random_range(20)+1); X} X X X Xint itemblessing() X{ X switch(random_range(10)) { X case 0: X case 1:return(-1-random_range(10)); break; X case 8: X case 9:return(1+random_range(10)); break; X default: return(0); X } X} X X Xint twohandedp(id) Xint id; X{ X switch(id) { X case WEAPONID+5: X case WEAPONID+12: X case WEAPONID+18: X case WEAPONID+20: X case WEAPONID+26: X case WEAPONID+27: X case WEAPONID+32: X case WEAPONID+36: X case WEAPONID+38: X case WEAPONID+39: X return(TRUE); break; X default: return(FALSE); break; X } X} X X Xvoid item_use(o) Xstruct object *o; X{ X clearmsg(); X switch(o->usef) { X case -1:i_no_op(o); break; X case 0:i_nothing(o); break; X X /* scrolls */ X case I_SPELLS: i_spells(o); break; X case I_BLESS: i_bless(o); break; X case I_ACQUIRE: i_acquire(o); break; X case I_ENCHANT: i_enchant(o); break; X case I_TELEPORT: i_teleport(o); break; X case I_WISH: i_wish(o); break; X case I_CLAIRVOYANCE: i_clairvoyance(o); break; X case I_DISPLACE: i_displace(o); break; X case I_ID: i_id(o); break; X case I_JANE_T: i_jane_t(o); break; X case I_FLUX: i_flux(o); break; X case I_WARP: i_warp(o); break; X case I_ALERT: i_alert(o); break; X case I_CHARGE: i_charge(o); break; X case I_KNOWLEDGE: i_knowledge(o); break; X case I_LAW: i_law(o); break; X case I_HINT: hint(); break; X case I_HERO: i_hero(o); break; X case I_TRUESIGHT: i_truesight(o); break; X case I_ILLUMINATE: i_illuminate(o); break; X case I_DEFLECT: i_deflect(o); break; X X /* potion functions */ X case I_HEAL: i_heal(o); break; X case I_OBJDET: i_objdet(o); break; X case I_MONDET: i_mondet(o); break; X case I_SLEEP_SELF: i_sleep_self(o); break; X case I_NEUTRALIZE_POISON: i_neutralize_poison(o); break; X case I_RESTORE: i_restore(o); break; X case I_AZOTH: i_azoth(o); break; X case I_AUGMENT: i_augment(o); break; X case I_REGENERATE: i_regenerate(o); break; X case I_INVISIBLE: i_invisible(o); break; X case I_BREATHING: i_breathing(o); break; X case I_FEAR_RESIST: i_fear_resist(o); break; X case I_CHAOS: i_chaos(o); break; X case I_ACCURACY: i_accuracy(o); break; X case I_LEVITATION: i_levitate(o); break; X case I_CURE: i_cure(o); break; X X /* stick functions */ X case I_FIREBOLT: i_firebolt(o); break; X case I_LBOLT: i_lbolt(o); break; X case I_MISSILE: i_missile(o); break; X case I_SLEEP_OTHER: i_sleep_other(o); break; X case I_FIREBALL: i_fireball(o); break; X case I_LBALL: i_lball(o); break; X case I_SNOWBALL: i_snowball(o); break; X case I_SUMMON: i_summon(o); break; X case I_HIDE: i_hide(o); break; X case I_DISRUPT: i_disrupt(o); break; X case I_DISINTEGRATE: i_disintegrate(o); break; X case I_APPORT: i_apport(o); break; X case I_DISPEL: i_dispel(o); break; X case I_POLYMORPH: i_polymorph(o); break; X case I_FEAR:i_fear(o); break; X X /* food functions */ X case I_FOOD: i_food(o); break; X case I_LEMBAS: i_lembas(o); break; X case I_STIM: i_stim(o); break; X case I_POW: i_pow(o); break; X case I_IMMUNE: i_immune(o); break; X case I_POISON_FOOD: i_poison_food(o); break; X case I_PEPPER_FOOD: i_pepper_food(o); break; X case I_CORPSE: i_corpse(o); break; X X /* boots functions */ X case I_PERM_SPEED: i_perm_speed(o); break; X case I_PERM_HERO: i_perm_hero(o); break; X case I_PERM_LEVITATE: i_perm_levitate(o); break; X case I_PERM_AGILITY: i_perm_agility(o); break; X X /* artifact functions */ X case I_SCEPTRE:i_sceptre(o);break; X case I_PLANES:i_planes(o);break; X case I_STARGEM:i_stargem(o);break; X case I_SYMBOL:i_symbol(o); break; X case I_ORBMASTERY: i_orbmastery(o); break; X case I_ORBFIRE: i_orbfire(o); break; X case I_ORBWATER: i_orbwater(o); break; X case I_ORBEARTH: i_orbearth(o); break; X case I_ORBAIR: i_orbair(o); break; X case I_ORBDEAD: i_orbdead(o); break; X case I_CRYSTAL: i_crystal(o); break; X case I_LIFE: i_life(o); break; X case I_DEATH: i_death(o); break; X case I_ANTIOCH: i_antioch(o); break; X case I_HELM: i_helm(o); break; X case I_KOLWYNIA: i_kolwynia(o); break; X case I_ENCHANTMENT: i_enchantment(o); break; X case I_JUGGERNAUT: i_juggernaut(o); break; X X /* cloak functions */ X case I_PERM_DISPLACE: i_perm_displace(o); break; X case I_PERM_NEGIMMUNE: i_perm_negimmune(o); break; X case I_PERM_INVISIBLE: i_perm_invisible(o); break; X case I_PERM_PROTECTION: i_perm_protection(o);break; X case I_PERM_ACCURACY: i_perm_accuracy(o);break; X case I_PERM_TRUESIGHT: i_perm_truesight(o); break; X X /* ring functions */ X case I_PERM_BURDEN: i_perm_burden(o); break; X case I_PERM_STRENGTH: i_perm_strength(o); break; X case I_PERM_GAZE_IMMUNE: i_perm_gaze_immune(o); break; X case I_PERM_FIRE_RESIST: i_perm_fire_resist(o); break; X case I_PERM_POISON_RESIST: i_perm_poison_resist(o); break; X case I_PERM_REGENERATE: i_perm_regenerate(o); break; X case I_PERM_KNOWLEDGE: i_perm_knowledge(o); break; X X /* armor functions */ X case I_NORMAL_ARMOR: i_normal_armor(o); break; X case I_PERM_FEAR_RESIST: i_perm_fear_resist(o); break; X case I_PERM_ENERGY_RESIST: i_perm_energy_resist(o); break; X case I_PERM_BREATHING: i_perm_breathing(o); break; X X /* weapons functions */ X case I_NORMAL_WEAPON: i_normal_weapon(o); break; X case I_LIGHTSABRE: i_lightsabre(o); break; X case I_DEMONBLADE: i_demonblade(o); break; X case I_DESECRATE: i_desecrate(o); break; X case I_MACE_DISRUPT: i_mace_disrupt(o); break; X case I_DEFEND: i_defend(o); break; X case I_VICTRIX: i_victrix(o); break; X X /* thing functions */ X case I_PICK: i_pick(o); break; X case I_KEY: i_key(o); break; X case I_PERM_ILLUMINATE: i_perm_illuminate(o); break; X case I_TRAP: i_trap(o); break; X case I_RAISE_PORTCULLIS:i_raise_portcullis(o); break; X X /* shield functions */ X case I_NORMAL_SHIELD: i_normal_shield(o); break; X case I_PERM_DEFLECT: i_perm_deflect(o); break; X } X} X END_OF_FILE if test 22969 -ne `wc -c <'oitem.c'`; then echo shar: \"'oitem.c'\" unpacked with wrong size! fi # end of 'oitem.c' fi if test -f 'omotd.txt' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'omotd.txt'\" else echo shar: Extracting \"'omotd.txt'\" \(468 characters\) sed "s/^X//" >'omotd.txt' <<'END_OF_FILE' X ******* X ***** ***** X ***** ***** X **** welcome **** X *** t o *** X *** omega *** X **** **** X **** **** X * ** ** * X ***** ***** X X omega version 0.75 is copyright (C) 1987,1988,1989 by: X Laurence R. Brothers (brothers@paul.rutgers.edu) X X PC version comments, bugs, etc. to nathan@brokaw.lcs.mit.edu END_OF_FILE if test 468 -ne `wc -c <'omotd.txt'`; then echo shar: \"'omotd.txt'\" unpacked with wrong size! fi # end of 'omotd.txt' fi echo shar: End of archive 9 \(of 20\). cp /dev/null ark9isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 20 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0