From 636c6430d710d7f9521099352bc4460cf4ef2473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Sun, 12 Jan 2020 23:52:52 +0200 Subject: [PATCH] First commit --- .gitignore | 4 ++ CC0 | 116 ++++++++++++++++++++++++++++++++++++ README | 4 ++ build.sh | 8 +++ clean.sh | 3 + generate.py | 83 ++++++++++++++++++++++++++ missing.sh | 9 +++ package.sh | 9 +++ scenes/do.text | 7 +++ scenes/give-coin.text | 13 ++++ scenes/give-comb.text | 12 ++++ scenes/give.text | 7 +++ scenes/iconoclasm.text | 16 +++++ scenes/index.text | 3 + scenes/prayer.text | 15 +++++ scenes/sacrifice-blood.text | 11 ++++ scenes/sacrifice-bread.text | 19 ++++++ scenes/sacrifice.text | 10 ++++ scenes/start.text | 11 ++++ scenes/take-bowl.text | 12 ++++ scenes/take-idol.text | 9 +++ scenes/take-knife.text | 20 +++++++ scenes/take.text | 8 +++ 23 files changed, 409 insertions(+) create mode 100644 .gitignore create mode 100644 CC0 create mode 100644 README create mode 100644 build.sh create mode 100644 clean.sh create mode 100644 generate.py create mode 100644 missing.sh create mode 100644 package.sh create mode 100644 scenes/do.text create mode 100644 scenes/give-coin.text create mode 100644 scenes/give-comb.text create mode 100644 scenes/give.text create mode 100644 scenes/iconoclasm.text create mode 100644 scenes/index.text create mode 100644 scenes/prayer.text create mode 100644 scenes/sacrifice-blood.text create mode 100644 scenes/sacrifice-bread.text create mode 100644 scenes/sacrifice.text create mode 100644 scenes/start.text create mode 100644 scenes/take-bowl.text create mode 100644 scenes/take-idol.text create mode 100644 scenes/take-knife.text create mode 100644 scenes/take.text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..386f4c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +in-the-temple/ +*.swp +*.zip +*.tar.gz diff --git a/CC0 b/CC0 new file mode 100644 index 0000000..670154e --- /dev/null +++ b/CC0 @@ -0,0 +1,116 @@ +CC0 1.0 Universal + +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/README b/README new file mode 100644 index 0000000..3846d8e --- /dev/null +++ b/README @@ -0,0 +1,4 @@ +A small game about a visit to a temple and the reasons for doing so. + +The game is distributed under the Creative Commons Zero 1.0 Universal +license. diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..7f32a49 --- /dev/null +++ b/build.sh @@ -0,0 +1,8 @@ +#!/bin/sh +mkdir -p in-the-temple +cd scenes +for i in * +do + echo "${i%.text}" + python3 ../generate.py 'In the Temple' "$i" > ../in-the-temple/"${i%.text}.html" +done diff --git a/clean.sh b/clean.sh new file mode 100644 index 0000000..ff17689 --- /dev/null +++ b/clean.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -rf in-the-temple/ +rm -f in-the-tempele.zip in-the-temple.tar.gz diff --git a/generate.py b/generate.py new file mode 100644 index 0000000..f08d57b --- /dev/null +++ b/generate.py @@ -0,0 +1,83 @@ +import html +import sys +import urllib.parse + +template = """ + + + + __title__ + + + +

__scene__

