From 6049ee038df78ae252d99c62f8c31f51ddefea5e Mon Sep 17 00:00:00 2001 From: Jason Self Date: Sat, 10 May 2014 14:01:58 -0700 Subject: [PATCH] Modifying Beyond The Titanic to compile with the Free Pascal compiler and run on modern systems. Changes are licensed under the GNU Affero General Public License version 3 or any later version. Adding copy of the AGPL and build instructions. --- BUILD | 30 + agpl-3.0.txt | 661 ++++++++ src/ADPARSER.PAS | 62 +- src/BEYOND.PAS | 3885 +++++++++++++++++++++++----------------------- src/COMMANDS.PAS | 1361 ++++++++-------- src/OBJECTS.PAS | 246 +-- src/WORDLIST.PAS | 588 +++---- 7 files changed, 3874 insertions(+), 2959 deletions(-) create mode 100644 BUILD create mode 100644 agpl-3.0.txt 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 + +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. + 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. + + + Copyright (C) + + 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 . + +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 +. 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 } +{ } +{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 } +{ } +{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 } +{ } +{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 } +{ } +{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 } +{ } +{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======================================} -- 2.31.1