Initial commit with a mostly working engine.

Basic commands are being parsed. I think the only weird part is the
'use' command because it needs to possibly target two things. A tiny
test example is provided in __main__, this will probably be broken out
later.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2021-11-18 11:31:21 -08:00
commit dd2128beb1
15 changed files with 1650 additions and 0 deletions

115
agame/__main__.py Normal file
View File

@@ -0,0 +1,115 @@
from agame.action import *
from agame.game import *
from agame.item import *
from agame.room import *
from agame.trigger import *
# TODO - take a custom module name that has:
# .database
# .game
# so that you can just RUN it
# Something similar to wsgi using "app" in the passed module
# This is the *game* here
database = Database()
database.add_items(
Item(
id="glowing_rock",
name="glowing rock",
desc="This rock is glowing.",
synonyms=("rock",),
room_desc="You see a ((glowing rock)). You have **got** to have it.",
triggers={
GET: [
PrintAction(
"You try to pick up the rock, but it slips out of your greasy hands.",
"Maybe you should wash your hands, you disgusting little man.",
)
],
LOOK: [PrintAction("Man, that rock looks awesome.")],
},
),
Item(
id="cell_door",
name="door",
room_desc="A ((door)) sits on the far wall.",
triggers={
GET: [PrintAction("The door is pretty attached to its wall.")],
OPEN: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[
PrintAction(
"It's already open. You push on the door even //more//, just in case."
),
SleepAction(1.0),
PrintAction("..."),
SleepAction(1.0),
PrintAction("Yup, still open."),
],
no=[
SetVarAction("cell_door_open", True),
PrintAction("The door swings open, thanks to you."),
],
)
],
CLOSE: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[
PrintAction("You close that door. Nice job."),
SetVarAction("cell_door_open", False),
],
no=[PrintAction("The door is already closed.")],
)
],
LOOK: [
CheckVarAction(
"cell_door_open",
Compare.EQUALS,
True,
yes=[PrintAction("It's a door, wide open, because you opened it.")],
no=[PrintAction("A closed door. You can change this.")],
)
],
},
),
)
database.add_rooms(
Room(
id="start",
name="Test room",
desc="You're in ((Todd's Test Cell)).",
items=[
database.items["glowing_rock"].create_inst(),
database.items["cell_door"].create_inst(),
],
),
)
# Build the game state
game = Game(
database=database,
room=database.rooms["start"],
vars={
"cell_door_open": False,
},
)
game.print_room()
while True:
try:
game.say()
line = input("> ")
game.say()
game.run_command(line)
except (KeyboardInterrupt, EOFError):
game.say()
game.say("Bye.")
break