v0.4 initial

This commit is contained in:
Cheri Dawn 2024-05-23 02:16:13 +03:00
parent 9de752b3e6
commit 87bf4af533
5 changed files with 67 additions and 28 deletions

16
CHANGELOG.md Normal file
View file

@ -0,0 +1,16 @@
# v0.4.0
## Breaking changes
* `title` moved to metadata table.
* `playtested` moved to metadata table.
* `credits` table moved to metadata table.
## Added features
* `metadata` table:
* `title` of the game
* `description` of the game
* `min_version` required to play the game
## Fixes
* Fixed wording in some places.
* Fixed examine bug.
* Moved ending title to the bottom.

View file

@ -10,3 +10,9 @@ see docs.toml
## Example
see test-game/manifest.setage
## Planned Features
* more interactable types:
* `input` provides case insensitive input checking
* `exact input` provides exact input checking
* `item` provides item checking

View file

@ -1,4 +1,9 @@
[credits] # Optional but highly recommended.
[metadata] # Required.
title = "title of the game"
description = "description of the game" # optional
min_version = "v0.4.0" # optional, highly recommended, minimum version of setage to play this manifest, "v" at the beginning is optional.
[metadata.credits] # Optional but highly recommended.
author = "who made the manifest for the game"
contributors = [] # optional list of strings.
year = "when it was made"
@ -7,9 +12,7 @@ license = "license for this manifest"
[scenario] # Required.
min_version = "v0.3.1" # optional, highly recommended, minimum version of setage to play this manifest, "v" at the beginning is optional.
start = "id" # room where the player starts. any valid room id.
title = "title of the game"
intro = "intro to the game"
prompt = "> " # optional, default shown.
playtested = false # optional, default. displays a warning if this is set to false.

View file

@ -11,11 +11,12 @@ from base64 import b64decode
__author__ = "Cheri Dawn"
__copyright__ = "Copyright 2024, Cheri Dawn"
__license__ = "GPL-3.0-only"
__version__ = "0.3.1"
__version__ = "0.4.0"
__maintainer__ = "Cheri Dawn"
__status__ = "Prototype"
manifest = {}
metadata = {}
scenario = {}
rooms = {}
current_room_id = ""
@ -172,10 +173,13 @@ class SetageShell(Cmd):
def complete_examine(self, text, line, bidx, eidx):
global current_room_id
all_items = manifest["items"]
all_items.update(rooms[current_room_id]["interactables"])
if "interactables" in rooms[current_room_id]:
all_items.update(rooms[current_room_id]["interactables"])
items = dict(inventory)
items.update(rooms[current_room_id]["items"])
items.update(rooms[current_room_id]["interactables"])
if "items" in rooms[current_room_id]:
items.update(rooms[current_room_id]["items"])
if "interactables" in rooms[current_room_id]:
items.update(rooms[current_room_id]["interactables"])
items = [x for x in items if (not all_items[x]["hidden"])]
if not text:
return list(items)
@ -423,10 +427,10 @@ class SetageShell(Cmd):
def do_credits(self, arg):
"""Print credits."""
if "credits" not in manifest:
if "credits" not in metadata:
print("No credits :(")
return
cred = manifest["credits"]
cred = metadata["credits"]
print("Manifest credits:")
if "author" in cred and "year" in cred:
print(f"\tMade by {cred["author"]} in {cred["year"]}.")
@ -437,7 +441,7 @@ class SetageShell(Cmd):
print(f"\tWith contributions by {", ".join(cred["contributors"])}")
if "version" in cred:
print(f"\tVersion: {cred["version"]}")
print(f"\tManifest version: {cred["version"]}")
if "license" in cred:
print(f"\tLicense: {cred["license"]}")
@ -453,24 +457,24 @@ class SetageShell(Cmd):
end = endings[ending]
if end["trigger"] == "item":
if end["target"] in dict(inventory).keys():
if "title" in end:
print(end["title"])
if "message" not in end:
print(f"WARNING: no message for ending '{ending}'")
else:
print(end["message"])
if "title" in end:
print(end["title"])
if "exit" not in end:
continue
if end["exit"]:
return True
if end["trigger"] == "room":
if current_room_id == end["target"]:
if "title" in end:
print(end["title"])
if "message" not in end:
print(f"WARNING: no message for ending '{ending}'")
else:
print(end["message"])
if "title" in end:
print(end["title"])
if "exit" not in end:
continue
if end["exit"]:
@ -513,17 +517,21 @@ if __name__ == "__main__":
print("FATAL: "
"table `scenario` does not exist in manifest.")
exit(2)
if "min_version" not in manifest["scenario"]:
if "metadata" not in manifest:
print("FATAL: "
"table `metadata` does not exist in manifest.")
exit(2)
if "min_version" not in manifest["metadata"]:
print("WARNING: no minimum SETAGE version specified in manifest.")
else:
if VERSION < parse_version(manifest["scenario"]["min_version"]):
if VERSION < parse_version(manifest["metadata"]["min_version"]):
print("FATAL: SETAGE version doesn't match required version.")
if "rooms" not in manifest:
print("FATAL: "
"table `rooms` does not exist in manifest.")
exit(2)
if "title" not in manifest["scenario"]:
if "title" not in manifest["metadata"]:
print("FATAL: "
"string `title` does not exist in scenario.")
exit(2)
@ -544,10 +552,11 @@ if __name__ == "__main__":
print("FATAL: "
"`rooms` is not a table in scenario.")
exit(2)
if not isinstance(manifest["items"], dict):
print("FATAL: "
"`items` is not a table in scenario.")
exit(2)
if "items" in manifest:
if not isinstance(manifest["items"], dict):
print("FATAL: "
"`items` is not a table in scenario.")
exit(2)
if not isinstance(manifest["scenario"]["endings"], dict):
print("FATAL: "
"`endings` is not a table in scenario.")
@ -568,6 +577,7 @@ if __name__ == "__main__":
if "hidden" not in v:
v.update({"hidden": False})
metadata = manifest["metadata"]
scenario = manifest["scenario"]
rooms = manifest["rooms"]
current_room_id = scenario["start"]
@ -577,15 +587,15 @@ if __name__ == "__main__":
if "prompt" in scenario:
SetageShell.prompt = scenario["prompt"]
if "playtested" not in scenario:
if "playtested" not in metadata:
print("WARNING: This manifest has not been playtested.")
elif not scenario["playtested"]:
elif not metadata["playtested"]:
print("WARNING: This manifest has not been playtested.")
print()
print("? for help. Try ls.")
print()
print(scenario["title"])
print(metadata["title"])
print()
SetageShell().cmdloop()

View file

@ -1,4 +1,10 @@
[credits]
[metadata]
title = "Dust Bunnies"
description = "A short and dusty game."
min_version = "0.4"
playtested = true
[metadata.credits]
author = "Cheri Dawn"
year = "2024"
license = "CC0"
@ -7,11 +13,9 @@ version = "2"
[scenario]
start = "1"
title = "Dust Bunnies"
intro = "You wake up in a very dusty and old-looking room.\nYou think you can get out of here if you find something that could help you remember..."
prompt = ": "
min_version = "0.3"
playtested = true
min_version = "0.4"
[scenario.endings.1]
trigger = "item"