Compare commits

...

1 Commits

Author SHA1 Message Date
CrazyEttin 00de354f28 Add Templeng. 2021-07-12 02:36:23 +03:00
5 changed files with 360 additions and 0 deletions

128
TEMPLENG/LICENSE.MD Normal file
View File

@ -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
<http://creativecommons.org/publicdomain/zero/1.0/>

47
TEMPLENG/README.MD Normal file
View File

@ -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.

BIN
TEMPLENG/TEMPLE.DAT Normal file

Binary file not shown.

179
TEMPLENG/TEMPLENG.ASM Normal file
View File

@ -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:

View File

@ -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 ..