-
Notifications
You must be signed in to change notification settings - Fork 1
/
story_data.pl
125 lines (109 loc) · 3.3 KB
/
story_data.pl
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
115
116
117
118
119
120
121
122
123
124
125
% story data
:- module(story_data,[init/4, action/2, event/4]).
%! init(+Name:atom, +Pet:atom, +Animal:atom, -State:story_state)
init(Name, Pet, Animal, State) :-
State = [ player_in(bedroom)
, player(Name)
, pet(Pet, Animal)
, stomach(empty)
, bladder(full)
, hands(clean)
, dressed_for(bed)
, object_in(keys, bedroom)
, object_in(comb, bathroom(master))
% , goal(player_in(car))
, goal(player_in(kitchen))
, goal(stomach(full))
, goal(bladder(empty))
, goal(holding(keys))
, goal(dressed_for(work))
].
% door(yard, car).
% door(den, yard).
door(den, kitchen).
door(hall, den).
% door(hall, bathroom(guest)).
door(bedroom, hall).
door(bedroom, bathroom(master)).
door(bathroom(master), closet).
connected_to(A,B) :- door(A,B).
connected_to(A,B) :- door(B,A).
% I think grouping each action with its corresponding
% events makes this easier to read.
:- discontiguous action/2, event/4.
% pee
action(pee, action{
prereqs: [player_in(bathroom(_)), bladder(full)],
negprereqs: [holding(_)],
removes: [hands(_), bladder(full)],
adds: [hands(dirty), bladder(empty)]
}).
% wash hands in the bathroom
action(wash_hands, action{
prereqs: [player_in(bathroom(_)), hands(dirty)],
negprereqs: [holding(_)],
removes: [hands(dirty)],
adds: [hands(clean)]
}).
% dress for work
action(dress(work), action{
prereqs: [player_in(closet)],
negprereqs: [holding(_)],
removes: [dressed_for(bed)],
adds: [dressed_for(work)]
}).
% wash hands in the kitchen
action(wash_hands, action{
prereqs: [player_in(kitchen), hands(dirty)],
negprereqs: [holding(_)],
removes: [hands(dirty)],
adds: [hands(clean)]
}).
% eat
action(eat, action{
prereqs: [player_in(kitchen), hands(clean), stomach(empty)],
negprereqs: [holding(_)],
removes: [stomach(empty)],
adds: [stomach(full)]
}).
event(eat, 0.5, spill, action{
prereqs: [],
negprereqs: [],
removes: [dressed_for(work)],
adds: []
}).
% grab object
action(grab(Object), action{
prereqs: [player_in(Location), object_in(Object, Location)],
negprereqs: [holding(_)],
removes: [object_in(Object, Location)],
adds: [holding(Object)]
}).
% move from room to room
action(move(CurrentLocation, Location), action{
prereqs: [player_in(CurrentLocation)],
negprereqs: [needy_pet],
removes: [player_in(CurrentLocation)],
adds: [player_in(Location)]
}) :-
connected_to(CurrentLocation, Location).
event(move(_, _), 0.1, needy_pet(Name, Animal), action{
prereqs: [pet(Name, Animal)],
negprereqs: [],
removes: [],
adds: [needy_pet]
}).
% drop object
action(drop(Object), action{
prereqs: [player_in(Location), holding(Object)],
negprereqs: [],
removes: [holding(Object)],
adds: [object_in(Object, Location)]
}).
% love pet
action(love_pet(Name,Animal), action{
prereqs: [needy_pet, pet(Name, Animal)],
negprereqs: [],
removes: [needy_pet, hands(clean)],
adds: [hands(dirty)]
}).