From d89cf49edce51382f3ffd0b75bd437d32727754e Mon Sep 17 00:00:00 2001 From: Jason Self Date: Sat, 10 May 2014 11:35:39 -0700 Subject: [PATCH] Importing Apogee Software's GPL release of Beyond The Titanic into version control --- HELP.TXT | 23 + INSTRUCT.TXT | 184 +++++ gpl-2.0.txt | 339 +++++++++ src/ADPARSER.PAS | 359 +++++++++ src/BEYOND.PAS | 1905 ++++++++++++++++++++++++++++++++++++++++++++++ src/COMMANDS.PAS | 646 ++++++++++++++++ src/LINE | Bin 0 -> 34263 bytes src/LINERITE.PAS | 154 ++++ src/OBJECTS.PAS | 111 +++ src/ROOMRITE.PAS | 176 +++++ src/ROOMS1 | 4 + src/ROOMS2 | Bin 0 -> 18557 bytes src/SPECIAL.PAS | 176 +++++ src/SPECIAL1 | Bin 0 -> 20485 bytes src/SPECIAL2 | Bin 0 -> 20485 bytes src/TURBO.MSG | 105 +++ src/WORDLIST.PAS | 282 +++++++ 17 files changed, 4464 insertions(+) create mode 100644 HELP.TXT create mode 100644 INSTRUCT.TXT create mode 100644 gpl-2.0.txt create mode 100644 src/ADPARSER.PAS create mode 100644 src/BEYOND.PAS create mode 100644 src/COMMANDS.PAS create mode 100644 src/LINE create mode 100644 src/LINERITE.PAS create mode 100644 src/OBJECTS.PAS create mode 100644 src/ROOMRITE.PAS create mode 100644 src/ROOMS1 create mode 100644 src/ROOMS2 create mode 100644 src/SPECIAL.PAS create mode 100644 src/SPECIAL1 create mode 100644 src/SPECIAL2 create mode 100644 src/TURBO.MSG create mode 100644 src/WORDLIST.PAS diff --git a/HELP.TXT b/HELP.TXT new file mode 100644 index 0000000..329f2ea --- /dev/null +++ b/HELP.TXT @@ -0,0 +1,23 @@ + BEYOND THE TITANIC + +To start: Put the game disk in drive A:, if you have two disk drives put a + formatted disk (it can contain other files) into drive B:. + This will be the SAVE/RESTORE disk. You must use DOS 2.0 or + later. + + For game instructions type the following from the DOS A> prompt: + + INSTRUCT + + This will list the game instructions to the screen. + +Game hints: Try examining things and explore all of the rooms, a map is a + must. As you play the game draw out small boxes on of piece of + grid paper, with lines leading to surrounding boxes (representing + passages.) + + If the game is played perfectly, it will take the you at least + 350 moves to solve everything and return home (San Francisco.) + On average the game will take over 2500 moves to complete! + + \ No newline at end of file diff --git a/INSTRUCT.TXT b/INSTRUCT.TXT new file mode 100644 index 0000000..21957cb --- /dev/null +++ b/INSTRUCT.TXT @@ -0,0 +1,184 @@ + + + + + INSTRUCTIONS + + FOR + ____________________ + | | + | BEYOND THE TITANIC | + |____________________| + + A Text & Sound Adventure Fantasy + + Programmed by Scott Miller + + + An Apogee Software Production + ----------------------------- + + + + + +PLEASE NOTE THAT BEYOND THE TITANIC IS A SHAREWARE GAME. + --------- + +The author asks that those who enjoy the game please pay $5 or $10 to help +compensate the effort that went into programming Beyond the Titanic. This +small fee will also encourage the author to continue making new games, like +the recently released Supernova and Kingdom of Kroz. + +This payment will also register the payer for telephone support and clues. + +Please make checks payable to: + + Scott Miller (214) 240-0614 + 4206 Mayflower Dr. + Garland, TX 75043 + +Please support the SHAREWARE concept, it benefits you the most. + +Thank you and enjoy the game... + +Scott Miller + + + + + + +The STORY +------------------------------------------------------------------------------ + + As the game begins you find yourself standing on board the Titanic, on her +maiden voyage. Of course, that particular voyage was never completed! + Your goal is to survive and somehow get back to your home in the United +States. + Most of your time will be spent solving numerous problems and dangers that +arise, like starvation and drowning. If you've played any of Infocom's famous +text games you will notice that Beyond the Titanic is quite similar to Zork +and Planetfall. + Hints: Examine everything and make a map as you move through the many +game locations. There are not any puzzles that cannot be solved logically; +apply an "If I were really there, I would do this..." type of attitude. + To add to the game's realism sound effects are used throughout the game. + + + + + +LOADING +------------------------------------------------------------------------------ + +Game setup for single disk drive: + +1) Insert the GAME disk. +2) Type in BEYOND and press the button. +3) When the "Do you have a colr screen?" question appears, press Y or N. +4) When the "How many disk drives do you have?" question appears, press + the number 1. +5) The game will begin. + +Game setup for two disk drives: + +1) Insert the GAME disk into drive A: +2) Insert your SAVE/RESTORE disk into drive B: +3) Type in BEYOND and press the button. +4) When the "Do you have a colr screen?" question appears, press Y or N. +4) When the "How many disk drives do you have?" question appears, press + the number 2. +6) The game will begin. + +The VERBS +------------------------------------------------------------------------------ + + Beyond the Titanic has a vocabulary of over 750 words--more than most +text adventures sold commercially. Here is a sampling of the verbs +understood by the game's parser. +EXAMINE (or EX for short) +INVENTORY (or I) +NORTH, SOUTH, NORTHWEST, UP, DOWN, IN, OUT, etc. (or first letter) +GET, DROP +PUSH, PULL, MOVE, PRESS, TOUCH +LOOK, LOOK INSIDE, LOOK BEHIND, LOOK THROUGH, LOOK UNDER, LOOK ON, etc. +WEAR, TAKE OFF +TIE, UNTIE +PUT, INSERT +OPEN, UNLOCH +TURN, ROTATE +FIND CRAWL +SAY TYPE +CUT HELP +JUMP SHAKE +SLEEP FLY +DANCE FALL + + + +Example structures: + +TIE [object] (TO, AROUND) [object] - usually used with a rope. +EX [object] - used to study an object closely. +GIVE [object] TO [object] +PUT [object] (WITHIN, UNDER, ON, BESIDE, BEHIND, etc.) [object] +SAY [something] - used to converse with other game characters. +TYPE [something] - used to enter data on a keyboard device. +TURN [object] or TURN [object] to [position] - used for dials. +OPEN [object] WITH [object] + + +Example Sentences: + +>> PICK UP THE KNIFE THEN THROW IT AT THE WALL +>> E.N.OPEN HATCH THEN CLIMB DOWN THE LADDER. READ SCREEN. BREAK IT. +>> SHOOT THE CREATURE WITH THE GUN PLEASE, THEN RUN SOUTH! + + + + +The COMMANDS +------------------------------------------------------------------------------ + + Here's a list of the major commands you will need to know in order to play +Beyond the Titanic. + +QUIT - ends the current game. +SAVE - allows you to save your present game location. Use a separate formatted + disk. Up to 26 SAVE files per disk. SAVE names can be up to eight + letters long. To resume a previously SAVED game use the RESTORE + command. +RESTORE - allows you to restore a SAVED game location. +DIAGNOSE - reveals your health, appetite, etc. +LOOK (or L) - does a brief examination of your current game location. +REPEAT (or R) - repeats your last line of commands. +WAIT (or Z) - lets one move pass without any action. +SCORE - gives you your current ranking. +ROOM DESCRIPTION (or RD) - toggles between full room descriptions or brief + room descriptions. + + + + + + + +MISCELLANEOUS +------------------------------------------------------------------------------ + + Beyond the Titanic only recognizes the first SEVEN letters of any word or +command. (Note: Infocom games only use the first SIX letters.) + The word AND is not understood. You cannot say, for example, GET GUN +AND ROPE, or PUT ROPE AND KNIFE IN SACK. + With the verbs GET and DROP you may refer to every object by saying +GET ALL or DROP ALL. The word ALL is not accepted anywhere else. + It is a good idea to draw a map as you find new rooms in the game. +Without a map it is easy to get lost, or it might be difficult to find a +room you need to get to in a hurry. + +*** END OF FILE *** + + + + \ No newline at end of file diff --git a/gpl-2.0.txt b/gpl-2.0.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/gpl-2.0.txt @@ -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. + + + Copyright (C) + + 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. + + , 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/ADPARSER.PAS b/src/ADPARSER.PAS new file mode 100644 index 0000000..1def3ca --- /dev/null +++ b/src/ADPARSER.PAS @@ -0,0 +1,359 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +{*****************************************************************************} +{* ADPARSER *} +{* by Scott Miller *} +{* This include file to Adgame contains the word parser commands. *} +{* Copyright 1984 Pending *} +{*****************************************************************************} + + +procedure RR(RoomNum : integer); + begin FlagSA:='s'; + seek(rooms1,RoomNum);seek(rooms2,RoomNum); + READ(rooms1,text1);READ(rooms2,text2); + writeln(text1,text2); + end; {of RoomRead} + + +procedure RS(RoomNum : integer); + begin + FlagSA:='s'; + seek(Special1,RoomNum);seek(Special2,RoomNum); + READ(Special1,text1);READ(Special2,text2); + writeln(text1,text2); + end; {of SpecialRead} + +procedure RL(RoomNum : integer); + var text1 : str80; + begin + FlagSA:='s'; + seek(Line1,RoomNum); + READ(Line1,text1); + writeln(text1); + end; {of LineRead} + + +procedure Format(var input : Str80); + procedure D(A:str14; B: Byte); + begin while pos(A,input)<>0 do delete(input,pos(A,input),B) end; + begin input:=input+' '; insert(' ',input,1); + d(' of ',3); d(' go ',3); d('''',1); d('"',1); d(',',1); + d(' a ',2); d('?',1); d('!',1); d(';',1); d('#',1); + d(' the ',4); d('fly ',4); d('drive ',6); d('run ',4); + d('walk ',5); d('travel ',7); d('please ',7); d('room ',5); + d('crawl se',6); d('crawl nw',6); d('steer ',6); d('crawl n ',6); + d('crawl s ',6); d('crawl e',6); d('crawl w',6); d('that ',5); + d('first ',6); d('second ',7); d('number ',7); + d('this ',5); d('game ',5); d('i want to ',10); d(' my ',3); d('big ',4); + d('those ',6); d('them ',5); d('broken ',7); d('large ',6); + d('huge ',5); d('small ',6); d('tiny ',5);d('little ',7); d('within ',4); + d('yes ',3); d('no ',2); d('wade ',4); d('swim ',4); + while pos('examine ',input)>0 do delete(input,pos('examine ',input)+2,5); + while pos('into ',input)>0 do delete(input,pos('into ',input)+2,2); + while pos('. ',input)>0 do delete(input,pos('. ',input)+1,1); + while pos('inside ',input)>0 do delete(input,pos('inside ',input)+2,4); + d(' .',1); d(' ',1); d('..',1); + if(input[1]='.')then delete(input,1,1); + while(length(input)>0)and(input[1]=' ')do delete(input,1,1); + while(length(input)>0)and(input[length(input)]=' ')do + delete(input,length(input),1); + if(input='')or(input[1]='.')then writeln('Whoops!') + end; {of Format} + + +procedure Chop(var input : Str80); + var Word : Str80; + j, l : integer; + begin + if length(input) >0 then + begin + input:=input+' '; + j:=1; + repeat + Word:=''; + while(input[j]<>' ')and(input[j]<>'.')do begin + Word:=Word+input[j]; + j:=j+1 + end; + if length(Word) >7 then + begin + l:=pos(Word,input); + j:=j+(7-length(Word)); + delete(input,l,length(Word)); + delete(Word,8,120); + insert(Word,input,l) + end; + j:=j+1; + until (j-1)=length(input); + delete(input,length(input),1) + end + end; {of Chop} + + +procedure LowerCase(var input : Str80); + var j:byte; + begin + if length(input) > 0 then + for j:=1 to length(input) do + if(input[j] in ['A'..'Z'])then + input[j]:=chr(ord(input[j])+32) + end; {of LowerCase} + + +procedure FindVerb (var input:Str80;var Word:Str14;var Verb:integer); + var j, k, r : integer; + begin + j:=1; + input:=input+' '; + Word:=''; + while input[j]<>' ' do begin + Word:=Word+input[j]; + j:=j+1 + end; + if length(Word+' ')' ' do begin + Word:=Word+input[j]; + j:=j+1 + end + end; + + Verb:=Null; + for r:= 0 to VMax do + begin + k:=0; + repeat + k:=k+1; + if v[r,k]=Word then + Verb:=r; + until (v[r,k]=Q)or(k=5) + end; + + if(pos(' ',Word)<>0)and(Verb=Null)then + begin + delete(Word,pos(' ',Word),8); + for r:=0 to VMax do + begin + k:=0; + repeat + k:=k+1; + if v[r,k]=Word then + Verb:=r; + until (v[r,k]=Q)or(k=5) + end + end; + delete(input,length(input),1); + if Verb<>Null then delete(input,1,length(Word)); + if input[1]=' 'then delete(input,1,1) + end; {of FindVerb} + + +procedure FindNoun(var input:Str80;var Word:Str14;var Noun:integer); + var j, k, t : integer; + begin + j:=1; + input:=input+' '; + Word:=''; + while input[j]<>' ' do begin + Word:=Word+input[j]; + j:=j+1 + end; + if length(Word+' ')' ' do begin + Word:=Word+input[j]; + j:=j+1 + end + end; + + Noun:=Null; + for t:=0 to NMax do + begin + k:=0; + repeat + k:=k+1; + if n[t,k]=Word then + Noun:=t; + until (n[t,k]=Q)or(k=5) + end; + + if(pos(' ',Word)<>0)and(Noun=Null)then + begin + delete(Word,pos(' ',Word),8); + for t:=0 to NMax do + begin + k:=0; + repeat + k:=k+1; + if n[t,k]=Word then + Noun:=t; + until (n[t,k]=Q)or(k=5) + end + end; + delete(input,length(input),1); + if Noun<>Null then delete(input,1,length(Word)); + if input[1]=' 'then delete(input,1,1) + end; {of FindNoun} + + +procedure FindSep(var input : Str80; var h : Str14); + var j : integer; + begin + input:=input+' '; + j:=1; + h:=''; + while input[j]<>' ' do begin + h:=h+input[j]; + j:=j+1 + end; + if pos(' '+h+' ',' crawl on at to in off with within into '+ + ' above against through beside behind around across '+ + ' inside from by under using near over onto down ') >0 then + begin + delete(input,length(input),1); + delete(input,1,length(h)); + if input[1]=' ' then delete(input,1,1); + if(h='on')or(h='around')or(h='above')or(h='over')or(h='onto') + then h:='to'; + if(h='inside')or(h='within')or(h='through')or(h='into')or(h='down') + then h:='in'; + if(h='using')then h:='with'; + if(h='beside')or(h='by')then h:='near'; + if(h='against')then h:='at'; + if(h='across')then h:='over' + end + else + begin + h:='s'; + delete(input,length(input),1) + end + end; {of FindSep} + + +procedure Check(var SepWord : Str14); + var j : integer; + begin + Verb:=Null; Noun:=Null; Noun2:=Null; DialNum:=Null; Flag:='?'; + SepWord:='s'; + if length(input)>0then + begin + FindVerb(input,Word,Verb); + if Verb<>Null then + if(length(input)>0)and not(Verb in [31,53,63])then + begin + FindNoun(input,Word,Noun); + If(Noun<>Null)then LastNoun:=n[noun,1]; + if Noun<>Null then + if(Verb in[0,8,9,21,36,6,7,15,17,32,26])and(length(input)=0)then + begin + Flag:='g'; + if(Verb in[36,15])then Verb:=9 + end + else + if(Verb in[0,8,21,36,37,29,9,39,6,15,7,17,32,26,40])then + if length(input)>0 then + begin + if(Verb=9)then Verb:=29 else ; + FindSep(input,SepWord); + if SepWord<>'s' then + if length(input)>0 then + if Verb=39 then + begin + val(input,DialNum,j); + Flag:='g' + end + else + begin + FindNoun(input,Word,Noun2); + if Noun2<>Null then + if length(input)>0 then + Flag:='r' + else + Flag:='g' + else + begin + FindVerb(input,Word,Verb); + if Verb=Null then Flag:='n' + else Flag:='b' + end + end + else + if(Verb=39)and((SepWord='to')or(SepWord='off'))then + Flag:='g' else Flag:='e' + else + Flag:='r' + end + else + Flag:='s' + else + if length(input)>0 then + begin FindVerb(input,Word,j);if j<>Null then Flag:='b' else + begin FindSep(input,SepWord);if SepWord<>'s' then Flag:='b' else + begin FindNoun(input,Word,j);if j<>Null then Flag:='h' end end; + if Flag='?' then Flag:='v' + end + else + Flag:='g' + else + begin + FindVerb(input,Word,Verb); + if Verb=Null then Flag:='n' + else Flag:='b' + end + end + else + if Verb in OneWordCommands then Flag:='g' + else Flag:='m' + else + begin + FindNoun(input,Word,Noun2); + If Noun2=Null then Flag:='v' + else Flag:='a' + end + end; + case flag of + 'v','n':if pos(' '+Word+' ',' crawl on at to in off with within into '+ + ' above against through beside behind around down '+ + ' inside by under using near over onto top below '+ + ' from away want across ')>0 then begin + write('The word ''',Word);RL(393)end + else writeln('I don''t understand the word ''',Word,'.'''); + 'b' :begin + if pos(' ',Word)>0 then delete(Word,pos(' ',Word),9); + writeln('You can''t use the word ''',Word,''' here.') + end; + 's' :RL(129); + 'r' :RL(130); + 'e' :RL(131); + 'm' :RL(132); + 'a' :RL(316); + 'h' :begin write(Word);RL(392)end + end; + Skip:=True; + if flag<>'g' then begin Attack:=False;Line:='';Skip:=False end + end; {of Check} + +{***************************** END OF ADPARSER ******************************} + \ No newline at end of file diff --git a/src/BEYOND.PAS b/src/BEYOND.PAS new file mode 100644 index 0000000..1610996 --- /dev/null +++ b/src/BEYOND.PAS @@ -0,0 +1,1905 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +{****************************************************************************} +{* BEYOND THE TITANIC *} +{* Written by Scott Miller with Turbo Pascal V.2. Began May 12, '84. *} +{* Shareware Version *} +{* Copyright 1987 *} +{$C-,K-,V-,R-****************************************************************} + +{ Last modified: July 23, 1987 } + +const + Q = '#'; + VMax = 65; + NMax = 89; + RMax = 76; + Null = -1; + +type + ComSet = set of 0..VMax; + CharSet = set of Char; + PlayersObjects = set of 0..NMax; + Str14 = string[14]; + Str80 = string[80]; + Str240 = string[240]; + SaveGame = record + aInven, + aKitSet, + aCabiSet :PlayersObjects; + aPanelCon, + aSlotCon, + aCompCon, + aRopeCon, + aTic, + aYearDial, + aPrm, + aMnRm, + aSc, + aShots, + aShRm, + aRx :integer; + aEv :CharSet; + aCode, + aLoc :Str14; + aKeyHole :boolean; + end; + +var + WordList : file of Str14; + Things : file of integer; + Objects : file of PlayersObjects; + GameSave : file of SaveGame; + DiskSave : SaveGame; + Input, + Again, + Line : Str80; + V{erb} : array [0..VMax,1..5] of Str14; + N{oun} : array [0..NMax,1..5] of Str14; + R{oom} : array [0..NMax] of integer; + P{lace} : array [0..RMax] of PlayersObjects; + RmSh : set of 0..14; + OneWordCommands: Comset; + Mov{able}, + Inven{tory}, + KitSet, + CabiSet : PlayersObjects; + Word, + LastNoun, + Drive, + Code, + Loc{ation}, + SepWord : Str14; + Rooms1, Rooms2, + Special1, Special2 : file of Str240; + Text1, Text2 : Str240; + Line1 : file of Str80; + Verb, + Noun, Noun2, + PanelCon, + RopeCon, + CompCon, + SlotCon, + RopeOld, + Tic, + YearDial, + DayDial, + Prm, {Player Room} + MnRm, {Monster Room} + Sc{ore}, + Shots, + DialNum, + Stuff, + ShRm, {Shuttle Room} + m0,m1,m2,m3,m4,m5,m6,m7,m8,m9, + Rx, {deserted road} + Ox, {ocean bottom} + x, y, o : integer; + Flag, + FlagSA : char; + Ev{ent} : CharSet; + Attack, + Skip, + Back, + KeyHole, + Verbose : boolean; + + + +{$Ia:AdParser.PAS}{ <--- Loads in sentence logic. <*********************} + + +{$Ia:Commands.PAS}{ <--- Loads in misc. procedures. <*********************} + + +{$Ia:WordList.PAS }{ <----- CALLS UP THE VERBS & NOUNS <*******************} + + +{$Ia:Objects.PAS }{ <----- CALLS UP THE VERBS & NOUNS <*******************} + + +{===================} +overlay procedure DefaultAnswers1; +var o : integer; +begin + +CASE VERB OF + +22 :begin if(Prm in[59..68])then + begin RmSh:=RmSh-[ShRm];RS(84)end; + if flasoff and (Prm in [6..24])then RL(54) else + if Verbose then DescribeRm + else begin Verbose:=true;DescribeRm;Verbose:=false;end; + if(23 in p[Prm])and(MnRm=Prm)then RL(357); + if Back then begin Attack:=False; Back:=False;end + end; + +18 :if inven=[] then RL(116) + else + begin + writeln('You have in your possession...'); + for o:= 0 to NMax do + begin + if(o in inven)then + if(o=74)then + writeln('an ',n[o,1])else writeln('a ',n[o,1]); + if(ropecon in inven)and(o=ropecon)then + writeln(' The rope is tied to the ',n[o,1],'.'); + if(o=74)and(en('p'))then RL(174); + if(o=89)and(en('i'))then RL(321); + end; + end; + +11 :case noun of + 60:Diagnose; + 2:if(en('b'))then RL(198) else RL(199); + 29:begin RL(89);if(en('a'))then RL(200) else RL(201);end; + 57:if(ropecon<>Null)then + writeln('The rope is tied to the ',n[ropecon,1],'.') + else RL(133); + 65:if(Prm in[59..68])then RS(84)else Line:='l'; + 8:RL(202); + 7:RL(163); + 70:RL(164); + 52:RL(165); + 74:RL(166); + 23:RS(70); + 32:RL(253); + 13:RL(167); + 22:RL(226); + 1:if(Prm=42)and(13 in p[42])then RL(167); + 21:RL(227); + 9:if(Prm=49)then RL(228)else if(Prm>62)then RS(68)else RL(229); + 69:RL(355); + 77:RL(403); + 37:RL(295); + 27:RL(394); + 89:RL(338); + 18:if(Prm in[63..70])then RS(68)else RL(348); + 46,66:If(Prm in[58,59,63,69])then begin + TextColor(12);RS(83);TextColor(m2)end; + 87:RL(230); + 84:RL(231); + 34:begin RL(189); + if(Shots>0)then writeln('is about ',Shots*10,' percent full.') + else Writeln('is empty.')end; + 15:if(84 in p[Prm])then RL(180)else If(71 in p[Prm])then RL(182) + else RL(181); + 56,44:if(en('r'))then RL(51) else RL(52) + else if not(noun in[1,12,14,15,17,18,19,22,31,36,50, + 54,67,69,73,79,80,84,87,88])and(random(3)=1)then + case random(3) of + 0 :RL(407); + 1 :writeln('Yea, it''s definitely a ',n[noun,1],'!'); + 2 :writeln('It looks like any other ',n[noun,1],'.'); + end + else writeln('You see nothing special about the ',n[noun,1],'.') + end; + +41 :begin writeln('Time passes');y:=wherey;for o:=1 to 6 do + begin gotoxy(11+o,y-1);writeln('.');sound(o*99);delay(30)end; + if(Prm in[59..68])then sound(20)else nosound end; + +43..52 :if(Prm in[6..24])and(FlasOff)then RL(14)else + if(Prm=69)then RL(358)else RL(144); + +57,58 :begin Attack:=False; + if(Prm in[6..24])and(FlasOff)then RL(14)else RL(190);end; + + end {of case} +end; {of DefaultAnswers1} +{-------------------} +overlay procedure DefaultAnswers2; +var o : integer; +begin + +CASE VERB OF + +29 :if(noun in Mov)then + if(noun in inven)then + begin FlagSA:='r'; + case Noun2 of + 39:if(en('o'))then begin RL(186);Vanish(noun); + kitset:=kitset+[noun];r[noun]:=Prm;end + else RL(185); + 68:if(Prm=34)then + if(SlotCon=Null)then begin RL(186);Vanish(noun); + SlotCon:=Noun;r[noun]:=Prm;end + else Say(68,'being used') + else + if(noun=63)and(Prm=58)then + begin RL(337);KeyHole:=True;r[63]:=Prm;inven:=inven-[63];end + else RL(327); + 88:begin RL(293);vanish(noun);r[noun]:=random(4)+51;end; + 47,53,73:if(Prm in[0..6,9,10,13,41..43])then + begin RL(307);vanish(noun);end; + 11:if(en('k'))then begin RL(186);Vanish(noun); + CabiSet:=CabiSet+[noun];r[noun]:=Prm;end + else RL(187); + 26:if(Prm=76)and(noun=57)then begin RL(409);Vanish(57)end; + 49:if(PanelCon=Null)and(noun in[2,7,8,13,27,32,51,52,63,77])then + begin RL(186);Vanish(noun);PanelCon:=Noun;r[noun]:=Prm;end + else RL(188); + 30:if(noun=70)then + if not(en('d'))then + begin Ev:=Ev+['d'];RL(69);Vanish(70);r[70]:=Prm;end + else Say(70,'in the dirt') + else Crazy + end;{of case} + + if(FlagSA<>'s')then + begin + if(SepWord='to')then + if(noun2 in[4,6,9,11,14,16,22,30,50,59,61,64,65,69,75])then + begin RL(186);Vanish(noun);r[noun]:=Prm;end + else RL(197); + if(SepWord='at')or(SepWord='near')or(SepWord='behind')then + if(noun2 in[0,4,6,9,11,12,14,16,17,20..23,26,28,30,35,39,43, + 50,53,54,59,61,62,64..69,72,73,75,78..80])then + begin RL(186);Vanish(noun);r[noun]:=Prm;end + else RL(197); + if(SepWord='under')then + if(noun2 in[4,15,16,20,23,59,60,61,75])then + begin RL(186);Vanish(noun);r[noun]:=Prm;end + else RL(197); + if(SepWord='in')then + if(noun2 in[6,16,43,47,30,50,59,64,65,72,78,80,84])then + begin RL(186);Vanish(noun);r[noun]:=Prm;end + else RL(197); + if(FlagSA<>'s')then Crazy; + end + end + else writeln('First you must have the ',n[noun,1],'.') + else Crazy; + + end {of case} +end; {of DefaultAnswers2} +{-------------------} +overlay procedure DefaultAnswers3; +var o : integer; +begin + +CASE VERB OF + +31,63 :if(Verb=63)and(Prm<>MnRm)then RL(395) + else + if(Prm=MnRm)then + begin Attack:=False; + if(input='hi')or(input='hello')or(input='bye')then RL(396)else + if(copy(input,1,6)='follow')then RL(397)else + case random(5) of + 0:RL(365);1:RL(398);2:RL(399);3:RL(400);4:RL(401) + end + end + else RL(123); + +33 :RL(124); + +38 :case noun of + 83:RL(262); + 23:begin RL(366);DropAll;Ev:=Ev+['r'];Attack:=False end + else RL(125); + end; + +16 :if(MnRm=Prm)then begin Attack:=False;RL(372)end else + if(en('r'))then RL(373)else + if(Prm<15)and(70 in p[12])then RL(374)else RL(371); + +19 :if(noun=Null)then RL(136)else Crazy; +24 :if(noun=7)then RL(422)else + if(noun in[26,6,7,22,36,17,50,65,73,74,80,79,30,84])then RL(126) + else Crazy; +21 :RL(127); +40 :Crazy; + +8 :if(noun in[73,80])or(noun=Null)then + if(noun<>Null)then RL(36) + else if(here(73))or(here(80))then RL(36)else RL(37) + else RL(53); + +12 :RL(38); +2 :if(noun in[4,35,39,8,11,12,14,20,21,30,57,43,59,67,70,75])then + RL(43)else RL(44); + +15 :if(noun in mov)then + if(sepword='to')then + if(noun2=23)then + begin RL(62);Vanish(noun);Attack:=False end + else Crazy + else RL(60) + else RL(61); + +1 :if(verbose)then + begin verbose:=false;RL(134);end + else begin verbose:=true;RL(135);end; + +13 :RL(77); +23 :RL(78); + +60 :case noun of + 43,12:RL(252); + 35:RL(288) + else RL(78); + end; + +25 :if(Prm>62)and(Noun in[9,18,19,41])then RL(350)else RL(78); +34 :RL(79); + + end {of case} +end; {of DefaultAnswers3} +{-------------------} +overlay procedure DefaultAnswers4; +var o : integer; +begin + +CASE VERB OF + +20 :RL(81); +35 :RL(82); + +6 :if(noun=23)and(here(40))then begin vanish(40);RL(84);end + else + if here(40)then + if(noun2=Null)or(noun2=40)then + case noun of + 57:RL(259); + 60:RL(260) + else writeln('At the last moment you decide to spare', + ' the ',n[noun,1],'''s life!') + end + else Crazy + else RL(83); + +30 :if(noun in [39,43,12,26,6,22,47,49,68,78,17,11, + 50,65,73,74,80,79,30])then RL(93) else RL(94); + +54 :begin write('Would you like to SAVE your game first (Y or N)? '); + read(kbd,flag);if(upcase(flag)<>'N')then SAVE else writeln('No.'); + write('Are you still sure you want to quit? '); + read(kbd,flag);if(upcase(flag)='Y')then + begin RL(367);delay(999);window(1,1,80,25);clrscr;close(rooms1); + close(rooms2);close(special1);close(special2);close(line1); + HALT end else RL(264)end; +53 :if(Prm in[27,30])then RL(123) else RL(145); +59 :If(noun=23)then RL(368)else Diagnose; + +55 :if(noun=74)then + if(en('p'))then + begin Ev:=Ev-['p'];RL(169);end + else RL(168) + else + if(noun=89)then + if(en('i'))then + begin + Ev:=Ev-['i'];RL(322); + if(Prm in[59,63..68])then begin RS(66);DEAD;end; + end + else RL(323) + else Crazy; + +56 :if(noun=Null)or(noun in[60,23])or(noun in Mov)then + case noun of + 23:RL(369); + 60,Null:RL(193); + 7:RL(194) + else RL(195); + end + else RL(196); + +3 :case noun of + 7:RL(235); + 2:if(en('b'))then RL(236)else RL(237); + 62:RL(238); + 65:RL(239); + 74:RL(240); + 78:RL(241); + 84,40,50,68,85:RL(242) + else Crazy; + end; + +7 :begin if(noun=Null)then noun:=30; + if(noun in[30,36,47,50,71,72,79])then + case noun of + 30,47,50,71:if(Prm in[5..22,44..49])then RL(247) else RL(248); + 36:RL(249); + 72:RL(250); + 79:RL(251); + end + else Crazy; + end; + + + end {of CASE.} +end; {of DefaultAnswers4} +{-------------------} +overlay procedure DefaultAnswers5; +var o: integer; +begin + +CASE VERB OF + +9 :if noun<>1 then + if(noun in Inven)then + if(noun=74)and(en('p'))then RL(170) + else if(noun=89)and(en('i'))then RL(335) + else begin + inven:=inven-[noun];writeln(n[noun,1],': Dropped.'); + R[noun]:=Prm; + end + else + writeln('You don''t have the ',n[noun,1],'.') + else + begin + if(74 in inven)and(en('p'))then RL(170)else + if(89 in inven)and(en('i'))then RL(335)else + DropAll; + end; + +26 :case noun of + 2:if not(en('b'))then + begin + Ev:=Ev+['b']; + RL(3);end + else Say(noun,'peeled'); + 7:RL(162); + 57:if(ropecon<>Null)then + begin + ropecon:=Null; + RL(117);end + else Say(noun,'untied'); + 62:RL(238) + else Crazy; + end; {end of OPEN } + + end {of case} +end; {of DefaultAnswers5} +{-------------------} +overlay procedure DefaultAnswers6; +var o : integer; +begin + +CASE VERB OF + +28,27 :case noun of + 23:RL(369); + 29:if not(en('a'))then + begin Ev:=Ev+['a']; + RL(120);end + else begin Ev:=Ev-['a']; + RL(121);end; + 57:if(ropecon<>Null)and not(ropecon in inven) + and(r[ropecon]<>Prm)then + if(ropecon in mov)then begin + RL(57);writeln('...it''s a ',n[ropecon,1],'!'); + r[ropecon]:=Prm;Ev:=Ev-['u']; + if(ropecon=29)and not(flasoff)then DescribeRm;end + else RL(56) + else RL(122); + 8:begin RL(243);RL(244);play(9999,3500,0);play(3499,2000,1); + play(1999,1000,2);play(999,200,5);play(199,8,16);Ev:=Ev+['e']; + n[36,5]:=Q;n[78,5]:='glass';n[68,1]:='slot';n[66,4]:=Q; + Ev:=Ev-['j']; + moveto(30); + if(MnRm=Prm)then RS(73); + end; + 81:if not(en('j'))then + if KeyHole then + begin Ev:=Ev+['j'];RL(326);play(2000,2001,200);end + else RL(123) + else + begin Ev:=Ev-['j']; + if Keyhole then begin RL(326);play(2001,2000,200)end + else RL(123); + if(Prm in[59..68])then begin nosound;RS(62);DEAD;end; + end; + 36:begin + if(Prm > 57)then if(Prm = 58)then RL(123)else + begin RS(63);DEAD;end; + end + else RL(122); + end; {of case} + +62 :begin write('You have ',Sc,' of 1000 points', + ', giving you the rank of ');Tic:=Tic-1; + case Sc of + 0..99:writeln('beginner.'); + 100..249:writeln('novice adventurer.'); + 250..399:writeln('adventurer third class.'); + 400..549:writeln('adventurer second class.'); + 550..699:writeln('adventurer first class.'); + 700..849:writeln('expert adventurer.'); + 850..999:writeln('master adventurer.') + else writeln('dead adventurer!') + end; + Attack:=False; + if(MnRm=Prm)then RL(370) + end; + + end {of case} +end; {of DefaultAnswers6} +{-------------------} +overlay procedure DefaultAnswers7; +var o : integer; +begin + +CASE VERB OF + +14 :if(noun<>1)then + if(noun in Mov)then + if not(noun in inven)then + begin + Stuff:=0; + for o:=0 to NMax do if(o in inven)then Stuff:=Stuff+1; + if(Stuff < 6)then + if(en('r'))and(inven<>[])then RL(87) + else begin + Vanish(Noun);inven:=inven+[noun]; + writeln(n[noun,1],': Taken.'); + if(noun=70)then Ev:=Ev-['d']; + end + else RL(234) + end + else writeln('You already have the ',n[noun,1],'.') + else Crazy + else if(en('r'))then RL(88) else + begin flag:='0';Stuff:=0; + for o:=0 to NMax do if(o in inven)then Stuff:=Stuff+1; + if(Stuff < 7)then + for o:=0 to NMax do + begin + if r[o]=Prm then + if(Stuff+1 < 7)then + begin + vanish(o);inven:=inven+[o];Stuff:=Stuff+1; + writeln(n[o,1],': Taken.');flag:='1'; + if(o=70)then Ev:=Ev-['d']; + end + else + begin flag:='1'; + writeln(n[o,1],': You have too many objects already!');end + end + else RL(234); + if(flag='0')then RL(49) + end; {of 14} + +4,5 :RL(420); + +64 :SAVE; + + end {of case} +end; {of DefaultAnswers7} +{-------------------} +overlay procedure DefaultAnswers8; +var o : integer; +begin + +CASE VERB OF + +10 :if(noun in [2,52])then + if(noun=2)then + if(en('b'))then begin + RL(45); Ev:=Ev+['c'];inven:=inven+[51]; + Vanish(2);Sc:=Sc+10;end + else RL(46) + else begin RL(47);Ev:=Ev+['n'];Sc:=Sc+15;Vanish(52);end + else writeln('I don''t think the ',n[noun,1], + ' would do much for your digestive system!'); + +42 :case noun of + 74:if not(en('p'))then + if not(en('i'))then + begin RL(20);inven:=inven+[74];r[74]:=Null;Ev:=Ev+['p'];end + else RL(320) + else Say(74,'on'); + 89:if not(en('i'))then + if not(en('p'))then + begin RL(319);vanish(89);inven:=inven+[89];Ev:=Ev+['i'];end + else RL(318) + else Say(89,'on your head') + else RL(128); + end; + +17,0 :if(noun2=Noun)then Crazy else + if(noun2 in Mov)or(Noun2=Null)then + case Noun of + 2:begin RL(21);Vanish(2);Sc:=Sc+25;r[51]:=Prm;end; + 60:begin RL(22);DEAD;end; + 52:begin RL(34);Vanish(52);end; + 23:if(noun2=null)then RL(369) + else begin Vanish(noun2);Attack:=False; + writeln('The monster grabs the ',n[noun2,1],' and eats it!'); + end; + 7:begin RL(35);Vanish(7);r[52]:=Prm;Ev:=Ev+['I'];end + else if(verb=0)then writeln('At the last moment you decide to', + ' spare the ',n[noun,1],'''s life!') + else RL(216); + end{of case} + else Crazy; + +39 :if((SepWord='to')or(SepWord='off'))and(Noun2=Null)then + case Noun of + 29:if(SepWord='to')then begin Ev:=Ev+['a'];RL(120);end + else begin Ev:=Ev-['a'];RL(121);end; + 13:RL(148); + 20:RL(149); + 65:RL(150) + else Crazy end + else RL(80); + + end {of case} +end; {of DefaultAnswers8} +{-------------------} +overlay procedure DefaultAnswers9; +var o : integer; +begin + +CASE VERB OF + +32 :if(34 in inven)then + if(shots>0)then + begin + Shots:=Shots-1; + for x:=1 to (26-(4*(6-Shots))) do + begin play(300,350,11-Shots*2);play(320,370,11-Shots*2);end; + if(noun=34)and(noun2<>34)and(noun2<>Null)and(SepWord='at')then + begin noun:=noun2; noun2:=34; SepWord:='with';end; + if((noun2=34)and(noun<>34)and(SepWord='with'))or + ((noun<>34)and(SepWord='s'))then + case noun of + 1:begin;Crazy;Shots:=Shots+1;end; + 2,7,8,13,27,29,32,40,51,52,63,74,77,89:begin vanish(noun); + writeln('The ',n[noun,1],' vanishes in an explosion of light!'); + if(noun=74)and(en('p'))then begin RL(232);DEAD;end; + end; + 48:begin RL(222);RL(223);Ev:=Ev+['g'];p[40]:=p[40]-[48]; + if not(en('P'))then begin Ev:=Ev+['P'];Sc:=Sc+25;end;end; + 12,26:RL(224); + 23:begin case random(4)of 0:RL(375);1:RL(376);2:RL(377);3:RL(378)end; + Attack:=False; + end; + 45:RL(315); + 60,56,44:begin RL(233);DEAD;end + else writeln('A blinding ray strikes the ',n[noun,1],', but it is', + ' only slightly blackened.'); + end {of shoot case} + else if(noun=34)and(noun2=Null)then RL(213) + else begin;Crazy;Shots:=Shots+1;end; + end + else begin writeln('...click!');play(25,32,9);end + else RL(208); + + end {of case} +end; {of DefaultAnswers9} +{-------------------} +overlay procedure DefaultAnswers10; +var o : integer; +begin + +CASE VERB OF + +36 :if(noun in mov)then + if(noun in inven)then + if((noun in[2,7,52,29])or + (noun2 in[2,7,23,29,47,52,53,73,88]))and(noun<>noun2)then + begin + if(noun=2)or(noun2=2)then begin RL(95);vanish(2); + r[51]:=Prm;end; + if(noun=7)or(noun2=7)then begin RL(35);vanish(7); + Ev:=Ev+['I'];r[52]:=Prm;end; + if(noun=29)or(noun2=29)then begin RL(96);vanish(29);end; + if(noun=52)or(noun2=52)then begin RL(34);vanish(52);end; + if(noun2=88)then begin RL(293);vanish(noun); + if(noun=2)then noun:=51;if(noun=7)then noun:=52; + r[noun]:=random(4)+51;end; + if(Prm in[0..6,9,10,13,41..43])and(noun2 in[73,53,47])then + begin RL(306);vanish(noun);end; + if(noun2=23)then begin Attack:=False;Vanish(noun);RL(379); + writeln(n[noun,1],' out of mid-flight and eats it', + ' in one giant gulp!')end; + end + else begin writeln('The ',n[noun,1],' collides with the ', + n[noun2,1],' but nothing interesting happens.'); + Vanish(noun);r[noun]:=Prm;end + else writeln('First you must have the ',n[noun,1],'.') + else Crazy; + +37 :if(noun=57)then + if(sepword='to')then + if not(noun2 in[1,15,17,22,30,46,47,50,52,72,73,79,80,83])then + if(ropecon=Null)then begin + ropecon:=noun2; + writeln('The rope is firmly tied to the ',n[noun2,1],'.'); + if(noun2=57)then RL(48);end + else writeln('It is already tied to the ',n[ropecon,1],'.') + else RL(50) + else Crazy + else Crazy; + +61 :begin RL(245);read(kbd,flag); + if(upcase(flag)<>'N')then + begin RL(380);delay(999);window(1,1,80,25);clrscr;close(rooms1); + close(rooms2);close(special1);close(special2);close(line1); + assign(rooms1,'BEYOND.com');execute(rooms1)end + else RL(264) + end; + +65 :RESTORE; + + end {of case} +end; {of DefaultAnswers10} +{===================} +overlay procedure SpecialAnswers1; + +begin +FlagSA:='r'; +if Present then +CASE Prm OF + +3 :case verb of + 44,58 :moveto(1); + 20,52 :if(noun=6)then RL(40); + 14 :if(noun=57)and not(en('o'))then RL(419); + 6 :if(noun=57)and(here(40))and((noun2=Null)or(noun2=40))then + begin + RS(4); tic:=15; moveto(4); Ev:=Ev+['A']; Sc:=Sc+25; + if(en('o'))then + for o:= 0 to 57 do begin + if(o in kitset)then r[o]:=Prm; + if(r[o]=3)then r[o]:=Prm;end + end; + 26 :if(noun=39)then + if not(en('o'))then + begin Ev:=Ev+['o'];RL(328); for o:=2 to 57 do + if(o in kitset)then r[o]:=Prm;end + else Say(noun,'opened'); + 3 :if(noun=39)then + if(en('o'))then + begin Ev:=Ev-['o'];RL(186); for o:=2 to 57 do + if(o in kitset)then r[o]:=Null;end + else Say(noun,'shut'); + 17,28,27 :if(noun in [6,57,39,59])then RL(29); + 24,11 :case noun of + 39 :if(en('o'))then + if kitset=[] then begin RL(329);end + else begin RL(330);for o:= 0 to 57 do + if(o in kitset)then writeln(' a ',n[o,1]);end + else RL(331); + 57 :RL(10); + 73 :RL(19); + 6 :DescribeRm; + end; + end; {of 3} + +4 :case verb of + 43..52,20:RL(7); + 55 :if(noun=35)then begin RL(332);Ev:=Ev-['B'];end; + 42,3:if noun=35 then begin RL(8); Ev:=Ev+['B'];end + else if(noun=39)then + if(en('o'))then + begin Ev:=Ev-['o'];RL(186); for o:=0 to 57 do + if(o in kitset)then r[o]:=Null;end + else Say(noun,'shut'); + 29,37 :if(noun=35)and(noun2=60)then begin + RL(8);Ev:=Ev+['B'];end; + 26 :if(noun=35)and(en('B'))then begin RL(332);Ev:=Ev-['B'];end + else if(noun=39)then + if not(en('o'))then + begin Ev:=Ev+['o'];RL(328); for o:=0 to 57 do + if(o in kitset)then r[o]:=Prm;end + else Say(noun,'opened'); + 19,2:if(noun in[6,64])or(noun=Null)then + if(en('B'))then RL(9) + else begin RL(0);DEAD;end; + 24,11:case noun of + 39 :if(en('o'))then + if kitset=[] then begin RL(329);end + else begin RL(330);for o:= 0 to 57 do + if(o in kitset)then writeln(' a ',n[o,1]);end + else RL(331); + 35 :RL(12); + 73 :RL(19); + 6 :DescribeRm; + end; {of case} + end; {of 4} + +end {of case} +else SA +end; {of SP1} +{-------------------} +overlay procedure SpecialAnswers2; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +5 :case verb of + 45 :moveto(6); + 2 :if(noun=79)then RL(263); + end; + +6 :case verb of + 46 :moveto(5); + 43..52:if FlasOff then RL(14) + else case verb of + 43:begin Ox:=0;RL(286);moveto(7);end; + 45:moveto(9); 49:moveto(8); + end; + end; {of 6} + +7 :case verb of + 23..25,11:if(noun in[6,36,73,0,15,64,67])then RS(9); + 43..50 :if FlasOff then RL(14) + else + begin + If(Verb in[43,47,48])then Ox:=Ox+1; + If(Verb in[44,49,50])then Ox:=Ox-1; + if(Ox<1)then begin RL(286);moveto(6)end + else + begin + RL(333); + if(random(20)=2)then begin writeln;RS(9); + if not(en('K'))then begin Ev:=Ev+['K'];Sc:=Sc+15;end;end; + end; + end; + 28,17,6:if(noun=36)or(noun=15)then begin RS(10);DEAD;end; + 31 :if(input='help')then begin RL(334);moveto(6)end; + end; {of 7} + +8 :case verb of + 48,58:if FlasOff then RL(14) else moveto(6); + 43..52:if FlasOff then RL(14); + 11:if(noun in [46,79])then RS(12) + else if(noun in [15,30])then RL(28); + 38 :if(noun=46)then begin SA;writeln('It feels jagged.');end; + end; {of 8} + +9 :case verb of + 43..52 :if FlasOff then RL(14) + else case verb of + 46:moveto(6);47:moveto(10);49:moveto(11); + end; + end; {of 9} + +10 :case verb of + 50,58 :if FlasOff then RL(14) + else moveto(9); + 43..52:if FlasOff then RL(14); + 19,2:if(noun in[17,80])then begin RL(0);DEAD;end; + end; {of 10} + +end {of case} +else SA +end; {of SP2} +{-------------------} +overlay procedure SpecialAnswers3; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +14 :case verb of + 46,48 :if FlasOff then RL(14) + else if(verb=46)then moveto(11) else moveto(15); + 43..52 :if FlasOff then RL(14); + end; {of 14} + +15 :case Verb of + 52,2 :if(en('d'))and(en('t'))then + begin RL(63);moveto(16);end else RL(64); + 19 :RL(64); + 7 :RL(65); + 14 :if(noun in[57,70])then begin inven:=inven+[noun];r[noun]:=Null; + if(noun=70)then Ev:=Ev-['d'] + else Ev:=Ev-['t'];SA;writeln(n[noun,1],': Taken.');end; + 45,49 :if(flasoff)then RL(14) else moveto(14); + 44 :RL(73); + 24,11:if(noun=17)and not(en('u'))then RL(74) + else if(noun=17)and(en('a'))then RL(75); + 17,36,29,9:case noun of + 70:if((noun2 in[30,42])or(noun2=Null))and(verb<>9)then + if not(en('d'))then + begin RL(69);Ev:=Ev+['d'];r[70]:=Prm;inven:=inven-[70];end + else RL(67) + else if(verb=9)then begin end else RL(66); + 57:if(noun2=17)and(verb<>17)then begin + if(here(ropecon))and(ropecon<>57)then begin + RL(71);inven:=inven-[57];r[57]:=Prm; + if(ropecon=70)then Ev:=Ev+['t'];end + else begin RL(70);vanish(57); end; + end else begin end + else if(verb in[9,29,36])and(noun2=17)and(noun in mov)then + if(here(ropecon))and(noun=ropecon)then begin RL(76); + inven:=inven-[noun];r[noun]:=Null; + if(ropecon=29)then Ev:=Ev+['u'];end + else begin RL(72);inven:=inven-[noun];r[noun]:=17;end + end;{of noun case} + end;{of 15} + +16 :case verb of + 51,2 :moveto(15); + 52 :RL(85); + 0,3..18,20..21,26..40,42,53,55,56,60:RL(86); + 19,61:begin RS(18);Ev:=Ev-['a'];Ev:=Ev+['r'];Sc:=Sc+60; + moveto(17);dropall;if(here(2))then begin r[2]:=Null; + r[51]:=Prm;end;r[57]:=Null;end; + end;{of 57} + +end {of Case} +else SA +end; {of SP3} +{-------------------} +overlay procedure SpecialAnswers4; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +19 :case verb of + 48,51,58:if(flasoff)then RL(14)else begin RL(311);moveto(18);end; + 47,52,57:if(flasoff)then RL(14)else begin RL(309);moveto(20);end; + end;{of stairs} + +20 :case verb of + 50,51,58:if(flasoff)then RL(14)else begin RL(310);moveto(19);end; + 11,24,25,23:if(noun=67)then RL(90) + else if(noun in[12,43])and not(en('E'))then begin RL(92); + r[32]:=20;Sc:=Sc+15;Ev:=Ev+['E'];end; + 14,38:if(noun in[67,12])then RL(91); + 43..49,57:if(noun=Null)or(noun in[12,43])then RL(215); + end;{of 20} + +21 :case verb of + 50 :if(flasoff)then RL(14)else moveto(18); + 47 :if(flasoff)then RL(14)else moveto(22); + 2,51:if(flasoff)then RL(14)else + if(noun=64)or(noun=Null)then moveto(23); + 45 :RL(97); + 49,44,43:RL(258); + 11 :if(noun in[30,64])then begin RL(255);RL(256);RL(257)end; + end; + +22 :case verb of + 50 :if(flasoff)then RL(14)else moveto(21); + 2,51 :if(flasoff)then RL(14)else + if(noun=64)or(noun=Null)then moveto(23); + 44 :RL(97); + 47,45,49:RL(258); + 11 :if(noun in[30,64])then begin RL(255);RL(256);RL(257)end; + end; {of 22} + +23 :case verb of + 46,50 :if(flasoff)then RL(14)else moveto(21); + 43,48 :if(flasoff)then RL(14)else moveto(22); + 44..49:RL(258); + 26,27 :if(noun=26)then + if(en('l'))then Say(26,'open') + else begin RL(98);Ev:=Ev+['l'];p[23]:=p[23]+[69];end; + 3 :if(noun=26)then + if(en('l'))then begin RL(171);Ev:=Ev-['l'];p[23]:=p[23]-[69];end + else Say(26,'closed'); + 2,52,57:if(en('l'))and((noun=69)or(noun=Null))then moveto(24)else RL(99); + 24,25 :if(noun=26)then RL(151); + 11 :if(noun=26)then if(en('l'))then RL(217)else RL(218) + else if(noun in[30,64])then begin RL(255);RL(256);RL(257)end; + end; {of 23} + +24 :case verb of + 51,58:if(en('l'))then moveto(23) else RL(99); + 52,57:moveto(25); + 24,25 :if(noun=26)then RL(151); + 3 :if(noun=26)then begin RL(171);Ev:=Ev-['l'];end else + if(noun=55)then RL(411); + 2 :if(noun=69)then Moveto(25); + 26 :if(noun=26)then begin RL(98);Ev:=Ev+['l'];end else + if(noun=55)then RL(412); + 11 :if(noun=26)then if(en('l'))then RL(217)else RL(218)else + if(noun=55)then RL(410); + 27,28:If(noun=55)then RL(411); + end; + +end {of case} +else SA +end; {of SP4} +{-------------------} +overlay procedure SpecialAnswers5; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +25 :case verb of + 43:begin writeln('The door slides open...');play(55,70,40);moveto(27); + writeln('The door slides shut behind you.');play(70,55,40); + if not(en('Y'))then begin Ev:=Ev+['Y'];Sc:=Sc+30 end end; + 44:moveto(32); 45:moveto(30); + 46:moveto(34); 47:moveto(28); 49:moveto(31); + 48:if(en('v')and not(en('p')))then begin Verbose:=False;moveto(35); + RS(25);DEAD; end else moveto(35); + 50:moveto(33); 51,58:moveto(24); + 52,2:if(noun=69)or(noun=Null)then moveto(26); + 17,27,28,38:if(noun=26)then + begin RL(413);play(55,70,45);play(69,54,45)end; + 26,40:if(noun=26)then RL(414); + end; + +27 :case verb of + 44,58:begin writeln('The door slides open...');play(55,70,40);moveto(25); + writeln('The door slides shut behind you.');delay(999);play(70,55,40) + end; + 17,27,28,38:if(noun=26)then + begin RL(413);play(30,40,25);play(40,30,25)end; + 26,40:if(noun=26)then RL(414); + 11 :if(noun in[20,21])then RL(103) + else if(noun=58)then case compcon of + Null:RL(155); 1:RS(21); 2:RS(22); 3:RS(23); + 4:begin RS(24);compcon:=Null;gotoxy(1,wherey-1); + writeln('. tim. chamb.r c.de: ',Code,'.. ..tel.port... . .', + '... . .. ime . p.n.l ....... ...'); + RL(105);play(29,29,40);end;end;{of case} + 53 :begin + if(input='1')or(input='one')then begin RL(104);compcon:=1;end; + if(input='2')or(input='two')then begin RL(104);compcon:=2;end; + if(input='3')or(input='three')then begin RL(104);compcon:=3;end; + if(input='4')or(input='four')then begin RL(104);compcon:=4;end; + for y:=1 to random(40)+9 do + begin x:=random(6000)+99;play(x,x,50);delay(9)end + end; + 31 :if(compcon=null)then begin + play(9,999,0);sound(999);RS(20);play(999,9,0);if not(en('J'))then + begin Ev:=Ev+['J'];Sc:=Sc+40;end;end; + end; + +28 :case verb of + 50,58:moveto(25); + 45,57:moveto(29); + 28 :if(noun in[33,10])then begin RL(137);play(31,31,450);end; + end; + +29 :case verb of + 46,58:moveto(28); + 36 :if(noun2 in[33,10])and(noun in Mov)then + if(en('M'))then + begin RS(27);Ev:=Ev-['M','r'];Vanish(noun);r[noun]:=28; + if not(en('N'))then begin Ev:=Ev+['N'];Sc:=Sc+55;end; + play(28,34,600)end + else begin Vanish(noun);r[noun]:=28;RL(179); + if(noun in[7,8,29,34,40,51])then Ev:=Ev+['M'];end; + end; + +33 :case verb of + 47,58:moveto(25); + 34 :RL(272); + 28,38:if(noun=10)then begin RL(421);x:=random(9999);case random(3) of + 0:play(x,random(9999),random(3)); + 1:for y:=1 to random(300)+60 do + begin x:=random(9999);play(x,x,2);delay(7)end; + 2:begin y:=9999;o:=0; + repeat x:=random(9999);play(x,y,0); + y:=random(9999);play(y,x,0);o:=o+1; + until o>7 end end end + end; + +end {of case} +else SA +end; {of SP5} +{-------------------} +overlay procedure SpecialAnswers6; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +30 :case verb of + 46,58:if(en('e'))then RL(212) else moveto(25); + 26,27,28,40:if(noun=49)then if(en('h'))then Say(49,'open') else RL(159) + else + if(noun in[10,76])and(verb=28)then + begin + if(MnRm=30)then begin RS(76);DEAD;end; + if(en('e'))then + begin RS(29);writeln; + play(1,700,7);play(701,8000,1);Ev:=Ev-['e']; + case YearDial of + 1933:begin Loc:='Civilization!';Sc:=Sc+80;RS(78);HOME;END; + 2111..2679:begin + Verbose:=False;moveto(41);RS(30);Verbose:=True; + if not(en('O'))then begin Sc:=Sc+55;Ev:=Ev+['O'];end; + n[78,5]:=Q;n[37,5]:='glass';n[72,1]:='fence'; + n[70,1]:='hooded figure';n[70,2]:='hooded';n[70,3]:='figure'; + n[70,4]:='mutant';n[70,5]:=Q;n[3,1]:='footprints'; + n[3,2]:='footpri';n[57,1]:='parachute';n[57,2]:='parachu'; + n[35,1]:='boulder';n[35,2]:='rock';n[35,3]:='rocks'; + n[66,4]:='red'; + end; + 0..1111 :begin writeln;RS(31);DEAD;end; + 1112..2110:begin writeln;RS(32);DEAD;end; + 2680..3789:begin writeln;RS(33);DEAD;end + else begin writeln;RS(34);DEAD;end; + end; {of YearDial case} + end + else begin RL(209);play(1,9999,0)end; + end; + 33 :if(noun in[16,59])or(noun=Null)then begin Ev:=Ev+['e'];RL(210);end; + 35 :if(en('e'))then begin Ev:=Ev-['e'];RL(211);Attack:=False end; + 17,0,6:if(noun=49)then RL(160); + 53 :if(input=Code)then + If(en('h'))then Say(49,'open') + else + begin Ev:=Ev+['h'];RL(173);play(23,24,250);Sc:=Sc+30; + if(PanelCon<>Null)then begin r[PanelCon]:=30;Code:='R'; + writeln('Sitting inside the panel compartment is a ', + n[PanelCon,1],'.');end + else RL(183); + end + else RL(172); + 3 :If(noun=49)then RL(159); + 39 :if(noun=25)then RL(115) else + case noun of + 24:if(DialNum>0)and(DialNum<377)then begin RL(176);DayDial:=DialNum;end + else RL(178); + 82:if(DialNum>-1)and(DialNum<5000)then begin RL(177); + YearDial:=DialNum;end else RL(178); + end; + 11,24:case noun of + 49:begin SA;if(en('h'))then if(PanelCon=Null)then RL(183) + else writeln('Inside the compartment is a ',n[PanelCon,1],'.') + else RL(184);end; + 82:begin SA;writeln('The year dial is set to ',YearDial,'.');end; + 24:begin SA;writeln('The day dial is set to ',DayDial,'.');end; + 16:begin RL(203);RL(204)end; + 25:RL(115); + 38:RL(161); + end; + end; {of 30} + +end {of case} +else SA +end; {of SP6} +{-------------------} +overlay procedure SpecialAnswers7; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +26 :case verb of + 51,58,2:if(noun=69)or(noun=Null)then moveto(25); + 43,48 :moveto(36); 44,49 :moveto(38); 45,47 :moveto(39); 46,50 :moveto(37); + end; + +35 :case verb of + 49,58:moveto(25); + 11:case noun of + 54:RL(100); + 62:if(en('v'))then RL(205)else RL(206); + end; + 28 :if(noun in[55,10])then + if(en('v'))then begin RL(101);Ev:=Ev-['v'];play(40,65,80)end + else + begin RL(102); Ev:=Ev+['v'];play(65,40,80); + if not(en('p'))then begin RS(28);DEAD;end + else if(MnRm=35)then + begin n[23,1]:='melted monster';n[23,4]:='melted';MnRm:=Null; + RS(74);p[35]:=p[35]+[77]; + if not(en('W'))then begin Sc:=Sc+65;Ev:=Ev+['W'] end + end + end; + 14 :if(noun in[1,77])and(77 in p[35])then begin Sc:=Sc+10;noun:=77;end; + 55 :if(noun=74)then + if(en('v'))then begin RS(26);DEAD end; + 38 :RL(30); + end; + +36 :case verb of + 44,49,58:moveto(26); + 45 :moveto(39); + 46 :moveto(37); + 57 :if(noun=12)then RL(215); + end; + +37 :case verb of + 45,47,58:moveto(26); + 43 :moveto(36); + 44 :moveto(38); + 57 :if(noun=12)then RL(215); + end; + +38 :case verb of + 43,48,58:moveto(26); + 45 :moveto(39); + 46 :moveto(37); + 57 :if(noun=12)then RL(215); + 0..99:if(noun=28)or(noun2=28)then + begin RS(35);RL(220);p[40]:=p[40]+[48];moveto(40);Ev:=Ev-['g']; + if(MnRm=Prm)then begin RS(79);DEAD end + end; + end;{of 38} + +39 :case verb of + 46,50,58:moveto(26); + 45 :if(en('g'))then moveto(40); + 3 :if(noun=26)then if(en('g'))then RL(225) else Say(26,'shut'); + 43 :moveto(36); + 44 :moveto(38); + 57 :if(noun=12)then RL(215); + end; + +40 :case verb of + 46,58 :if(en('g'))then moveto(39) else RL(221); + 26 :if(noun=26)then if(en('g'))then Say(26,'open') else RL(221); + 3 :if(noun=26)then if(en('g'))then RL(225) else Say(26,'shut'); + 11,14 :if(noun in[12,43,83])then RL(261); + end; + +end {of case} +else SA +end; {of SP7} +{-------------------} +overlay procedure SpecialAnswers8; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +41 :case verb of + 43 :moveto(42); + 44 :moveto(43); + 2,19 :if(noun in[53,73,87])then + begin RS(39);RL(287);moveto(46);Rx:=4;end; + end; + +42 :case verb of + 44 :moveto(41); + 43 :RL(296); + 14 :if(noun in[13,1])and(13 in p[42])then + begin Sc:=Sc+10;noun:=13;end; + 2,19 :if(noun in[53,73,87])then + begin RS(39);RL(287);moveto(46);Rx:=4;end; + end; + +43 :case verb of + 43 :moveto(41); + 44 :moveto(44); + 2,19 :if(noun in[53,73,87])then + begin RS(39);RL(287);moveto(46);Rx:=4;end; + end; + +44 :case verb of + 43 :moveto(43); + 46 :moveto(47); + 45 :begin RL(274);Rx:=0;moveto(46);end; + 43..51,2,19:if(noun=Null)or(noun in[41,79])then RL(275); + end; + +45 :case verb of + 44 :moveto(49); + 46 :begin RL(274);Rx:=8;moveto(46);end; + 45 :begin Rx:=9;RL(274);moveto(46);end; + 43..51,2,19:if(noun=Null)or(noun in[41,79])then RL(275); + end; + +46 :case verb of + 45 :begin Rx:=Rx+1;RL(274); + if(Rx=9)then begin + if not(en('T'))then begin Ev:=Ev+['T'];Sc:=Sc+30;end; + moveto(45)end; + if(Rx>86)then begin RL(340);moveto(47)end + end; + 46 :begin Rx:=Rx-1;RL(274); + if(Rx=8)then moveto(45); + if(Rx<1)then moveto(44); + end; + 43..51,2,19:if(noun=Null)or(noun in[41,79])then RL(275); + end; + +47 :case verb of + 46,52,2,19:begin if(random(2)=1)then begin RS(37);DropAll;moveto(48)end + else begin RL(277);moveto(48)end;end; + 45 :moveto(44); + 43..50:RL(278); + end; + +48 :case verb of + 45,51,2:if(random(3)=2)and(noun<>35)then begin RS(38);moveto(47)end + else if(noun<>35)then RL(279); + 43..50:RL(279); + 14 :if(noun in[27,1])and(27 in p[48])then + begin Sc:=Sc+20;noun:=27;end; + 11 :if(noun=35)then RL(289) + end; + +end {of case} +else SA +end; {of SP8} +{-------------------} +overlay procedure SpecialAnswers9; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +50 :case verb of + 43,58 :begin RL(290);moveto(49);end; + 44,57 :if(noun=Null)or(noun in[88,26,50])then + begin RS(41);if not(en('L'))then + begin Ev:=Ev+['L'];Sc:=Sc+25;end;moveto(51);end; + 11 :case noun of + 35,50:RL(292); + 88,68:RS(42); + 46,66:RS(43); + end; + 30,28,38,17,14:if(noun=88)then RL(294); + end; + +51 :case verb of + 44 :moveto(52); + 46 :moveto(52); + 48 :moveto(53); + end; + +52 :case verb of + 43 :moveto(51); + 47 :moveto(53); + 46 :moveto(51); + end; + +53 :case verb of + 52,2,57:if(noun=Null)or(noun=69)then begin if not(en('Q'))then + begin Ev:=Ev+['Q'];Sc:=Sc+30;end;moveto(55);end; + 47 :moveto(52); + 45 :moveto(53); + 49 :moveto(54); + end; + +54 :case verb of + 43 :moveto(52); + 49 :moveto(53); + 44 :moveto(51); + 50 :begin if not(en('R'))then + begin Ev:=Ev+['R'];Sc:=Sc+20;end;moveto(56);end; + end; {verb case} + +55 :case verb of + 51,2,58,44:if(noun=Null)or(noun=69)then moveto(53); + 11 :if(noun in[11,45])then + begin RL(297);if(en('k'))then RL(298) else RL(299)end; + 26,40:if(noun in[45,26,11,68])and(noun2=27)and(SepWord='with')then + if not(en('k'))then + begin Ev:=Ev+['k'];RS(45);for o:=2 to NMax do + if(o in cabiset)then r[o]:=55; + if not(en('R'))then begin Ev:=Ev+['R'];Sc:=Sc+55;end; + end + else Say(11,'open') + else if(SepWord='s')then RL(317); + 29 :if(noun=27)and(noun2 in[45,26,11,68])and(SepWord='in')then + if not(en('k'))then + begin Ev:=Ev+['k'];RS(45);for o:=2 to NMax do + if(o in cabiset)then r[o]:=55; + if not(en('R'))then begin Ev:=Ev+['R'];Sc:=Sc+55;end; + end + else RL(216); + 3 :if(noun in[45,26,11])then + if(en('k'))then + begin RL(314);play(30,32,30);Ev:=Ev-['k']; + for o:= 2 to NMax do if(o in cabiset)then r[o]:=Null; + end + else Say(11,'shut & locked'); + 24,30 :if(noun in[26,11])then + if(en('k'))then + begin RL(324); + if(cabiset=[])then RL(339)else + for o:=0 to NMax do if(o in Cabiset)then writeln('a ',n[o,1]) + end + else RL(299); + end; {of 55} + + +end {of case} +else SA +end; {of SP9} +{-------------------} +overlay procedure SpecialAnswers10; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +56 :case verb of + 47 :moveto(54); + 2,51,58:if(noun=Null)or(noun=69)then moveto(57); + end; + +57 :case verb of + 46,57,2,33:if(noun=Null)or(noun=65)then + begin n[68,1]:='keyhole';n[68,4]:='slot';moveto(58)end; + 52 :moveto(56); + end; + +58 :case verb of + 45,58:moveto(57); + 43..51,20:if(en('i'))and(en('j'))and KeyHole then + begin sound(38);RS(61);ShRm:=2;moveto(59);sound(20); + for o:=0 to NMax do if(r[o]=58)then r[o]:=59; + if not(en('S'))then begin Ev:=Ev+['S'];Sc:=Sc+60 end end else RL(325); + 28 :if(noun=10)then noun:=81; + 11 :if(noun=68)then if KeyHole then RL(336)else RL(404); + end; + +65 :case verb of + 43,47:moveto(66); + 44,49:moveto(68); + 45,57:begin if not(en('w'))then begin Ev:=Ev+['w'];RL(346);end + else begin RL(347);DEAD end end; + 46..50:moveto(63); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; + +66 :case verb of + 43 :RL(343); + 46,50 :moveto(65); + 45,49 :moveto(67); + 47 :moveto(64); + 48 :moveto(63); + 57,44 :begin sound(25);if not(en('V'))then begin Ev:=Ev+['V'];Sc:=Sc+30;end; + RS(67);writeln;moveto(69);nosound; + end; + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; {of 66} + +67 :case verb of + 46 :begin RL(347);DEAD;end; + 43,48 :moveto(66); + 44,50 :moveto(68); + 45..49:moveto(64); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; {of 67} + +end {of case} +else SA +end; {of SP10} +{-------------------} +overlay procedure SpecialAnswers11; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +63 :case verb of + 45 :moveto(65); + 47 :moveto(66); + 49 :moveto(68); + 43..50:RL(343); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; + +64 :case verb of + 46 :moveto(67); + 48 :moveto(66); + 50 :moveto(68); + 43..50:RL(343); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; + +68 :case verb of + 43 :begin RL(347);DEAD;end; + 44 :RL(343); + 50 :moveto(63); + 49 :moveto(64); + 46,48 :moveto(65); + 45,47 :moveto(67); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(38);RL(344);delay(999);sound(20)end; + 52 :begin sound(30);RL(345);ShRm:=13;moveto(59);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; + +69 :case verb of + 28,27 :if(noun in[10,21,81,36])then RL(351); + 11 :if(noun in[10,21,81,36,20,25])then RL(352)else + if(noun=65)then RL(353); + 43,58 :moveto(70); + end; + +70 :case verb of + 44,57,2,33:if(noun=Null)or(noun=65)then moveto(69)else + if(noun in[69,50])then moveto(71); + 43,47,48:RL(354); + 49,52 :moveto(71); + 11 :if(noun=65)then RL(353) + else if(noun=68)then if KeyHole then RL(336)else RL(404); + end; + +71 :case verb of + 48,51,58:moveto(70); + 45 :moveto(72); + 11 :if(noun=58)then RL(386)else + if(noun=25)then RL(418); + 28,27:if(noun in[10,36])then begin RL(387); + for o:=1 to random(12)+4 do play(random(250),random(250),random(30)) + end; + 39 :if(noun=25)then begin RL(387); + for o:=1 to random(99)+75 do + begin x:=random(9999);play(x,x,random(19)+10);delay(5)end + end + end;{ of 71} + +end {of case} +else SA +end; {of SP11} +{-------------------} +overlay procedure SpecialAnswers12; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +11 :case verb of + 5,45,47,48,50:if FlasOff then RL(14) + else case verb of + 48:moveto(9);47:moveto(13); + 5:if(29 in inven)or(40 in inven)or(2 in inven)then + RL(58) + else begin RL(18); moveto(12);end; + 50:RL(17); + 45:if(en('C'))then moveto(14) else RL(144); + end; + 31 :if(input='nepo egassap')and not(en('C'))then + begin Ev:=Ev+['C']; RS(11);Sc:=Sc+35;end; + 11 :if(noun in [79,72])then if(en('C'))then RL(270)else RS(13); + 27,28:if(noun in [79,72])then RL(26); + 17,0,6:if(noun in [79,72])then RL(27); + 38 :if(noun in [79,72])then RL(30); + end; {of 11} + +12 :case verb of + 4,47 :if FlasOff then RL(14) + else case verb of + 4:begin RL(18); moveto(11);end; + 47 :RL(17); + end; + 43..52 :if FlasOff then RL(14); + 14 :if(noun in[70,1])and not(en('G'))then + begin noun:=70;Ev:=Ev+['G'];Sc:=Sc+40;end; + 7 :if not(en('G'))then begin Ev:=Ev+['G'];RL(157); + FlagSA:='r';verb:=14;noun:=70;Sc:=Sc+40;end; + end; {of 12} + +13 :case verb of + 50 :if flasoff then RL(14) + else begin moveto(11); Ev:=Ev-['q'];end; + 43 :if(en('q'))then begin RL(24); DEAD;end + else begin RL(23); Ev:=Ev+['q'];end; + 52,19,33:RL(42); + 14 :if(noun=47)then RL(25); + 9 :begin RL(68);vanish(noun);end; + end;{of 13} + +17 :case verb of + 51,19,2:RL(15); + 45 :if(flasoff)then RL(14)else moveto(18); + end; + +18 :case verb of + 46 :if(flasoff)then RL(14)else moveto(17); + 49,52 :if(flasoff)then RL(14)else begin RL(308);moveto(19);end; + 47 :if(flasoff)then RL(14)else + if not(en('F'))then begin RS(19);writeln;moveto(21); + Ev:=Ev+['F'];Sc:=Sc+10;end + else moveto(21); + 11 :if(noun in[79,50])then RL(254); + end;{of 18} + +end {of case} +else SA +end; {of SP12} +{-------------------} +overlay procedure SpecialAnswers13; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +2 :case verb of + 46 :moveto(1); + 45, 44 :RL(1); + 19,2 :if(noun in[53,6,64,73])then begin RL(0);DEAD;end; + 14,27 :if noun=14 then RL(2)else + if(noun in[1,40])and(40 in p[2])then + begin noun:=40;Sc:=Sc+10;Verb:=14;RL(417);FlagSA:='r' end; + 11 :if(noun in[66,46])then RL(11); + 26 :if noun=14then RL(13); + end; + +31 :case verb of + 48,58:moveto(25); + 14 :if not(en('I'))and(noun in[7,1])then + begin Ev:=Ev+['I'];noun:=7;Sc:=Sc+5 end; + 23,24,11:if(noun=84)then RL(152)else + if(noun=22)then RL(415); + end; + +32 :case verb of + 43,58:moveto(25); + 11,23 :case Noun of + 61:if(en('H'))then RL(153) else begin Ev:=Ev+['H'];r[34]:=32; + RL(154);Sc:=Sc+15;end; + end;{of Noun case} + end; + +34 :case verb of + 45,58:moveto(25); + 14 :if(noun=74)and(74 in P[34])then begin P[34]:=P[34]-[74]; + inven:=inven+[74];RL(138);Sc:=Sc+25;end; + 42 :if(noun=74)and(74 in P[34])then RL(175); + 28,27:if(noun in[10,36])then begin RL(387); + for o:=1 to random(12)+4 do play(random(250),random(250),random(30)) + end; + 39 :if(noun=25)then begin RL(387); + for o:=1 to random(99)+75 do + begin x:=random(9999);play(x,x,random(19)+10);delay(5)end + end; + 11 :case noun of + 0:RL(139); + 25:RL(418); + 21:begin;RL(140);RL(141);end; + 68:if(SlotCon=Null)then RL(143) else + begin SA;writeln('The slot contains a ',n[SlotCon,1],'.')end; + 58:if(SlotCon=77)and not(en('x'))then + begin Ev:=Ev+['x'];Sc:=Sc+5;RS(75)end + else if(SlotCon=77)then RS(77)else RL(385) + end + end; + +0 :case verb of + 45 :MoveTo(1); + 44 :begin TextColor(m8);writeln('Casino Hall');TextColor(m2);RS(0)end; + 19,2 :if(noun in[53,6,64,73])then begin RL(0);DEAD;end; + 11 :if(noun=73)then RL(19); + end; + +1 :case verb of + 46 :moveto(0); + 45 :moveto(2); + 43,57 :moveto(3); + 6,17 :if(noun=57)and(here(40))and((noun2=40)or(noun2=Null))then + begin RS(16);Sc:=-500; + Loc:='Locked Cabin';Verbose:=True;inven:=[];KitSet:=KitSet-[57]; + n[57,1]:='plastic card';n[57,2]:='card';n[57,3]:='plastic'; + n[57,4]:='elevato card';n[57,5]:='elevato';r[57]:=76;moveto(76) + end; + 33,19,2 :if(noun in[6,53,64])then moveto(3) + end; + +end {of case} +else SA +end; {of SP13} +{-------------------} +overlay procedure SpecialAnswers14; + +begin +FlagSA:='r'; +if Present then +Case Prm of + +49 :case verb of + 43 :moveto(45); + 44,57 :begin RL(290);moveto(50);n[36,1]:='lever';n[36,2]:='handle';end; + 45..50:RL(291); + 11 :if(noun in[26,50])then RL(292); + 2 :if(noun=72)then RL(312); + 11 :if(noun=72)then RL(313); + end; + +59 :case verb of + 43..50:begin o:=random(8)+3;writeln('You travel about ',o,' miles...'); + if(random(4)=2)then ShRm:=13 else ShRm:=Random(15);moveto(59)end; + 52,57:RL(341); + 58 :if(noun=Null)or(noun=65)then begin RL(342);DEAD;end; + 51 :begin sound(30); + if not(en('U'))then begin RS(64);writeln;Ev:=Ev+['U'];Sc:=Sc+45;end + else RL(349);moveto(63);sound(20)end; + 14 :if(noun=63)then begin RS(65);DEAD;end; + 28 :if(noun=10)then noun:=81; + end; {of case 59} + +72 :case verb of + 46 :moveto(71); + 43,44,58:moveto(73); + 45 :moveto(74); + end; + +73 :case verb of + 43,45,58:moveto(72); + 46 :moveto(73); + 44 :begin moveto(74);if(MnRm=Null)then RL(356);end; + end; + +74 :case verb of + 43,45 :moveto(73); + 46,58 :moveto(74); + 44 :if(MnRm=Null)then begin Verbose:=False;Moveto(75);Verbose:=True; + RS(69);MnRm:=75;Attack:=False end else moveto(75); + end; + +75 :case verb of + 43,58 :moveto(74); + 11 :if(noun in[14,61])then RL(364); + end; + +76 :case verb of + 43 :RL(114); + 11 :if(noun=26)then RL(271)else + if(noun=57)then RL(408); + end; + +end {of case} +else SA +end; {of SP14} +{===================} +procedure ScreenDraw_PlayerInput; + begin + gotoxy(1,23);writeln;TextColor(m5);write(chr(175),' '); + Window(1,1,80,25); + gotoxy(1,1);textcolor(m4);TextBackGround(m6); + gotoxy(10,1); writeln(Tic,' '); gotoxy(75,1); writeln(Sc,' '); + gotoxy(35-(length(Loc)div 2),1);writeln(' ',Loc,' '); + gotoxy(3,25);TextBackGround(0);Window(1,2,80,25); + textcolor(m1);BufLen:=77; + if(Loc<>'Civilization!')then READLN(LINE)else repeat;until false; + if(Line='r')or(Line='repeat')then Line:=Again + else Again:=Line; + gotoxy(1,23);TextColor(m3);writeln(chr(175));TextColor(m2); + end; +{-------------------} + + +BEGIN +clrscr; +assign0; +assign1;assign2;assign3;assign4;assign5;assign6;assign7;assign8; +Initialize; + + {*****} repeat {*****} + +if Skip then Time; writeln; + +if(length(Line)=0)then begin + ScreenDraw_PlayerInput; + while pos(' then ',Line)>0 do + begin x:=pos('then ',Line);delete(Line,x,4);insert('.',Line,x)end; + LowerCase(Line); + Format(Line); + Chop(Line); +end; +if(pos('.',Line)>0)then begin + Input:=copy(Line,1,pos('.',Line)); + delete(Line,1,pos('.',Line)); + delete(Input,pos('.',Input),1); +end else + begin + Input:=Line; + Line:='' + end; +Input:=Input+' '; +while pos(' it ',Input)>0 do + begin x:=pos(' it ',Input)+1;delete(Input,x,2);insert(LastNoun,Input,x); + Format(Input);Chop(Input)end; +if(Input[length(Input)]=' ')then delete(Input,length(Input),1); + + + +Check(SepWord); + +if Flag = 'g' then + begin + case Prm of + 3..4 :SpecialAnswers1; + 5..10 :SpecialAnswers2; + 14..16 :SpecialAnswers3; + 19..24 :SpecialAnswers4; + 25,27..29,33 :SpecialAnswers5; + 30 :SpecialAnswers6; + 26,35..40 :SpecialAnswers7; + 41..48 :SpecialAnswers8; + 50..55 :SpecialAnswers9; + 56..58,60..62,65..67:SpecialAnswers10; + 63,64,68..71 :SpecialAnswers11; + 11..13,17,18 :SpecialAnswers12; + 0..2,31,32,34 :SpecialAnswers13; + 49,59,72..76 :SpecialAnswers14 + end; + + if FlagSA <> 's' then + case Verb of + 11,18,22,41,43..52,57,58 :DefaultAnswers1; + 29 :DefaultAnswers2; + 1,2,8,12,13,15,16,19,21, + 23..25,31,33,34,38,40,60,63:DefaultAnswers3; + 3,6,7,20,30,35,53..56,59 :DefaultAnswers4; + 9,26 :DefaultAnswers5; + 27,28,62 :DefaultAnswers6; + 14,64,4,5 :DefaultAnswers7; + 0,10,17,42,39 :DefaultAnswers8; + 32 :DefaultAnswers9; + 36,37,61,65 :DefaultAnswers10; + end; + end; + + {*****} until False {*****} + +END. {of program} + \ No newline at end of file diff --git a/src/COMMANDS.PAS b/src/COMMANDS.PAS new file mode 100644 index 0000000..42e4e88 --- /dev/null +++ b/src/COMMANDS.PAS @@ -0,0 +1,646 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +{****************************************************************************} +{* COMMANDS *} +{* by Scott Miller *} +{* These are misc procedures and functions used with the main file: AdGame *} +{* Copyright 1984 Pending *} +{****************************************************************************} + +procedure SA; + begin FlagSA:='s' end; + +function En(c : char) : boolean; + begin + if(c in Ev)then En:=True else En:=False + end; + +function Here(noun : integer): Boolean; + begin + if(noun in Inven)or(r[noun]=Prm)or(noun in p[Prm])then Here:=True + else Here:=False + end; + +overlay procedure Crazy; + begin SA; + if(random(2)=1)then RL(107+random(7))else RL(300+random(6)); + end; + +overlay procedure DEAD; + var b,c:byte; + FileName : file; + begin SA; NoSound; + gotoxy(1,25);for x:=1 to 7 do writeln; + Textcolor(1);Textbackground(m9); + gotoxy(1,18); + write('*********************************************************', + '***********************');writeln; + gotoxy(1,19); for x:=1 to 3 do + write('* ', + ' *');writeln; + gotoxy(1,22); + write('*********************************************************', + '***********************');writeln; + TextColor(m0);gotoxy(32,20);writeln('YOU HAVE DIED!!!'); + Textcolor(m2);Textbackground(0); + for c:=700 downto 20 do for b:=70 downto 1 do sound(b*c);nosound; + close(Rooms1);close(rooms2);close(special1);close(special2);close(line1); + gotoxy(1,23);DelLine;DelLine;writeln;write('Do you wish to play again? '); + read(kbd,flag); + if(upcase(flag)<>'N')then + begin + writeln('Restarting...');window(1,1,80,25); + assign(rooms1,'BEYOND.com');execute(rooms1)end + else + begin + textcolor(7); + textbackground(0); + window(1,1,80,25); + clrscr; + writeln(' Beyond the Titanic'); + writeln('A Scott Miller Production'); + writeln(' Have a nice day...'); + delay(2000); + assign(FileName,'MENU.COM'); + {$I-} + execute(FileName); + {$I+} + if IOResult <> 0 then HALT; + end + end; + +overlay procedure Home; + var b,c:byte; + begin SA; + gotoxy(1,25);for x:=1 to 7 do writeln; + Textcolor(25);Textbackground(m7); + gotoxy(1,18); + write('#########################################################', + '#######################');writeln; + gotoxy(1,19); for x:=1 to 3 do + write('# ', + ' #');writeln; + gotoxy(1,22); + write('#########################################################', + '#######################');writeln; + TextColor(31);gotoxy(25,20);writeln('Y O U H A V E W O N ! ! !'); + Textcolor(m2);Textbackground(0); + gotoxy(1,23);DelLine;DelLine;writeln; + for x:=150 downto 1 do begin sound(x*55);delay(8);nosound;delay(20)end; + if(Sc>1000)then Sc:=1000; + write('You finished with a score of ',Sc,', which makes you a '); + if(Sc=1000)then + begin writeln('Perfect Adventurer!!!'); + for y:=1 to 7 do + for o:=0 to 20 do + for x:= 99+(o*430)to 998+(o*430)do begin sound(25);sound(x)end + end + else writeln('Master Adventurer!'); + for c:=1 to 999 do for b:=1 to 61 do sound(b*c);nosound; + writeln;nosound; + writeln('Reboot your computer to regain control...') + end; + +overlay procedure Say(o : integer; p : str14); + begin + writeln('The ',n[o,1],' is already ',p,'.'); SA + end; + +overlay procedure Diagnose; + begin + RL(191); + if((tic>42)and not(en('c')))or((tic>146)and not(en('n')))or(en('r'))then + begin + if(tic>42)and (not(en('c')))then RL(192) + else if(tic>146)and not(en('n'))then RL(192); + if(en('r'))then RL(51) + end + else RL(207) + end; + +overlay procedure Monster(var NewRm : integer); + begin + if(NewRm=MnRm)and(MnRm=25)then begin Attack:=False;RL(384)end else + if(NewRm<>35)or not(en('v'))then + begin + p[Prm]:=p[Prm]-[23];p[NewRm]:=p[NewRm]+[23];MnRm:=NewRm;Attack:=False; + if not((NewRm=30)and(Verb in[27,28]))then + case random(7) of + 0:RS(71);1:RS(72);2:RL(359);3:RL(360);4:RL(361);5:RL(362);6:RL(363) + end + end + else begin RL(383);Attack:=False end + end; + +overlay procedure DescribeRm; + var o : integer; + procedure s(r : str14); + begin TextColor(m8);writeln(r);TextColor(m2);loc:=r;end; + begin SA; +if((en('a'))and(here(29)))or not(Prm in [6..24])then begin + case Prm of +0:s('Ship''s Fore');1:s('Ship Mid-Deck');2:s('Rear of Ship'); +3:s('Life Boat');4:s('Ocean Surface');5:s('Huge Cavern'); +6:s('Cave of Pins');7:s('Ocean Bottom');8:s('Squeaky Cave'); +9:s('Stream Bend');10:s('Waterfall');13:s('Sloppy Cave'); +11:s('Hex Cave');12:s('Shallow Cleft');20:s('Zoo'); +14:s('Winding Tunnel');15:s('Chasm');17:s('Chasm Bottom'); +18:s('Tiny Opening');19:s('Etched Stairs'); +21:s('Edge of Saucer');22:s('Side of Saucer'); +23:s('Top of Saucer');24:s('Airlock');16:s('End of Rope'); +76:s('Locked Cabin');25:s('Central Entry'); +26:s('Lower Entry');27:s('Ship''s Systems'); +30:s('Time Chamber');28:s('Ship''s Lab');34:s('Bridge'); +29:s('Inside Tube');31:s('Life Support');58,69:s('Inside Shuttle'); +32:s('Supply Chamber');33:s('Sleep Chamber'); +35:s('Engine Room');36:s('Cargo Deck #1');37:s('Cargo Deck #2'); +38:s('Cargo Deck #3');39:s('Cargo Deck #4');40:s('Large Cage'); +41:s('Wooden Bridge');42:s('Broken End');43:s('South End'); +44..46:s('Deserted Road');47:s('Crater Edge');48:s('Crater Floor'); +49:s('Building Front');50:s('Lobby');51..54:s('Office Room'); +55:s('Basement');56:s('Ladder Room');57:s('Building Roof'); +59:case ShRm of 0:s('Above Mud Lake'); +1:s('Above Rubble');2:s('Above Desert');3:s('Above Pits'); +4:s('Above River');5:s('Above Stream');6:s('Above Town'); +7:s('Above Mountain');8:s('Above Crator');9:s('Above Hills'); +10:s('Above Canyon');11:s('Above Flatland');12:s('Above Dry Lake'); +13:s('Above Desert');14:s('Above Bridge')end;{of Above Rooms} +63,64:s('Above Clouds');65..68:s('Outside City');70:s('Landing Bay'); +71:s('Power Plant');72..74:s('Dark Corridor');75:s('Food Supply') + end; {of case} + + if Verbose then begin FlagSA:='r'; + case Prm of + 2 :if(40 in p[2])then begin RR(2);RL(416)end; + 4 :if(en('B'))then RR(4)else begin RR(4); + writeln('There is a safety harness here.')end; + 11:if(en('C'))then RS(15); + 40:if(en('g'))then RS(17); + 12:if not(en('G'))then begin RR(12);RL(146)end; + 31:if not(en('I'))then begin RR(31);RL(156)end; + 34:if(74 in p[34])then begin RR(34);RL(273)end; + 35:if(77 in p[35])then begin RR(35);RL(381);RL(382)end else + if(en('W'))then begin RR(35);RL(381)end; + 42:if(13 in p[42])then begin RR(42);RL(214)end; + 48:if(27 in p[48])then begin RR(48);RL(276)end; + 59..69:begin SA; + if(Prm=59)and not(ShRm in RmSh)then + begin RmSh:=RmSh+[ShRm];RS(ShRm+46)end + else if(Prm<>59)then RR(Prm); + if KeyHole and here(63)then + writeln('The shiny key is in the keyhole.') + end + else RR(Prm) + end; {of case} + if(FlagSA='r')and(Prm<>59)then RR(Prm)end; + + for o:= 0 to NMax do begin + if(o in Mov)then + if(r[o]=Prm)then + if not((Prm in[59..69])and(KeyHole)and(o=63))then + begin writeln('There is a ',n[o,1],' here.'); + if(here(ropecon))and(o=ropecon)and not(ropecon in inven)then + writeln(' The rope is attatched to the ',n[o,1],'.'); + if(en('d'))and(o=70)and(here(70))then RL(147); + if(o=SlotCon)and(here(o))then RL(388); + if(o in CabiSet)and(here(o))then RL(389); + if(o=PanelCon)and(here(o))then RL(390); + if(o in KitSet)and(here(o))then RL(391); + end + end end + else RL(54) + end; {of DescribeRm} + +overlay procedure SAVE; + begin SA; for x:=1 to 24 do writeln; nosound; + window(1,3,80,25); + gotoxy(1,4); + if(Drive='A:')then + writeln('Remove the GAME disk and insert your SAVE/RESTORE disk ', + 'in drive A:')else + writeln('Make sure your SAVE/RESTORE disk is in drive B:'); + writeln(' (Press any key to continue...)');read(kbd,flag); + writeln;writeln; + write('Save under what name? ');BufLen:=8;readln(input); + while pos(' ',input)>0 do delete(input,pos(' ',input),1); + while pos('.',input)>0 do delete(input,pos('.',input),1); + if(input='')then input:='LastRoom'; + writeln;writeln;input:=Drive+input; + writeln('If your SAVE/RESTORE disk is in drive ',Drive, + ' then press any key to start.'); + read(kbd,flag); + with DiskSave do + begin + aInven:=Inven;aKitSet:=KitSet;aCabiSet:=CabiSet;aPanelCon:=PanelCon; + aSlotCon:=SlotCon;aCompCon:=CompCon;aRopeCon:=RopeCon;aTic:=Tic; + aYearDial:=YearDial;aPrm:=Prm;aMnRm:=MnRm;aSc:=Sc;aShots:=Shots; + aShRm:=ShRm;aRx:=Rx;aEv:=Ev;aCode:=Code;aLoc:=Loc;aKeyHole:=KeyHole; + end; + assign(GameSave,input+'.a'); + rewrite(GameSave); + write(GameSave,DiskSave); + close(GameSave); + assign(Objects,input+'.b'); + rewrite(Objects); + for x:=0 to RMax do write(Objects,p[x]); + close(Objects); + assign(WordList,input+'.c'); + rewrite(Wordlist); + for x:= 0 to NMax do + for y:= 1 to 5 do + write(WordList,n[x,y]); + for x:= 0 to VMax do + for y:= 1 to 5 do + write(WordList,v[x,y]); + close(WordList); + assign(Things,input+'.d'); + rewrite(Things); + for x:= 0 to NMax do write(Things,r[x]); + close(Things); + writeln; delete(input,1,2); + writeln('Your present game location is now', + ' SAVED to disk under the name ''',input,'.'''); + if(Drive='A:')then begin writeln; + writeln('Remove the SAVE/RESTORE disk and insert your GAME disk.')end; + writeln(' (Press any key to continue...)');read(kbd,flag); + writeln;writeln; + if(Verb<>54)then writeln('You may now resume your game...'); + if(Line='')then Line:='look';Tic:=Tic-2;Back:=True; + if(Prm in[59..68])then sound(20); + window(1,2,80,25) + end; {of Save} + +overlay procedure RESTORE; + function Exist:Boolean; + begin + assign(GameSave,input+'.a'); + {$I-} + Reset(GameSave); + {$I+} + Exist:=(IOresult=0) + end; + begin SA; for x:=1 to 24 do writeln; nosound; + window(1,3,80,25);gotoxy(1,4); + if(Drive='A:')then + writeln('Remove the GAME disk and insert your SAVE/RESTORE disk ', + 'in drive ',Drive)else + writeln('Make sure your SAVE/RESTORE disk is in drive B:'); + writeln(' (Press any key to continue...)');read(kbd,flag); + writeln;writeln; + write('Which file name do you want to RESTORE? ');BufLen:=8;readln(input); + while pos(' ',input)>0 do delete(input,pos(' ',input),1); + while pos('.',input)>0 do delete(input,pos('.',input),1); + if(input='')then input:='LastRoom'; + writeln;writeln;input:=Drive+input; + writeln('If your SAVE/RESTORE disk is now in drive ',Drive, + ' then press any key to start.'); + read(kbd,flag); + if Exist then + begin + close(GameSave); + assign(GameSave,input+'.a'); + reset(GameSave); + read(GameSave,DiskSave); + close(GameSave); + with DiskSave do + begin + Inven:=aInven;KitSet:=aKitSet;CabiSet:=aCabiSet;PanelCon:=aPanelCon; + SlotCon:=aSlotCon;CompCon:=aCompCon;RopeCon:=aRopeCon;Tic:=aTic; + YearDial:=aYearDial;Prm:=aPrm;MnRm:=aMnRm;Sc:=aSc;Shots:=aShots; + ShRm:=aShRm;Rx:=aRx;Ev:=aEv;Code:=aCode;Loc:=aLoc;KeyHole:=aKeyHole; + end; + assign(Objects,input+'.b'); + reset(Objects); + for x:=0 to RMax do read(Objects,p[x]); + close(Objects); + assign(WordList,input+'.c'); + reset(Wordlist); + for x:= 0 to NMax do + for y:= 1 to 5 do + read(WordList,n[x,y]); + for x:= 0 to VMax do + for y:= 1 to 5 do + read(WordList,v[x,y]); + close(WordList); + assign(Things,input+'.d'); + reset(Things); + for x:= 0 to NMax do read(Things,r[x]); + close(Things); + writeln; delete(input,1,2); + writeln('Your previously SAVED game location is now', + ' RESTORED from the file ''',input,'.'''); + if(Drive='A:')then begin writeln; + writeln('Remove the SAVE/RESTORE disk and insert your GAME disk.')end; + writeln(' (Press any key to continue...)');read(kbd,flag); + end + else + begin writeln;TextColor(28); + writeln(' That name does not exist on this', + ' SAVE/RESTORE disk.',^g); + TextColor(m2);writeln; + if(Drive='A:')then + writeln('Put your GAME disk back in the disk drive and press any key.') + else writeln(' (Press any key to continue...)'); + read(kbd,flag); + end; + writeln;writeln;writeln('You may now resume you game...'); + if(Line='')then Line:='look';Tic:=Tic-2;Back:=True; + if(Prm in[59..68])then sound(20); + window(1,2,80,25) + end; {of Restore} + +overlay procedure Vanish(o : integer); + begin SA; + inven:=inven-[o]; + r[o]:=Null; + p[Prm]:=p[Prm]-[o]; + if(o=7)and not(en('I'))then Ev:=Ev+['I']; + if(o=13)and(13 in p[42])then p[42]:=p[42]-[13]; + if(o=PanelCon)then PanelCon:=Null; + if(o=SlotCon)then SlotCon:=Null; + if(o in CabiSet)then CabiSet:=CabiSet-[o]; + if(o in kitset)then kitset:=kitset-[o]; + if(o=63)and KeyHole then KeyHole:=False; + if(o=74)then Ev:=Ev-['p']; + if(o=89)then Ev:=Ev-['i']; + if(o=RopeCon)and(verb=36)then begin RopeCon:=Null;RL(402)end; + if(o=RopeCon)and not(Verb in[9,14])then RopeCon:=Null + end; + +overlay procedure Play( Start, Stop, Wait: integer); + var x : integer; + begin + if(Start<=Stop)then + for x:= Start to Stop do + begin sound(x); delay(Wait); end + else + for x:= Start downto Stop do + begin sound(x); delay(Wait); end; + if(Prm in[59..68])then sound(20)else nosound + end; {of Play} + +overlay procedure DropAll; + var o : integer; + begin + for o:= 0 to NMax do + if(o in inven)then + begin + r[o]:=Prm; + inven:=inven-[o];writeln(n[o,1],': Dropped.'); + end; + RL(106); + end; {of DropAll} + +function FlasOff : Boolean; + begin + if not(En('a'))then FlasOff:=True + else + if(r[29]=Prm)or(29 in inven)then FlasOff:=False + else FlasOff:=True; + end; + +procedure MoveTo(NewRm : integer); + var o : integer; + begin + if(57 in inven)and(ropecon<>Null)and not(ropecon in inven) + and(ropecon in mov)and not(ropecon=70)then + begin r[ropecon]:=Prm;RL(158);end + else if(57 in inven)and(ropecon<>Null)and(not(ropecon in mov)or + ((ropecon=70)and(en('d'))))then + begin RL(55);inven:=inven-[57];r[57]:=Prm;end + else if not(57 in inven)and((ropecon in inven)or + (ropecon in[60,56,44]))then r[57]:=NewRm + else if not(57 in inven)and(r[57]=Prm)and(r[ropecon]=NewRm)then + begin r[57]:=NewRm;RopeOld:=Prm;end + else if not(57 in inven)and(r[57]=Prm)and(NewRm=RopeOld)and + (r[ropecon]=Prm)then + begin r[57]:=RopeOld;RopeOld:=Null;end; + if(ropecon=Null)or((NewRm<>RopeOld)and(Prm<>RopeOld))then RopeOld:=Null; + if(MnRm<>Null)then Monster(NewRm); + if(Prm in[63..68])and not(NewRm in[59,69])then RL(343); + if(Prm in[59,63..68])then for o:=0 to NMax do if(r[o]=Prm)then r[o]:=NewRm; + Prm:=NewRm; + DescribeRm + end; {of MoveTo} + +procedure Time; + begin + Tic:=Tic+1; + case Tic of + 3:RL(280); + 4:RS(1); + 17:if not(en('A'))then begin RS(3);DEAD end else RS(5); + 19:RL(4); + 20:RL(5); + 21:RL(6); + 23:RS(6); + 24:if(en('B'))then begin RS(8);writeln;RL(16);moveto(5);Sc:=Sc+25; + n[64,5]:='ship';v[26,2]:='pick' end + else begin RS(7);DEAD;end; + 43:if(not(en('c'))and not(en('n')))then RL(31); + 73:if(not(en('c'))and not(en('n')))then RL(32); + 93:if(not(en('c'))and not(en('n')))then begin RL(33); DEAD end; + 99:if(Prm in[6..24])and(here(29))and not(flasoff)and(not(en('s')))then + begin RL(41);Ev:=Ev+['s'] end; + 147:if not(en('n'))then RL(31); + 149:if(here(29))and not(flasoff)then RL(59); + 153:if(Prm in[6..23])and(here(29))and not(flasoff)then + begin RS(14);vanish(29) end; + 170:if not(en('n'))then RL(32); + 181:if not(en('n'))then begin RL(33); DEAD end; + 549:RL(281); + 586:RL(282); + 598:RL(283); + 607:begin RL(284);DEAD;end; + end; {of case} + +case Prm of + 1..3:if(tic>4)and(random(4)=1)then RL(405); + 36..39:if(random(5)=2)then RL(219); + 7 :if(random(8)=2)then RL(266); + 8 :if(random(3)=2)then begin RL(265);play(6666,7000,0);end; + 13..24:if(random(16)=2)then RL(246); + 25..35:if(random(30)=2)then RL(267); + 47,48:if(random(5)=2)and(inven <>[])then + begin + if(Prm=48)then begin writeln;RS(40)end + else begin writeln;RS(44);moveto(48)end; + o:=1;flag:='?'; + repeat o:=o+1; + if(o in inven)then + begin vanish(o);r[o]:=random(9)+41;flag:='g';end; + until Flag = 'g'; + end; +end; +case Prm of + 5,6,9,10:if(random(9)=2)then RL(268); + 7..40:if(here(84))and(random(20)=2)then RL(269) + else if(random(75)=2)then RS(36) + else if(Prm in[5..22])and(random(33)=2)then + begin RL(265);play(6500,6950,0)end; + 41..49:if(random(27)=2)then RL(285); + 59 :if(random(15)=1)then RL(406); +end; +if Attack and(MnRm=Prm)and(not Back)then + begin case random(3) of 0:RS(80); 1:RS(81); 2:RS(82)end;DEAD end +else if(MnRm=Prm)then Attack:=True + end; {of Time} + +function Present : Boolean; + begin + if(noun<>Null)and(noun<>1)then + if(here(noun))then + if(noun2<>Null)then + if(here(noun2))then Present:=true + else begin + writeln('You can''t see any ',n[noun2,1],' here.');Present:=false end + else Present:=true + else begin + writeln('You can''t see any ',n[noun,1],' here.');Present:=false end + else Present:=true + end; + +overlay procedure Initialize; + procedure Cn(S : Str80); + begin + gotoxy(40-(length(S)div 2),wherey);writeln(S); + end; + begin + textcolor(15); + writeln('Prepare to engage yourself in a most exciting adventure.'); + writeln('But first, two simple questions:'); + gotoxy(1,4);write('Are you using a COLOR screen (Y/N)? '); + nosound; play(72,80,45); + read(kbd,flag); play(2500,2490,6); + m0:=20;m1:=14;m2:=11;m3:=4;m4:=15;m5:=28;m6:=1;m7:=4;m8:=10;m9:=10; + if upcase(flag)='N' then + begin + writeln('No, I don''t have a color screen.'); + m0:=31;m1:=15;m2:=15;m3:=7;m4:=0;m5:=31;m6:=7;m7:=8;m8:=7;m9:=0; + end else writeln('Yes, I do have a color screen.');writeln; + write('How many disk drives do you have (1/2)? '); + play(80,88,30); + read(kbd,flag);play(2500,2490,6); + Drive:='B:'; + if(upcase(flag)='O')or(flag='1')then + begin Drive:='A:';writeln('I have ONE disk drive.')end else + writeln('I have TWO disk drives.'); + delay(999);clrscr;textcolor(15);gotoxy(1,5);writeln;textcolor(7); + cn('Beyond the Titanic');textcolor(6);cn('------------------');writeln; + textcolor(7); + cn('A Text & Sound Adventure Fantasy');writeln;writeln; + cn('An Apogee Software Production');writeln;writeln;writeln; + cn('Written and Programmed by Scott Miller'); + textcolor(11); + gotoxy(32,24);textcolor(7); + write('Press any key...');read(kbd,flag);clrscr; + + { *** SHAREWARE SCREEN *** } + + textcolor(15); + writeln('Please note that Beyond the Titanic is a SHAREWARE game.'); + writeln; + textcolor(7); + writeln('This game has been placed in the public domain for your enjoyment.'); + writeln; + writeln('If you like the game the author (Scott Miller) asks that you please'); + writeln('contribute $5 or $10 (your discretion) to him. This minimal payment'); + writeln('will help compensent the author for the year of work that went into'); + writeln('Beyond the Titanic. It will also encourage the author to make new and'); + writeln('better games, like Supernova and Kingdom of Kroz, both of which are'); + writeln('also shareware games recently released.'); + writeln; + writeln('This fee also registers the payer for telephone support and clues.'); + writeln;writeln; + writeln('Please make checks payable to Scott Miller.'); + writeln; + textcolor(15); + writeln(' Scott Miller (214) 240-0614'); + writeln(' 4206 Mayflower Dr.'); + writeln(' Garland, TX 75043'); + writeln; + textcolor(7); + writeln('Thanks, enjoy the game...'); + gotoxy(23,25); + delay(12000); + while keypressed do read(kbd,flag); + write('Press any key to start the game...'); + read(kbd,flag); + while keypressed do read(kbd,flag); + clrscr; + { ************************ } + + gotoxy(1,25); + TextColor(m1); +cn('APRIL 14, 1912 11:43 PM'); +cn('You never knew the black canvas of the night was so full'+ + ' of twinkling detail.'); +cn('Standing on deck of the White Star''s new super luxury liner, deep at sea,'); +cn('where the bright lights of San Francisco don''t fade the night, you'); +cn('can view thousands of stars you never realized existed.'); +cn('Looking out over the icy sea you can barely see small pieces of'+ + ' broken ice'); +cn('bobbing in the water. Rumor has it that icebergs the size of small'); +cn('mountains can be found in this region. You don''t feel'); +cn('too worried, though, the Titanic has been touted as'); +cn('"unsinkable," and every single passenger knows'); +cn('that White Star, the premier ship builder,'); +cn('knows their stuff...'); +for x:= 1 to 3 do writeln; +Line :=''; +LastNoun :=''; +KitSet :=[2,29,57]; +CabiSet :=[89,63]; +CompCon :=Null; +PanelCon :=8; +RopeCon :=Null; +SlotCon :=Null; +RopeOld :=Null; +RmSh :=[]; +Mov :=[2,7,8,13,27,29,32,34,40,52,51,57,63,70,74,77,89]; +OneWordCommands:=[1,4,5,7,8,16,18,19,22,31,33..35,41,43..54,56..59,61..65]; +Ev :=[]; +Inven :=[]; +Prm :=0; +MnRm :=Null; +Tic :=Prm; +Sc :=0; +Shots :=6; +KeyHole :=false; +Verbose :=true; +Attack :=False; +YearDial :=135; +DayDial :=60; +assign(rooms1,'rooms1');assign(rooms2,'rooms2'); +assign(special1,'special1');assign(special2,'special2');assign(line1,'line'); +reset(rooms1);reset(rooms2);reset(special1);reset(special2);reset(line1); +Str(Random(9998)+1,Code); + DescribeRm; writeln; randomize; + gotoxy(1,1);TextBackGround(m6); + for x:=1 to 80 do write(' ');writeln;TextColor(m4); + gotoxy(4,1);writeln('Move');gotoxy(68,1);writeln('Score');TextColor(m2); + TextBackGround(0); Window(1,2,80,25); + end; {of Initialize} +{***************************** END OF COMMANDS *****************************} + \ No newline at end of file diff --git a/src/LINE b/src/LINE new file mode 100644 index 0000000000000000000000000000000000000000..4b79de36078b2af2b2f575eb47fe906bff5eeb06 GIT binary patch literal 34263 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 H(v|-Q#UK%Q literal 0 HcmV?d00001 diff --git a/src/LINERITE.PAS b/src/LINERITE.PAS new file mode 100644 index 0000000..050f61b --- /dev/null +++ b/src/LINERITE.PAS @@ -0,0 +1,154 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +program + line_Responce_Writer; + + {This program WRITES and READS from the text file: + 'Line', 80 letters (Max), + {This program has the line edit feature!} +const + Max = 80; + +type + DescriptionLength = string[Max]; + OneChar = string[1]; + +var + Line : file of descriptionlength; + Position,Counter,Start,Stop : integer; + Text : descriptionlength; + Answer : char; + Letter : onechar; + List : boolean; + +procedure Diskwrite(text: Descriptionlength; pointer: integer); + begin + seek(Line,pointer); + WRITE(Line,text); + writeln('line responce ',pointer, + ' is written! Size = ',filesize(Line)); + close(Line); + end; {End of Diskwrite.} + +procedure Diskread(start,stop: integer); +var +counter : integer; +text : descriptionlength; + begin + assign(Line,'Line'); + reset(Line); + seek(Line,start); + for counter:= start to stop do + begin + highvideo; + READ(Line,text); + if List then + writeln(lst,counter,text) + else + begin + writeln('Here is line responce # ',counter); + lowvideo; + writeln(text); + highvideo; + end; + end; + close(Line); + write('The file contains ',filesize(Line),' line responces.'); + end; {End of Diskread.} + +procedure Beep; +begin + if (length(text)=70) then write(^g); +end; + +BEGIN +repeat {Main loop.} + text:=''; + +writeln; +writeln('Do you want to R)ead or W)rite?'); +read(kbd,answer); +if upcase(answer) <> 'R' then {Write to 'line' files.} + begin + writeln; + assign(Line,'Line'); + writeln('Now RESETing line files.'); + RESET(Line); + writeln; + writeln('Input a string not more than ',Max,' characters.', + ' ''\''-Ends string.'); + lowvideo; + repeat + read(trm,letter); + if letter = ^h then + begin + write(^h,' ',^h); + delete(text,length(text),2); + end; + beep; + if (letter <> '\') and (letter <> ^h) then text:=text+letter + until (length(text)=Max) or (letter='\'); + writeln; + if letter = '\' then + begin + highvideo; + writeln('Total of ',length(text),' characters.'); + end + else + begin + highvideo + end; + writeln('Now WRITING string to disk.'); + writeln(' At what position? (Next open is # ',filesize(Line),')'); + readln(position); + Diskwrite(text,position); + end +else {Read from 'Rooms'.} + begin + writeln; + writeln('To the S)creen or P)rinter?'); + read(kbd,answer); + if(upcase(answer)='P')then List:=True else List:=False; + assign(Line,'Line'); + reset(Line); + writeln('Filesize = ',filesize(Line), + ' (From 0 to ',filesize(Line)-1,')'); + close(Line); + writeln('Enter starting position:'); + readln(start); + if(start > filesize(line)-7)then stop:=(filesize(line)-1) else + begin + writeln('Enter final position:'); + readln(stop); + end; + Diskread(start,stop); + end; {End of else clause.} +writeln;writeln('Another line responce? Y)es or N)o'); +read(kbd,answer); +until upcase(answer) = 'N'; {End of Main loop.} +writeln; writeln(^g,'You are now out of the program.') +END. + + + \ No newline at end of file diff --git a/src/OBJECTS.PAS b/src/OBJECTS.PAS new file mode 100644 index 0000000..37d1a0a --- /dev/null +++ b/src/OBJECTS.PAS @@ -0,0 +1,111 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +{*****************************************************************************} +{* OBJECTS *} +{* by Scott Miller *} +{* This include file to AdGame initializes all of the immoveable objects. *} +{* Copyright 1984 Pending *} +{*****************************************************************************} +overlay procedure Assign0; +begin + {INITIALIZE OBJECT'S ROOMS} +for o:=0 to NMax do r[o]:=Null; +p[0]:=[53,73,80,6,26,64,36]; +p[1]:=[53,6,57,73,80,64,36]; +p[2]:=[40,53,14,6,66,46,73,80,57,64,36]; +p[3]:=[6,73,80,39,59,57,64,36]; +p[4]:=[6,73,80,39,35,59,64,36]; +p[5]:=[73,80,71]; +p[6]:=[73,80,71]; +p[7]:=[36,73,80,6]; +p[8]:=[47,46]; +p[9]:=[73,80]; +p[10]:=[80,73,17]; +p[11]:=[72]; +p[12]:=[70]; +p[13]:=[17,47,73,80]; +p[14]:=[]; +p[15]:=[17,73,80]; +p[16]:=[17,57]; +p[17]:=[17]; +p[18]:=[]; +p[19]:=[69]; +p[20]:=[12,69,67,43]; +p[21]:=[64,71,37]; +p[22]:=[64,71,37]; +p[23]:=[64,26,71,37]; +p[24]:=[64,69,41,26,55]; +p[25]:=[64,69,41,26,84]; +p[26]:=[41,12,69,84]; +p[27]:=[20,21,26,10,58,38,86]; +p[28]:=[21,10,78,33,49,85]; +p[29]:=[78,10,21,33,49,85]; +p[30]:=[21,10,24,25,82,16,59,49,76,38,86]; +p[31]:=[75,21,10,84,7,22]; +p[32]:=[61,75,21,14]; +p[33]:=[61,75,4,21,10,59,84]; +p[34]:=[16,5,21,68,58,10,0,20,74,25,86]; +p[35]:=[62,21,10,54,55]; +p[36]:=[85,83,21,14,12,64,43]; +p[37]:=p[36]; +p[38]:=p[36]+[28]; +p[39]:=p[36]; +p[40]:=p[36]+[26,67]; +p[41]:=[87,73,19,47,53,37]; +p[42]:=p[41]+[13]; +p[43]:=p[41]; +p[44]:=[41,19,87]; +p[45]:=[41,19]; +p[46]:=[41,19]; +p[47]:=[3,41,19,17,22]; +p[48]:=[3,19,17,22,27,35]; +p[49]:=[9,26,37,72]; +p[50]:=[9,26,88,46,66,37,88,68]; +p[51]:=[9,37]; +p[52]:=[9,37]; +p[53]:=[9,69,37]; +p[54]:=[9,37]; +p[55]:=[9,69,11,45,26,61,37,68]; +p[56]:=[9,69,37]; +p[57]:=[9,19,37,41,65,22,31,73,87]; +p[58]:=[9,10,16,19,20,21,25,36,41,46,58,59,65,66,68,81,86]; +p[59]:=p[58]+[17,18,22,31,71,73,87]; +p[63]:=[9,10,16,18,19,20,21,25,36,41,46,58,59,65,66,68,81,86,88]; +p[64]:=p[63]; +p[65]:=p[63]; +p[66]:=p[63]; +p[67]:=p[63]; +p[68]:=p[63]; +p[69]:=p[63]+[9,14,37,53]; +p[70]:=p[69]+[69]-[10,16,20,36,46,58,59,66,68,81,86]; +p[71]:=[10,20,21,25,36,38,41,54,58,69]; +p[72]:=[85]; +p[73]:=p[72]; +p[74]:=p[72]; +p[75]:=[23,14,61]; +p[76]:=[26,45]; +for x:=0 to 76 do p[x]:=p[x]+[15,30,42,44,50,56,60,79] +end; +{****************************** END OF OBJECTS *******************************} + \ No newline at end of file diff --git a/src/ROOMRITE.PAS b/src/ROOMRITE.PAS new file mode 100644 index 0000000..df5c88f --- /dev/null +++ b/src/ROOMRITE.PAS @@ -0,0 +1,176 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +program + Room_Write; + + {This program WRITES and READS from the two text files: 'rooms1' and + 'rooms2'. If a description exceeds 240 letters (Max), then the file + 'rooms2' is used. Otherwise 'rooms2' = ''.} + {This program has the line edit feature!} +const + Max = 240; + +type + DescriptionLength = string[Max]; + ManyChar = string[1]; + +var + Rooms1, Rooms2 : file of descriptionlength; + Position,Counter,Start,Stop : integer; + Text1, Text2 : descriptionlength; + Answer : char; + Letter : manychar; + List : boolean; + +procedure Diskwrite(text1,text2: Descriptionlength; pointer: integer); + begin + seek(rooms1,pointer); seek(rooms2,pointer); + WRITE(rooms1,text1); WRITE(rooms2,text2); + writeln('Room decription ',pointer, + ' is written! Size = ',filesize(rooms1)); + close(rooms1); close(rooms2); + end; {End of Diskwrite.} + +procedure Diskread(start,stop: integer); +var +counter : integer; +text1, text2 : descriptionlength; + begin + assign(rooms1,'rooms1');assign(rooms2,'rooms2'); + reset(rooms1); reset(rooms2); + seek(rooms1,start); seek(rooms2,start); + for counter:= start to stop do + begin + highvideo; + READ(rooms1,text1); READ(rooms2,text2); + if list then + begin + writeln(lst,'Discription # ',counter); + writeln(lst,text1,text2); + end + else + begin + writeln('Here is room description # ',counter); + lowvideo; + writeln(text1,text2); + highvideo; + end; + end; + close(rooms1); close(rooms2); + write('The file contains ',filesize(rooms1),' room descriptions.'); + end; {End of Diskread.} + +procedure Beep; +begin + if(length(text1)in[70,150,230])or(length(text2)in[70,150,230])then write(^g); +end; + +BEGIN +repeat {Main loop.} + text1:=''; + text2:=''; + +writeln; +writeln('Do you want to R)ead or W)rite?'); +read(kbd,answer); +if upcase(answer) <> 'R' then {Write to 'Rooms'.} + begin + writeln;writeln; + assign(rooms1,'rooms1'); assign(rooms2,'rooms2'); + writeln('Now RESETing room files.'); + RESET(rooms1); RESET(rooms2); + writeln; + writeln('Input a string not more than ',2*Max,' characters.', + ' ''\''-Ends string.'); + lowvideo; + repeat + read(trm,letter); + if letter = ^h then + begin + write(^h,' ',^h); + delete(text1,length(text1),2); + end; + beep; + if (letter <> '\') and (letter <> ^h) then text1:=text1+letter + until (length(text1)=Max) or (letter='\'); + writeln; + if letter = '\' then + begin + highvideo; + writeln('Total of ',length(text1),' characters.'); + text2:=''; + end + else + begin + writeln; + highvideo; + writeln('String #1 is full! Now writing to string #2.',^g); + lowvideo; + repeat + read(trm,letter); + if letter = ^h then + begin + write(^h,' ',^h); + delete(text2,length(text2),2); + end; + beep; + if (letter <> '\') and (letter <> ^h) then text2:=text2+letter + until (length(text2)=Max) or (letter='\'); + writeln; highvideo; + writeln('Total description length = ', + length(text1)+length(text2),' characters.'); + end; + writeln('Now WRITING string to disk.'); + writeln(' At what position? (Next open is # ',filesize(rooms1),')'); + readln(position); + Diskwrite(text1,text2,position); + end +else {Read from 'Rooms'.} + begin + writeln;writeln; + writeln('To the S)creen or the P)rinter'); + read(kbd,answer); + if(upcase(answer)='P')then List:=True else List:=False; + assign(rooms1,'rooms1'); + reset(rooms1); + writeln('Filesize = ',filesize(rooms1), + ' (From 0 to ',filesize(rooms1)-1,')'); + close(rooms1); + writeln('Enter starting position:'); + readln(start); + if(start > filesize(rooms1)-5)then stop:=(filesize(rooms1)-1) else + begin + writeln('Enter final position:'); + readln(stop); + end; + Diskread(start,stop); + end; {End of else clause.} +writeln;writeln('Another room description? Y)es or N)o'); +read(kbd,answer); +until upcase(answer) = 'N'; {End of Main loop.} +writeln; writeln(^g,'You are now out of the program.') +END. + + + \ No newline at end of file diff --git a/src/ROOMS1 b/src/ROOMS1 new file mode 100644 index 0000000..896160e --- /dev/null +++ b/src/ROOMS1 @@ -0,0 +1,4 @@ +ð You are standing near the front of the Titanic on the starboard deck. To the east a wooden rail follows the curve of the ship. Behind you, to the south, arethe sounds of a wild party. A misty breeze parts your hair in an awkward place,ð Standing at the middle of the starboard deck you can barely view both ends, which lead east and west from here, gently curving inward. In front of you are several lifeboats, each held in place by a thick rope. Above and behind you is ð This end of the ship is dimly lit, allowing you to make out several new star clusters. A large stack of misplaced cargo blocks your path to the east. Written on one of the crates is a faded message. To the west you can still see ð You are within one of the many wooden lifeboats along this side of the ship. A single thick rope secures the boat to the Titanic. You can still walk across the steps to the south to get back onto the great ship. A small red kit is x You are in a wooden life boat floating in the icy cold ocean. A survival kit is built into the side of the framework. You are in a wooden life boat floating in the icy cold ocean. A survival kit is built into the side of the framework.ð You are standing in the middle of a huge cavern. From the western wall a torrent gusher of water builds into a fast flowing underground stream, which heads to the east. The cave follows the stream to the east, leading into a darkð This cave is full of beautiful rock formations. Long columns of stalagtites fill the cave from top to bottom. The stream looks shallow here, it might be possible to wade across to get to the north side. To the west you can still seeØYou are awed by what you see. You are standing directly underneath the ocean. The bottom, or ceiling from your viewpoint, is completely iced over, appearantly from the cool draft that pervades this area.that pervades this area.Ð This is a cramped cave with a floor that feels like mud and smells like two month old socks. On the wall in front of you are some strange chiseled markings. The only way out is to the northwest.nly way out is to the northwest.Ü At this point the stream makes a bend to the northeast. A slight rumbling sound can be heard further down the stream. The path to the west returns to the stalagtite cave, a separate path leads to the southeast.ds to the southeast.Ñ At this point in the cave the stream falls into a deep chasm, forming a natural waterfall. The cave walls are worn to the point of being as smooth as glass. The only safe exit lies to the southwest.afe exit lies to the southwest.ð The passage opens up to form another small, misty cave. You notice something unusual about the eastern wall. A new passage breaks off to the northeast. To the west you can still hear the sound of the rushing stream. A small opening in› This place is more a large crack than a cave. The crevice widens a little revealing a sand covered floor. The crack to the northeast leads back out.little revealing a sand covered floor. The crack to the northeast leads back out.ð You are in a large cave that is covered with a thick layer of mud. The further north you walk the deeper you sink in! Past the mud to the north you can see a clear area where a chasm cut through, and even further you can see ð You are at the turning point of a winding tunnel, mysteriously carved out of solid rock. The rays of your flashlight fade into blackness in either direction. The crumbled wall lies back to the west and the tunnel heads to the ð This is the northern end of a gigantic mud covered cave, to the south is a wide pit of mud oozing into a section of the chasm. The chasm crosses in front of you, just west of where you are standing. The ground here is much drier than› You clinging to the end of the rope! The chasm walls have narrowed a little here, and nearly form a tunnel below you. The bottom is no where in sight!a little here, and nearly form a tunnel below you. The bottom is no where in sight!ð You are at the bottom of the deep chasm. On both sides of you are fallen rocks, blocking any passage into the chasm. Somewhere in the darkness above hangs the rope. From here a skinny passage leads east, into an peculiar shaped ð This is quite an unusual cave. The walls are scorched black, as if by great heat. You decide that this cave was not formed by the normal processes of nature. The path forks here, headind both northeast and southeast, while the Ÿ You at the middle point of a string of steps that curve to the northeast. The steps are etched out of solid rock. The passage up leads to the northwest. The steps are etched out of solid rock. The passage up leads to the northwest.ð This area appears to be some sort of abandoned zoo, with metal cages crowding every corner. Most of the cages are littered with the remains of long decayed creatures, many with very unusual skeleton structures. One cage, however, is ð You are standing at the front end of a huge metal saucer, which you have deduced to be of alien origin. The saucer curves away from you in both directions, but only the northern end has escaped a prehistoric rockfall. A ð You are standing near the side of a huge, ominous metal saucer. A rockslide blocks any further progress around the disk. You are surprised at how smooth the metal is, with no appearent damage from the cave in of boulders. A clear ð This is the top of the large saucer. A hatch lies at your feet, recessed in such a way that it cannot be seen from the ground. The boulders that rest on the hull seem to have left no damage at all! From here you guess the size of ´ This is an empty chamber with a ladder leading both up and down. A mangled hatch, once the lower door, lies twisted to the side of the ladder, leaving an easy climb downward. to the side of the ladder, leaving an easy climb downward.ð You're at the center of a kalideoscope of passages and rooms, leading in all directions. The central ladder continues to a lower section of the saucer. Theonly passage blocked by a door lies to the north. The whole interior of the ð This is the central entry of the lower deck, with open rooms all around you. In the various dimly lit rooms you can see stacks of cargo, equipment, empty cages and other strange objects. Eerie shadows play with your imagination the ð This is the most complicated room you have seen on the saucer. The walls are lined with equipment, controls and machines. The center piece of the room is a strange device that reminds you of a typewriter in its appearance. Built into ð You are in a room full of scientific equipment, everything looks intact, though painfully confusing. To the east is tall glass tube, big enough for a person to stand in. The control board near the tube contains several closed ™ You are inside the tall tube, above is a device that looks like a lamp. You can still see all of the equipment in the lab through the tube's doorway.a lamp. You can still see all of the equipment in the lab through the tube's doorway.È This room is packed with machines. The center piece of the room seems to be ametallic chair. On the far wall is a small panel with a keypad below it, and a microphone built into the wall above it.microphone built into the wall above it.Ï This rooms is mostly empty, except for the row of machines on the far wall. Atable sits at one corner. On the ceiling are several vents. One piece of equipment looks in someways similar to a stove.s in someways similar to a stove.n This small area is obviously some sort of supply room, lined with cluttered shelves and sealed containers.aled co9Æ%n T9ú*n This small area is obviously some sort of supply room, lined with cluttered shelves and sealed containers.Ñ Several odd shaped beds, tables and pieces of equipment occupy most of the space in this chamber, you note that everything is neat and orderly. Positionedabove each bed are two small buttons on the wall. two small buttons on the wall.ð This looks like the main control area for the entire saucer. Banks of buttons and dials cover the walls. Sitting in front of the controls is a dead alien, with its neck area covered with gashes. It's difficult to tell how long ð This room is the source of the low humming sound you first noticed in the chasm. A huge glowing metallic structure fills the back half of the room. A large see-through plate rests in position in front of the structure. A large L This is some sort of cargo bay, full of empty cages and strange equipment.þ9¯ÿËL This is some sort of cargo bay, full of empty cages and strange e9Æ%L T9ú*L This is some sort of cargo bay, full of empty cages and strange equipment.L This is some sort of cargo bay, full of empty cages and strange equipment.þ9¯ÿËL This is some sort of cargo bay, full of empty cages and strange e9Æ%L T9ú*L This is some sort of cargo bay, full of empty cages and strange equipment. This is some sort of cargo bay, full of empty cages and stange equipment. At your feet is a large egg, covered with a glistening jelly.empty cages and stange equipment. At your feet is a large egg, covered with a glistening jelly.L This is some sort of cargo bay, full of empty cages and strange equipment.þ9¯ÿËL This is some sort of cargo bay, full of empty cages and strange e9Æ%L T9ú*L This is some sort of cargo bay, full of empty cages and strange equipment.Õ You are inside one of the many cages within the lower cargo bay of the saucer.Slim and jelly drip from the bars. To the west the cage door has been closed and chained, there is no escape but through the door!scape but through the door!ð You standing at the center of a broken wooden bridge, loose boards creak as you walk along it. Underneath a fast flowing stream winds to the east. Dusty clouds scar the sky. The bridge continues to the south, the broken end is æ This is the broken end of the bridge, where a large section has collapsed into the rapid waters below. The unreachable north bank reveils desolate waste lands to the horizon. The bridge continues southward from here.from here.³ This is the southern end of the collapsed bridge. Further south the dirt path joins a dusty road, which follows the river. The bridge arcs over the river to the north. the river. The bridge arcs over the river to the north.Ý This is a discarded dirt road heading both east and west. Any tracks have long been washed with the wind. You can still view the bridge to the north. The south bank of the road consists of a sheer concrete wall.heer concrete wall.¸ This is a deep deserted road leading both east and west. The steep banks are reinforced with thick concrete and appear unclimbable. A separate dirt path breaks off to the south.bable. A separate dirt path breaks off to the south. This is a deep deserted road leading both east and west. The steep sides of the road are built out of thick concrete slabs.ep deserted road leading both east and west. The steep sides of the road are built out of thick concrete slabs.ð The road ends abruptly here. Below you lies a steep slope leading into a vastcrater to the west. You estimate that the crater is at least two miles across. You wonder how this enormous pit in the Earth came to be. All around you are î This is the bottom of the deep, dusty, boulder filled crater, at least two miles wide. To the east you can see the worn path where you entered the huge pit. Footprints like the ones you saw above the crater cover the entire area.a.ð You are standing at the north end of a large four story building. The windowless walls are line with eroded cracks, the surrounding land appears to becompletely neglected. The large glass doors to the south have long been broken ð This is the building's main lobby area, full of broken chairs and tables. Rubble and trash litter the cracked marble floor. To the south is a shimmering wall of orange light. A small sign hangs beside the beams. The broken glass K This is an empty room, but for the rubble. Exits lie in many directions.e a9°ÿ# K This is an empty room, but for the rubble. Exits lie in many direa9Í*K a9â/K This is an empty room, but for the rubble. Exits lie in many directions.K This is an empty room, but for the rubble. Exits lie in many directions.e a9°ÿ# K This is an empty room, but for the rubble. Exits lie in many direa9Í*K a9â/K This is an empty room, but for the rubble. Exits lie in many directions.m This is an empty room, but for the rubble. Exits lie in many directions. You notice a strange updraft.a strange ua9Í*m a9â/m This is an empty room, but for the rubble. Exits lie in many directions. You notice a strange updraft.K This is an empty room, but for the rubble. Exits lie in many directions.e a9°ÿ# K This is an empty room, but for the rubble. Exits lie in many direa9Í*K a9â/K This is an empty room, but for the rubble. Exits lie in many directions.½ This is a strangly lit room below the building. Empty shelves cover the walls. A big blue cabinet sits against the north wall. The stairs to the south lead back to an office.he stairs to the south lead back to an office. This is another empty room, but for the rubble and a rusty ladder going up to a square hole in the ceiling. An exit lies to the northeast.rubble and a rusty ladder going up to a square hole in the ceiling. An exit lies to the northeast.ð You are standing on the roof of the large building. From here you can view a lot of the surrounding area. To the west lies the huge crater, to the south is an open desert spanning to the horizon, the broken bridge stretches halfway ð You are sitting inside the vehicle. In front of you is a complicated control panel, covered with buttons, dials and lights. Of particular interest is an oversized white button, with a small keyhole above it. Also catching your eye Þ Made by Scott Miller (this was written Sept. 14, 1984) 4206 Mayflower Dr. Garland, Texas 75043 Tel. (214) 278-6747 14) 278-6747 Empty File...tt Miller (this was written Sept. 14, 1984) 4206 Mayflower Dr. åþðòހåþð‡òP ¸,óðò`ŒòòÇûÿ4èŒ# {FòùÿNÿœò +ûÿÇa9â/ Empty File...Empty File 2... Miller (this was written Sept. 14, 1984) 4206 Mayflower Dr. åþðòހ ð¸¸åþðòP `ŒòòÇûÿ4èŒ# {FòùÿNÿœò +ûÿa9â/Empty File 2...Empty File 3... Miller (this was written Sept. 14, 1984) 4206 Mayflower Dr. ååþðò\÷åþðò @Ùë`ŒòòÇûÿ4èŒ# {FòùÿNÿœò +ûÿa9â/Empty File 3...ð You are flying above the dense, hazy clouds, which obscures your view of the ground. The clouds stretch in all directions as far as the eye can see. To the east is a massive city-like structure floating effortlessly in the air!ð You are flying above the dense, hazy clouds, which obscure your view of the ground. The clouds stretch in all directions as far as the eye can see. To the west is a massive city-like structure floating freely in the air! Tallð You are flying quite close to the floating city now, which is about 200 yards away. From here you can see a network of roads and inclosed tubes within the city, forming an obvious transportation system. Strangely, though, you don't ë You are flying close to the north side of the floating city. From here you can see a large flat area within the buildings, roads and towers. You also see what looks like another vehicle sitting there, like the one you are flying.ying.ï To the west is the floating city, about 200 yards away. On this side you can easily see the raods that interlace the city. The tallest building is on this side, its shadow falls on your vehicle. You still don't see any signs of life..ð The floating city-like structure is to your north. The massive towers block any view into the heart of the city, but a few large tubes circle around the outside, in some cases they travel through the towers! There's no visable way ð You are inside the damaged shuttle, wrecked from the slight collision with thejagged concrete to the north. A thin line of smoke is rising from the shuttle'scontrols. ð This is the large concrete bay. Your shuttle sits to the south, slightly bent up near the bottom. Huge towers, with interlacing tubeways, provide a panoramic view, except to the north, where you can see out into the ð You are in a small room with the walls lined with controls, machines, dials, and screens. There is no activity between any of them, however. The steps to the northwest lead back to the concrete bay. Another doorless passage leads  This area is only a small section of a long corridor, heading both north and south. Passages exit both east and west, also. only a small section of a long corridor, heading both north and south. Passages exit both east and west, also. This area is only a small section of a long corridor, heading both north and south. Passages exit both east and west, also. only a small section of a long corridor, heading both north and south. Passages exit both east and west, also. This area is only a small section of a long corridor, heading both north and south. Passages exit both east and west, also. only a small section of a long corridor, heading both north and south. Passages exit both east and west, also.ð You are in a supply room filled with crates and containers--all labeled with some type of food! You see in the corner of the room where the door lies, mangled and twisted like the hatch you saw in the shuttle, both appearently  This is an empty cabin, with no bed, no chairs or tables, and no way out! Thedoor to the north has been lock and chained from the outside!chairs or tables, and no way out! Thedoor to the north has been lock and chained from the outside! \ No newline at end of file diff --git a/src/ROOMS2 b/src/ROOMS2 new file mode 100644 index 0000000000000000000000000000000000000000..74f70bd810f15de708051a8f8789d0dcd7bb2d8c GIT binary patch literal 18557 zcmeI4%daHoS;iZoW9&$Y*aQj0<+F^iiBCFCGD+wKNMmBhmN1T(gCZjq`MRpQyL_sv zI#t!D-4+5QOJv0sDFTT<0v2qLSR#!gf@CB>#9|YK6k(w(yo~uh@B3ACpPBK@csw5B z%hAZwbGk0?^?9$K|1{Ql$YR@;MHl*25!OZ5#bptiMTm7Mvwdi?BG%Iou6AMHY{N3X zT7=l!#a$m;|7~7&S#wde{5pNt#b}~CY};PwX=S~OZH_#juXR=3$Jv{odmpKq z)!TK^Hrp;#<)WB3vG2kv)=SY6tA_uYD9U^k%URjSy3D3K1ndF}h_&Z_`}sy&_I)8s;LkvTBy#U$ z|K@yKRy}e~uj`Ij6Z@y(Wq1hl!oCpmi?X#})Y)n}&|t=4T*?M2Y<5*<=b>#ja9p6w z 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 literal 0 HcmV?d00001 diff --git a/src/SPECIAL.PAS b/src/SPECIAL.PAS new file mode 100644 index 0000000..38bd103 --- /dev/null +++ b/src/SPECIAL.PAS @@ -0,0 +1,176 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +program + Special_Responce_Writer; + + {This program WRITES and READS from the two text files: + 'special1' and 'special2'. If a description exceeds 240 letters (Max), + then the file 'special2' is used. Otherwise 'special2' = ''.} + {This program has the line edit feature!} +const + Max = 240; + +type + DescriptionLength = string[Max]; + OneChar = string[1]; + +var + Special1, Special2 : file of descriptionlength; + Position,Counter,Start,Stop : integer; + Text1, Text2 : descriptionlength; + Answer : char; + Letter : onechar; + List : boolean; + +procedure Diskwrite(text1,text2: Descriptionlength; pointer: integer); + begin + seek(special1,pointer); seek(special2,pointer); + WRITE(special1,text1); WRITE(special2,text2); + writeln('Special responce ',pointer, + ' is written! Size = ',filesize(special1)); + close(special1); close(special2); + end; {End of Diskwrite.} + +procedure Diskread(start,stop: integer); +var +counter : integer; +text1, text2 : descriptionlength; + begin + assign(special1,'special1'); assign(special2,'special2'); + reset(special1); reset(special2); + seek(special1,start); seek(special2,start); + for counter:= start to stop do + begin + highvideo; + READ(special1,text1); READ(special2,text2); + if list then + begin + writeln(lst,'Special # ',counter); + writeln(lst,text1,text2); + end + else + begin + writeln('Here is special responce # ',counter); + lowvideo; + writeln(text1,text2); + highvideo; + end; + end; + close(special1); close(special2); + write('The file contains ',filesize(special1),' special responces.'); + end; {End of Diskread.} + +procedure Beep; +begin + if(length(text1)in[70,150,230])or(length(text2)in[70,150,230])then write(^g); +end; + +BEGIN +repeat {Main loop.} + text1:=''; + text2:=''; + +writeln; +writeln('Do you want to R)ead or W)rite?'); +read(kbd,answer); +if upcase(answer) <> 'R' then {Write to 'Special' files.} + begin + writeln;writeln; + assign(special1,'special1'); assign(special2,'special2'); + writeln('Now RESETing Special files.'); + RESET(special1); RESET(special2); + writeln; + writeln('Input a string not more than ',2*Max,' characters.', + ' ''\''-Ends string.'); + lowvideo; + repeat + read(trm,letter); + if letter = ^h then + begin + write(^h,' ',^h); + delete(text1,length(text1),2); + end; + beep; + if (letter <> '\') and (letter <> ^h) then text1:=text1+letter + until (length(text1)=Max) or (letter='\'); + writeln; + if letter = '\' then + begin + highvideo; + writeln('Total of ',length(text1),' characters.'); + text2:=''; + end + else + begin + writeln; + highvideo; + writeln('String #1 is full! Now writing to string #2.',^g); + lowvideo; + repeat + read(trm,letter); + if letter = ^h then + begin + write(^h,' ',^h); + delete(text2,length(text2),2); + end; + beep; + if (letter <> '\') and (letter <> ^h) then text2:=text2+letter + until (length(text2)=Max) or (letter='\'); + writeln; highvideo; + writeln('Total description length = ', + length(text1)+length(text2),' characters.'); + end; + writeln('Now WRITING string to disk.'); + writeln(' At what position? (Next open is # ',filesize(special1),')'); + readln(position); + Diskwrite(text1,text2,position); + end +else {Read from 'Rooms'.} + begin + writeln;writeln; + writeln('To the S)creen or the P)rinter?'); + read(kbd,answer); + if(upcase(answer)='P')then List:=True else List:=False; + assign(special1,'special1'); + reset(special1); + writeln('Filesize = ',filesize(special1), + ' (From 0 to ',filesize(special1)-1,')'); + close(special1); + writeln('Enter starting position:'); + readln(start); + if(start > filesize(special1)-5)then stop:=(filesize(special1)-1) else + begin + writeln('Enter final position:'); + readln(stop); + end; + Diskread(start,stop); + end; {End of else clause.} +writeln;writeln('Another special responce? Y)es or N)o'); +read(kbd,answer); +until upcase(answer) = 'N'; {End of Main loop.} +writeln; writeln(^g,'You are now out of the program.') +END. + + + \ No newline at end of file diff --git a/src/SPECIAL1 b/src/SPECIAL1 new file mode 100644 index 0000000000000000000000000000000000000000..84dc9124f640d8c36aec466f99e1473684d79863 GIT binary patch literal 20485 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 upper bound +53Reserved word +54 assignment +55 exceeds line +56Error in integer +57Error in +58 character in +60s +61 s ands +62Structureds +63s +64s and untypeds +65Untypeds +66I/O +67 s must be parameters +68 componentss +69dering of fields +70Set base +71 GOTO +72Label not within current block +73 FORWARD procedure(s) +74INLINE error +75 use of ABSOLUTE +76Overlays forwarded +77Overlays in direct mode +90 not found +91Unexpected end of source +92Unable to create overlay +93 compiler directive +96Nested include +97Too many nested WITH's +98Memory +99Compiler \ No newline at end of file diff --git a/src/WORDLIST.PAS b/src/WORDLIST.PAS new file mode 100644 index 0000000..0c10067 --- /dev/null +++ b/src/WORDLIST.PAS @@ -0,0 +1,282 @@ +{//-------------------------------------------------------------------------} +{/* } +{Copyright (C) 1990, 2009 - Apogee Software, Ltd. } +{ } +{This file is part of Supernova. Supernova 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.} +{ } +{Original Source: 1990 Scott Miller } +{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. } +{*/ } +{//-------------------------------------------------------------------------} +{*****************************************************************************} +{* WORDLIST *} +{* by Scott Miller *} +{* These are all of the verbs and nouns (grouped in synonyms) used by AdGame.*} +{* Copyright 1984 Pending *} +{*****************************************************************************} + +{====================================START====================================} + + {VERB LIST: GROUPS ALL SYNONYMS} +overlay procedure Assign1; +begin +for x:= 0 to VMax do for y:= 1 to 5 do v[x,y]:=Q; +v[0,1]:='attack'; v[0,2]:='kill';v[0,3]:='beat up'; +v[1,1]:='descrip';v[1,2]:='rd';v[1,3]:='r d'; +v[2,1]:='climb';v[2,2]:='climb on';v[2,3]:='climb onto';v[2,4]:='climb in'; + v[2,5]:='climb over'; +v[3,1]:='close';v[3,2]:='shut';v[3,3]:='fasten';v[3,4]:='connect'; + v[3,5]:='hook'; +v[4,1]:='crawl ne';v[4,2]:='duck ne';v[4,3]:='crawl northea'; + v[4,4]:='climb ne'; +v[5,1]:='crawl sw';v[5,2]:='duck sw';v[5,3]:='crawl southwe'; + v[5,4]:='climb sw'; +v[6,1]:='cut';v[6,2]:='slice';v[6,3]:='cut out';v[6,4]:='saw'; + v[6,5]:='chop'; +v[7,1]:='dig';v[7,2]:='dig in';v[7,3]:='shovel'; +v[8,1]:='drink';v[8,2]:='drink from';v[8,3]:='drink some'; + v[8,4]:='drink lot'; +v[9,1]:='drop';v[9,2]:='get rid';v[9,3]:='put down'; +v[10,1]:='eat';v[10,2]:='swallow'; +v[11,1]:='examine';v[11,2]:='ex';v[11,3]:='search'; + v[11,4]:='read';v[11,5]:='look at'; +v[12,1]:='find';v[12,2]:='look for';v[12,3]:='where is';v[12,4]:='check'; + v[12,5]:='chech for'; +v[13,1]:='repair';v[13,2]:='fix'; +v[14,1]:='get';v[14,2]:='take';v[14,3]:='grab';v[14,4]:='steal'; + v[14,5]:='pick up'; +v[15,1]:='give';v[15,2]:='offer';v[15,3]:='show';v[15,4]:='pay'; + v[15,5]:='give away'; +end; +overlay procedure Assign2; +begin +v[16,1]:='help';v[16,2]:='pray'; +v[17,1]:='hit';v[17,2]:='punch';v[17,3]:='knock';v[17,4]:='break'; + v[17,5]:='destroy'; +v[18,1]:='invento';v[18,2]:='i'; +v[19,1]:='jump';v[19,2]:='jump onto';v[19,3]:='jump on';v[19,4]:='jump off'; + v[19,5]:='jump in'; +v[20,1]:='launch';v[20,2]:='sail';v[20,3]:='row'; +v[22,1]:='look';v[22,2]:='l';v[22,3]:='look around';v[22,4]:='ex area'; +v[23,1]:='look above';v[23,2]:='ex on';v[23,3]:='look on'; + v[23,4]:='ex top';v[23,5]:='ex above'; +v[24,1]:='look in';v[24,2]:='ex in';v[24,3]:='look down';v[24,4]:='look up'; + v[24,5]:='search in '; +v[25,1]:='look under';v[25,2]:='ex underne';v[25,3]:='ex under'; + v[25,4]:='look underne';v[25,5]:='ex below'; +v[21,1]:='burn';v[21,2]:='ignite';v[21,3]:='light'; +v[26,1]:='open';v[26,2]:='unfaste';v[26,3]:='peel';v[26,4]:='hatch'; + v[26,5]:='untie'; +v[27,1]:='pull';v[27,2]:='flick';v[27,3]:='pull on';v[27,4]:='flip'; + v[27,5]:='flip on'; +v[28,1]:='push';v[28,2]:='move';v[28,3]:='press';v[28,4]:='turn on'; + v[28,5]:='turn off'; +v[29,1]:='put';v[29,2]:='pour';v[29,3]:='lay';v[29,4]:='fill'; + v[29,5]:='insert'; +v[30,1]:='reach';v[30,2]:='reach in';v[30,3]:='feel in'; +v[31,1]:='say';v[31,2]:='yell';v[31,3]:='shout';v[31,4]:='compute'; + v[31,5]:='think'; +end; +overlay procedure Assign3; +begin +v[32,1]:='shoot';v[32,2]:='blast';v[32,3]:='fire at';v[32,4]:='fire'; + v[32,5]:='shoot at'; +v[33,1]:='sit';v[33,2]:='sit in';v[33,3]:='get in';v[33,4]:='sit down'; + v[33,5]:='sit on'; +v[34,1]:='sleep';v[34,2]:='lie down';v[34,3]:='sleep on';v[34,4]:='sleep in'; +v[35,1]:='stand';v[35,2]:='stand up';v[35,3]:='get up';v[35,4]:='stand in'; +v[36,1]:='throw';v[36,2]:='toss'; +v[37,1]:='tie';v[37,2]:='hook';v[37,3]:='wrap'; +v[38,1]:='touch';v[38,2]:='feel';v[38,3]:='touch in';v[38,4]:='rub'; +v[39,1]:='turn';v[39,2]:='rotate';v[39,3]:='set'; +v[40,1]:='unlock'; +v[41,1]:='wait';v[41,2]:='z';v[41,3]:='rest'; +v[42,1]:='wear';v[42,2]:='put on'; +v[43,1]:='north';v[43,2]:='n';v[43,3]:='fore';v[43,4]:='f';v[43,5]:='across'; +v[44,1]:='south';v[44,2]:='s';v[44,3]:='aft';v[44,4]:='a'; +v[45,1]:='east';v[45,2]:='e';v[45,3]:='starboa';v[45,4]:='st'; +v[46,1]:='west';v[46,2]:='w';v[46,3]:='port';v[46,4]:='p'; +v[47,1]:='north east';v[47,2]:='ne';v[47,3]:='northea'; +v[48,1]:='north west';v[48,2]:='nw';v[48,3]:='northwe'; +v[49,1]:='south east';v[49,2]:='se';v[49,3]:='southea'; +v[50,1]:='south west';v[50,2]:='sw';v[50,3]:='southwe'; +v[51,1]:='up';v[51,2]:='u';v[51,3]:='climb up';v[51,4]:='climb u'; +v[52,1]:='down';v[52,2]:='d';v[52,3]:='climb down';v[52,4]:='climb d'; + v[52,5]:='lower'; +v[53,1]:='type';v[53,2]:='type in'; +v[54,1]:='quit';v[54,2]:='stop';v[54,3]:='give up';v[54,4]:='i quit'; +v[55,1]:='take off';v[55,2]:='remove'; +v[56,1]:='shake';v[56,2]:='bogie';v[56,3]:='dance'; +end; +overlay procedure Assign4; +begin +v[57,1]:='enter';v[57,2]:='in';v[57,3]:='land in';v[57,4]:='land on'; + v[57,5]:='land'; +v[58,1]:='exit';v[58,2]:='out';v[58,3]:='leave';v[58,4]:='retreat'; + v[58,5]:='escape'; +v[59,1]:='diagnos'; +v[60,1]:='look behind';v[60,2]:='ex behind';v[60,3]:='examine behind'; + v[60,4]:='ex beside';v[60,5]:='look beside'; +v[61,1]:='restart';v[61,2]:='let';v[61,3]:='fall from';v[61,4]:='drop from'; + v[61,5]:='fall'; +v[62,1]:='score';v[62,2]:='rank'; +v[63,1]:='creatur';v[63,2]:='alien monster';v[63,3]:='monster'; + v[63,4]:='alien creatur'; +v[64,1]:='save'; +v[65,1]:='restore';v[65,2]:='resume'; + + {NOUN LIST: GROUPS ALL OBJECTS} + +for x:= 0 to NMax do for y:= 1 to 5 do n[x,y]:=Q; +n[0,1]:='alien';n[0,2]:='dead alien';n[0,3]:='body';n[0,4]:='alien body'; +n[1,1]:='all';n[1,2]:='everyth';n[1,3]:='object';n[1,4]:='objects'; +n[2,1]:='banana';n[2,2]:='food'; +n[3,1]:='bat';n[3,2]:='bats'; +n[4,1]:='bed';n[4,2]:='bunk';n[4,3]:='beds';n[4,4]:='bunks'; +n[5,1]:='blue button';n[5,2]:='blue'; +n[6,1]:='boat';n[6,2]:='life boat';n[6,3]:='titanic';n[6,4]:='lifeboa'; + n[6,5]:='ship'; +end; +overlay procedure Assign5; +begin +n[7,1]:='bottle';n[7,2]:='brown bottle';n[7,3]:='brown'; +n[8,1]:='black box';n[8,2]:='box';n[8,3]:='black';n[8,4]:='switch'; + n[8,5]:='box switch'; +n[9,1]:='building';n[9,2]:='buildin';n[9,3]:='tower';n[9,4]:='towers'; +n[10,1]:='button';n[10,2]:='buttons'; +n[11,1]:='cabinet';n[11,2]:='file';n[11,3]:='blue cabinet'; +n[12,1]:='cages';n[12,2]:='bars'; +n[13,1]:='coin';n[13,2]:='quarter';n[13,3]:='25';n[13,4]:='money'; +n[14,1]:='containers';n[14,2]:='crate';n[14,3]:='crates';n[14,4]:='cargo'; + n[14,5]:='contain'; +n[15,1]:='ceiling';n[15,2]:='roof'; +n[16,1]:='chair';n[16,2]:='time chair';n[16,3]:='time';n[16,4]:='seat'; + n[16,5]:='metal chair'; +n[17,1]:='chasm';n[17,2]:='canyon'; +n[18,1]:='city';n[18,2]:='floatin city';n[18,3]:='floatin';n[18,4]:='town'; +n[19,1]:='clouds';n[19,2]:='cloud'; +n[20,1]:='computer';n[20,2]:='termina';n[20,3]:='compute';n[20,4]:='typewri'; +n[21,1]:='controls';n[21,2]:='machine';n[21,3]:='equipme';n[21,4]:='devices'; + n[21,5]:='control'; +n[22,1]:='crater';n[22,2]:='pit';n[22,3]:='stove'; +n[23,1]:='creature';n[23,2]:='creatur';n[23,3]:='monster'; + n[23,4]:='alien creatur';n[23,5]:='it'; +n[24,1]:='silver dial';n[24,2]:='day dial';n[24,3]:='day';n[24,4]:='silver'; +n[25,1]:='dial';n[25,2]:='knob';n[25,3]:='dials';n[25,4]:='knobs'; +n[26,1]:='door';n[26,2]:='hatch';n[26,3]:='saucer hatch';n[26,4]:='ship door'; + n[26,5]:='sliding'; +n[27,1]:='piece of wire';n[27,2]:='wire';n[27,3]:='mangled wire'; + n[27,4]:='mangled';n[27,5]:='piece wire'; +n[28,1]:='egg';n[28,2]:='eggs'; +n[29,1]:='flashlight';n[29,2]:='light';n[29,3]:='flashli';n[29,4]:='hook'; + n[29,5]:='ring'; +end; +overlay procedure Assign6; +begin +n[30,1]:='ground';n[30,2]:='floor';n[30,3]:='earth';n[30,4]:='deck'; + n[30,5]:='bay'; +n[31,1]:='trees';n[31,2]:='tree';n[31,3]:='forest'; +n[32,1]:='piece of fur';n[32,2]:='fur';n[32,3]:='piece fur';n[32,4]:='piece'; + n[32,5]:='blue fur'; +n[33,1]:='green button';n[33,2]:='green'; +n[34,1]:='gun';n[34,2]:='ray gun';n[34,3]:='gauge';n[34,4]:='orange'; + n[34,5]:='laser gun'; +n[35,1]:='safety harness';n[35,2]:='safety';n[35,3]:='belt'; + n[35,4]:='harness';n[35,5]:='strap'; +n[36,1]:='ice';n[36,2]:='ocean bottom';n[36,3]:='bottom';n[36,4]:='ocean'; +n[37,1]:='debris';n[37,2]:='trash';n[37,3]:='rubble';n[37,4]:='wood'; +n[38,1]:='numeric keypad';n[38,2]:='keypad';n[38,3]:='numeric'; + n[38,4]:='numbers'; +n[39,1]:='survival kit';n[39,2]:='kit';n[39,3]:='surviva';n[39,4]:='red kit'; + n[39,5]:='surviva kit'; +n[40,1]:='knife';n[40,2]:='blade'; +n[41,1]:='concrete';n[41,2]:='concrete wall';n[43,3]:='cement';n[41,4]:='pad'; + n[41,5]:='landing pad'; +n[42,1]:='dirt';n[42,2]:='dust';n[42,3]:='desert';n[42,4]:='sand'; + n[42,5]:='landing bay'; +n[43,1]:='cage';n[43,2]:='large';n[43,3]:='large cage'; +n[44,1]:='left hand';n[44,2]:='left';n[44,3]:='hand'; +n[45,1]:='rusty lock';n[45,2]:='lock';n[45,3]:='rusty'; +n[46,1]:='message';n[46,2]:='chisele';n[46,3]:='writing';n[46,4]:='marking'; + n[46,5]:='chisele marking'; +n[47,1]:='mud';n[47,2]:='sloppy';n[47,3]:='slop'; +n[48,1]:='chain';n[48,2]:='thick chain';n[48,3]:='metal chain'; +n[49,1]:='panel';n[49,2]:='compart'; +n[50,1]:='path';n[50,2]:='passage';n[50,3]:='tunnel';n[50,4]:='road'; + n[50,5]:='tubes'; +n[51,1]:='banana peel';n[51,2]:='peel';n[51,3]:='skin'; +n[52,1]:='glowing pill';n[52,2]:='pill';n[52,3]:='glowing'; +n[53,1]:='rail';n[53,2]:='railing';n[53,3]:='wooden';n[53,4]:='wooden rail'; +n[54,1]:='reactor';n[54,2]:='core'; +n[55,1]:='red button';n[55,2]:='red';n[55,3]:='lower door';n[55,4]:='mangled'; + n[55,5]:='mangled door'; +n[56,1]:='right arm';n[56,2]:='right';n[56,3]:='arm';n[56,4]:='arms'; +end; +overlay procedure Assign7; +begin +n[57,1]:='rope';n[57,2]:='thick';n[57,3]:='thick rope'; +n[58,1]:='screen';n[58,2]:='monitor';n[58,3]:='tv';n[58,4]:='screens'; +n[59,1]:='bench';n[59,2]:='chairs';n[59,3]:='seats';n[59,4]:='benches'; + n[59,5]:='metalli'; +n[60,1]:='player';n[60,2]:='self';n[60,3]:='waist';n[60,4]:='me'; + n[60,5]:='myself'; +n[61,1]:='shelf';n[61,2]:='shelves'; +n[62,1]:='reactor shield';n[62,2]:='barrier';n[62,3]:='shield'; + n[62,4]:='plate';n[62,5]:='radiati shield'; +n[63,1]:='shiny key';n[63,2]:='shiny';n[63,3]:='key'; +n[64,1]:='alien saucer';n[64,2]:='alien ship';n[64,3]:='hull'; + n[64,4]:='saucer'; +n[65,1]:='shuttle';n[65,2]:='car';n[65,3]:='vehicle';n[65,4]:='engine'; +n[66,1]:='sign';n[66,2]:='note';n[66,3]:='red sign'; +n[67,1]:='bones';n[67,2]:='bone';n[67,3]:='skeleto';n[67,4]:='animals'; + n[67,5]:='remains'; +n[68,1]:='slot';n[68,2]:='opening';n[68,3]:='hole';n[68,4]:='key hole'; + n[68,5]:='keyhole'; +n[69,1]:='steps';n[69,2]:='stair';n[69,3]:='stairs';n[69,4]:='ladder'; + n[69,5]:='step'; +n[70,1]:='metal stake';n[70,2]:='stake';n[70,3]:='metal';n[70,4]:='pole'; + n[70,5]:='rod'; +n[71,1]:='rock feature';n[71,2]:='stalagt'; +n[72,1]:='strange wall';n[72,2]:='strange';n[72,3]:='hexagon'; + n[72,4]:='shapes'; +end; +overlay procedure Assign8; +begin +n[73,1]:='water';n[73,2]:='river';n[73,3]:='stream';n[73,4]:='gusher'; + n[73,5]:='lake'; +n[74,1]:='alien suit';n[74,2]:='suit';n[74,3]:='space suit'; + n[74,4]:='uniform'; +n[75,1]:='table';n[75,2]:='tables'; +n[76,1]:='tan button';n[76,2]:='tan'; +n[77,1]:='tape';n[77,2]:='future';n[77,3]:='future tape'; +n[78,1]:='healing tube';n[78,2]:='tube';n[78,3]:='healing'; + n[78,4]:='glass tube';n[78,5]:='glass'; +n[79,1]:='walls';n[79,2]:='wall';n[79,3]:='north wall'; + n[79,4]:='east wall';n[79,5]:='west wall'; +n[80,1]:='waterfall';n[80,2]:='waterfa'; +n[81,1]:='white button';n[81,2]:='white'; +n[82,1]:='gold dial';n[82,2]:='year';n[82,3]:='gold';n[82,4]:='year dial'; +n[83,1]:='slime';n[83,2]:='jelly'; +n[84,1]:='vent';n[84,2]:='vents'; +n[85,1]:='lamp'; +n[86,1]:='microphone';n[86,2]:='mic';n[86,3]:='speaker';n[86,4]:='microph'; +n[87,1]:='bridge';n[87,2]:='wooden bridge';n[87,3]:='wooden'; +n[88,1]:='beams';n[88,2]:='orange beams';n[88,3]:='beam'; + n[88,4]:='electri';n[88,5]:='orange'; +n[89,1]:='helmet';n[89,2]:='control helmet';n[89,3]:='hat'; +end; +{====================================END======================================} + \ No newline at end of file -- 2.31.1