[comp.sources.games] v07i023: omega3 - rogue like dungeon exploration

billr@saab.CNA.TEK.COM (Bill Randle) (07/13/89)

Submitted-by: "Laurence R. Brothers"   <brothers@paul.rutgers.edu>
Posting-number: Volume 7, Issue 23
Archive-name: omega3/Part04
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 4 (of 20)."
# Contents:  ominit.h omove.c othanks.txt
# Wrapped by billr@saab on Thu Jun 29 08:13:59 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'ominit.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ominit.h'\"
else
echo shar: Extracting \"'ominit.h'\" \(20528 characters\)
sed "s/^X//" >'ominit.h' <<'END_OF_FILE'
X/* omega, (C) 1987,1988,1989 by Laurence Raphael Brothers */
X/* ominit.h */
X/* This file defines and initializes the Monsters Array */
X
Xstruct monster Monsters[NUMMONSTERS] = {
X0,0,0,0,0,0,0,0,1,1,10,2,4,1,0,1,50,0,1,1,1,-1,-1,0,101,502,401,-1,-1,8710,0,'h',"hornet","dead hornet","AXAX",
X
X0,0,0,0,0,0,0,1,30,0,0,0,10,10,0,5,100,2,15,1000,0,-1,-1,0,113,504,404,-1,202,130,0,'@',"mendicant priest","dead mendicant priest","BX",
X
X0,0,0,0,0,0,0,2,15,0,0,0,10,10,0,7,0,3,5,1000,0,-1,-1,0,114,504,-1,-1,210,2,0,'@',"itinerant merchant","dead itinerant merchant","BX",
X
X0,0,0,0,0,0,0,3,150,20,20,25,10,1,0,3,50,0,150,1000,0,-1,89,0,115,506,401,-1,217,2,0,'G',"guardsman","dead guardsman","A?A?A?B?B?B?",
X
X0,0,0,0,0,0,0,4,5,5,5,5,5,5,0,5,5,0,5,1000,0,-1,-1,0,106,506,401,-1,-1,5,5,'@',"Log NPC","dead NPC","A?B?",
X
X0,0,0,0,0,0,0,5,5,5,5,1,2,1,0,5,25,0,2,200,10,-1,-1,0,130,505,401,-1,-1,20482,0,'s',"sheep","side of mutton","ALBX",
X
X0,0,0,0,0,0,0,6,16,6,6,1,2,1,0,6,0,0,6,200,0,-1,-1,0,127,-1,401,-1,228,2,0,'@',"merchant","dead merchant","A?B?",
X
X0,0,0,0,0,0,0,7,10,5,5,5,5,5,0,5,25,1,5,1800,0,-1,-1,0,106,506,401,-1,-1,2,0,'@',"0th level NPC","dead 0th level NPC","AXBX",
X
X0,0,0,0,0,0,0,8,5,5,5,5,5,5,0,5,5,0,5,1000,0,-1,-1,2,106,506,401,-1,-1,5,5,'@',"Hiscore NPC","dead NPC","A?B?",
X
X0,0,0,0,0,0,0,9,25,12,5,15,3,3,1,8,100,0,10,100,0,-1,101,0,101,501,401,-1,-1,8230,28,'g',"grunt","dead grunt","ACAC",
X
X0,0,0,0,0,0,0,10,1,10,5,2,10,10,1,4,0,0,3,1,5,71,-1,0,101,502,411,-1,-1,8710,0,'t',"tse-tse fly","dead tse-tse fly","AX",
X
X0,0,0,0,0,0,0,11,1,0,0,0,10,10,1,10,0,1,5,2,50,63,-1,0,101,502,-1,-1,207,8192,0,'f',"fnord","fnord's antennae","",
X
X0,0,0,0,0,0,0,12,5,5,3,5,5,2,1,3,30,0,5,10,0,-1,-1,0,101,502,410,-1,-1,12326,0,'r',"sewer rat","dead sewer rat","ALAL",
X
X0,0,0,0,0,0,0,13,12,0,0,0,10,10,1,10,0,0,1,1,0,-1,-1,0,101,-1,-1,-1,204,16384,4,'f',"aggravator fungus","aggravator fungus spores","",
X
X0,0,0,0,0,0,0,14,50,0,5,0,3,3,1,24,100,2,20,20,25,47,-1,0,101,-1,-1,-1,503,16386,0,'b',"blipper","blipper organ","BX",
X
X0,0,0,0,0,0,0,15,8,10,8,8,10,2,1,5,0,1,10,500,0,-1,84,0,104,506,401,-1,-1,70,0,'g',"goblin","dead goblin","AXBX",
X
X0,0,0,0,0,0,0,16,10,10,10,10,4,4,1,9,50,1,25,5,10,61,-1,0,102,506,401,-1,208,8198,256,'p',"phantasticon","phantasticon's eyes","AXAXBX",
X
X0,0,0,0,0,0,0,17,5,10,10,15,10,3,1,12,100,0,15,25,0,-1,-1,0,107,501,401,-1,-1,2,432,'R',"household robot","household robot battery","ACBC",
X
X0,0,0,0,0,0,0,18,1,5,5,5,10,10,1,8,50,0,1,250,0,-1,-1,0,101,508,401,-1,-1,16390,0,'g',"pencil-necked geek","dead pencil-necked geek","AX",
X
X0,0,0,0,0,0,0,19,6,8,5,6,4,3,1,4,50,0,6,30,0,-1,-1,0,111,502,401,-1,-1,16898,0,'b',"borogrove","borogrove wings","AXBX",
X
X0,0,0,0,0,0,0,20,3,0,15,1,4,4,1,2,50,0,1,20,0,-1,-1,0,130,502,401,-1,-1,16898,0,'q',"quail","quail en brochet","",
X
X0,0,0,0,0,0,0,21,13,10,5,5,2,1,1,4,50,0,3,20,0,-1,-1,0,130,510,401,-1,-1,20482,0,'b',"badger","badger ribs","ALAL",
X
X0,0,0,0,0,0,0,22,7,15,10,10,10,5,1,2,50,0,10,20,0,-1,-1,0,130,510,401,-1,-1,16898,0,'h',"hawk","buffalo style hawk wings","AH",
X
X0,0,0,0,0,0,0,23,23,5,10,5,10,10,1,2,50,0,5,500,0,-1,-1,0,130,510,401,-1,-1,20482,0,'d',"deer","venison","AXBXBX",
X
X0,0,0,0,0,0,0,24,30,10,5,10,4,2,1,5,50,0,5,500,0,-1,-1,0,130,510,401,-1,-1,16422,0,'c',"camel","hump au jus","AXBX",
X
X0,0,0,0,0,0,0,25,20,0,5,5,4,2,1,4,50,0,3,400,0,-1,-1,0,130,510,401,-1,-1,20482,0,'a',"anteater","roast loin of anteater","AL",
X
X0,0,0,0,0,0,0,26,3,0,7,1,4,4,1,3,50,0,1,20,0,-1,-1,0,130,510,401,-1,-1,20482,0,'r',"rabbit","bunnyburgers","AL",
X
X0,0,0,0,0,0,0,27,3,0,18,1,4,4,1,2,50,0,1,20,0,-1,-1,0,130,510,-1,-1,-1,16642,0,'t',"trout","filet of trout","",
X
X0,0,0,0,0,0,0,28,1,0,0,0,4,4,1,4,50,0,1,20,0,-1,-1,0,130,510,-1,-1,-1,16642,0,'b',"striped bass","bass filets","",
X
X0,0,0,0,0,0,0,29,5,10,10,12,10,2,1,3,50,0,5,20,0,-1,-1,0,129,502,401,-1,-1,16930,0,'p',"parrot","grilled breast of parrot","AH",
X
X0,0,0,0,0,0,0,30,10,10,5,5,10,2,1,4,20,0,8,20,0,-1,-1,0,131,510,401,-1,-1,20518,0,'h',"hyena","hyena ribs","AX",
X
X0,0,0,0,0,0,0,31,20,16,10,15,10,3,2,3,50,1,40,1000,0,-1,85,0,125,506,401,-1,201,10246,0,'n',"apprentice ninja","dead ninja","A?A?B?B?",
X
X0,0,0,0,0,0,0,32,30,15,10,5,10,10,2,6,0,0,35,250,100,-1,-1,0,105,502,407,-1,-1,8710,0,'n',"night gaunt","dead night gaunt","ACAC",
X
X0,0,0,0,0,0,0,33,32,0,10,0,10,10,2,2,0,3,20,1000,0,-1,-1,0,126,506,-1,-1,203,70,0,'@',"sneak-thief","dead sneak-thief","AXB?B?B?",
X
X0,0,0,0,0,0,0,34,25,0,0,0,10,10,2,5,0,0,10,1,20,82,-1,0,-1,505,-1,-1,212,514,256,'e',"floating eye","dead floating eye","",
X
X0,0,0,0,0,0,0,35,30,10,10,10,6,3,2,4,0,0,25,10,0,-1,-1,0,110,502,401,-1,-1,16386,0,'t',"tove","dead tove","ALBX",
X
X0,0,0,0,0,0,0,36,32,15,10,5,5,3,2,8,0,1,30,50,30,76,-1,0,-1,502,401,301,-1,10246,0,'n',"transparent nasty","dead transparent nasty","ACAC",
X
X0,0,0,0,0,0,0,37,32,0,10,0,5,10,2,20,0,0,30,1,0,-1,-1,0,117,507,-1,-1,216,1042,386,'g',"ghost","ghost ectoplasm","",
X
X0,0,0,0,0,0,0,38,20,5,10,5,5,3,2,8,0,2,40,1,100,-1,-1,0,108,508,401,-1,211,6,8,'e',"enchanter","dead enchanter","AXBXBX",
X
X0,0,0,0,0,0,0,39,7,0,0,0,10,3,2,12,0,0,40,1,10,64,-1,0,-1,-1,-1,-1,226,8197,0,'f',"murk fungus","murk cloud particles","",
X
X0,0,0,0,0,0,0,40,25,20,12,10,10,3,2,4,0,1,30,1,-1,-1,96,0,108,506,401,301,-1,70,128,'G',"goblin chieftain","dead goblin chieftain","A?A?B?",
X
X0,0,0,0,0,0,0,41,40,15,5,15,8,3,2,4,10,0,35,50,0,-1,-1,0,130,501,401,-1,-1,20518,384,'w',"wolf","wolf cutlets","AXAXAX",
X
X0,0,0,0,0,0,0,42,20,15,15,10,3,3,2,3,10,0,30,50,0,-1,-1,0,130,501,406,-1,-1,8198,384,'a',"giant soldier ant","ant mandibles","AXAXAX",
X
X0,0,0,0,0,0,0,43,100,25,25,50,3,3,2,12,10,0,50,500,0,-1,-1,0,130,510,401,-1,-1,20514,0,'e',"elephant","trunk steak","AX",
X
X0,0,0,0,0,0,0,44,50,20,5,20,6,3,2,4,10,0,40,500,0,-1,-1,0,128,501,401,-1,-1,20514,0,'h',"horse","steaming horsemeat","AX",
X
X0,0,0,0,0,0,0,45,35,15,5,30,4,1,3,4,50,0,75,50,50,168,-1,0,101,502,402,-1,-1,70,4,'s',"salamander","salamander scales","AXAX",
X
X0,0,0,0,0,0,0,46,100,10,10,20,5,2,3,8,50,0,50,10,50,167,-1,0,101,501,401,305,-1,102,0,'C',"catoblepas","catoblepas' eyes","AXBX",
X
X0,0,0,0,0,0,0,47,15,18,15,15,3,3,3,4,0,2,80,25,50,184,-1,0,108,506,412,-1,213,6,424,'f',"lesser frost demon","lesser frost demon's heart","A?A?B?",
X
X0,0,0,0,0,0,0,48,10,20,0,50,5,1,3,20,0,0,60,10,0,-1,-1,0,-1,504,401,-1,214,514,288,'a',"acid cloud","acid pool","AX",
X
X0,0,0,0,0,0,0,49,1,20,0,0,5,5,2,10,100,0,90,10,0,-1,-1,0,102,507,409,-1,201,3590,418,'p',"phantom","hardly anything at all","AX",
X
X0,0,0,0,0,0,0,50,32,18,10,32,5,20,3,5,100,3,500,100,0,-1,120,2,104,506,401,301,-1,70,0,'K',"The Goblin King","The Head of the Goblin King","A?A?B?B?",
X
X0,0,0,0,0,0,0,51,42,16,10,10,8,4,3,3,0,0,75,500,1,-1,-1,0,130,502,401,-1,-1,16902,384,'P',"pterodactyl","dead pterodactyl","AH",
X
X0,0,0,0,0,0,0,52,25,10,10,10,5,5,3,6,0,2,40,500,-1,-1,-1,0,108,506,401,-1,211,70,0,'G',"goblin shaman","dead goblin shaman","AXBX",
X
X0,0,0,0,0,0,0,53,60,20,10,25,5,1,3,3,0,0,50,50,-1,-1,-1,0,130,501,401,-1,-1,20518,0,'l',"lion","lion souflee","AXAX",
X
X0,0,0,0,0,0,0,54,30,15,10,15,5,1,3,5,0,2,75,50,-1,-1,111,0,104,506,401,301,-1,70,0,'b',"brigand","dead brigand","AXAXBX",
X
X0,0,0,0,0,0,0,55,70,25,20,40,3,1,3,10,80,0,55,500,-1,-1,-1,0,130,510,401,-1,-1,20514,128,'b',"bear","bear's sirloin tips","AXAXBX",
X
X0,0,0,0,0,0,0,56,10,25,10,20,3,1,3,3,40,0,45,30,0,-1,-1,0,130,501,406,-1,-1,8198,0,'m',"mamba","mamba filet","AXAX",
X
X0,0,0,0,0,0,0,57,40,15,10,30,3,1,3,7,0,1,40,20,0,-1,-1,0,-1,501,406,-1,-1,8486,32,'M',"man o' war","deliquescing tentacles","AXAX",
X
X0,0,0,0,0,0,0,58,40,5,10,10,5,2,3,5,0,1,100,20,0,-1,-1,0,106,501,401,-1,229,2,0,'@',"were-human","dead were-human","AXBX",
X
X0,0,0,0,0,0,0,59,4,0,0,1,5,2,3,5,0,1,50,20,0,-1,-1,0,102,507,409,-1,-1,6,-7,'T',"thought-form","a velleity","ACACACACAC",
X
X0,0,0,0,0,0,0,60,100,15,12,25,6,2,4,6,25,2,150,300,20,185,-1,0,103,501,401,301,-1,550,0,'M',"manticore","manticore spikes","AXAX",
X
X0,0,0,0,0,0,0,61,50,12,10,10,10,10,4,2,50,0,100,300,10,72,-1,0,103,502,401,-1,-1,16422,0,'T',"tasmanian devil","dead tasmanian devil","AXAXAXAX",
X
X0,0,0,0,0,0,0,62,100,15,15,50,5,2,4,7,100,0,100,100,0,-1,-1,0,107,506,401,-1,205,8198,432,'a',"automatum minor","automatum minor battery","ACBC",
X
X0,0,0,0,0,0,0,63,75,30,10,15,5,1,4,12,75,0,125,50,20,83,-1,0,102,501,410,-1,201,14374,52,'s',"denebian slime devil","denebian slime","AL",
X
X0,0,0,0,0,0,0,64,50,18,12,25,5,1,4,3,75,0,125,500,0,-1,-1,0,109,502,401,-1,-1,16934,32,'j',"jub-jub bird","dead jub-jub bird","AHAH",
X
X0,0,0,0,0,0,0,65,50,15,5,20,4,1,4,7,0,0,150,500,0,-1,-1,0,108,501,406,-1,201,10278,416,'h',"haunt","dessicated corpse","ACAC",
X
X0,0,0,0,0,0,0,66,50,20,10,10,4,4,4,5,0,1,150,1,200,-1,-1,0,123,506,-1,-1,222,8198,416,'!',"incubus/succubus","(null)","(null)",
X
X0,0,0,0,0,0,0,67,50,0,10,0,4,4,4,6,0,0,50,1,0,-1,-1,0,112,506,-1,-1,223,130,0,'!',"satyr or nymph","(null)","(null)",
X
X0,0,0,0,0,0,0,68,80,25,20,30,4,1,4,8,50,0,100,300,100,-1,-1,0,-1,501,401,-1,-1,294,0,'c',"giant crocodile","crocodile hide","ALALBX",
X
X0,0,0,0,0,0,0,69,40,30,0,10,4,4,4,12,0,0,120,30,50,71,-1,0,101,501,411,-1,-1,38,384,'t',"torpor beast","a valium gland","AXBX",
X
X0,0,0,0,0,0,0,70,40,20,10,15,8,8,4,2,0,0,120,300,0,-1,-1,0,130,501,401,-1,230,6,384,'d',"doberman death-hound","dead doberman death-hound","LXLXLX",
X
X0,0,0,0,0,0,0,71,40,10,10,10,8,8,4,1,0,0,100,0,0,-1,-1,0,-1,507,412,-1,-1,1030,388,'F',"astral fuzzy","nothing much","AX",
X
X0,0,0,0,0,0,0,72,30,40,40,20,8,8,4,5,0,2,120,0,0,-1,-1,0,132,506,401,301,231,2,384,'l',"servant of law","dead servant","L?R?",
X
X0,0,0,0,0,0,0,73,40,25,20,10,8,8,4,5,0,2,120,500,0,-1,-1,0,102,506,401,301,231,2,384,'c',"servant of chaos","dead servant","AXAXAXAX?",
X
X0,0,0,0,0,0,0,74,40,15,0,10,3,0,4,10,0,0,50,1,0,-1,-1,0,-1,501,401,-1,234,518,386,'s',"swarm","dead swarm members","AX",
X
X0,0,0,0,0,0,0,75,40,10,20,10,8,8,4,4,0,2,100,50,0,-1,-1,0,133,501,409,308,-1,518,384,'b',"ban sidhe","dead ban sidhe","LX",
X
X0,0,0,0,0,0,0,76,50,20,20,20,3,1,4,6,60,3,100,1,0,-1,-1,0,102,507,401,-1,-1,17414,2,'e',"etheric grue","dead etheric grue","LHAHLH",
X
X0,0,0,0,0,0,0,77,40,20,13,30,8,4,4,5,0,1,100,500,100,-1,-1,0,125,501,406,301,201,2054,288,'n',"ninja (genin)","dead ninja","A?A?R?R",
X
X0,0,0,0,0,0,0,78,50,20,15,40,10,2,5,3,90,4,180,500,50,168,-1,0,104,501,403,302,-1,16998,4,'d',"dragonette","dragon steak","AXAXBXBX",
X
X0,0,0,0,0,0,0,79,50,15,10,40,10,2,5,12,40,0,150,100,200,177,-1,0,101,502,405,303,-1,6,16,'t',"tesla monster","tesla monster whip","AXAX",
X
X0,0,0,0,0,0,0,80,100,20,12,20,4,2,5,4,80,2,150,100,150,170,-1,0,104,501,406,-1,-1,8774,4,'W',"wyvern","wyvern's sting","AXAXBXBX",
X
X0,0,0,0,0,0,0,81,50,15,10,20,10,2,5,2,50,0,250,400,0,-1,-1,0,103,502,401,-1,209,16934,128,'c',"radeligian cateagle","dead radeligian cateagle","AXAXAXAXAX",
X
X0,0,0,0,0,0,0,82,75,20,20,20,5,5,5,3,50,3,200,50,200,178,-1,0,108,506,412,306,213,8198,424,'f',"frost demon","frost demon's heart","A?A?B?B?",
X
X0,0,0,0,0,0,0,83,75,20,20,20,5,2,5,6,50,0,200,10,200,151,-1,0,108,507,409,-1,-1,518,416,'S',"spectre","spectre's veil","A?A?A?",
X
X0,0,0,0,0,0,0,84,50,12,13,10,5,5,5,5,0,4,205,10,500,-1,43,0,108,508,401,-1,211,6,28,'n',"necromancer","dead necromancer","A?B?B?B?",
X
X0,0,0,0,0,0,0,85,40,18,18,20,5,5,5,7,50,2,175,2,10,64,-1,0,108,507,409,-1,226,1030,2,'S',"shadow spirit","shadowstuff","ACACAC",
X
X0,0,0,0,0,0,0,86,80,22,8,30,3,3,5,12,50,2,275,20,0,-1,-1,0,108,506,414,-1,227,8454,2,'B',"bog thing ","swamp slime","AXAXB?B?",
X
X0,0,0,0,0,0,0,87,40,25,0,0,20,3,5,6,0,2,175,20,0,-1,-1,0,102,507,409,-1,232,9222,386,'V',"astral vampire ","dead astral vampire","R?R?R?",
X
X0,0,0,0,0,0,0,88,100,40,0,60,3,1,5,10,75,0,175,2000,0,-1,-1,0,-1,501,402,-1,233,12294,4,'W',"lava worm ","dead lava worm","AX",
X
X0,0,0,0,0,0,0,89,1,0,0,0,30,30,5,20,0,0,100,0,0,-1,-1,0,102,505,-1,-1,236,1030,0,'m',"manaburst","feeling of warmth","BX",
X
X0,0,0,0,0,0,0,90,120,25,20,20,6,6,5,4,0,1,150,2000,0,-1,92,0,108,506,402,406,213,8198,420,'d',"outer circle demon ","dead outer circle demon","L?R?R?R?",
X
X0,0,0,0,0,0,0,91,40,15,10,30,8,8,5,6,0,1,100,20,0,-1,-1,0,-1,506,409,-1,237,6,28,'m',"mirrorshade ","some broken glass","AXAXAX",
X
X0,0,0,0,0,0,0,92,125,30,0,50,10,2,6,4,100,0,250,1,200,181,-1,0,102,501,402,304,-1,518,356,'F',"fire elemental","essence of fire elemental","AXAXAXRXRX",
X
X0,0,0,0,0,0,0,93,125,25,0,20,10,2,6,2,100,0,250,1,200,152,-1,0,102,502,401,-1,215,1542,368,'A',"air elemental","essence of air elemental","AXAXAXAXBXBX",
X
X0,0,0,0,0,0,0,94,100,15,10,30,5,1,6,6,100,0,250,1,200,188,-1,0,102,501,401,-1,-1,262,264,'W',"water elemental","essence of water elemental","AXAXBXBX",
X
X0,0,0,0,0,0,0,95,200,20,25,100,5,1,6,15,100,0,250,1,200,154,-1,0,102,507,401,-1,-1,6,288,'E',"earth elemental","essence of earth elemental","AXBX",
X
X0,0,0,0,0,0,0,96,100,20,20,50,3,1,6,2,50,1,250,1000,100,-1,-1,0,102,502,401,-1,-1,6,256,'b',"bandersnatch","bandersnatch hide","AXAXAXBX",
X
X0,0,0,0,0,0,0,97,100,15,20,50,5,1,6,3,50,5,300,100,1000,-1,-1,0,108,506,409,-1,211,6,420,'L',"lich","lich's skeleton","A?A?A?B?B?",
X
X0,0,0,0,0,0,0,98,100,20,20,30,5,3,6,5,30,3,300,10,500,-1,105,0,108,506,401,-1,211,4102,256,'T',"triton","dead triton","A?A?A?B?B?",
X
X0,0,0,0,0,0,0,99,100,0,20,0,10,3,6,3,0,5,200,10,0,-1,2,0,126,506,-1,-1,203,4166,0,'@',"human","dead master thief","A?B?B?B?",
X
X0,0,0,0,0,0,0,100,200,50,50,80,3,1,6,8,0,0,300,100000,0,-1,-1,0,130,501,401,-1,-1,4102,384,'T',"triceratops","dead triceratops","LX",
X
X0,0,0,0,0,0,0,101,100,20,20,20,10,2,6,3,50,4,250,10,0,-1,89,0,108,506,401,302,208,6,388,'R',"rakshasa","dead rakshasa","L?L?R?R?",
X
X0,0,0,0,0,0,0,102,100,40,20,30,5,1,6,7,90,4,250,10,500,-1,-1,0,108,501,406,304,213,4102,420,'S',"demon serpent","demon serpent's jewel","L?L?",
X
X0,0,0,0,0,0,0,103,120,30,20,20,10,10,6,4,0,1,250,10,0,-1,-1,0,102,506,401,-1,235,514,384,'a',"angel","angel's gown","L?R?RX",
X
X0,0,0,0,0,0,0,104,100,25,15,40,9,4,6,4,0,1,200,100,100,-1,-1,0,125,501,406,301,201,2054,288,'n',"ninja (chunin)","dead ninja","A?A?R?R?R",
X
X0,0,0,0,0,0,0,105,300,30,5,120,3,3,7,15,100,0,400,500,50,166,-1,0,101,501,401,-1,206,20486,16,'B',"behemoth","behemoth's gonads","AHBXBX",
X
X0,0,0,0,0,0,0,106,250,40,20,20,10,5,7,5,0,0,500,100,2000,-1,108,0,108,507,409,-1,211,518,424,'N',"nazgul","nazgul's husk","A?A?A?B?B?",
X
X0,0,0,0,0,0,0,107,100,100,30,50,10,3,7,2,50,0,400,100,500,170,-1,0,102,501,401,-1,508,4098,160,'U',"unicorn","unicorn's horn","ACACB?B?B?B?B?B?B?",
X
X0,0,0,0,0,0,0,108,150,30,20,50,10,3,7,3,50,0,400,100,0,-1,-1,0,-1,501,410,-1,201,14374,128,'r',"rodent of unusual size","dead R.O.U.S.","AXAXAX",
X
X0,0,0,0,0,0,0,109,100,20,25,30,10,2,7,5,50,3,400,0,0,-1,-1,0,-1,501,401,-1,208,70,1024,'F',"illusory fiend","not much of anything","AXAXAX",
X
X0,0,0,0,0,0,0,110,250,40,30,20,10,1,7,5,100,8,500,1500,2000,-1,118,2,108,501,401,412,225,4102,424,'W',"Great Wyrm","The head of the Great Wyrm","AXAXAX",
X
X0,0,0,0,0,0,0,111,150,30,30,20,10,1,7,1,100,8,350,1500,0,-1,117,0,-1,506,402,-1,-1,518,420,'F',"flame devil","dead flame devil","A?A?R?R?R?",
X
X0,0,0,0,0,0,0,112,150,50,10,20,1,0,7,1,100,4,400,1500,0,-1,-1,0,-1,-1,401,-1,-1,36,0,'|',"lurker at the threshold","dead lurker","L?L?L?",
X
X0,0,0,0,0,0,0,113,50,30,30,20,10,1,7,4,0,2,450,500,0,-1,-1,0,102,501,411,-1,-1,518,258,'S',"sandman","mound of sand ","AX",
X
X0,0,0,0,0,0,0,114,50,40,10,10,10,10,7,2,0,5,350,50,0,-1,-1,0,-1,506,411,-1,237,518,1024,'m',"mirror master","shards of glass","AXAX",
X
X0,0,0,0,0,0,0,115,150,30,30,20,10,1,7,4,90,2,450,500,0,-1,-1,0,103,501,406,-1,-1,16934,160,'G',"elder etheric grue","dead elder etheric grue ","AXAXAXL?B?B?",
X
X0,0,0,0,0,0,0,116,150,50,40,60,3,3,7,8,90,6,380,500,0,-1,-1,0,103,501,406,-1,214,4134,416,'S',"loathly serpent","loathly serpent ","AXAXAXL?B?B?",
X
X0,0,0,0,0,0,0,117,100,10,30,20,8,3,7,3,20,2,460,500,0,-1,-1,0,108,508,409,-1,238,6,128,'Z',"zombie overlord","extremely dead zombie overlord","L?R?R?R?",
X
X0,0,0,0,0,0,0,118,50,30,30,2,13,1,7,1,30,0,250,50,0,-1,-1,0,101,502,401,-1,502,16902,0,'r',"ricochet","dead ricochet ","L?",
X
X0,0,0,0,0,0,0,119,240,35,30,40,8,8,7,3,0,3,300,3000,0,-1,-1,0,108,506,402,411,213,8198,420,'D',"inner circle demon","dead inner circle demon ","L?L?R?R?R?RXRXRX",
X
X0,0,0,0,0,0,0,120,1,0,100,0,6,2,8,3,0,0,50,100,0,-1,-1,0,120,505,-1,-1,-1,514,268,'f',"fairy","good fairy dust","B?",
X
X0,0,0,0,0,0,0,121,100,50,50,20,10,10,8,3,0,0,500,3,0,-1,-1,0,119,505,-1,-1,-1,8710,268,'f',"fairy","evil fairy dust","B?",
X
X0,0,0,0,0,0,0,122,500,30,50,100,5,2,8,3,100,0,500,1000,0,-1,107,0,107,506,401,303,205,6,432,'A',"automatum major","automatum major components","A?A?R?R?",
X
X0,0,0,0,0,0,0,123,500,50,30,75,20,1,8,5,100,7,750,500,1000,137,-1,0,104,501,403,302,-1,614,292,'D',"dragon","dragon scales","A?A?A?A?B?B?",
X
X0,0,0,0,0,0,0,124,500,40,25,100,5,1,8,2,75,2,600,500,1000,115,-1,0,109,502,401,-1,-1,38,288,'J',"jabberwock","jabberwock's head","A?A?A?A?A?",
X
X0,0,0,0,0,0,0,125,350,40,40,40,10,10,8,2,25,5,700,100,500,108,-1,0,108,506,412,306,213,38,424,'F',"frost demon lord","frost demon lord's sigil","A?A?A?R?R?R?",
X
X0,0,0,0,0,0,0,126,350,35,30,40,10,4,8,2,25,0,700,100,100,-1,-1,0,-1,501,401,-1,-1,294,424,'T',"tigershark","tigershark pelt","AXAXAXAX",
X
X0,0,0,0,0,0,0,127,250,40,25,50,10,4,8,3,0,2,800,100,100,-1,-1,0,125,501,406,301,201,2054,288,'n',"ninja (jonin)","dead ninja","A?A?R?R?R?R?R?",
X
X0,0,0,0,0,0,0,128,250,30,40,30,10,4,8,3,0,3,500,10,75,164,-1,0,108,507,406,211,226,3078,290,'S',"shadow slayer","shadow matrix","A?A?B?B?",
X
X0,0,0,0,0,0,0,129,250,30,30,30,10,4,8,6,0,3,700,10,75,-1,97,0,102,506,401,301,211,6,256,'@',"militant priest","dead militant priest","A?A?A?B?B?",
X
X0,0,0,0,0,0,0,130,150,25,40,30,10,4,8,5,0,3,500,10,75,-1,-1,0,102,506,411,-1,-1,2054,256,'C',"coma beast","dead coma beast","AXAXAXBX",
X
X0,0,0,0,0,0,0,131,250,50,40,30,10,10,8,3,0,3,500,10,0,-1,-1,0,102,506,401,302,235,514,388,'A',"high angel","high angel's robes","L?R?RXRX",
X
X0,0,0,0,0,0,0,132,750,80,50,200,10,2,9,8,90,5,1000,500,2000,-1,122,0,104,501,401,301,206,102,136,'J',"jotun","jotun's head","AHAHB?",
X
X0,0,0,0,0,0,0,133,1000,50,30,40,20,2,9,4,40,0,750,100,200,152,-1,0,102,502,401,-1,-1,2566,16,'i',"invisible slayer","dead slayer","AXAXAX",
X
X0,0,0,0,0,0,0,134,700,50,32,50,5,2,9,3,80,4,1000,100,50,170,-1,0,104,501,406,-1,-1,582,36,'W',"king wyvern","king wyvern's sting","AXAXAXBXBX",
X
X0,0,0,0,0,0,0,135,500,30,50,30,10,2,9,4,50,0,500,40,500,117,-1,0,-1,505,401,-1,212,8742,4,'d',"deathstar","deathstar's eye","BX",
X
X0,0,0,0,0,0,0,136,250,20,25,25,5,5,9,4,50,4,1500,50,3000,-1,-1,0,108,506,401,211,211,2,28,'T',"high thaumaturgist","dead thaumaturgist","A?B?B?B?B?",
X
X0,0,0,0,0,0,0,137,750,70,50,50,10,1,9,2,50,0,1000,1,200,151,-1,0,108,507,409,409,201,2566,416,'V',"vampire lord","vampire dust","A?A?A?B?B?B?",
X
X0,0,0,0,0,0,0,138,1000,100,50,50,20,20,9,2,100,5,1500,15,3000,-1,118,0,102,506,401,411,235,514,1452,'A',"archangel","archangel's diadem","L?R?R?R?R?R?R?R?R?",
X
X0,0,0,0,0,0,0,139,800,80,40,80,12,12,9,2,0,5,1200,4500,3000,-1,108,0,108,506,401,401,213,8710,1444,'D',"demon prince","dead demon prince","LLLCLHRLRCRHRLRCRH",
X
X0,0,0,0,0,0,0,140,100,10,10,1,100,100,100,10,0,0,0,0,1,-1,123,2,108,506,415,-1,239,6,1408,'D',"Death","No way can you be seeing this!","AX",
X
X0,0,0,0,0,0,0,141,1000,0,20,0,3,3,10,5,50,0,10000,1000,250,187,-1,2,102,505,-1,-1,218,2,-3,'E',"The Eater of Magic","The Heart of the Eater of Magic","B?B?B?B?B?",
X
X0,0,0,0,0,0,0,142,500,50,50,50,5,3,10,5,50,0,10000,1000,2000,-1,118,2,122,506,401,-1,219,2,3,'L',"The LawBringer","The LawBringer's Crown","A?A?B?B?B?B?",
X
X0,0,0,0,0,0,0,143,2000,100,100,100,10,1,10,1,100,10,10000,1000,2000,137,-1,2,108,501,403,302,220,518,92,'D',"The Dragon Lord","The Dragon Lord's Armor","A?A?A?A?A?B?B?B?",
X
X0,0,0,0,0,0,0,144,3000,200,100,200,20,20,10,2,0,7,20000,1000,3000,-1,214,2,108,507,409,401,213,3078,-4,'D',"The Demon Emperor","The Demon Emperor's Regalia","L?L?L?L?L?R?R?R?R?R?",
X
X0,0,0,0,0,0,0,145,2000,200,100,200,5,1,10,12,0,0,5000,10000,1,-1,195,2,102,507,401,401,221,1026,-20,'E',"The Elemental Lord of Earth","some dirt","A?B?B?B?",
X
X0,0,0,0,0,0,0,146,1000,100,50,50,20,1,10,1,100,0,5000,0,1,-1,194,2,102,507,401,303,215,3586,-1028,'A',"The Elemental Lord of Air","some air","A?A?A?A?A?A?A?A?A?B?",
X
X0,0,0,0,0,0,0,147,1500,100,100,100,5,1,10,5,100,0,5000,10,1,-1,192,2,102,501,401,306,-1,258,-8,'W',"The Elemental Lord of Water","some water","A?A?A?B?B?B?",
X
X0,0,0,0,0,0,0,148,1500,200,100,300,10,1,10,3,100,0,5000,1000,1,-1,193,2,102,501,402,304,-1,2,-12,'F',"The Elemental Lord of Fire","a spark","A?A?A?R?R?R?R?",
X
X0,0,0,0,0,0,0,149,1000,200,200,200,20,20,10,2,0,10,10000,10000,1,-1,191,2,108,506,413,307,224,4610,-5,'M',"The Elemental Master","A burning mound of bubbling mud","A?A?A?A?R?R?R?R?"
X};
END_OF_FILE
if test 20528 -ne `wc -c <'ominit.h'`; then
    echo shar: \"'ominit.h'\" unpacked with wrong size!
