From 7ec20a26e2335b44006ff5389ff6f9b8f5e0430e Mon Sep 17 00:00:00 2001 From: CrazyEttin <> Date: Sun, 11 Jul 2021 23:14:47 +0300 Subject: [PATCH] Add Templeng. --- TEMPLENG/LICENSE.MD | 128 ++++++++++++++++++++++++++++++ TEMPLENG/README.MD | 47 +++++++++++ TEMPLENG/TEMPLE.DAT | Bin 0 -> 6536 bytes TEMPLENG/TEMPLENG.ASM | 179 ++++++++++++++++++++++++++++++++++++++++++ make.sh | 6 ++ 5 files changed, 360 insertions(+) create mode 100644 TEMPLENG/LICENSE.MD create mode 100644 TEMPLENG/README.MD create mode 100644 TEMPLENG/TEMPLE.DAT create mode 100644 TEMPLENG/TEMPLENG.ASM diff --git a/TEMPLENG/LICENSE.MD b/TEMPLENG/LICENSE.MD new file mode 100644 index 0000000..a1b4d46 --- /dev/null +++ b/TEMPLENG/LICENSE.MD @@ -0,0 +1,128 @@ +CC0 1.0 Universal license +========================= + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work +of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without +fear of later claims of infringement build upon, modify, incorporate in +other works, reuse and redistribute as freely as possible in any form +whatsoever and for any purposes, including without limitation commercial +purposes. These owners may contribute to the Commons to promote the +ideal of a free culture and the further production of creative, cultural +and scientific works, or to gain reputation or greater distribution for +their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or +she is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under +its terms, with knowledge of his or her Copyright and Related Rights in +the Work and the meaning and intended legal effect of CC0 on those +rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + + ii. moral rights retained by the original author(s) and/or + performer(s); + + iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + + v. rights protecting the extraction, dissemination, use and reuse of + data in a Work; + + vi. database rights (such as those arising under Directive 96/9/EC of + the European Parliament and of the Council of 11 March 1996 on the + legal protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and + + vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose +whatsoever, including without limitation commercial, advertising or +promotional purposes (the "Waiver"). Affirmer makes the Waiver for the +benefit of each member of the public at large and to the detriment of +Affirmer's heirs and successors, fully intending that such Waiver shall +not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of +the Work by the public as contemplated by Affirmer's express Statement +of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non +exclusive, irrevocable and unconditional license to exercise Affirmer's +Copyright and Related Rights in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose +whatsoever, including without limitation commercial, advertising or +promotional purposes (the "License"). The License shall be deemed +effective as of the date CC0 was applied by Affirmer to the Work. Should +any part of the License for any reason be judged legally invalid or +ineffective under applicable law, such partial invalidity or +ineffectiveness shall not invalidate the remainder of the License, and +in such case Affirmer hereby affirms that he or she will not (i) +exercise any of his or her remaining Copyright and Related Rights in the +Work or (ii) assert any associated claims and causes of action with +respect to the Work, in either case contrary to Affirmer's express +Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, + abandoned, surrendered, licensed or otherwise affected by this + document. + + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + + c. Affirmer disclaims responsibility for clearing rights of other + persons that may apply to the Work or any use thereof, including + without limitation any person's Copyright and Related Rights in the + Work. Further, Affirmer disclaims responsibility for obtaining any + necessary consents, permissions or other rights required for any use + of the Work. + + d. Affirmer understands and acknowledges that Creative Commons is not + a party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + +For more information, please see + diff --git a/TEMPLENG/README.MD b/TEMPLENG/README.MD new file mode 100644 index 0000000..3e1ed9c --- /dev/null +++ b/TEMPLENG/README.MD @@ -0,0 +1,47 @@ +TEMPLENG +======== + +TEMPLENG is a text adventure game engine based on an earlier, standalone +EttinOS port of In the Temple. + +Syntax: TEMPLENG DATAFILE.DAT + +Press any key other than escape to start the game or to return back to +the beginning after an ending, the corresponding number to choose an +option in a non-ending scene, or escape to quit the game. + +TEMPLE +------ + +Included in the package is TEMPLE, a TEMPLENG port of the web-based text +adventure game In the Temple by nortti. Its original readme is +reproduced here: + +A small game about a visit to a temple and the reasons for doing so. + +Can be played online at https://ahti.space/~nortti/in-the-temple/ or at +https://nortti.itch.io/in-the-temple + +The game is distributed under the Creative Commons Zero 1.0 Universal +license. + +The data files +-------------- + +A data file consists of an intro text ending in a null followed by any +number of scenes. See the included TEMPLE.DAT for an example. + +A scene begins with a start of heading (0x1) and consists of its ID, the +number of options it has, and the scene text, all ending in a null. The +ID of a scene consists of a string of numbers representing the choices +that lead to it, and can be between 2 and 255 characters long including +the null. The ID of the first scene is 0. The number of options can be +anything between 0 and 9, 0 indicating an ending. The options of a scene +must point to scenes placed after it in the data file. The scene text +should not exceed 24 lines or all of it won't fit on the screen at once. + +*** + +This package is part of EttinOS-extra, a collection of programs for +EttinOS, the git repository of which can be found at +https://ahti.space/git/crazyettin/EttinOS-extra. diff --git a/TEMPLENG/TEMPLE.DAT b/TEMPLENG/TEMPLE.DAT new file mode 100644 index 0000000000000000000000000000000000000000..42b8690d2bad2cb2b0f75f0327d1c4f3ded02d5b GIT binary patch literal 6536 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 S?U!9+5fMzCo)yXJ@c#i&4`Si~ literal 0 HcmV?d00001 diff --git a/TEMPLENG/TEMPLENG.ASM b/TEMPLENG/TEMPLENG.ASM new file mode 100644 index 0000000..0716f89 --- /dev/null +++ b/TEMPLENG/TEMPLENG.ASM @@ -0,0 +1,179 @@ +cpu 8086 +org 0x3000 + +;Set the stack +cli +mov sp, stack + 0x100 +sti + +;Check for an empty tail +;Check +cmp byte [si], 0x0 +jne extract +;Print an error message and abort if the tail is empty +mov si, errormsg +mov ah, 0x2 +int 0x21 +je done + +;Find the end of the data file name and add a null if needed +;Set DI at the tail +extract: +mov di, si +findend: +;Check for the string end +cmp byte [di], 0x0 +je load +;Check for a space +cmp byte [di], 0x20 +je addnull +inc di +jmp findend +;Add a null +addnull: +mov al, 0x0 +stosb + +;Load the data file +;Load +load: +mov bx, stack + 0x100 +mov ah, 0x0 +int 0x22 +;Check for errors +cmp al, 0x0 +jne done + +;Setup +start: +;Set SI to the beginning of the data file +mov si, stack + 0x100 +;Initialise the scene ID with zeroes and set DI at its beginning +mov di, sceneid +mov cx, 0xff +mov al, 0x0 +rep stosb +mov di, sceneid + +;Intro +;Print the intro +mov ah, 0x0 +int 0x21 +;Read any key to start +mov ah, 0x0 +int 0x16 +call readquit +;Set the ID of the first scene +mov al, "0" +stosb + +;Search for the current scene +searchscene: +lodsb +cmp al, 0x1 +je checkscene +jmp searchscene + +;Check for the current scene +;Set DI to the current scene id +checkscene: +mov di, sceneid +;Load the current characters +checkloop: +mov al, [si] +mov bl, [di] +;Compare the characters +cmp al, bl +jne searchscene +;Check for the string end +cmp al, 0x0 +je loadoptions +;Compare the next characters +inc si +inc di +jmp checkloop + +;Load the number of options to BL +loadoptions: +inc si +lodsb +mov bl, al + +;Print the scene +;Move SI to the beginning of the scene text +inc si +;Print the scene +mov ah, 0x0 +int 0x21 + +;Read the player choice +;Set DI at the options key +readchoice: +mov di, options +;Set the maximum number of options +mov cx, 0x9 +;Read a keypress +mov ah, 0x0 +int 0x16 +;Check for quitting +call readquit +;Check for an ending scene +cmp bl, "0" +je ending +;Compare the keypress to the key +cmpchoice: +cmp al, [di] +je setscene +cmp bl, [di] +je readchoice +inc di +loop cmpchoice +jmp readchoice + +;Set the next scene +;Find the end of the current scene id +setscene: +mov di, sceneid +findidend: +cmp byte [di], 0x0 +je addoption +inc di +jmp findidend +;Add the chosen option +addoption: +stosb +;Go to the next scene +jmp searchscene + +ending: +mov si, crlf +mov ah, 0x0 +int 0x21 +jmp start + +;Return to the system +done: +int 0x20 + +;Data +errormsg db "File not found", 0x0 +sceneid times 0xff db 0x0 +options db "123456789" +crlf db 0xd, 0xa, 0x0 + +;*** + +;Quit the game +readquit: + +;Check for keypress escape +cmp al, 0x1b +je done + +;Return +ret + +;*** + +;Stack +stack: diff --git a/make.sh b/make.sh index 4328fea..c200260 100755 --- a/make.sh +++ b/make.sh @@ -24,3 +24,9 @@ nasm TEMPLE.ASM -f bin -o TEMPLE.BIN zip -r TEMPLE.ZIP TEMPLE.BIN TEMPLE.ASM README.MD LICENSE.MD 1>/dev/null mv TEMPLE.ZIP .. cd .. + +cd TEMPLENG/ +nasm TEMPLENG.ASM -f bin -o TEMPLENG.BIN +zip -r TEMPLENG.ZIP TEMPLENG.BIN TEMPLENG.ASM README.MD LICENSE.MD TEMPLE.DAT 1>/dev/null +mv TEMPLENG.ZIP .. +cd ..