gamefic-standard 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rspec +2 -0
- data/.travis.yml +7 -0
- data/.vscode/launch.json +20 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +60 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/gamefic-standard.gemspec +44 -0
- data/lib/gamefic-standard.rb +10 -0
- data/lib/gamefic-standard/actions.rb +13 -0
- data/lib/gamefic-standard/actions/drop.rb +21 -0
- data/lib/gamefic-standard/actions/enter.rb +21 -0
- data/lib/gamefic-standard/actions/go.rb +56 -0
- data/lib/gamefic-standard/actions/insert.rb +38 -0
- data/lib/gamefic-standard/actions/inventory.rb +11 -0
- data/lib/gamefic-standard/actions/leave.rb +32 -0
- data/lib/gamefic-standard/actions/look.rb +117 -0
- data/lib/gamefic-standard/actions/nil.rb +38 -0
- data/lib/gamefic-standard/actions/place.rb +43 -0
- data/lib/gamefic-standard/actions/quit.rb +14 -0
- data/lib/gamefic-standard/actions/take.rb +33 -0
- data/lib/gamefic-standard/actions/talk.rb +29 -0
- data/lib/gamefic-standard/actions/wait.rb +5 -0
- data/lib/gamefic-standard/articles.rb +50 -0
- data/lib/gamefic-standard/clothing.rb +4 -0
- data/lib/gamefic-standard/clothing/actions.rb +4 -0
- data/lib/gamefic-standard/clothing/actions/doff.rb +14 -0
- data/lib/gamefic-standard/clothing/actions/drop.rb +10 -0
- data/lib/gamefic-standard/clothing/actions/inventory.rb +16 -0
- data/lib/gamefic-standard/clothing/actions/wear.rb +22 -0
- data/lib/gamefic-standard/clothing/entities.rb +7 -0
- data/lib/gamefic-standard/clothing/entities/clothing.rb +5 -0
- data/lib/gamefic-standard/clothing/entities/coat.rb +3 -0
- data/lib/gamefic-standard/clothing/entities/gloves.rb +3 -0
- data/lib/gamefic-standard/clothing/entities/hat.rb +3 -0
- data/lib/gamefic-standard/clothing/entities/pants.rb +3 -0
- data/lib/gamefic-standard/clothing/entities/shirt.rb +3 -0
- data/lib/gamefic-standard/clothing/entities/shoes.rb +3 -0
- data/lib/gamefic-standard/container.rb +27 -0
- data/lib/gamefic-standard/direction.rb +55 -0
- data/lib/gamefic-standard/edible.rb +23 -0
- data/lib/gamefic-standard/entities.rb +10 -0
- data/lib/gamefic-standard/entities/character.rb +11 -0
- data/lib/gamefic-standard/entities/fixture.rb +3 -0
- data/lib/gamefic-standard/entities/item.rb +5 -0
- data/lib/gamefic-standard/entities/portal.rb +44 -0
- data/lib/gamefic-standard/entities/receptacle.rb +3 -0
- data/lib/gamefic-standard/entities/room.rb +79 -0
- data/lib/gamefic-standard/entities/rubble.rb +11 -0
- data/lib/gamefic-standard/entities/scenery.rb +7 -0
- data/lib/gamefic-standard/entities/supporter.rb +7 -0
- data/lib/gamefic-standard/entities/thing.rb +72 -0
- data/lib/gamefic-standard/give.rb +27 -0
- data/lib/gamefic-standard/grammar.rb +2 -0
- data/lib/gamefic-standard/grammar/attributes.rb +37 -0
- data/lib/gamefic-standard/grammar/pronoun.rb +101 -0
- data/lib/gamefic-standard/lockable.rb +93 -0
- data/lib/gamefic-standard/modules.rb +7 -0
- data/lib/gamefic-standard/modules/enterable.rb +19 -0
- data/lib/gamefic-standard/modules/use.rb +45 -0
- data/lib/gamefic-standard/openable.rb +49 -0
- data/lib/gamefic-standard/pathfinder.rb +65 -0
- data/lib/gamefic-standard/queries.rb +25 -0
- data/lib/gamefic-standard/test.rb +36 -0
- data/lib/gamefic-standard/version.rb +5 -0
- metadata +182 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 19ce8e79ae8e8b3a1a23e5a2636fc722e8359e690cf67d02ad96233a9f6da94d
|
4
|
+
data.tar.gz: 205bb6b6be8854bca3ac924d6d69b4ca1298392efa6edcb7b6f741db684b65fd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 94ea55f35e275f08ef95795e42c087692095f457d2ccae6968a837fe6b3397c993081a6df0e7e3bd0f5e9c159cece48b07d43936a403f4f370bf1617144cb56e
|
7
|
+
data.tar.gz: 27d37ab19bf8ef41da80320b9d1f804906decc2bc98509b34b6f07b56c2ef7e1e14312c2a96722cf9a9a3eea3638a193a07f5b4f493d6e284f425ea75e0ddee6
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/.vscode/launch.json
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
{
|
2
|
+
// Use IntelliSense to learn about possible attributes.
|
3
|
+
// Hover to view descriptions of existing attributes.
|
4
|
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
5
|
+
"version": "0.2.0",
|
6
|
+
"configurations": [
|
7
|
+
{
|
8
|
+
"type": "ruby-debug",
|
9
|
+
"request": "launch",
|
10
|
+
"name": "RSpec (Active File)",
|
11
|
+
"program": "rspec",
|
12
|
+
"programArgs": [
|
13
|
+
"-I",
|
14
|
+
"${workspaceFolder}",
|
15
|
+
"${file}"
|
16
|
+
],
|
17
|
+
"useBundler": true
|
18
|
+
}
|
19
|
+
]
|
20
|
+
}
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2019 Fred Snyder
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# Gamefic Standard
|
2
|
+
|
3
|
+
The standard library for the Gamefic interactive fiction framework.
|
4
|
+
|
5
|
+
Gamefic Standard provides common useful components for adventure games. [Inform](http://inform7.com/)
|
6
|
+
developers should find it similar to Inform's Standard Rules. It defines common
|
7
|
+
components like Rooms and Characters, along with in-game commands like `GO`,
|
8
|
+
`GET`, and `DROP` to enable basic interactivity.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'gamefic-standard'
|
16
|
+
```
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install gamefic-standard
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Require the library in your game scripts:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
require 'gamefic'
|
32
|
+
require 'gamefic-standard'
|
33
|
+
|
34
|
+
Gamefic.script do
|
35
|
+
@office = make Room, name: 'office'
|
36
|
+
@desk = make Fixture, name: 'desk', parent: @office
|
37
|
+
|
38
|
+
introduction do |actor|
|
39
|
+
actor.parent = @office
|
40
|
+
actor.tell "You're in an office."
|
41
|
+
end
|
42
|
+
end
|
43
|
+
```
|
44
|
+
|
45
|
+
Go to the [Gamefic website](https://gamefic.com) or the [SDK repo](https://github.com/castwide/gamefic-sdk)
|
46
|
+
for more information about using Gamefic.
|
47
|
+
|
48
|
+
## Development
|
49
|
+
|
50
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
51
|
+
|
52
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
53
|
+
|
54
|
+
## Contributing
|
55
|
+
|
56
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/castwide/gamefic-standard.
|
57
|
+
|
58
|
+
## License
|
59
|
+
|
60
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "gamefic/standard"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'gamefic-standard/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "gamefic-standard"
|
7
|
+
spec.version = Gamefic::Standard::VERSION
|
8
|
+
spec.authors = ["Fred Snyder"]
|
9
|
+
spec.email = ["fsnyder@castwide.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{The Gamefic standard script library.}
|
12
|
+
spec.description = %q{A collection of components for building games and interactive fiction in Gamefic.}
|
13
|
+
spec.homepage = "http://gamefic.com"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
+
# if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
|
21
|
+
# spec.metadata["homepage_uri"] = spec.homepage
|
22
|
+
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
23
|
+
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
24
|
+
# else
|
25
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
26
|
+
# "public gem pushes."
|
27
|
+
# end
|
28
|
+
|
29
|
+
# Specify which files should be added to the gem when it is released.
|
30
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
31
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
32
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
33
|
+
end
|
34
|
+
spec.bindir = "exe"
|
35
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
36
|
+
spec.require_paths = ["lib"]
|
37
|
+
|
38
|
+
spec.add_dependency 'gamefic', '~> 2.0'
|
39
|
+
|
40
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
41
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
42
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
43
|
+
spec.add_development_dependency 'simplecov', '~> 0.14'
|
44
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'gamefic'
|
2
|
+
|
3
|
+
require 'gamefic-standard/version'
|
4
|
+
require 'gamefic-standard/grammar'
|
5
|
+
require 'gamefic-standard/articles'
|
6
|
+
require 'gamefic-standard/queries'
|
7
|
+
require 'gamefic-standard/modules'
|
8
|
+
require 'gamefic-standard/direction'
|
9
|
+
require 'gamefic-standard/entities'
|
10
|
+
require 'gamefic-standard/actions'
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'gamefic-standard/actions/nil'
|
2
|
+
require 'gamefic-standard/actions/drop'
|
3
|
+
require 'gamefic-standard/actions/enter'
|
4
|
+
require 'gamefic-standard/actions/go'
|
5
|
+
require 'gamefic-standard/actions/insert'
|
6
|
+
require 'gamefic-standard/actions/inventory'
|
7
|
+
require 'gamefic-standard/actions/leave'
|
8
|
+
require 'gamefic-standard/actions/look'
|
9
|
+
require 'gamefic-standard/actions/place'
|
10
|
+
require 'gamefic-standard/actions/quit'
|
11
|
+
require 'gamefic-standard/actions/take'
|
12
|
+
require 'gamefic-standard/actions/talk'
|
13
|
+
require 'gamefic-standard/actions/wait'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Gamefic.script do
|
2
|
+
respond :drop, Use.family() do |actor, thing|
|
3
|
+
if thing.parent != actor
|
4
|
+
actor.tell "You're not carrying #{the thing}."
|
5
|
+
else
|
6
|
+
actor.proceed
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
respond :drop, Use.children do |actor, thing|
|
11
|
+
if thing.sticky?
|
12
|
+
actor.tell thing.sticky_message || "You need to keep #{the thing} for now."
|
13
|
+
else
|
14
|
+
thing.parent = actor.parent
|
15
|
+
actor.tell "You drop #{the thing}."
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
interpret "put down :thing", "drop :thing"
|
20
|
+
interpret "put :thing down", "drop :thing"
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Gamefic.script do
|
2
|
+
respond :enter, Use.siblings do |actor, thing|
|
3
|
+
actor.tell "#{The thing} can't accommodate you."
|
4
|
+
end
|
5
|
+
|
6
|
+
respond :enter, Use.siblings(Enterable, :enterable?) do |actor, supporter|
|
7
|
+
actor.parent = supporter
|
8
|
+
actor.tell "You get in #{the supporter}."
|
9
|
+
end
|
10
|
+
|
11
|
+
respond :enter, Use.parent do |actor, container|
|
12
|
+
actor.tell "You're already in #{the container}."
|
13
|
+
end
|
14
|
+
|
15
|
+
respond :enter, Use.parent(Supporter) do |actor, supporter|
|
16
|
+
actor.tell "You're inside #{the supporter} already."
|
17
|
+
end
|
18
|
+
|
19
|
+
interpret "get on :thing", "enter :thing"
|
20
|
+
interpret "get in :thing", "enter :thing"
|
21
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Gamefic.script do
|
2
|
+
respond :go, Use.siblings(Portal) do |actor, portal|
|
3
|
+
if actor.parent != actor.room
|
4
|
+
actor.perform :leave
|
5
|
+
end
|
6
|
+
if actor.parent == actor.room
|
7
|
+
if portal.destination.nil?
|
8
|
+
actor.tell "That portal leads nowhere."
|
9
|
+
else
|
10
|
+
actor.parent = portal.destination
|
11
|
+
if !portal.direction.nil?
|
12
|
+
actor.tell "You go #{portal.direction}."
|
13
|
+
end
|
14
|
+
actor.tell "<strong>#{actor.room.name.cap_first}</strong>"
|
15
|
+
actor.execute :_describe_destination
|
16
|
+
actor.execute :_itemize_room
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
meta :_describe_destination do |actor|
|
22
|
+
actor.tell actor.room.description if actor.room.has_description?
|
23
|
+
end
|
24
|
+
|
25
|
+
respond :go, Use.text do |actor, string|
|
26
|
+
actor.tell "You don't see any exit \"#{string}\" from here."
|
27
|
+
end
|
28
|
+
|
29
|
+
respond :go do |actor|
|
30
|
+
actor.tell "Where do you want to go?"
|
31
|
+
end
|
32
|
+
|
33
|
+
xlate "north", "go north"
|
34
|
+
xlate "south", "go south"
|
35
|
+
xlate "west", "go west"
|
36
|
+
xlate "east", "go east"
|
37
|
+
xlate "up", "go up"
|
38
|
+
xlate "down", "go down"
|
39
|
+
xlate "northwest", "go northwest"
|
40
|
+
xlate "northeast", "go northeast"
|
41
|
+
xlate "southwest", "go southwest"
|
42
|
+
xlate "southeast", "go southeast"
|
43
|
+
|
44
|
+
xlate "n", "go north"
|
45
|
+
xlate "s", "go south"
|
46
|
+
xlate "w", "go west"
|
47
|
+
xlate "e", "go east"
|
48
|
+
xlate "u", "go up"
|
49
|
+
xlate "d", "go down"
|
50
|
+
xlate "nw", "go northwest"
|
51
|
+
xlate "ne", "go northeast"
|
52
|
+
xlate "sw", "go southwest"
|
53
|
+
xlate "se", "go southeast"
|
54
|
+
|
55
|
+
interpret "go to :place", "go :place"
|
56
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# script 'standard'
|
2
|
+
Gamefic.script do
|
3
|
+
respond :insert, Use.available, Use.available do |actor, thing, target|
|
4
|
+
actor.tell "You can't put #{the thing} inside #{the target}."
|
5
|
+
end
|
6
|
+
|
7
|
+
respond :insert, Use.children, Use.available(Receptacle) do |actor, thing, receptacle|
|
8
|
+
if thing.sticky?
|
9
|
+
actor.tell thing.sticky_message || "You need to keep #{the thing} for now."
|
10
|
+
else
|
11
|
+
actor.tell "You put #{the thing} in #{the receptacle}."
|
12
|
+
thing.parent = receptacle
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
respond :insert, Use.available, Use.available(Receptacle) do |actor, thing, receptacle|
|
17
|
+
if thing.parent == actor
|
18
|
+
actor.proceed
|
19
|
+
else
|
20
|
+
actor.tell "You don't have #{the thing}."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
interpret "drop :item in :container", "insert :item :container"
|
25
|
+
interpret "put :item in :container", "insert :item :container"
|
26
|
+
interpret "place :item in :container", "insert :item :container"
|
27
|
+
interpret "insert :item in :container", "insert :item :container"
|
28
|
+
|
29
|
+
interpret "drop :item inside :container", "insert :item :container"
|
30
|
+
interpret "put :item inside :container", "insert :item :container"
|
31
|
+
interpret "place :item inside :container", "insert :item :container"
|
32
|
+
interpret "insert :item inside :container", "insert :item :container"
|
33
|
+
|
34
|
+
interpret "drop :item into :container", "insert :item :container"
|
35
|
+
interpret "put :item into :container", "insert :item :container"
|
36
|
+
interpret "place :item into :container", "insert :item :container"
|
37
|
+
interpret "insert :item into :container", "insert :item :container"
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Gamefic.script do
|
2
|
+
respond :leave, Use.parent do |actor, thing|
|
3
|
+
actor.tell "There's no way out of #{the thing}."
|
4
|
+
end
|
5
|
+
|
6
|
+
respond :leave, Use.parent(Enterable, :enterable?) do |actor, thing|
|
7
|
+
actor.tell "You leave #{the thing}."
|
8
|
+
actor.parent = thing.parent
|
9
|
+
end
|
10
|
+
|
11
|
+
respond :leave, Use.room do |actor, room|
|
12
|
+
portals = room.children.that_are(Portal)
|
13
|
+
if portals.length == 0
|
14
|
+
actor.tell "You don't see any obvious exits."
|
15
|
+
elsif portals.length == 1
|
16
|
+
actor.perform :go, portals[0]
|
17
|
+
else
|
18
|
+
actor.tell "I don't know which way you want to go: #{portals.join_or}."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
respond :leave do |actor|
|
23
|
+
actor.perform :leave, actor.parent
|
24
|
+
end
|
25
|
+
|
26
|
+
interpret "exit", "leave"
|
27
|
+
interpret "exit :supporter", "leave :supporter"
|
28
|
+
interpret "get on :supporter", "enter :supporter"
|
29
|
+
interpret "get off :supporter", "leave :supporter"
|
30
|
+
interpret "get out :container", "leave :container"
|
31
|
+
interpret "get out of :container", "leave :container"
|
32
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
Gamefic.script do
|
2
|
+
respond :look, Use.text do |actor, string|
|
3
|
+
if string == 'around'
|
4
|
+
actor.perform :look, actor.room
|
5
|
+
elsif string =~ /self|myself|me/
|
6
|
+
actor.tell actor.description
|
7
|
+
actor.perform :inventory
|
8
|
+
else
|
9
|
+
actor.tell "You don't see any \"#{string}\" here."
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
respond :look, Use.itself do |actor, thing|
|
14
|
+
actor.tell actor.description
|
15
|
+
actor.perform :inventory
|
16
|
+
end
|
17
|
+
|
18
|
+
respond :look, Use.available(Thing) do |actor, thing|
|
19
|
+
actor.tell thing.description
|
20
|
+
thing.children.that_are(:attached?).that_are(:itemized?).each { |item|
|
21
|
+
actor.tell "#{An item} is attached to #{the thing}."
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
respond :look, Use.available(Supporter) do |actor, thing|
|
26
|
+
if thing.accessible?
|
27
|
+
itemized = thing.children.that_are_not(:attached?).that_are(:itemized?)
|
28
|
+
# If the supporter does not have a description but it does contain
|
29
|
+
# itemized things, avoid saying there's nothing special about it.
|
30
|
+
actor.proceed if thing.has_description? or itemized.empty?
|
31
|
+
actor.tell "You see #{itemized.join_and} on #{the thing}." unless itemized.empty?
|
32
|
+
else
|
33
|
+
actor.proceed
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
respond :look, Use.available(Receptacle) do |actor, thing|
|
38
|
+
actor.proceed
|
39
|
+
if thing.accessible?
|
40
|
+
itemized = thing.children.that_are_not(:attached?).that_are(:itemized?)
|
41
|
+
actor.tell "You see #{itemized.join_and} in #{the thing}." unless itemized.empty?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
respond :look, Use.parent(Supporter, :enterable?) do |actor, supporter|
|
46
|
+
actor.proceed
|
47
|
+
actor.tell "You are currently on #{the supporter}."
|
48
|
+
end
|
49
|
+
|
50
|
+
respond :look, Use.room do |actor, room|
|
51
|
+
actor.tell "<strong>#{room.name.cap_first}</strong>"
|
52
|
+
actor.tell room.description if room.has_description?
|
53
|
+
actor.execute :_itemize_room
|
54
|
+
end
|
55
|
+
|
56
|
+
meta :_itemize_room do |actor|
|
57
|
+
room = actor.room
|
58
|
+
next if room.nil?
|
59
|
+
with_locales = []
|
60
|
+
chars = room.children.that_are(Character).that_are(:itemized?) - [actor]
|
61
|
+
charsum = []
|
62
|
+
chars.each { |char|
|
63
|
+
if char.locale_description.nil?
|
64
|
+
charsum.push char
|
65
|
+
else
|
66
|
+
with_locales.push char
|
67
|
+
end
|
68
|
+
}
|
69
|
+
if charsum.length > 0
|
70
|
+
actor.tell "#{charsum.join_and.cap_first} #{charsum.length == 1 ? 'is' : 'are'} here."
|
71
|
+
end
|
72
|
+
items = room.children.that_are(:itemized?) - [actor] - room.children.that_are(Character) - room.children.that_are(Portal)
|
73
|
+
itemsum = []
|
74
|
+
items.each { |item|
|
75
|
+
if item.locale_description.nil?
|
76
|
+
itemsum.push item
|
77
|
+
else
|
78
|
+
with_locales.push item
|
79
|
+
end
|
80
|
+
}
|
81
|
+
if itemsum.length > 0
|
82
|
+
actor.tell "You see #{itemsum.join_and}."
|
83
|
+
end
|
84
|
+
with_locales.each { |entity|
|
85
|
+
actor.tell entity.locale_description
|
86
|
+
}
|
87
|
+
if room.explicit_exits?
|
88
|
+
portals = room.children.that_are(Portal).that_are(:itemized?)
|
89
|
+
if portals.length > 0
|
90
|
+
if portals.length == 1
|
91
|
+
p = portals[0]
|
92
|
+
actor.tell "There is an exit #{p.instruction}."
|
93
|
+
else
|
94
|
+
dirs = []
|
95
|
+
portals.each { |p|
|
96
|
+
dirs.push p.instruction
|
97
|
+
}
|
98
|
+
actor.tell "There are exits #{dirs.join_and(', ')}."
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
if actor.parent.kind_of?(Supporter)
|
103
|
+
actor.tell "You are on #{the actor.parent}."
|
104
|
+
actor.parent.children.that_are_not(actor).each { |s|
|
105
|
+
actor.tell "#{A s} is on #{the actor.parent}."
|
106
|
+
}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
interpret "look", "look around"
|
111
|
+
interpret "l", "look around"
|
112
|
+
|
113
|
+
interpret "look at :thing", "look :thing"
|
114
|
+
interpret "l :thing", "look :thing"
|
115
|
+
interpret "examine :thing", "look :thing"
|
116
|
+
interpret "x :thing", "look :thing"
|
117
|
+
end
|