gamefic-sdk 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/html/core/engine.js +89 -0
- data/html/core/jquery.js +5 -0
- data/html/core/jquery.modal.css +44 -0
- data/html/core/jquery.modal.js +225 -0
- data/html/core/js.cookie.js +137 -0
- data/html/skins/hypertext/compass.png +0 -0
- data/html/skins/hypertext/index.html +151 -0
- data/html/skins/hypertext/style.css +74 -0
- data/html/skins/minimal/index.html.erb +22 -0
- data/html/skins/minimal/play.js +36 -0
- data/html/skins/minimal/style.css +8 -0
- data/html/skins/multimedia/close.png +0 -0
- data/html/skins/multimedia/index.html +179 -0
- data/html/skins/multimedia/mobile.css +10 -0
- data/html/skins/multimedia/spinner.gif +0 -0
- data/html/skins/multimedia/style.css +186 -0
- data/html/skins/standard/index.html.erb +23 -0
- data/html/skins/standard/play.js +68 -0
- data/html/skins/standard/style.css +70 -0
- data/lib/gamefic-sdk/version.rb +1 -1
- data/scripts/ansi.plot.rb +13 -0
- data/scripts/autosuggest.plot.rb +171 -0
- data/scripts/clothing.plot.rb +2 -0
- data/scripts/clothing/actions.plot.rb +4 -0
- data/scripts/clothing/actions/doff.plot.rb +12 -0
- data/scripts/clothing/actions/drop.plot.rb +8 -0
- data/scripts/clothing/actions/inventory.plot.rb +14 -0
- data/scripts/clothing/actions/wear.plot.rb +19 -0
- data/scripts/clothing/entities.plot.rb +7 -0
- data/scripts/clothing/entities/clothing.plot.rb +7 -0
- data/scripts/clothing/entities/coat.plot.rb +5 -0
- data/scripts/clothing/entities/gloves.plot.rb +5 -0
- data/scripts/clothing/entities/hat.plot.rb +5 -0
- data/scripts/clothing/entities/pants.plot.rb +5 -0
- data/scripts/clothing/entities/shirt.plot.rb +5 -0
- data/scripts/clothing/entities/shoes.plot.rb +5 -0
- data/scripts/cover.plot.rb +30 -0
- data/scripts/debug.plot.rb +0 -0
- data/scripts/edible.plot.rb +19 -0
- data/scripts/furniture.plot.rb +35 -0
- data/scripts/hints.plot.rb +31 -0
- data/scripts/hypertext.plot.rb +280 -0
- data/scripts/media.plot.rb +17 -0
- data/scripts/multimedia.plot.rb +41 -0
- data/scripts/questions.plot.rb +17 -0
- data/scripts/room-modes.plot.rb +48 -0
- data/scripts/rough-sizes.plot.rb +36 -0
- data/scripts/save-restore.plot.rb +21 -0
- data/scripts/snapshots.plot.rb +14 -0
- data/scripts/standard.plot.rb +12 -0
- data/scripts/standard/actions.plot.rb +23 -0
- data/scripts/standard/actions/close.plot.rb +16 -0
- data/scripts/standard/actions/drop.plot.rb +11 -0
- data/scripts/standard/actions/enter.plot.rb +31 -0
- data/scripts/standard/actions/give.plot.rb +26 -0
- data/scripts/standard/actions/go.plot.rb +81 -0
- data/scripts/standard/actions/insert.plot.rb +47 -0
- data/scripts/standard/actions/inventory.plot.rb +8 -0
- data/scripts/standard/actions/leave.plot.rb +41 -0
- data/scripts/standard/actions/lock.plot.rb +59 -0
- data/scripts/standard/actions/look-under.plot.rb +8 -0
- data/scripts/standard/actions/look.plot.rb +102 -0
- data/scripts/standard/actions/nil.plot.rb +35 -0
- data/scripts/standard/actions/open.plot.rb +34 -0
- data/scripts/standard/actions/place.plot.rb +36 -0
- data/scripts/standard/actions/quit.plot.rb +11 -0
- data/scripts/standard/actions/read.plot.rb +3 -0
- data/scripts/standard/actions/search.plot.rb +39 -0
- data/scripts/standard/actions/show.plot.rb +13 -0
- data/scripts/standard/actions/take.plot.rb +49 -0
- data/scripts/standard/actions/talk.plot.rb +31 -0
- data/scripts/standard/actions/unlock.plot.rb +77 -0
- data/scripts/standard/actions/use.plot.rb +25 -0
- data/scripts/standard/actions/wait.plot.rb +3 -0
- data/scripts/standard/entities.plot.rb +12 -0
- data/scripts/standard/entities/character.plot.rb +9 -0
- data/scripts/standard/entities/container.plot.rb +11 -0
- data/scripts/standard/entities/door.plot.rb +53 -0
- data/scripts/standard/entities/entity.plot.rb +13 -0
- data/scripts/standard/entities/exterior.plot.rb +5 -0
- data/scripts/standard/entities/fixture.plot.rb +3 -0
- data/scripts/standard/entities/item.plot.rb +5 -0
- data/scripts/standard/entities/portal.plot.rb +37 -0
- data/scripts/standard/entities/receptacle.plot.rb +4 -0
- data/scripts/standard/entities/room.plot.rb +47 -0
- data/scripts/standard/entities/rubble.plot.rb +11 -0
- data/scripts/standard/entities/scenery.plot.rb +5 -0
- data/scripts/standard/entities/supporter.plot.rb +10 -0
- data/scripts/standard/modules.plot.rb +11 -0
- data/scripts/standard/modules/attachable.plot.rb +11 -0
- data/scripts/standard/modules/auto_takes.plot.rb +50 -0
- data/scripts/standard/modules/darkenable.plot.rb +6 -0
- data/scripts/standard/modules/enterable.plot.rb +15 -0
- data/scripts/standard/modules/explicit_exits.plot.rb +15 -0
- data/scripts/standard/modules/itemizable.plot.rb +18 -0
- data/scripts/standard/modules/lockable.plot.rb +25 -0
- data/scripts/standard/modules/openable.plot.rb +9 -0
- data/scripts/standard/modules/parent-room.plot.rb +9 -0
- data/scripts/standard/modules/portable.plot.rb +6 -0
- data/scripts/standard/modules/transparent.plot.rb +6 -0
- data/scripts/standard/pathfinder.plot.rb +60 -0
- data/scripts/standard/plural.plot.rb +2 -0
- data/scripts/standard/plural/actions.plot.rb +4 -0
- data/scripts/standard/plural/actions/drop.plot.rb +126 -0
- data/scripts/standard/plural/actions/insert.plot.rb +68 -0
- data/scripts/standard/plural/actions/place.plot.rb +37 -0
- data/scripts/standard/plural/actions/take.plot.rb +175 -0
- data/scripts/standard/plural/queries.plot.rb +5 -0
- data/scripts/standard/plural/queries/ambiguous_visible.plot.rb +13 -0
- data/scripts/standard/plural/queries/any_expression.plot.rb +17 -0
- data/scripts/standard/plural/queries/many_visible.plot.rb +13 -0
- data/scripts/standard/plural/queries/not_expression.plot.rb +16 -0
- data/scripts/standard/plural/queries/plural_visible.plot.rb +22 -0
- data/scripts/standard/queries.plot.rb +4 -0
- data/scripts/standard/queries/from_expression.plot.rb +16 -0
- data/scripts/standard/queries/reachable.plot.rb +48 -0
- data/scripts/standard/queries/room.plot.rb +17 -0
- data/scripts/standard/queries/visible.plot.rb +45 -0
- data/scripts/standard/rules.plot.rb +1 -0
- data/scripts/standard/rules/has-enough-light.plot.rb +12 -0
- data/scripts/standard/test.plot.rb +8 -0
- data/scripts/standard/use.plot.rb +29 -0
- data/scripts/suggestible.plot.rb +42 -0
- data/scripts/undo.plot.rb +11 -0
- metadata +149 -25
@@ -0,0 +1,12 @@
|
|
1
|
+
respond :doff, Query::Children.new(Clothing) do |actor, clothing|
|
2
|
+
if !clothing.attached?
|
3
|
+
actor.tell "You're not wearing #{the clothing}."
|
4
|
+
else
|
5
|
+
clothing.attached = false
|
6
|
+
actor.tell "You take off #{the clothing}."
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
xlate "remove :clothing", "doff :clothing"
|
11
|
+
xlate "take off :clothing", "doff :clothing"
|
12
|
+
xlate "take :clothing off", "doff :clothing"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
respond :inventory do |actor|
|
2
|
+
if actor.children.length > 0
|
3
|
+
carried = actor.children.that_are_not(:attached?)
|
4
|
+
worn = actor.children.that_are(:attached?)
|
5
|
+
if carried.length > 0
|
6
|
+
actor.tell "You are carrying #{carried.join_and}."
|
7
|
+
end
|
8
|
+
if worn.length > 0
|
9
|
+
actor.tell "You are wearing #{worn.join_and}."
|
10
|
+
end
|
11
|
+
else
|
12
|
+
actor.tell "You aren't carrying anything."
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
respond :wear, Query::Reachable.new(Clothing) do |actor, clothing|
|
2
|
+
if actor.auto_takes?(clothing)
|
3
|
+
if clothing.attached?
|
4
|
+
actor.tell "You're already wearing #{the clothing}."
|
5
|
+
else
|
6
|
+
already = actor.children.that_are(clothing.class).that_are(:attached?)
|
7
|
+
if already.length == 0
|
8
|
+
clothing.attached = true
|
9
|
+
actor.tell "You put on #{the clothing}."
|
10
|
+
else
|
11
|
+
actor.tell "You're already wearing #{an already[0]}."
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
xlate "put on :clothing", "wear :clothing"
|
18
|
+
xlate "put :clothing on", "wear :clothing"
|
19
|
+
xlate "don :clothing", "wear :clothing"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
script 'media'
|
2
|
+
|
3
|
+
module Gamefic::CoverImageViewer
|
4
|
+
attr_accessor :cover_image
|
5
|
+
end
|
6
|
+
|
7
|
+
class Gamefic::Character
|
8
|
+
include CoverImageViewer
|
9
|
+
end
|
10
|
+
|
11
|
+
on_player_update do |actor|
|
12
|
+
if !actor.cover_image.nil?
|
13
|
+
actor.stream "<figure class=\"cover\"><img src=\"media/#{actor.cover_image}\" /></figure>"
|
14
|
+
end
|
15
|
+
actor.cover_image = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
respond :look, Use.room do |actor, room|
|
19
|
+
if !room.image.nil?
|
20
|
+
actor.cover_image = room.image
|
21
|
+
end
|
22
|
+
actor.proceed
|
23
|
+
end
|
24
|
+
|
25
|
+
respond :look, Use.reachable do |actor, thing|
|
26
|
+
if !thing.image.nil?
|
27
|
+
actor.cover_image = thing.image
|
28
|
+
end
|
29
|
+
actor.proceed
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Edibility
|
2
|
+
attr_writer :edible
|
3
|
+
def edible?
|
4
|
+
@edible ||= false
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class Gamefic::Entity
|
9
|
+
include Edibility
|
10
|
+
end
|
11
|
+
|
12
|
+
respond :eat, Use.reachable do |actor, item|
|
13
|
+
actor.tell "You can't eat #{the item}."
|
14
|
+
end
|
15
|
+
|
16
|
+
respond :eat, Use.reachable(:edible?) do |actor, item|
|
17
|
+
actor.tell "You eat #{the item}."
|
18
|
+
item.destroy
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Gamefic::Seat < Gamefic::Entity
|
2
|
+
include Enterable
|
3
|
+
def initialize plot, args = {}
|
4
|
+
self.enterable = true
|
5
|
+
self.enter_verb = "sit on"
|
6
|
+
self.leave_verb = "stand up from"
|
7
|
+
self.inside_verb = "be sitting on"
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
respond :sit do |actor|
|
13
|
+
seats = Use.reachable.context_from(actor).that_are(Seat)
|
14
|
+
if seats.length == 1
|
15
|
+
actor.perform :enter, seats[0]
|
16
|
+
elsif seats.length > 1
|
17
|
+
actor.tell "I don't know where you want to sit: #{seats.join_or}"
|
18
|
+
else
|
19
|
+
actor.tell "There's nowhere to sit here."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
respond :stand do |actor|
|
24
|
+
if actor.parent == actor.room
|
25
|
+
actor.tell "You're already standing."
|
26
|
+
else
|
27
|
+
actor.perform :leave, actor.parent
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
interpret "sit :seat", "enter :seat"
|
32
|
+
interpret "sit on :seat", "enter :seat"
|
33
|
+
interpret "stand up from :seat", "leave :seat"
|
34
|
+
interpret "sit down", "sit"
|
35
|
+
interpret "stand up", "stand"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Character
|
2
|
+
def hints
|
3
|
+
@hints ||= []
|
4
|
+
end
|
5
|
+
def hint message
|
6
|
+
hints.push message
|
7
|
+
if self.is? :strongly_guided
|
8
|
+
self.stream "<p class=\"hint\">#{message}</p>"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
options Character, :lightly_guided, :strongly_guided, :never_guided
|
14
|
+
|
15
|
+
finish_action :reset_hints do |actor|
|
16
|
+
actor.hints.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
meta :hint do |actor|
|
20
|
+
if !actor.is? :never_guided
|
21
|
+
if actor.hints.length > 0
|
22
|
+
actor.hints.each { |hint|
|
23
|
+
actor.tell hint
|
24
|
+
}
|
25
|
+
else
|
26
|
+
actor.tell "There are no hints available right now."
|
27
|
+
end
|
28
|
+
else
|
29
|
+
actor.tell "There are no hints available in this game."
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,280 @@
|
|
1
|
+
script 'clothing'
|
2
|
+
|
3
|
+
module Gamefic::Hypertext
|
4
|
+
def self.link command, text = nil
|
5
|
+
"<a rel=\"gamefic\" href=\"#\" data-command=\"#{command}\">#{text || command}</a>"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class Gamefic::Entity
|
10
|
+
attr_writer :default_command
|
11
|
+
def default_command
|
12
|
+
@default_command || "examine #{definitely}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Gamefic::Character
|
17
|
+
def suggest command, text = nil
|
18
|
+
stream "<nav class=\"suggestions\"><p>#{Hypertext.link(command, text)}</p></nav>"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_action :clear_room_mode do |actor, action|
|
23
|
+
actor[:looking_at_room] = false
|
24
|
+
actor[:checking_inventory] = false
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
respond :look, Query::Room.new(Room) do |actor, room|
|
29
|
+
actor.tell "<strong>#{room.name.cap_first}</strong>"
|
30
|
+
actor.tell room.description
|
31
|
+
with_locales = []
|
32
|
+
chars = room.children.that_are(Character) - [actor]
|
33
|
+
charsum = []
|
34
|
+
chars.each { |char|
|
35
|
+
if char.locale_description != ""
|
36
|
+
with_locales.push char
|
37
|
+
else
|
38
|
+
if charsum.length == 0
|
39
|
+
charsum.push Hypertext.link char.default_command, char.indefinitely.cap_first
|
40
|
+
else
|
41
|
+
charsum.push Hypertext.link char.default_command, char.indefinitely
|
42
|
+
end
|
43
|
+
end
|
44
|
+
}
|
45
|
+
if charsum.length > 0
|
46
|
+
actor.tell "#{charsum.join_and} #{charsum.length == 1 ? 'is' : 'are'} here."
|
47
|
+
end
|
48
|
+
items = room.children.that_are(:itemized) - [actor] - room.children.that_are(Character)
|
49
|
+
itemsum = []
|
50
|
+
items.each { |item|
|
51
|
+
if item.locale_description != ""
|
52
|
+
with_locales.push item
|
53
|
+
else
|
54
|
+
itemsum.push Hypertext.link item.default_command, item.indefinitely
|
55
|
+
end
|
56
|
+
}
|
57
|
+
if itemsum.length > 0
|
58
|
+
actor.tell "You see #{itemsum.join_and}."
|
59
|
+
end
|
60
|
+
with_locales.each { |entity|
|
61
|
+
actor.tell entity.locale_description
|
62
|
+
}
|
63
|
+
if room.is? :explicit_with_exits
|
64
|
+
portals = room.children.that_are(Portal)
|
65
|
+
if portals.length > 0
|
66
|
+
if portals.length == 1
|
67
|
+
actor.tell "There is an exit #{Hypertext.link portals[0].default_command, portals[0].direction}."
|
68
|
+
else
|
69
|
+
dirs = []
|
70
|
+
portals.each { |p|
|
71
|
+
dirs.push Hypertext.link p.default_command, p.direction
|
72
|
+
}
|
73
|
+
actor.tell "There are exits #{dirs.join_and(', ')}."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
if actor.is? :supported
|
78
|
+
actor.tell "You are on #{the actor.parent}."
|
79
|
+
actor.parent.children.that_are(:supported).that_are_not(actor).each { |s|
|
80
|
+
actor.tell "#{Hypertext.link s.default_command, s.indefinitely.cap_first} is on #{the actor.parent}."
|
81
|
+
}
|
82
|
+
end
|
83
|
+
actor[:looking_at_room] = true
|
84
|
+
end
|
85
|
+
|
86
|
+
respond :look, Query::Visible.new(Character) do |actor, character|
|
87
|
+
actor.proceed
|
88
|
+
actor.suggest "talk to #{the character}"
|
89
|
+
end
|
90
|
+
|
91
|
+
respond :look, Query::Visible.new do |actor, thing|
|
92
|
+
actor.proceed
|
93
|
+
if thing.is? :portable
|
94
|
+
if thing.parent == actor
|
95
|
+
actor.suggest "drop #{the thing}"
|
96
|
+
else
|
97
|
+
actor.suggest "take #{the thing}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
objects = thing.children.that_are(:attached)
|
101
|
+
actor.stream '<nav class="objects">'
|
102
|
+
objects.each { |object|
|
103
|
+
actor.tell Hypertext.link "look #{object}", object
|
104
|
+
}
|
105
|
+
actor.stream '</nav>'
|
106
|
+
end
|
107
|
+
|
108
|
+
respond :look, Query::Visible.new(Container) do |actor, container|
|
109
|
+
actor.tell container.description
|
110
|
+
container.children.that_are(:attached).that_are(:itemized).each { |item|
|
111
|
+
actor.tell "#{An item} is attached to #{the container}."
|
112
|
+
}
|
113
|
+
if container.is? :openable
|
114
|
+
actor.tell "#{The container} is #{container.is?(:open) ? 'open' : 'closed'}."
|
115
|
+
end
|
116
|
+
if container.is? :open
|
117
|
+
contents = container.children.that_are(:contained)
|
118
|
+
if contents.length > 0
|
119
|
+
array = []
|
120
|
+
contents.each { |entity|
|
121
|
+
array.push Hypertext.link entity.default_command, entity.indefinitely
|
122
|
+
}
|
123
|
+
actor.tell "You see #{array.join_and} inside #{the container}."
|
124
|
+
end
|
125
|
+
end
|
126
|
+
if container.is?(:lockable) and container.is?(:locked)
|
127
|
+
actor.suggest "unlock #{the container}"
|
128
|
+
elsif container.is?(:openable) and container.is?(:closed)
|
129
|
+
actor.suggest "open #{the container}"
|
130
|
+
else
|
131
|
+
if container.is?(:openable) and container.is?(:open)
|
132
|
+
actor.suggest "close #{the container}"
|
133
|
+
end
|
134
|
+
if container.is?(:open)
|
135
|
+
actor.stream '<nav class="objects">'
|
136
|
+
objects = container.children.that_are(:itemized)
|
137
|
+
objects.each { |object|
|
138
|
+
actor.stream Hypertext.link "look #{object}", object
|
139
|
+
}
|
140
|
+
actor.stream '</nav>'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
if container.is?(:enterable)
|
144
|
+
actor.suggest "enter #{the container}"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
respond :look, Query::Children.new(Clothing) do |actor, clothing|
|
149
|
+
actor.proceed
|
150
|
+
if clothing.is?(:worn)
|
151
|
+
actor.suggest "remove #{the clothing}"
|
152
|
+
else
|
153
|
+
actor.suggest "wear #{the clothing}"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
respond :open, Query::Visible.new(Container) do |actor, container|
|
158
|
+
actor.proceed
|
159
|
+
if container.is? :open
|
160
|
+
actor.perform :look, container
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
#respond :look, Query::Visible.new(Device) do |actor, device|
|
165
|
+
# actor.proceed
|
166
|
+
# if device.is? :on
|
167
|
+
# actor.suggest "turn on #{the device}"
|
168
|
+
# else
|
169
|
+
# actor.suggest "turn off #{the device}"
|
170
|
+
# end
|
171
|
+
#end
|
172
|
+
|
173
|
+
respond :inventory do |actor|
|
174
|
+
if actor.children.length > 0
|
175
|
+
carried = actor.children.that_are_not(:worn)
|
176
|
+
worn = actor.children.that_are(:worn)
|
177
|
+
if carried.length > 0
|
178
|
+
array = []
|
179
|
+
carried.each { |entity|
|
180
|
+
array << "#{Hypertext.link(entity.default_command, entity.indefinitely)}"
|
181
|
+
}
|
182
|
+
actor.tell "You are carrying #{array.join_and}."
|
183
|
+
end
|
184
|
+
if worn.length > 0
|
185
|
+
array = []
|
186
|
+
worn.each { |entity|
|
187
|
+
array << "#{Hypertext.link(entity.default_command, entity.indefinitely)}"
|
188
|
+
}
|
189
|
+
actor.tell "You are wearing #{array.join_and}."
|
190
|
+
end
|
191
|
+
actor.stream '<nav class="objects">'
|
192
|
+
actor.children.each { |object|
|
193
|
+
actor.tell Hypertext.link "look #{object}", object.definitely
|
194
|
+
}
|
195
|
+
actor.stream '</nav>'
|
196
|
+
else
|
197
|
+
actor.tell "You aren't carrying anything."
|
198
|
+
end
|
199
|
+
actor[:checking_inventory] = true
|
200
|
+
end
|
201
|
+
|
202
|
+
respond :go, Query::Reachable.new(Door, :locked) do |actor, door|
|
203
|
+
actor.proceed
|
204
|
+
if door.is? :locked
|
205
|
+
actor.suggest "unlock #{the door}"
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
respond :unlock, Query::Reachable.new(:lockable) do |actor, container|
|
210
|
+
actor.proceed
|
211
|
+
if container.is?(:closed)
|
212
|
+
actor.suggest "open #{the container}"
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
respond :take, Query::Reachable.new(Clothing) do |actor, clothing|
|
217
|
+
actor.proceed
|
218
|
+
if clothing.parent == actor
|
219
|
+
actor.suggest "wear #{the clothing}"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
on_player_update do |actor|
|
224
|
+
if actor.scene.key != :active and actor.scene.kind_of?(Gamefic::ActiveScene) == false
|
225
|
+
next
|
226
|
+
end
|
227
|
+
if actor.parent != actor.room
|
228
|
+
if actor.parent.kind_of?(Container)
|
229
|
+
actor.suggest "exit", "leave #{the actor.parent}"
|
230
|
+
else
|
231
|
+
actor.suggest "exit", "get off #{the actor.parent}"
|
232
|
+
end
|
233
|
+
end
|
234
|
+
if actor[:looking_at_room] != true
|
235
|
+
actor.suggest "look around"
|
236
|
+
end
|
237
|
+
if actor[:checking_inventory] != true
|
238
|
+
actor.suggest "inventory"
|
239
|
+
end
|
240
|
+
entities = Query::Siblings.new.context_from(actor)
|
241
|
+
portals = entities.that_are(Portal)
|
242
|
+
if portals.length > 0
|
243
|
+
actor.stream '<nav class="portals">'
|
244
|
+
actor.stream "Exits: "
|
245
|
+
portals.each { |portal|
|
246
|
+
actor.stream Hypertext.link("go #{portal.direction}", "#{portal.direction}") + " "
|
247
|
+
}
|
248
|
+
actor.stream '</nav>'
|
249
|
+
end
|
250
|
+
if actor.room.is? :dark
|
251
|
+
next
|
252
|
+
end
|
253
|
+
characters = entities.that_are(Character) - [actor]
|
254
|
+
if characters.length > 0
|
255
|
+
actor.stream '<nav class="characters">'
|
256
|
+
actor.stream "Characters: "
|
257
|
+
characters.each { |entity|
|
258
|
+
actor.stream Hypertext.link("examine #{the entity}", "#{the entity}") + " "
|
259
|
+
}
|
260
|
+
actor.stream '</nav>'
|
261
|
+
end
|
262
|
+
objects = entities.that_are(:itemized) - characters - [actor] - portals
|
263
|
+
if objects.length > 0
|
264
|
+
actor.stream '<nav class="objects">'
|
265
|
+
actor.stream "Objects: "
|
266
|
+
objects.each { |entity|
|
267
|
+
actor.stream Hypertext.link(entity.default_command, "#{the entity}") + " "
|
268
|
+
}
|
269
|
+
actor.stream '</nav>'
|
270
|
+
end
|
271
|
+
extras = entities.that_are(:not_itemized) - characters - [actor] - portals
|
272
|
+
if extras.length > 0
|
273
|
+
actor.stream '<nav class="incidentals">'
|
274
|
+
actor.stream "Incidentals: "
|
275
|
+
extras.each { |entity|
|
276
|
+
actor.stream Hypertext.link("examine #{the entity}", "#{the entity}") + " "
|
277
|
+
}
|
278
|
+
actor.stream '</nav>'
|
279
|
+
end
|
280
|
+
end
|