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 0000000..42b8690 Binary files /dev/null and b/TEMPLENG/TEMPLE.DAT differ 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 ..