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