blob: c3751dd5537fb6f6cf1aa60aa1708f02c921a210 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
import sys
import argparse
import tonkadur
parser = argparse.ArgumentParser(
description = (
"Tonkadur Python Interpreter"
)
)
parser.add_argument(
'-f',
'--file',
dest='world_file',
type = str,
help = 'Wyrd JSON file to load.',
)
def display_rich_text (rich_text):
str_content = ""
if (not (rich_text['effect'] is None)):
str_content += "{(" + str(rich_text['effect']) + ") "
for c in rich_text['content']:
if (isinstance(c, str)):
str_content += c
else:
str_content += display_rich_text(c)
if (not (rich_text['effect'] is None)):
str_content += "}"
return str_content
args = parser.parse_args()
state = tonkadur.Tonkadur(args.world_file)
try:
while True:
result = state.run()
result_category = result['category']
if (result_category == "end"):
print("Program ended")
break
elif (result_category == "display"):
print(display_rich_text(result['content']))
elif (result_category == "prompt_integer"):
while True:
user_input = input(
display_rich_text(result['label'])
+ " "
+ "["
+ str(result['min'])
+ ", "
+ str(result['max'])
+ "] "
)
user_input = int(user_input)
if (
(user_input >= result['min'])
and (user_input <= result['max'])
):
break
else:
print("Value not within range.")
state.store_integer(user_input)
elif (result_category == "prompt_string"):
while True:
user_input = input(
display_rich_text(result['label'])
+ " "
+ "["
+ str(result['min'])
+ ", "
+ str(result['max'])
+ "] "
)
if (
(len(user_input) >= result['min'])
and (len(user_input) <= result['max'])
):
break
else:
print("Input size not within range.")
state.store_string(user_input)
elif (result_category == "assert"):
print("Assert failed at line " + str(result['line']) + ":" + str(display_rich_text(result['message'])))
print(str(state.memory))
elif (result_category == "resolve_choices"):
current_choice = 0;
for choice in result['choices']:
if (choice["category"] == "option"):
print(
str(current_choice)
+ ". "
+ display_rich_text(choice["label"])
)
current_choice += 1
user_choice = input("Your choice? ")
state.resolve_choice_to(int(user_choice))
elif (result_category == "event"):
print("Unhandled event:" + str(result))
except:
print("failed at line " + str(state.program_counter) + ".\n")
print(str(state.memory))
raise
print(str(state.memory))
|