aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD30
-rw-r--r--agpl-3.0.txt661
-rw-r--r--src/ADPARSER.PAS62
-rw-r--r--src/BEYOND.PAS3885
-rw-r--r--src/COMMANDS.PAS1361
-rw-r--r--src/OBJECTS.PAS246
-rw-r--r--src/WORDLIST.PAS588
7 files changed, 3874 insertions, 2959 deletions
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..0f6fd95
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,30 @@
+In order to compile this game you need a Pascal compiler. The Free Pascal
+Compiler works: http://freepascal.org/
+
+Your GNU/Linux distro may already have it packaged. In the Trisquel GNU/Linux
+distro for example: sudo apt-get install fpc
+
+To compile it then run:
+fpc src/BEYOND.PAS
+
+The binary will be named BEYOND and stored in the src directory.
+
+--
+Copyright (C) 2014 Jason Self <j@jxself.org>
+
+This file is free software: you may copy, redistribute and/or modify it
+under the terms of the GNU Affero General Public License as published by the
+Free Software Foundation, either version 3 of the License, or (at your
+option) any later version.
+
+This file 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 Affero General Public License for more
+details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, see https://gnu.org/licenses or write to:
+ Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor
+ Boston, MA 02110-1301
+ USA
diff --git a/agpl-3.0.txt b/agpl-3.0.txt
new file mode 100644
index 0000000..dba13ed
--- /dev/null
+++ b/agpl-3.0.txt
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ 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
+them 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.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero 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 that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ 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
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
diff --git a/src/ADPARSER.PAS b/src/ADPARSER.PAS
index e3162d4..863dca1 100644
--- a/src/ADPARSER.PAS
+++ b/src/ADPARSER.PAS
@@ -1,21 +1,46 @@
{//-------------------------------------------------------------------------}
{/* }
+{Copyright (C) 2014 Jason Self <j@jxself.org> }
+{ }
+{This file is free software: you may copy, redistribute and/or modify it }
+{under the terms of the GNU Affero General Public License as published by }
+{the Free Software Foundation, either version 3 of the License, or (at your }
+{option) any later version. }
+{ }
+{This file 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 Affero General Public License}
+{for more details. }
+{ }
+{You should have received a copy of the GNU Affero General Public License }
+{along with this program; if not, see https://gnu.org/licenses or write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
+{ }
+{This file incorporates work covered by the following copyright and }
+{permission notice: }
+{ }
{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 3 }
-{of the License, or (at your option) any later version. }
+{This file is part of Beyond The Titanic. Beyond The Titanic 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 3 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. }
+{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.}
+{along with this program; if not, write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
{ }
{Original Source: 1990 Scott Miller }
{Prepared for public release: 03/19/09 - Joe Siegler, Apogee Software, Ltd. }
@@ -31,17 +56,25 @@
procedure RR(RoomNum : integer);
begin FlagSA:='s';
- seek(rooms1,RoomNum);seek(rooms2,RoomNum);
- READ(rooms1,text1);READ(rooms2,text2);
- writeln(text1,text2);
+ reset(rooms1);
+ seek(rooms1,RoomNum);
+ reset(rooms2);
+ seek(rooms2,RoomNum);
+ READ(rooms1,text1);
+ READ(rooms2,text2);
+ {window(1,1,25,80);}
+ writeln(text1,text2);
end; {of RoomRead}
procedure RS(RoomNum : integer);
begin
+{ writeln('RS'); }
FlagSA:='s';
- seek(Special1,RoomNum);seek(Special2,RoomNum);
- READ(Special1,text1);READ(Special2,text2);
+ seek(Special1,RoomNum);
+ seek(Special2,RoomNum);
+ READ(Special1,text1);
+ READ(Special2,text2);
writeln(text1,text2);
end; {of SpecialRead}
@@ -356,4 +389,3 @@ procedure Check(var SepWord : Str14);
end; {of Check}
{***************************** END OF ADPARSER ******************************}
-
diff --git a/src/BEYOND.PAS b/src/BEYOND.PAS
index bd2b4f7..6908e19 100644
--- a/src/BEYOND.PAS
+++ b/src/BEYOND.PAS
@@ -1,1905 +1,1980 @@
-{//-------------------------------------------------------------------------}
-{/* }
-{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 3 }
-{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}
-
+{$mode objfpc}
+
+{//-------------------------------------------------------------------------}
+{/* }
+{Copyright (C) 2014 Jason Self <j@jxself.org> }
+{ }
+{This file is free software: you may copy, redistribute and/or modify it }
+{under the terms of the GNU Affero General Public License as published by }
+{the Free Software Foundation, either version 3 of the License, or (at your }
+{option) any later version. }
+{ }
+{This file 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 Affero General Public License}
+{for more details. }
+{ }
+{You should have received a copy of the GNU Affero General Public License }
+{along with this program; if not, see https://gnu.org/licenses or write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
+{ }
+{This file incorporates work covered by the following copyright and }
+{permission notice: }
+{ }
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd. }
+{ }
+{This file is part of Beyond The Titanic. Beyond The Titanic 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 3 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: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ 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 }
+
+uses crt,sysutils;
+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;
+
+
+
+{$I AdParser.PAS}{ <--- Loads in sentence logic. <*********************}
+
+
+{$I Commands.PAS}{ <--- Loads in misc. procedures. <*********************}
+
+
+{$I WordList.PAS }{ <----- CALLS UP THE VERBS & NOUNS <*******************}
+
+
+{$I Objects.PAS }{ <----- CALLS UP THE VERBS & NOUNS <*******************}
+
+
+{===================}
+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}
+{-------------------}
+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}
+{-------------------}
+ 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}
+{-------------------}
+ 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)? ');
+ flag:=ReadKey;if(upcase(flag)<>'N')then SAVE else writeln('No.');
+ write('Are you still sure you want to quit? ');
+ flag:=ReadKey;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}
+{-------------------}
+ 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}
+{-------------------}
+ 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}
+{-------------------}
+ 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}
+{-------------------}
+ 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}
+{-------------------}
+ 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}
+{-------------------}
+ 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);flag:=ReadKey;
+ 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}
+{===================}
+ 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}
+{-------------------}
+ 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,44,45,47..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..47,49..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..49,51..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}
+{-------------------}
+ 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..45,47,49..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}
+{-------------------}
+ 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,45,47,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}
+{-------------------}
+ 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}
+{-------------------}
+ 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..1932,1934..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}
+{-------------------}
+ 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..42,44,47,49,50-56,59..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}
+{-------------------}
+ 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;
+ 44,47..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,47..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,44,47..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,44,47..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,44,46..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}
+{-------------------}
+ 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}
+{-------------------}
+ 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,44,46..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,48,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);
+ 47,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}
+{-------------------}
+ 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,44,46,48,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,44,45,47,49: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}
+{-------------------}
+ 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..46,48..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}
+{-------------------}
+ 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}
+{-------------------}
+ 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);
+ 12 :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(20,1);
+ writeln(Sc,' ');
+
+ gotoxy(35-(length(Loc)div 2),1);
+ writeln(' ',Loc,' ');
+
+
+ gotoxy(2,24);
+ 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;
+
+
+
+ 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}
diff --git a/src/COMMANDS.PAS b/src/COMMANDS.PAS
index 42e4e88..c201684 100644
--- a/src/COMMANDS.PAS
+++ b/src/COMMANDS.PAS
@@ -1,646 +1,715 @@
-{//-------------------------------------------------------------------------}
-{/* }
-{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
+{//-------------------------------------------------------------------------}
+{/* }
+{Copyright (C) 2014 Jason Self <j@jxself.org> }
+{ }
+{This file is free software: you may copy, redistribute and/or modify it }
+{under the terms of the GNU Affero General Public License as published by }
+{the Free Software Foundation, either version 3 of the License, or (at your }
+{option) any later version. }
+{ }
+{This file 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 Affero General Public License}
+{for more details. }
+{ }
+{You should have received a copy of the GNU Affero General Public License }
+{along with this program; if not, see https://gnu.org/licenses or write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
+{ }
+{This file incorporates work covered by the following copyright and }
+{permission notice: }
+{ }
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd. }
+{ }
+{This file is part of Beyond The Titanic. Beyond The Titanic 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 3 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: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ 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;
+
+procedure Crazy;
+ begin SA;
+ if(random(2)=1)then RL(107+random(7))else RL(300+random(6));
+ end;
+
+procedure DEAD;
+ var FileName : file;
+ var x,b,c:Integer;
+ 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? ');
+ flag:=ReadKey;
+ 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;
+
+procedure Home;
+ var b,c,x,y,o:Integer;
+ 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;
+
+procedure Say(o : integer; p : str14);
+ begin
+ writeln('The ',n[o,1],' is already ',p,'.'); SA
+ end;
+
+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;
+
+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;
+
+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}
+
+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...)');flag:=ReadKey;
+ 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.');
+ flag:=ReadKey;
+ 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...)');flag:=ReadKey;
+ 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}
+
+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...)');flag:=ReadKey;
+ 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.');
+ flag:=ReadKey;
+ 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...)');flag:=ReadKey;
+ 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...)');
+ flag:=ReadKey;
+ 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}
+
+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;
+
+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}
+
+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,8,11..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;
+
+procedure Initialize;
+ var S: string;
+
+ 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);
+ flag:='Y'; 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);
+ flag:='2';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...');{flag:=ReadKey;}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 flag:=ReadKey;
+ write('Press any key to start the game...');
+ {flag:=ReadKey;}
+ while keypressed do flag:=ReadKey;
+ clrscr;
+ { ************************ }
+ window(1,2,80,25);
+ gotoxy(1,1);
+ 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;
+assignfile(rooms1,'ROOMS1');
+assignfile(rooms2,'ROOMS2');
+assignfile(special1,'SPECIAL1');
+assignfile(special2,'SPECIAL2');
+assignfile(line1,'LINE');
+
+getdir(0,S);
+chdir(S);
+{Writeln ('Current directory is : ',S);}
+
+
+{$I+}
+
+{filemode:=1;}
+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 *****************************}
diff --git a/src/OBJECTS.PAS b/src/OBJECTS.PAS
index 9606508..b5bb4da 100644
--- a/src/OBJECTS.PAS
+++ b/src/OBJECTS.PAS
@@ -1,111 +1,135 @@
-{//-------------------------------------------------------------------------}
-{/* }
-{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 3 }
-{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 *******************************}
-
+{//-------------------------------------------------------------------------}
+{/* }
+{Copyright (C) 2014 Jason Self <j@jxself.org> }
+{ }
+{This file is free software: you may copy, redistribute and/or modify it }
+{under the terms of the GNU Affero General Public License as published by }
+{the Free Software Foundation, either version 3 of the License, or (at your }
+{option) any later version. }
+{ }
+{This file 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 Affero General Public License}
+{for more details. }
+{ }
+{You should have received a copy of the GNU Affero General Public License }
+{along with this program; if not, see https://gnu.org/licenses or write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
+{ }
+{This file incorporates work covered by the following copyright and }
+{permission notice: }
+{ }
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd. }
+{ }
+{This file is part of Beyond The Titanic. Beyond The Titanic 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 3 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: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ 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 *}
+{*****************************************************************************}
+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,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 *******************************}
diff --git a/src/WORDLIST.PAS b/src/WORDLIST.PAS
index 5beddce..6b54714 100644
--- a/src/WORDLIST.PAS
+++ b/src/WORDLIST.PAS
@@ -1,282 +1,306 @@
-{//-------------------------------------------------------------------------}
-{/* }
-{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 3 }
-{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======================================}
-
+{//-------------------------------------------------------------------------}
+{/* }
+{Copyright (C) 2014 Jason Self <j@jxself.org> }
+{ }
+{This file is free software: you may copy, redistribute and/or modify it }
+{under the terms of the GNU Affero General Public License as published by }
+{the Free Software Foundation, either version 3 of the License, or (at your }
+{option) any later version. }
+{ }
+{This file 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 Affero General Public License}
+{for more details. }
+{ }
+{You should have received a copy of the GNU Affero General Public License }
+{along with this program; if not, see https://gnu.org/licenses or write to: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ USA }
+{ }
+{This file incorporates work covered by the following copyright and }
+{permission notice: }
+{ }
+{Copyright (C) 1990, 2009 - Apogee Software, Ltd. }
+{ }
+{This file is part of Beyond The Titanic. Beyond The Titanic 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 3 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: }
+{ Free Software Foundation, Inc. }
+{ 51 Franklin Street, Fifth Floor }
+{ Boston, MA 02110-1301 }
+{ 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}
+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;
+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;
+ 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;
+ 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;
+ 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;
+ 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;
+ 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;
+ 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======================================}
bgstack15