Importing Apogee Software's GPL release of Supernova into version control
authorJason Self <j@jxself.org>
Sun, 16 Nov 2014 18:21:08 +0000 (10:21 -0800)
committerJason Self <j@jxself.org>
Sun, 16 Nov 2014 18:21:08 +0000 (10:21 -0800)
19 files changed:
INSTRUCT.TXT [new file with mode: 0644]
gpl-2.0.txt [new file with mode: 0644]
src/ADPAR.PAS [new file with mode: 0644]
src/B1 [new file with mode: 0644]
src/C1 [new file with mode: 0644]
src/CLUERITE.PAS [new file with mode: 0644]
src/CREATE.PAS [new file with mode: 0644]
src/DEFAULT.PAS [new file with mode: 0644]
src/INSTALL.PAS [new file with mode: 0644]
src/L1 [new file with mode: 0644]
src/LINERITE.PAS [new file with mode: 0644]
src/NOVA.PAS [new file with mode: 0644]
src/R1 [new file with mode: 0644]
src/R2 [new file with mode: 0644]
src/ROOMRITE.PAS [new file with mode: 0644]
src/S1 [new file with mode: 0644]
src/SM [new file with mode: 0644]
src/SPECIAL.PAS [new file with mode: 0644]
src/VOCAB.PAS [new file with mode: 0644]