fi
# end of 'ominit.h'
fi
if test -f 'omove.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'omove.c'\"
else
echo shar: Extracting \"'omove.c'\" \(30907 characters\)
sed "s/^X//" >'omove.c' <<'END_OF_FILE'
X/* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
X/* omove.c */
X/* general functions for player moving */
X
X#include "oglob.h"
X
X
X
X/* various miscellaneous location functions */
Xvoid l_water()
X{
X  if (! gamestatusp(MOUNTED))  {
X    if ((Player.possessions[O_ARMOR] != NULL)) {
X      print1("Your heavy armor drags you under the water!");
X      p_drown();
X    }
X    else if (Player.itemweight > ((int) (Player.maxweight / 2))) {
X      print1("The weight of your burden drags you under water!");
X      p_drown();
X    }
X    else switch(random_range(32)) {
X    case 0:print1("Splish. Splash!"); break;
X    case 1:print1("I want my ducky!"); break;
X    case 2:print1("So finally you take a bath!"); break;
X    case 3:print1("You must be very thirsty!"); break;
X    }
X  }
X  else switch(random_range(32)) {
X    case 0:print1("Your horse frolics playfully in the water."); break;
X    case 1:print1("Your horse quenches its thirst."); break;
X    case 2:print1("Your steed begins to swim...."); break;
X    case 3:print1("Your mount thrashes about in the water."); break;
X    }
X}
X
X
X
Xvoid l_chaos()
X{
X  if (! onewithchaos)
X    print1("You are immersed in raw Chaos....");
X  if (Player.rank[ADEPT]) {
X    if (! onewithchaos)
X    {
X      onewithchaos = 1;
X      print2("You achieve oneness of Chaos....");
X    }
X    Player.mana = max(Player.mana,calcmana());
X    Player.hp = max(Player.hp, Player.maxhp);
X  }
X  else if (Player.rank[PRIESTHOOD] && (! saved)) {
X    print2("A mysterious force protects you from the Chaos!");
X    print3("Wow.... You feel a bit smug.");
X    gain_experience(500);
X    saved = TRUE;
X  }
X  else {
X    print2("Uh oh....");
X    if (saved) nprint2("Nothing mysterious happens this time....");
X    morewait();
X    print1("Congratulations! You've achieved maximal entropy!");
X    Player.alignment -= 50;
X    gain_experience(1000);
X    p_death("immersion in raw Chaos");
X  }
X}
X
X
X
X
Xvoid l_hedge()
X{
X  if (Player.patron == DRUID) print1("You move through the hedges freely.");
X  else {
X    print1("You struggle in the brambly hedge... ");
X    switch(random_range(6)) {
X    case 0: 
X      print2("You are stabbed by thorns!");
X      p_damage(random_range(6),NORMAL_DAMAGE,"a hedge");
X      print3("The thorns were poisonous!");
X      p_poison(random_range(12));
X      break;
X    case 1: 
X      print2("You are stabbed by thorns!");
X      p_damage(random_range(12),NORMAL_DAMAGE,"a hedge");
X      break;
X    case 2: 
X      print2("You seem to have gotten stuck in the hedge.");
X      Player.status[IMMOBILE]+=random_range(5)+1;
X      break;
X    case 3: 
X      if (Player.possessions[O_CLOAK] != NULL) {
X	print2("Your cloak was torn on the brambles!");
X	dispose_lost_objects(1,Player.possessions[O_CLOAK]);
X      }
X      else print2("Ouch! These thorns are scratchy!");
X      break;
X    default: print2("You make your way through unscathed."); break;
X    }
X  }
X}
X
X
X
Xvoid l_lava()
X{
X  print1("Very clever -- walking into a pool of lava...");
X  if (gamestatusp(MOUNTED)) {
X    print2("Your horse is incinerated... You fall in too!");
X    resetgamestatus(MOUNTED);
X  }
X  morewait();
X  if (strcmp(Player.name,"Saltheart Foamfollower")==0) {
X    print1("Strangely enough, you don't seem terribly affected.");
X    p_damage(1,UNSTOPPABLE,"slow death in a pool of lava");
X  }
X  else {
X    p_damage(random_range(75),FLAME,"incineration in a pool of lava");
X    if (Player.hp> 0) p_drown();
X    Player.status[IMMOBILE]+=2;
X  }
X}
X
X
X
Xvoid l_fire()
X{
X  print1("You boldly stride through the curtain of fire...");
X  if (gamestatusp(MOUNTED)) {
X    print2("Your horse is fried and so are you...");
X    resetgamestatus(MOUNTED);
X  }
X  p_damage(random_range(100),FLAME,"self-immolation");
X}
X
Xvoid l_abyss()
X{
X  int i;
X  if (Current_Environment != Current_Dungeon) {
X    print1("You fall through a dimensional portal!");
X    strategic_teleport(-1);
X  }
X  else {
X    print1("You enter the infinite abyss!");
X    if (random_range(100)==13) {
X      morewait();
X      print1("As you fall you see before you what seems like");
X      print2("an infinite congerie of iridescent bubbles.");
X      print3("You have met Yog Sothoth!!!");
X      morewait();
X      clearmsg();
X      if (Player.alignment > -10) 
X	p_death("the eater of souls");
X      else {
X	print1("The All-In-One must have taken pity on you.");
X	print2("A transdimensional portal appears...");
X	morewait();
X	change_level(Level->depth,Level->depth+1,FALSE);
X	gain_experience(2000);
X	Player.alignment -= 50;
X      }
X    }
X    else {
X      i = 1;
X      print1("You fall...");
X      while(random_range(3)!=2) {
X	i++;
X	print2("...and fall...");
X	morewait();
X      }
X      p_damage(i*5,NORMAL_DAMAGE,"fall through the abyss");
X      print1("Finally,you emerge through an interdimensional interstice...");
X      if (Level->depth+i>MaxDungeonLevels) {
X	print2("You emerge high above the ground!!!!");
X	print3("Yaaaaaaaah........");
X	morewait();
X	strategic_teleport(-1);
X	p_damage(i*50,NORMAL_DAMAGE,"fall from a great height");
X      }
X      else {
X	p_damage(i*5,NORMAL_DAMAGE,"fall through the abyss");
X	print2("You built up some velocity during your fall, though....");
X	change_level(Level->depth,Level->depth+i,FALSE);
X	gain_experience(i*i*50);
X      }
X    }
X  }
X}
X
X
Xvoid l_lift()
X{
X  char response;
X  int levelnum;
X  Level->site[Player.x][Player.y].locchar = FLOOR;
X  Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X  print1("You walk onto a shimmering disk....");
X  print2("A glow surrounds you.");
X  print3("You feel weightless.... You feel ghostly....");
X  morewait();
X  clearmsg();
X  print1("Go up, down, or neither [u,d,ESCAPE] ");
X  do response = mcigetc();
X  while ((response != 'u') && 
X	 (response != 'd') &&
X	 (response != ESCAPE));
X  if (response != ESCAPE) {
X    print1("How many levels?");
X    levelnum = parsenum();
X    if (levelnum > 6) {
X      print2("The lift gives out partway...");
X      levelnum = 6;
X    }
X    print1("You rematerialize.....");
X    change_level(Level->depth,
X		(response=='d' ? 
X		 Level->depth+levelnum : 
X		 Level->depth-levelnum),
X		FALSE);
X    roomcheck();
X  }
X}
X
X
Xvoid l_magic_pool()
X{
X  int possibilities=random_range(100);
X  print1("This pool seems to be enchanted....");
X  if (gamestatusp(MOUNTED)) {
X    if (random_range(2)) {
X      print2("Your horse is polymorphed into a fig newton.");
X      resetgamestatus(MOUNTED);
X    }
X    else print2("Whatever it was, your horse enjoyed it....");
X  }
X  else  if (possibilities == 0) {
X    print1("Oh no! You encounter the DREADED AQUAE MORTIS...");
X    if (random_range(1000) < Player.level*Player.level*Player.level) {
X      print2("The DREADED AQUAE MORTIS throttles you within inches....");
X      print3("but for some reason chooses to let you escape.");
X      gain_experience(500);
X      Player.hp = 1;
X    }
X    else p_death("the DREADED AQUAE MORTIS!");
X  }
X  else if (possibilities < 25)
X    augment(0);
X  else if (possibilities < 30)
X    augment(1);
X  else if (possibilities < 60)
X    augment(-1);
X  else if (possibilities < 65)
X    cleanse(1);
X  else if (possibilities < 80) {
X    if (Player.possessions[O_WEAPON_HAND] != NULL) {
X      print1("You drop your weapon in the pool! It's gone forever!");
X      dispose_lost_objects(1,Player.possessions[O_WEAPON_HAND]);
X    }
X    else print1("You feel fortunate.");
X  }
X  else if (possibilities < 90) {
X    if (Player.possessions[O_WEAPON_HAND] != NULL) {
X      print1("Your weapon leaves the pool with a new edge....");
X      Player.possessions[O_WEAPON_HAND]->plus += random_range(10)+1;
X      calc_melee();
X    }
X    else print1("You feel unfortunate.");
X  }
X  else if (possibilities < 95) {
X    Player.hp += 10;
X    print1("You feel healthier after the dip...");
X  }
X  else if (possibilities < 99) {
X    print1("Oooh, a tainted pool...");
X    p_poison(10);
X  }
X  else if (possibilities == 99) {
X    print1("Wow! A pool of azoth!");
X    heal(10);
X    cleanse(1);
X    Player.mana = calcmana()*3;
X    Player.str = (Player.maxstr++)*3;
X  }
X  print2("The pool seems to have dried up.");
X  Level->site[Player.x][Player.y].locchar = TRAP;
X  Level->site[Player.x][Player.y].p_locf = L_TRAP_PIT;
X}
X    
X
X
X
X
X
X
X
X
X
X
X
X
Xvoid l_no_op()
X{
X}
X
X
Xvoid l_tactical_exit()
X{
X#ifndef MSDOS
X  free((char *) Level);
X#else
X  /* Free up monsters and items */
X  free_levelstuff(Level);
X#endif
X  Level = NULL;
X  if ((Current_Environment == E_TEMPLE) || 
X      (Current_Environment == E_TACTICAL_MAP) )
X    change_environment(E_COUNTRYSIDE);
X  else change_environment(Last_Environment);
X}
X
X
Xvoid l_rubble()
X{
X  int screwup = random_range(100) - (Player.agi + Player.level); 
X  print1("You climb over the unstable pile of rubble....");
X  if (screwup < 0) print2("No problem!");
X  else {
X    print2("You tumble and fall in a small avalanche of debris!");
X    print3("You're trapped in the pile!");
X    Player.status[IMMOBILE]+=2;
X    p_damage(screwup/5,UNSTOPPABLE,"rubble and debris");
X  }
X  morewait();
X}
X
X
X
X
X
X/* Drops all portcullises in 5 moves */
Xvoid l_portcullis_trap()
X{
X  int i,j,slam=FALSE;
X  
X  print3("Click.");
X  morewait();
X  for (i=max(Player.x-5,0);i<min(Player.x+6,WIDTH);i++)
X    for(j=max(Player.y-5,0);j<min(Player.y+6,LENGTH);j++) {
X      if ((Level->site[i][j].p_locf == L_PORTCULLIS) &&
X	  (Level->site[i][j].locchar != PORTCULLIS)) {
X	Level->site[i][j].locchar = PORTCULLIS;
X	putspot(i,j,PORTCULLIS);
X	if ((i==Player.x)&&(j==Player.y)) {
X	  print3("Smash! You've been hit by a falling portcullis!");
X	  morewait();
X	  p_damage(random_range(1000),NORMAL_DAMAGE,"a portcullis");
X	}
X	slam = TRUE;
X      }
X    }
X  if (slam) print3("You hear heavy walls slamming down!");
X}
X
X/* drops every portcullis on level, then kills itself and all similar traps. */
Xvoid l_drop_every_portcullis()
X{
X  int i,j,slam=FALSE;
X  
X  print3("Click.");
X  morewait();
X  for (i=0;i<WIDTH;i++)
X    for(j=0;j<LENGTH;j++) {
X      if (Level->site[i][j].p_locf == L_DROP_EVERY_PORTCULLIS)
X	Level->site[i][j].p_locf = L_NO_OP;
X      else if ((Level->site[i][j].p_locf == L_PORTCULLIS) &&
X	  (Level->site[i][j].locchar != PORTCULLIS)) {
X	Level->site[i][j].locchar = PORTCULLIS;
X	putspot(i,j,PORTCULLIS);
X	if ((i==Player.x)&&(j==Player.y)) {
X	  print3("Smash! You've been hit by a falling portcullis!");
X	  morewait();
X	  p_damage(random_range(1000),NORMAL_DAMAGE,"a portcullis");
X	}
X	slam = TRUE;
X      }
X    }
X  if (slam) print3("You hear heavy walls slamming down!");
X}
X
X
X
Xvoid l_raise_portcullis()
X{
X  int i,j,open=FALSE;
X  for (i=0;i<WIDTH;i++)
X    for(j=0;j<LENGTH;j++) {
X      if (Level->site[i][j].locchar == PORTCULLIS) {
X	Level->site[i][j].locchar = FLOOR;
X	putspot(i,j,FLOOR);
X	open = TRUE;
X      }
X    }
X  if (open) print1("You hear the sound of steel on stone!");
X}
X
X
Xvoid l_arena_exit()
X{
X  resetgamestatus(ARENA_MODE);
X#ifndef MSDOS
X  free((char *) Level);
X#endif
X  Level = NULL;
X  change_environment(E_CITY);
X}
X
X
Xvoid l_house_exit()
X{
X#ifndef MSDOS
X  free((char *) Level);
X#endif
X  Level = NULL;
X  change_environment(Last_Environment);
X}
X
X
Xvoid l_void()
X{
X  clearmsg();
X  print1("Geronimo!");
X  morewait();
X  clearmsg();
X  print1("You leap into the void.");
X  print2("Death peers over the edge and gazes quizzically at you....");
X  print3("'Bye-bye,' he says... 'We'll meet again.'");
X  while(Player.hp>0) {
X    Time+=60;
X    hourly_check();
X  }
X}
X
X
Xvoid l_fire_station()
X{
X  print1("The flames leap up, and the heat is incredible.");
X  if (Player.immunity[FLAME]) {
X    print2("You feel the terrible heat despite your immunity to fire!");
X    morewait();
X  }
X  print2("Enter the flames? [yn] ");
X  if (ynq2()=='y') {
X    if (Player.hp == 1) p_death("total incineration");
X    else Player.hp = 1;
X    dataprint();
X    print1("You feel like you are being incinerated! Jump back? [yn] ");
X    if (ynq1()=='y')
X      print2("Phew! That was close!");
X    else {
X      Player.pow -= (15+random_range(15));
X      if (Player.pow > 0) {
X	print2("That's odd, the flame seems to have cooled down now....");
X	print3("A flicker of fire seems to dance above the void nearby.");
X	Level->site[Player.x][Player.y].locchar = FLOOR;
X	Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X	stationcheck();
X      }
X      else {
X	print2("The flames seem to have leached away all your mana!");
X	p_death("The essence of Fire.");
X      }
X    }
X  }
X  else print2("You flinch away from the all-consuming fire.");
X}
X
X
X
X
Xvoid l_water_station()
X{
X  print1("The fluid seems murky and unknowably deep.");
X  print2("It bubbles and hisses threateningly.");
X  morewait();
X  if (Player.status[BREATHING]) {
X    print1("You don't feel sanguine about trying to breathe that stuff!");
X    morewait();
X  }
X  if (Player.immunity[ACID]) {
X    print2("The vapor burns despite your immunity to acid!");
X    morewait();
X  }
X  print1("Enter the fluid? [yn] ");
X  if (ynq1()=='y') {
X    if (Player.hp == 1) p_death("drowning in acid (ick, what a way to go)");
X    else Player.hp = 1;
X    dataprint();
X    print2("You choke....");
X    morewait();
X    nprint2("Your lungs burn....");
X    morewait();
X    print2("Your body begins to disintegrate.... Leave the pool? [yn] ");
X    if (ynq2()=='y')
X      print2("Phew! That was close!");
X    else {
X      clearmsg();
X      Player.con -= (15+random_range(15));
X      if (Player.con > 0) {
X	print1("That's odd, the fluid seems to have been neutralized....");
X	print2("A moist miasma wafts above the void nearby.");
X	Level->site[Player.x][Player.y].locchar = FLOOR;
X	Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X	stationcheck();
X      }
X      else {
X	print2("The bubbling fluid has destroyed your constitution!");
X	p_death("The essence of Water.");
X      }
X    }
X    
X  }
X  else print2("You step back from the pool of acid.");
X}
X
X
X
X
Xvoid l_air_station()
X{
X  print1("The whirlwind spins wildly and crackles with lightning.");
X  if (Player.immunity[ELECTRICITY])
X    print2("You feel static cling despite your immunity to electricity!");
X  morewait();
X  print1("Enter the storm? [yn] ");
X  if (ynq1()=='y') {
X    if (Player.hp == 1) p_death("being torn apart and then electrocuted");
X    else Player.hp = 1;
X    dataprint();
X    print1("You are buffeted and burnt by the storm....");
X    print2("You begin to lose consciousness.... Leave the storm? [yn] ");
X    if (ynq1()=='y')
X      print2("Phew! That was close!");
X    else {
X      Player.iq -= (random_range(15)+15);
X      if (Player.iq > 0) {
X	print1("That's odd, the storm subsides....");
X	print2("A gust of wind brushes past the void nearby.");
X	Level->site[Player.x][Player.y].locchar = FLOOR;
X	Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X	stationcheck();
X      }
X      else {
X	print2("The swirling storm has destroyed your intelligence!");
X	p_death("The essence of Air");
X      }
X    }
X  }
X  else print2("You step back from the ominous whirlwind.");
X}
X
X
X
X
Xvoid l_earth_station()
X{
X  pob o;
X  print1("The tendrilled mass reaches out for you from the muddy ooze.");
X  if (find_item(&o,THINGID+6,-1))
X    print2("A splash of salt water does nothing to dissuade the vines.");
X  morewait();
X  print1("Enter the overgrown mire? [yn] ");
X  if (ynq1()=='y') {
X    if (Player.hp == 1) p_death("being eaten alive");
X    else Player.hp = 1;
X    dataprint();
X    print1("You are being dragged into the muck. Suckers bite you....");
X    print2("You're about to be entangled.... Leave the mud? [yn] ");
X    if (ynq2()=='y')
X      print2("Phew! That was close!");
X    else {
X      Player.str -= (15+random_range(15));
X      if (Player.str > 0) {
X	print1("That's odd, the vine withdraws....");
X	print2("A spatter of dirt sprays into the void nearby.");
X	Level->site[Player.x][Player.y].locchar = FLOOR;
X	Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X	stationcheck();
X      }
X      else {
X	print2("The tendril has destroyed your strength!");
X	p_death("The essence of Earth");
X      }
X    }
X  }
X  else print2("You step back from the ominous vegetation.");
X}
X
Xvoid stationcheck() 
X{
X  int stationsleft=FALSE;
X  int i,j;
X  morewait();
X  clearmsg();
X  print1("You feel regenerated.");
X  Player.hp = Player.maxhp;
X  dataprint();
X  for(i=0;i<WIDTH;i++)
X    for(j=0;j<LENGTH;j++)
X      if ((Level->site[i][j].locchar == '~') ||
X	  (Level->site[i][j].locchar == '"') ||
X	  (Level->site[i][j].locchar == '6') ||
X	  (Level->site[i][j].locchar == ';'))
X	stationsleft=TRUE;
X  if (! stationsleft) {
X    print1("There is a noise like a wild horse's neigh.");
X    print2("You spin around, and don't see anyone around at all");
X    print3("except for a spurred black cloaked figure carrying a scythe.");
X    morewait();clearmsg();
X    print1("Death coughs apologetically. He seems a little embarrassed.");
X    print2("A voice peals out:");
X    print3("'An Adept must be able to conquer Death himself....");
X    make_site_monster(32,4,ML10+0);
X  }
X}
X
X
X/* To survive the void, the other four stations must be visited first,
X   to activate the void, then something (Death's scythe, possibly) 
X   must be thrown in to satiate the void, then all other items must
X   be dropped, then the void must be entered. */
X
Xvoid l_void_station()
X{
X  int i,something=FALSE;
X  print1("You are at the brink of an endless void. Enter it? [yn] ");
X  if (ynq()=='y') {
X    if (Level->mlist == NULL) {
X      print2("You fall forever. Eventually you die of starvation.");
X      while(Player.hp>0) {
X	Time+=60;
X	hourly_check();
X      }
X    }
X    else {
X      print1("You enter the void.");
X      print2("You feel a sudden surge of power from five directions.");
X      morewait();
X      something = (Player.packptr > 0);
X      if (! something)
X	for(i=0;((i<MAXITEMS)&&(!something));i++)
X	  if (Player.possessions[i] != NULL)
X	    something = TRUE;
X      if (something) {
X	print1("The flow of power is disrupted by something!");
X	print2("The power is unbalanced! You lose control!");
X	morewait();
X	print1("Each of your cells explodes with a little scream of pain.");
X	print2("Your disrupted essence merges with the megaflow.");
X	p_death("The Power of the Void");
X      }
X      else if (! gamestatusp(PREPARED_VOID)){
X	print1("The hungry void swallows you whole!");
X	print2("Your being dissipates with a pathetic little sigh....");
X	p_death("The Emptyness of the Void");
X      }
X      else {
X	print1("The flow of power rages through your body,");
X	print2("but you manage to master the surge!");
X	print3("You feel adept....");
X	morewait();clearmsg();
X	print1("With a thought, you soar up through the void to the");
X	print2("place from whence you came.");
X	print3("As the platform of the Challenge dwindles beneath you");
X	morewait();
X	clearmsg();
X	print1("You see Death raise his scythe to you in a salute.");
X	Player.rank[ADEPT] = 1;
X	setgamestatus(COMPLETED_CHALLENGE);
X	FixedPoints = calc_points();
X	/* set so change_environment puts player in correct temple! */
X	Player.x = 49;
X	Player.y = 59;
X	print2("You find yourself back in the Temple of Destiny.");
X	change_environment(E_TEMPLE);
X      }
X    }
X  }
X  else print2("You back away from the edge....");
X}
X
X
Xvoid l_voice1()
X{
X  print1("A mysterious voice says: The Hunger of the Void must be satiated.");
X  Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X}
X
Xvoid l_voice2()
X{
X  print1("A strange voice recites: Enter the Void as you entered the World.");
X  Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X}
X
Xvoid l_voice3()
X{
X  print1("An eerie voice resounds: The Void is the fifth Elemental Station.");
X  Level->site[Player.x][Player.y].p_locf = L_NO_OP;
X}
X
X
Xvoid l_whirlwind()
X{
X  print1("Buffeting winds swirl you up!");
X  p_damage(random_range(difficulty()*10),NORMAL_DAMAGE,"a magic whirlwind");
X  if (random_range(2)) {
X    print2("You are jolted by lightning!");
X    p_damage(random_range(difficulty()*10),ELECTRICITY,"a magic whirlwind");
X  }
X  morewait();
X  if (random_range(2)) {
X    print1("The whirlwind carries you off....");
X    if (random_range(20)==17)
X      print2("'I don't think we're in Kansas anymore, toto.'");
X    p_teleport(0);
X  }
X}
X
X
Xvoid l_enter_circle()
X{
X  print1("You see a translucent stairway before you, leading down.");
X  print2("Take it? [yn] ");
X  if (ynq()=='y')
X    change_environment(E_CIRCLE);
X}
X
Xvoid l_circle_library()
X{
X  print1("You see before you the arcane library of the Circle of Sorcerors.");
X}
X
Xvoid l_tome1()
X{
X  menuclear();
X  menuprint("\nYou discover in a dusty tome some interesting information....");
X  menuprint("\nThe Star Gem holds a vast amount of mana, usable");
X  menuprint("\nfor either Law or Chaos. It is magically linked to Star Peak");
X  menuprint("\nand can either be activated or destroyed there. If destroyed,");
X  menuprint("\nits power will be used for Chaos, if activated, for Law.");
X  menuprint("\n\nIt is said the LawBringer has waited for an eternity");
X  menuprint("\nat Star Peak for someone to bring him the gem.");
X  menuprint("\nIt is also rumored that while anyone might destroy the gem,");
X  menuprint("\nreleasing chaotic energy, only the LawBringer can release");
X  menuprint("\nthe lawful potential of the gem.");
X  morewait();
X  xredraw();
X}
X
X
Xvoid l_tome2()
X{
X  menuclear();
X  menuprint("\nYou discover in some ancient notes that the Star Gem can be");
X  menuprint("\nused for transportation, but also read a caution that it must");
X  menuprint("\nbe allowed to recharge a long time between uses.");
X  menuprint("\nA marginal note says 'if only it could be reset to go somewhere");
X  menuprint("\nbesides Star Peak, the gem might be useful....'");
X  morewait();
X  xredraw();
X}
X
X
Xvoid l_temple_warning()
X{
X  print1("A stern voice thunders in the air around you:");
X  print2("'No unbelievers may enter these sacred precincts;");
X  print3("those who defile this shrine will be destroyed!");
X}
X
Xvoid l_throne()
X{
X  pob o;
X  int i;
X  print1("You have come upon a huge ornately appointed throne!");
X  print2("Sit in it? [yn] ");
X  if (ynq1()=='y') {
X    if (! find_item(&o,ARTIFACTID+22,-1)) {
X      print1("The throne emits an eerie violet-black radiance.");
X      print2("You find, to your horror, that you cannot get up!");
X      print3("You feel an abstract sucking sensation...");
X      for(i=0;i<NUMSPELLS;i++) Spells[i].known = FALSE;
X      Player.pow = 3;
X      Player.mana = 0;
X      Player.hp = 1;
X      dispel(-1);
X      morewait();clearmsg();
X      print1("The radiance finally ceases. You can get up now.");
X    }
X    else {
X      if (HiMagicUse == Date) 
X	print3("You hear the sound of a magic kazoo played by an asthmatic.");
X      else {
X	HiMagicUse = Date;
X	print1("Following some strange impulse, you raise the Sceptre....");
X	print2("You hear a magical fanfare, repeated three times.");
X	switch(HiMagic++) {
X	case 0: 
X	  print3("Strength.");
X	  Player.str+=5;
X	  Player.maxstr+=5;
X	  break;
X	case 1: 
X	  print3("Constitution.");  
X	  Player.con+=5;
X	  Player.maxcon+=5;
X	  break;
X	case 2: 
X	  print3("Dexterity.");
X	  Player.dex+=5;
X	  Player.maxdex+=5;
X	  break;
X	case 3: 
X	  print3("Agility.");  
X	  Player.agi+=5;
X	  Player.maxagi+=5;
X	  break;
X	case 4: 
X	  print3("Intelligence.");
X	  Player.iq+=5;
X	  Player.maxiq+=5;
X	  break;
X	case 5: 
X	  print3("Power.");  
X	  Player.pow+=5;
X	  Player.maxpow+=5;
X	  break;
X	default:
X	  if (Spells[S_WISH].known) {
X	    print1("A mysterious voice mutters peevishly....");
X	    print2("So what do you want now? A medal?");
X	  }
X	  else {
X	    print1("Mystic runes appear in the air before you:");
X	    print2("They appear to describe some high powered spell.");
X	    morewait();
X	    print1("You hear a distant voice....");
X	    print2("'You may now tread the path of High Magic.'");
X	    Spells[S_WISH].known = TRUE;
X	  }
X	  break;
X	case 17:
X	  print1("Weird flickering lights play over the throne.");
X	  print2("You hear a strange droning sound, as of a magical");
X	  morewait();
X	  print1("artifact stressed by excessive use....");
X	  print2("With an odd tinkling sound the throne shatters!");
X	  Level->site[Player.x][Player.y].locchar = RUBBLE;
X	  Level->site[Player.x][Player.y].p_locf = L_RUBBLE;
X	  if (find_and_remove_item(ARTIFACTID+22,-1)) {
X	    morewait();
X	    print1("Your sceptre reverberates with the noise, and");
X	    print2("it too explodes in a spray of shards.");
X	  }
X	  break;
X	}
X	calc_melee();
X	dataprint();
X      }
X    }
X  }
X}
X
X
Xvoid l_escalator()
X{
X  print1("You have found an extremely long stairway going straight up.");
X  print2("The stairs are grilled steel and the bannister is rubber.");
X  morewait();
X  print1("Take the stairway? [yn] ");
X  if (ynq1()=='y') {
X    print1("The stairs suddenly start moving with a grind of gears!");
X    print2("You are wafted to the surface....");
X    change_environment(E_COUNTRYSIDE);
X  }
X}
X
Xvoid l_enter_court()
X{
X  print1("You have found a magical portal! Enter it? [yn] ");
X  if (ynq1()=='y') {
X    if (! gamestatusp(COMPLETED_CASTLE)) {
X      if (! gamestatusp(ATTACKED_ORACLE))
X	print2("A dulcet voice says: 'Jolly good show!'");
X      setgamestatus(COMPLETED_CASTLE);
X    }
X    change_environment(E_COURT);
X  }
X}
X
Xvoid l_chaostone()
X{
X  print1("This is a menhir carved of black marble with veins of gold.");
X  print2("It emanates an aura of raw chaos, which is not terribly");
X  morewait();
X  print1("surprising, considering its location.");
X  if (Player.alignment < 0) 
X    print2("You feel an almost unbearable attraction to the stone.");
X  else print2("You find it extremely difficult to approach the stone.");
X  morewait();
X  clearmsg();
X  print1("Touch it? [yn] ");
X  if (ynq1()=='y') {
X    print1("A sudden flux of energy surrounds you!");
X    morewait();
X    if (stonecheck(-1)) {
X      print2("You feel stronger!");
X      Player.maxstr = min(Player.maxstr+10,max(30,Player.maxstr));
X      dataprint();
X    }
X  }
X  else print1("You step back from the ominous dolmech.");
X}
X
X
Xvoid l_balancestone()
X{
X  print1("This is a massive granite slab teetering dangerously on a corner.");
X  print2("You feel a sense of balance as you regard it.");
X  morewait();
X  clearmsg();
X  print1("Touch it? [yn] ");
X  if (ynq1()=='y') {
X    print1("A vortex of mana spins about you!");
X    if (abs(Player.alignment) > random_range(50)) {
X      print2("The cyclone whirls you off to a strange place!");
X      change_environment(E_COUNTRYSIDE);
X      do {
X	Player.x = random_range(WIDTH);
X	Player.y = random_range(LENGTH);
X      } while (Country[Player.x][Player.y].current_terrain_type == CHAOS_SEA);
X      screencheck(Player.y);
X      drawvision(Player.x,Player.y);
X    }
X    else {
X      print2("You are being drained of experience! Step back? [yn] ");
X      if (ynq2()=='y') {
X	clearmsg();
X	print1("The vortex calms down, dimishes, and then disappears.");
X      }
X      else {
X	Player.xp -= Player.xp/4;
X	dataprint();
X	print2("The vortex vanishes. Suddenly, there is a clap of thunder!");
X	morewait();
X	Player.alignment = 0;
X	strategic_teleport(1);
X      }
X    }
X  }
X  else print1("You step back from the unlikely boulder.");
X}
X
X
Xvoid l_lawstone()
X{
X  print1("This is a stele carved of blueish-green feldspar.");
X  print2("You feel an aura of serenity rising from it, and your gaze");
X  morewait();
X  print1("is attracted to the bulk of Star Peak to the North-East.");
X  if (Player.alignment > 0) 
X    print2("You feel a subtle attraction to the stone.");
X  else print2("You find the stone extremely distasteful to contemplate.");
X  morewait();
X  clearmsg();
X  print1("Touch it? [yn] ");
X  if (ynq()=='y') {
X    print1("A matrix of power flows about you!");
X    morewait();
X    if (stonecheck(1)) {
X      print2("You feel more vigorous!");
X      Player.maxcon = min(Player.maxcon+10,max(Player.maxcon,30));
X      dataprint();
X    }
X  }
X  else print1("You step back from the strange obelisk.");
X}
X
X
Xvoid l_voidstone()
X{
X  int i;
X  print1("This is a grey and uninteresting stone.");
X  print2("A feeling of nihility emanates from it.");
X  morewait();
X  clearmsg();
X  print1("Touch it? [yn] ");
X  if (ynq()=='y') {
X    print1("You feel negated.");
X    morewait();
X    Player.mana = 0;
X    for(i=0;i<NUMSTATI;i++)
X      Player.status[i] = 0;
X    toggle_item_use(TRUE);
X    for(i=0;i<MAXITEMS;i++) 
X      if (Player.possessions[i] != NULL) {
X	Player.possessions[i]->blessing = 0;
X	Player.possessions[i]->plus = 0;
X	Player.possessions[i]->usef = I_NOTHING;
X      }
X    toggle_item_use(FALSE);
X    calc_melee();
X  }
X  else print1("You back away from the strange rock.");
X}
X
Xvoid l_sacrificestone()
X{
X  int sacrifice=1;
X  int oldmaxhp = Player.maxhp;
X  print1("You have come on a weathered basaltic block.");
X  print2("On the top surface is an indentation in human shape.");
X  morewait();
X  print1("You see old rust colored stains in the grain of the stone.");
X  print2("You sense something awakening. Touch the block? [yn] ");
X  if (ynq2() == 'y') {
X    print1("You sense great pain emanating from the ancient altar.");
X    print2("Climb on to the block? [yn] ");
X    if (ynq2() == 'y') {
X      print1("You are stuck fast to the block!");
X      print2("You feel your life-force being sucked away!");
X      morewait();
X      print1("Hit ESCAPE to try and get up at any moment, SPACE to remain.");
X      do {
X	switch(random_range(4)) {
X	  case 0: print2("You feel weaker."); break;
X	  case 1: print2("You feel your life fading."); break;
X	  case 2: print2("Your energy is vanishing."); break;
X	  case 3: print2("You are being drained."); break;
X	  }
X	Player.hp -= sacrifice;
X	Player.maxhp -= sacrifice/2;
X	sacrifice *= 2;
X	dataprint();
X	if ((Player.hp < 1) || (Player.maxhp < 1))
X	  p_death("self-sacrifice");
X      } while (stillonblock());
X      print1("You manage to wrench yourself off the ancient altar!");
X      print2("You leave some skin behind, though....");
X      morewait();
X      if ((Player.maxhp > 10) && (Player.maxhp < 3 * oldmaxhp/4)) {
X	print1("A strange red glow arises from the altar.");
X	print2("The glow surrounds you.... You sense gratitude.");
X	Player.pow += sacrifice;
X	Player.maxpow += sacrifice/10;
X	dataprint();
X      }
X      else {
X	print1("You a have a sense of rejection.");
X	print2("A roil of fetid vapor smokes up from the altar.");
X	gain_experience(sacrifice);
X      }
X    }
X    else {
X      print1("You sense an emotion of pique all around you.");
X      print2("You retreat from the strange stone.");
X    }
X  }
X  else {
X    print1("You decide discretion to be the better part of valour.");
X    print2("The stone seems to subside sleepily.");
X  }
X}
X
Xvoid l_mindstone()
X{
X  print1("You approach a giant crystal of some opaline material.");
X  print2("Flashes of irridescent light glint from the object.");
X  morewait();
X  print1("You feel your attention being drawn by the intricate crystal.");
X  print2("Look away from the interesting phenomenon? [yn] ");
X  if (ynq2()=='n') {
X    print1("Your gaze focuses deeply on the gem....");
X    print2("The crystal seems to open up and surround you!");
X    morewait();
X    if (stonecheck(0)) {
X      print1("Your mind has been enhanced by the experience!");
X      Player.maxiq = min(Player.maxiq+10,max(Player.maxiq,30));
X      dataprint();
X    }
X  }
X  else {
X    print1("You manage to wrench your gaze from the odd jewel.");
X    print2("The light flashes from the crystal diminish in frequency.");
X  }
X}
END_OF_FILE
if test 30907 -ne `wc -c <'omove.c'`; then
    echo shar: \"'omove.c'\" unpacked with wrong size!
fi
# end of 'omove.c'
fi
if test -f 'othanks.txt' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'othanks.txt'\"
else
echo shar: Extracting \"'othanks.txt'\" \(364 characters\)
sed "s/^X//" >'othanks.txt' <<'END_OF_FILE'
XThanks to:
X
XBen, Greg, Hammy, Izchak, Nathan, and Silver, for bug reports,
Xplaytesting, suggestions, debugging, and general advice.
X
XThanks to the army of players and debuggers of versions 0.6
Xand 0.7; I predict a lot more work for you now....
X
XMore thanks to Nathan Glasser for the PC port, bugfixes, etc., without
Xwhose enthusiasm there would be no version 0.75
END_OF_FILE
if test 364 -ne `wc -c <'othanks.txt'`; then
    echo shar: \"'othanks.txt'\" unpacked with wrong size!
fi
# end of 'othanks.txt'
fi
echo shar: End of archive 4 \(of 20\).
cp /dev/null ark4isdone
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