Add Templeng.
This commit is contained in:
parent
107c10ef83
commit
00de354f28
5 changed files with 360 additions and 0 deletions
128
TEMPLENG/LICENSE.MD
Normal file
128
TEMPLENG/LICENSE.MD
Normal 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
47
TEMPLENG/README.MD
Normal 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
BIN
TEMPLENG/TEMPLE.DAT
Normal file
Binary file not shown.
179
TEMPLENG/TEMPLENG.ASM
Normal file
179
TEMPLENG/TEMPLENG.ASM
Normal 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:
|
6
make.sh
6
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 ..
|
||||
|
|
Loading…
Reference in a new issue