diff --git a/INSTRUCT.TXT b/INSTRUCT.TXT
new file mode 100644 (file)
index 0000000..a63f6ff
--- /dev/null
@@ -0,0 +1,119 @@
+\r
+                       SUPERNOVA INSTRUCTIONS\r
+                       ----------------------\r
+\r
+Supernova is an adventure set in the future.  You begin on a remote\r
+mining planet, with little to look forward to except another back-\r
+breaking day in the mines.\r
+\r
+To play Supernova, type sentences such as: OPEN THE HATCH THEN ENTER\r
+THE SHIP, or SHOOT THE CREATURE WITH THE RAY GUN THEN GET EVERYTHING.\r
+Supernova recognizes over 1000 words.\r
+\r
+Read each room description carefully, examine anything that looks\r
+important, and try to explore all possible passages and rooms.  Draw\r
+a map on a piece of paper as you move through Supernova's "world."\r
+\r
+1998 Update Notes:\r
+\r
+1) This game is no longer registerable.  It has been released (in\r
+   March of 1998) as freeware.\r
+\r
+2) In Game screens still talk about registering, because we have no\r
+   way of recompiling the game to remove them.\r
+\r
+3) Older releases of this game stated that you can receive the source\r
+   code for $100.  This offer is no longer valid.\r
+\r
+4) Supernova is (c) 1986/1998 Apogee Software, Ltd.\r
+\r
+\r
+COMMANDS\r
+------------------------------------------------------------------------\r
+\r
+CLUE - gives a hint associated with your current location.\r
+COMMANDS or VERBS - shows a two screen list of possible commands.\r
+FIND [object] - tells if an object is within sight.\r
+INVENTORY, INV or I - displays your current list of possessions.\r
+LOOK or L - examines your current location.\r
+REPEAT or R - repeats last sentence or command.\r
+RESTART - ends current game and starts a new one.\r
+RESTORE - resumes a previously SAVED game and lets you continue playing.\r
+SAVE - lets you save you present game to be RESTORED for later playing.\r
+ROOM DESCRIPTION or RD - toggles game between full room descriptions\r
+    each time you enter a new location, or brief descriptions.\r
+SCORE - gives your current score and rank.\r
+QUIT or Q - lets you quit your current game.  (Note: you usually will\r
+    SAVE the game first.)\r
+WAIT or Z - lets one unit of time to pass without any action.\r
+\r
+\r
+COMMON VERBS\r
+------------------------------------------------------------------------\r
+\r
+EXAMINE or EX [object] - lets you study a specific object.\r
+GET [object] - adds object to your inventory.\r
+DROP [object] - removes an object from you inventory.\r
+    also GET ALL, GET ALL BUT [object], GET [object], [object] AND [object]\r
+Directions: NORTH, EAST, SOUTHWEST, or N, E, SW, etc.\r
+EAT [object] and DRINK [object] - used to consume foods and drinks.\r
+PUSH [object], PULL [object], MOVE [object], and TURN [object]\r
+LOOK (AT, INSIDE, BEHIND, UNDER, ON TOP OF) [object]\r
+WEAR [object] and REMOVE [object] - used for clothing.\r
+THROW [object] (AT, TO, ACROSS, IN DIRECTION OF) [object]\r
+PUT [object] (WITHIN, UNDER, ON TOP OF, BESIDE, BEHIND, etc.) [object]\r
+GIVE or SHOW [object] to [object or creature]\r
+OPEN or UNLOCK [object] with [object]\r
+TURN [dial] TO [position] - e.g. TURN RED DIAL TO 56.\r
+TYPE [something] - used to enter data on keyboards, etc.\r
+HIT [object] WITH [object]\r
+BUY [object] WITH [object] or BUY [object] FROM [person]\r
+[character name], [what you want to say to character] - use this format\r
+    when you want to say something to someone else in the game.\r
+    i.e.  ALIENS, CAN YOU TELL ME ABOUT THE CRYSTAL.\r
+\r
+\r
+ADVERBS\r
+------------------------------------------------------------------------\r
+\r
+QUICKLY\r
+SLOWLY\r
+CAREFULLY\r
+CLOSELY\r
+\r
+\r
+ENTERING COMMANDS, PHRASES, FULL SENTENCES\r
+------------------------------------------------------------------------\r
+\r
+All commands, etc. are entered at the blinking ">>".\r
+\r
+A simple phrase might be DRINK, WALK EAST or EX CONTROLS.  Every phrase\r
+may contain only one verb.\r
+\r
+Multiple verb phrases and commands may be combined on a single input line\r
+by separating with a period or the word THEN.  For example, EAST. NORTH.\r
+OPEN HATCH THEN CLIMB DOWN LADDER.  The word IT refers to the last noun.\r
+\r
+The game only understands the first seven letters of any word used.\r
+\r
+\r
+SAVE AND RESTORE COMMANDS\r
+------------------------------------------------------------------------\r
+\r
+SAVE and RESTORE are necessary because completing a game may require many\r
+hours of play.\r
+\r
+Before you finish a game session, type SAVE.  The game will clear the\r
+screen and respond: "Which disk drive?" (default is A)  If you have a\r
+two-drive system, insert a formatted disk in drive B and type B [enter].\r
+With a single-drive system, remove the game disk and insert a formatted\r
+disk, press [enter].  The game will respond: "SAVE under what file name?"\r
+(Note: '/' aborts the SAVE.)  Type in a file name that the game can use to\r
+save you current game location and status.  It is best to use a name that\r
+refers to your current room, i.e. KITCHEN.  Also at this point you can\r
+type DIR or FILES to get a current list of save names already in use on\r
+that disk.\r
+\r
+RESTORE your file in the same way, but with the RESTORE command\r
+\r
+========================================================================\r
diff --git a/gpl-2.0.txt b/gpl-2.0.txt
new file mode 100644 (file)
index 0000000..d159169
--- /dev/null
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/src/ADPAR.PAS b/src/ADPAR.PAS
new file mode 100644 (file)
index 0000000..76c7c3a
--- /dev/null
@@ -0,0 +1,1584 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+(*****************************************************************************)\r
+(*                                  ADPAR                                    *)\r
+(*    >> Contains the Parser, Initialization, Time and Misc. Routines <<     *)\r
+(*                         Programmer: Scott Miller                          *)\r
+(*                       << Began February 2, 1985 >>                        *)\r
+(*                       Copyright 1985 Scott Miller                         *)\r
+(*****************************************************************************)\r
+\r
+procedure RL(Pointer:integer);forward;\r
+procedure RS(Pointer:integer);forward;\r
+procedure RR(Pointer:integer);forward;\r
+procedure RB(Pointer,Colour:byte);forward;\r
+procedure RB2(Pointer,Colour:byte);forward;\r
+procedure MC(WhichChar,WatchRoom,ToRoom:byte;MessageNum:Integer);forward;\r
+procedure Move(New:byte);forward;\r
+procedure DEAD;forward;\r
+procedure Call13;forward;\r
+procedure Van(o:byte);forward;\r
+function  FN(VNP:byte):Str29;forward;\r
+function  Here(Obj:byte):Boolean;forward;\r
+function  Up(Word:Str130):Str1;forward;\r
+\r
+procedure SF; begin SFlag:=True end;\r
+\r
+procedure Cur(Num:byte);\r
+ begin\r
+  with Result do\r
+   if Color then\r
+    begin AX:=$100;\r
+     case Num of\r
+      1:CX:=$707; { Underline   }\r
+      2:CX:=$8;   { Solid block }\r
+      3:CX:=$800; { Invisible   }\r
+     end;\r
+     intr($10,Result);\r
+    end;\r
+ end;\r
+\r
+procedure Col(Num1,Num2:byte);\r
+ begin if Color then textcolor(Num1) else textcolor(Num2) end;\r
+\r
+procedure Bak(Num1,Num2:byte);\r
+ begin if Color then textbackground(Num1) else textbackground(Num2) end;\r
+\r
+procedure Bor(Num1,Num2:byte);\r
+ begin\r
+  with Result do\r
+   begin AX:=$B00;if Color then BX:=Num1 else BX:=Num2 end;intr($10,Result)\r
+ end;\r
+\r
+function  En(Num:byte):boolean;\r
+ begin if Num in Events then En:=true else En:=false end;\r
+\r
+procedure Add(Num:byte);\r
+ begin Events:=Events+[Num] end;\r
+\r
+procedure Min(Num:byte);\r
+ begin Events:=Events-[Num] end;\r
+\r
+procedure Score(Num,pointer:integer);\r
+ begin if not en(pointer)then begin Sc:=Sc+Num;Add(Pointer)end end;\r
+\r
+procedure Cn(s:str78);\r
+ begin gotoxy(40-(length(s)div 2),wherey);writeln(s)end;\r
+\r
+procedure Pause;\r
+ begin col(15,15);write('Press any key to continue...');\r
+  read(kbd,CFlag);col(11,7);writeln;\r
+ end;\r
+\r
+procedure Tune(Octave,Note,Duration:integer);\r
+  var Frequency:real;\r
+      i:integer;\r
+ begin\r
+  Frequency:=32.625;\r
+  for i:=1 to Octave do\r
+   Frequency:=Frequency*2;\r
+  for i:=1 to Note-1 do\r
+   Frequency:=Frequency*1.059463094;\r
+  if Duration <> 0 then\r
+   begin\r
+    sound(round(Frequency));\r
+    delay(Duration);\r
+    nosound\r
+   end\r
+  else sound(round(Frequency));\r
+ end;\r
+\r
+procedure Play(Start,Stop,Speed:integer);\r
+  var x:integer;\r
+ begin\r
+  if Start<=Stop then\r
+   for x:=Start to Stop do begin sound(x);delay(Speed)end\r
+  else\r
+   for x:= Start downto Stop do begin sound(x);delay(Speed)end;\r
+  nosound;if Region=4 then sound(20);if Region=5 then sound(60);\r
+ end;\r
+\r
+procedure Explode(Duration:byte);\r
+  var x:integer;\r
+ begin for x:=Duration*999 downto 20 do sound(random(x));nosound end;\r
+\r
+procedure Walls(Duration:byte);\r
+  var x:integer;\r
+ begin for x:=1 to Duration*999 do sound(random(35)+20);nosound end;\r
+\r
+procedure Static;\r
+  var x,y:integer;\r
+ begin\r
+  for x:=1 to 50 do\r
+   case random(2) of\r
+    0:for y:=1 to random(70)+10 do sound(random(4000)+3000);\r
+    1:begin nosound;delay(random(29))end\r
+   end;nosound;if Region=5 then sound(60)\r
+ end;\r
+\r
+procedure Blast;\r
+  var x:byte;\r
+ begin\r
+  for x:=1 to 40 do\r
+   begin play(550-x*6,600+x*6,0);play(600+x*6,550-x*6,0)end;explode(2)\r
+ end;\r
+\r
+procedure Dopen(Num:byte);\r
+ begin writeln('The door slides open...');\r
+  if Num<>0 then play(50,125-Num,Num)\r
+  else begin for i:=3500 to 5000 do sound(random(4500)+i);nosound;end;\r
+  if Region=5 then sound(60)\r
+ end;\r
+\r
+procedure Dclose(Num:byte);\r
+ begin writeln('The sliding door closes.');\r
+  if Num<>0 then play(125-Num,50,Num)\r
+  else begin for i:=5000 downto 3500 do sound(random(4500)+i);nosound;end;\r
+  if Region=5 then sound(60)\r
+ end;\r
+\r
+procedure Door(New,Num:byte);\r
+ begin\r
+  if en(7)then RL(22)else\r
+  if en(8)then RL(23)else begin DOpen(Num);Move(New);DClose(Num)end\r
+ end;\r
+\r
+procedure Time1;\r
+ begin Tic:=Tic+1; Min(128); { <--Negates DEAD } col(13,15);\r
+  for x:=1 to TMax do T[x]:=T[x]-1;\r
+  if T[2]=1 then begin PStat:=PStat-[5];RL(1)end;\r
+  case T[3] of { Hunger }\r
+   25:begin PStat:=PStat+[2];RL(2)end;\r
+   12:RL(3);\r
+   4:begin Bor(4,7);RL(4)end;\r
+   1:begin RL(124);DEAD;end\r
+  end;\r
+  case T[4] of { Thirst }\r
+   22:begin PStat:=PStat+[6];RL(5)end;\r
+   11:RL(6);\r
+   4:begin Bor(4,7);RL(7)end;\r
+   1:begin RL(125);DEAD;end\r
+  end;\r
+  case T[5] of { Sleep }\r
+   32:begin PStat:=PStat+[5];RL(8)end;\r
+   14:RL(9);\r
+   5:begin Bor(4,7);RL(10)end;\r
+   1:begin RL(126);DEAD;end;\r
+   2..13:begin x:=random(29)+1;\r
+          if(x in Inv)and not(x in Wear)then\r
+           begin Van(x);R[x]:=Prm;\r
+            writeln('A bout of weariness causes you to loose your grip on',\r
+                    ' the ',FN(x),'!')\r
+           end\r
+         end\r
+  end;\r
+  case T[29] of { Laser Injury }\r
+   9:RS(214);\r
+   4:begin RL(507);Bor(4,7)end;\r
+   2..11:begin repeat x:=random(27)+1 until x in[1..12,16..20,22..26,28];\r
+     if(x in Inv)and not(x in Wear)then\r
+      begin Van(x);R[x]:=Prm;\r
+       if random(2)=0 then\r
+        writeln('A sudden stab of pain shoots up your side, you drop the ',\r
+                 FN(x),'.') else begin\r
+        writeln('The ',FN(x),' falls from your grip as you almost collapse ',\r
+                'from the');writeln('extreme pain.')end\r
+      end\r
+     end;\r
+   1:begin RS(215);DEAD;end\r
+  end;\r
+  case T[12] of  { Sickness }\r
+   120,99,83,55:RL(207);\r
+   65:begin PStat:=PStat+[3];RL(208)end;\r
+   47:RL(209); 30:RS(73); 15:RS(74); 4:begin Bor(4,7);RS(75)end;\r
+   1:begin RS(76);DEAD end;\r
+   2..29:if(random(25)=0)and(Inv<>[])and not(en(125))then\r
+          begin RS(232);\r
+           for x:=1 to 29 do if(x in Inv)and not(x in Wear)then\r
+            begin Van(x);R[x]:=Prm end\r
+          end\r
+  end;\r
+  Col(10,7);\r
+  if(Prm in[81..88])and(T[30]<1)and(random(4)=0)then\r
+   if 28 in Wear then\r
+    begin T[30]:=9;RS(153+Prm);\r
+     for i:=999 to 2300 do sound(random(i*3)+i);\r
+     for i:=3000 downto 20 do sound(random(i*4)+i*2);nosound\r
+    end\r
+   else\r
+    begin\r
+     write('A small droid appears from the ');\r
+     case Prm of\r
+      81:write('south'); 82:write('southwest'); 83:write('west');\r
+      84:write('northwest'); 85:write('north'); 86:write('northeast');\r
+      87:write('east'); 88:write('southeast')\r
+     end; writeln(' section of the corridor and flies');\r
+     RS(242);RS(243);for i:=20 to 3000 do sound(random(i*3)+i);nosound;\r
+     delay(1500);DEAD\r
+    end;\r
+ end; { Time1 }\r
+\r
+overlay procedure Time2A;\r
+ begin col(10,7);  { Pre-Jungle Planet }\r
+  case T[1] of\r
+   19:MC(1,13,13,0);\r
+   18:begin MC(1,8,8,1);MC(1,13,8,2)end;\r
+   17:if en(19) then begin RS(9);T[1]:=11;end;\r
+   11..17:if not(en(19))and(Prm=8)and(random(2)=1)then RL(0);\r
+   10:MC(1,8,9,3);\r
+   9:begin MC(1,9,0,4);T[1]:=Null;end;\r
+   5..7:if(en(2))and(en(3))then begin RB2(5-(T[1]-3),10);col(10,7)end;\r
+   4:if Prm=8 then begin T[1]:=11;RS(5)end;\r
+  end;\r
+  if(T[7]=1)then begin RS(35);DEAD;end;\r
+  if(T[6]=2)and(en(7))then RL(140);\r
+  if(T[6]=1)and(en(7))then begin RS(20);DEAD;end;\r
+  case T[8] of { Lift-off countdown }\r
+   5:RL(181); 4:RL(182); 3:RL(191); 2:RL(192);\r
+   1:if en(10)then\r
+      begin Min(10);Min(26);Min(27);Explode(32);\r
+       sound(20);Bor(0,0);Score(10,122);\r
+       n[84]:='reactor regulat\';\r
+       RB(7,10);delay(9999);Pause;col(10,7);RS(43);PStat:=PStat-[2,5,6];\r
+       Region:=4;T[3]:=150;T[4]:=125;T[5]:=230;T[8]:=0;T[9]:=1;T[10]:=5;end\r
+     else begin RS(44);Explode(32);DEAD;end;\r
+  end;\r
+  if T[9]<1 then T[9]:=15;\r
+  if(Region=4)and(Prm=1)and(T[9]=12)then RS(62);\r
+  if T[10] in[1..4]then RL(194);\r
+  if(Tic>3)and(Prm=8)and not(en(9))and not(en(7))then\r
+   begin RS(6);Add(9)end else\r
+  if(Tic>5)and(Prm=8)and(en(9))and not(en(16))and not(en(7))then\r
+   begin RS(7);Add(16)end;\r
+  case Prm of\r
+    1:if(random(2)=0)and(T[9]>12)and(T[9]<15)and(Region=4)and not en(129)then\r
+       begin RL(593);RL(594);Add(129)end\r
+      else if(random(20)=0)and(Region=4)then RL(592);\r
+    7:if random(5)=0 then RL(595);\r
+    8:if random(3)=1 then RL(24)else if random(3)=1 then RL(178);\r
+   15,17,19:case random(60) of\r
+     1:RL(596);\r
+     2:RL(597);\r
+     3,4:if RC>40 then begin if T[4]>10 then T[4]:=10;RL(598)end;\r
+     end; {case}\r
+   20:if random(4)=1 then RL(25);\r
+  end; {case}\r
+  if Prm=SinkRm then begin RL(85);L[Prm]:=L[Prm]+[79];end;\r
+end; { Time2A }\r
+\r
+overlay procedure Time2B;\r
+ begin col(10,7);  { Jungle Planet }\r
+  Maze:=not(Maze);\r
+  if Prm in[42..49]then\r
+   begin writeln('Some of the walls shift positions.');Walls(4);end;\r
+  case Prm of\r
+   7:if random(5)=0 then RL(595);\r
+   26..29,32..34,59,60:case random(40) of\r
+      0,1:RL(210); 2,3:RL(211); 4:RS(77); 5,6:RS(78); 7,8:RL(212);\r
+      9:RL(213); 10:RL(214); 11:begin RL(215);play(6000,6001,20)end\r
+     end;\r
+   42..50:if random(7)=0 then RL(280);\r
+  end; {case}\r
+  if(Prm=28)and(random(2)=0)then RL(233);\r
+  if Prm=SinkRm then begin RL(85);L[Prm]:=L[Prm]+[79];end;\r
+  if T[11]=2 then RL(205);\r
+  if T[11]=1 then begin RS(70);DEAD;end;\r
+  if T[13]=1 then begin RB(11,10);for x:=1 to 3 do begin tune(4,2,200);\r
+   delay(99);tune(4,5,200);delay(99)end;Pause end;\r
+  if(T[14]=2)and(Prm in[40,41])then RL(251);\r
+  if T[14]=1 then\r
+   case Prm of 40:begin RL(249);Walls(8);end;41:begin RL(250);Walls(8);end end;\r
+  if(T[15]=1)and(Prm=39)then begin RS(94);DEAD;end;\r
+  if T[17]=4 then begin RS(109);DEAD;end;\r
+  if T[17]=1 then begin Add(36);if Prm=56 then begin RS(110);Walls(8);end end;\r
+  if T[18]=2 then begin RS(123);Walls(12)end;\r
+  if(T[18]=1)and(Prm=53)then begin RS(124);Walls(12);DEAD;end;\r
+  if T[19]=1 then begin RS(128);Walls(12);DEAD;end;\r
+ end; { Time2B }\r
+\r
+overlay procedure Time2C;\r
+ begin col(11,7);  { Inner Planet }\r
+  if T[20]=1 then\r
+   case Prm of 73:DClose(20);66:begin RL(337);play(105,50,20)end end;\r
+  col(10,7);\r
+  if(Prm=74)and not(en(47))then\r
+   writeln('There is something flashing on the computer''s screen.');\r
+  if(Prm=73)and(CodeSet<>4)then begin\r
+   writeln('There''s an alarm sound coming over the radio.');\r
+   for x:=1 to 23 do\r
+    begin\r
+     for i:=450 to 999 do sound(i);\r
+     for i:=999 downto 450 do sound(i);\r
+    end;nosound\r
+   end;\r
+  case random(50) of\r
+   1..3:if here(38)then RL(588);\r
+   4,5:begin RL(589);Explode(3)end;\r
+   6:begin RS(244);for x:=1 to 7 do Static;end\r
+   else if(Prm in[64,73])and(random(9)=0)then begin RL(590);RL(591)end\r
+  end;\r
+ end; { Time2C }\r
+\r
+overlay procedure Time2D;  { Planetship }\r
+  function Warn(Message,IfTime,Said:integer):boolean;\r
+   begin Warn:=false;\r
+    if not en(Said)and(IfTime>=T[26])then\r
+     begin if Said<>59 then begin Static;RS(Message);Static end\r
+           else if Prm>99 then begin Static;RS(Message);Static end;\r
+      if(Said=59)and(Prm<100)then begin end\r
+      else begin Warn:=True;Add(Said)end\r
+     end\r
+   end; {Warn}\r
+ begin col(11,7);\r
+ for x:=0 to 2 do if T[23+x]>2 then Score(20,118+x); { 60 total points }\r
+ if en(64)then Score(10,121);\r
+  if T[21]=1 then\r
+   case Prm of 91:DClose(20);86:begin RL(337);play(110,50,15)end end;\r
+  col(10,7);\r
+  if(Prm=95)and not(en(48))then begin\r
+   writeln('A loud siren is sounding off...');\r
+   play(300,530,6);delay(200);play(300,530,6)end;\r
+  if(Prm=91)and not en(53)then begin writeln('An alarm is ringing...');\r
+    for x:=1 to 23 do begin sound(400);delay(99);sound(940);delay(60);nosound;\r
+   end end;\r
+  if T[22]=1 then\r
+   begin write('The door slides open...');play(50,60,65);\r
+    writeln('then closes.');play(60,50,60);\r
+    if en(50)then RS(153)else\r
+    if Inv=[] then begin RS(247);RS(248)end\r
+    else begin RS(154);RS(155);Inv:=[];end;\r
+    delay(2500);write('The door slides open...');play(50,60,65);\r
+    writeln('then closes.');play(60,50,65);\r
+   end;\r
+  case T[23] of\r
+   13:begin if Prm=91 then RL(438);MC(2,91,91,161);Add(53)end;\r
+   12:MC(2,91,91,162);\r
+   11:begin if Prm in[86,91]then DOpen(15);MC(2,91,86,163);MC(2,86,86,164);\r
+       if Prm in[86,91]then DClose(15)end;\r
+   10:begin MC(2,86,87,165);MC(2,87,87,166)end;\r
+   9:begin if Prm in[87,89]then DOpen(65);MC(2,87,89,167);MC(2,89,89,168);\r
+      if Prm in[87,89]then DClose(65)end;\r
+   7,8:if Prm=89 then begin ScrnSet:=4;RL(417)end;\r
+   6:begin if Prm in[87,89]then DOpen(65);MC(2,89,87,169);MC(2,87,87,170);\r
+      if Prm in[87,89]then DClose(65)end;\r
+   5:begin MC(2,87,86,171);MC(2,86,86,172)end;\r
+   4:if T[21]<2 then begin MC(2,86,91,173);if Prm in[86,91]then DOpen(15);\r
+      if Prm=86 then RL(418);MC(2,91,91,174);if Prm in[86,91]then DClose(15)end\r
+      else if Prm=86 then begin RL(418);MC(2,0,91,0)end;\r
+   1:if Prm=91 then begin RL(419);Van(123);DClose(55)end else Van(123)\r
+  end; {T[23]}\r
+  if(T[23]>1)and(T[23]<4)and(Prm=91)then begin T[24]:=7;T[23]:=NULL;end;\r
+  case T[24] of\r
+   7:if Prm=91 then RS(175);\r
+   6:if Prm=91 then begin RS(176);RS(177)end;\r
+   5:if Prm=91 then begin RS(178);RS(179)end;\r
+   4:begin if Prm=91 then RL(420);if not(1 in Inv)then T[24]:=2;end;\r
+   2,3:if(Prm=91)and(1 in Inv)then RL(419+T[24]);\r
+   1:begin Van(123);if Prm=91 then begin RS(180);DOpen(55);RL(418);\r
+      DClose(55)end;\r
+     end;\r
+  end; {T[24]}\r
+  case T[25] of\r
+   2..5:if Prm=91 then RS(188-T[25]);\r
+   1:begin if Prm=91 then RS(187);T[24]:=2;T[26]:=40;Add(64)end;\r
+  end; {T[25]}\r
+  if en(64)then\r
+  if not Warn(198,38,54)then\r
+  if not Warn(199,33,55)then\r
+  if not Warn(203,30,59)then\r
+  if not Warn(200,25,57)then\r
+  if not Warn(201,20,58)then\r
+  if not Warn(202,15,56)then\r
+  if not Warn(204,10,60)then\r
+  if not Warn(205,6,61)then\r
+  if not Warn(206,3,62)then\r
+  if not Warn(207,2,63)then begin end;\r
+  if T[26]=1 then begin RS(197);DEAD;end;\r
+  if(T[27]=1998)and(Prm=99)then  begin RS(213);Blast;DEAD;end;\r
+  if(T[28]=1998)and(Prm=101)then begin RS(213);Blast;DEAD;end;\r
+ end; { Time2D }\r
+\r
+overlay procedure Directory;\r
+type\r
+  Char12arr = array [ 1..12 ] of Char;\r
+  String20  = string[ 20 ];\r
+var\r
+  Regs      : Entr;\r
+  DTA       : array [ 1..43 ] of Byte;\r
+  Mask      : Char12arr;\r
+  NamR      : String20;\r
+  Error, I  : Integer;\r
+  SM1Found  : boolean;\r
+begin\r
+  ChDir(Drive+':');\r
+  SM1Found:=false;\r
+  FillChar(DTA,SizeOf(DTA),0);\r
+  FillChar(Mask,SizeOf(Mask),0);\r
+  FillChar(NamR,SizeOf(NamR),0);\r
+  writeln;\r
+  Regs.AX := $1A00;\r
+  Regs.DS := Seg(DTA);\r
+  Regs.DX := Ofs(DTA);\r
+  MSDos(Regs);\r
+  Error := 0;\r
+  Mask := '????????.???';\r
+  Regs.AX := $4E00;\r
+  Regs.DS := Seg(Mask);\r
+  Regs.DX := Ofs(Mask);\r
+  Regs.CX := 22;\r
+  MSDos(Regs);\r
+  Error := Regs.AX and $FF;\r
+  I := 1;\r
+  if Error=0 then\r
+    repeat\r
+      NamR[I] := Chr(Mem[Seg(DTA):Ofs(DTA)+29+I]);\r
+      I := I + 1;\r
+    until not (NamR[I-1] in [' '..'~']) or (I>20);\r
+  NamR[0] := Chr(I-1);\r
+  while Error=0 do begin\r
+    Error := 0;\r
+    Regs.AX := $4F00;\r
+    Regs.CX := 22;\r
+    MSDos( Regs );\r
+    Error := Regs.AX and $FF;\r
+    I := 1;\r
+    repeat\r
+      NamR[I] := Chr(Mem[Seg(DTA):Ofs(DTA)+29+I]);\r
+      I := I + 1;\r
+    until not (NamR[I-1] in [' '..'~'] ) or (I > 20);\r
+    NamR[0] := Chr(I-1);\r
+    delete(NamR,length(NamR),2);\r
+    if (Error = 0) then\r
+     if length(NamR)>4 then\r
+      if copy(NamR,length(NamR)-2,3)='SM1' then\r
+       begin\r
+        if not SM1Found then\r
+         writeln('Here is a list of the SAVE/RESTORE files on the ',\r
+                 'disk in drive ',up(Drive),':');\r
+        SM1Found:=true;\r
+        writeln('    * ',copy(NamR,1,length(NamR)-4));\r
+       end;\r
+  end; writeln;\r
+ if not SM1Found then\r
+  begin\r
+   writeln('There are not any SAVE/RESTORE files on the disk in drive ',\r
+            up(Drive),':');writeln;\r
+  end;\r
+ Pause;ChDir(Log+':');\r
+end; {Directory}\r
+\r
+function Up;{Word:Str130):Str1}\r
+ begin word:=word+' ';\r
+  if(Word[1]='l')and(Word[2]=' ')then insert('ook',Word,2);\r
+  if(Word[1]='e')and(Word[2]='x')and(Word[3]=' ')then insert('amine',Word,3);\r
+  delete(Word,length(word),2);Up:='';\r
+  for x:=1 to length(Word) do Word[x]:=upcase(Word[x]);\r
+  col(12,15); write(Word); col(11,7)\r
+ end;\r
+\r
+procedure Spaces(var I:Str130);\r
+ begin I:=concat(' ',I,' ')end;\r
+\r
+procedure QFormat(var I:Str130);\r
+ begin\r
+  if(I[1]='.')or(I[1]=' ')then delete(I,1,1);\r
+  if(I[length(I)]='.')or(I[length(I)]=' ')then delete(I,length(I),1);\r
+ end;\r
+\r
+procedure PreFormat(var I:Str130);\r
+ procedure D(A:Str29;B:byte);\r
+  begin while pos(A,I)<>0 do delete(I,pos(A,I),B)end;\r
+ begin D('  ',1);QFormat(I);\r
+  FFlag:=0; if(length(I)>0)then FFlag:=1;\r
+  Spaces(I);\r
+  Crawl:=false;if pos(' crawl ',I)>0 then Crawl:=true;D(' crawl ',6);\r
+  D(' walk ',5);D(' run ',4);D(' go ',3);D(' travel ',7);\r
+  QFormat(I); if(length(I)=0)and(FFlag=1)then FFlag:=2; Spaces(I);\r
+  D(' of ',3);D(' the ',4);D(' very ',5);D(' more ',5);D(' and ',4);\r
+  D(' large ',6);D(' big ',4);D(' huge ',5);D(' please ',7);\r
+  D(' small ',6);D(' little ',7);D(' tiny ',5);\r
+  D('''',1);D('#',1);D('!',1);D('?',1);D(' number ',7);\r
+  QFormat(I); if(length(I)=0)and(FFlag=1)then FFlag:=3; Spaces(I);\r
+  while pos('examine ',I)>0  do delete(I,pos('examine ',I)+2,5);\r
+  while pos(' into ',I)>0    do delete(I,pos(' into ',I)+3,2);\r
+  while pos(' onto ',I)>0    do delete(I,pos(' onto ',I)+3,2);\r
+  while pos(' inside ',I)>0  do delete(I,pos(' inside ',I)+3,4);\r
+  while pos(' within ',I)>0  do delete(I,pos(' within ',I)+1,4);\r
+  while pos('look ',I)>0     do delete(I,pos('look ',I)+1,3);\r
+  while pos('. ',I)>0        do delete(I,pos('. ',I)+1,1);\r
+  while pos(',',I)>0         do\r
+   begin insert(' ',I,pos(',',I));delete(I,pos(',',I),1)end;\r
+  D('..',1);D(' .',1);D('  ',1);\r
+  QFormat(I);\r
+  if(length(I)=0)then\r
+   begin EFlag:=Null;\r
+    case FFlag of\r
+     2:RL(193);\r
+     3:RL(186)\r
+     else writeln('Pardon me?')\r
+    end;\r
+   end\r
+ end; { PreFormat }\r
+\r
+procedure LowerCase(var I:Str130);\r
+ begin\r
+  if(length(I)>0)then\r
+   for x:=1 to length(I) do\r
+    if(I[x] in['A'..'Z'])then\r
+     I[x]:=chr(ord(I[x])+32);\r
+ end; { LowerCase }\r
+\r
+procedure ChopSeven(var I:Str130);\r
+  var Word:Str130;\r
+ begin\r
+  if(length(I)>0)then\r
+   begin\r
+    I:=I+' '; x:=1;\r
+     repeat\r
+      Word:='';\r
+      while(I[x]<>' ')and(I[x]<>'.')and(I[x]<>',')do\r
+       begin Word:=Word+I[x]; x:=x+1 end;\r
+      if(length(Word)>7)then\r
+       begin\r
+        y:=pos(Word,I); x:=x+(7-length(Word));\r
+        delete(I,y,length(Word)); delete(Word,8,130);\r
+        insert(Word,I,y)\r
+       end;\r
+      x:=x+1;\r
+     until(x-1)=length(I);\r
+    delete(I,length(I),1)\r
+   end\r
+  end; { ChopSeven }\r
+\r
+procedure FindMood(var input:Str130;var Word:Str29;var Md:byte);\r
+  var Temp1:Str53;\r
+      Temp2:Str29;\r
+      Counter:char;\r
+ begin\r
+  Spaces(input);x:=0;\r
+  while x < AMax do\r
+   begin x:=x+1;\r
+    Counter:='1';\r
+    Temp1:=A[x];\r
+    while pos(Counter,Temp1)>0 do\r
+     begin\r
+      Temp2:=copy(Temp1,1,pos(Counter,Temp1)-1);\r
+      if(pos(' '+Temp2+' ',input)>0)then\r
+       begin\r
+        Word:=Temp2;\r
+        Md:=x;if Md=2 then Md:=1;\r
+        x:=AMax;Counter:='8';\r
+        delete(input,pos(Temp2,input),length(Temp2)+1);\r
+       end;\r
+      delete(Temp1,1,pos(Counter,Temp1));\r
+      Counter:=succ(Counter);\r
+     end;\r
+   end;\r
+  QFormat(input);\r
+ end; { FindMood }\r
+\r
+function FN;{(VNP:byte) : Str29;  ( Finds first Noun ) }\r
+  var Temp:Str29;\r
+ begin SF;\r
+  Temp:=n[VNP];\r
+  FN:=copy(Temp,1,pos('\',Temp)-1);\r
+ end; { FW }\r
+\r
+function Here;{Obj:byte) : Boolean;}\r
+ begin Here:=false;\r
+  if Obj in L[Prm] then Here:=true;\r
+  if(Obj=79)and(MugCon=79)and(29 in Inv)then Here:=true;\r
+  if Obj<=MMax then if(R[Obj]=Prm)or(Obj in Inv)then Here:=true;\r
+  if(Obj=58)and((3 in Inv)or(4 in Inv)or(R[4]=Prm)or(R[3]=Prm))then Here:=true;\r
+ end;\r
+\r
+function Present : Boolean;\r
+  label JUMP;\r
+ begin Present:=false; x:=0;\r
+  if not(Vb in [17,18,37,39]) then\r
+   if N1<>Null then\r
+    if Here(N1) then\r
+     if N2<>Null then\r
+      if Here(N2) then Present:=true\r
+      else writeln('You can''t see any ',FN(N2),' here.')\r
+     else Present:=true\r
+    else writeln('You can''t see any ',FN(N1),' here.')\r
+   else Present:=true\r
+  else\r
+   begin JUMP: x:=x+1;\r
+    if x<=NMax then\r
+     if x in NounSet then\r
+      if Here(x) then goto JUMP\r
+      else begin writeln('You can''t see any ',FN(x),' here.');end\r
+     else goto JUMP\r
+    else Present:=true\r
+   end\r
+ end; { Present }\r
+\r
+procedure Convert(var n:byte;Max:byte);\r
+ begin\r
+  case Max of\r
+   1:case n of                     { Verbs }\r
+      12:n:=11; 14:n:=13; 23:n:=22; 27:n:=26;\r
+      29:n:=28; 34:n:=33; 36:n:=35; 38:n:=37; 40:n:=39; 43:n:=42; 45:n:=44;\r
+      52:n:=51; 55:n:=54; 57,58:n:=56; 60,61:n:=59; 63:n:=62;\r
+     end;\r
+   2:case n of                     { Nouns }\r
+      13..15:n:=12; 21:n:=20; 33:n:=32; 36:n:=35; 39:n:=38; 45:n:=44;\r
+      50:n:=49; 53:n:=52; 65:n:=64; 67:n:=66; 70:n:=69; 76,77:n:=75;\r
+      97:n:=96; 101,102:n:=100; 114:n:=113; 117:n:=116; 63:n:=62;\r
+      27:n:=26; 57:n:=56; 61:n:=60; 91:n:=90; 105..108:n:=109; 31:n:=28;\r
+      133:n:=46; 84:if Prm>21 then n:=128; 115:if Prm=28 then n:=112;\r
+      58:if Prm=52 then n:=64;\r
+     end;\r
+   3:case n of                  { Prepositions }\r
+       2:n:=1; 4:n:=3; 8:n:=7 ;\r
+     end;\r
+  end;\r
+ end; { Convert }\r
+\r
+procedure FindWord( var I    : Str130;   { input string }\r
+                    var VNP  : byte;     { flags which # word found }\r
+                    var Word : Str29;    { stores last word found }\r
+                        Max  : byte);    { check which list? }\r
+  const Slash = '\';\r
+  var j,ps:byte;\r
+      Temp1,Temp2:Str29;\r
+ begin\r
+  QFormat(I); Spaces(I); J:=0;\r
+  while (j<m[Max]) do\r
+   begin\r
+    j:=j+1;\r
+    case Max of 1:Temp1:=v[j]; 2:Temp1:=n[j]; 3:Temp1:=p[j] end;\r
+    ps:=pos(Slash,Temp1);\r
+    while ps>0 do\r
+     begin\r
+      Temp2:=copy(Temp1,1,ps-1);\r
+      if(copy(I,1,length(Temp2)+2)=' '+Temp2+' ')then\r
+       begin { Match Found }\r
+        VNP:=j;\r
+        Convert(VNP,Max);\r
+        Word:=Temp2;\r
+        delete(I,1,length(Temp2)+1);\r
+        case Max of 1:VStr:=Word; 2:NStr:=Word end;\r
+        j:=m[Max];\r
+        Temp1:='X';\r
+       end;\r
+      delete(Temp1,1,ps);\r
+      ps:=pos(Slash,Temp1);\r
+     end;\r
+   end; { main loop }\r
+  QFormat(I);\r
+ end; { FindWord }\r
+\r
+procedure Dictionary(IfFound,SkipList:byte);\r
+  var StopLoopFlag:byte;\r
+ begin VNP:=Null; list:=1; StopLoopFlag:=1;\r
+  while(list<4)and(StopLoopFlag=1)do\r
+   begin\r
+    if list=SkipList then list:=list+1\r
+     else\r
+      begin\r
+       FindWord(input,VNP,Word,list);\r
+       if(VNP<>Null)then\r
+        begin EFlag:=IfFound;list:=list-1;StopLoopFlag:=0;end;\r
+       list:=list+1;\r
+      end\r
+   end;\r
+  if(EFlag<>IfFound)then\r
+  begin\r
+   EFlag:=5;input:=input+' ';\r
+   Word:=copy(input,1,pos(' ',input)-1);\r
+   if(pos(' '+Word+' ',' top directi next some from is under underne '+\r
+                        'leaning but speak pay ')>0)then\r
+    EFlag:=IfFound\r
+   else If Word[1] in['0','1','2','3','4','5','6','7','8','9'] then EFlag:=17;\r
+   if IfFound=14 then EFlag:=14;\r
+   QFormat(input);\r
+  end;\r
+ end; { Dictionary }\r
+\r
+procedure RL;\r
+ begin SF;\r
+  if(pointer<>StoreL)then\r
+   begin StoreL:=pointer;\r
+    seek(L1,pointer);\r
+    read(L1,Text3)\r
+   end;\r
+  writeln(Text3);\r
+ end; { Read Line }\r
+\r
+procedure RS;\r
+ begin SF;\r
+  if(pointer<>StoreS)then\r
+   begin StoreS:=pointer;\r
+    seek(S1,pointer);\r
+    read(S1,Text4)\r
+   end;\r
+  writeln(Text4);\r
+ end; { Read Special }\r
+\r
+procedure RR;\r
+ begin SF;\r
+  if(pointer<>StoreR)then\r
+   begin StoreR:=pointer;\r
+    seek(R1,pointer);\r
+    seek(R2,pointer);\r
+    read(R1,Text1);\r
+    read(R2,Text2);\r
+   end;\r
+  writeln(Text1,Text2);\r
+ end; { Read Room }\r
+\r
+procedure RB;\r
+  var Block:Str255;\r
+      Tstart,TStop:Str19;\r
+ begin SF; Col(Colour,7);\r
+  str(Pointer-1,TStart);\r
+  str(Pointer,TStop);\r
+  TStart:='('+TStart+')';\r
+  TStop:='('+TStop+')';\r
+  if old>=Pointer then reset(T1);\r
+  old:=Pointer+1;\r
+  repeat readln(T1,Block) until Block=TStart;\r
+  repeat\r
+   readln(T1,Block);\r
+   if(Block<>TStop)then writeln(Block)\r
+  until Block=TStop; col(11,7);\r
+ end;\r
+\r
+procedure RB2;\r
+  var Block:Str255;\r
+      Tstart,TStop:Str19;\r
+ begin SF; Col(Colour,7);\r
+  str(Pointer-1,TStart);\r
+  str(Pointer,TStop);\r
+  TStart:='('+TStart+')';\r
+  TStop:='('+TStop+')';\r
+  if old2>=Pointer then reset(T2);\r
+  old2:=Pointer+1;\r
+  repeat readln(T2,Block) until Block=TStart;\r
+  repeat\r
+   readln(T2,Block);\r
+   if(Block<>TStop)then writeln(Block)\r
+  until Block=TStop; col(11,7);\r
+ end;\r
+\r
+overlay procedure Won;\r
+  const W=800;H=400;Q=200;T=131;\r
+  label JUMP;\r
+ begin writeln;\r
+  gotoxy(1,20);for x:=1 to 5 do\r
+   begin writeln;delay(99);sound(x*50);Bor(x,7)end;\r
+  gotoxy(1,15);col(4,15);bak(1,7);\r
+  writeln('#######################################',\r
+          '#######################################');\r
+  delay(99);sound(300);Bor(6,0);\r
+  gotoxy(1,16);for x:=1 to 3 do begin\r
+  write('#                                      ',\r
+        '                                      #');\r
+        delay(99);sound(300+(x*50));Bor(x+8,15)end;gotoxy(1,19);\r
+  write('#######################################',\r
+        '#######################################');\r
+  delay(99);sound(500);Bor(14,0);\r
+  gotoxy(26,17);col(31,31);\r
+  write('Y O U   H A V E   W O N ! !');delay(99);sound(550);\r
+  gotoxy(1,20);bak(0,0);Bor(2,7);writeln;delay(99);nosound;\r
+  for x:=1 to 12 do begin writeln;delay(80)end;\r
+  gotoxy(1,9);Col(9,9);\r
+  writeln('                              S U P E R N O V A');writeln;Col(11,7);\r
+  writeln('     Programmed by . . . . . . . . . . . . . . . . . . . . . Scott Miller');\r
+  writeln('     Story by  . . . . . . . . . . . . . . . . . . . . . . . Scott Miller');\r
+  writeln('     Additional story development. . . . . . . . . . . . . . . Terry Nagy');\r
+  writeln;writeln;\r
+  Vb:=78;Call13;writeln;writeln;Col(3,7);\r
+  write('Press any hey to quit...');\r
+  tune(2,8,q);tune(2,8,q);tune(3,1,w);\r
+  repeat\r
+   tune(2,8,q);tune(2,8,q);\r
+   tune(3,1,h);tune(2,12,h);tune(2,10,h);tune(2,8,q);tune(2,8,q);\r
+   tune(3,1,w);tune(2,8,t);tune(2,8,t);tune(2,8,t);\r
+   if keypressed then goto JUMP;\r
+   tune(3,1,h);tune(2,12,h);tune(2,10,h);tune(2,8,t);tune(2,8,t);tune(2,8,t);\r
+   tune(3,3,w);\r
+   if keypressed then goto JUMP;\r
+   tune(2,10,q);tune(2,10,q);\r
+   tune(3,3,h);tune(3,1,h);tune(2,12,h);tune(2,10,q);tune(2,10,q);\r
+   if keypressed then goto JUMP;\r
+   tune(3,3,w);tune(2,10,t);tune(2,10,t);tune(2,10,t);\r
+   tune(3,3,h);tune(3,1,h);tune(2,12,h);tune(2,10,t);tune(2,10,t);tune(2,10,t);\r
+   tune(3,1,w);\r
+  until keypressed;\r
+  JUMP: read(kbd,CFlag);\r
+  window(1,1,80,25);clrscr;gotoxy(2,2);Col(31,31);Bor(0,0);Cur(1);Bak(2,0);\r
+  writeln('Congratulations!');\r
+  HALT;\r
+ end; { Won }\r
+\r
+overlay procedure PlayerInput(var LINE:Str130);\r
+  label JUMP;\r
+  procedure Key(k:Str19); begin Line:=Line+k;QFlag:=true;write(k)end;\r
+ begin\r
+ with Result do begin\r
+  WRITELN; { Main Space In Game }\r
+  if(length(Line)=0)then\r
+   begin\r
+    bak(4,7);col(14,0);\r
+    window(1,1,80,22);\r
+    gotoxy(8,2);write(Tic,'   ');\r
+    gotoxy(35-(length(RN[Prm])div 2),2);\r
+      write('      ',RN[Prm],'      ');\r
+    gotoxy(75,2);write('    ');gotoxy(75,2);write(Sc,' ');\r
+    bak(7,7);\r
+    col(1,0);gotoxy(22,3);\r
+    if PStat=[] then write('Healthy') else write('  *    ');\r
+    col(15,0);gotoxy(33,3);\r
+    if 2 in PStat then begin col(31,16);write('Hungry')end\r
+    else write(' *    ');\r
+    col(4,0);gotoxy(43,3);\r
+    if 3 in PStat then begin col(20,16);write('Sick')end\r
+    else write(' *  ');\r
+    col(0,0);gotoxy(51,3);\r
+    if 4 in PStat then begin col(16,16);write('Injured')end\r
+    else write('   *   ');\r
+    col(6,0);gotoxy(62,3);\r
+    if 5 in PStat then begin col(22,16);write('Tired')end\r
+    else write('  *  ');\r
+    col(5,0);gotoxy(71,3);\r
+    if 6 in PStat then begin col(21,16);write('Thirsty')end\r
+    else write('   *   ');\r
+    bak(0,0);window(2,5,79,24);\r
+    if en(66)then begin gotoxy(1,20);goto JUMP;end;\r
+    gotoxy(1,20);col(28,31);writeln(chr(175));\r
+    Cur(1);\r
+    col(14,7);gotoxy(3,19);\r
+    QFlag:=false;\r
+    repeat\r
+     ax:=0;\r
+     intr($16,result);\r
+     sound(99);nosound;case Region of 4:sound(20);5:sound(60)end;\r
+     case chr(Lo(ax)) of\r
+     ^h:begin\r
+         if(wherex=1)and(wherey=20)then\r
+          begin window(1,1,80,25);gotoxy(80,23)end;\r
+         if length(Line)>0 then write(^h,' ',^h);\r
+         delete(Line,length(Line),2);\r
+         window(2,5,79,24);\r
+        end;\r
+     ^m:QFlag:=true\r
+     else\r
+      begin\r
+       if(Lo(ax)>0)and(length(Line)<110)then\r
+        begin write(chr(Lo(ax)));Line:=Line+chr(Lo(ax));end\r
+       else { read scan }\r
+        begin\r
+         case hi(ax) of\r
+          59:key('Save');      71:key('Northwest');\r
+          60:key('Restore');   73:key('Northeast');\r
+          61:key('R D');       79:key('Southwest');\r
+          62:key('Look');      81:key('Southeast');\r
+          63:key('Get all');   82:key('Down');\r
+          64:key('Drop all');  83:key('Up');\r
+          65:key('Score');     104:begin QFlag:=true;RR(0)end;\r
+          66:key('Inventory');\r
+          67:key('Wait');\r
+          68:begin Line:='';key('Repeat')end;\r
+          94,30:key('by Scott Miller');\r
+          95,47:key('Version A Dec 9, 85');\r
+         end;\r
+        if Prm in[1..7] then\r
+         case hi(ax) of\r
+          72:key('Fore'); 75:key('Port'); 77:key('Starboard'); 80:key('Aft')\r
+         end\r
+        else\r
+         case hi(ax) of\r
+          72:key('North'); 75:key('West'); 77:key('East'); 80:key('South')\r
+         end\r
+       end\r
+      end\r
+     end; {case}\r
+     until QFlag=true;\r
+    Cur(3);\r
+    gotoxy(1,19);col(5,7);write(chr(175));col(11,7);gotoxy(1,20);\r
+    if length(Line)>76 then writeln;\r
+    LowerCase(Line);Spaces(Line);\r
+    if(pos(' r ',Line)>0)or(pos(' repeat ',Line)>0)then PreFormat(Line);\r
+    if(Line='r')or(Line='repeat')then Line:=Again else Again:=Line;\r
+    Spaces(Line);\r
+    while pos(' then ',Line)>0 do\r
+     begin\r
+      x:=pos(' then ',Line);delete(Line,x,5);insert('.',Line,x)\r
+     end;\r
+    ChopSeven(Line);\r
+    PreFormat(Line);\r
+   end;\r
+   if(pos('.',Line)>0)then\r
+    begin    { SEPERATES LINE INTO SINGLE INPUTS }\r
+     input:=copy(Line,1,pos('.',Line));\r
+     delete(Line,1,pos('.',Line));\r
+     delete(input,pos('.',input),1);\r
+     PreFormat(input);\r
+    end\r
+   else\r
+    begin\r
+     input:=Line; Line:='';\r
+    end; { END OF LINE SEPERATION }\r
+   Spaces(input);\r
+   while pos(' it ',input)>0 do\r
+    begin x:=pos(' it ',input)+1;delete(input,x,2);insert(LastNoun,input,x);\r
+     PreFormat(input);ChopSeven(input);\r
+    end;\r
+   while pos(' them ',input)>0 do\r
+    begin x:=pos(' them ',input)+1;delete(input,x,4);insert(LastNoun,input,x);\r
+     PreFormat(input);ChopSeven(input);\r
+    end;\r
+   QFormat(input);\r
+   col(11,7);\r
+   JUMP:\r
+ end; { of with statement }\r
+ end; { PlayerInput }\r
+\r
+overlay procedure Title;\r
+ begin\r
+  clrscr;textcolor(7);Color:=true;\r
+  if ParamCount=0 then begin\r
+   write('Do you want ');textcolor(15);write('C');textcolor(7);\r
+   write('olor or ');textcolor(15);write('B');textcolor(7);\r
+   write('lack and white? ');textcolor(15);read(kbd,CFlag);\r
+   if(upcase(CFlag)='B')or(upcase(CFlag)='M')then\r
+    begin Color:=false;write('Monochrome')end\r
+   else write('Color');delay(300);\r
+  end\r
+  else\r
+   begin input:=ParamStr(1);CFlag:=input[1];\r
+    if(CFlag='/')and(length(input)>1)then CFlag:=input[2];\r
+    if(upcase(CFlag)='B')or(upcase(CFlag)='M')then\r
+     begin Color:=false;writeln('Monochrome screen option...')end\r
+    else writeln('Color screen option...');delay(999)\r
+   end;\r
+  clrscr;textmode(BW80);\r
+  Cur(3);\r
+\r
+                 {**** Public Domain title screen ****}\r
+  Col(9,9);gotoxy(1,1);\r
+  cn('S U P E R N O V A');\r
+  Col(9,7);gotoxy(1,3);\r
+  cn('Published by');\r
+  gotoxy(1,5);\r
+  cn('APOGEE SOFTWARE PRODUCTIONS');\r
+  writeln;\r
+  Col(11,7);\r
+  cn('This game is placed in the public domain for your enjoyment.   Please do');\r
+  cn('not abuse this product or the author''s rights.');\r
+  writeln;\r
+  cn('If you enjoy this game the author asks that you contribute $10 (by check).');\r
+  cn('This payment  will encourage the author  to create similar games  and will');\r
+  cn('help compensate him  for the several years work that went into  Supernova.');\r
+  cn('This fee will also register the payer for telephone support and clues.');\r
+  writeln;\r
+  Col(14,15);\r
+  writeln('Please make checks payable to:  Scott Miller');\r
+  writeln;\r
+  writeln('Scott Miller      (214) 240-0614');\r
+  writeln('4206 Mayflower Drive');\r
+  writeln('Garland, TX 75043');\r
+  writeln;\r
+  writeln('Also call for help:  Terry Nagy  (214) 271-3065');\r
+  writeln;\r
+  Col(11,7);delay(7000);\r
+  cn('Thanks, enjoy the game...');\r
+\r
+  Col(7,7);gotoxy(27,25);delay(999);\r
+  write('Press any key to continue.');repeat;begin;end;until keypressed;\r
+  read(kbd,CFlag);bak(1,0);clrscr;\r
+                 {**** Main SUPERNOVA title screen ****}\r
+\r
+  Bor(1,0);Col(15,15);Bak(4,0);\r
+  for x:=1 to 80 do\r
+   begin gotoxy(x,1);write(chr(205));gotoxy(x,24);write(chr(205))end;\r
+  for y:=1 to 24 do\r
+   begin gotoxy(1,y);write(chr(186));gotoxy(80,y);write(chr(186))end;\r
+  gotoxy(1,1);write(chr(201)); gotoxy(80,1);write(chr(187));\r
+  gotoxy(1,24);write(chr(200)); gotoxy(80,24);write(chr(188));\r
+  Bak(1,0);\r
+  Col(2,7);gotoxy(1,10);cn('Copyright 1987 Scott Miller');\r
+  Col(14,7);gotoxy(1,12);cn('Version B');\r
+  Col(7,7);gotoxy(1,15);\r
+  cn('Programmed by Scott Miller');\r
+  cn('Story by Scott Miller and Terry Nagy');\r
+  gotoxy(1,23);Col(3,7);\r
+  cn('Press any key to continue.');\r
+  repeat\r
+   gotoxy(32,8);\r
+   if Color then textcolor(random(16))\r
+   else case random(3) of  0:textcolor(0); 1:textcolor(7); 2:textcolor(15)end;\r
+   write('S U P E R N O V A');\r
+  until keypressed;\r
+  read(kbd,CFlag);\r
+  if Color then textmode(C80)else textmode(BW80);\r
+ end; { Title }\r
+\r
+overlay procedure Init1;\r
+  label Abort;\r
+ begin ABORT:\r
+  Bor(0,0);bak(0,0);clrscr;nosound;\r
+  Cur(3);randomize;\r
+  GetDir(0,Word);Log:=Word[1];\r
+  for x:=1 to 20 do begin sound(x*9);delay(x*2)end;nosound;\r
+  gotoxy(1,9);y:=0;col(14,7);Identity:='';\r
+  Cn('Please enter your identity code name:');col(12,15);\r
+  repeat i:=random(maxint) until keypressed;\r
+  repeat read(kbd,CFlag);\r
+   if(CFlag<>chr(13))then\r
+    if(CFlag<>^h)then Identity:=Identity+upcase(CFlag)\r
+    else delete(Identity,length(Identity),2);\r
+   gotoxy(1,11);Cn(' '+Identity+' ');sound(50);delay(50);nosound;\r
+  until CFlag=chr(13);\r
+  col(10,7);gotoxy(1,7);\r
+  if identity<>'' then\r
+   Cn(' IDENTITY CODE ACCEPTED--YOU MAY PROCEED '+Identity)\r
+  else begin\r
+   col(25,31);Bor(4,7);Cn('IDENTITY CODE REJECTED--ABORTING SEQUENCE')end;\r
+  LowerCase(Identity);ChopSeven(Identity);\r
+  delay(1500);\r
+  if Identity='' then goto ABORT;\r
+  assign(L1,'L1');\r
+  assign(C1,'C1');\r
+  assign(S1,'S1');\r
+  assign(R1,'R1');assign(R2,'R2');\r
+  assign(T1,'SM');assign(T2,'B1');\r
+  reset(R1);reset(R2);\r
+  reset(S1);reset(L1);reset(C1);\r
+ end; { Init1 }\r
+\r
+overlay procedure Init2;\r
+ begin\r
+  col(7,15);bak(1,7);\r
+  for x:=1 to 80 do\r
+   begin gotoxy(x,1);write(chr(205));gotoxy(x,24);write(chr(205))end;\r
+  gotoxy(80,24);write(chr(190));gotoxy(1,24);write(chr(212));\r
+  gotoxy(1,4);InsLine;\r
+  for x:=2 to 24 do\r
+   begin gotoxy(1,x);write(chr(179));gotoxy(80,x);write(chr(179))end;\r
+  gotoxy(1,4);write(chr(198));for x:=2 to 79 do\r
+   begin gotoxy(x,4);write(chr(205))end;write(chr(181));\r
+  gotoxy(1,1);write(chr(213));gotoxy(80,1);write(chr(184));\r
+  bak(4,7);col(14,0);gotoxy(2,2);\r
+  for x:=1 to 78 do write(' ');\r
+   gotoxy(2,2);write('Move');\r
+  gotoxy(68,2);write('Score');\r
+  bak(7,7);gotoxy(2,3);\r
+  for x:=1 to 78 do write(' ');\r
+  bak(5,7);col(15,0);\r
+  gotoxy(2,3);write('Player Condition:');\r
+  bak(0,0);\r
+  gotoxy(1,14);col(14,7);\r
+  cn('Working 14 hours a day in the core of some dusty, smelly mine');\r
+  cn('is not your idea of the perfect lifestyle.');\r
+  cn('Barre-An is a dust ball in space, its only salvation being that it is');\r
+  cn('rich in precious barre-an metal.  Or used to be.  Nowadays the mines');\r
+  cn('don''t seem so generous, which is why you''re looking for a more');\r
+  cn('profitable venture.');\r
+  cn('A break, that''s all you ask for, maybe today you figure...');\r
+  writeln;\r
+ end; { Init2 }\r
+\r
+overlay procedure Init3;\r
+ begin\r
+  Line    :='';\r
+  Again   :='z';\r
+  LastNoun:='mug';\r
+  Vb      :=Null;\r
+  Prm     :=8;\r
+  Sc      :=0;\r
+  Tic     :=0;\r
+  PStat   :=[6];\r
+  Events  :=[];\r
+  for o   :=1 to MMax do r[o]:=Null;\r
+  Inv     :=[3,8];\r
+  Mov     :=[1..29];\r
+  AlienRm :=Null;\r
+  FriendRm:=91;\r
+  Brief   :=[];\r
+  Wear    :=[];\r
+  MugCon  :=99;\r
+  FoodCon :=4;\r
+  SatchCon:=6;\r
+  HolstCon:=Null;\r
+  NicheCon:=Null;\r
+  SinkRm  :=Null;\r
+  PyraCon :=Null;\r
+  Serum   :=Null;\r
+  HingeCon:=9;\r
+  PodumCon:=18;\r
+  RobotCon:=12;\r
+  Socket  :=[22..25];\r
+  CodeSet :=7;\r
+  ScrnSet :=1;\r
+  Floor   :=1;\r
+  Region  :=1;\r
+  TFlag   :=1;\r
+  Old     :=250;\r
+  Old2    :=Old;\r
+  Maze    :=true;\r
+  Drive   :='A';\r
+  StoreR:=-1;StoreS:=-1;StoreL:=-1;StoreC:=-1;{ Stores Last Read File Number }\r
+  Dir[1]:='NORTH';Dir[2]:='SOUTH';Dir[3]:='EAST';Dir[4]:='WEST';\r
+  Dir[5]:='NORTHEAST';Dir[6]:='NORTHWEST';\r
+  Dir[7]:='SOUTHEAST';Dir[8]:='SOUTHWEST';\r
+  m[1]:=VMax;m[2]:=NMax;m[3]:=PMax;\r
+  for x   :=1 to TMax do T[x]:=Null;\r
+  T[2]    :=0;\r
+  T[3]    :=70;  { Hunger }\r
+  T[4]    :=26;  { Thirst }\r
+  T[5]    :=85; { Sleep (No relation to the T[2] sleep timer!) }\r
+  NoNounOnly  :=[1..8,15,16,30,77..79,82,85..87,95];\r
+  OneNounMaybe:=[9..14,25,32,46,59..60,66..71,80,81,90,91];\r
+  ToNounOnly  :=[33,49,64,88,93];\r
+  ToNounMaybe :=[19,41..44,48,50,53,54,74..76,89,90,92,94];\r
+  { NOTE:  All other verbs would be OneNounOnly! }\r
+  window(2,5,79,24);gotoxy(1,19);\r
+ end; { Init3 }\r
+\r
+overlay procedure Save;\r
+  label JUMPABORT,JUMPBACK;\r
+  var   DiskTest:file;\r
+ begin SF; JUMPBACK: nosound; for x:=1 to 20 do writeln;\r
+  Bor(2,7);CFlag:=Drive;Cur(2);\r
+  gotoxy(1,2);\r
+  write('Which disk drive (default ',Up(Drive),':)? ');\r
+  col(14,15);buflen:=1;readln(Drive);col(11,7);\r
+  Drive:=upcase(Drive);if not(Drive in['A','B'])then Drive:=CFlag;\r
+  gotoxy(1,5);\r
+  writeln('Make sure your SAVE/RESTORE disk is in disk drive ',up(Drive),':');\r
+  writeln;writeln;\r
+  write('SAVE under what file name (''',up('/'),''' aborts SAVE)? ');\r
+  buflen:=8;col(14,15);readln(input);col(11,7);\r
+  Cur(3);\r
+  while pos(' ',input)>0 do delete(input,pos(' ',input),1);\r
+  while pos('.',input)>0 do delete(input,pos('.',input),1);\r
+  while pos(':',input)>0 do delete(input,pos(':',input),1);\r
+  if pos('/',input)>0 then\r
+   begin writeln;writeln(up('SAVE ABORTED'));goto JUMPABORT;end;\r
+  LowerCase(input);\r
+  if(pos('list',input)>0)or(pos('dir',input)>0)or(pos('file',input)>0)then\r
+   begin Directory;goto JUMPBACK;end;\r
+  if length(input)=0 then input:='LASTSAVE';writeln;writeln;\r
+  writeln('The game file ',Up(Input),' is now being saved on disk drive ',\r
+           up(Drive),':...');\r
+  input:=Drive+':'+input;\r
+  assign(Objects,input+'.sm1');\r
+  rewrite(Objects);\r
+  for x:=0 to RMax do write(Objects,L[x]);\r
+  close(Objects);\r
+  assign(Things,input+'.sm2');\r
+  rewrite(Things);\r
+  write(Things,Prm,Region,MugCon,FoodCon,SatchCon,NicheCon,PyraCon,\r
+               HingeCon,PodumCon,AlienRm,FriendRm,SinkRm,Serum,TFlag,\r
+               RobotCon,CodeSet,ScrnSet,HolstCon);\r
+  for x:=1 to MMax do write(Things,R[x]);\r
+  close(Things);\r
+  assign(Timers,input+'.sm3');\r
+  rewrite(Timers);\r
+  write(Timers,Tic,Sc,RC,Floor);\r
+  for x:=1 to TMax do write(Timers,T[x]);\r
+  close(Timers);\r
+  with SetSave do\r
+   begin aInv:=Inv;aPStat:=PStat;aEvents:=Events;\r
+    aSocket:=Socket;aWear:=Wear;end;\r
+  assign(Sets,input+'.sm4');\r
+  rewrite(Sets);\r
+  write(Sets,SetSave);\r
+  close(Sets);\r
+  writeln;writeln;delete(input,1,2);\r
+  writeln('Your present game location is now SAVED under the name ',\r
+           up(input),'.');\r
+  writeln; JUMPABORT: writeln;\r
+  writeln('Please make sure the SUPERNOVA disk is in drive ',up(Log),':');\r
+  writeln;writeln;Pause;\r
+  assign(DiskTest,'Nova.com');\r
+  {$I-}\r
+  reset(DiskTest);\r
+  {$I+}\r
+  if IOResult<>0 then\r
+   begin Col(15,15);close(DiskTest);write(^g);goto JUMPABORT;end;\r
+  close(DiskTest);Col(11,7);\r
+  Bor(0,0);Line:='l';\r
+  case Region of 4:sound(20);5:sound(60)end\r
+ end; { SAVE }\r
+\r
+overlay procedure Restore;\r
+  label JUMP,JUMPBACK;\r
+  var   DiskTest:file;\r
+ begin SF; JUMPBACK: nosound; for x:=1 to 25 do writeln;\r
+  Bor(6,7);CFlag:=Drive;Cur(2);\r
+  gotoxy(1,2);\r
+  write('Which disk drive (default ',Up(Drive),':)? ');\r
+  col(14,15);buflen:=1;readln(Drive);col(11,7);\r
+  Drive:=upcase(Drive);if not(Drive in['A','B'])then Drive:=CFlag;\r
+  gotoxy(1,5);\r
+  writeln('Make sure your SAVE/RESTORE disk is in disk drive ',up(Drive),':');\r
+  writeln;writeln;\r
+  write('RESTORE from what file name (''',up('/'),''' aborts RESTORE)? ');\r
+  buflen:=8;col(14,15);readln(input);col(11,7);\r
+  Cur(3);\r
+  while pos(' ',input)>0 do delete(input,pos(' ',input),1);\r
+  while pos('.',input)>0 do delete(input,pos('.',input),1);\r
+  while pos(':',input)>0 do delete(input,pos(':',input),1);\r
+  if pos('/',input)>0 then\r
+   begin writeln;writeln(up('RESTORE ABORTED'));goto JUMP;end;\r
+  LowerCase(input);\r
+  if(pos('list',input)>0)or(pos('dir',input)>0)or(pos('file',input)>0)then\r
+   begin Directory;goto JUMPBACK;end;\r
+  if length(input)=0 then input:='LASTSAVE';writeln;writeln;\r
+  writeln('The game file ',Up(Input),' is now being restored from drive ',\r
+           up(Drive),':...');\r
+  input:=Drive+':'+input;\r
+  assign(Objects,input+'.sm1');\r
+  {$I-}\r
+  reset(Objects);\r
+  {$I+}\r
+  if IOResult<>0 then\r
+   begin close(Objects);col(12,15);writeln;writeln;delete(input,1,2);\r
+    for x:=1 to length(input) do input[x]:=upcase(input[x]);\r
+    Cn('The file '+input+' does not exist on your SAVE/RESTORE disk!');\r
+    writeln(^g);delay(2000);col(11,7);goto JUMPBACK;\r
+   end;\r
+  reset(Objects);\r
+  for x:=0 to RMax do read(Objects,L[x]);\r
+  close(Objects);\r
+  assign(Things,input+'.sm2');\r
+  reset(Things);\r
+  read(Things,Prm,Region,MugCon,FoodCon,SatchCon,NicheCon,PyraCon,\r
+              HingeCon,PodumCon,AlienRm,FriendRm,SinkRm,Serum,TFlag,\r
+              RobotCon,CodeSet,ScrnSet,HolstCon);\r
+  for x:=1 to MMax do read(Things,R[x]);\r
+  close(Things);\r
+  assign(Timers,input+'.sm3');\r
+  reset(Timers);\r
+  read(Timers,Tic,Sc,RC,Floor);\r
+  for x:=1 to TMax do read(Timers,T[x]);\r
+  close(Timers);\r
+  assign(Sets,input+'.sm4');\r
+  reset(Sets);\r
+  read(Sets,SetSave);\r
+  close(Sets);\r
+  with SetSave do\r
+   begin Inv:=aInv;PStat:=aPStat;Events:=aEvents;\r
+    Socket:=aSocket;Wear:=aWear;end;\r
+  Add(126);\r
+  writeln;writeln;delete(input,1,2);\r
+  writeln('Your present game location is now RESTORED from the name ',\r
+           up(input),'.');\r
+  writeln; JUMP: writeln;\r
+  writeln('Please make sure the SUPERNOVA disk is in drive ',up(Log),':');\r
+  writeln;writeln;Pause;\r
+  assign(DiskTest,'Nova.com');\r
+  {$I-}\r
+  reset(DiskTest);\r
+  {$I+}\r
+  if IOResult<>0 then\r
+   begin Col(15,15);close(DiskTest);write(^g);goto JUMP;end;\r
+  close(DiskTest);Col(11,7);\r
+  Bor(0,0);\r
+  case Region of 4:sound(20);5:sound(60)end;\r
+  if Region>1 then\r
+   begin\r
+    n[84]:='reactor regulat\';\r
+    n[126]:='hinged mouth\mouth\hinge\';\r
+   end\r
+   else\r
+    begin\r
+     n[84]:='middle table\middle\';\r
+     n[126]:='bar\';\r
+    end;\r
+  if en(34)then n[18]:='glass ball\ball\glass\'\r
+   else n[18]:='dusty ball\ball\dusty\';\r
+  if Prm>79 then\r
+   begin\r
+    n[40]:='sockets\socket\';\r
+    n[82]:='laser beam\beam\laser\';\r
+    n[110]:='speaker\';\r
+   end else\r
+   begin\r
+    n[40]:='cyan button\cyan\';\r
+    n[82]:='solar map\map\solar\drawing\';\r
+    n[110]:='keyhole\';\r
+   end;\r
+   Min(128);Line:='l';\r
+ end; { RESTORE }\r
+\r
+procedure MoreThanOne;\r
+ begin\r
+  if((N1=58)or(58 in NounSet)or(N2=58))and Here(3) and Here(4) then\r
+   begin Cur(2);\r
+    repeat write('Which one, the R)usty or S)hiney key? ');\r
+     read(kbd,CFlag);writeln(CFlag);writeln until upcase(CFlag) in ['R','S'];\r
+    case upcase(CFlag) of 'R':x:=3; 'S':x:=4 end;\r
+    if N1=58 then N1:=x;\r
+    if N2=58 then N2:=x;\r
+    if 58 in NounSet then begin NounSet:=NounSet-[58];NounSet:=NounSet+[x] end;\r
+   end;\r
+  if((N1=86)or(86 in NounSet)or(N2=86))and(Prm=8)then\r
+   begin Cur(2);\r
+    repeat write('Which one, the W)estern, M)iddle or E)astern table? ');\r
+     read(kbd,CFlag);writeln(CFlag);\r
+     writeln until upcase(CFlag) in ['W','M','E'];\r
+    case upcase(CFlag) of 'W':x:=83; 'M':x:=84; 'E':x:=85 end;\r
+    if N1=86 then N1:=x;\r
+    if N2=86 then N2:=x;\r
+    if 86 in NounSet then begin NounSet:=NounSet-[86];NounSet:=NounSet+[x] end;\r
+   end;\r
+  if((N1=44)or(44 in NounSet)or(N2=44))and(Prm in[1,70])and(Vb<>28)then\r
+   begin Cur(2);\r
+    repeat write('Which one, the T)an, P)urple or C)yan button? ');\r
+     read(kbd,CFlag);writeln(CFlag);\r
+     writeln until upcase(CFlag) in ['T','P','C'];\r
+    case upcase(CFlag) of 'T':x:=41; 'P':x:=43; 'C':x:=40 end;\r
+    if N1=44 then N1:=x;\r
+    if N2=44 then N2:=x;\r
+    if 44 in NounSet then begin NounSet:=NounSet-[44];NounSet:=NounSet+[x] end;\r
+   end;\r
+  if(N1=58)and Here(3)and not(Here(4))then N1:=3;\r
+  if(N2=58)and Here(3)and not(Here(4))then N2:=3;\r
+  if(58 in NounSet)and Here(3)and not(Here(4))then\r
+    begin NounSet:=NounSet-[58];NounSet:=NounSet+[3] end;\r
+  if(N1=58)and Here(4)and not(Here(3))then N1:=4;\r
+  if(N2=58)and Here(4)and not(Here(3))then N2:=4;\r
+  if(58 in NounSet)and Here(4)and not(Here(3))then\r
+    begin NounSet:=NounSet-[58];NounSet:=NounSet+[4] end;\r
+end; { MoreThanOne }\r
+\r
+\r
+function Print(Word:Str29):Str1;\r
+ begin Print:='';writeln('--you can''t use the word ',Up(Word),' here.')end;\r
+\r
+procedure Parser_Syntax(var Input:Str130);\r
+   label JUMP1, JUMP2;\r
+begin\r
+ Word:=''; Md:=Null; Num:=Null; Code:=Null;\r
+ Vb:=Null; N1:=Null; N2:=Null; NounSet:=[];\r
+JUMP1:  { Used if the player forgets the first noun. }\r
+ FFlag:=Null; Pr:=Null;\r
+JUMP2:  { Used if the player forgets the second noun or preposition. }\r
+ EFlag:=Null;\r
+ FindMood(input,Word,Md);\r
+ if(length(input)>0)then\r
+  begin\r
+   FindMood(input,Word,Num);\r
+   if(Num=Null)then\r
+    begin\r
+     FindWord(input,Vb,Word,1);\r
+     if(Vb<>Null)then\r
+      if(length(input)=0)then\r
+       begin\r
+        if(Vb in NoNounOnly)or(Vb in OneNounMaybe)then EFlag:=Legal;\r
+        if EFlag<>Legal then\r
+         begin\r
+          if(Vb=35)and here(35)then begin EFlag:=Legal;N1:=35;NStr:='seat';end;\r
+          if(Vb=47)and here(6)then begin EFlag:=Legal;N1:=6;end;\r
+          if(Vb=62)and here(80)then begin EFlag:=Legal;N1:=80;end;\r
+          if(Vb=65)and here(124)then begin EFlag:=Legal;N1:=124;end;\r
+          if EFlag<>Legal then EFlag:=4\r
+         end\r
+       end\r
+      else\r
+       if(Vb in NoNounOnly)then Dictionary(3,9)\r
+       else\r
+        if not(Vb in[17,18,37,39])then       { get,drop and but branch-off }\r
+         if not(Vb in[25,32,56,66..69,71,80,81])then { characters and type }\r
+          begin\r
+           if(Vb<>FFlag)then FindWord(input,N1,Word,2);\r
+           if(N1<>Null)then LastNoun:=FN(N1);\r
+           if(N1<>Null)then\r
+            if(Word<>'all')then\r
+             if(length(input)=0)then\r
+              if(Vb in ToNounOnly)then\r
+               if(VStr='fill')and(Prm=SinkRm)and(N1=29)then\r
+                  begin N2:=79;Pr:=6;EFlag:=Legal;end else\r
+               if(Vb=64)and(Prm=8)and(N1 in[29,99])and(not en(21))and\r
+                  here(8)then begin Pr:=6;N2:=8;EFlag:=Legal;end else\r
+               if(Vb=88)and(Prm in[9..11])and(N1=56)and here(3)then\r
+                  begin Pr:=6;N2:=3;EFlag:=Legal;end\r
+               else EFlag:=15\r
+              else EFlag:=Legal\r
+             else\r
+              if(Vb in ToNounMaybe)or(Vb in ToNounOnly)then\r
+               begin\r
+                FindWord(input,Pr,Word,3);\r
+                if(Pr<>Null)then\r
+                 if(length(input)=0)then\r
+                   if(Vb=50)and(Pr in[1,9])then EFlag:=Legal\r
+                   else EFlag:=6\r
+                 else\r
+                  if(Vb<>50)then  { branch for turning dials }\r
+                   begin\r
+                    FindWord(input,N2,Word,2);\r
+                    if(N2<>Null)then\r
+                     if(Word<>'all')then\r
+                      if(length(input)=0)then EFlag:=Legal\r
+                      else Dictionary(12,9)\r
+                     else EFlag:=16\r
+                    else Dictionary(11,2)\r
+                   end\r
+                  else\r
+                   begin\r
+                    val(input,Code,testc);\r
+                    if(testc=0)then EFlag:=Legal\r
+                    else begin delete(input,1,testc-1);Dictionary(14,9);end;\r
+                   end\r
+                else Dictionary(9,3)\r
+               end\r
+              else\r
+               begin Dictionary(3,9);if(List=2)then EFlag:=8;end\r
+             else EFlag:=16\r
+           else Dictionary(10,2)\r
+          end\r
+         else { Special case for TYPE, characters, etc. }\r
+          begin\r
+           QFormat(input);\r
+           EFlag:=Legal\r
+          end { of Special case for SAY, TYPE, etc. }\r
+        else  { Special case for GET and DROP }\r
+         while EFlag=Null do\r
+          begin N1:=Null;\r
+           FindWord(input,N1,Word,2);\r
+           if(N1<>Null)then LastNoun:=FN(N1);\r
+           if(N1<>Null)then\r
+            if not(N1 in NounSet)then\r
+             begin\r
+              NounSet:=NounSet+[N1];\r
+              if(length(input)=0)then EFlag:=Legal\r
+             end\r
+            else EFlag:=13\r
+           else Dictionary(10,2)\r
+          end { of Special case for GET and DROP }\r
+     else Dictionary(7,1)\r
+    end\r
+   else EFlag:=2\r
+  end\r
+ else EFlag:=1;\r
+ if EFlag<>Legal then\r
+  begin Line:='';play(199,199,55);delay(70);play(60,60,55)end;\r
+ case EFlag of\r
+ 1:RL(186);\r
+ 2:writeln('The word ',up(Word),' is too many adverbs.');\r
+ 3:write('Illegal input',Print(Word));\r
+ 4:if(Vb=56)then RL(187)\r
+   else\r
+    begin\r
+     write('Noun missing--');\r
+     case Vb of\r
+      35,62:writeln('what do you want to ',up(Word),' on?');\r
+      65:writeln('what do you want to ',up(Word),' to?')\r
+      else writeln('what do you want to ',up(Word),'?');\r
+     end;\r
+     PlayerInput(line);\r
+     if(length(input)>0)then goto JUMP1;\r
+    end;\r
+ 5:if(length(Word)>1)then\r
+    writeln('The word ',up(Word),' is not used in this adventure.')\r
+   else\r
+    writeln('The letter ',up(Word),' is not used as shorthand in this parser.');\r
+ 6:begin\r
+    writeln('Noun missing--what do you want to ',up(VStr),up(' the '),\r
+            up(NStr),' ',up(PStr),'?');\r
+    PlayerInput(line); FFlag:=Vb;\r
+    if(length(input)>0)then goto JUMP2;\r
+   end;\r
+ 7:write('Verb missing',Print(Word));\r
+ 8:RL(188);\r
+ 9:write('Preposition expected',Print(Word));\r
+ 10:write('Noun expected',Print(Word));\r
+ 11:write('Indirect noun expected',Print(Word));\r
+ 12:write('No more input expected',Print(Word));\r
+ 13:writeln('Illegal noun used--',up(Word),' referenced more than once.');\r
+ 14:write('Number expected',Print(Word));\r
+ 15:begin\r
+     write('Preposition and noun missing--');\r
+     if(Vb in[33,48])then\r
+      writeln('where do you want to ',up(VStr),' the ',up(NStr),'?') else\r
+     if Vb=49 then\r
+      begin Pr:=1;\r
+       writeln('who do you want to ',up(VStr),' the ',up(NStr),' to?')end\r
+     else begin Pr:=6;\r
+       writeln('what do you want to ',up(VStr),' the ',up(NStr),' with?')end;\r
+     PlayerInput(line); FFlag:=Vb;\r
+     if(length(input)>0)then goto JUMP2;\r
+    end;\r
+ 16:RL(189);\r
+ 17:RL(576)\r
+ end;\r
+end; { Parser Syntax }\r
+\r
+procedure MC;{WhichChar,WatchRoom,ToRoom:byte;MessageNum:Integer}\r
+    { WhichChar refers to the character(s) being moved.               }\r
+    { WatchRoom is the room the player must be in to see the responce.}\r
+    { ToRoom is the room the character(s) move to.                    }\r
+    { MessageNum is the message that is written if the player sees.   }\r
+ begin\r
+  if(Prm=WatchRoom)then RS(MessageNum);\r
+  case WhichChar of     { 1 = Aliens,  2 = Scientist }\r
+   1:begin\r
+      L[AlienRm]:=L[AlienRm]-[124];AlienRm:=ToRoom;\r
+      L[AlienRm]:=L[AlienRm]+[124]\r
+     end;\r
+   2:begin\r
+      L[FriendRm]:=L[FriendRm]-[123];FriendRm:=ToRoom;\r
+      L[FriendRm]:=L[FriendRm]+[123]\r
+     end\r
+  end;\r
+  SFlag:=false;\r
+ end;\r
+\r
+procedure Van;\r
+ begin\r
+  Inv:=Inv-[o];\r
+  r[o]:=Null;\r
+  L[Prm]:=L[Prm]-[o];\r
+  if o in Wear then Wear:=Wear-[o];\r
+  if o=SatchCon then SatchCon:=Null;\r
+  if o=MugCon then MugCon:=Null;\r
+  if o=16 then Min(6);\r
+  if o=NicheCon then NicheCon:=Null;\r
+  if o=PyraCon then PyraCon:=Null;\r
+  if o=HingeCon then HingeCon:=Null;\r
+  if o=PodumCon then PodumCon:=Null;\r
+  if o=16 then begin Min(37);Min(6)end;\r
+  if o=RobotCon then RobotCon:=Null;\r
+  if o in Socket then Socket:=Socket-[o];\r
+  if o=HolstCon then HolstCon:=Null\r
+ end;\r
+\r
+procedure Crazy;\r
+ begin SF; RL(random(7)+127)end;\r
+\r
+procedure NoSense;\r
+ begin RL(190) end;\r
+\r
+procedure Say(What1,What2:Str29);\r
+ begin SF; writeln('The ',What1,' is already ',What2,'.') end;\r
+\r
+{******************* END OF PARSER AND MISC. PROCEDURES *********************}\r
+\1a
\ No newline at end of file
diff --git a/src/B1 b/src/B1
new file mode 100644 (file)
index 0000000..2b09d5e
--- /dev/null
+++ b/src/B1
@@ -0,0 +1,203 @@
+(0)\r
+First Alien:  This mining work is for the drazils.\r
+Second Alien: Yea, but guess what I overheard today in the mine. This may\r
+              just be the break we've been looking for.\r
+(1)\r
+Second Alien: The foreman uncovered an ancient artifact that had some\r
+              writing etched on it.  Apparently, before this mining colony\r
+              existed, the native race held sacrifical rituals to please\r
+              their god.\r
+First Alien:  So what.  Get to the point.\r
+(2)\r
+Second Alien: Their god was represented by some sort of a...(the alien takes\r
+              a sip from his drink)...of a crystal.  And from what I've heard\r
+              this crystal may be worth over a few million goolaas, enough\r
+              for us to get out of these filthy mines for good.\r
+First Alien:  Well, where's this crystal located.\r
+Second Alien: It's on some some remote planet, beyond the Sagan system.\r
+First Alien:  Where?  How far is it?  Do you know the coordinates?\r
+Second Alien: I heard the foreman say the ritual planet was located at\r
+              galactic coordinates R2/20-8-23 D2/VEGA.\r
+(3)\r
+ ___________________________________________________________________________\r
+||                                                                          |\r
+()       #     #   ####   ####    #   #  #####  #   #   ####    ##          |\r
+||       #     #  #    #  #   #   ##  #    #    ##  #  #        ##          |\r
+||       #  #  #  ######  #####   # # #    #    # # #  #  ###   ##          |\r
+||       #  #  #  #    #  #    #  #  ##    #    #  ##  #    #               |\r
+()        #####   #    #  #    #  #   #  #####  #   #   ####    ##      ....|\r
+||                                                                      :  :|\r
+||                                                                      :)):|\r
+||                R E A C T O R   A C C E S S   P A N E L               :)):|\r
+||                                                                      :..:|\r
+()            > > >  I N T E N S E   R A D I A T I O N  < < <               |\r
+||                                                                          |\r
+||  DANGER:  Open this panel only in extreme emergencies.  The cool down    |\r
+||           rods should be fully inserted into plasma tubes.  The proper   |\r
+()           suit must be worn at all times during this operation.          |\r
+||__________________________________________________________________________|\r
+\r
+(4)\r
+                                ____\r
+       ________________________/____\\r
+      /                        |    |\r
+     <  WEST  Lig-Tol  774 mk  |    |\r
+      \________________________|    |_____________________________\r
+                               |    |                             \\r
+             __________________|    | 87 mk  Barre-An mines  EAST  >\r
+            /                  |    |_____________________________/\r
+           < SOUTH Llano 64 mk |    |\r
+            \__________________|    |\r
+                               |    |\r
+                               |    |\r
+                               |    |\r
+                               |    |\r
+                               |    |\r
+                               |    |\r
+                               |    |\r
+_______________________________|    |________________________________________\r
+                               |____|\r
+(5)\r
+                ____________________________________________\r
+               |                                            |\r
+               |           A C C E S S   C A R D            |\r
+               |           ---------------------            |\r
+               |                                            |\r
+               |    CLASS SEVEN:  Maintenance Override      |\r
+               |    ..  .  . . .  . .. .  ..  ... ... . .   |\r
+               |    : :. : .::. . :: .: .:. .: . :.: . .:   |\r
+               |                                            |\r
+               |  Issue: #132-SM\TN          Droid Service  |\r
+               |____________________________________________|\r
+\r
+(6)\r
+                       Y G N E G R E M E   T R E L A\r
+                       -----------------------------\r
+\r
+      Atad delipmoc morf Annetna Snoitats One dna Two etacidni taht eht\r
+            Nus lliw retne eht avonrepus egats daeha fo eludehcs.\r
+\r
+                             GNINRAW   GNINRAW\r
+\r
+                  Eht Nus yam avonrepus ta yna emit won!\r
+\r
+                                  TAEPER\r
+\r
+                  Eht Nus yam avonrepus ta yna emit won!\r
+\r
+(7)\r
+ ___________________________________________________________________________\r
+|                                                                           |\r
+|                    R O T A L U G E R   R O T I N O M                      |\r
+|                    ---------------------------------                      |\r
+|                      Rotcaer Rotaludom Latsyrc <1>                        |\r
+|                                                                           |\r
+|                     Noitcnuf:       <rotcaer lortnoc rotallicso>          |\r
+|                      Ecittal:       <cibmohrohtro>                        |\r
+|          *-->    Erutarepmet:       <266 dg>                              |\r
+|                    Noitidnoc:       <ELBATS>                              |\r
+|                        Roloc:       <egnaro>                              |\r
+|                    Ycneuqerf:       <2277 ztreh>                          |\r
+|                                                                           |\r
+|___________________________________________________________________________|\r
+\r
+(8)\r
+ ___________________________________________________________________________\r
+|                                                                           |\r
+|               *********************************************               |\r
+|               *>> Y C N E G R E M E   N O I T I D N O C <<*               |\r
+|               *********************************************               |\r
+|                                                                           |\r
+|                                                                           |\r
+|      TRELA: Rotcaer gnimit latsyrc noitcnuflam ni rotcaer rotaluger.      |\r
+|                                                                           |\r
+|     SUTATS: S'pihs niam evird elbanu ot noitcnuf, noissim detroba.        |\r
+|                                                                           |\r
+|     1101001 0110100 1111010 0110011 0011100 0110001 1100111 0010011       |\r
+|                                                                           |\r
+|___________________________________________________________________________|\r
+\r
+(9)\r
+ ___________________________________________________________________________\r
+|                                                                           |\r
+|                    R O T A L U G E R   R O T I N O M                      |\r
+|                    ---------------------------------                      |\r
+|                      Rotcaer Rotaludom Latsyrc <2>                        |\r
+|                                                                           |\r
+|                     Noitcnuf:       <etamilc lortnoc rotallicso>          |\r
+|                      Ecittal:       <lanogartet>                          |\r
+|                  Erutarepmet:       <232 dg>                              |\r
+|                    Noitidnoc:       <ELBATS>                              |\r
+|                        Roloc:       <neerg>                               |\r
+|          *-->      Ycneuqerf:       <3029 ztrehagem>                      |\r
+|                                                                           |\r
+|___________________________________________________________________________|\r
+\r
+(10)\r
+\r
+                A N N E T N A   N O I T A T S   L O R T N O C\r
+                ---------------------------------------------\r
+                        _____________________________\r
+                       |                             |\r
+                       |   *    SUTATS FO NUS    *   |\r
+                       |_____________________________|\r
+\r
+     ssalc  .   .   .   .   .   .   .   .   .   .   .   .  der tnaigrepus\r
+     noitisopmoc    .   .   .   .   .   .   .    negordyh, muileh, nobrac\r
+     samm   .   .   .   .   .   .   .   .   .   .   .   .   .   . 18.7 sm\r
+     edutingam  .   .   .   .   .   .   .   .   .   .   .   .   .  4.1 tn\r
+     anoroc erutarepmet .   .   .   .   .   .   .   .   . 65.6 noillib dg\r
+     ygrene tuptuo  .   .   .   .   .   .   .   .   .   .  ton elbarusaem\r
+     lanretni eroc sutats   .   .   .   .   .   .   .   .  etareneged sag\r
+     ytisned etar   .   .   .   .   .   .   .   .   .   .   .  gnisaerced\r
+\r
+        ***    NOISULCNOC:  Eht rats thgim edolpxe ta yna emit    ***\r
+\r
+(11)\r
+ ___________________________________________________________________________\r
+|                                                                           |\r
+|                    R O T A L U G E R   R O T I N O M                      |\r
+|                    ---------------------------------                      |\r
+|                      Rotcaer Rotaludom Latsyrc <3>                        |\r
+|                                                                           |\r
+|                     Noitcnuf:       <rotcaer remit>                       |\r
+|                      Ecittal:       <lanogehozepart>                      |\r
+|                  Erutarepmet:       <191 dg>                              |\r
+|          *-->      Noitidnoc:       <ELBATS>                              |\r
+|                        Roloc:       <wolley>                              |\r
+|                    Ycneuqerf:       <9902 ztreh>                          |\r
+|                                                                           |\r
+|___________________________________________________________________________|\r
+\r
+(12)\r
+                               _____________\r
+                              /             \\r
+                             /               \\r
+                       _____/     GNINRAW     \_____\r
+                      /           -------           \\r
+                     /    Y T I R U C E S  K C E D   \\r
+                     \           ssalc ateb          /\r
+                      \_____   ecnaraelc ylno  _____/\r
+                            \                 /\r
+                             \               /\r
+                              \_____________/\r
+\r
+(13)\r
+ ___________________________________________________________________________\r
+|                                                                           |\r
+|                    R O T A L U G E R   R O T I N O M                      |\r
+|                    ---------------------------------                      |\r
+|                      Rotcaer Rotaludom Latsyrc <4>                        |\r
+|                                                                           |\r
+|                     Noitcnuf:       <rotcaer evird rotallicso>            |\r
+|                      Ecittal:       <lanogaxehid>                         |\r
+|          *-->    Erutarepmet:       <813 dg>                              |\r
+|          *-->      Noitidnoc:       <LACITIRC>                            |\r
+|                        Roloc:       <eulb>                                |\r
+|                    Ycneuqerf:       <71 ztrehagem>                        |\r
+|                                                                           |\r
+|___________________________________________________________________________|\r
+\r
+(14)\r
+NULL\r
+(15)\1a
\ No newline at end of file
diff --git a/src/C1 b/src/C1
new file mode 100644 (file)
index 0000000..63b6ed4
Binary files /dev/null and b/src/C1 differ
diff --git a/src/CLUERITE.PAS b/src/CLUERITE.PAS
new file mode 100644 (file)
index 0000000..78e8840
--- /dev/null
@@ -0,0 +1,147 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+{$c-}\r
+const\r
+  Max = 77;\r
+\r
+type\r
+  MaxLength = string[Max];\r
+  OneChar   = string[1];\r
+\r
+var\r
+  C1                : file of MaxLength;\r
+  Position,Counter,\r
+  Start,Stop,x      : integer;\r
+  Text1             : MaxLength;\r
+  Answer            : char;\r
+  Letter            : OneChar;\r
+  List              : boolean;\r
+\r
+procedure Diskwrite(text1: MaxLength; pointer: integer);\r
+  begin\r
+    seek(C1,pointer);\r
+    WRITE(C1,text1);\r
+    writeln('Clue ',pointer,\r
+            ' is written!  Size = ',filesize(C1));\r
+    close(C1);\r
+  end; {End of Diskwrite.}\r
+\r
+procedure Diskread(start,stop: integer);\r
+var\r
+counter : integer;\r
+text1   : MaxLength;\r
+  begin\r
+   assign(C1,'C1');\r
+   reset(C1);\r
+   seek(C1,start);\r
+    for counter:= start to stop do\r
+      begin\r
+        highvideo;\r
+        READ(C1,text1);\r
+        if list then writeln(lst,counter,':',text1)\r
+        else\r
+          begin\r
+            writeln('Here is CLUE # ',counter);\r
+            lowvideo;\r
+            writeln(text1);\r
+            highvideo;\r
+          end;\r
+      end;\r
+    close(C1);\r
+    write('The file contains ',filesize(C1),' CLUES.');\r
+  end;  {End of Diskread.}\r
+\r
+procedure Beep;\r
+begin\r
+ if(length(text1)=68)then\r
+  begin sound(99);delay(50);nosound;end;\r
+end;\r
+\r
+BEGIN\r
+nosound;\r
+window(2,1,79,25);\r
+repeat          {Main loop.}\r
+  text1:='';\r
+\r
+writeln;\r
+writeln('Do you want to R)ead, W)rite or Q)uit?');\r
+read(kbd,answer);\r
+if upcase(answer) = 'Q' then begin writeln('FINISHED');halt;end;\r
+if upcase(answer) <> 'R' then       {Write to 'Clues'.}\r
+    begin\r
+      writeln;writeln;\r
+      assign(C1,'C1');\r
+      textcolor(9);writeln('Now RESETing CLUE files.');highvideo;\r
+            RESET(C1);\r
+      writeln;\r
+      writeln('Input a string not more than ',Max,' characters.',\r
+              '  ''\''-Ends string.');\r
+      x:=wherey;if(x>21)then x:=22;for stop:=1 to 3 do writeln;gotoxy(1,x);\r
+      textcolor(11);\r
+        repeat\r
+          read(trm,letter);\r
+          if letter = ^h then\r
+            begin\r
+              write(^h,' ',^h);\r
+              delete(text1,length(text1),2);\r
+            end;\r
+          beep;\r
+          if (letter <> '\') and (letter <> ^h) then text1:=text1+letter\r
+        until (length(text1)=Max) or (letter='\');\r
+        if letter = '\' then\r
+          begin\r
+            writeln;\r
+            highvideo;\r
+            writeln('Total of ',length(text1),' characters.');\r
+          end;\r
+        writeln; highvideo;\r
+        writeln('Total description length = ',length(text1),' characters.');\r
+      writeln('Now WRITING string to disk.');\r
+      writeln('  At what position?  (Next open is # ',filesize(C1),')');\r
+      textcolor(12);position:=position+1;readln(position);highvideo;\r
+      Diskwrite(text1,position);\r
+    end\r
+else                      {Read from 'Clues'.}\r
+  begin\r
+    writeln;writeln;\r
+    writeln('To the S)creen or the P)rinter');\r
+    read(kbd,answer);\r
+    if(upcase(answer)='P')then List:=True else List:=False;\r
+    assign(C1,'C1');\r
+    reset(C1);\r
+    writeln('Filesize = ',filesize(C1),\r
+            '  (From 0 to ',filesize(C1)-1,')');\r
+    close(C1);\r
+    writeln('Enter starting position:');\r
+    textcolor(12);readln(start);highvideo;\r
+    if(start > filesize(C1)-5)then stop:=(filesize(C1)-1) else\r
+      begin\r
+        writeln('Enter final position:');\r
+        textcolor(12);readln(stop);highvideo;\r
+      end;\r
+    Diskread(start,stop);\r
+  end;  {End of else clause.}\r
+until false;     {End of Main loop.}\r
+END.\r
+\1a
\ No newline at end of file
diff --git a/src/CREATE.PAS b/src/CREATE.PAS
new file mode 100644 (file)
index 0000000..df17c7c
--- /dev/null
@@ -0,0 +1,40 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+const max = 228;\r
+\r
+type\r
+   Str228 = string[228];\r
+\r
+var\r
+   r1,r2  : file of Str228;\r
+\r
+BEGIN\r
+assign(r1,'S1');\r
+{assign(r2,'R2');}\r
+rewrite(r1);\r
+{rewrite(r2);}\r
+close(r1);\r
+{close(r2);}\r
+writeln('File(s) Created!');\r
+END.\1a
\ No newline at end of file
diff --git a/src/DEFAULT.PAS b/src/DEFAULT.PAS
new file mode 100644 (file)
index 0000000..304e353
--- /dev/null
@@ -0,0 +1,1123 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+(****************************************************************************)\r
+(*                             DEFAULT ROUTINES                             *)\r
+(*          >> Contains the default routines used by Supernova <<           *)\r
+(*                        Programmer: Scott Miller                          *)\r
+(*                      << Began February 2, 1985 >>                        *)\r
+(*                      Copyright 1985 Scott Miller                         *)\r
+(****************************************************************************)\r
+procedure Default0;\r
+begin\r
+case Vb of\r
+\r
+{ N, S, E, W, etc. }\r
+1..8:case Prm of\r
+     14..19:RL(26);\r
+     21:RL(27);\r
+     42..50:RL(279)\r
+     else\r
+      if Prm>7 then writeln('There is not a path leading ',up(Dir[Vb]),'.')\r
+      else writeln('There is not passage in that direction.')\r
+     end;\r
+\r
+{ LOOK }\r
+30:begin Brief:=Brief-[Prm];Describe(Prm);\r
+    if(Prm=56)and(T[17]>4)then begin RS(114);RS(115);Pause;end;\r
+   end;\r
+\r
+{ SAVE }\r
+82:Save;\r
+\r
+{ RESTORE }\r
+87:Restore;\r
+\r
+ end {main case}\r
+end; { Default0 }\r
+{----------}\r
+overlay procedure Default1;\r
+begin\r
+case Vb of\r
+\r
+{ INVENTORY }\r
+16:if not(Inv=[]) then\r
+    begin\r
+     writeln('You have in your possession...');\r
+     for o:=1 to MMax do\r
+      begin\r
+       if o in Inv then\r
+        begin\r
+         if o=6 then write('  some ',FN(o)) else write('  a ',FN(o));\r
+         if o in Wear then write('  (being worn)');\r
+         case o of\r
+           5:if SatchCon<>Null then write('  (contains something)');\r
+           7:if HolstCon<>Null then write('  (contains something)');\r
+          29:if MugCon<>Null then write('  (has something in it)');\r
+         end;if o in Inv then writeln;\r
+        end;\r
+      end;\r
+    end\r
+   else RL(28);\r
+\r
+{ DROP }\r
+18:if not(30 in NounSet)then\r
+    for o:=1 to NMax do\r
+     if o in NounSet then\r
+      if o in Inv then\r
+        begin\r
+         write(FN(o),':  ');\r
+         if o in Wear then\r
+          writeln('First you must remove the ',FN(o),'.')\r
+         else begin writeln('Dropped.');Inv:=Inv-[o];r[o]:=Prm;end;\r
+        end\r
+      else writeln('You don''t have the ',FN(o),'.')\r
+     else begin;end\r
+   else\r
+    begin Min(17); { DROP ALL }\r
+     for o:=1 to MMax do\r
+      if o in Inv then\r
+       begin\r
+        write(FN(o),':  ');Add(17);\r
+        if o in wear then\r
+         writeln('First you must remove the ',FN(o),'.')\r
+        else begin writeln('Dropped.');Inv:=Inv-[o];r[o]:=Prm;end;\r
+       end;\r
+     if not en(17)then RL(303)\r
+    end;\r
+\r
+{ DROP ALL BUT }\r
+17:begin\r
+    for o:=1 to MMax do\r
+     if(o in Inv)and not(o in NounSet)then\r
+      begin\r
+       write(FN(o),':  ');\r
+       if o in Wear then\r
+        writeln('First you must remove the ',FN(o),'.')\r
+       else begin writeln('Dropped.');Inv:=Inv-[o];r[o]:=Prm;end;\r
+      end;\r
+   end;\r
+\r
+ end; {main case}\r
+end; { Default1 }\r
+{----------}\r
+overlay procedure Default2;\r
+ label JUMP;\r
+begin\r
+case Vb of\r
+\r
+{ ROOM DESCRIPTION }\r
+77:if not(en(1))then begin Add(1);RL(14)end\r
+   else begin Min(1);RL(15)end;\r
+\r
+{ QUIT }\r
+79:begin Bor(1,0);\r
+    writeln('In ',Tic,' moves you scored ',Sc,\r
+            ' out of a possible 1000 points.');\r
+    writeln('If you want to continue this game at a later date you ',\r
+            'should first use the');writeln('SAVE command.');\r
+    write('Are you still sure you want to QUIT?  ');\r
+    Cur(2);\r
+    read(kbd,CFlag);\r
+    if upcase(CFlag)='Y' then\r
+     begin\r
+      RL(12);delay(2200);\r
+      close(R1);close(R2);close(S1);close(L1);close(C1);close(T1);close(T2);\r
+      window(1,1,80,25);nosound;clrscr;Cur(1);Bor(0,0);gotoxy(2,2);\r
+      Col(31,16);Bak(4,7);writeln('Good-bye!');halt;\r
+     end\r
+    else RL(13);Bor(0,0);\r
+   end;\r
+\r
+{ SLEEP }\r
+62:if(T[5]>32)and(T[8]<1)then\r
+    if(N1 in[19,27,49,69,80,113])then\r
+     begin T[2]:=6;Add(7);\r
+      writeln('You lie down on the ',NStr,\r
+              ' and fall asleep within a few minutes.');\r
+     end\r
+    else RL(16)\r
+   else\r
+    if N1 in[69,80] then\r
+     begin\r
+      T[5]:=230;PStat:=PStat-[5];Bor(0,0);Add(7);\r
+      case N1 of\r
+       69:if T[8]<1 then begin RS(41);Add(128) end\r
+          else begin RS(42);Add(7);Add(10)end;\r
+       80:if T[8]<1 then\r
+           if not en(18)then RS(218)\r
+           else case random(2)of 0:RS(218);1:RS(219)end\r
+          else begin RS(220);Add(128) end\r
+      end;\r
+     end\r
+    else writeln('The ',FN(N1),' is not a suitable place to sleep.');\r
+\r
+{ SIT }\r
+35:if(N1 in[16,32,35,49,54,69,71,80,83..86,98,110])then\r
+    begin Add(7);\r
+     case N1 of\r
+      69:if T[8]<1 then begin RS(41);Add(128) end\r
+         else begin RS(42);T[5]:=160;PStat:=PStat-[5];Add(7);Add(10)end\r
+      else writeln('You sit down on the ',NStr,'.')\r
+     end\r
+    end\r
+   else RL(17);\r
+\r
+{ STAND }\r
+32:if(en(7))then\r
+    begin Min(7);Min(2);Min(3);Min(19);T[6]:=Null;RL(18)end\r
+   else RL(19);\r
+\r
+{ UP and CLIMB }\r
+9,51:if(N1 in[32,35,54,68,71,80,81,83..86,89,98,112,125])then\r
+      begin Add(8);\r
+       writeln('You manage to climb up the ',NStr,'.');\r
+      end\r
+     else\r
+      if(Vb=9)then writeln('There is not a path in that direction.')\r
+      else RL(20);\r
+\r
+{ DOWN }\r
+10:if(en(8))then\r
+    begin Min(8);RL(21)end\r
+   else writeln('There is not a path in that direction.');\r
+\r
+{ IN and OUT }\r
+11,13:writeln('Due to the multiple paths you will have to be more specific.');\r
+\r
+{ WAIT }\r
+15:begin writeln('Time passes');y:=wherey;for x:=1 to 6 do\r
+    begin gotoxy(11+x,y-1);write('.');sound(x*99);delay(30);end;\r
+    nosound;writeln;if Region=4 then sound(20);if Region=5 then sound(60);\r
+   end;\r
+\r
+ end; {main case}\r
+end; { Default2 }\r
+{----------}\r
+overlay procedure Default3;\r
+begin SFlag:=false;\r
+case Vb of\r
+\r
+{ EXAMINE }\r
+28:begin\r
+   case N1 of\r
+   1:if en(41) then RS(116) else begin RS(116);RS(132);Score(5,41)end;\r
+   2:RL(454);\r
+   3:RL(45);\r
+   4:RL(294);\r
+   5:begin RL(105);if SatchCon<>Null then\r
+      if SatchCon=6 then writeln('The satchel contains ',FN(SatchCon),'.')\r
+      else writeln('The satchel contains a ',FN(SatchCon),'.')\r
+     end;\r
+   6:begin RL(54);case FoodCon of 1:RL(55);2:RL(56);3:RL(57);4:RL(58)end end;\r
+   7:begin RL(579);if HolstCon=Null then RL(580)else\r
+      writeln('The gun strap contains a ',FN(HolstCon),'.')end;\r
+   8:RL(59);\r
+   9:RL(374);\r
+   10:RL(262);\r
+   11:RL(311);\r
+   12:RB2(6,13);\r
+   16:RL(151);\r
+   17:RL(263);\r
+   18:if en(34) then begin Score(5,116);RS(92)end else RL(267);\r
+   19:begin RB(12,11);Pause end;\r
+   20:RL(372);\r
+   22:begin RL(527);if 22 in Socket then RL(528)end;\r
+   23:begin RL(529);if 23 in Socket then RL(528)end;\r
+   24:begin RL(530);if 24 in Socket then RL(528)end;\r
+   25:begin RL(531);if 25 in Socket then RL(528)end;\r
+   26:RL(455);\r
+   28:if NStr='badge' then RL(406)else if Md=1 then RL(407)else RL(408);\r
+   29:begin write('The mug is quite small.  ');\r
+       if MugCon=Null then RL(60)else RL(61)end;\r
+   42:begin RS(195);RS(196)end;\r
+   54:if NStr='column' then begin RS(195);RS(196)end;\r
+   56:begin RL(92);if Prm in[81..88]then RL(423)end;\r
+   62:case Prm of 21,25:RS(15);22,24:RS(246)end;\r
+   99:RL(63);\r
+   103:case Prm of 24..34,59,60:RL(317)else RL(326)end;\r
+   113:RR(Prm);\r
+   123:RS(159);\r
+   124:RL(62)\r
+   end; {case}\r
+   if not SFlag then\r
+    case random(20) of\r
+    0..6:writeln('You can''t find anything unusual about the ',FN(N1),'.');\r
+    7..14:writeln('You see nothing special about the ',FN(N1),'.');\r
+    15..17:writeln('It looks like any other ',NStr,' you''ve ever seen.');\r
+    18..20:writeln('It looks like an ordinary ',NStr,'.')\r
+    end\r
+   end;\r
+\r
+{ EAT }\r
+47:if N1=6 then\r
+    begin RL(68);FoodCon:=FoodCon-1;T[3]:=175;PStat:=PStat-[2];Bor(0,0);\r
+     if FoodCon=0 then begin Van(6);RL(69)end\r
+    end\r
+   else writeln('The ',NStr,' would not do much for your digestive system.')\r
+\r
+ end {main case}\r
+end; { Default3 }\r
+{----------}\r
+overlay procedure Default4;\r
+begin\r
+case VB of\r
+\r
+{ GET }\r
+39:begin\r
+    Weight:=Null;Min(17);\r
+    for o:=1 to MMax do if o in Inv then\r
+     begin Weight:=Weight+1;if o=11 then Weight:=Weight+3 end;\r
+    if not(30 in NounSet)then\r
+     for o:=1 to NMax do\r
+      if o in NounSet then\r
+       if o in Mov then\r
+        begin\r
+         write(FN(o),':  ');\r
+         Weight:=Weight+1;if o=11 then Weight:=Weight+3;\r
+         if Weight<9 then\r
+          if not(o in Inv)then\r
+           if(o in Socket)and not(26 in Wear)then RL(524) else\r
+            begin if(o=PyraCon)and(o=9)then Walls(8);\r
+             writeln('Taken.');Van(o);Inv:=Inv+[o];\r
+            end\r
+          else writeln('You already have that.')\r
+         else\r
+          begin RL(587);\r
+           if o=11 then Weight:=Weight-3;\r
+          end\r
+        end\r
+       else begin write(FN(o),':  ');\r
+        if N1 in[32,35,80,83..86,90,121]then RL(502)else crazy;end\r
+      else begin;end\r
+    else\r
+     begin  { GET ALL }\r
+      for o:=1 to MMax do\r
+       if o in Mov then\r
+        if r[o]=Prm then\r
+         begin\r
+          write(FN(o),':  ');Add(17);\r
+          Weight:=Weight+1;if o=11 then Weight:=Weight+3;\r
+          if Weight<9 then\r
+           if(o in Socket)and not(26 in Wear)then RL(524) else\r
+            begin writeln('Taken.');Van(o);Inv:=Inv+[o]end\r
+          else\r
+           begin RL(587);\r
+            if o=11 then Weight:=Weight-3;\r
+           end\r
+         end;\r
+      if not en(17)then RL(29)\r
+     end\r
+   end;\r
+\r
+{ GET ALL BUT }\r
+37:begin\r
+    Weight:=Null;Min(17);\r
+    for o:=1 to MMax do if o in Inv then\r
+      begin Weight:=Weight+1;if o=11 then Weight:=Weight+3 end;\r
+     for o:=1 to MMax do\r
+      if(o in Mov)and not(o in NounSet)then\r
+       if r[o]=Prm then\r
+        begin\r
+         write(FN(o),':  ');\r
+         Weight:=Weight+1;if o=11 then Weight:=Weight+3;\r
+         if Weight<9 then\r
+          if(o in Socket)and not(26 in Wear)then RL(524) else\r
+           begin writeln('Taken.');Van(o);Inv:=Inv+[o];Add(17)end\r
+         else\r
+          begin RL(587);\r
+           if o=11 then Weight:=Weight-3;\r
+          end\r
+        end;\r
+     if not en(17)then RL(29)\r
+   end;\r
+\r
+ end; {main case}\r
+end; { Default4 }\r
+{----------}\r
+overlay procedure Default5;\r
+ label JUMP,JUMP1;\r
+begin\r
+case Vb of\r
+\r
+{ PURCHASE }\r
+64:if Prm=8 then\r
+    if N1=100 then RS(10) else\r
+    if(N1 in[29,99])or(Pr=11)then\r
+     if Pr in[6,9] then\r
+      if N2 in[8,111] then\r
+       if Here(8) then\r
+        begin Inv:=Inv+[29];Van(8);Score(15,21);RS(11);T[1]:=21;Add(9);Add(16)\r
+        end\r
+       else RL(39)\r
+      else RL(40)\r
+     else\r
+      if Pr=11 then\r
+       if(N1 in[29,99,111,124])and(N2 in[29,99,111,124])then begin\r
+        if(N1=111)xor(N2=111)then RL(196)else\r
+        if(N1=124)xor(N2=124)then RL(197)\r
+        else crazy end\r
+       else crazy\r
+      else NoSense\r
+    else\r
+     if N2<>124 then RL(34) else RL(35)\r
+   else\r
+    if Prm=AlienRm then RL(35) else\r
+    if Prm=FriendRm then RL(36)\r
+    else RL(38);\r
+\r
+{ DRINK }\r
+46:if N1=Null then\r
+    if Here(29) then\r
+     if(Prm=8)and not(29 in Inv)then RL(67) else\r
+JUMP: if MugCon<>Null then\r
+       case MugCon of\r
+        99:begin MugCon:=Null;T[4]:=130;Bor(0,0);PStat:=PStat-[6];RL(64)end;\r
+        79:begin MugCon:=Null;T[4]:=130;Bor(0,0);PStat:=PStat-[6];RL(66);\r
+            Van(79)end;\r
+        92:JUMP1:begin MugCon:=Null;\r
+            if T[12]<2 then RL(162)else\r
+            if en(42) then begin RS(136);Van(92);T[12]:=Null;Bor(0,0);\r
+             PStat:=PStat-[3];Score(20,124)end\r
+            else RL(162)\r
+           end;\r
+       end\r
+      else RL(65)\r
+    else\r
+     if Here(98) then  { For the Sink }\r
+      if SinkRm=Prm then begin T[4]:=130;Bor(0,0);PStat:=PStat-[6];RL(66)end\r
+      else RL(67)\r
+     else RL(67)\r
+   else  { If N1 = something }\r
+    case N1 of\r
+     29,99:if 29 in Inv then goto JUMP else RL(87);\r
+     98:if SinkRm=Prm then begin T[4]:=130;Bor(0,0);PStat:=PStat-[6];RL(66)end\r
+        else RL(67);\r
+     121,66:begin RS(12);Add(128);end;\r
+     92:goto JUMP1;\r
+     79:begin\r
+         if(Here(29)and(MugCon=79))then\r
+          begin T[4]:=130;Bor(0,0);MugCon:=Null;Van(79);PStat:=PStat-[6];\r
+           RL(66)end\r
+         else if Here(79)then begin T[4]:=130;Bor(0,0);PStat:=PStat-[6];\r
+               RL(66)end\r
+              else RL(67);\r
+        end\r
+     else writeln('The ',NStr,' would not quench your thirst.')\r
+    end;\r
+\r
+ end; {main case}\r
+end; { Default5 }\r
+{----------}\r
+overlay procedure Default6;\r
+ function Word(W:Str29):boolean;\r
+  begin if pos(' '+W+' ',input)>0 then Word:=true else Word:=false end;\r
+begin\r
+case Vb of\r
+\r
+{ TALKING TO CHARACTERS}\r
+66..69,71:\r
+  begin Spaces(input);\r
+   if Vb=66 then  { Bartender }\r
+    if Here(111)then\r
+     if Word('follow')then RL(46)else\r
+     if Word('go')or Word('east')or Word('south')then RL(567)else\r
+     if Word('hi')or Word('hello')then RL(51)else\r
+     if Word('infocom')then RL(498)else\r
+     if Word('scott')or Word('miller')then RL(499)else\r
+     if Word('what')or Word('why')or Word('where')or Word('who')or\r
+        Word('how')or Word('which')or Word('when')then RL(463)else\r
+     if(Word('ill')or Word('give')or Word('buy')or Word('get me')or\r
+        Word('purchas'))and(Word('drink')or Word('glunk'))then RL(47)else\r
+     if Word('ambross')or Word('pink')or Word('bloody')or Word('foeboz')or\r
+        Word('ztulctw')then RL(565)else\r
+     if Word('kill')or Word('fight')or Word('hit')then RL(566)else\r
+     if Word('give')then RL(564)else\r
+     if Word('help')or Word('tell me')then RL(479)else\r
+     case random(3) of 0:RL(50); 1:RL(480); 2:RL(481)end\r
+    else RL(52);\r
+   if Vb=67 then  { Two Aliens }\r
+    if Here(124)then\r
+     if Word('follow')then RL(48)else\r
+     if Word('go')or Word('south')or Word('east')then RL(568)else\r
+     if Word('crystal')then RL(484)else\r
+     if Word('coordin')or Word('where')or Word('world')or Word('sagan')or\r
+        Word('planet')or Word('locatio')then RL(485)else\r
+     if Word('what')or Word('why')or Word('who')or Word('tell me')or\r
+        Word('how')or Word('which')or Word('when')then RL(464)else\r
+     case random(3) of 0:RL(49); 1:RL(482); 2:RL(483)end\r
+    else RL(53);\r
+   if Vb=68 then  { Scientist }\r
+    if here(123)then\r
+     if Word('follow')then RL(440)else\r
+     if Word('hi')or Word('hello')or Word('bye')then RL(441)else\r
+     if Word('wristba')then RL(442)else\r
+     if Word('card')or Word('green')then RL(459)else\r
+     if Word('give')then RL(456)else\r
+     if Word('go')or Word('east')or Word('west')then RL(457)else\r
+     if Word('help')then RL(462)else\r
+     if Word('ship')or Word('planets')then RL(497)else\r
+     if Word('star')or Word('superno')then RL(486)else\r
+     if(Word('crystal')or Word('clear'))and((T[24]>1)and(T[24]<6))and\r
+       (1 in Inv)then begin T[24]:=Null;T[25]:=7;RS(181)end else\r
+     if(Word('crystal')or Word('clear'))and((T[23]>1)or(T[24]>5))then\r
+      RL(446)else\r
+     if Word('crystal')or Word('clear')then RL(487)else\r
+     if(Word('who')or Word('what'))and Word('you')then RL(461)else\r
+     if Word('what')or Word('why')or Word('where')or Word('who')or\r
+        Word('how')or Word('which')or Word('when')or\r
+        Word('tell me')then RL(458)else\r
+     case random(3) of 0:RL(443); 1:RL(477); 2:RL(478)end\r
+    else RL(439);\r
+    if Vb=69 then  { Robot }\r
+     if here(46)then RL(508)\r
+     else RL(584);\r
+    if Vb=71 then  { Computer }\r
+     if here(37) then RL(545)\r
+     else RL(546)\r
+  end; {characters}\r
+\r
+ end; {main case}\r
+end; { Default6 }\r
+{----------}\r
+overlay procedure Default7;\r
+begin\r
+case Vb of\r
+\r
+{ READ }\r
+31:case N1 of\r
+    12:RB2(6,13);\r
+    19:begin RB(12,7);Pause end\r
+    else writeln('There is nothing on the ',FN(N1),' to read.')\r
+   end;\r
+\r
+{ TOUCH }\r
+75:if 26 in Wear then RL(571)else\r
+    case N1 of\r
+     1,22..25:if N1 in Socket then RL(569)else RL(570);\r
+     79:RL(552);\r
+     120:RL(551);\r
+     34,103,115:writeln('You can''t reach the ',NStr,'.')\r
+     else writeln('You feel nothing unusual about the ',NStr,'.')\r
+    end;\r
+\r
+{ TASTE }\r
+84:case N1 of\r
+    6:RL(377);\r
+    29,92,99:if MugCon=99 then RL(70) else RL(71);\r
+    111:RL(466)\r
+    else writeln('It tastes like a ',NStr,' should taste.')\r
+   end;\r
+\r
+{ SMELL }\r
+83:case N1 of\r
+    6:RL(378);\r
+    29,99:if MugCon=99 then RL(72)else RL(599);\r
+    111:RL(466)\r
+    else\r
+     if Prm in[42..50]then RL(572)\r
+     else writeln('It smells like an ordinary ',NStr,'.')\r
+   end;\r
+\r
+{ LISTEN }\r
+65:case N1 of\r
+    42:RL(501);\r
+    62:if Region=4 then RL(573)else RL(574);\r
+    111:RL(73)\r
+    else writeln('The ',NStr,' is not making any sound.')\r
+   end;\r
+\r
+{ HELLO }\r
+80:if(word='hi')or(word='hello')then writeln('Hello to you.') else RL(74);\r
+\r
+{ YES/NO/MAYBE }\r
+81:RL(random(6)+75);\r
+\r
+{ COMMANDS }\r
+95:begin RB(4,11);Pause;RB(6,11);Pause;end;\r
+\r
+{ ATTACK }\r
+93:if Pr=6 then\r
+    if(N2 in Mov)or(N2=60)then\r
+     case N1 of\r
+      60:begin Cur(2);write('Are you sure? ');read(kbd,CFlag);Cur(3);writeln;\r
+          if upcase(CFlag)='Y' then begin RL(488);Add(128);end\r
+          else writeln('Whew!')end;\r
+      123:RL(465);\r
+      124:case random(6) of\r
+           0:RL(175);\r
+           1:begin RL(176);Add(7)end;\r
+           2:begin RL(177);Van(N2);R[N2]:=Prm;end;\r
+           3:begin RS(33);T[3]:=26;T[4]:=23;T[5]:=33;end;\r
+           4:begin RS(34);Van(N2);Prm:=13;Add(7)end;\r
+           5:begin RS(36);T[7]:=9;PStat:=PStat+[4];Add(7)end\r
+          end\r
+      else writeln('The ',FN(N1),' offers no resistance.')\r
+     end\r
+    else crazy\r
+   else NoSense;\r
+\r
+ end; {main case}\r
+end; { Default7 }\r
+{----------}\r
+overlay procedure Default8;\r
+ label JUMP;\r
+begin\r
+case Vb of\r
+\r
+{ TURN }\r
+50:if Pr=Null then   {eg. turn knob}\r
+    case N1 of\r
+     48:JUMP:begin\r
+         if Prm=SinkRm then begin SinkRm:=Null;L[Prm]:=L[Prm]-[79];RL(81)end\r
+         else if Prm in[5,12] then\r
+               begin SinkRm:=Prm;L[Prm]:=L[Prm]+[79];RL(82)end\r
+              else RL(540)\r
+        end\r
+     else RL(83)\r
+    end {case}\r
+   else\r
+    if input='' then  {eg. turn sink on}\r
+     case N1 of\r
+      2:begin RL(460);Score(5,123);\r
+        case random(4)of\r
+         0:for i:=20 to random(99)+50 do play(20,i,1);\r
+         1:for i:=random(5000)+4500 downto 20 do begin sound(i);\r
+            delay(1);sound(31)end;\r
+         2:begin i:=random(9999)+1;x:=0;repeat j:=random(9999);play(j,i,0);\r
+            i:=random(9999)+1;play(i,j,0);x:=x+1;until x>9 end;\r
+         3:for x:=1 to 200 do begin i:=random(9999)+1;play(i,i,1);delay(16)end\r
+        end;nosound;if Region=5 then sound(60);\r
+       end;\r
+      37,38:RL(373);\r
+      48,79,98:goto JUMP;\r
+      46:RL(360);\r
+      127:if NStr<>'window' then RL(360);\r
+      131:RL(84)\r
+      else crazy\r
+     end\r
+    else             {eg. turn dial to 123}\r
+     if Pr=1 then\r
+      if N1=48 then\r
+       case Prm of\r
+        79:begin;end;\r
+       end\r
+      else crazy\r
+     else NoSense;\r
+\r
+{ OPEN and UNLOCK }\r
+41,88:\r
+  if N1=5 then RL(289)\r
+  else\r
+   if N2=Null then\r
+    case N1 of { if N1 only }\r
+     56:RL(409)\r
+     else RL(100)\r
+    end\r
+   else\r
+    if Pr=6 then\r
+     if N1=56 then\r
+      if Prm in[9,11] then\r
+       if N2=3 then RL(101)\r
+       else crazy\r
+      else\r
+       if Prm=10 then\r
+        if N2=3 then begin RL(102);Add(11)end\r
+        else crazy\r
+       else RL(103)\r
+     else\r
+      if N1 in[32,38,45,55,62,68,69,78,89,90,119] then RL(103)\r
+      else crazy\r
+    else NoSense;\r
+\r
+ end; {main case}\r
+end; { Default8 }\r
+{----------}\r
+overlay procedure Default9;\r
+ label JUMP;\r
+begin\r
+case Vb of\r
+\r
+{ LOOK INSIDE }\r
+24:case N1 of\r
+    5:if SatchCon<>Null then writeln('The satchel contains ',FN(SatchCon),'.')\r
+      else RL(110);\r
+    7:if HolstCon=Null then RL(580)else\r
+       writeln('The gun strap contains a ',FN(HolstCon),'.');\r
+    18:if en(34)then RL(270)else RL(271);\r
+    29:if MugCon<>Null then writeln('The mug contains ',FN(MugCon),'.')\r
+       else RL(111);\r
+    35:if NStr='toilet' then RL(114)else RL(113);\r
+    7,10,26,28,32,62,64,69,98,113:writeln('The ',NStr,' is empty.');\r
+    119:RL(112);\r
+    103..109,115,118:if Prm=63 then RL(113)else RL(115)\r
+    else RL(113)\r
+   end;\r
+\r
+{ LOOK UNDER, LOOK BEHIND and REACH IN }\r
+20,26,76:\r
+   case N1 of\r
+    5:if SatchCon<>Null then writeln('The satchel contains ',FN(SatchCon),'.')\r
+      else RL(110);\r
+    80:if not en(127) then begin RS(16);Add(127)end else RL(116);\r
+    103..109,115,118:if Prm=63 then RL(113)else RL(115)\r
+    else RL(116)\r
+   end;\r
+\r
+{ LOOK ON TOP }\r
+22:case N1 of\r
+    66:RL(117);\r
+    80:RL(118);\r
+    99:RL(119);\r
+    103..109,115,118:if Prm=63 then RL(113)else RL(115)\r
+    else RL(120)\r
+   end;\r
+\r
+{ CLUE }\r
+70:begin if Sc<25 then begin RL(302);goto JUMP;end;\r
+    if not en(15) then\r
+     begin Add(15);RS(30);\r
+      Cur(2);\r
+      write('Do you still wish to see the clue? ');read(kbd,CFlag);writeln;\r
+      if upcase(CFlag)='N' then\r
+       begin writeln('OK, no clue will be shown.');goto JUMP;end\r
+     end;\r
+    Cn('---Here is your clue---');Sc:=Sc-25;\r
+    if(Prm<>StoreC)then\r
+     begin StoreC:=Prm;\r
+      seek(C1,Prm);\r
+      read(C1,Text5)\r
+     end;\r
+    col(12,9);Cn(Text5);col(11,7); JUMP:\r
+   end; { Read Clue }\r
+\r
+ end; {main case}\r
+end; { Default9 }\r
+{----------}\r
+overlay procedure Default10;\r
+begin\r
+case Vb of\r
+\r
+{ PUT }\r
+33:begin SFlag:=False;if VStr='fill' then begin x:=N1;N1:=N2;N2:=x;end;\r
+    if((N1 in Mov)and(N1 in Inv))or(N1 in[66,79])then\r
+     case N2 of\r
+      64:case Prm of\r
+         34:if N1 in[3,8,9] then\r
+             if Pr=5 then\r
+              if PyraCon=Null then\r
+               begin Van(N1);R[N1]:=34;PyraCon:=N1;\r
+                if N1=9then begin RS(83);Walls(8);Add(30)end else RL(224)\r
+               end\r
+              else RL(223)\r
+             else RL(222)\r
+            else RL(221);\r
+         end;\r
+     126:if en(31) then\r
+          if N1 in[3,8,9] then\r
+           if Pr in[1,5,7,10] then\r
+            if HingeCon=Null then\r
+             begin Van(N1);R[N1]:=34;HingeCon:=N1;RL(231)end\r
+            else RL(230)\r
+           else NoSense\r
+          else RL(229)\r
+         else RL(232);\r
+      35:if Prm=1 then\r
+          if N1=16 then\r
+           begin Van(16);Add(6);R[16]:=1;RL(144);Score(5,25)end\r
+          else begin RL(143);Van(N1);R[N1]:=1;end;\r
+      120:begin RL(550);Van(N1)end;\r
+      62:if Prm in[22,24] then\r
+          if en(23) then begin Van(N1);R[N1]:=2;RL(134)end else RL(99);\r
+      66:begin if random(2)=0 then RL(375)else RL(376);Van(N1)end;\r
+      42:RL(495);\r
+      29:if MugCon=Null then\r
+          if N1 in[3,4,9,17,19,66,79,99] then begin\r
+           writeln('The ',FN(N1),' is now in the mug.');\r
+           if N1 in Mov then Van(N1);L[Prm]:=L[Prm]+[N1];MugCon:=N1;end\r
+          else if N1 in Mov then RL(137)else crazy\r
+         else RL(136);\r
+      5 :if SatchCon=Null then\r
+          if N1 in[3,4,6,8,9,12,17,19] then\r
+           begin Van(N1);L[Prm]:=L[Prm]+[N1];SatchCon:=N1;\r
+            writeln('The ',FN(N1),' is now in the brown satchel.')end\r
+          else if N1 in Mov then RL(137)else crazy\r
+         else RL(138);\r
+      7 :if HolstCon=Null then\r
+          if N1 in[3,4,8,9,12,17,19] then\r
+           begin Van(N1);L[Prm]:=L[Prm]+[N1];HolstCon:=N1;\r
+            writeln('The ',FN(N1),' is now in the holster.')end\r
+          else if N1 in Mov then RL(137)else crazy\r
+         else RL(581);\r
+     end {main N2 case}\r
+    else writeln('First you must have the ',FN(N1),'.');\r
+\r
+     if not SFlag then\r
+      case Pr of\r
+       1:if N2 in[32..37,49,71,80,83..87,90,93,98,113,112,126,132] then\r
+          begin Van(N1);R[N1]:=Prm;\r
+           writeln('The ',FN(N1),' is now on the ',FN(N2),'.')end\r
+         else RL(139);\r
+       5:RL(139);\r
+       7:if N2 in[32,35,37,49,51,54,56,62,66..73,80..87,89,90,94..98,104,112,\r
+                  113,116,120..122,125..128,132] then\r
+          begin Van(N1);R[N1]:=Prm;\r
+           writeln('The ',FN(N1),' is now beside the ',FN(N2),'.')end\r
+         else RL(139);\r
+      10:if N2 in[80,81,83..86,98,104,112] then\r
+          begin Van(N1);R[N1]:=Prm;\r
+           writeln('The ',FN(N1),' is now under the ',FN(N2),'.')end\r
+         else RL(139)\r
+       else crazy\r
+      end\r
+\r
+   end\r
+\r
+ end; {main case}\r
+end; { Default10 }\r
+{----------}\r
+overlay procedure Default11;\r
+begin\r
+case Vb of\r
+\r
+{ PUSH and TURN ON }\r
+44:if(VStr='turn on')or(VStr='activat')then\r
+    case N1 of\r
+     2:begin RL(460);Score(5,117);\r
+        case random(4)of\r
+         0:for i:=400 to random(250)+420 do play(400,i,1);\r
+         1:begin y:=random(35)+2;for x:=1 to 99 do\r
+            begin i:=random(9000)+60;play(i,i,y);delay(y)end end;\r
+         2:for x:=1 to random(230)+21 do\r
+            for y:=1 to random(230)+22 do sound(x*y);\r
+         3:for i:=1 to random(9999)+999 do sound(random(i)+i);\r
+        end;nosound;if Region=5 then sound(60);\r
+       end;\r
+     37,38:RL(373);\r
+     98,48:if Prm=SinkRm then say('water','flowing out')\r
+        else begin SinkRm:=Prm;L[Prm]:=L[Prm]+[79];RL(82)end;\r
+     127:if NStr<>'window' then RL(360)\r
+     else RL(164)\r
+    end\r
+   else\r
+    case N1 of\r
+     116:if Prm in[42..50]then RL(282)else RL(281);\r
+     123:RL(472)\r
+     else RL(103)\r
+    end;\r
+\r
+{ PULL and TURN OFF }\r
+42:if(VStr='turn off')or(VStr='deactiv')then\r
+    case N1 of\r
+     98,48,79:if Prm<>SinkRm then say('water','off')\r
+        else begin SinkRm:=Null;L[Prm]:=L[Prm]-[79];RL(81)end;\r
+     127:if NStr<>'window' then RL(360)else RL(165)\r
+     else RL(165)\r
+    end\r
+   else RL(103);\r
+\r
+{ CLEAN }\r
+94:case N1 of\r
+    18:if en(34) then RL(265) else\r
+        begin if 18 in L[41] then R[18]:=41;Score(15,34);\r
+         RS(91);n[18]:='glass ball\ball\glass\';;;end;\r
+    126:if NStr='bar' then RL(167);\r
+    80:RL(166);\r
+    98:RL(168)\r
+    else writeln('The ',NStr,' doesn''t need to be cleaned.');\r
+   end;\r
+\r
+{ RESTART }\r
+86:begin Bor(1,0);Cur(2);\r
+    write('Are you sure you want to restart your game? ');\r
+    read(kbd,CFlag);\r
+    if upcase(CFlag)<>'Y' then RL(169)\r
+    else\r
+     begin RL(170);delay(2000);window(1,1,80,25);clrscr;Bor(0,0);nosound;\r
+      close(R1);close(R2);close(S1);close(L1);close(C1);close(T1);close(T2);\r
+      assign(R1,'nova.com');execute(R1)\r
+     end;Bor(0,0);\r
+   end;\r
+\r
+{ SHOOT }\r
+89:RL(171);\r
+\r
+{ TIE and UNTIE }\r
+90:if VStr='tie' then RL(172)else if VStr='untie' then RL(173)else RL(437);\r
+\r
+{ FIND }\r
+73:if N1 in Inv then\r
+    writeln('You are carrying the ',NStr,'.')\r
+   else writeln('The ',NStr,' is close by, just look around.');\r
+\r
+ end; {main case}\r
+end; { Default11 }\r
+{----------}\r
+overlay procedure Default12;\r
+begin\r
+case Vb of\r
+\r
+{ HIT and BREAK }\r
+54:if N2<>Null then\r
+    if(N2 in Mov)or(N2=60)then\r
+     if N1<>N2 then\r
+      if Pr in[3,6] then\r
+       case N1 of\r
+        1:if(Prm=56)and(1 in L[56])then RL(300)else RL(83);\r
+        18:if N2 in[10,11,29] then begin RS(97);Van(18);R[4]:=Prm;end\r
+           else RL(272);\r
+        123:RL(416)\r
+        else RL(273)\r
+       end {case}\r
+      else NoSense\r
+     else crazy\r
+    else crazy\r
+   else { N2=Null }\r
+    case N1 of\r
+     18:RL(274)\r
+     else\r
+      if random(3)=0 then\r
+       writeln('At the last moment you decide to spare the ',NStr,'''s life!')\r
+      else writeln('Hitting the ',NStr,' doesn''t help.')\r
+    end;\r
+\r
+{ THROW }\r
+48:if N2<>Null then\r
+    if N1 in Inv then\r
+     if N1 in Mov then\r
+      if N1<>N2 then\r
+       if Pr in[1..5] then\r
+        begin\r
+         if(N1=29)and(MugCon in[79,92,99])then begin\r
+          MugCon:=Null;RL(585);SFlag:=false;end;\r
+         if(N2=1)and(Prm=56)and(1 in L[56])then\r
+          begin Van(N1);R[N1]:=56;RL(301)end;\r
+         if(N2=49)and(Prm=56)and(N1 in[1,10,18,29])then\r
+          begin RS(112);Add(128);end;\r
+         if(N2=69)and(Prm=91)then begin RS(160);L[91]:=L[91]+[123];\r
+          L[91]:=L[91]-[44,129];T[23]:=15;Add(51);Van(N1);R[N1]:=91;end;\r
+         if(N1 in[1,22..25])then begin Van(N1);RL(430)end;\r
+         if(N2=46)and(Prm in[99,101])then begin RL(514);Blast;\r
+          if Prm=99 then T[27]:=2000 else T[28]:=2000;Van(N1)end;\r
+         case N2 of\r
+          1,22..25:begin Van(N2);RL(431)end;\r
+          42:begin Van(N1);RL(515)end;\r
+          66:begin RL(375);Van(N1)end;\r
+          111:begin RL(449);Van(N1)end;\r
+          120:begin RL(550);Van(N1)end;\r
+          123:begin RL(450);RL(451);Van(N1);R[N1]:=Prm;end;\r
+          124:begin RL(452);RL(453);Van(N1);R[N1]:=Prm;end;\r
+          127:if Prm=64 then if Md=3 then begin RL(537);Add(128);end else RL(538);\r
+         end;\r
+         if(N1=18)or(N2=18)then\r
+          begin Van(N1);R[N1]:=Prm;Van(18);RS(97);R[4]:=Prm;end;\r
+         if not SFlag then begin writeln('The ',FN(N1),' collides with the ',\r
+         FN(N2),', but nothing interesting happens.');Van(N1);R[N1]:=Prm;end\r
+        end\r
+       else NoSense\r
+      else crazy\r
+     else crazy\r
+    else writeln('First you must have the ',FN(N1),'.')\r
+   else { N2=Null }\r
+    begin Van(N1);R[N1]:=Prm;RL(275)end;\r
+\r
+ end; {main case}\r
+end; { Default12 }\r
+{----------}\r
+overlay procedure Default13;\r
+begin\r
+case Vb of\r
+\r
+{ CLOSE }\r
+53:case N1 of\r
+    5:RL(289);\r
+    56:RL(92)\r
+    else writeln('The ',NStr,' is not something that can be closed.')\r
+   end;\r
+\r
+{ SCORE }\r
+78:begin col(11,7);\r
+    write('In ');col(12,9);write(Tic);col(11,7);\r
+    write(' moves you scored ');col(12,9);write(Sc);col(11,7);\r
+    writeln(' out of a possible 1000 points.');\r
+    write('This score earns you the rank of ');col(12,9);\r
+    case Sc of\r
+    0..9:writeln(Up('ABSOLUTE BEGINNER!'));\r
+    10..99:write('Rookie');\r
+    100..179:write('Struggling');\r
+    180..259:write('Novice');\r
+    260..349:write('Competent');\r
+    350..449:write('Fair');\r
+    450..549:write('Good');\r
+    550..649:write('Great');\r
+    650..744:write('Brilliant');\r
+    745..829:write('Genius');\r
+    830..899:write('Elite');\r
+    900..949:write('Champion');\r
+    950..1000:write('Galaxy Class')\r
+    end;\r
+    if Sc>9 then writeln(' Adventurer.')\r
+   end;\r
+\r
+{ REPAIR }\r
+74:RL(357);\r
+\r
+{ FOLLOW }\r
+91:if VStr='follow' then\r
+    case N1 of 123:RL(358);124:RL(359)\r
+     else writeln('Why, did the ',NStr,' leave?')\r
+    end else RL(432+random(5)); { for Scott in VOCAB! }\r
+\r
+{ WEAR }\r
+72:if N1 in[7,20,26,28]then\r
+    if N1 in Inv then\r
+     if not(N1 in Wear)then\r
+      begin Wear:=Wear+[N1];writeln('You are now wearing the ',FN(N1),'.');\r
+       if(Prm in[102..105])and(N1=20)then RL(503);\r
+      end\r
+     else writeln('You are already wearing the ',FN(N1),'.')\r
+    else writeln('First you must have the ',FN(N1),'.')\r
+   else crazy;\r
+\r
+{ REMOVE }\r
+19:if N1 in Wear then begin Wear:=Wear-[N1];\r
+    writeln('You are no longer wearing the ',FN(N1),'.');\r
+    if Prm in[102..105]then RL(492)end\r
+   else writeln('You are not wearing the ',FN(N1),' to begin with.');\r
+\r
+{ TYPE }\r
+56:if here(37)or here(52)then RL(273)else RL(361);\r
+\r
+ end; {main case}\r
+end; { Default13 }\r
+{----------}\r
+overlay procedure Default14;\r
+begin\r
+case Vb of\r
+\r
+{ SHOW / GIVE }\r
+49:if N2 in[46,111,123,124]then\r
+    if Pr=1 then\r
+     case N2 of\r
+      46:RL(447);\r
+      111:if N1=8 then begin Inv:=Inv+[29];Van(8);Score(10,21);RS(11);\r
+           T[1]:=21;Add(9);Add(16)end\r
+          else RL(444);\r
+      124:RL(445);\r
+      123:RL(446)\r
+     end\r
+    else nosense\r
+   else crazy;\r
+\r
+{ JUMP }\r
+59:if N1<>Null then\r
+    if(VStr='jump over')or(VStr='leap over')or(VStr='jump across')then\r
+     if N1 in[1..29,36,49,51,69,71,73,132]then\r
+      writeln('You land on the other side of the ',NStr,'.')\r
+     else crazy\r
+    else\r
+     if(VStr='jump off')and en(8)then begin RL(475);Min(8)end else\r
+     if N1 in[34,56,60,62,68,72,82,92] then crazy else\r
+     if(N1 in[1..29])and not(N1 in Inv)then\r
+      writeln('You land on the ',NStr,'.')\r
+     else\r
+      if NStr='quicksa' then begin RL(582);Add(128)end else\r
+      if NStr='swamp' then begin RL(583);Add(128)end\r
+      else RL(476)\r
+   else\r
+    if(VStr='jump off')and en(8)then begin RL(475);Min(8)end\r
+    else RL(539);\r
+\r
+{ DIG }\r
+92:case N1 of\r
+    49,116,122:RL(556);\r
+    120:RL(557)\r
+    else crazy\r
+   end;\r
+\r
+{ TALK / GREET }\r
+21:if VStr='greet' then\r
+    case N1 of 111:RL(51); 124:RL(46); 123:RL(441) else crazy end\r
+   else\r
+    if N1 in[111,123,124] then\r
+     begin writeln('To talk to the ',FN(N1),' enter:');\r
+      writeln(FN(N1),', < what you want to say goes here >')\r
+     end\r
+    else crazy;\r
+\r
+25:RS(245);\r
+\r
+ end; {main case}\r
+end; { Default14 }\r
+{----------}\r
+overlay procedure DeadMain;\r
+  label JUMP;\r
+ begin writeln;\r
+  gotoxy(1,20);for x:=5 downto 1 do\r
+   begin writeln;delay(99);sound(300+(x*50));Bor(x,7)end;\r
+  repeat x:=random(14)+1 until not(x in [4,12]);\r
+  gotoxy(1,15);col(x,15);bak(4,7);\r
+  writeln('***************************************',\r
+          '***************************************');\r
+  delay(99);sound(300);Bor(6,0);\r
+  gotoxy(1,16);for x:=3 downto 1 do begin\r
+  write('*                                      ',\r
+        '                                      *');\r
+        delay(99);sound(100+(x*50));Bor(x+8,15)end;gotoxy(1,19);\r
+  write('***************************************',\r
+        '***************************************');\r
+  delay(99);sound(100);Bor(14,0);\r
+  gotoxy(30,17);col(16,31);write('YOU HAVE DIED!!!');delay(99);sound(50);\r
+  gotoxy(1,20);bak(0,0);col(11,7);Bor(12,7);writeln;delay(99);nosound;\r
+  delay(999);i:=random(3)+2;\r
+  tune(i,3,830);tune(i,3,770);tune(i,3,200);tune(i,3,0);delay(800);\r
+  tune(i,6,400);tune(i,5,400);tune(i,5,400);\r
+  tune(i,3,400);tune(i,3,400);tune(i,2,400);tune(i,3,810);\r
+  JUMP: Col(11,7);Cur(2);\r
+  repeat\r
+   write('Would you like to ');Col(14,15);write('S');Col(11,7);\r
+   write('tart a new game, ');Col(14,15);write('R');Col(11,7);\r
+   write('estore or ');Col(14,15);write('Q');Col(11,7);write('uit? ');\r
+   read(kbd,CFlag);CFlag:=upcase(CFlag);Col(9,15);writeln(CFlag);\r
+   play(500,500,40);Col(11,7);\r
+  until CFlag in['S','R','Q'];Bor(0,0);Cur(3);\r
+  case CFlag of\r
+   'S':begin RL(170);delay(1500);window(1,1,80,25);clrscr;\r
+        close(R1);close(R2);close(S1);close(L1);close(C1);close(T1);close(T2);\r
+        assign(R1,'nova.com');execute(R1)\r
+       end;\r
+   'R':begin Min(126);Restore;if not en(126)then goto JUMP end;\r
+   'Q':begin window(1,1,80,25);clrscr;Col(3,7);\r
+        close(R1);close(R2);close(S1);close(L1);close(C1);close(T1);close(T2);\r
+        writeln('In ',Tic,' moves you scored ',Sc,\r
+                ' out of a possible 1000 points.');writeln;\r
+        Col(31,16);Bak(1,7);writeln('Good-bye!');writeln;Cur(1);\r
+        HALT;\r
+       end\r
+  end {case}\r
+ end; {DEAD}\r
+\r
+procedure DEAD; begin DEADMAIN end;\r
+procedure Call13; begin Default13 end;\r
+{************************* END OF DEFAULT ROUTINES **************************}\r
+\1a
\ No newline at end of file
diff --git a/src/INSTALL.PAS b/src/INSTALL.PAS
new file mode 100644 (file)
index 0000000..4f84e07
--- /dev/null
@@ -0,0 +1,140 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+program Install;  { Used to add FILES=16 to a CONFIG.SYS file. }\r
+\r
+uses crt, dos, turbo3;\r
+\r
+{$V-}\r
+label JUMP;\r
+\r
+var x,y,i    :integer;\r
+    Fil      :Text;\r
+    ComTest  :File;\r
+    TestStr  :string[200];\r
+    ch       :char;\r
+    result   :registers;\r
+\r
+procedure Pause(X:integer);\r
+ begin\r
+  textcolor(7);\r
+  if X=1 then write('Press any key to continue . . .')\r
+  else write('Press any key to end installation program . . .');\r
+  read(kbd,CH);textcolor(15);writeln;\r
+ end;\r
+\r
+BEGIN JUMP:\r
+textbackground(0);clrscr;textcolor(15);\r
+clrscr;with Result do begin ax:=$b00;bx:=$1;end;intr($10,result);\r
+gotoxy(25,2);writeln('SUPERNOVA INSTALLATION PROGRAM');\r
+gotoxy(25,3);writeln('------------------------------');writeln;\r
+textcolor(7);\r
+writeln;\r
+writeln('NOTE: Hard disk users don''t need to install SUPERNOVA! Hit <Ctrl-C> to abort.');\r
+writeln;\r
+writeln\r
+('This program will prepare a "boot" disk for SUPERNOVA.  The disk you wish');\r
+writeln\r
+('to make your "boot" disk MUST have DOS already on it (version 2.0 or higher.)');\r
+writeln\r
+('SUPERNOVA makes use of DOS file handles (explained in your DOS manual.)');\r
+writeln\r
+('Everytime you play SUPERNOVA you must use this "boot" disk--which you are in');\r
+writeln\r
+('the process of making--to power-on your computer.');writeln;\r
+writeln('This program will either:');\r
+writeln\r
+('* Create a CONFIG.SYS with the Files=16 DOS option,');\r
+writeln\r
+('* Add the Files=16 DOS option to a CONFIG.SYS file that is found on the disk,');\r
+writeln\r
+('* Modify a CONFIG.SYS file that already has the Files=# option in it.');\r
+writeln;textcolor(15);\r
+writeln('Insert the disk you wish to have installed for SUPERNOVA.');Pause(1);\r
+gotoxy(1,wherey-1);delline;\r
+writeln;\r
+assign(ComTest,'command.com');\r
+{$I-}\r
+reset(ComTest);\r
+{$I+}\r
+if IOResult<>0 then\r
+ begin textbackground(0);textcolor(15);close(ComTest);\r
+  writeln('This disk does not have the DOS system on it (it''s missing COMMAND.COM).',^g);\r
+  write('You must install a disk that already has DOS, please find another disk...');\r
+  textbackground(0);textcolor(7);\r
+  writeln;writeln;Pause(1);goto JUMP;\r
+ end;\r
+close(ComTest);\r
+write('Searching for CONFIG.SYS...');\r
+assign(Fil,'config.sys');\r
+{$I-}\r
+reset(Fil);\r
+{$I+}\r
+if IOResult<>0 then  { config.sys file needs to be created! }\r
+ begin\r
+  writeln('not found...will create one for you!');\r
+  rewrite(Fil);\r
+  writeln(Fil,'Files=16');\r
+  close(Fil);\r
+ end\r
+else                 { config.sys file exists already! }\r
+ begin\r
+  writeln('found...will now modify it correctly.');\r
+  append(Fil);\r
+  writeln(Fil);\r
+  writeln(Fil,'Files=16');\r
+  close(Fil);\r
+ end;\r
+writeln;\r
+writeln('Your CONFIG.SYS file is now configured correctly for SUPERNOVA.');\r
+Pause(1);\r
+textbackground(0);textcolor(15);\r
+clrscr;with Result do begin ax:=$b00;bx:=$1;end;intr($10,result);\r
+gotoxy(25,3);writeln('SUPERNOVA INSTALLATION PROGRAM');\r
+gotoxy(25,4);writeln('------------------------------');writeln;\r
+textcolor(7);\r
+writeln;\r
+writeln\r
+('From now on you MUST use this disk (or any other "boot" disk you make) when');\r
+writeln\r
+('you want to play SUPERNOVA, or the game will crash after you load it!');\r
+writeln;\r
+writeln\r
+('Simply turn on your computer with this "boot" disk in drive A: when you want');\r
+writeln\r
+('to play SUPERNOVA, then after you see the DOS prompt A> type in NOVA and');\r
+writeln\r
+('press <enter>.');writeln;\r
+writeln\r
+('Before you can play SUPERNOVA you must turn your computer off, then follow');\r
+writeln\r
+('the above instructions.');\r
+writeln;\r
+writeln('REMEMBER: If you boot from a hard disk you don''t need to make a "boot" disk.');\r
+writeln;Pause(2);\r
+\r
+textbackground(0);textcolor(7);\r
+clrscr;with Result do begin ax:=$b00;bx:=$0;end;intr($10,result);\r
+\r
+\r
+END.\1a
\ No newline at end of file
diff --git a/src/L1 b/src/L1
new file mode 100644 (file)
index 0000000..2545146
Binary files /dev/null and b/src/L1 differ
diff --git a/src/LINERITE.PAS b/src/LINERITE.PAS
new file mode 100644 (file)
index 0000000..5a26483
--- /dev/null
@@ -0,0 +1,148 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+{$c-}\r
+const\r
+  Max = 78;\r
+\r
+type\r
+  MaxLength = string[Max];\r
+  OneChar   = string[1];\r
+\r
+var\r
+  L1                : file of MaxLength;\r
+  Position,Counter,\r
+  Start,Stop,x      : integer;\r
+  Text1             : MaxLength;\r
+  Answer            : char;\r
+  Letter            : OneChar;\r
+  List              : boolean;\r
+\r
+procedure Diskwrite(text1: MaxLength; pointer: integer);\r
+  begin\r
+    seek(L1,pointer);\r
+    WRITE(L1,text1);\r
+    writeln('LINE decription ',pointer,\r
+            ' is written!  Size = ',filesize(L1));\r
+    close(L1);\r
+  end; {End of Diskwrite.}\r
+\r
+procedure Diskread(start,stop: integer);\r
+var\r
+counter : integer;\r
+text1   : MaxLength;\r
+  begin\r
+   assign(L1,'L1');\r
+   reset(L1);\r
+   seek(L1,start);\r
+    for counter:= start to stop do\r
+      begin\r
+        highvideo;\r
+        READ(L1,text1);\r
+        if list then writeln(lst,counter,':',text1)\r
+        else\r
+          begin\r
+            writeln('Here is LINE description # ',counter);\r
+            lowvideo;\r
+            writeln(text1);\r
+            highvideo;\r
+          end;\r
+      end;\r
+    close(L1);\r
+    write('The file contains ',filesize(L1),' LINE descriptions.');\r
+  end;  {End of Diskread.}\r
+\r
+procedure Beep;\r
+begin\r
+ if(length(text1)=68)then\r
+  begin sound(99);delay(50);nosound;end;\r
+end;\r
+\r
+BEGIN\r
+nosound;\r
+window(2,1,79,25);\r
+repeat          {Main loop.}\r
+  text1:='';\r
+\r
+writeln;\r
+writeln('Do you want to R)ead, W)rite or Q)uit?');\r
+read(kbd,answer);\r
+if upcase(answer) = 'Q' then begin writeln('FINISHED');halt;end;\r
+if upcase(answer) <> 'R' then       {Write to 'Rooms'.}\r
+    begin\r
+      writeln;writeln;\r
+      assign(L1,'L1');\r
+      textcolor(9);writeln('Now RESETing LINE files.');highvideo;\r
+            RESET(L1);\r
+      writeln;\r
+      writeln('Input a string not more than ',Max,' characters.',\r
+              '  ''\''-Ends string.');\r
+      x:=wherey;if(x>21)then x:=22;for stop:=1 to 3 do writeln;gotoxy(1,x);\r
+      textcolor(11);\r
+        repeat\r
+          read(trm,letter);\r
+          if letter = ^h then\r
+            begin\r
+              write(^h,' ',^h);\r
+              delete(text1,length(text1),2);\r
+            end;\r
+          beep;\r
+          if (letter <> '\') and (letter <> ^h) then text1:=text1+letter\r
+        until (length(text1)=Max) or (letter='\');\r
+        if letter = '\' then\r
+          begin\r
+            writeln;\r
+            highvideo;\r
+            writeln('Total of ',length(text1),' characters.');\r
+          end;\r
+        writeln; highvideo;\r
+        writeln('Total description length = ',length(text1),' characters.');\r
+      writeln('Now WRITING string to disk.');\r
+      writeln('  At what position?  (Next open is # ',filesize(L1),')');\r
+      textcolor(12);position:=position+1;readln(position);highvideo;\r
+      Diskwrite(text1,position);\r
+    end\r
+else                      {Read from 'Rooms'.}\r
+  begin\r
+    writeln;writeln;\r
+    writeln('To the S)creen or the P)rinter');\r
+    read(kbd,answer);\r
+    if(upcase(answer)='P')then List:=True else List:=False;\r
+    assign(L1,'L1');\r
+    reset(L1);\r
+    writeln('Filesize = ',filesize(L1),\r
+            '  (From 0 to ',filesize(L1)-1,')');\r
+    close(L1);\r
+    writeln('Enter starting position:');\r
+    textcolor(12);readln(start);highvideo;\r
+    if(start > filesize(L1)-5)then stop:=(filesize(L1)-1) else\r
+      begin\r
+        writeln('Enter final position:');\r
+        textcolor(12);readln(stop);highvideo;\r
+      end;\r
+    Diskread(start,stop);\r
+  end;  {End of else clause.}\r
+until false;     {End of Main loop.}\r
+close(L1);\r
+END.\r
+\1a
\ No newline at end of file
diff --git a/src/NOVA.PAS b/src/NOVA.PAS
new file mode 100644 (file)
index 0000000..5611c56
--- /dev/null
@@ -0,0 +1,1765 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+(****************************************************************************)\r
+(*                             SUPERNOVA VERSION B                          *)\r
+(*     >> This file contains the special room routines for Supernova <<     *)\r
+(*                         Programmer: Scott Miller                         *)\r
+(*                       << Began February 2, 1985 >>                       *)\r
+(*                       Copyright 1985 Scott Miller                        *)\r
+(****************************************************************************)\r
+\r
+{$C-,R-,V-,K-}\r
+\r
+const\r
+   VMax    = 95;     { Verbs   }\r
+   NMax    = 133;    { Nouns   }\r
+   PMax    = 11;     { Preps   }\r
+   AMax    = 4;      { Adverbs }\r
+   TMax    = 30;     { Timers  }\r
+   RMax    = 109;    { Rooms   }\r
+   MMax    = 29;     { Mov's   }\r
+   Null    = 0;\r
+   Legal   = 255;\r
+\r
+type\r
+   Str1    = string[1];\r
+   Str9    = string[9];\r
+   Str19   = string[19];\r
+   Str29   = string[29];\r
+   Str53   = string[53];\r
+   Str77   = string[77];\r
+   Str78   = string[78];\r
+   Str130  = string[131];\r
+   Str234  = string[234];\r
+   Str255  = string[255];\r
+   Entr    = record AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:integer;end;\r
+   LSet    = set of 1..NMax;\r
+   SaveSet = record\r
+              aInv    : set of 1..MMax;\r
+              aPStat  : set of 1..6;\r
+              aEvents : set of 1..255;\r
+              aSocket,\r
+              aWear   : set of 1..MMax\r
+             end;\r
+\r
+var\r
+   SetSave : SaveSet;\r
+   Sets    : file of SaveSet;\r
+   Objects : file of LSet;\r
+   Things  : file of byte;\r
+   Timers  : file of integer;\r
+   V{erb}  : array [1..VMax] of Str29;\r
+   N{oun}  : array [1..NMax] of Str29;\r
+   P{rep}  : array [1..PMax] of Str29;\r
+   A{dvb}  : array [1..AMax] of Str53;\r
+   RN{ame} : array [1..RMax]   of Str19;{ Name of each room stored here.      }\r
+   R{oom}  : array [1..MMax] of byte;   { Knows which room a Mov object is in.}\r
+   L{ocate}: array [0..RMax] of LSet;   { Locates all non-Mov objects.        }\r
+   T{imer} : array [1..TMax] of integer;\r
+   Dir     : array [1..8]    of Str9;\r
+   M{max}  : array [1..3]    of byte;    {******************}\r
+   PStat        : set of 1..6;           {* Player Status: *}\r
+   NoNounOnly   : set of 1..VMax;        {* [] = Healthy   *}\r
+   OneNounMaybe : set of 1..VMax;        {*  2 = Hungry    *}\r
+   ToNounOnly   : set of 1..VMax;        {*  3 = Sick      *}\r
+   ToNounMaybe  : set of 1..VMax;        {*  4 = Injured   *}\r
+   Events       : set of 1..255;         {*  5 = Tired     *}\r
+   Mov{able objects},                    {*  6 = Thirsty   *}\r
+   Inv{ventory},                         {******************}\r
+   Socket,\r
+   Wear         : set of 1..MMax;\r
+   Brief        : set of 1..RMax;\r
+   NounSet      : set of 1..NMax;\r
+   MugCon,         { All -Con variables are containers. }\r
+   FoodCon,\r
+   SatchCon,\r
+   HolstCon,\r
+   NicheCon,\r
+   PyraCon,\r
+   HingeCon,\r
+   PodumCon,\r
+   RobotCon,\r
+   CodeSet,\r
+   ScrnSet,\r
+   Vb,\r
+   N1,\r
+   N2,\r
+   Pr,\r
+   Md,\r
+   VNP,\r
+   Prm,      { Player Room }\r
+   EFlag,    { Error Flag  }\r
+   FFlag,    { Format Flag }\r
+   TFlag,    { Timer Flag  }\r
+   list,\r
+   Num,\r
+   Region,   { Knows what room to go in when exiting the player's ship }\r
+   AlienRm,\r
+   FriendRm,\r
+   SinkRm,\r
+   Serum,    { Begins at zero, dispenser jams at 2! }\r
+   Weight,\r
+   Old,      { for Block Reader }\r
+   Old2,\r
+   x,y,o   : byte;\r
+   Code,     { dials, etc }\r
+   Tic,\r
+   StoreR,   { Knows if the previous Room that was read is the same as the  }\r
+   StoreS,   { Room that is about to be read.  If so, then it simply writes }\r
+   StoreL,   { that variable again! }\r
+   StoreC,\r
+   RC,       { Endless Room Counter }\r
+   Sc,       { Score       }\r
+   TestC,\r
+   Floor,\r
+   i,j     : integer;\r
+   Input,\r
+   Again,\r
+   Line    : Str130;\r
+   Text1,\r
+   Text2,\r
+   Text4   : Str234;\r
+   Text3   : Str78;\r
+   Text5   : Str77;\r
+   R1,R2,S1: file of Str234;\r
+   L1      : file of Str78;\r
+   C1      : file of Str77;\r
+   T1,T2   : text[2500];\r
+   Identity,\r
+   VStr,\r
+   NStr,\r
+   PStr,\r
+   LastNoun,\r
+   Word    : Str29;\r
+   Result  : Entr;\r
+   Drive,\r
+   Log,\r
+   CFlag   : char;\r
+   Maze,\r
+   Crawl,\r
+   Color,\r
+   QFlag,\r
+   SFlag   : boolean;  { If TRUE then a Special action took place. }\r
+{----------}\r
+\r
+{$Ia:ADPAR.pas   <<<<<------  LOADS IN MANY PARSER COMMANDS  ***************}\r
+\r
+procedure Describe(Room:byte);\r
+ begin\r
+  col(9,9);write(RN[Prm]);col(11,7);writeln;\r
+  if(en(1))or(not(en(1))and not(Prm in Brief))then\r
+   begin Brief:=Brief+[Prm];\r
+    case Prm of   { Alternate Room Descriptions }\r
+     29:if en(35) then begin RS(130);RS(131)end else RR(29);\r
+     34:if en(30) then begin RS(81);RS(82)end else RR(34);\r
+     52:if en(39) then RS(126)else RR(52);\r
+     91:if en(51) then begin RS(157);RS(158)end else RR(91)\r
+     else RR(Room)\r
+    end;\r
+   end;\r
+  case Prm of     { For initial object's description }\r
+    1:if 16 in L[1] then RL(150);\r
+   107:if 19 in L[107] then RL(518);\r
+   38:if 17 in L[38] then RL(260);\r
+   41:if(18 in L[41])and not en(34)then RS(96);\r
+   55:if 11 in L[55] then RL(290);\r
+   63:if 20 in L[63] then RL(356);\r
+   73:if 28 in L[73] then RL(352);\r
+   80:if 17 in L[80] then RL(395);\r
+   94:begin if 26 in L[94] then RL(397);if 2 in L[94] then RL(398)end;\r
+  end;\r
+  for o:=1 to MMax do  { Print the objects that are lying in the room }\r
+   if r[o]=Prm then\r
+    begin\r
+     if o=6 then write('There is some ',FN(o),' here.')\r
+     else\r
+      begin Word:=FN(o);\r
+       if Word[1] in['a','e','i','o','u']then\r
+        write('There is an ',FN(o),' here.')else\r
+        write('There is a ',FN(o),' here.')\r
+      end;\r
+     if((o=29)and(MugCon<>Null))or((o=7)and(HolstCon<>Null))or\r
+       ((o=5)and(SatchCon<>Null))then write('  (with something in it)');\r
+     if(o=5)and(R[5]=20)then write('  (lying in some trash)');\r
+     if(o=7)and(7 in L[12])and(R[7]=12)then write('  (on the shelf)');\r
+     if o=NicheCon then write('  (on the niche)');\r
+     if(en(6))and(o=16)then write('  (on the seat)');\r
+     if o=PyraCon then write('  (in the pyramid''s slot)');\r
+     if o=HingeCon then write('  (inside the statue''s mouth)');\r
+     if o=PodumCon then write('  (on top of the podium)');\r
+     if(o=16)and en(37)then write('  (under the crystal)');\r
+     if o=RobotCon then write('  (in the robot''s panel)');\r
+     if o in Socket then write('  (in one of the regulator''s sockets)');\r
+     writeln;\r
+    end;\r
+ end; { Describe }\r
+\r
+procedure Move{New:byte};\r
+ begin SF;\r
+  if en(7) then RL(22) else\r
+  if en(8) then RL(23) else\r
+  begin\r
+   if(MugCon<>Null)and(29 in Inv)then\r
+    begin if Prm<>8 then L[Prm]:=L[Prm]-[MugCon];L[New]:=L[New]+[MugCon]end;\r
+   if(SatchCon<>Null)and(5 in Inv)then\r
+    begin L[Prm]:=L[Prm]-[SatchCon];L[New]:=L[New]+[SatchCon]end;\r
+   if(HolstCon<>Null)and(7 in Inv)then\r
+    begin L[Prm]:=L[Prm]-[HolstCon];L[New]:=L[New]+[HolstCon]end;\r
+   Prm:=New;\r
+   Describe(Prm);\r
+  end\r
+ end; { Move }\r
+\r
+\r
+{$Ia:VOCAB.pas    <<<<<-------  Loads in VOCABULARY LIST  **********}\r
+\r
+\r
+{****************************** ROOM ROUTINES *******************************}\r
+overlay procedure Room1;   { The Player's Ship }\r
+begin\r
+case Prm of\r
+ 1:case Vb of  { Bridge }\r
+   2,13:Door(2,50);\r
+   11:RL(199);\r
+   22,24,28:case N1 of\r
+        37,38,55,44:if Md<>Null then RL(534)else RB(3,11);103:RL(317);\r
+        35:if en(6)then RL(542)else RL(543);\r
+        59:case Region of\r
+            1:RS(46);\r
+            2:RS(63);\r
+            4:RS(T[9]+46);\r
+           end\r
+       end;\r
+   35:if N1 in[16,35] then\r
+       if(here(16))and(en(6))then\r
+        if not en(4) then\r
+         begin Add(7);sound(440);RS(19);T[6]:=4;for x:=1 to random(30)+9 do\r
+          begin y:=random(6000)+60;play(y,y,70);delay(9)end;Score(10,67)\r
+         end\r
+        else begin Add(7);RL(149); for x:=1 to random(9)+9 do\r
+            begin y:=random(9999);play(y,y,30);delay(55)end;end\r
+       else RL(141);\r
+   56:if en(7)and en(6)then\r
+       if T[6]>0 then\r
+        if input=Identity then\r
+         begin RS(21);T[6]:=Null;Score(15,4);play(400,400,200)end\r
+        else RL(142)\r
+       else\r
+        if input='r2/20-8 d2/vega' then\r
+         if not(Region in[2,4]) then\r
+          begin RS(28);Add(26);Min(27);play(600,600,99)end\r
+         else RL(154)\r
+        else\r
+         begin Min(26);RS(39);Min(27);play(600,600,99)end\r
+       else RL(179);\r
+   44:if en(7)and en(6)then\r
+       case N1 of\r
+        43:begin play(750,750,200);  { Purple }\r
+            if Region=4 then\r
+             if T[9]=11 then begin Score(5,68);Region:=2;T[13]:=3;TFlag:=2;\r
+              n[126]:='hinged mouth\mouth\hinge\';\r
+              RB(9,11);Explode(30)end\r
+             else RS(64)\r
+            else RL(198)\r
+           end;\r
+        40:begin play(900,900,200);  { Cyan }\r
+            if en(26) then begin RS(37);Add(27)end\r
+            else RL(195)\r
+           end;\r
+        41:begin play(600,600,200);  { Tan }\r
+            if en(27) then\r
+             if not(en(22))and not(en(23))then\r
+              begin col(28,23);RL(180);col(11,7);\r
+               RS(38);T[8]:=7;\r
+               for x:=1 to 6 do\r
+                for y:=30 to 200 do begin sound(y);delay(5)end;nosound;\r
+              end\r
+             else begin RS(40);play(500,999,3);Min(26);Min(27)end\r
+            else if en(26)then RL(184)else RL(185)\r
+           end;\r
+       end {case}\r
+      else RL(179);\r
+   39:if(16 in NounSet)and en(6)then\r
+       if en(7)then RL(575)else begin Min(6);RL(145);SFlag:=false;end;\r
+   end; {Vb}\r
+ end; {main case}\r
+end; { Room1 }\r
+{----------}\r
+overlay procedure Room2;   { The Player's Ship }\r
+begin\r
+case Prm of\r
+ 2:case Vb of  { Forward Corridor }\r
+   9,13,51:if(n1 in[0,62,64,71])then\r
+     if en(23) then begin RL(237);case Region of 1:move(22);2:move(24);end end\r
+     else RL(99);\r
+   1,11:Door(1,50);\r
+   2:move(3);\r
+   4:move(4);\r
+   24,28:if NStr='hatch' then if en(23) then RL(163)else RL(99);\r
+   50:if N1=78 then\r
+       if en(22)then begin RL(160);Min(22)end else\r
+        begin RL(161);Add(22);\r
+         if T[8]>0 then begin RS(40);play(500,999,3);T[8]:=0;Min(27)end end;\r
+   41:if NStr='hatch' then\r
+       if Region<>4 then\r
+        if en(22) then\r
+         begin RL(96);Add(23);\r
+          if(not en(44))and(Region=2)then\r
+           begin Add(44);RL(327);for i:=1 to 400 do sound(random(3500)+999);\r
+            for i:=7500 downto 500 do begin sound(random(i)+i);\r
+             sound(random(3500)+2000)end;\r
+            for i:=1 to 300 do sound(random(3500)+2500);nosound;\r
+           end\r
+         end\r
+        else RL(97)\r
+       else begin RS(45);DEAD end;\r
+   53:if N1=56 then\r
+       if en(23) then begin RL(98);Min(23)end else say('hatch','closed');\r
+   end; {Vb}\r
+\r
+ 3:case Vb of  { Rear Corridor }\r
+   1,13:move(2);\r
+   3:move(6);\r
+   4:move(7);\r
+   28,31:if N1 in[55,81] then begin RB2(4,12);Pause;end;\r
+   24,41,76:if N1=55 then if Md in[1,4]then RL(533)else begin RS(22);DEAD;end;\r
+   end; {Vb}\r
+ end; {main case}\r
+end; { Room2 }\r
+{----------}\r
+overlay procedure Room3;   { The Player's Ship }\r
+begin\r
+case Prm of\r
+\r
+ 4:case Vb of  { Ship's Lab }\r
+   3,13:move(2);\r
+   28,22:case N1 of\r
+          90:RS(23); 52:RS(26); 38:RS(27); 55:RS(31);\r
+          81,119:begin RB(10,14);Pause;end;\r
+          64:if NicheCon<>Null then\r
+              writeln('There is a ',FN(NicheCon),' sitting on the niche.')\r
+             else RL(152);\r
+         end;\r
+   31:if N1 in[81,119] then begin RB(10,14);Pause;end;\r
+   41..44,88:if N1=55 then RL(174);\r
+   33:if N2=64 then\r
+       if N1 in[3,4,8,9,12,17,29] then\r
+        if Pr in[1,5,10] then\r
+         if NicheCon=Null then\r
+          begin Van(N1);R[N1]:=4;NicheCon:=N1;RL(147)end\r
+         else RL(148)\r
+        else crazy\r
+       else RL(146);\r
+   54:if N1 in[38,90]then begin RL(321);Serum:=1;end;\r
+   56:begin Serum:=Serum+1;\r
+       if Serum<3 then\r
+        if NicheCon=Null then RS(24)\r
+        else if NicheCon<>29 then\r
+         writeln('A small amount of serum drips onto the ',FN(NicheCon),' and ',\r
+                  'dries up.')\r
+         else\r
+          if MugCon=Null then begin MugCon:=92;RS(25);L[4]:=L[4]+[92];\r
+           if input='6' then Add(42)else Min(42)end\r
+          else\r
+           if MugCon in[79,92,99] then\r
+            writeln('The serum mixes with the ',FN(MugCon),' inside the mug.')\r
+           else\r
+            writeln('The serum drips on the ',FN(MugCon),' inside the mug and',\r
+                    ' quickly evaporates.')\r
+       else RS(135)\r
+      end; {type}\r
+\r
+   end; {Vb}\r
+\r
+ 5:case Vb of  { Sanitary Facilities }\r
+   2,13:move(6);\r
+   22,28:if N1=98 then RL(122);\r
+   end; {Vb}\r
+\r
+ 6:case Vb of  { Sleep Chamber }\r
+   1,11:move(5);\r
+   4,13:move(3);\r
+   28:case N1 of 80:RL(159); 69:RS(29) end;\r
+   51:if N1=69 then Vb:=35;\r
+   end; {Vb}\r
+\r
+ 7:case Vb of  { Cargo Area }\r
+   3,13:move(3);\r
+   22,28:if N1=32 then RL(155);\r
+   24:if N1=32 then RL(156);\r
+   41,53:if N1=32 then RL(157);\r
+   39:if 32 in NounSet then RL(158);\r
+   end; {Vb}\r
+\r
+ end; {main case}\r
+end; { Room3 }\r
+{----------}\r
+overlay procedure Room4;   { The Tavern }\r
+begin\r
+case Prm of\r
+ 8:case Vb of  { Tavern }\r
+   2,13:if en(7)then RL(22)else begin RL(93);move(13)end;\r
+   3,9,11,51:if en(7)then RL(22)\r
+       else if(N1 in[null,71])then begin RL(283);move(9)end\r
+       else if N1=126 then RL(473);\r
+   31:if N1 in[81,119]then RB(2,9);\r
+   35:case N1 of\r
+      83:if T[1] in[4..7,11..17] then RS(8) else begin Add(19);Add(7);RL(30)end;\r
+      35,84,85:begin Add(7);RL(30);if N1 in[35,84] then Add(2)else Min(2)end;\r
+      end;\r
+   65:if N1=124 then\r
+       if en(2) then\r
+        if T[1] in[5..7,11..18] then\r
+         if(md=1)or(en(18))then begin RL(31);Score(20,3);\r
+          if not en(18)then begin Add(18);T[1]:=8;end end\r
+         else RL(32)\r
+        else RL(41)\r
+       else RL(33);\r
+   28:case N1 of 56:RL(371);81,119:RB(2,9);111:RL(44)end;\r
+   41:if N1=56 then RL(394);\r
+   39:if(29 in NounSet)and not en(21)then RL(86);\r
+   54,93:if N1=111 then begin RS(32);DEAD;end;\r
+   42,44,75:if N1=111 then RL(474);\r
+   59:if N1=126 then RL(473);\r
+   20:if N1=126 then RL(178);\r
+   end; {Vb}\r
+\r
+ 9:case Vb of  { West Hallway }\r
+   1,2:RL(89);\r
+   3,11:move(10);\r
+   28:if N1=56 then RL(92);\r
+   4,10,13,51:if(n1 in[null,71])then begin RL(284);move(8)end;\r
+   54:if(N1=56)and(T[1]<1)then RS(13)else RL(123);\r
+   41,88:if N1=56 then\r
+          case N2 of 0:RL(107);3:RL(101)else RL(137)end;\r
+   end; {Vb}\r
+\r
+10:case Vb of  { Central Hallway }\r
+   1:RL(89);\r
+   4,13:move(9);\r
+   3:move(11);\r
+   28:if N1=56 then if en(11)then RL(370)else RL(92);\r
+   2,11:if en(11) then begin RL(90);Score(5,69);move(12);Min(11)end\r
+        else RL(89);\r
+   41,88:if N1=56 then case N2 of 0:RL(107);3:begin;end else RL(137)end;\r
+   54:if N1=56 then RL(123);\r
+   end; {Vb}\r
+\r
+11:case Vb of  { East Hallway }\r
+   1,2:RL(89);\r
+   4,13:move(10);\r
+   28:if N1=56 then RL(92);\r
+   41,88:if N1=56 then\r
+          case N2 of 0:RL(107);3:RL(101)else RL(137)end;\r
+   54:if N1=56 then RL(123);\r
+   53:if N1=56 then begin RL(92);Min(11)end;\r
+   end; {Vb}\r
+\r
+12:case Vb of  { Suite #4 }\r
+   1,13:if en(7)then RL(22)else\r
+        if en(11) then begin RL(91);move(10);Min(11)end else RL(92);\r
+   41,88:if N1=56 then begin RL(104);Add(11)end;\r
+   22,28,76:\r
+      case N1 of\r
+       56:if en(11)then RL(370)else RL(92);\r
+       80:if Md<>Null then RL(535)else RL(536);\r
+       87:if 7 in L[12] then begin RL(106);R[7]:=12;Score(5,24)end;\r
+       98:RL(121);\r
+      end;\r
+   53:if N1=56 then begin RL(92);Min(11)end;\r
+   39:if(7 in NounSet)or(30 in NounSet)then Score(5,24);\r
+   end; {vb}\r
+\r
+ end; {main case}\r
+end; { Room4 }\r
+{----------}\r
+overlay procedure Room5;   { Barre-An Planet }\r
+ procedure Zap; begin for x:=1 to 29 do if R[x]=Prm then Van(x) end;\r
+begin\r
+case Prm of\r
+13:case Vb of  { Crossroads }\r
+   1,11:if en(7)then RL(22)else begin RL(93);move(8)end;\r
+   2:move(18);\r
+   3:move(16);\r
+   4:move(14);\r
+   28,31:if N1 in[81,88] then begin Score(5,70);RB2(5,6);Pause;end;\r
+   41:if N1=56 then RL(394);\r
+   end; {Vb}\r
+\r
+14:case Vb of  { Dusty Road }\r
+   3:move(13);\r
+   4:begin RC:=1;move(15)end;\r
+   end; {Vb}\r
+\r
+15:case Vb of  { Dusty Road (endless) }\r
+   3:begin Zap;RC:=RC-1;if RC<1 then move(14)else move(15)end;\r
+   4:begin Zap;RC:=RC+1;move(15);if RC=40 then\r
+      writeln('You notice something unusual.')end;\r
+   11,13:if RC=40 then begin RL(135);Explode(3);play(1,9999,0);play(9999,1,0);\r
+          walls(10);Explode(5);TFlag:=4;Inv:=[1,6,12,17,20,26,28,29];move(78);\r
+          T[3]:=120;T[4]:=120;T[5]:=120;PStat:=[];MugCon:=79;Bor(0,0)end;\r
+   end; {Vb}\r
+\r
+16:case Vb of  { Gravel Road }\r
+   2,11:begin RL(108);move(20)end;\r
+   3:begin RC:=1;move(17)end;\r
+   4:move(13);\r
+   28,31:if N1=81 then RL(109);\r
+   end; {Vb}\r
+\r
+17:case Vb of  { Gravel Road (endless) }\r
+   3:begin Zap;RC:=RC+1;if(RC=80)and(Inv<>[])then\r
+       begin move(17);RS(17);Inv:=[];end\r
+      else move(17)end;\r
+   4:begin Zap;RC:=RC-1;if RC<1 then move(16)else move(17)end;\r
+   end; {Vb}\r
+\r
+18:case Vb of  { Paved Road }\r
+   1:move(13);\r
+   2:begin RC:=1;move(19);end;\r
+   4,11:move(21);\r
+   end; {Vb}\r
+\r
+19:case Vb of  { Paved Road (endless) }\r
+   1:begin Zap;RC:=RC-1;if RC<1then move(18)else move(19)end;\r
+   2:if RC=60 then RS(18) else begin Zap;RC:=RC+1;move(19)end;\r
+   end; {Vb}\r
+\r
+20:case Vb of  { General Store }\r
+   1,13:move(16);\r
+   28:if N1=132 then RL(88);\r
+   20,26,76:if(N1 in[86,87])and(5 in L[20])then\r
+       begin RS(14);R[5]:=20;Score(15,20)end;\r
+   39:if(5 in NounSet)or(30 in NounSet)then Score(15,20);\r
+   end; {Vb}\r
+\r
+21:case Vb of  { Gravel Lot }\r
+   3,13:move(18);\r
+   1,4..8:RL(27);\r
+   2,9,51:if N1 in[Null,62,71] then begin RL(234);move(22)end;\r
+   28,31:if n1=81 then begin Score(5,71);RB(1,7);Pause;end;\r
+   end; {Vb}\r
+\r
+22:case Vb of  { Top of Ship (Barre-An) }\r
+   1:begin RL(235);move(21)end;\r
+   10,11,51:if(n1 in[null,62,64,71])then\r
+        if en(23) then begin RL(236);move(2);Score(15,72)end else RL(99);\r
+   24,28,31:case N1 of\r
+       56:if en(23) then RL(163)else RL(99);81:begin RB(1,7);Pause;end end;\r
+   50:if N1=78 then\r
+       if en(22)then begin RL(94);Min(22)end else begin RL(95);Add(22)end;\r
+   41:if N1=56 then\r
+       if en(22) then begin RL(96);Add(23);Score(5,73)end else RL(97);\r
+   53:if N1=56 then\r
+       if en(23) then begin RL(98);Min(23)end else say('hatch','closed');\r
+   59:if(N1 in[49,122])or(VStr='jump off')then move(21);\r
+   end; {Vb}\r
+\r
+ end {main case}\r
+end; { Room5 }\r
+{----------}\r
+overlay procedure Room6;   { Jungle Planet }\r
+begin\r
+case Prm of\r
+23:case Vb of  { Deep Pit }\r
+    1..13,51:RL(217);\r
+    28,31:case N1 of  73:RL(218); 81,116:RS(80) end;\r
+    75:if N1=73 then move(34);\r
+   end;\r
+\r
+24:case Vb of { Top of Ship (Jungle planet) }\r
+   3:begin RL(235);move(25)end;\r
+   10,11,51:if(n1 in[null,62,64,71])then\r
+        if en(23) then begin Score(5,74);RL(236);move(2)end else RL(99);\r
+   24,28:if N1=56 then if en(23) then RL(163)else RL(99);\r
+   50:if N1=78 then\r
+       if en(22)then begin RL(94);Min(22)end else begin RL(95);Add(22)end;\r
+   41:if N1=56 then\r
+       if en(22) then begin RL(96);Add(23)end else RL(97);\r
+   53:if N1=56 then\r
+       if en(23) then begin RL(98);Min(23)end else say('hatch','closed');\r
+   59:if(N1 in[49,122])or(VStr='jump off')then move(25);\r
+   end; {Vb}\r
+\r
+25:case Vb of { Sandy Clearing }\r
+   4,9,51:if N1 in[Null,62,71] then begin RL(234);move(24)end;\r
+   1:begin move(26);Score(5,75)end;\r
+   1..8:RL(200);\r
+   end; {Vb}\r
+\r
+26:case Vb of { Winding Path 1 }\r
+   2:move(25);\r
+   5:begin RS(65);DEAD;end;\r
+   59:if N1=66 then\r
+       if VStr='jump in' then begin RL(288);DEAD;end\r
+       else begin RS(66);move(27);Score(25,76)end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   28:if N1=66 then RS(85);\r
+   35,62:if N1=66 then begin RL(288);DEAD;end;\r
+   75,76:if N1=66 then RL(285);\r
+   83:if N1=66 then RL(286);\r
+   84:if N1=66 then begin RL(287);DEAD;end;\r
+   end;\r
+\r
+27:case Vb of { Winding Path 2 }\r
+   6:move(28);\r
+   8,11:begin RS(65);DEAD;end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   59:if N1=66 then\r
+       if VStr='jump in' then begin RL(288);DEAD;end\r
+       else begin RS(66);move(26)end;\r
+   28:if N1=66 then RS(85);\r
+   35,62:if N1=66 then begin RL(288);DEAD;end;\r
+   75,76:if N1=66 then RL(285);\r
+   83:if N1=66 then RL(286);\r
+   84:if N1=66 then begin RL(287);DEAD;end;\r
+   end;\r
+\r
+28:case Vb of { Winding Path 3 }\r
+   7:move(27);\r
+   6:move(29);\r
+   8:begin RS(67);DEAD;end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   28:if N1=112 then RS(86);\r
+   24:if N1=112 then RL(553);\r
+   end;\r
+\r
+29:case Vb of { Winding Path 4 }\r
+   7:move(28);\r
+   5:if en(29) then move(32) else\r
+      begin col(10,7);RS(72);col(11,7);T[12]:=146;Add(29);move(32)end;\r
+   9,51:if N1 in[Null,112] then begin RL(201);move(30)end;\r
+   6:begin RS(69);Prm:=31;T[11]:=4;end;\r
+   8:if en(35)or en(130)then begin RC:=1;move(59);Score(20,77)end;\r
+   1..8:RL(200);\r
+   28:case N1 of 112:RL(238);120:RL(544);\r
+       113:if Md=1 then begin RL(314);Add(130)end end;\r
+   59:if N1=120 then begin RL(541);Prm:=31;T[11]:=4;end;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room6 }\r
+{----------}\r
+overlay procedure Room7;   { Jungle Planet }\r
+begin\r
+case Prm of\r
+30:case Vb of { Top of Tree }\r
+   9:RL(202);\r
+   10,51:if N1 in[Null,112] then begin RL(203);move(29)end;\r
+   1..8:RL(200);\r
+   20..28:if N1=68 then RS(79);\r
+   18,17:RL(603);\r
+   end;\r
+\r
+31:case Vb of { Quicksand Pit }\r
+   1..8:RL(206);\r
+   9,51:if N1=112 then RL(204);\r
+   39,42,76:if N1=47 then\r
+     if en(78)then RL(549)else begin T[11]:=0;RS(71);Prm:=29;Score(25,78)end;\r
+   28:case N1 of 47:RL(239); 120:RL(240);end\r
+   end;\r
+\r
+32:case Vb of { Winding Path 5 }\r
+   1:move(33);\r
+   8:begin move(29);if en(35) and not en(40) then begin RL(314);Add(40)end end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   end;\r
+\r
+33:case Vb of { Winding Path 6 }\r
+   2:move(32);\r
+   6:if not en(28)then begin RS(68);Add(28);move(34)end else move(34);\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   end;\r
+\r
+34:case Vb of { Front of Pyramid }\r
+   7:move(33);\r
+   41..44,54,75,88:if N1=56 then RL(220) else\r
+      if N1=126 then\r
+       if HingeCon<>Null then\r
+        begin writeln('The hinged mouth opens, revealing a ',FN(HingeCon),\r
+                      ' inside.');Add(31);R[HingeCon]:=34;Score(25,79)end\r
+       else begin RL(226);Add(31)end;\r
+    53:if N1=56 then RL(220) else\r
+       if N1=126 then\r
+        begin RL(227);if HingeCon<>Null then R[HingeCon]:=Null;Min(31)end;\r
+   1,11:if en(30) then begin Score(25,80);move(35)end else RL(219);\r
+   39:if(PyraCon in NounSet)or((30 in Nounset)and(PyraCon=9))then\r
+       begin RL(225);Min(30);SFlag:=false;end else\r
+      if HingeCon in NounSet then begin RL(228);SFlag:=false;end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   92:if N1 in[Null,49,122] then begin RL(216);move(23) end;\r
+   31:if N1 in[81,89,119] then begin RB(8,7);Pause;end;\r
+   28,24:case N1 of 68:RS(87); 89:RS(88); 81,119:begin RB(8,7);Pause;end;\r
+          64:if PyraCon=Null then RL(241)else\r
+              writeln('The small slot contains a ',FN(PyraCon),'.');\r
+          56:if en(30) then RL(244)else RL(245);\r
+          126:if en(31)then\r
+               if HingeCon=Null then RL(242)else\r
+               writeln('The open mouth contains a ',FN(HingeCon),'.')\r
+              else RL(243);\r
+         end;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room7 }\r
+{----------}\r
+overlay procedure Room8;   { Inside Pyramid (Top Level) }\r
+begin\r
+case Prm of\r
+35:case Vb of  { Vestibule }\r
+   2,13:move(34);\r
+   10,11,51:if N1 in[Null,71] then\r
+     if en(32) then move(36) else begin RS(84);Add(32);move(36)end;\r
+   28:if N1=56 then if en(30) then RL(244)else RL(245);\r
+   end;\r
+\r
+36:case Vb of  { Descending Stairs }\r
+   10,11,51:if N1 in[Null,71] then move(37);\r
+   9,13:move(35);\r
+   end;\r
+\r
+37:case Vb of  { Halcyon Hall }\r
+   1:if T[16]>1 then begin RL(278);DEAD;end else move(39);\r
+   3:move(38);\r
+   10,51:if N1 in[Null,71] then move(42);\r
+   9,13:move(36);\r
+   end;\r
+\r
+38:case Vb of  { Departure Room }\r
+   4,13:move(37);\r
+   28:case N1 of\r
+       73:if 10 in L[38] then begin RL(253);RL(252)end else RL(253);\r
+       10:if 10 in L[38] then RL(254);\r
+       30:if 17 in L[38] then begin SF;writeln('It''s a grey disk!')end\r
+      end;\r
+   26:if(N1=10)and(10 in L[38])then RL(255);\r
+   42,44:if N1 in[10,73] then RL(256);\r
+   75:if N1=73 then RL(257);\r
+   47,83,84:RL(258);\r
+   39:if(10 in L[38])and(10 in NounSet)then\r
+       begin L[38]:=L[38]+[17];RL(259);Score(15,81);SFlag:=false;end\r
+      else if(30 in NounSet)and(17 in L[38])then R[17]:=38;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room8 }\r
+{----------}\r
+overlay procedure Room9;   { Inside Pyramid (Top Level) }\r
+begin\r
+case Prm of\r
+39:case Vb of  { Holey Hall }\r
+   2,13:if T[15]>1 then begin RL(269);move(37);Score(5,82)end else move(37);\r
+   4,11:if T[15]>1 then begin RS(95);DEAD;end else move(40);\r
+   end;\r
+\r
+40:case Vb of  { Pyramid Lobby }\r
+   1,11:if T[14]>1 then\r
+         begin n[68]:='podium\alter\column\';WRITE('');move(41)end;\r
+   3,13:if(18 in Inv)or(4 in Inv)then begin Brief:=Brief-[39];move(39);\r
+          T[15]:=3;T[16]:=9;col(10,7);RS(93);\r
+          for i:=500 to 5500 do sound(random(i)+random(i));\r
+          for j:=1 to 7000 do sound(random(i)+random(i));\r
+          for j:=i downto 500 do sound(random(j)+random(j));nosound;\r
+         end\r
+        else move(39);\r
+   42,44,51,75,84,94:\r
+     if N1=68 then\r
+      if T[14]>1 then RL(246) else\r
+       if en(33) then begin T[14]:=7;RL(261);Walls(8);end\r
+       else begin T[14]:=7;Score(20,33);RS(89);Walls(8);end;\r
+   28:case N1 of 56:if T[14]>1 then RL(370)else RL(92);68:RL(247)end;\r
+   end;\r
+\r
+41:case Vb of  { Treasure's Keeper }\r
+   2,13:if T[14]>1 then begin n[68]:='pyramid\podium\';WRITE('');move(40)end\r
+        else RL(248);\r
+   28,22:case N1 of\r
+          56:if T[14]>1 then RL(370)else RL(92);\r
+          68:if PodumCon=Null then RL(264) else\r
+             writeln('There is a ',FN(PodumCon),' on the podium.');\r
+          18:if(18 in L[41])and not en(34)then RS(90);\r
+         end;\r
+   33:if N2=68 then\r
+       if Pr=1 then\r
+        if N1 in Mov then\r
+         if PodumCon=Null then\r
+          begin Van(N1);R[N1]:=41;PodumCon:=N1;RL(266)end\r
+         else RL(268)\r
+       else crazy;\r
+   75:if N1=68 then RL(276);\r
+   50:if N1=68 then begin RL(277);Walls(8);T[14]:=7;end;\r
+   39:if(30 in NounSet)and(18 in L[41])then R[18]:=41;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room9 }\r
+{----------}\r
+overlay procedure Room10;   { Pyramid Maze }\r
+begin\r
+case Prm of\r
+42:case Vb of  { Ladder Room }\r
+   1..13:if Maze then case Vb of 9,13:move(37);6:move(43);3,8:move(42)end\r
+         else case Vb of 9,13:move(37)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+43:case Vb of  { Shifting Room NW }\r
+   1..8:if Maze then case Vb of 7:move(42)end\r
+        else case Vb of 2:move(44);8:move(45)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+44:case Vb of  { Shifting Room W }\r
+   1..8:if Maze then case Vb of 7:move(47);2:move(45)end\r
+        else case Vb of 1:move(43);5:move(44)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+45:case Vb of  { Shifting Room SW }\r
+   1..8:if Maze then case Vb of 1,3:move(45)end\r
+        else case Vb of 1:move(45);6:move(43)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+46:case Vb of  { Shifting Room N }\r
+   1..8:if Maze then\r
+         case Vb of 1:begin RS(98);DEAD;end;\r
+          7:begin Score(50,84);move(50)end end\r
+        else\r
+         case Vb of 1:begin RS(98);DEAD;end;\r
+          7:begin Score(50,84);move(50)end;3:move(48);8:move(45)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+47:case Vb of  { Shifting Room S }\r
+   1..8:if Maze then case Vb of 6:move(44)end\r
+        else case Vb of 3:move(49);1:move(47);4:move(45)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+48:case Vb of  { Shifting Room NE }\r
+   1..8:if Maze then case Vb of 7:move(49);3,4:move(48)end\r
+        else case Vb of 4:move(46);1,2:move(48)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+49:case Vb of  { Shifting Room SE }\r
+   1..8:if Maze then case Vb of 5:move(48)end\r
+        else case Vb of 4:move(47);2:move(45)end;\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   28:if N1=116 then RL(547);\r
+   end;\r
+\r
+50:case Vb of  { Stairway Room E }\r
+   6:move(46);\r
+   4,10,13,51:move(51);\r
+   41..44,50,55:if N1=116 then RL(325);\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room10 }\r
+{----------}\r
+overlay procedure Room11;   { Inside Pyramid (Bottom Level) }\r
+begin\r
+case Prm of\r
+51:case Vb of  { Lower Stairway }\r
+   3,9,13,51:move(50);\r
+   1:move(52);\r
+   end;\r
+\r
+52:case Vb of  { Misty Passage }\r
+   2:if T[19]>1 then begin RS(129);DEAD;end else move(51);\r
+   4:if en(35)then begin RL(305);DEAD;end else move(53);\r
+   33:if(N1=11)and(11 in Inv)then\r
+       if Pr in[1,5,7,10] then\r
+        if N2 in[34,49,64] then\r
+         if T[19]>0 then\r
+          begin Score(40,39);Van(11);L[52]:=L[52]+[11];T[19]:=0;RS(127)end\r
+         else begin Van(N1);R[N1]:=52;RL(586)end;\r
+   39:if(11 in NounSet)and en(39)then RL(307);\r
+   28:case N1 of 11:RL(312); 64:RL(313) end;\r
+   42,44,55:case N1 of 11:RL(307); 34:RL(308); end;\r
+\r
+   end;\r
+\r
+53:case Vb of  { Damp Passage }\r
+   2:begin move(54);if en(35)then begin RS(122);DEAD;end end;\r
+   3:if T[18]>1 then begin RL(305);DEAD;end else move(52);\r
+   59:if N1=66 then\r
+       begin RS(125);Brief:=Brief-[52];move(52);T[18]:=0;T[19]:=3;\r
+        col(10,7);RL(306);Walls(12);Score(20,85)end;\r
+   end;\r
+\r
+54:case Vb of  { Dark Passage }\r
+   1:move(53);\r
+   2:move(55);\r
+   end;\r
+\r
+55:case Vb of  { Circular Chamber }\r
+   1:begin Brief:=Brief-[54];move(54);\r
+      if en(35)then\r
+       if Crawl=true then\r
+        begin col(10,7);RS(119);RS(120);Pause;L[53]:=L[53]+[66];Score(20,86);\r
+         Brief:=Brief-[53];move(53);col(10,7);RS(121);Walls(12);T[18]:=4;end\r
+       else begin col(10,7);RS(118);DEAD;end end;\r
+   2:if Md=1 then RS(230)else\r
+      if random(2)=1 then begin Prm:=58;RL(563)end else begin RS(100);DEAD;end;\r
+   3:begin move(56);if 11 in Inv then begin RS(102);DEAD;end end;\r
+   4:if Md=1 then RS(231)else begin RS(99);DEAD;end;\r
+   39:if(11 in NounSet)then begin RS(101);SFlag:=false;end\r
+      else if(30 in Nounset)and(11 in L[55])then R[11]:=55;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room11 }\r
+{----------}\r
+overlay procedure Room12;   { Inside Pyramid (Bottom Level) }\r
+begin\r
+case Prm of\r
+56:case Vb of  { The Erusaert }\r
+   2,11:if en(36) then begin Score(5,88);move(57)end;\r
+   4,13:if T[17]>4 then begin RS(108);DEAD;end else move(55);\r
+   22,28:case N1 of\r
+         1:if not en(35) then RL(292);\r
+         34:if 1 in L[56]then RL(291)\r
+            else if not en(35)then begin RS(103);L[56]:=L[56]+[1]end;\r
+         49:RS(105);\r
+         56:RL(370);\r
+         66:RL(295);\r
+         68:RS(104);\r
+         110:RL(293);\r
+         end;\r
+   26:if N1 in[49,68] then RL(295);\r
+   39:if 1 in NounSet then\r
+       begin\r
+        if not en(35)then RL(300) else\r
+        if T[17]>4 then\r
+         begin RS(113);T[17]:=3;Van(1);Inv:=Inv+[1];Score(50,87)end\r
+       end\r
+      else if(30 in NounSet)then RL(578);\r
+   37:if not(1 in NounSet)and(not en(35))then RL(300);\r
+   35,51,62:if N1=68 then begin RS(106);DEAD;end;\r
+   59:begin RS(107);DEAD;end;\r
+   41,88:if N1 in[68,110] then\r
+          if N2=4 then\r
+           if not en(35)then\r
+            if here(16)and en(37)then\r
+             begin RS(117);T[17]:=6;L[56]:=L[56]+[1,56];Add(35);Min(37)end\r
+            else begin RS(111);DEAD;end\r
+           else RL(273)\r
+          else RL(296);\r
+   33:if N1=16 then\r
+       begin\r
+        if Pr in[1,10] then\r
+         if N2 in[49,1] then\r
+          begin Van(16);Add(37);R[16]:=56;\r
+           if not en(35)then\r
+            if Pr=1 then RL(297)else RL(298)\r
+           else RL(297)\r
+          end\r
+         else\r
+          if(N2=34)and(Pr=10)then\r
+           begin writeln('Done.');Van(16);SF;R[16]:=56;end\r
+          else if N2=68 then RL(299)\r
+       end\r
+      else\r
+       if N2 in[68,110] then\r
+        if Pr=1 then RL(299) else\r
+        if Pr=5 then\r
+         if N1=4 then\r
+          if not en(35)then\r
+           if here(16)and en(37)then\r
+            begin RS(117);T[17]:=6;L[56]:=L[56]+[1];Add(35);Min(37)end\r
+           else begin RS(111);DEAD;end\r
+          else RL(273)\r
+         else RL(296);\r
+   54,75,76:case N1 of\r
+            1:if 1 in L[56] then RL(300);\r
+            34:RL(304);\r
+            end;\r
+   end; {Vb}\r
+\r
+ end {main case}\r
+end; { Room12 }\r
+{----------}\r
+overlay procedure Room13;   { Inside Pyramid (Bottom Level) }\r
+begin\r
+case Prm of\r
+57:case Vb of  { Solar Chamber }\r
+   1,13:move(56);\r
+   28:case N1 of 56:RL(370);72,82,116:RS(149);109:RS(150)end;\r
+   44,75:if N1=103 then begin Prm:=58;RS(233);Walls(5);Static end;\r
+   end; {Vb}\r
+\r
+58:case Vb of  { Eternal Trap }\r
+   9,13,51:RL(554);\r
+   92:RL(555)\r
+   end;\r
+\r
+59:case Vb of  { Overgrown Path }\r
+   5:begin RC:=RC-1;if RC<1 then begin RL(309);move(29)end else RL(310)end;\r
+   8:begin RC:=RC+1;if RC>7 then begin RL(309);move(60)end else RL(310)end;\r
+   1..8:RL(200);\r
+   9,51:if N1=112 then RL(204);\r
+   end;\r
+\r
+60:case Vb of  { Antenna Building (Outside) }\r
+   4,11:begin Door(61,25);\r
+         if not en(43)then begin RS(137);Score(10,43)end end;\r
+   5:move(59);\r
+   1..8:RL(200);\r
+   28:case N1 of 96:RL(323);115:RL(324)end;\r
+   41..44,54,75,88:if N1=56 then RL(315);\r
+   9,51:if N1=112 then RL(204)else RL(316);\r
+   end;\r
+\r
+61:case Vb of  { Monitor Outpost }\r
+   3,13:Door(60,25);\r
+   2,11:move(62);\r
+   28,24,31:case N1 of 37,59:RS(133);38,44:RL(322);93:RL(319);\r
+             94:RS(134)end;\r
+   42,44,75:if N1 in[37,38,44] then RL(318);\r
+   end;\r
+\r
+62:case Vb of  { Booth (Jungle Planet) }\r
+   1,13:move(61);\r
+   42,44,75:\r
+     case N1 of\r
+      37,38:RL(318);\r
+      44:begin RS(138);\r
+          for y:=60 downto 1 do for x:=800 downto 1 do sound(x*y);\r
+          nosound;TFlag:=3;Brief:=Brief-[70];Score(10,89);\r
+          for x:=1 to MMax do if R[x]=62 then R[x]:=70;move(70)\r
+         end\r
+     end;\r
+   28,24,31:case N1 of 37,59:RS(133);38:RL(322);93:RL(319);\r
+             94:RS(134);44:RL(320);end;\r
+   end; {Vb}\r
+\r
+63:case Vb of  { Booth (Ringed Planet) }\r
+   1,13:RL(328);\r
+   42,44,75:case N1 of\r
+            37,38:RL(318);\r
+            44:begin RS(138);\r
+                for y:=60 downto 1 do for x:=800 downto 1 do sound(x*y);\r
+                nosound;TFlag:=3;Brief:=Brief-[70];\r
+                for x:=1 to MMax do if R[x]=63 then R[x]:=70;move(70)\r
+               end\r
+            end;\r
+   28,24,31:case N1 of 37,59:RS(133);38:RL(322);93:RL(319);\r
+             94:RS(134);44:RL(320);end;\r
+   39:if(30 in NounSet)and(20 in L[63])then R[20]:=63;\r
+   end; {Vb}\r
+\r
+ end {main case}\r
+end; { Room13 }\r
+{----------}\r
+overlay procedure Room14;   { Inner Planet }\r
+begin\r
+case Prm of\r
+64:case Vb of  { Lobby }\r
+   1,13:begin DOpen(99);RS(139);DEAD;end;\r
+   2,11:move(65);\r
+   28:case N1 of 35:RL(330);49,122:RL(334);72,116:begin Score(5,90);RS(148)end;\r
+       81:RB(5,11);86:RL(333);127:RL(351)end;\r
+   31:if N1=81 then RB(5,11);\r
+   20,24:if N1=127 then RS(142);\r
+   54:if N1=127 then if Md=3 then begin RL(537);DEAD;end else RL(538);\r
+   end;\r
+\r
+65:case Vb of  { North Corridor }\r
+   1:move(64);\r
+   2:move(66);\r
+   4:Door(68,20);\r
+   28:if N1=56 then RL(92);\r
+   end;\r
+\r
+66:case Vb of  { Central Corridor }\r
+   1:move(65);\r
+   2:move(67);\r
+   3:if T[20]>1 then begin Score(15,91);move(73)end else RL(92);\r
+   4:move(72);\r
+   28:case N1 of 56:if T[20]>1 then RL(370)else RL(92);64:RL(335)end;\r
+   33:if N2=64 then\r
+       if Pr=5 then\r
+        if N1=12 then\r
+         begin RL(336);T[20]:=3;DOpen(20);Score(5,92)end\r
+        else RL(137);\r
+   end; {Vb}\r
+\r
+67:case Vb of  { South Corridor }\r
+   1:move(66);\r
+   2,11:Door(75,5);\r
+   4:move(71);\r
+   end;\r
+\r
+71:case Vb of  { Monitor Station }\r
+   3:move(67);\r
+   28:case N1 of 59:if CodeSet=4 then RL(353)else RL(355);116:RL(354)end;\r
+   31:if N1=59 then\r
+       if CodeSet=4 then begin RB2(11,14);Pause;end else RL(355);\r
+   end;\r
+\r
+72:case Vb of  { Reactor Control }\r
+   3:move(66);\r
+   28,24:case N1 of 128:RL(560);\r
+       37,38:RL(339);46:if Md<>Null then begin Score(5,93);RL(343)end\r
+              else RS(145);\r
+       55:if en(46)then\r
+           if RobotCon<>Null then\r
+            writeln('The robot''s panel contains a ',FN(RobotCon),'.')\r
+           else RL(346)\r
+          else RL(344);\r
+      end;\r
+   33:if N2=55 then\r
+       if Pr=5 then\r
+        if en(46)then\r
+         if RobotCon=Null then\r
+          if N1 in[3,4,8,12,17]then\r
+           begin Van(N1);RL(347);R[N1]:=72;RobotCon:=N1;end\r
+          else RL(137)\r
+         else RL(348)\r
+        else RL(344);\r
+   41:if N1 in[55,46] then\r
+       if RobotCon=Null then RL(558)else\r
+        begin R[RobotCon]:=72;Add(46);Score(25,94);\r
+         writeln('The panel slides open, revealing a ',FN(RobotCon),' inside.')\r
+        end;\r
+   53:if N1=55 then begin Van(RobotCon);Min(46);RL(344)end;\r
+   42,44:case N1 of\r
+          37,38,44:begin RL(340);Walls(9);gotoxy(43,wherey-1);col(28,31);\r
+                    writeln('BOOM!');Explode(32);DEAD;end;\r
+          46:if(VStr='turn on')or(VStr='activat')or\r
+               (VStr='turn off')then RL(341)\r
+             else if(not en(94))and(not en(93))then begin RL(342);RL(559)end\r
+                  else RL(342)\r
+         end;\r
+   end; {Vb}\r
+\r
+ end {main case}\r
+end; { Room14 }\r
+{----------}\r
+overlay procedure Room15;   { Inner Planet }\r
+begin\r
+case Prm of\r
+68:case Vb of  { Decontamination }\r
+   3,13:if en(45)then Door(65,20) else RL(331);\r
+   4,11:Door(69,20);\r
+   28,24:case N1 of 131:RL(329);end;\r
+   42,44,75:if N1=44 then begin RL(332);Add(45);play(20,99,7);play(99,99,600);\r
+      play(99,20,7);Score(10,95)end;\r
+   end;\r
+\r
+69:case Vb of  { Waiting Room }\r
+   2,11:Door(70,50);\r
+   3,13:Door(68,20);\r
+   28,24:case N1 of 35:RL(330);131:RL(329);end;\r
+   end;\r
+\r
+70:case Vb of  { Transporter Booth }\r
+   1,13:Door(69,50);\r
+   28,24:case N1 of 44:RS(140);93:RL(319);94:RS(141);end;\r
+   42,44,75:\r
+     if N1 in[40..43]then\r
+      begin Brief:=Brief-[62,63,78];RS(138);Min(45);\r
+       for y:=60 downto 1 do for x:=800 downto 1 do sound(x*y);nosound;\r
+        case N1 of\r
+         40:begin for x:=1 to MMax do if R[x]=70 then R[x]:=78;\r
+             TFlag:=4;move(78);Score(15,97)end;\r
+         41:begin for x:=1 to MMax do if R[x]=70 then R[x]:=62;\r
+             TFlag:=2;move(62)end;\r
+         43:begin for x:=1 to MMax do if R[x]=70 then R[x]:=63;\r
+             TFlag:=2;move(63);Score(10,96)end\r
+        end;\r
+      end;\r
+   end; {Vb}\r
+\r
+{ 71 and 72 are in Room14 }\r
+\r
+ end {main case}\r
+end; { Room15 }\r
+{----------}\r
+overlay procedure Room16;   { Inner Planet }\r
+begin\r
+case Prm of\r
+73:case Vb of  { Communications }\r
+   1:move(74);\r
+   4:Door(66,20);\r
+   28:case N1 of\r
+       48:begin RL(366);writeln('The dial is set at number ',CodeSet,'.')end;\r
+       115:RL(350);121:RL(367);127:RL(351)\r
+      end;\r
+   50:if N1=48 then\r
+       if Pr>Null then\r
+        if(code>0)and(code<11)then\r
+         begin RL(363);CodeSet:=Code;if Code=4 then Score(10,98)end\r
+        else RL(362)\r
+       else RL(365);\r
+   end; {Vb}\r
+\r
+74:case Vb of  { Computer Station }\r
+   2:move(73);\r
+   28:case N1 of 37:RL(349);38:RL(322);52:RL(37);\r
+       59:begin RB2(7,10);col(26,23);RL(364);Score(5,47)end end;\r
+   31:if N1=59 then begin RB2(7,10);col(26,23);RL(364);Add(47)end;\r
+   end;\r
+\r
+75:case Vb of  { Elevator  1st Floor }\r
+   1:Door(67,5);\r
+   42,44,75:begin RS(143);play(20,42,20);sound(42);delay(5500);RL(338);\r
+   play(42,20,20);Prm:=76;for x:=1 to MMax do if R[x]=75 then R[x]:=76;end;\r
+   end;\r
+\r
+76:case Vb of  { Elevator  2nd  Floor }\r
+   1:begin Score(5,99);Door(77,5)end;\r
+   42,44,75:begin RS(144);play(20,42,20);sound(42);delay(5500);RL(338);\r
+             play(42,20,20);Prm:=75;for x:=1 to MMax do if R[x]=76 then R[x]:=75;end;\r
+   end;\r
+\r
+77:case Vb of  { Observatory }\r
+   2:Door(76,5);\r
+   28:case N1 of 34:RL(562);104:if Nstr='eyepiec' then RL(561)else RS(146)end;\r
+   24:if N1=104 then\r
+       if 20 in Wear then begin Score(5,100);RS(147)end\r
+       else begin RL(368);RL(369)end;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room16 }\r
+{----------}\r
+overlay procedure Room17;   { Planetship }\r
+begin\r
+case Prm of\r
+78:case Vb of  { Icy Platform }\r
+   3,11:door(79,25);\r
+   28:case N1 of\r
+       54:RL(379);93:RL(380);96:RL(381);103:RL(500);115:RL(350);118:RL(382)\r
+      end;\r
+   59:if N1=54 then begin RL(400);DEAD;end;\r
+   end;\r
+\r
+79:case Vb of  { Confirmation Port }\r
+   4,13:door(78,25);\r
+   28:case N1 of 44:RL(383);64:RL(384);116:RL(600)end;\r
+   44,75:if N1=44 then begin RS(156);Score(10,50);\r
+          play(20,99,7);play(99,99,600);play(99,20,7)end;\r
+   33:if N2=64 then\r
+       if Pr=5 then\r
+        if N1=17 then\r
+         begin Explode(1);sound(50);RS(151);\r
+          for i:=9000 downto 1 do\r
+           for j:=1 to 4 do sound(random(i div 2 + 400)+i);nosound;\r
+          Van(17);L[80]:=L[80]+[17];move(80);Add(7);T[22]:=3;T[26]:=91;\r
+          delay(900);sound(70);RL(399);delay(999);nosound;Score(25,101);\r
+          n[40]:='sockets\socket\';\r
+          n[82]:='laser beam\laser\beam\';\r
+          n[110]:='speaker\';\r
+         end\r
+        else RL(137);\r
+   end;\r
+\r
+80:case Vb of  { Inspection Lobby }\r
+   4,13:door(81,65);\r
+   9:RL(523);\r
+   28:case N1 of 55:RL(385);86:if 17 in L[80]then RL(395);72,116:RS(148)end;\r
+   41..44,88,53:if N1=55 then RL(405);\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room17 }\r
+{----------}\r
+overlay procedure Room18;   { Planetship }\r
+begin\r
+case Prm of\r
+81:case Vb of  { Circular Corridor }\r
+   2:move(82);\r
+   3,11:door(80,65);\r
+   6:move(88);\r
+   28:case N1 of 72:RL(386)end;\r
+   end;\r
+\r
+82:case Vb of  { Circular Corridor }\r
+   1:move(81);\r
+   3:door(96,50);\r
+   4:door(93,5);\r
+   8:move(83);\r
+   28:case N1 of 72,103:RL(387)end;\r
+   end;\r
+\r
+83:case Vb of  { Circular Corridor }\r
+   2,11:door(95,25);\r
+   4:move(84);\r
+   5:move(82);\r
+   28:case N1 of 72,115:RL(388)end;\r
+   end;\r
+\r
+93:case Vb of  { Central Elevator }\r
+   3,11,13:case Floor of\r
+      1:door(82,5);\r
+      2..5,30..40,89..95,170..230,333..444,543..600,793..812:RL(413);\r
+      480:if en(64)then\r
+           begin door(98,5);delay(999);RS(217);Score(20,102);\r
+            for x:=1 to 7 do begin i:=random(7000)+1500;j:=random(600)+400;\r
+             play(i,i,j)end;\r
+            RL(516)end\r
+           else RL(413)\r
+      else begin door(97,5);Score(5,103)end\r
+     end;\r
+   28:if N1 in[44,52] then RS(188);\r
+   56:begin val(input,i,testc);\r
+       if testc=0 then\r
+        if(i>0)and(i<837)then\r
+         if i<>Floor then\r
+          begin j:=i;i:=abs(floor-i);Floor:=j;RL(411);play(20,36,35);\r
+           sound(37);for x:=1 to 200 do delay(i div 4);\r
+           RL(412);play(36,20,35);\r
+          end\r
+         else RL(410)\r
+        else RL(410)\r
+       else crazy\r
+      end\r
+   end;\r
+\r
+95:case Vb of  { Transmission Room }\r
+   1,13:door(83,25);\r
+   28:if N1 in[38,121]then RS(191);\r
+   42,44,75:if N1=44 then begin Score(5,104);RL(404);play(1200,1200,99);\r
+     if en(48)then Min(48)else Add(48)end;\r
+   end;\r
+\r
+96:case Vb of  { Station Control }\r
+   4,13:door(82,50);\r
+   28:case N1 of 38:RS(192);59:begin Score(5,105);RB2(11,5);Pause;end end;\r
+   31:if N1=59 then begin Score(5,105);RB2(11,5);Pause;end;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room18 }\r
+{----------}\r
+overlay procedure Room19;   { Planetship }\r
+begin\r
+case Prm of\r
+84:case Vb of  { Circular Corridor }\r
+   2,11:door(94,65);\r
+   3:move(83);\r
+   6:move(85);\r
+   28:case N1 of 72,46:RL(389)end;\r
+   end;\r
+\r
+85:case Vb of  { Circular Corridor }\r
+   1:move(86);\r
+   4,11:door(92,65);\r
+   7:move(84);\r
+   28:case N1 of 72:RL(390)end;\r
+   end;\r
+\r
+86:case Vb of  { Circular Corridor }\r
+   2:move(85);\r
+   4,11:if T[21]>1 then begin Score(15,107);move(91);\r
+      if en(52)then T[23]:=2;end else RL(92);\r
+   5:move(87);\r
+   28:case N1 of 56:if T[21]>1 then RL(370);64:RL(335);72,69:RL(391)end;\r
+   33:if N2=64 then\r
+       if Pr=5 then\r
+        if N1=12 then\r
+         begin RL(336);T[21]:=3;DOpen(15);Score(5,106)end\r
+        else RL(137);\r
+   end;\r
+\r
+87:case Vb of  { Circular Corridor }\r
+   1,11:door(89,65);\r
+   3:move(88);\r
+   8:move(86);\r
+   28:case N1 of 72:RL(392)end;\r
+   end;\r
+\r
+88:case Vb of  { Circular Corridor }\r
+   1,11:door(90,65);\r
+   4:move(87);\r
+   7:move(81);\r
+   28:case N1 of 72:RL(392)end;\r
+   end;\r
+\r
+89:case Vb of  { Reactors West }\r
+   2,13:door(87,65);\r
+   3:move(90);\r
+   28:case N1 of 38:RL(414);59:RL(401);128:RS(189)end;\r
+   31:if N1=59 then\r
+       case ScrnSet of\r
+        1:RB2(8,6);   { Orange Crystal }\r
+        2:RB2(10,10); { Green Crystal  }\r
+        3:RB2(12,14); { Yellow Crystal }\r
+        4:begin RB2(14,9);  { Blue Crystal (Cracked) }\r
+           x:=wherex;y:=wherey;gotoxy(40,14);col(25,23);write('LACITIRC');\r
+           gotoxy(x,y);Score(20,108)\r
+          end;\r
+       end;\r
+    44,75:if N1=44 then\r
+           begin RL(402);ScrnSet:=ScrnSet+1;if ScrnSet>4 then ScrnSet:=1;\r
+            for x:=1 to 30 do\r
+             begin i:=random(7000)+999;play(i,i,50);delay(random(15)+5)end\r
+           end else\r
+          if N1 in[38,128]then RL(403);\r
+     42,75:if N1 in[38,128]then RL(403);\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room19 }\r
+{----------}\r
+overlay procedure Room20;   { Planetship }\r
+begin\r
+case Prm of\r
+90:case Vb of  { Reactors East }\r
+   2,13:door(88,65);\r
+   4:move(89);\r
+   28:case N1 of 38:RL(393);59:RL(402);128:RS(190)end;\r
+   31:if N1=59 then begin Score(5,109);RB2(9,random(14)+1)end;\r
+   42,44,75:if N1 in[38,128]then RL(403);\r
+   end;\r
+\r
+91:case Vb of  { Emergency Override }\r
+   3,13:begin if T[25]>2 then\r
+      begin Col(10,7);RL(424);T[25]:=Null;T[24]:=Null;T[26]:=14;Add(52)end;\r
+      door(86,15);\r
+      if(T[24]>0)and not en(64)then begin T[24]:=Null;T[26]:=14;Add(52)end\r
+     end;\r
+   4,11:RL(92);\r
+   28:case N1 of 37,38,51:RL(393);44:RL(469);59:RL(468);64:RL(335);\r
+       69:if en(51)then RL(426)else if Md=1 then RL(467)else RS(182);\r
+      end;\r
+   31:if N1=59 then RL(468);\r
+   24:if N1=69 then if en(51)then crazy else RL(427);\r
+   75:if N1=69 then if en(51)then crazy else RL(428);\r
+   54:case N1 of\r
+       69:if en(51)then RL(426)else\r
+          if N2 in[0,60]then RL(601)else\r
+          if not(N2 in[10,18,29])then RL(602)else\r
+           begin RS(160);L[91]:=L[91]+[123];L[91]:=L[91]-[44,129];T[23]:=15;\r
+            Add(51)end;\r
+      end;\r
+   42,44:if(N1=69)and not en(51)then RL(470)else\r
+         if N1=44 then begin RL(471);play(20,440,1);play(440,440,500);\r
+          play(440,20,1);end;\r
+   41,88:if N1=69 then if en(51)then crazy else RL(467);\r
+   39:if N1=95 then RL(442);\r
+   49:if N2=123 then\r
+       if Pr=1 then\r
+        if N1=1 then\r
+         if(T[24]>1)and(T[24]<6)then\r
+          begin T[24]:=Null;T[25]:=7;RS(181)end\r
+         else RL(429)\r
+        else RL(425);\r
+   33:if N2=64 then\r
+       if Pr=5 then\r
+        if N1=12 then RL(577);\r
+   end;\r
+\r
+92:case Vb of  { Climate Control }\r
+   3,13:door(85,65);\r
+   28,31:case N1 of 59:RS(152);end;\r
+   end;\r
+\r
+ end {main case}\r
+end; { Room20 }\r
+{----------}\r
+overlay procedure Room21;   { Planetship }\r
+begin\r
+case Prm of\r
+94:case Vb of  { Maintenance }\r
+   1,13:door(84,65);\r
+   28:case N1 of\r
+       51:RL(489);\r
+       87:begin RL(490);Score(15,110);\r
+           if not en(49)then\r
+            begin Score(10,49);RL(396);L[94]:=L[94]+[26];end\r
+           else if 26 in L[94] then RL(397);\r
+          end;\r
+      end; {case}\r
+   39:begin\r
+       if(30 in NounSet)then\r
+        begin if 2 in L[94] then R[2]:=94;if 26 in L[94] then R[26]:=94;end;\r
+       if(51 in NounSet)then\r
+        begin RL(491);NounSet:=NounSet-[51];\r
+         if not(NounSet=[])then SFlag:=false end\r
+      end;\r
+   end;\r
+\r
+97:case Vb of  { Cryogenic Chamber }\r
+   4,11,13:door(93,5);\r
+   28:if N1=69 then RS(193);\r
+   18:begin RS(194);Van(N1)end;\r
+   end;\r
+\r
+98:case Vb of  { Identity Booth }\r
+   2,11:begin door(99,0);\r
+      if T[27]>1 then begin Col(10,7);RS(208);delay(999);Blast;DEAD end\r
+      else begin T[27]:=2000;Col(10,7);RL(504);play(22,22,999);RS(210);\r
+            delay(999);Blast;RL(505)end\r
+     end;\r
+   4,13:door(93,5);\r
+   28,31:case N1 of 81,119:if NStr='message' then RL(517)else RB2(13,13);\r
+          59:RL(517)end;\r
+   end;\r
+\r
+99:case Vb of  { Security Tunnel #1 }\r
+   1,13:door(98,0);\r
+   2,11:begin Score(15,111);door(100,0)end;\r
+   4:RL(506);\r
+   41,88:if N1=55 then RL(509);\r
+   28:case N1 of 46:RS(216);55:RL(510);88:RL(511)end;\r
+   42,44,75:if N1=46 then begin RL(513);T[27]:=2000;Add(7)end;\r
+   39:if 88 in NounSet then begin RL(513);T[27]:=2000;Add(7)end;\r
+   end;\r
+\r
+100:case Vb of  { Security Tunnel #2 }\r
+    1,13:begin door(99,0);Col(10,7);RS(208);delay(999);Blast;DEAD end;\r
+    2,11:begin door(101,0);\r
+       if T[28]>1 then begin Col(10,7);RS(209);delay(999);Blast;DEAD end\r
+       else begin T[28]:=2000;Col(10,7);RL(504);play(22,22,999);RS(211);\r
+             delay(999);Blast;RS(212);PStat:=PStat+[4];T[29]:=14;end;\r
+      end;\r
+    41,88:if N1=55 then RL(512);\r
+    end;\r
+\r
+ end {main case}\r
+end; { Room21 }\r
+{----------}\r
+overlay procedure Room22;   { Planetship (Lower Level) }\r
+begin\r
+case Prm of\r
+101:case Vb of  { Security Tunnel #3 }\r
+    1,13:door(100,0);\r
+    2,11:begin Region:=5;door(102,0);Score(20,112);\r
+       if not(20 in Wear)then RL(492)end;\r
+    41,88:if N1=55 then RL(509);\r
+    28:case N1 of 46:RS(216);55:RL(510);88:RL(511)end;\r
+    42,44,75:if N1=46 then begin RL(513);T[28]:=2000;Add(7)end;\r
+    39:if 88 in NounSet then begin RL(513);T[28]:=2000;Add(7)end;\r
+    end;\r
+\r
+102:if(Vb in[1..14,16,20..31,33..44,48..64,73..76,83..85,88..94])and\r
+      not(20 in Wear)then RL(491) else\r
+    case Vb of  { North Catwalk }\r
+    1,11,13:begin Region:=Null;Door(101,0);Col(10,7);RS(209);delay(999);\r
+       Blast;DEAD end;\r
+    7:move(103);\r
+    8:move(105);\r
+    24,25,28:case N1 of 34,49:RL(493);\r
+      131:if NStr='catwalk' then RL(494)else begin RS(195);RS(196)end end;\r
+    75,76:if N1=42 then RL(495);\r
+    51,59:if N1 in[42,54,131]then begin RL(496);DEAD;end;\r
+    end;\r
+\r
+103:if(Vb in[1..14,16,20..31,33..44,48..64,73..76,83..85,88..94])and\r
+      not(20 in Wear)then RL(491) else\r
+    case Vb of  { East Catwalk }\r
+    6:move(102);\r
+    8:move(104);\r
+    24,25,28:case N1 of 34,49:RL(493);\r
+      131:if NStr='catwalk' then RL(494)else begin RS(195);RS(196)end end;\r
+    75,76:if N1=42 then RL(495);\r
+    51,59:if N1 in[42,54,131]then begin RL(496);DEAD;end;\r
+    end;\r
+\r
+104:if(Vb in[1..14,16,20..31,33..44,48..64,73..76,83..85,88..94])and\r
+      not(20 in Wear)then RL(491) else\r
+    case Vb of  { South Catwalk }\r
+    2,13:begin Region:=Null;Door(106,5);Score(20,113)end;\r
+    5:move(103);\r
+    6:move(105);\r
+    24,25,28:case N1 of 34,49:RL(493);\r
+      131:if NStr='catwalk' then RL(494)else begin RS(195);RS(196)end end;\r
+    75,76:if N1=42 then RL(495);\r
+    51,59:if N1 in[42,54,131]then begin RL(496);DEAD;end;\r
+    end;\r
+\r
+105:if(Vb in[1..14,16,20..31,33..44,48..64,73..76,83..85,88..94])and\r
+      not(20 in Wear)then RL(491) else\r
+    case Vb of  { West Catwalk }\r
+    5:move(102);\r
+    7:move(104);\r
+    24,25,28:case N1 of 34,49:RL(493);\r
+      131:if NStr='catwalk' then RL(494)else begin RS(195);RS(196)end end;\r
+    75,76:if N1=42 then RL(495);\r
+    51,59:if N1 in[42,54,131]then begin RL(496);DEAD;end;\r
+    end;\r
+\r
+ end {main case}\r
+end; { Room22 }\r
+{----------}\r
+overlay procedure Room23;   { Planetship (Lower Level) }\r
+ label JUMP;\r
+begin\r
+case Prm of\r
+106:case Vb of  { Junction }\r
+    1:begin Region:=5;Door(104,5);if not(20 in Wear)then RL(492)end;\r
+    2:RL(328);\r
+    3:door(108,5);\r
+    4,11,13:door(107,20);\r
+    41..44,88:if N1=56 then RL(532);\r
+    end;\r
+\r
+107:case Vb of  { Conference Room }\r
+    3,13:door(106,20);\r
+    39:if(30 in NounSet)and(19 in L[107])then R[19]:=107;\r
+    end;\r
+\r
+108:case Vb of  { Reactor Regulators }\r
+    4,13:door(106,5);\r
+    41:if N1=55 then\r
+        if not en(65)then\r
+         begin Add(65);L[108]:=L[108]+[40];Score(5,114);\r
+          for x:=22 to 25 do R[x]:=108;RL(519);RL(520);\r
+         end\r
+        else RL(521);\r
+    53:if en(65)then RL(522)else RL(523);\r
+    28,24:case N1 of 55:if en(65)then goto JUMP else RL(523);\r
+         40:JUMP:\r
+           begin RL(525);\r
+            for x:=1 to 25 do if x in Socket then\r
+             if x=22 then writeln('  An ',FN(x),' is in one of the sockets.')\r
+             else writeln('  A ',FN(x),' is in one of the sockets.')\r
+           end;\r
+          end;\r
+    33:if(N2 in[40,55])and en(65)then\r
+        begin i:=0;for x:=1 to 25 do if x in Socket then i:=i+1;\r
+         if i<4 then\r
+          if N1 in Inv then\r
+           if N1 in[1,22..25]then\r
+            begin\r
+             writeln('The ',FN(N1),' fits perfectly in an open socket.');\r
+             Van(N1);Socket:=Socket+[N1];R[N1]:=108;\r
+             i:=0;for x:=1 to 25 do if x in Socket then i:=i+1;\r
+             if(i>3)and(1 in Socket) and not(25 in Socket)then\r
+              begin { ####  You have won the game!!!!!  #### }\r
+               Col(10,7);delay(999);Static;Static;RS(221);Static;Static;\r
+               delay(999);explode(1);sound(20);RS(222);delay(999);RS(223);\r
+               Pause;Bor(0,0);writeln;Score(55,115);\r
+               Add(66);Prm:=109;PStat:=[];PlayerInput(Line);\r
+               Col(10,15);for x:=224 to 229 do RS(x);\r
+               writeln;writeln;Pause;writeln;\r
+               WON;  {  <<<-----  END OF GAME !!! *************}\r
+              end\r
+            end\r
+           else writeln('The ',FN(N1),' won''t fit in any of the sockets.')\r
+          else writeln('First you must have the ',FN(N1),'.')\r
+         else RL(526)\r
+        end;\r
+    end;\r
+\r
+ end {main case}\r
+end; { Room23 }\r
+{----------}\r
+{**************************** END OF ROOM ROUTINES **************************}\r
+\r
+\r
+{$Ia:DEFAULT.pas   <<<<<------  LOADS IN DEFAULT ROUTINES  *******************}\r
+\r
+\r
+BEGIN { Main Program }\r
+Assign1;Assign2;Assign3;Assign4;Assign5;\r
+Names1;Names2;Names3;\r
+Title;\r
+Init1;Init2;Init3;\r
+Place1;Place2;\r
+Describe(Prm);\r
+\r
+repeat\r
+\r
+PlayerInput(LINE);\r
+if length(input)>0 then Parser_Syntax(input);\r
+if EFlag=Legal then\r
+ begin\r
+  MoreThanOne;\r
+  if Present then\r
+   if T[2]>1 then\r
+    begin RL(11);Time1;\r
+     case TFlag of 1:Time2A;2:Time2B;3:Time2C;4:Time2D;end end\r
+   else\r
+    begin SFlag:=false; if(Vb=71)and(Prm=55)and not en(35)then Vb:=1;\r
+     case Prm of\r
+       1                          :Room1;\r
+       2,3                        :Room2;\r
+       4..7                       :Room3;\r
+       8..12                      :Room4;\r
+      13..22                      :Room5;\r
+      23..29                      :Room6;\r
+      30..34                      :Room7;\r
+      35..38                      :Room8;\r
+      39..41                      :Room9;\r
+      42..50                      :Room10;\r
+      51..55                      :Room11;\r
+      56                          :Room12;\r
+      57..63                      :Room13;\r
+      64..67,71,72                :Room14;\r
+      68..70                      :Room15;\r
+      73..77                      :Room16;\r
+      78..80                      :Room17;\r
+      81..83,93,95,96             :Room18;\r
+      84..89                      :Room19;\r
+      90..92                      :Room20;\r
+      94,97..100                  :Room21;\r
+      101..105                    :Room22;\r
+      106..108                    :Room23;\r
+     end; { Room Defaults }\r
+     if not SFlag then\r
+      case Vb of\r
+       1..8,30,82,87              :Default0;\r
+       16,17,18                   :Default1;\r
+       9..15,32,35,51,77,79,62    :Default2;\r
+       28,47                      :Default3;\r
+       37,39                      :Default4;\r
+       46,64                      :Default5;\r
+       66..69,71                  :Default6;\r
+       31,65,75,80,81,83,84,93,95 :Default7;\r
+       41,50,88                   :Default8;\r
+       20,22,24,26,70,76          :Default9;\r
+       33                         :Default10;\r
+       42,44,73,86,89,90,94       :Default11;\r
+       48,54                      :Default12;\r
+       19,53,56,72,74,78,91       :Default13;\r
+       21,25,49,59,92             :Default14\r
+      end;\r
+     if en(128)then DEAD;Min(128);\r
+     if not(Vb in[77..79,82,86,87,95])then\r
+      begin Time1;case TFlag of 1:Time2A;2:Time2B;3:Time2C;4:Time2D;end end;\r
+    end;\r
+ end;\r
+\r
+until false;\r
+END. { ADGAME2 (Supernova) }\r
+\1a
\ No newline at end of file
diff --git a/src/R1 b/src/R1
new file mode 100644 (file)
index 0000000..75ea464
--- /dev/null
+++ b/src/R1
@@ -0,0 +1,3 @@
+êScott Miller  (story idea, development, mapping and programming)              4206 Mayflower Drive                                                          Garland, Texas  75043      (214) 278-6747                                     êAround you are the ship's controls.  The main control panel, situated like a  desk in the middle of the room, contains most of the ship's primary functions.Just behind the control panel is the command chair.  A large monitor fills theêThis is a small corridor that runs through the center of the ship.  There's a passage to the port, a door to the fore of the ship, a ladder leading up, and the corridor continues to the aft of the ship.  Above you is the hatch, which ÏYou're at the end of the ship's central corridor.  Passages head into rooms tothe starboard and port.  The corridor leads back toward the fore of the ship. There's a small panel on the rear wall of the ship. the rear wall of the ship.êThis is the ship's laboratory, yet it looks more like the ship's garbage area.Most of the equipment has been damaged by one too many rough landings.  Of allthe machines here the only one that still looks like it functions is the serum¥A combination cleaning area and bathroom, equipted with all of the essentials.There's a sink with a single knob on it here.  To the aft is your sleeping    quarters.h a single knob on it here.  To the aft is your sleeping    quarters.ÇThis is the ship's sleep and rest area.  There's a bed here, for short-term   rests, plus a cryogenic tube, for long-term space travel.  The sanitary       facilities are in a small room to the fore.es are in a small room to the fore.\99This is the ship's main storage area.  Currently is filled will empty crates  left over from your last mine shipment.  The corridor is starboard of here.ates  left over from your last mine shipment.  The corridor is starboard of here.êThis is a tavern on the outskirts of the East Barre-An mining colony.  The barhere is the local waterhole for the miners.  There are three tables here, one in the eastern corner of the room, another in the western corner and the last êThis is a hallway that stretches to the east.  On either side of the hall are closed doors.  The door to the north has the number "1" printed on it.  The   door to the south is missing its number, but you can barely make out the faded²The hallway continues both east and west.  The door to the north has the      number "3" on it, the door to the south has a number "4" on it, tilting       slightly to the right.a number "4" on it, tilting       slightly to the right.{The short hallway ends here.  The door to the north is numbered with a "5",   the door to the south has a number "6" on it.llway ends here.  The door to the north is numbered with a "5",   the door to the south has a number "6" on it.êYou're in your own room, a 10 x 12 converted closet with all the comforts of acargo bay.  Your bunk sits in one corner and a soiled sink takes up the other corner.  The only place for storage is a single shelf above the sink.  The    ÖYou are at a three-way crossroad.  A coarsely paved road heads south, a fine  gravel road heads east, and an uninviting dusty road disappears in the west.  There's a tall post here.  The tavern's entrance is north.s entrance is north.vYou are on a dusty road which continues both east and west.  The tall signpostcan be seen in the distance to the east.u are on a dusty road which continues both east and west.  The tall signpostcan be seen in the distance to the east.}This is a dust packed road that seems to stretch endlessly to the west.  The  road also leads back to the tavern to the east.acked road that seems to stretch endlessly to the west.  The  road also leads back to the tavern to the east.ØYou're on a fine gravel road that continues eastward.  Looking west you can   still view the tall post.  To the south is a neglected, worn down building.   Barely visible on the front of the building is a small sign.g is a small sign.qYou are still travelling on the east-west gravel road.  From here the road    appears endless in both directions.*qYd9¥0qYou are still travelling on the east-west gravel road.  From here the road    appears endless in both directions.ÚYour on a rough, paved road that leads to the south, the tall signpost can be seen to the north.  A separate dirt gravel path branches off to the west,     heading towards a small gravel clearing surrounded by a fence.nded by a fence.\99You are on a roughly paved north and south road that seems to be endless in   both directions.  You can see waves of heat rising off the hot desert sand. in   both directions.  You can see waves of heat rising off the hot desert sand.êYou are in an old, long abandoned general store.  Racks of empty shelves and  rows of bare tables fill most of the floor.  Trash and debris have long since overtaken the premises.  An unusual network of drazil tracks seems to be      ÂThis is a parking lot for the tavern and its guests.  There is a worn sign    here surrounded by thick weeds.  There's a meduim size space craft here, a    ladder extends to the top of the ship.  ladder extends to the top of the ship.êYou're on top of your ship, about twelve feet off the ground.  The entire lot is surrounded by a tall fence.  On top of the ship is a hatch, with a large   wheel in the center of the hatch.  A ladder extends to the ground on the northêYou have fallen into a deep pit.  There are two skeletons leaning against one of the walls.  They look like they've been here for quite some time.  The     walls are constructed from hard stone.  On one wall is a message.  There is   êYou are standing on top of your ship.  There is a hatch on the hull with a    wheel on it.  A ladder to the east leads to the ground.  The small clearing   you have landed in is surrounded by thick jungle and swampland.  You can see aêYou are standing in the middle of the clearing.  To the west is your ship withthe ladder extending to the top.  The sandy clearing is completely surrounded by unpassable dense jungle.  You notice that much of the swamp looks like     ®The path bends to the northeast, but it is crossed by a small stream that is  flowing from the southeast and to the northwest.  To the south the path leads back to your ship.e northwest.  To the south the path leads back to your ship.\98The path leads from the southwest and bends sharply to the northwest.  A      stream flowing to the northwest crosses through the path at the southwest. A      stream flowing to the northwest crosses through the path at the southwest.\89The path heads to the northwest and to the southeast.  A huge tree, maybe     thirty feet in diameter at its base, lies to the southwest.he southeast.  A huge tree, maybe     thirty feet in diameter at its base, lies to the southwest.»The path forks at this point, heading both to the northwest and to the        northeast.  In the middle of the path is a tall tree which doesn't resemble   most of the trees in this area.sn't resemble   most of the trees in this area.¹You're as high as you can climb in the tree.  The view of the surrounding     terrain is quite good.  You can see an unusual metallic, pyramid shaped objectin the distance to the north.yramid shaped objectin the distance to the north.êYou're sinking in a pit of soft quicksand!  You can still see that the path   continues to the northwest, but you're too busy with other matters to scout itout better.  The pit is surrounded by dense vegetation and trees with hanging TThe winding path bends slightly from from the southwest, continuing to the    north. slightly from from the southwest, continuing to the   /RÅ*TT/R¥0TThe winding path bends slightly from from the southwest, continuing to the    north.rThe winding path leads to the northwest, continuing from the south.  You are  surrounding by thick jungle terrain.T/R¥0rThe winding path leads to the northwest, continuing from the south.  You are  surrounding by thick jungle terrain.êIn front of you, to the north, is a large metallic pyramid-shaped structure,  about twenty feet high.  The ground in front of the structure is sandy.       Barely detectable on the pyramid are the seams of a large door.  Beside the   iA stairway leads down into the pyramid.  The open doorway to the south is the only exit from the pyramid.it from the p/RÅ*iA/R¥0iA stairway leads down into the pyramid.  The open doorway to the south is the only exit from the pyramid.tThe stairway continues both up and down.  Looking up you can see light coming in through the pyramid's open doorway.0tThe stairway continues both up and down.  Looking up you can see light coming in through the pyramid's open doorway.ÕYou're at the bottom of the long stairway, which heads up to the top of the   pyramid.  There's an open doorway to the east, the hall stretches to the      north.  A ladder leads through a small hole in the floor.ll hole in the floor.¡You are in a damp room filled with the bones and ugly remains of many         human-shaped skeletons, apparently used for sacrifice.  The exit is to the    west.ed skeletons, apparently used for sacrifice.  The exit is to the    west.\97You're at the north end of a long, featureless hall.  A tall doorway in the   west wall provides passage, while the length of the hall continues south. in the   west wall provides passage, while the length of the hall continues south.­This room feels warmer than the other rooms.  In the center of the otherwise  empty room is a miniature pyramid, standing less than three feet high.  To theeast is the exit. standing less than three feet high.  To theeast is the exit.\90The entire room is coated with a layered of damp, sticky dust.  Sitting in themiddle of the chamber is a podium, also cover with a veil of dust.ky dust.  Sitting in themiddle of the chamber is a podium, also cover with a veil of dust.êA ladder leads up through a small hole in the ceiling.  The walls here are    different than the other walls throughout the pyramid, these walls are highly polished and reflect like mirrors.  The reflections are so confusing you can'txYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones!e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones!xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.xYou are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.e in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.\90You are in a room with highly reflective walls, it's difficult to distinguish the real passages from the reflected ones.  A stairway leads down.ifficult to distinguish the real passages from the reflected ones.  A stairway leads down.SYou're at the bottom of the stairway, an open doorway leads through the north wall.m of the stairway, an open doorway leads through the nort/RÅ*Så/R¥0SYou're at the bottom of the stairway, an open doorway leads through the north wall.ÔThis is a long, wide passage, with a curiously low ceiling.  In the center of the floor there's an out-of-place round recess.  Another section of the       passage bends to the west.  An open doorway leads south.n doorway leads south.ØAt this point in the passage you notice that the floor seems a little         unsteady!  The air is damp, too, as if there were a large reservoir of liquid nearby.  The passage stretches to the east and to the south. and to the south.ÎThe luminesence in this section of the passage isn't nearly as bright as in   previous areas of the pyramid.  You can't see anything well at all around     here.  The passage continues both north and south.tinues both north and south.ÞYou have entered a circular shaped room with open passages heading north,     east, west and south.  You can feel a small draft coming from the west        doorway.  You have an uneasy feeling about some of these passages.se passages.êThis is a very unusual chamber.  The floor appears to be made out of glass.   Below the floor is a fast flowing stream.  In the middle of the chamber is a  short pyramid structure.  The ceiling is relatively high, and mostly obscured kThis is a small chamber with an exit to the north.  On one of the walls are   several symmetrical drawings.trical dr/RÅ*kT/R¥0kThis is a small chamber with an exit to the north.  On one of the walls are   several symmetrical drawings.ÒYou're in a dark, misty pit that is at least 15 feet deep.  A few beams of    light flicker through the mouth of the pit creating eerie patterns of light onthe dirt walls.  The only visible exit is straight up.ble exit is straight up.\85You are traveling on an overgrown path, barely visable through the thick      foliage.  The paths heads both southwest and northeast.n path, barely visable through the thick      foliage.  The paths heads both southwest and northeast.³Directly to the west is a small building with some sort of dish-shaped antennaon top.  On this side of the building is a closed door.  The overgrown path   heads to the northeast.sed door.  The overgrown path   heads to the northeast.êYou are inside the building that has the large antenna on the roof.  The wallsare filled with various monitors and screens, all displaying unique categoriesof unintelligible data.  A small, booth-like room lies to the south.  There's ÉThis is a small booth with a slightly raised platform floor.  There's a buttonon the west wall.  To the north you can view most of the monitors, which are  keeping track of the antenna's input of data.k of the antenna's input of data.ÌThis is another small room filled with monitors and a myriad of controls.  On the inner wall is an unlabeled white button.  The floor you are standing on   a raised platform.  There's a door to the north.  There's a door to the north.êThis is a nicely furnished lobby with plenty of chairs lining the walls.      Neatly positioned in front of the chairs are several low tables.  Filling the west wall is a large, colorful mural.  An open door leads south.  There's a   ­You're in a featureless corridor, with clean walls and a spotless floor.  An  open doorway provides access north, the corridor continues south and there's adoor to the west., the corridor continues south and there's adoor to the west.¼You are at the middle of a long, featureless corridor.  There's a door to the east and open pathways in three other directions.  Built into the wall next   to the door is a slit-type slot.e wall next   to the door is a slit-type slot.SThere's a door at the south end of the long corridor.  An open doorway heads  west.he south end of the long corridor.  An open doorway heads/RÅ*ST/R¥0SThere's a door at the south end of the long corridor.  An open doorway heads  west.\80This is a small chamber with doors at both the west and east ends.  Above you is a light.  On the wall is a single white button.r with doors at both the west and east ends.  Above you is a light.  On the wall is a single white button.\85Several seats are lined up against the walls.  There's a small light above thedoor to the south and there's another door to the east.st the walls.  There's a small light above thedoor to the south and there's another door to the east.ØThis booth is similar to the one that is inside the antenna station on the    jungle planet, except that it is larger.  On one of the walls are several     buttons, each having its own color.  A door is to the north.r is to the north.ÕThis is a smaller room than most in the complex.  There are numerous monitors here keeping track of the data being transmitted from the various antenna     stations located on planets throughout this solar system.ut this solar system.êThis large room appears to be the center of power distribution for the entire complex.  You recognize that one of the machines is a reactor regulator.      Lying on the floor in a heap is a small robot, apparently damaged by a bad    êThere's a large machine here that resembles a transmitter, although the       configuration of the machine is quite unique.  A seat is positioned in front  of the machine.  Through a large window on the east wall you can see an       êIn the center of the room is a single computer terminal, with a large keyboardand a monitor.  The walls here are bare of any controls, buttons or machines, perhaps to reduce electrical interference with the computer.  A doorway leads £You are in a small room that boasts no more room than a large closet.  There'sa single white colored button on the east wall.  The door to the north is     closed. colored button on the east wall.  The door to the north is     closed.£You are in a small room that boasts no more room than a large closet.  There'sa single white colored button on the east wall.  The door to the north is     closed. colored button on the east wall.  The door to the north is     closed.zThe center piece of this room is a gigantic telescope, which continues throughthe ceiling.  To the south is a closed door. piece of this room is a gigantic telescope, which continues throughthe ceiling.  To the south is a closed door.êYou're standing on a large platform, at least 30 feet above the planet's icy  surface.  A short rail surrounds the platform.  On the snow covered platform, to the east, is a small building with a closed door.  The snow covered        ËYou're inside the small, enclosed building that's built on top of the tall    platform.  Except for a small, round-shaped slot on the wall the room has no  standout features.  There's a door to the west.s.  There's a door to the west.\95This is another undersized chamber decorated with a table, a chair and a wall mural.  Above the chair is a wide panel.  A closed door is to the west.ir and a wall mural.  Above the chair is a wide panel.  A closed door is to the west.\87This is a long, circular corridor, which curves to the northwest and to the   south.  A door lies east, on the door is a small picture.hich curves to the northwest and to the   south.  A door lies east, on the door is a small picture.´This is a long, circular corridor, which curves to the north and to the       southwest.  There's a door to the west and to the east.  On the eastern door  there's a small picture.e east.  On the eastern door  there's a small picture.\87This is a long, circular corridor, which curves to the northeast and to the   west.  A door lies south, on the door is a small picture.hich curves to the northeast and to the   west.  A door lies south, on the door is a small picture.\87This is a long, circular corridor, which curves to the northwest and to the   east.  A door lies south, on the door is a small picture.hich curves to the northwest and to the   east.  A door lies south, on the door is a small picture.\8bThis is a long, circular corridor, which curves to the north and to the       southeast.  A door lies west, on the door is a small picture.ves to the north and to the       southeast.  A door lies west, on the door is a small picture.»This is a long circular corridor, which curves to the northeast and to the    south.  A door lies west, on the door is a small picture.  On the wall next tothe door is a slit-shaped slot.the wall next tothe door is a slit-shaped slot.\8cThis is a long circular corridor, which curves to the east and to the         southwest.  A door lies north, on the door is a small picture. to the east and to the         southwest.  A door lies north, on the door is a small picture.\8cThis is a long, circular corridor, which curves to the west and to the        southeast.  A door lies north, on the door is a small picture.s to the west and to the        southeast.  A door lies north, on the door is a small picture.±This is a huge room that stretches even further to the east.  Most of the roomis filled by a large reactor, which fills the entire back half of the room.  Adoor is to the south.the entire back half of the room.  Adoor is to the south.\98This is a huge room that continues even further to the west.  Nearly the      entire room is filled by a large reactor machine.  A door is to the south.he      entire room is filled by a large reactor machine.  A door is to the south.êThe chamber is packed with technical equipment and complicated controls.  In  the back corner of the room stands an upright tube, about the size of a serum dispenser.  Across the top of the controls are a row of monitors, each        {Across the back wall is a double row of monitors.  There's a tall chair in    front on the screens.  A door is to the east.ack wall is a double row of monitors.  There's a tall chair in    front on the screens.  A door is to the east.iYou're inside the elevator, on the rear wall is a numeric keypad.  The slidingdoor to the west is closed. the west is KSÅ*iYKS¥0iYou're inside the elevator, on the rear wall is a numeric keypad.  The slidingdoor to the west is closed.\99This appears to be an area for storage, there are numerous shelves stacked    with equipment and other odd things on every wall.  A door is to the north.ed    with equipment and other odd things on every wall.  A door is to the north.eThe only thing in this room is a machine that's sitting against the west wall.A door is to the north.wall.A door is to theKSÅ*eTKS¥0eThe only thing in this room is a machine that's sitting against the west wall.A door is to the north.êThere's a single screen built into the north wall, displaying some data that  appears to be compiled from the numerous antenna stations.  A machine         against the east wall seems to be recording the information that's on the     âThis is a massive chamber that is filled with an chilling mist.  Barely       visible through the gaseous mist you can see rows and rows of upright         cryogenic tubes lining the chamber walls.  There's a door to the west.he west.¸You're in a chamber not much larger than a closet.  On the rear wall is an    odd-shaped sign, a small screen is built into the opposite wall.  There are   doors to the west and south.te wall.  There are   doors to the west and south.âThis is a features hall, but with a peculiar design, the corners have been    tapered to a rounded shape.  The hall looks a lot like a tunnel.  On the west wall is a tall, closed panel.  There are doors to the north and south.d south.\94This is another featureless section of the tunnel-like corridor.  On the west wall is a tall, closed panel.  There are doors to the north and south.r.  On the west wall is a tall, closed panel.  There are doors to the north and south.\94This is the third enclosed section of the tunnel-like corridor.  On the west  wall is a tall, closed panel.  There are doors to the north and south..  On the west  wall is a tall, closed panel.  There are doors to the north and south.êYou're standing on a narrow catwalk, which continues to the southeast and the southwest.  The catwalk encircles an awesome sight--a tremendous column of    reactor energy flowing through the center of the planetship.  Huge spark-like ½You're standing on a narrow catwalk, which continues to the northwest and the southwest.  The catwalk encircles a rushing flow of energy, which appears to  be at least ten feet in diameter.appears to  be at least ten feet in diameter.çYou're standing on a narrow catwalk, which continues to the northeast and the northwest.  The catwalk circles around an intensely bright flow of energy,    which is probably guided by a magnetic field.  There's a door to the south.th.åYou're standing on a narrow catwalk, which continues to the northeast and the southeast.  The catwalk circles around a rushing flow of energy, which is     probably generated from an immense reactor at the core of the planetship.ship.]You're at a four-way juncture in the corridor, with doors to the north, east, west and south.th doors to the north, east, west and\87:Å*]Y\87:¥0]You're at a four-way juncture in the corridor, with doors to the north, east, west and south.çIn the middle of the room is an elegantly crafted conference table, with room for at least twelve people.  Surrounding the table are several chairs.  From  apparences the room looks like a meeting area.  There's a door to the east.st.ÉExtending from the west wall of the room is a small section of a much larger  machine, which is built behind the wall.  The only feature on the machine is  an access panel.  There's a door to the west.nel.  There's a door to the west.\ 3109s booth is similar to the one that is inside the antenna station on the    jungle planet, except that it is larger.  On one of the walls are såþ\0ðåþ\0ð\83òe\12\ e \ eååþ\0ð\87òr\13\ eìò!\ 4\ 6\0\83ð\8c\0\16ò\ 4òÇ\0ûÿ\8c\0\a\ 6\ 1\16ò!ò!A\ 4Ë\1eFòùÿ\9c\ 1\ 6ò
+\0ûÿÇ\0
+\0\0\7f\8c\ 1Ç\ 1Fò/R¥0\ 3109
\ No newline at end of file
diff --git a/src/R2 b/src/R2
new file mode 100644 (file)
index 0000000..03919d5
Binary files /dev/null and b/src/R2 differ
diff --git a/src/ROOMRITE.PAS b/src/ROOMRITE.PAS
new file mode 100644 (file)
index 0000000..8576119
--- /dev/null
@@ -0,0 +1,176 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+{$c-}\r
+const\r
+  Max = 234;\r
+\r
+type\r
+  MaxLength = string[Max];\r
+  OneChar   = string[1];\r
+\r
+var\r
+  R1, R2            : file of MaxLength;\r
+  Position,Counter,\r
+  Start,Stop,x      : integer;\r
+  Text1, Text2      : MaxLength;\r
+  Answer            : char;\r
+  Letter            : OneChar;\r
+  List              : boolean;\r
+\r
+procedure Diskwrite(text1,text2: MaxLength; pointer: integer);\r
+  begin\r
+    seek(R1,pointer); seek(R2,pointer);\r
+    WRITE(R1,text1); WRITE(R2,text2);\r
+    writeln('ROOM decription ',pointer,\r
+            ' is written!  Size = ',filesize(R1));\r
+    close(R1); close(R2);\r
+  end; {End of Diskwrite.}\r
+\r
+procedure Diskread(start,stop: integer);\r
+var\r
+counter : integer;\r
+text1, text2 : MaxLength;\r
+  begin\r
+   assign(R1,'R1');assign(R2,'R2');\r
+   reset(R1); reset(R2);\r
+   seek(R1,start); seek(R2,start);\r
+    for counter:= start to stop do\r
+      begin\r
+        highvideo;\r
+        READ(R1,text1); READ(R2,text2);\r
+        if list then\r
+          begin\r
+            writeln(lst,'Discription # ',counter);\r
+            writeln(lst,text1,text2);\r
+          end\r
+        else\r
+          begin\r
+            writeln('Here is ROOM description # ',counter);\r
+            lowvideo;\r
+            writeln(text1,text2);\r
+            highvideo;\r
+          end;\r
+      end;\r
+    close(R1); close(R2);\r
+    write('The file contains ',filesize(R1),' ROOM descriptions.');\r
+  end;  {End of Diskread.}\r
+\r
+procedure Beep;\r
+begin\r
+ if(length(text1)in[68,146,224])or(length(text2)in[68,146,224])then\r
+  begin sound(99);delay(50);nosound;end;\r
+end;\r
+\r
+BEGIN\r
+nosound;\r
+window(2,1,79,25);\r
+repeat          {Main loop.}\r
+  text1:='';\r
+  text2:='';\r
+\r
+writeln;\r
+writeln('Do you want to R)ead, W)rite or Q)uit?');\r
+read(kbd,answer);\r
+if upcase(answer) = 'Q' then begin writeln('FINISHED');halt;end;\r
+if upcase(answer) <> 'R' then       {Write to 'ROOMS'.}\r
+    begin\r
+      writeln;writeln;\r
+      assign(R1,'R1'); assign(R2,'R2');\r
+      textcolor(9);writeln('Now RESETing ROOM files.');highvideo;\r
+            RESET(R1); RESET(R2);\r
+      writeln;\r
+      writeln('Input a string not more than ',2*Max,' characters.',\r
+              '  ''\''-Ends string.');\r
+      x:=wherey;if(x>17)then x:=18;for stop:=1 to 7 do writeln;gotoxy(1,x);\r
+      lowvideo;\r
+        repeat\r
+          read(trm,letter);\r
+          if letter = ^h then\r
+            begin\r
+              if(wherex=1)then\r
+               begin window(2,1,80,25);gotoxy(79,wherey-1)end;\r
+              write(^h,' ',^h);\r
+              delete(text1,length(text1),2);\r
+              window(2,1,79,25);\r
+            end;\r
+          beep;\r
+          if (letter <> '\') and (letter <> ^h) then text1:=text1+letter\r
+        until (length(text1)=Max) or (letter='\');\r
+        if letter = '\' then\r
+          begin\r
+            writeln;\r
+            highvideo;\r
+            writeln('Total of ',length(text1),' characters.');\r
+            text2:='';\r
+          end\r
+        else\r
+          begin\r
+              repeat\r
+                textcolor(11);\r
+                read(trm,letter);\r
+                if letter = ^h then\r
+                  begin\r
+                   if(wherex=1)then\r
+                    begin window(2,1,80,25);gotoxy(79,wherey-1)end;\r
+                   write(^h,' ',^h);\r
+                   delete(text2,length(text2),2);\r
+                   window(2,1,79,25);\r
+                  end;\r
+                beep;\r
+                if (letter <> '\') and (letter <> ^h) then text2:=text2+letter\r
+              until (length(text2)=Max) or (letter='\');\r
+            writeln; highvideo;\r
+            writeln('Total description length = ',\r
+                     length(text1)+length(text2),' characters.');\r
+          end;\r
+      writeln('Now WRITING string to disk.');\r
+      writeln('  At what position?  (Next open is # ',filesize(R1),')');\r
+      textcolor(12);position:=position+1;readln(position);highvideo;\r
+      Diskwrite(text1,text2,position);\r
+    end\r
+else                      {Read from 'ROOMS'.}\r
+  begin\r
+    writeln;writeln;\r
+    writeln('To the S)creen or the P)rinter');\r
+    read(kbd,answer);\r
+    if(upcase(answer)='P')then List:=True else List:=False;\r
+    assign(R1,'R1');\r
+    reset(R1);\r
+    writeln('Filesize = ',filesize(R1),\r
+            '  (From 0 to ',filesize(R1)-1,')');\r
+    close(R1);\r
+    writeln('Enter starting position:');\r
+    textcolor(12);readln(start);highvideo;\r
+    if(start > filesize(R1)-5)then stop:=(filesize(R1)-1) else\r
+      begin\r
+        writeln('Enter final position:');\r
+        textcolor(12);readln(stop);highvideo;\r
+      end;\r
+    Diskread(start,stop);\r
+  end;  {End of else clause.}\r
+until false;     {End of Main loop.}\r
+END.\r
+\r
+\r
+\1a
\ No newline at end of file
diff --git a/src/S1 b/src/S1
new file mode 100644 (file)
index 0000000..2d19907
Binary files /dev/null and b/src/S1 differ
diff --git a/src/SM b/src/SM
new file mode 100644 (file)
index 0000000..8c8f1a1
--- /dev/null
+++ b/src/SM
@@ -0,0 +1,187 @@
+(0)\r
+                        ____________________________\r
+                       |                           ||\r
+                       |   P A R K I N G   L O T   ||\r
+                       |      _______________      ||\r
+                       |     I '     '     ' I     ||\r
+                       |     I  E I G H T Y  I     ||\r
+                       |     I               I     ||\r
+                       |     I G O O L A A S I     ||\r
+                       |     I               I     ||\r
+_______________________|     I P E R   D A Y I     ||________________________\r
+I  I  I  I  I  I  I  I |     I_______________I     || I  I  I  I  I  I  I  I\r
+I  I  I  I  I  I  I  I |___________________________|| I  I  I  I  I  I  I  I\r
+  .          v v       | || .                    | ||      v      . .      v\r
+v                  .   | ||              .       | ||   .                 . v\r
+   .           .       | ||v    \/               | ||\r
+                       | ||                      | ||\r
+     \/\/           \ v| ||v\/                \/ | ||v /        \/\r
+                   \/ \|_||/\/       \/      \/\\|_||/\/\r
+           \/      \\  \/v\//                  \vv \/  \\/\r
+(1)\r
+                        ____________________________\r
+                       /___________________________/|\r
+                       |                           ||\r
+                       |         The Menu          ||\r
+                       |         --------          ||\r
+                       |  Pink Ztulctw   2 goolaas ||\r
+                       |  Bloody Foeboz  3 goolaas ||\r
+                       |  Glunk Lite     1 goolaa  ||\r
+                       |  Ambrossa       2 goolaas ||\r
+                       |                           ||\r
+                       |___________________________||\r
+                        \__________________________\|\r
+\r
+(2)\r
+The control panel contains all of the main system overrides for the ship to\r
+function.  Since the ship operates under computer guidance, the operater\r
+need only enter the proper coordinates into the computer, via the keypad,\r
+then press the appropiate button to initiate the countdown sequence.\r
+There are dozens of buttons on the panel.  The ones you will most likely use\r
+are:\r
+        tan button - begins lift-off sequence.\r
+     purple button - begins landing sequence.\r
+       cyan button - confirms the coordinates that you gave the computer.\r
+            keypad - used to enter coordinates and identity codes.\r
+\r
+(3)\r
+Here is a partial list of commands and verbs used in this adventure:\r
+\r
+                                  COMMANDS\r
+                                  --------\r
+\r
+                F1 = SAVE                      F2 = RESTORE\r
+                F3 = ROOM DESCRIPTION (or RD)  F4 = LOOK (or L)\r
+                F5 = GET ALL                   F6 = DROP ALL\r
+                F7 = SCORE                     F8 = INVENTORY (or I)\r
+                F9 = WAIT (or Z)               F10= REPEAT (or R)\r
+\r
+You may either type in the command or hit the function key.\r
+\r
+Other commands, these must be typed in:\r
+\r
+* RESTART\r
+* QUIT (or Q)\r
+* CLUE or HELP\r
+* COMMANDS or VERBS\r
+(4)\r
+                    ____________________________________\r
+                   /\__________________________________/\\r
+                   ||.                                .||\r
+                   ||  E C N E I C S    N O I T A T S  ||\r
+                   ||.      (Ymonortsa Noisivid)      .||\r
+                   ||    Tliub rof eht yduts fo eht    ||\r
+                   ||.        --- avonrepus ---       .||\r
+                   [[__________________________________]]\r
+\r
+(5)\r
+                                   VERBS\r
+                                   -----\r
+\r
+* North, South, East, West, Northeast, Northwest, Southeast, Southwest\r
+    or abbreviated as N, S, E, W, NE, NW, SE, SW\r
+    (You may also use the cursor control keys to move from room to room.)\r
+* Up (or U), Down (or D), In, Out      * Type\r
+* Get, Drop                            * Find\r
+* Eat, Drink                           * Dig\r
+* Sleep, Wake up                       * Buy, Purchase\r
+* Sit, Stand, Climb, Jump              * Walk, Travel, Crawl\r
+* Examine (or Ex), Read                * Give, Offer\r
+* Put, Fill, Insert, Place             * Catch\r
+* Open, Close, Unlock                  * Push, Pull, Move\r
+* Throw                                * Turn on, Turn off\r
+* Turn, Set, Rotate                    * Hit, Destroy\r
+* Listen, Taste, Smell, Touch          * Kill, Fight, Attack\r
+* Wear, Remove                         * Clean, Wipe off\r
+* Look under, Look on top of, Look beside, Look inside\r
+(6)\r
+The ship, under the guidance of the computer, gently rises from the surface\r
+of Barre-An and slowly ascends into the darkness of space.  After leaving the\r
+planet's atmosphere the computer engages the ship's hyperlight drive system\r
+and begins it long flight to R2/20-8-23 D2/VEGA.  In normal time this journey\r
+would take over 150 years, but at hyperlight speed the distance can be\r
+crossed in about ten days.\r
+The cryogenic tube will maintain all of your biological needs during the\r
+next ten days.  Without the tube your body would not be able to withstand the\r
+incredible velocity of the ship.\r
+You dream of wealth...\r
+(7)\r
+.............................................................................\r
+:              _                                               _____        :\r
+:   o        _/*\_                                           _/  +  \_      :\r
+:  /_\                      /\/\/\/\/\/\/\/\                /_________\     :\r
+:  | |                      \-[]- #++# *==*/        (X)     \_________/     :\r
+:             \   __   /    /[**] >< @/ )*(\         |                      :\r
+:                /__\       \-=- #--# /!!!\/    [ ] [ ] [ ]                 :\r
+:           __  /____\  __  /*)(* \/\/ ----\       \              /\  /\    :\r
+:               \ __ /      \#[]# <*> =**= /    [ ] [ ] [ ]       ||  ||    :\r
+:      /\        \  /       /@/ #--# )( @/@\                                :\r
+:     /  \     /  \/  \     \""" ^^ #+-+# @/    [ ] [ ]-[ ]                 :\r
+:    /    \                 /*)+(* >< /!!!\\       _____            o       :\r
+:   /  ()  \    ______      \<*> [)(] @ =!=/      /\___/\          /_\      :\r
+:  /        \     \/        /-()- <*> "+" @\      \_____/          | |      :\r
+: /__________\              \/\/\/\/\/\/\/\/      [_____]                   :\r
+:...........................................................................:\r
+\r
+(8)\r
+The ship's computer takes over as it scans a small area suitable for landing.\r
+As the ship descends into the planet's atmosphere you can see the usual red\r
+glow through the front monitor.  The ship pans and tilts making final landing\r
+adjustments then settles softly within the clearing.\r
+(9)\r
+                       _______________________________\r
+                      |                               |\r
+                      |   :::::::::::::::::::::::::   |\r
+                      |   :: S E R U M   L I S T ::   |\r
+                      |   :::::::::::::::::::::::::   |\r
+                      |                               |\r
+                      |  CURE #  -  CAUSE OF ILLNESS  |\r
+                      |  ---------------------------  |\r
+                      |    1     -  Virus (general)   |\r
+                      |    2     -  Bacteriophages    |\r
+                      |    3     -  Influenza         |\r
+                      |    4     -  Parasitic germs   |\r
+                      |    5     -  Infections        |\r
+                      |    6     -  Poisons / Venoms  |\r
+                      |    7     -  Radiation         |\r
+                      |    8     -  Headache / Fever  |\r
+                      |    9     -  Common cold       |\r
+                      |   10     -  Unknown disease   |\r
+                      |_______________________________|\r
+(10)\r
+The computer prints its report of local planetary conditions on the monitor:\r
+\r
+Atmospheric Report:\r
+ Main gases:  Oxygen 36%, Nitrogen 47%, Helium 10%.\r
+ Traces:      Argon, Hydrogen, Carbon dioxide, Methane, Chlorine.\r
+ Weather:     20% chance of acid rain within the next 30 hours.\r
+ Summary:     Suitable for human life support.\r
+\r
+Life Form Report:\r
+ Plant life:  Abundant rating.  Based on chloroacetic acid species.\r
+ Bacteria:    Sparse rating.  Mostly passive, multi-celled species.\r
+ Animal life: Moderate rating.  Wide range of species, mostly swamp dwellers.\r
+\r
+(11)\r
+                     ____________________________________\r
+                    |                                    |\r
+                    |        M U D N A R O M E M         |\r
+                    |        -------------------         |\r
+                    |                                    |\r
+                    | Etad:      2837\12\8               |\r
+                    | Gnirecnoc: gnidnepmi avonrepus     |\r
+                    |                                    |\r
+                    | Eht latot noitalupop fo rou dlrow  |\r
+                    |   era won ylefas deruces ni levart |\r
+                    |   sebut, gnitiawa erutraped ot     |\r
+                    |   rieht wen emoh.                  |\r
+                    | Siht si ruo tsal linuoc gniteem.   |\r
+                    |   Yam ruo Drol ediug su.           |\r
+                    |                                    |\r
+                    |              Licnuoc fo Sredle     |\r
+                    |                                    |\r
+                    |____________________________________|\r
+\r
+(12)\r
+NULL\r
+(13)\1a
\ No newline at end of file
diff --git a/src/SPECIAL.PAS b/src/SPECIAL.PAS
new file mode 100644 (file)
index 0000000..2b6a2b0
--- /dev/null
@@ -0,0 +1,156 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+{$c-}\r
+const\r
+  Max = 234;\r
+\r
+type\r
+  MaxLength = string[Max];\r
+  OneChar   = string[1];\r
+\r
+var\r
+  S1                : file of MaxLength;\r
+  Position,Counter,\r
+  Start,Stop,x      : integer;\r
+  Text1             : MaxLength;\r
+  Answer            : char;\r
+  Letter            : OneChar;\r
+  List              : boolean;\r
+\r
+procedure Diskwrite(text1: MaxLength; pointer: integer);\r
+  begin\r
+    seek(S1,pointer);\r
+    WRITE(S1,text1);\r
+    writeln('SPECIAL decription ',pointer,\r
+            ' is written!  Size = ',filesize(S1));\r
+    close(S1);\r
+  end; {End of Diskwrite.}\r
+\r
+procedure Diskread(start,stop: integer);\r
+var\r
+counter : integer;\r
+text1   : MaxLength;\r
+  begin\r
+   assign(S1,'S1');\r
+   reset(S1);\r
+   seek(S1,start);\r
+    for counter:= start to stop do\r
+      begin\r
+        highvideo;\r
+        READ(S1,text1);\r
+        if list then\r
+          begin\r
+            writeln(lst,'Discription # ',counter);\r
+            writeln(lst,text1);\r
+          end\r
+        else\r
+          begin\r
+            writeln('Here is SPECIAL description # ',counter);\r
+            lowvideo;\r
+            writeln(text1);\r
+            highvideo;\r
+          end;\r
+      end;\r
+    close(S1);\r
+    write('The file contains ',filesize(S1),' SPECIAL descriptions.');\r
+  end;  {End of Diskread.}\r
+\r
+procedure Beep;\r
+begin\r
+ if(length(text1)in[68,146,224])then\r
+  begin sound(99);delay(50);nosound;end;\r
+end;\r
+\r
+BEGIN\r
+nosound;\r
+window(2,1,79,25);\r
+repeat          {Main loop.}\r
+  text1:='';\r
+\r
+writeln;\r
+writeln('Do you want to R)ead, W)rite or Q)uit?');\r
+read(kbd,answer);\r
+if upcase(answer) = 'Q' then begin writeln('FINISHED');halt;end;\r
+if upcase(answer) <> 'R' then       {Write to 'SPECIAL'.}\r
+    begin\r
+      writeln;writeln;\r
+      assign(S1,'S1');\r
+      textcolor(9);writeln('Now RESETing SPECIAL files.');highvideo;\r
+            RESET(S1);\r
+      writeln;\r
+      writeln('Input a string not more than ',Max,' characters.',\r
+              '  ''\''-Ends string.');\r
+      x:=wherey;if(x>17)then x:=18;for stop:=1 to 7 do writeln;gotoxy(1,x);\r
+      textcolor(11);\r
+        repeat\r
+          read(trm,letter);\r
+          if letter = ^h then\r
+            begin\r
+              if(wherex=1)then\r
+               begin window(2,1,80,25);gotoxy(79,wherey-1)end;\r
+              write(^h,' ',^h);\r
+              delete(text1,length(text1),2);\r
+              window(2,1,79,25);\r
+            end;\r
+          beep;\r
+          if (letter <> '\') and (letter <> ^h) then text1:=text1+letter\r
+        until (length(text1)=Max) or (letter='\');\r
+        if letter = '\' then\r
+          begin\r
+            writeln;\r
+            highvideo;\r
+            writeln('Total of ',length(text1),' characters.');\r
+          end;\r
+        writeln; highvideo;\r
+        writeln('Total description length = ',length(text1),' characters.');\r
+      writeln('Now WRITING string to disk.');\r
+      writeln('  At what position?  (Next open is # ',filesize(S1),')');\r
+      textcolor(12);position:=position+1;readln(position);highvideo;\r
+      Diskwrite(text1,position);\r
+    end\r
+else                      {Read from 'SPECIAL'.}\r
+  begin\r
+    writeln;writeln;\r
+    writeln('To the S)creen or the P)rinter');\r
+    read(kbd,answer);\r
+    if(upcase(answer)='P')then List:=True else List:=False;\r
+    assign(S1,'S1');\r
+    reset(S1);\r
+    writeln('Filesize = ',filesize(S1),\r
+            '  (From 0 to ',filesize(S1)-1,')');\r
+    close(S1);\r
+    writeln('Enter starting position:');\r
+    textcolor(12);readln(start);highvideo;\r
+    if(start > filesize(S1)-5)then stop:=(filesize(S1)-1) else\r
+      begin\r
+        writeln('Enter final position:');\r
+        textcolor(12);readln(stop);highvideo;\r
+      end;\r
+    Diskread(start,stop);\r
+  end;  {End of else clause.}\r
+until false;     {End of Main loop.}\r
+END.\r
+\r
+\r
+\1a
\ No newline at end of file
diff --git a/src/VOCAB.PAS b/src/VOCAB.PAS
new file mode 100644 (file)
index 0000000..11ae2ab
--- /dev/null
@@ -0,0 +1,534 @@
+{//-------------------------------------------------------------------------}\r
+{/*                                                                         }\r
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd.                           }\r
+{                                                                           }\r
+{This file is part of Supernova.  Supernova is free software; you can       }\r
+{redistribute it and/or modify it under the terms of the GNU General Public }\r
+{License as published by the Free Software Foundation; either version 2     }\r
+{of the License, or (at your option) any later version.                     }\r
+{                                                                           }\r
+{This program is distributed in the hope that it will be useful,            }\r
+{but WITHOUT ANY WARRANTY; without even the implied warranty of             }\r
+{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                       }\r
+{                                                                           }\r
+{See the GNU General Public License for more details.                       }\r
+{                                                                           }\r
+{You should have received a copy of the GNU General Public License          }\r
+{along with this program; if not, write to the Free Software                }\r
+{Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.}\r
+{                                                                           }\r
+{Original Source: 1990 Scott Miller                                         }\r
+{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }\r
+{*/                                                                         }\r
+{//-------------------------------------------------------------------------}\r
+(*****************************************************************************)\r
+(*                                VOCABULARY                                 *)\r
+(*                >> Contains the word list for Supernova <<                 *)\r
+(*                         Programmer: Scott Miller                          *)\r
+(*                       << Began February 2, 1985 >>                        *)\r
+(*                       Copyright 1985 Scott Miller                         *)\r
+(*****************************************************************************)\r
+\r
+                       {VERB LIST:  GROUPS ALL SYNONYMS}\r
+overlay procedure Assign1;\r
+begin\r
+v[1]:='north\n\fore\f\';\r
+v[2]:='south\s\aft\a\';\r
+v[3]:='east\e\starboa\st\';\r
+v[4]:='west\w\port\p\';\r
+v[5]:='ne\northea\';\r
+v[6]:='nw\northwe\';\r
+v[7]:='se\southea\';\r
+v[8]:='sw\southwe\';\r
+v[9]:='up\u\climb up\climb u\';\r
+v[10]:='down\d\climb down\climb d\';\r
+v[11]:='enter\in\land in\land on\';       {cont}\r
+v[12]:='land\cross\across\';\r
+v[13]:='exit\out\leave\retreat\';         {cont}\r
+v[14]:='escape\';\r
+v[15]:='wait\z\rest\relax\';\r
+v[16]:='invento\i\ex invento\inv\';\r
+v[17]:='drop all but\drop all except\';\r
+v[18]:='drop\get rid\put down\let go\';\r
+v[19]:='take off\remove\';\r
+v[20]:='l behind\ex behind\l beside\';\r
+v[21]:='talk to\talk\speak to\greet\';\r
+v[22]:='l above\ex on\l on top\';         {cont}\r
+v[23]:='ex above\ex top\l on\';\r
+v[24]:='l in\ex in\l through\l out\';\r
+v[25]:='say\speak\';\r
+v[26]:='l under\ex underne\ex under\';    {cont}\r
+v[27]:='l underne\ex below\';\r
+v[28]:='ex\search\l at\describ\';         {cont}\r
+v[29]:='study\check\inspect\';\r
+v[30]:='l around\l\';\r
+v[31]:='read\';\r
+v[32]:='stand up\get up\stand\';\r
+v[33]:='put\pour\lay\fill\insert\';       {cont}\r
+v[34]:='place\slide\stick\';\r
+v[35]:='sit on\sit in\sit down at\';      {cont}\r
+v[36]:='get in\sit at\sit\sit down\';\r
+v[37]:='get all but\get all except\';     {cont}\r
+v[38]:='take all but\get everyth but\';\r
+v[39]:='get\take\grab\steal\pick up\';    {cont}\r
+v[40]:='catch\grasp\snatch\';\r
+v[41]:='open\unfaste\';\r
+v[42]:='pull on\flick\pull\flip off\';    {cont}\r
+v[43]:='flip\turn off\deactiv\';\r
+v[44]:='push\move\press\turn on\';        {cont}\r
+v[45]:='activat\flip on\push on\';\r
+end; { Assign1 }\r
+overlay procedure Assign2;\r
+begin\r
+v[46]:='drink some\drink from\drink\';\r
+v[47]:='eat\swallow\digest\consume\';\r
+v[48]:='throw\toss\';\r
+v[49]:='give\offer\show\hand\';\r
+v[50]:='turn\rotate\set\spin\';\r
+v[51]:='climb in\climb over\';            {cont}\r
+v[52]:='climb on\climb\';\r
+v[53]:='close\shut\fasten\connect\';\r
+v[54]:='destroy\punch\knock on\break\';   {cont}\r
+v[55]:='hit\knock\smash\strike\';\r
+v[56]:='type in coordin\type coordin\';   {cont}\r
+v[57]:='type in keyboar\type in\';        {cont}\r
+v[58]:='type on\type on keyboar\type\';\r
+v[59]:='jump in\jump over\jump on\';      {cont}\r
+v[60]:='jump off\leap over\hop\';         {cont}\r
+v[61]:='jump across\jump\leap\hop\';\r
+v[62]:='sleep in\lie down\sleep on\';     {cont}\r
+v[63]:='sleep\';\r
+v[64]:='buy\purchas\pay for\order\';\r
+v[65]:='listen to\listen\hear\';\r
+v[66]:='bartend\waiter\';                  { Characters }\r
+v[67]:='two aliens\alien\aliens\';\r
+v[68]:='scienti\man\him\';\r
+v[69]:='robot\droid\';\r
+v[70]:='help me\pray\clue\help\';\r
+v[71]:='compute\';\r
+v[72]:='wear\don\';\r
+v[73]:='find\where is\where\';\r
+v[74]:='repair\fix\';\r
+v[75]:='touch in\feel\touch\rub\';\r
+v[76]:='reach in\reach under\reach\';\r
+v[77]:='descrip\rd\r d\';\r
+v[78]:='score\rank\';\r
+v[79]:='quit\stop\q\';\r
+v[80]:='hi\hello\bye\good bye\';\r
+v[81]:='yes\no\maybe\';\r
+v[82]:='save\';\r
+v[83]:='smell\sniff\';\r
+v[84]:='taste\lick\';\r
+v[85]:='wake up\awaken\wake\';\r
+v[86]:='restart\';\r
+v[87]:='restore\resume\';\r
+v[88]:='unlock\';\r
+v[89]:='shoot at\shoot\blast\';\r
+v[90]:='tie\untie\damn\shit\hell\';\r
+v[91]:='follow\scott miller\scott\';\r
+v[92]:='dig in\dig\shovel\';\r
+v[93]:='attack\kill\fight\';\r
+v[94]:='clean\wipe off\wipe\';\r
+v[95]:='command\verbs\verb\words\';\r
+end; { Assign2 }\r
+\r
+                     {NOUN LIST:  GROUPS ALL OBJECTS}\r
+overlay procedure Assign3;\r
+begin\r
+n[1]:='clear crystal\clear\crystal\';\r
+n[2]:='device\';\r
+n[3]:='rusty key\rusty\';\r
+n[4]:='shiney key\shiney\';\r
+n[5]:='brown satchel\satchel\brown\';\r
+n[6]:='dried food\food\dried\loaf\';\r
+n[7]:='holster\gun strap\strap\';\r
+n[8]:='goolaa\coin\money\';\r
+n[9]:='red jewel\jewel\red\';\r
+n[10]:='skull\skulls\head\heads\';\r
+n[11]:='rod\thick rod\pole\';\r
+n[12]:='plastic access card\';            {cont}\r
+n[13]:='plastic access\card\';            {cont}\r
+n[14]:='access card\plastic card\';       {cont}\r
+n[15]:='access\plastic\';\r
+n[16]:='worn cushion\cushion\worn\';\r
+n[17]:='grey disk\disk\grey\';\r
+n[18]:='dusty ball\ball\dusty\';          {changes to glass ball!}\r
+n[19]:='paper\piece paper\piece\';\r
+n[20]:='set of goggles\set goggles\';     {cont}\r
+n[21]:='goggles\set\glasses\band\';\r
+n[22]:='orange crystal\orange\';\r
+n[23]:='green crystal\green\';\r
+n[24]:='yellow crystal\yellow\';\r
+n[25]:='blue crystal\blue\';\r
+n[26]:='pair of gloves\pair gloves\';     {cont}\r
+n[27]:='gloves\glove\pair\';\r
+n[28]:='security suit\suit\badge\';       {cont at #31}\r
+n[29]:='mug\cup\drink\';\r
+n[30]:='all\everyth\object\objects\';\r
+n[31]:='securit suit\securit\';\r
+n[32]:='containers\crate\crates\';        {cont}\r
+n[33]:='cargo\contain\storage\';\r
+n[34]:='ceiling\roof\up\';\r
+n[35]:='seat\command chair\chair\';       {cont}\r
+n[36]:='chairs\seats\toilet\';\r
+n[37]:='computer\termina\compute\';\r
+n[38]:='controls\machine\';               {cont}\r
+n[39]:='control panel\control\';\r
+n[40]:='cyan button\cyan\';               { changes to socket }\r
+n[41]:='tan button\tan\';\r
+n[42]:='energy flow\energy\flow\';\r
+n[43]:='purple button\purple\violet\';\r
+n[44]:='button\white button\white\';      {cont}\r
+n[45]:='buttons\';\r
+n[46]:='robot\defense robot\defense\';    {cont at #133}\r
+n[47]:='vines\vine\branche\branch\';\r
+end; { Assign3 }\r
+overlay procedure Assign4;\r
+begin\r
+n[48]:='dial\knob\dials\knobs\tap\';\r
+n[49]:='ground\floor\earth\deck\bay\';    {cont}\r
+n[50]:='glass floor\rocks\down\';\r
+n[51]:='equipment\equipme\';\r
+n[52]:='numeric keypad\keypad\';          {cont}\r
+n[53]:='numeric\numbers\keyboar\';\r
+n[54]:='rail\railing\column\';\r
+n[55]:='panel\compart\';\r
+n[56]:='door\swingin door\doors\';        {cont}\r
+n[57]:='swingin doors\hatch\swingin\';\r
+n[58]:='key\keys\round recess\';\r
+n[59]:='screen\monitor\screens\data\';\r
+n[60]:='player\self\waist\me\myself\';    {cont}\r
+n[61]:='hand\hands\arm\feet\foot\';\r
+n[62]:='ship\my ship\shuttle\vehicle\';   {cont}\r
+n[63]:='space ship\space craft\craft\';\r
+n[64]:='slot\opening\hole\round\';        {cont}\r
+n[65]:='niche\holes\recess\';\r
+n[66]:='acid water\acid river\stream\';   {cont}\r
+n[67]:='acid stream\river\acid\gap\';\r
+n[68]:='pyramid\podium\structure\';\r
+n[69]:='cryo tube\cryogen tube\';         {cont}\r
+n[70]:='cryogen\cryo\tube\tubes\';\r
+n[71]:='steps\step\stairs\ladder\';\r
+n[72]:='picture\mural\drawing\';\r
+n[73]:='bones\bone\skeleto\remains\';\r
+n[74]:='flash\blindin flash\blindin\';    {object never here!}\r
+n[75]:='creature\hairy creatur\hairy\';   {cont}\r
+n[76]:='scaled creatur\creatur\';         {cont}\r
+n[77]:='scaled\';\r
+n[78]:='wheel\handle\';\r
+n[79]:='water\';\r
+n[80]:='bed\bunk\beds\bunks\';\r
+n[81]:='sign\post\menu\message\note\';\r
+n[82]:='solar map\map\solar\drawing\';    {changes to laser beam}\r
+n[83]:='western table\western\';\r
+n[84]:='middle table\middle\';\r
+n[85]:='eastern table\eastern\';\r
+n[86]:='table\tables\';\r
+n[87]:='shelf\shelves\';\r
+n[88]:='gun\ray gun\signpos\';\r
+n[89]:='statue\dog statue\dog\';\r
+n[90]:='serum dispenser\dispens\';        {cont}\r
+n[91]:='serum dispens\';\r
+n[92]:='serum\medicin\cure\liquid\';\r
+n[93]:='platform\platfor\';\r
+end; { Assign4 }\r
+overlay procedure Assign5;\r
+begin\r
+n[94]:='booth\transpo\';\r
+n[95]:='wristband\wristba\transla\';\r
+n[96]:='building\buildin\complex\';       {cont}\r
+n[97]:='store\station\tavern\';\r
+n[98]:='sink\basin\tap\faucet\spout\';\r
+n[99]:='glunk lite\lite\glunk\beer\';\r
+n[100]:='Drink\ambross\';                 {cont}\r
+n[101]:='pink ztulctw\ztulctw\pink\';     {cont}\r
+n[102]:='bloody foeboz\foeboz\bloody\';\r
+n[103]:='red star\red\star\flare\';\r
+n[104]:='telescope\telesco\eyepiec\';\r
+n[105]:='outer planet\inner planet\';     {cont}\r
+n[106]:='line planet\fifth planet\';      {cont}\r
+n[107]:='ringed planet\ringed\';          {cont}\r
+n[108]:='inner\fifth\line\outer\';        {cont}\r
+n[109]:='planets\planet\last\';\r
+n[110]:='keyhole\';              { changes to speaker }\r
+n[111]:='bartender\bartend\waiter\';\r
+n[112]:='trees\tree\forest\jungle\';\r
+n[113]:='path\passage\tunnel\road\';      {cont}\r
+n[114]:='corrido\lobby\chamber\air\';\r
+n[115]:='antenna\dish\hollow\';\r
+n[116]:='wall\south wall\north wall\';    {cont}\r
+n[117]:='east wall\west wall\walls\';\r
+n[118]:='ice\snow\';\r
+n[119]:='writing\chart\list\';\r
+n[120]:='swamp\quicksa\';\r
+n[121]:='radio\transmi\';\r
+n[122]:='dirt\sand\dust\desert\rocks\';\r
+n[123]:='scientist\scienti\him\man\';\r
+n[124]:='aliens\two aliens\alien\';\r
+n[125]:='fence\wire fence\wire\';\r
+n[126]:='bar\';                    { changes to hinge }\r
+n[127]:='window\windows\alarm\siren\';\r
+n[128]:='reactor\regulat\';\r
+n[129]:='gas\fumes\icy mist\mist\icy\';\r
+n[130]:='spears\spear\';\r
+n[131]:='light\glow\lights\catwalk\';\r
+n[132]:='drazil tracks\tracks\drazil\';\r
+n[133]:='droid\sensor\probe\';\r
+\r
+\r
+                {SEPWORD LIST:  GROUPS ALL PREPOSITIONS}\r
+\r
+p[1]:='on top\around\above\over\';        {cont}\r
+p[2]:='across\on\to\onto\';\r
+p[3]:='against\at\toward\towards\';       {cont}\r
+p[4]:='in directi\';\r
+p[5]:='in\through\down\';\r
+p[6]:='using\with\making use\by\';\r
+p[7]:='beside\near\close to\next to\';    {cont}\r
+p[8]:='leaning against\';\r
+p[9]:='off\from\';\r
+p[10]:='under\underne\beneath\below\';\r
+p[11]:='a\for\';\r
+\r
+                     {ADVERB LIST:  GROUPS ALL MOODS}\r
+\r
+a[1]:='gently1careful2softly3calmly4quietly5lightly6easily7';\r
+a[2]:='slowly1leisure2slow3with care4cautiou5closely6';\r
+a[3]:='strongl1firmly2solidly3powerfu4with force5hard6';\r
+a[4]:='quickly1fast2rapidly3speedil4very fast5';\r
+end; { Assign5 }\r
+\r
+                               {ROOM  NAMES}\r
+\r
+overlay procedure Names1;\r
+begin\r
+rn[1]:='Bridge';\r
+rn[2]:='Forward Corridor';\r
+rn[3]:='Rear Corridor';\r
+rn[4]:='Ship''s Lab';\r
+rn[5]:='Sanitary Facilities';\r
+rn[6]:='Sleep Chamber';\r
+rn[7]:='Cargo Area';\r
+rn[8]:='Tavern';\r
+rn[9]:='West Hallway';\r
+rn[10]:='Central Hallway';\r
+rn[11]:='East Hallway';\r
+rn[12]:='Suite #4';\r
+rn[13]:='Crossroads';\r
+rn[14]:='Dusty Road';\r
+rn[15]:='Dusty Road';\r
+rn[16]:='Gravel Road';\r
+rn[17]:='Gravel Road';\r
+rn[18]:='Paved Road';\r
+rn[19]:='Paved Road';\r
+rn[20]:='General Store';\r
+rn[21]:='Gravel Lot';\r
+rn[22]:='Top of Ship';\r
+rn[23]:='Deep Pit';\r
+rn[24]:=rn[22];\r
+rn[25]:='Sandy Clearing';\r
+rn[26]:='Winding Path';\r
+rn[27]:=rn[26];\r
+rn[28]:=rn[26];\r
+rn[29]:=rn[26];\r
+rn[30]:='Top of Tree';\r
+rn[31]:='Quicksand Pit';\r
+rn[32]:=rn[26];\r
+rn[33]:=rn[26];\r
+rn[34]:='Front of Pyramid';\r
+rn[35]:='Vestibule';\r
+rn[36]:='Descending Stairs';\r
+rn[37]:='Halcyon Hall';\r
+rn[38]:='Departure Room';\r
+rn[39]:='Holey Hall';\r
+rn[40]:='Pyramid Lobby';\r
+  end; { Names1 }\r
+overlay procedure Names2;\r
+begin\r
+rn[41]:='Treasure''s Keeper';\r
+rn[42]:='Ladder Room';\r
+rn[43]:='Shifting Room';\r
+rn[44]:=rn[43];\r
+rn[45]:=rn[43];\r
+rn[46]:=rn[43];\r
+rn[47]:=rn[43];\r
+rn[48]:=rn[43];\r
+rn[49]:=rn[43];\r
+rn[50]:='Stairway Room';\r
+rn[51]:='Lower Stairway';\r
+rn[52]:='Misty Passage';\r
+rn[53]:='Damp Passage';\r
+rn[54]:='Dark Passage';\r
+rn[55]:='Circular Chamber';\r
+rn[56]:='The Erusaert';\r
+rn[57]:='Solar Chamber';\r
+rn[58]:='Eternal Trap';\r
+rn[59]:='Overgrown Path';\r
+rn[60]:='Antenna Building';\r
+rn[61]:='Monitor Outpost';\r
+rn[62]:='Booth';\r
+rn[63]:='Booth';\r
+rn[64]:='Lobby';\r
+rn[65]:='North Corridor';\r
+rn[66]:='Central Corridor';\r
+rn[67]:='South Corridor';\r
+rn[68]:='Decontamination';\r
+rn[69]:='Waiting Room';\r
+rn[70]:='Transporter Booth';\r
+rn[71]:='Monitor Station';\r
+rn[72]:='Reactor Control';\r
+rn[73]:='Communications';\r
+rn[74]:='Computer Station';\r
+rn[75]:='Elevator  1st Floor';\r
+rn[76]:='Elevator  2nd Floor';\r
+rn[77]:='Observatory';\r
+rn[78]:='Icy Platform';\r
+rn[79]:='Confirmation Port';\r
+rn[80]:='Inspection Lobby';\r
+  end; { Names2 }\r
+overlay procedure Names3;\r
+begin\r
+rn[81]:='Circular Corridor';\r
+rn[82]:=rn[81];\r
+rn[83]:=rn[81];\r
+rn[84]:=rn[81];\r
+rn[85]:=rn[81];\r
+rn[86]:=rn[81];\r
+rn[87]:=rn[81];\r
+rn[88]:=rn[81];\r
+rn[89]:='Reactors West';\r
+rn[90]:='Reactors East';\r
+rn[91]:='Emergency Override';\r
+rn[92]:='Climate Control';\r
+rn[93]:='Elevator';\r
+rn[94]:='Maintenance';\r
+rn[95]:='Transmission Room';\r
+rn[96]:='Station Control';\r
+rn[97]:='Cryogenic Chamber';\r
+rn[98]:='Indentity Booth';\r
+rn[99]:='Security Tunnel #1';\r
+rn[100]:='Security Tunnel #2';\r
+rn[101]:='Security Tunnel #3';\r
+rn[102]:='North Catwalk';\r
+rn[103]:='East Catwalk';\r
+rn[104]:='South Catwalk';\r
+rn[105]:='West Catwalk';\r
+rn[106]:='Junction';\r
+rn[107]:='Conference Room';\r
+rn[108]:='Reactor Regulators';\r
+rn[109]:='Medical Quarters #6';\r
+  end; { Names3 }\r
+\r
+\r
+                               {ROOM  NAMES}\r
+overlay procedure Place1;\r
+ begin\r
+for x:=1 to RMax do L[x]:=[];\r
+L[1]:=[16,35..41,43,44,52,55,56,59,62,112,120,125];\r
+L[2]:=[38,56,62,64,71,78];\r
+L[3]:=[38,55,81];\r
+L[4]:=[38,44,51,52,55,62,64,81,90,119];\r
+L[5]:=[35,38,48,62,98];\r
+L[6]:=[38,62,69,80];\r
+L[7]:=[32,51,62,87];\r
+L[8]:=[29,35,56,71,81,83..86,96,99,100,111,119,126];\r
+L[9]:=[56,71];\r
+L[10]:=[56];\r
+L[11]:=[56];\r
+L[12]:=[7,48,56,80,87,98,110];\r
+L[13]:=[56,81,88,96];\r
+L[14]:=[81,96,125];\r
+L[15]:=[125];\r
+L[16]:=[81,96];\r
+L[17]:=[]; {empty}\r
+L[18]:=[81,125];\r
+L[19]:=[]; {empty}\r
+L[20]:=[5,6,32,38,51,86,87,96,132];\r
+L[21]:=[62,71,81,125];\r
+L[22]:=[56,62,71,78,81,96,125];\r
+L[23]:=[73,81];\r
+L[24]:=[56,62,71,78,112,120];\r
+L[25]:=[62,71,112,120];\r
+L[26]:=[66,112,120];\r
+L[27]:=[66,112,120];\r
+L[28]:=[112,120];\r
+L[29]:=[112,120];\r
+L[30]:=[68,112,120];\r
+L[31]:=[47,112,120];\r
+L[32]:=[112,120];\r
+L[33]:=[112,120];\r
+L[34]:=[56,64,68,71,81,89,112,119,120,126];\r
+L[35]:=[56,71];\r
+L[36]:=[71];\r
+L[37]:=[71];\r
+L[38]:=[10,51,73];\r
+L[39]:=[129];\r
+L[40]:=[56,68];\r
+L[41]:=[18,73,56,68];\r
+L[42]:=[71];\r
+{ L[43] through L[49] are empty }\r
+L[50]:=[71];\r
+L[51]:=[71];\r
+L[52]:=[64];\r
+L[53]:=[];\r
+L[54]:=[];\r
+L[55]:=[11];\r
+ end; { Place1 }\r
+overlay procedure Place2;\r
+ begin\r
+L[56]:=[66,68,110];\r
+L[57]:=[56,72,82,103,109];\r
+L[59]:=[112,120];\r
+L[60]:=[56,96,112,115,120];\r
+L[61]:=[37,38,44,56,59,93,94,96];\r
+L[62]:=L[61];\r
+L[63]:=L[61]+[20];\r
+L[64]:=[35,56,72,81,86,109,127];\r
+L[65]:=[56];\r
+L[66]:=[56,64];\r
+L[67]:=[56];\r
+L[68]:=[44,56,131];\r
+L[69]:=[35,56,131];\r
+L[70]:=[40,41,43,44,56,93,94];\r
+L[71]:=[59];\r
+L[72]:=[37,38,44,46,55,128];\r
+L[73]:=[28,35,38,48,56,115,121,127];\r
+L[74]:=[37,38,44,52,59];\r
+L[75]:=[44,56];\r
+L[76]:=[44,56];\r
+L[77]:=[56,104,127];\r
+L[78]:=[54,56,93,96,115,118];\r
+L[79]:=[44,56,64];\r
+L[80]:=[35,55,56,72,86];\r
+L[81]:=[56,72];       { Picture of a Grey Disk }\r
+L[82]:=[56,72,103];   { Picture of the Red Star }\r
+L[83]:=[56,72,115];   { Picture of an Antenna }\r
+L[84]:=[46,56,72];    { Picture of a Robot }\r
+L[85]:=[56,72];       { Picture of a Cloud }\r
+L[86]:=[56,64,69,72]; { Picture of a Cryogenic Tube }\r
+L[87]:=[56,72];       { Picture of an Atomic Nucleus }\r
+L[88]:=[56,72];       { Picture of an Atomic Nucleus }\r
+L[89]:=[38,44,56,59,95,128];\r
+L[90]:=[38,56,59,128];\r
+L[91]:=[37,38,44,51,52,56,59,64,69,95,127,129];\r
+L[92]:=[35,56,59];\r
+L[93]:=[44,52,56];\r
+L[94]:=[2,51,56,87];\r
+L[95]:=[38,44,52,56,121,127];\r
+L[96]:=[38,56,59];\r
+L[97]:=[56,69,129];\r
+L[98]:=[56,59,81,119];\r
+L[99]:=[46,55,56,88];\r
+L[100]:=[55,56];\r
+L[101]:=[46,55,56,88];\r
+L[102]:=[42,54,56,131];\r
+L[103]:=[42,54,131];\r
+L[104]:=[42,54,131];\r
+L[105]:=[42,54,56,131];\r
+L[106]:=[56];\r
+L[107]:=[19,35,56,86];\r
+L[108]:=[55,56,128];\r
+for x:=1 to RMax do L[x]:=L[x]+[30,34,49,60,103,113,116,122,131];\r
+ end;\r
+                           {<<<*** END ***>>>}\r
+\1a
\ No newline at end of file