+ __description__ + __choices__ + +""" + +def generate_html(name, scene, description, choices): + # HTML escape the plain text fields + name = html.escape(name) + scene = html.escape(scene) + + # Create a list of paragraphs from the description array + description = ['

%s

' % html.escape(paragraph) for paragraph in description] + description = '\n'.join(description) + + # Generate a list of links from choices array + choices = ['
  • %s
  • ' % (urllib.parse.quote(target), text) for target, text in choices] + choices = '\n'.join(choices) + choices = '' % choices + + title = '%s - %s' % (name, scene) + return template.replace('__title__', title).replace('__scene__', scene).replace('__description__', description).replace('__choices__', choices) + +def parse_file(contents): + lines = contents.replace('\r\n', '\n').split('\n') + + scene = lines[0] + + description = [] + choices = [] + for line in lines[1:]: + if line[0:1] == '>': + # Choice + target, _, text = line[1:].strip().partition(' ') + choices.append((target, text)) + else: + description.append(line) + + description = '\n'.join(description).split('\n\n') + while '' in description: + description.remove('') + + return scene, description, choices + +def main(): + name = sys.argv[1] + + with open(sys.argv[2], 'r') as f: + contents = f.read() + + scene, description, choices = parse_file(contents) + + print(generate_html(name, scene, description, choices)) + +if __name__ == '__main__': + main() diff --git a/missing.sh b/missing.sh new file mode 100644 index 0000000..c08a110 --- /dev/null +++ b/missing.sh @@ -0,0 +1,9 @@ +#!/bin/sh +cd scenes +for i in * +do + for target in $(egrep '>' "$i" | sed -E 's/^> *([^ ]+) +.*$/\1/') + do + test -e "$target.text" || echo "$target" + done +done diff --git a/package.sh b/package.sh new file mode 100644 index 0000000..0ae616e --- /dev/null +++ b/package.sh @@ -0,0 +1,9 @@ +#!/bin/sh +if test ! -d in-the-temple +then + echo "You must run build.sh first" >&2 + exit 1 +fi + +zip -9 -r in-the-temple.zip in-the-temple +tar czvf in-the-temple.tar.gz in-the-temple diff --git a/scenes/do.text b/scenes/do.text new file mode 100644 index 0000000..7ea4c3b --- /dev/null +++ b/scenes/do.text @@ -0,0 +1,7 @@ +Doing + +Yes, it is finally time. You make sure that everything is just right, and + +> sacrifice take the knife +> iconoclasm raise your axe +> prayer kneel before the idol diff --git a/scenes/give-coin.text b/scenes/give-coin.text new file mode 100644 index 0000000..fce0052 --- /dev/null +++ b/scenes/give-coin.text @@ -0,0 +1,13 @@ +Giving a Coin + +You take out a silver coin from the pouch hanging from your belt. It +represents the work of several weeks as a cobbler. + +You take the coin and throw it to the fountain that is behind the idol, +where you hear it clink against other coins that have been deposited +previously. + +You turn back and walk through the curtains to the common side of the +temple, where other devout are waiting for their turn to enter the sanctum. + +> index Return back to the beginning diff --git a/scenes/give-comb.text b/scenes/give-comb.text new file mode 100644 index 0000000..bdcbab5 --- /dev/null +++ b/scenes/give-comb.text @@ -0,0 +1,12 @@ +Giving a Comb + +You hold a finely carved wooden comb in your hands. It is a comb you have +made yourself, the masterpiece that gave you full rights in the guild. You +are sacrificing not only its monetary value, but its value to you +personally. + +You place the comb next to the knife, say a few words asking Arattavesh to +accept your payment, and walk back to the door to the sanctum. A priest +sprinkles water on you, and closes the heavy door after you step outside. + +> index Return back to the beginning diff --git a/scenes/give.text b/scenes/give.text new file mode 100644 index 0000000..ad287ec --- /dev/null +++ b/scenes/give.text @@ -0,0 +1,7 @@ +Giving + +You have arrived to deposit a votive offering to Arattavesh for healing +your sickness over the winter. You intend to give + +> give-comb a wooden comb +> give-coin a silver coin diff --git a/scenes/iconoclasm.text b/scenes/iconoclasm.text new file mode 100644 index 0000000..41ac23d --- /dev/null +++ b/scenes/iconoclasm.text @@ -0,0 +1,16 @@ +Iconoclasm + +There is but one abomination in the eyes of gods bad enough to warrant a +death in the marshes. And that is the worship of earthly images in their +stead. + +You raise your axe and let it fall onto the head of the idol. There is a +crunching sound and you see the wood split, maggots crawling out of it. Of +course, of course. The idol is as rotten as the act of worshiping it. + +The heathen ways are over again, and the temple shall be cleansed. You +raise your arms and shout as loud as you can: "Witness me Arattavesh, for I +will cleanse your house of the ways of the Eluwing, and enact revenge on +those who have it thus defiled!" + +> index Return back to the beginning diff --git a/scenes/index.text b/scenes/index.text new file mode 100644 index 0000000..4fc2dc8 --- /dev/null +++ b/scenes/index.text @@ -0,0 +1,3 @@ +Index +This is a story of your visit to the temple of Arattavesh. +> start Click here to start diff --git a/scenes/prayer.text b/scenes/prayer.text new file mode 100644 index 0000000..94a7137 --- /dev/null +++ b/scenes/prayer.text @@ -0,0 +1,15 @@ +Prayer + +"You who will remain when I am gone + +To help my family in time of need + +To shield the eastern flank of this city + +To leave the graves of our ancestors safe + +To bring the flood as you have brought + +I ask you" + +> index Return back to the beginning diff --git a/scenes/sacrifice-blood.text b/scenes/sacrifice-blood.text new file mode 100644 index 0000000..37a3db9 --- /dev/null +++ b/scenes/sacrifice-blood.text @@ -0,0 +1,11 @@ +A Sacrifice of Blood + +It hurts a little but you do not care, as you let the droplets of blood +drip into the bowl. Just like mixing your blood with that of your sworn +sister cements your bond, so does giving it to your god. + +You are a fully fledged priest of Arattavesh, the one who rules behind the +waves and in the dark caverns of earth. You hurry to your new family who +are waiting at the foot of the mountain. + +> index Return back to the beginning diff --git a/scenes/sacrifice-bread.text b/scenes/sacrifice-bread.text new file mode 100644 index 0000000..23ff521 --- /dev/null +++ b/scenes/sacrifice-bread.text @@ -0,0 +1,19 @@ +A Sacrifice of Bread + +As Arattavesh gives you grain, you shall give her back. A slice of every +loaf made before the next new moon shall be hers, and the bakers will be +giving their share starting tomorrow. But this loaf is special, the first +loaf baked from new grain, and it is reserved for the junior priest of the +temple. Which is you. + +You know that you shall not be too stingy and cut only the skin. You also +know you have to be exact and not cut a too big of a slice off. But that is +no issue. You end up with a slice that is just right, and place it in the +bowl before the idol. + +After this is done, you lay the knife back down, and recite one of the old +hymns, too old for people to understand anymore. You feel that Arattavesh +is pleased in you as you walk up to the roof of the temple house and then +across to the end of the block. + +> index Return back to the beginning diff --git a/scenes/sacrifice.text b/scenes/sacrifice.text new file mode 100644 index 0000000..7547ee0 --- /dev/null +++ b/scenes/sacrifice.text @@ -0,0 +1,10 @@ +Making a Sacrifice + +You take the blade, and think of the long nights spent replaying the +formula of the sacrifice in your head. You've seen ones before, but never +this one, for it is one that a priest must do alone. + +You say the words, and cut + +> sacrifice-bread a loaf of bread +> sacrifice-blood your finger diff --git a/scenes/start.text b/scenes/start.text new file mode 100644 index 0000000..55acd0b --- /dev/null +++ b/scenes/start.text @@ -0,0 +1,11 @@ +Before the Idol + +You are in the back of the temple, before the idol of Arattavesh. It is a +well made wooden statue painted with gold and blue. + +In front of the statue there is an ornate knife and a plain wooden bowl. + +You have come here to the sanctum to +> give give something +> take take something +> do do something diff --git a/scenes/take-bowl.text b/scenes/take-bowl.text new file mode 100644 index 0000000..4b9dee5 --- /dev/null +++ b/scenes/take-bowl.text @@ -0,0 +1,12 @@ +Taking the Bowl + +The bowl you had offered just a week before is still here. You had left it +as a thanks of your husband's recovery, but now you husband is gone, your +fields are destroyed, and all this is the name of Arattavesh. + +If the gods shall curse you for breaching the holiness of the sanctum let +them, for you curse the gods too. You take that which you dedicated to +Arattavesh and quietly state "You have taken back your gift and so I +shall take back mine" before slipping back into the night. + +> index Return back to the beginning diff --git a/scenes/take-idol.text b/scenes/take-idol.text new file mode 100644 index 0000000..ff7d16a --- /dev/null +++ b/scenes/take-idol.text @@ -0,0 +1,9 @@ +Taking the Idol + +Here it is. The protector god of your village, taken by force when you were +but a small child. + +They call her Arattavesh, after the river, but you know better. As you lift +the idol you whisper: "Panglya, you shall be home soon." + +> index Return back to the beginning diff --git a/scenes/take-knife.text b/scenes/take-knife.text new file mode 100644 index 0000000..49f5041 --- /dev/null +++ b/scenes/take-knife.text @@ -0,0 +1,20 @@ +Taking the Knife + +The knife is very nicely made. You admire it for a small while, before +slipping it into the bag you carry around your shoulders. + +You aren't committing a sin, or if you are it's not a great one. The +chanter who lives in the main city has not yet come and completed the +dedication. The one who's knelt before the idol and left it here has merely +announced an intention to give it to their god so it's still theirs, and +they will not miss it. + +If Nagiri holds up his end of the bargain your debt shall be gone come +tomorrow and you can leave the land you work but do not own. You get +excited, but then try to calm down. It is not over yet. + +You walk out into the evening crowd still in the market before the sanctum. +There are so many people here nobody will remember and be able to speak +against you. + +> index Return back to the beginning diff --git a/scenes/take.text b/scenes/take.text new file mode 100644 index 0000000..9fdab28 --- /dev/null +++ b/scenes/take.text @@ -0,0 +1,8 @@ +Taking + +There it is. Right before you. You steal a glance behind you hoping to make +sure that nobody spots you in the darkness as you reach out and grab + +> take-bowl the bowl +> take-knife the knife +> take-idol the idol