Path: utzoo!mnetor!uunet!seismo!sundc!pitstop!sun!decwrl!decvax!tektronix!tekgen!tekred!games-request From: games-request@tekred.TEK.COM Newsgroups: comp.sources.games Subject: v03i055: omega - rogue like dungeon exploration, Part08/15 Message-ID: <2077@tekred.TEK.COM> Date: 20 Jan 88 03:19:34 GMT Sender: billr@tekred.TEK.COM Lines: 1829 Approved: billr@tekred.TEK.COM Submitted by: "Laurence R. Brothers" Comp.sources.games: Volume 3, Issue 55 Archive-name: omega/Part08 #! /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 odefs.h <<'END_OF_odefs.h' X/* omega copyright (c) 1987 by Laurence Raphael Brothers */ X/* This file is the header file for all omega modules */ X/* odefs.h */ X X/* Implementor should set the following five 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 "/u1/brothers/omega/lib/" X X/* set WIZARD to implementor's username */ X#define WIZARD "brothers" X X/* If set to 0, this will allow players to make copies of saved games */ X/* If set to 1, only the implementor will be allowed to restore X copied games */ X/*The implementor can now enable all currently saved games by making X omega.saves a null file */ X/* If omega.saves is absent, all files will permanently be enabled for X restore, as well */ X#define DESTRUCTIVE_RESTORE 1 X X/* If CATCH_SIGNALS is set to 1, will not dump core, nicer for players. */ X/* dbx still instercepts the signals first, so its ok for debugging */ X#define CATCH_SIGNALS 1 X X/* Don't change anything from here on (unless you know what you're doing) */ X#define VERSION 60 X#define VERSIONSTRING "omega version 0.60 (alpha)" X X#ifndef TRUE X#define TRUE 1 X#define FALSE 0 X#endif X X#define VACANT 0 X#define NULL 0 X#define ABORT -1 X#define CASHVALUE -2 X X/* These next eight should never be changed -- some places have hardwired Xconstants based on these values. I'll fix this eventually when I make Xomega compatible with windowing systems like NeWS and sunview */ X X#define WIDTH 64 X#define LENGTH 64 X#define TOPEDGE 0 X#define EDGE1 16 X#define EDGE2 32 X#define EDGE3 48 X#define BOTTOMEDGE 63 X#define NUMLEVELS 40 X X X/* player game status */ X#define DEAD 1 X#define QUIT 2 X#define WIN 3 X#define BIGWIN 4 X X/* somewhat arbitrary -- MAXITEMS is so a..z can index items */ X#define MAXITEMS 26 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#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 1 X#define UNLOCKED 0 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 40 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_INVULNERABLE 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 X X X/* ranks in guilds, etc */ X#define NUMRANKS 8 X X#define LEGION 0 X#define ARENA 1 X#define COLLEGE 2 X#define THIEVES 3 X#define CIRCLE 4 X#define NOBILITY 5 X#define PRIESTHOOD 6 X#define ADEPT 7 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 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 COWARDLY 256 X#define FLYING 512 X#define SWIMMING 1024 X#define INTANGIBLE 2048 X#define M_INVISIBLE 4096 X X/* Monster tactical melee tendencies */ X#define MM_FORCED 1 X#define MM_BERSERK 2 X#define MM_TIMID 4 X#define MM_POOR 8 X#define MM_AVERAGE 16 X#define MM_GOOD 32 X X/* PLAYER STATUS INDICES */ X#define NUMSTATI 24 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 PROTECTION 22 X/* PROTECTION is deviant -- indicates protective value, not duration */ X#define RETURNING 23 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/* 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 16 X 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 and terrain; characters to draw */ X#define SPACE ' ' X#define WALL '#' X#define OPEN_DOOR '|' X#define CLOSED_DOOR '-' X#define ABYSS '0' X#define WHIRLWIND '6' X#define WHIRLWIND2 '9' 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 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#define RING '=' X#define THING '\\' X#define ARTIFACT '&' X#define PORTAL 'O' X/* unused : 2 3 4 5 7 */ X X X/* player option bits */ X#define BELLICOSE 1 X#define JUMPMOVE 2 X#define RUNSTOP 4 X#define PICKUP 8 X#define ASKME 16 X#define CONFIRM 32 X X/* This has to be changed whenever an item is added */ X#define NUMSCROLLS 23 X#define NUMPOTIONS 18 X#define NUMFOODS 15 X#define NUMTHINGS 26 X#define NUMWEAPONS 38 X#define NUMARMOR 17 X#define NUMSHIELDS 8 X#define NUMCLOAKS 7 X#define NUMBOOTS 6 X#define NUMRINGS 10 X#define NUMSTICKS 16 X#define NUMARTIFACTS 21 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/* 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 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 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 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 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 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 X/* weapons functions */ 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_DARK_EMP_SWORD 1013 X X/* thing functions */ X#define I_PICK 1101 X#define I_KEY 1102 X#define I_SHOVEL 1103 X#define I_EXCAVATOR 1104 X#define I_PERM_ILLUMINATE 1105 X#define I_TRAP 1106 X X/* monster functions */ 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 X/* special 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_MORGON 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 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 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 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 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 5 X#define ML1 (ML0 + NML_0) X#define NML_1 11 X#define ML2 (ML1 + NML_1) X#define NML_2 9 X#define ML3 (ML2 + NML_2) X#define NML_3 7 X#define ML4 (ML3 + NML_3) X#define NML_4 10 X#define ML5 (ML4 + NML_4) X#define NML_5 8 X#define ML6 (ML5 + NML_5) X#define NML_6 8 X#define ML7 (ML6 + NML_6) X#define NML_7 6 X#define ML8 (ML7 + NML_7) X#define NML_8 11 X#define ML9 (ML8 + NML_8) X#define NML_9 7 X#define ML10 (ML9 + NML_9) X#define NML_10 10 X X#define NUMMONSTERS (ML10 + NML_10) X X X X X/* location functions */ X#define L_NO_OP 0 X X/* random terrain types */ X#define L_LIFT 1 X#define L_HEDGE 2 X#define L_WATER 3 X#define L_LAVA 4 X#define L_MAGIC_POOL 5 X#define L_FIRE 6 X#define L_WHIRLWIND 7 X#define L_ABYSS 8 X X X#define L_TRIFID 11 X#define L_FINAL_ABYSS 12 X#define L_WARNING 13 X#define L_PORTCULLIS 14 X#define L_PORTCULLIS_TRAP 15 X X/* traps */ X#define NUMTRAPS 12 X#define TRAP_BASE 21 X X/* traps */ X#define L_TRAP_DART 21 X#define L_TRAP_PIT 22 X#define L_TRAP_DOOR 23 X#define L_TRAP_SNARE 24 X#define L_TRAP_BLADE 25 X#define L_TRAP_FIRE 26 X#define L_TRAP_TELEPORT 27 X#define L_TRAP_DISINTEGRATE 28 X#define L_TRAP_SLEEP_GAS 29 X#define L_TRAP_ACID 30 X#define L_TRAP_MANADRAIN 31 X#define L_TRAP_ABYSS 32 X X/* shop and guild functions (mostly for city level) */ X#define L_DRUID 41 X#define L_RESIDENCE 42 X#define L_TEMPLE 43 X#define L_ARMORER 44 X#define L_CLUB 45 X#define L_GYM 46 X#define L_THIEVES_GUILD 47 X#define L_COLLEGE 48 X#define L_HEALER 49 X#define L_STATUE_WAKE 50 X#define L_CASINO 51 X#define L_SEWER 52 X#define L_TAVERN 53 X#define L_MERC_GUILD 54 X#define L_ALCHEMIST 55 X#define L_SORCERORS 56 X#define L_CASTLE 57 X#define L_JAIL 58 X#define L_GARDEN 59 X#define L_ARENA 60 X#define L_MAZE 61 X#define L_DPW 62 X#define L_LIBRARY 63 X#define L_PAWN_SHOP 64 X#define L_BANK 65 X#define L_CONDO 66 X#define L_ALTAR 67 X#define L_ADEPT 68 X#define L_ALL_STATUES 69 X#define L_OMEGA 70 X#define L_CITYGATE 71 X#define L_CHAOSSTORM 72 X#define L_VAULT 73 X#define L_CEMETARY 74 X#define L_CHALLENGE 75 X#define L_GUARDIAN 76 X#define L_BROTHEL 77 X X/* structure definitions */ X Xstruct room { X int lighted; X int left,right,top,bottom; X int numconnections; X int connections[MAXCONNECTIONS]; X int joined[MAXCONNECTIONS]; X int rsi; /* index into roomname switch */ X}; X X Xstruct level_data { X int generated; /* has the level been made (visited) yet? */ X int numrooms; /* number of rooms on level */ X int tunnelled; /* amount of tunnelling done on this level */ X struct room rooms[MAXROOMS]; /* info about rooms */ X}; X Xstruct spell { X int known; X int powerdrain; X int id; X void (*castf)(); X} ; X X Xstruct monster { X int id,hp,hit,ac,dmg,sense,wakeup,level; X int speed,click; X int status,immunity,tactics; /* bvs */ X int sleep; /* percent chance starts out asleep */ X int treasure; /* percent chance starts with treasure */ X int x,y; X int xpv; X int corpseweight,corpsevalue,transformid; X int attacked,actions,hitloc; X int uniqueness; /* common, unique and unmade, unique and made */ X char monchar; X char monstring[64],corpsestr[64]; X struct objectlist *possessions; X int talkf; X int movef; X int meleef; X int strikef; X int specialf; 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 int xp,level,hp,maxhp,hit,dmg,absorption,speed,click; X int defense,vision,food,alignment,mana,maxmana; X int cash,patron; X char preference; X int sx,sy,slevel; /* sanctuary coordinates */ X int x,y; /* current player coordinates */ X int itemweight,maxweight; X int numrings; X int immunity[NUMIMMUNITIES]; X int status[NUMSTATI]; X int options; X int rank[NUMRANKS]; X struct object *possessions[MAXITEMS]; X char name[64]; X /* need one of these for types of objects "in use" except rings */ X struct object *primary; /* primary hand -- weapon or shield */ X struct object *secondary; /* secondary hand -- ditto */ X struct object *armor; X struct object *cloak; X struct object *boots; X}; X X X Xstruct object { X int id,weight,plus,charge,dmg,hit,aux,number,fragility; X int basevalue, known, used, blessing,type; X int uniqueness; /* 0 common, 1 unique, ungenerated, 2 u, g */ X int usef; /* effect when used */ X int level; /* 0..10 power and frequency of item */ X char objchar; X char objstr[64],truename[64],cursestr[64]; X}; X X X Xstruct objectlist { X struct object *thing; X struct objectlist *next; X}; X X Xstruct location { X char p_locf; /* function executed when moved on */ X char stopsrun; /* stops a fastmove */ X char seen; /* has spot ever been viewed by player */ X char secret; X char roomnumber; X char locchar; /* terrain type */ X char showchar; /*char instantaneously drawn for site */ X int aux; /* signifies various things */ X struct objectlist *things; X struct monster *creature; X }; X X X X X/* random typedef's */ X Xtypedef struct monsterlist mltype; Xtypedef struct monster montype; X Xtypedef mltype *pml; Xtypedef montype *pmt; X X Xtypedef struct object objtype; Xtypedef struct objectlist oltype; X Xtypedef objtype *pob; Xtypedef oltype *pol; X X/* random function declarations */ Xchar *malloc(),*calloc(); Xint free(); END_OF_odefs.h if test 19414 -ne `wc -c oinititem2.c <<'END_OF_oinititem2.c' X/* omega copyright (C) 1987 by Laurence Raphael Brothers */ X/* oinititem2.c */ X X#include X#include "oglob.h" X X/* from oitem */ Xextern void ringname(),stickname(),cloakname(),bootname(),potionname(); X Xvoid inititem2(); X Xvoid inititem2() X{ X int i; X X strcpy(Objects[WEAPONID+0].objstr,"dagger"); X strcpy(Objects[WEAPONID+0].truename,"dagger"); X strcpy(Objects[WEAPONID+0].cursestr,"dagger"); X Objects[WEAPONID+0].hit = 12; X Objects[WEAPONID+0].type = THRUSTING; X Objects[WEAPONID+0].dmg = 6; X Objects[WEAPONID+0].weight = 10; X Objects[WEAPONID+0].level = 0; X Objects[WEAPONID+0].basevalue = 5; X strcpy(Objects[WEAPONID+1].objstr,"short sword"); X strcpy(Objects[WEAPONID+1].truename,"short sword"); X strcpy(Objects[WEAPONID+1].cursestr,"short sword"); X Objects[WEAPONID+1].hit = 11; X Objects[WEAPONID+1].type = CUTTING; X Objects[WEAPONID+1].weight = 25; X Objects[WEAPONID+1].level = 1; X Objects[WEAPONID+1].dmg = 8; X Objects[WEAPONID+1].basevalue = 40; X strcpy(Objects[WEAPONID+2].objstr,"broad sword"); X strcpy(Objects[WEAPONID+2].truename,"broad sword"); X strcpy(Objects[WEAPONID+2].cursestr,"broad sword"); X Objects[WEAPONID+2].hit = 9; X Objects[WEAPONID+2].type = CUTTING; X Objects[WEAPONID+2].weight = 40; X Objects[WEAPONID+2].level = 2; X Objects[WEAPONID+2].dmg = 12; X Objects[WEAPONID+2].basevalue = 90; X strcpy(Objects[WEAPONID+3].objstr,"bastard sword"); X strcpy(Objects[WEAPONID+3].truename,"bastard sword"); X strcpy(Objects[WEAPONID+3].cursestr,"bastard sword"); X Objects[WEAPONID+3].hit = 8; X Objects[WEAPONID+3].type = CUTTING; X Objects[WEAPONID+3].weight = 50; X Objects[WEAPONID+3].level = 3; X Objects[WEAPONID+3].dmg = 16; X Objects[WEAPONID+3].basevalue = 250; X strcpy(Objects[WEAPONID+4].objstr,"katana"); X strcpy(Objects[WEAPONID+4].truename,"katana"); X strcpy(Objects[WEAPONID+4].cursestr,"katana"); X Objects[WEAPONID+4].hit = 10; X Objects[WEAPONID+4].type = CUTTING; X Objects[WEAPONID+4].weight = 50; X Objects[WEAPONID+4].level = 4; X Objects[WEAPONID+4].dmg = 16; X Objects[WEAPONID+4].basevalue = 500; X strcpy(Objects[WEAPONID+5].objstr,"great-sword"); X strcpy(Objects[WEAPONID+5].truename,"great-sword"); X strcpy(Objects[WEAPONID+5].cursestr,"great-sword"); X Objects[WEAPONID+5].hit = 7; X Objects[WEAPONID+5].type = CUTTING; X Objects[WEAPONID+5].weight = 75; X Objects[WEAPONID+5].level = 5; X Objects[WEAPONID+5].dmg = 20; X Objects[WEAPONID+5].basevalue = 400; X strcpy(Objects[WEAPONID+6].objstr,"epee"); X strcpy(Objects[WEAPONID+6].truename,"epee"); X strcpy(Objects[WEAPONID+6].cursestr,"epee"); X Objects[WEAPONID+6].weight = 15; X Objects[WEAPONID+6].type = THRUSTING; X Objects[WEAPONID+6].level = 2; X Objects[WEAPONID+6].hit = 15; X Objects[WEAPONID+6].dmg = 6; X Objects[WEAPONID+6].basevalue = 50; X strcpy(Objects[WEAPONID+7].objstr,"rapier"); X strcpy(Objects[WEAPONID+7].truename,"rapier"); X strcpy(Objects[WEAPONID+7].cursestr,"rapier"); X Objects[WEAPONID+7].weight = 20; X Objects[WEAPONID+7].type = THRUSTING; X Objects[WEAPONID+7].level = 3; X Objects[WEAPONID+7].hit = 13; X Objects[WEAPONID+7].dmg = 8; X Objects[WEAPONID+7].basevalue = 250; X strcpy(Objects[WEAPONID+8].objstr,"estoc"); X strcpy(Objects[WEAPONID+8].truename,"estoc"); X strcpy(Objects[WEAPONID+8].cursestr,"estoc"); X Objects[WEAPONID+8].dmg = 11; X Objects[WEAPONID+8].type = THRUSTING; X Objects[WEAPONID+8].weight = 25; X Objects[WEAPONID+8].level = 5; X Objects[WEAPONID+8].hit = 12; X Objects[WEAPONID+8].basevalue = 500; X strcpy(Objects[WEAPONID+9].objstr,"cutlass"); X strcpy(Objects[WEAPONID+9].truename,"cutlass"); X strcpy(Objects[WEAPONID+9].cursestr,"cutlass"); X Objects[WEAPONID+9].type = CUTTING; X Objects[WEAPONID+9].hit = 8; X Objects[WEAPONID+9].weight = 35; X Objects[WEAPONID+9].level = 1; X Objects[WEAPONID+9].dmg = 8; X Objects[WEAPONID+9].basevalue = 40; X strcpy(Objects[WEAPONID+10].objstr,"hand-axe"); X strcpy(Objects[WEAPONID+10].truename,"hand-axe"); X strcpy(Objects[WEAPONID+10].cursestr,"hand-axe"); X Objects[WEAPONID+10].type = CUTTING; X Objects[WEAPONID+10].hit = 10; X Objects[WEAPONID+10].weight = 25; X Objects[WEAPONID+10].level = 1; X Objects[WEAPONID+10].dmg = 8; X Objects[WEAPONID+10].basevalue = 50; X strcpy(Objects[WEAPONID+11].objstr,"battle-axe"); X strcpy(Objects[WEAPONID+11].truename,"battle-axe"); X strcpy(Objects[WEAPONID+11].cursestr,"battle-axe"); X Objects[WEAPONID+11].type = CUTTING; X Objects[WEAPONID+11].weight = 50; X Objects[WEAPONID+11].level = 2; X Objects[WEAPONID+11].hit = 8; X Objects[WEAPONID+11].dmg = 12; X Objects[WEAPONID+11].basevalue = 100; X strcpy(Objects[WEAPONID+12].objstr,"great-axe"); X strcpy(Objects[WEAPONID+12].truename,"great-axe"); X strcpy(Objects[WEAPONID+12].cursestr,"great-axe"); X Objects[WEAPONID+12].weight = 100; X Objects[WEAPONID+12].type = CUTTING; X Objects[WEAPONID+12].level = 5; X Objects[WEAPONID+12].hit = 7; X Objects[WEAPONID+12].dmg = 24; X Objects[WEAPONID+12].basevalue = 200; X strcpy(Objects[WEAPONID+13].objstr,"mace"); X strcpy(Objects[WEAPONID+13].truename,"mace"); X strcpy(Objects[WEAPONID+13].cursestr,"mace"); X Objects[WEAPONID+13].hit = 8; X Objects[WEAPONID+13].type = STRIKING; X Objects[WEAPONID+13].weight = 50; X Objects[WEAPONID+13].level = 2; X Objects[WEAPONID+13].dmg = 12; X Objects[WEAPONID+13].basevalue = 50; X strcpy(Objects[WEAPONID+14].objstr,"war-hammer"); X strcpy(Objects[WEAPONID+14].truename,"war-hammer"); X strcpy(Objects[WEAPONID+14].cursestr,"war-hammer"); X Objects[WEAPONID+14].weight = 50; X Objects[WEAPONID+14].type = STRIKING; X Objects[WEAPONID+14].level = 2; X Objects[WEAPONID+14].hit = 6; X Objects[WEAPONID+14].dmg = 14; X Objects[WEAPONID+14].basevalue = 60; X strcpy(Objects[WEAPONID+15].objstr,"morning-star"); X strcpy(Objects[WEAPONID+15].truename,"morning-star"); X strcpy(Objects[WEAPONID+15].cursestr,"morning-star"); X Objects[WEAPONID+15].hit = 7; X Objects[WEAPONID+15].type = STRIKING; X Objects[WEAPONID+15].weight = 60; X Objects[WEAPONID+15].level = 5; X Objects[WEAPONID+15].dmg = 16; X Objects[WEAPONID+15].basevalue = 150; X strcpy(Objects[WEAPONID+16].objstr,"flail"); X strcpy(Objects[WEAPONID+16].truename,"flail"); X strcpy(Objects[WEAPONID+16].cursestr,"flail"); X Objects[WEAPONID+16].hit = 7; X Objects[WEAPONID+16].type = STRIKING; X Objects[WEAPONID+16].weight = 50; X Objects[WEAPONID+16].level = 3; X Objects[WEAPONID+16].dmg = 12; X Objects[WEAPONID+16].basevalue = 50; X strcpy(Objects[WEAPONID+17].objstr,"club"); X strcpy(Objects[WEAPONID+17].truename,"club"); X strcpy(Objects[WEAPONID+17].cursestr,"club"); X Objects[WEAPONID+17].hit = 10; X Objects[WEAPONID+17].type = STRIKING; X Objects[WEAPONID+17].weight = 30; X Objects[WEAPONID+17].level = 0; X Objects[WEAPONID+17].dmg = 6; X Objects[WEAPONID+17].basevalue = 5; X strcpy(Objects[WEAPONID+18].objstr,"quarterstaff"); X strcpy(Objects[WEAPONID+18].truename,"quarterstaff"); X strcpy(Objects[WEAPONID+18].cursestr,"quarterstaff"); X Objects[WEAPONID+18].hit = 12; X Objects[WEAPONID+18].type = STRIKING; X Objects[WEAPONID+18].weight = 80; X Objects[WEAPONID+18].level = 1; X Objects[WEAPONID+18].dmg = 9; X Objects[WEAPONID+18].basevalue = 30; X strcpy(Objects[WEAPONID+19].objstr,"spear"); X strcpy(Objects[WEAPONID+19].truename,"spear"); X strcpy(Objects[WEAPONID+19].cursestr,"spear"); X Objects[WEAPONID+19].hit = 10; X Objects[WEAPONID+19].type = THRUSTING; X Objects[WEAPONID+19].weight = 50; X Objects[WEAPONID+19].level = 2; X Objects[WEAPONID+19].dmg = 10; X Objects[WEAPONID+19].basevalue = 50; X strcpy(Objects[WEAPONID+20].objstr,"halberd"); X strcpy(Objects[WEAPONID+20].truename,"halberd"); X strcpy(Objects[WEAPONID+20].cursestr,"halberd"); X Objects[WEAPONID+20].hit = 6; X Objects[WEAPONID+20].type = CUTTING; X Objects[WEAPONID+20].weight = 100; X Objects[WEAPONID+20].level = 3; X Objects[WEAPONID+20].dmg = 16; X Objects[WEAPONID+20].basevalue = 100; X strcpy(Objects[WEAPONID+21].objstr,"trident"); X strcpy(Objects[WEAPONID+21].truename,"trident"); X strcpy(Objects[WEAPONID+21].cursestr,"trident"); X Objects[WEAPONID+21].hit = 7; X Objects[WEAPONID+21].type = THRUSTING; X Objects[WEAPONID+21].weight = 80; X Objects[WEAPONID+21].level = 3; X Objects[WEAPONID+21].dmg = 12; X Objects[WEAPONID+21].basevalue = 75; X strcpy(Objects[WEAPONID+22].objstr,"whip"); X strcpy(Objects[WEAPONID+22].truename,"whip"); X strcpy(Objects[WEAPONID+22].cursestr,"whip"); X Objects[WEAPONID+22].hit = 8; X Objects[WEAPONID+22].type = STRIKING; X Objects[WEAPONID+22].weight = 20; X Objects[WEAPONID+22].level = 2; X Objects[WEAPONID+22].aux = I_TANGLE; X Objects[WEAPONID+22].dmg = 4; X Objects[WEAPONID+22].basevalue = 100; X strcpy(Objects[WEAPONID+23].objstr,"grey metal cylinder"); X strcpy(Objects[WEAPONID+23].cursestr,"lightsabre"); X strcpy(Objects[WEAPONID+23].truename,"lightsabre"); X Objects[WEAPONID+23].hit = 20; X Objects[WEAPONID+23].type = THRUSTING; X Objects[WEAPONID+23].weight = 20; X Objects[WEAPONID+23].level = 9; X Objects[WEAPONID+23].usef = I_LIGHTSABRE; X Objects[WEAPONID+23].aux = I_LIGHTSABRE; X Objects[WEAPONID+23].plus = 0; X Objects[WEAPONID+23].dmg = 30; X Objects[WEAPONID+23].basevalue = 2000; X strcpy(Objects[WEAPONID+24].objstr,"bastard sword"); X strcpy(Objects[WEAPONID+24].truename,"Demonblade"); X strcpy(Objects[WEAPONID+24].cursestr,"Demonblade"); X Objects[WEAPONID+36].uniqueness = UNIQUE_UNMADE; X Objects[WEAPONID+36].type = CUTTING; X Objects[WEAPONID+24].hit = 8; X Objects[WEAPONID+24].blessing = -8; X Objects[WEAPONID+24].plus = 8; X Objects[WEAPONID+24].weight = 500; X Objects[WEAPONID+24].usef = I_DEMONBLADE; X Objects[WEAPONID+24].aux = I_DEMONBLADE; X Objects[WEAPONID+24].level = 9; X Objects[WEAPONID+24].dmg = 16; X Objects[WEAPONID+24].basevalue = 1000; X strcpy(Objects[WEAPONID+25].objstr,"mace"); X strcpy(Objects[WEAPONID+25].truename,"mace of disruption"); X strcpy(Objects[WEAPONID+25].cursestr,"mace"); X Objects[WEAPONID+25].hit = 10; X Objects[WEAPONID+25].type = STRIKING; X Objects[WEAPONID+25].blessing = 9; X Objects[WEAPONID+25].plus = 3; X Objects[WEAPONID+25].weight = 250; X Objects[WEAPONID+25].usef = I_MACE_DISRUPT; X Objects[WEAPONID+25].aux = I_MACE_DISRUPT; X Objects[WEAPONID+25].level = 5; X Objects[WEAPONID+25].dmg = 12; X Objects[WEAPONID+25].basevalue = 3000; X strcpy(Objects[WEAPONID+26].objstr,"longbow"); X strcpy(Objects[WEAPONID+26].truename,"longbow"); X strcpy(Objects[WEAPONID+26].cursestr,"longbow"); X Objects[WEAPONID+26].hit = 15; X Objects[WEAPONID+26].type = MISSILE; X Objects[WEAPONID+26].objchar = MISSILEWEAPON; X Objects[WEAPONID+26].weight = 100; X Objects[WEAPONID+26].level = 2; X Objects[WEAPONID+26].dmg = 12; X Objects[WEAPONID+26].basevalue = 300; X strcpy(Objects[WEAPONID+27].objstr,"crossbow"); X strcpy(Objects[WEAPONID+27].truename,"crossbow"); X strcpy(Objects[WEAPONID+27].cursestr,"crossbow"); X Objects[WEAPONID+27].hit = 15; X Objects[WEAPONID+27].type = MISSILE; X Objects[WEAPONID+27].objchar = MISSILEWEAPON; X Objects[WEAPONID+27].weight = 150; X Objects[WEAPONID+27].level = 3; X Objects[WEAPONID+27].dmg = 20; X Objects[WEAPONID+27].basevalue = 500; X strcpy(Objects[WEAPONID+28].objstr,"arrow"); X strcpy(Objects[WEAPONID+28].truename,"arrow"); X strcpy(Objects[WEAPONID+28].cursestr,"arrow"); X Objects[WEAPONID+28].type = MISSILE; X Objects[WEAPONID+28].objchar = MISSILEWEAPON; X Objects[WEAPONID+28].hit = 3; X Objects[WEAPONID+28].weight = 2; X Objects[WEAPONID+28].aux = I_ARROW; X Objects[WEAPONID+28].level = 1; X Objects[WEAPONID+28].dmg = 3; X Objects[WEAPONID+28].basevalue = 2; X strcpy(Objects[WEAPONID+29].objstr,"bolt"); X strcpy(Objects[WEAPONID+29].truename,"bolt"); X strcpy(Objects[WEAPONID+29].cursestr,"bolt"); X Objects[WEAPONID+29].type = MISSILE; X Objects[WEAPONID+29].weight = 2; X Objects[WEAPONID+29].aux = I_BOLT; X Objects[WEAPONID+29].objchar = MISSILEWEAPON; X Objects[WEAPONID+29].level = 1; X Objects[WEAPONID+29].dmg = 3; X Objects[WEAPONID+30].hit = 3; X Objects[WEAPONID+29].basevalue = 5; X strcpy(Objects[WEAPONID+30].objstr,"bola"); X strcpy(Objects[WEAPONID+30].truename,"bola"); X strcpy(Objects[WEAPONID+30].cursestr,"bola"); X Objects[WEAPONID+30].weight = 50; X Objects[WEAPONID+30].type = MISSILE; X Objects[WEAPONID+30].objchar = MISSILEWEAPON; X Objects[WEAPONID+30].level = 2; X Objects[WEAPONID+30].aux = I_TANGLE; X Objects[WEAPONID+30].hit = 10; X Objects[WEAPONID+30].dmg = 3; X Objects[WEAPONID+30].basevalue = 50; X strcpy(Objects[WEAPONID+31].objstr,"broad sword"); X strcpy(Objects[WEAPONID+31].truename,"vorpal sword"); X strcpy(Objects[WEAPONID+31].cursestr,"sword of self-mutilation"); X Objects[WEAPONID+31].weight = 40; X Objects[WEAPONID+31].type = CUTTING; X Objects[WEAPONID+31].level = 7; X Objects[WEAPONID+31].aux = I_VORPAL; X Objects[WEAPONID+31].hit = 9; X Objects[WEAPONID+31].dmg = 12; X Objects[WEAPONID+31].plus = 5; X Objects[WEAPONID+31].basevalue = 3000; X strcpy(Objects[WEAPONID+32].objstr,"great-sword"); X strcpy(Objects[WEAPONID+32].truename,"Desecrator"); X strcpy(Objects[WEAPONID+32].cursestr,"Desecrator"); X Objects[WEAPONID+32].uniqueness = UNIQUE_UNMADE; X Objects[WEAPONID+32].type = CUTTING; X Objects[WEAPONID+32].weight = 100; X Objects[WEAPONID+32].level = 9; X Objects[WEAPONID+32].aux = I_DESECRATE; X Objects[WEAPONID+32].usef = I_DESECRATE; X Objects[WEAPONID+32].hit = 7; X Objects[WEAPONID+32].plus = 7; X Objects[WEAPONID+32].blessing = -7; X Objects[WEAPONID+32].dmg = 20; X Objects[WEAPONID+32].basevalue = 5000; X strcpy(Objects[WEAPONID+33].objstr,"morning-star"); X strcpy(Objects[WEAPONID+33].truename,"firestar"); X strcpy(Objects[WEAPONID+33].cursestr,"firestar"); X Objects[WEAPONID+33].weight = 60; X Objects[WEAPONID+33].type = STRIKING; X Objects[WEAPONID+33].level = 6; X Objects[WEAPONID+33].aux = I_FIRESTAR; X Objects[WEAPONID+33].usef = I_PERM_FIRE_RESIST; X Objects[WEAPONID+33].hit = 7; X Objects[WEAPONID+33].plus = 7; X Objects[WEAPONID+33].dmg = 16; X Objects[WEAPONID+33].basevalue = 2000; X strcpy(Objects[WEAPONID+34].objstr,"estoc"); X strcpy(Objects[WEAPONID+34].truename,"Defender"); X strcpy(Objects[WEAPONID+34].cursestr,"Defender"); X Objects[WEAPONID+34].uniqueness = UNIQUE_MADE; X Objects[WEAPONID+34].type = THRUSTING; X Objects[WEAPONID+34].weight = 50; X Objects[WEAPONID+34].level = 7; X Objects[WEAPONID+34].aux = I_DEFEND; X Objects[WEAPONID+34].usef = I_DEFEND; X Objects[WEAPONID+34].hit = 12; X Objects[WEAPONID+34].plus = 7; X Objects[WEAPONID+34].blessing = 7; X Objects[WEAPONID+34].dmg = 10; X Objects[WEAPONID+34].basevalue = 3000; X strcpy(Objects[WEAPONID+35].objstr,"ivory spear"); X strcpy(Objects[WEAPONID+35].truename,"Victrix"); X strcpy(Objects[WEAPONID+35].cursestr,"Victrix"); X Objects[WEAPONID+35].weight = 50; X Objects[WEAPONID+35].type = THRUSTING; X Objects[WEAPONID+35].level = 9; X Objects[WEAPONID+35].aux = I_VICTRIX; X Objects[WEAPONID+35].usef = I_VICTRIX; X Objects[WEAPONID+35].hit = 10; X Objects[WEAPONID+35].plus = 10; X Objects[WEAPONID+35].blessing = 10; X Objects[WEAPONID+35].dmg = 100; X Objects[WEAPONID+35].basevalue = 5000; X strcpy(Objects[WEAPONID+36].objstr,"great-axe"); X strcpy(Objects[WEAPONID+36].truename,"Goblins' Hewer"); X strcpy(Objects[WEAPONID+36].cursestr,"Goblins' Hewer"); X Objects[WEAPONID+36].uniqueness = UNIQUE_MADE; X Objects[WEAPONID+36].type = CUTTING; X Objects[WEAPONID+36].weight = 500; X Objects[WEAPONID+36].level = 7; X Objects[WEAPONID+36].hit = 6; X Objects[WEAPONID+36].plus = 6; X Objects[WEAPONID+36].blessing = 0; X Objects[WEAPONID+36].dmg = 32; X Objects[WEAPONID+36].basevalue = 2000; X strcpy(Objects[WEAPONID+37].objstr,"shortsword"); X strcpy(Objects[WEAPONID+37].truename,"The Dark Emperor's Sword"); X strcpy(Objects[WEAPONID+37].cursestr,"The Dark Emperor's Sword"); X Objects[WEAPONID+37].uniqueness = UNIQUE_MADE; X Objects[WEAPONID+37].type = CUTTING; X Objects[WEAPONID+37].weight = 25; X Objects[WEAPONID+37].level = 10; X Objects[WEAPONID+37].hit = 10; X Objects[WEAPONID+37].plus = 20; X Objects[WEAPONID+37].blessing = -10; X Objects[WEAPONID+37].dmg = 10; X Objects[WEAPONID+37].basevalue = 10000; X X X for (i=WEAPONID;iomega.update.history <<'END_OF_omega.update.history' XVersion Changes X======= ======= X X0.57(alpha) First public release X0.58(alpha) bugfixes, I forget what else X0.59(alpha) bugfixes, better tactical combat mode ^c trapping X X0.60.2(alpha) bugfixes, filechecking, cuserid changed to getlogin, X brothel on city level, more foods. this file X started. new time mechanism, new module otime. X 12/14/87. END_OF_omega.update.history if test 357 -ne `wc -c