gamefic-standard 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19ce8e79ae8e8b3a1a23e5a2636fc722e8359e690cf67d02ad96233a9f6da94d
4
- data.tar.gz: 205bb6b6be8854bca3ac924d6d69b4ca1298392efa6edcb7b6f741db684b65fd
3
+ metadata.gz: 8449554314b654b07a264e2d7726bbedac25212a65cc0feba5aea75c32e120c4
4
+ data.tar.gz: 2d1bedb7f9f780db43afc42994676e22625fc434bf46dfa16ccf7f6340217266
5
5
  SHA512:
6
- metadata.gz: 94ea55f35e275f08ef95795e42c087692095f457d2ccae6968a837fe6b3397c993081a6df0e7e3bd0f5e9c159cece48b07d43936a403f4f370bf1617144cb56e
7
- data.tar.gz: 27d37ab19bf8ef41da80320b9d1f804906decc2bc98509b34b6f07b56c2ef7e1e14312c2a96722cf9a9a3eea3638a193a07f5b4f493d6e284f425ea75e0ddee6
6
+ metadata.gz: a2bba15cb8c073bc68182f773fcc6b5b6b658ff4556d8995588c6ee2950598494e941d3e260693103e1f17f903d84ba5ea29cac36f75e65de6bf7e3fb3201a0c
7
+ data.tar.gz: e0c0999196d96e5a44f855fa76f3310b58acca624de2fc3d51bc95b8d74f1e6e6600c7b83f742ec79590e70aa5dbdfb92478deaa4d9dc3231092b5781963bd0e
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  .rspec_status
12
12
 
13
13
  Gemfile.lock
14
+ .vscode
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # 2.1.0 - March 7, 2021
2
+ - Remove sticky attribute
3
+ - Use set_player_class
@@ -1,44 +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
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', '>= 2.0.3'
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
@@ -8,3 +8,4 @@ require 'gamefic-standard/modules'
8
8
  require 'gamefic-standard/direction'
9
9
  require 'gamefic-standard/entities'
10
10
  require 'gamefic-standard/actions'
11
+ require 'gamefic-standard/container'
@@ -8,12 +8,8 @@ Gamefic.script do
8
8
  end
9
9
 
10
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
11
+ thing.parent = actor.parent
12
+ actor.tell "You drop #{the thing}."
17
13
  end
18
14
 
19
15
  interpret "put down :thing", "drop :thing"
@@ -11,17 +11,11 @@ Gamefic.script do
11
11
  if !portal.direction.nil?
12
12
  actor.tell "You go #{portal.direction}."
13
13
  end
14
- actor.tell "<strong>#{actor.room.name.cap_first}</strong>"
15
- actor.execute :_describe_destination
16
- actor.execute :_itemize_room
14
+ actor.perform :look
17
15
  end
18
16
  end
19
17
  end
20
18
 
21
- meta :_describe_destination do |actor|
22
- actor.tell actor.room.description if actor.room.has_description?
23
- end
24
-
25
19
  respond :go, Use.text do |actor, string|
26
20
  actor.tell "You don't see any exit \"#{string}\" from here."
27
21
  end
@@ -5,12 +5,8 @@ Gamefic.script do
5
5
  end
6
6
 
7
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
8
+ actor.tell "You put #{the thing} in #{the receptacle}."
9
+ thing.parent = receptacle
14
10
  end
15
11
 
16
12
  respond :insert, Use.available, Use.available(Receptacle) do |actor, thing, receptacle|
@@ -1,16 +1,13 @@
1
1
  Gamefic.script do
2
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
3
+ actor.tell "You don't see any \"#{string}\" here."
4
+ end
5
+
6
+ respond :look, Use.text(/^here$/i) do |actor, _|
7
+ actor.perform :look, actor.room
11
8
  end
12
9
 
13
- respond :look, Use.itself do |actor, thing|
10
+ respond :look, Use.itself do |actor, _|
14
11
  actor.tell actor.description
15
12
  actor.perform :inventory
16
13
  end
@@ -23,15 +20,11 @@ Gamefic.script do
23
20
  end
24
21
 
25
22
  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
23
+ itemized = thing.children.that_are_not(:attached?).that_are(:itemized?)
24
+ # If the supporter does not have a description but it does contain
25
+ # itemized things, avoid saying there's nothing special about it.
26
+ actor.proceed if thing.has_description? || itemized.empty?
27
+ actor.tell "You see #{itemized.join_and} on #{the thing}." unless itemized.empty?
35
28
  end
36
29
 
37
30
  respond :look, Use.available(Receptacle) do |actor, thing|
@@ -71,13 +64,13 @@ Gamefic.script do
71
64
  end
72
65
  items = room.children.that_are(:itemized?) - [actor] - room.children.that_are(Character) - room.children.that_are(Portal)
73
66
  itemsum = []
74
- items.each { |item|
67
+ items.each do |item|
75
68
  if item.locale_description.nil?
76
69
  itemsum.push item
77
70
  else
78
71
  with_locales.push item
79
72
  end
80
- }
73
+ end
81
74
  if itemsum.length > 0
82
75
  actor.tell "You see #{itemsum.join_and}."
83
76
  end
@@ -99,7 +92,7 @@ Gamefic.script do
99
92
  end
100
93
  end
101
94
  end
102
- if actor.parent.kind_of?(Supporter)
95
+ if actor.parent.is_a?(Supporter)
103
96
  actor.tell "You are on #{the actor.parent}."
104
97
  actor.parent.children.that_are_not(actor).each { |s|
105
98
  actor.tell "#{A s} is on #{the actor.parent}."
@@ -107,11 +100,12 @@ Gamefic.script do
107
100
  end
108
101
  end
109
102
 
110
- interpret "look", "look around"
111
- interpret "l", "look around"
103
+ interpret 'look around', 'look here'
104
+ interpret 'look', 'look here'
105
+ interpret 'l', 'look here'
112
106
 
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"
107
+ interpret 'look at :thing', 'look :thing'
108
+ interpret 'l :thing', 'look :thing'
109
+ interpret 'examine :thing', 'look :thing'
110
+ interpret 'x :thing', 'look :thing'
117
111
  end
@@ -1,29 +1,22 @@
1
1
  Gamefic.script do
2
- meta nil, Gamefic::Query::Text.new() do |actor, string|
2
+ meta nil, Gamefic::Query::Text.new do |actor, string|
3
3
  words = string.split_words
4
4
  list = verbs
5
5
  if list.include?(words[0])
6
6
  if words.length > 1
7
- actor.tell "I recognize '#{words[0]}' as a verb but could not understand the rest of your sentence."
8
- else
9
- actor.tell "I recognize '#{words[0]}' as a verb but could not understand it in this context."
10
- end
11
- else
12
- found = []
13
- list.each { |c|
14
- next if c.include?('_')
15
- if c.length > words[0].length and c.start_with?(words[0])
16
- found.push c
7
+ found = Gamefic::Query::Available.new.resolve(actor, words[1..-1].join(' ')).objects
8
+ if found.empty?
9
+ actor.tell %(I recognize "#{words[0]}" as a verb but could not understand the rest of your sentence.)
10
+ elsif found.one?
11
+ actor.tell %(I recognize "#{words[0]}" and "#{found.first.name}" but could not understand them together.)
12
+ else
13
+ actor.tell %(I'm not sure if "#{words[1..-1].join(' ')}" means #{found.map(&:definitely).join_or}.)
17
14
  end
18
- }
19
- if found.length == 1
20
- words[0] = found[0]
21
- actor.perform words.join(' ')
22
- elsif found.length > 1 and words[0].length > 2
23
- actor.tell "I'm not sure if #{words[0]} means #{found.join_and(', ', ' or ')}."
24
15
  else
25
- actor.tell "I don't recognize '#{words[0]}' as a verb."
16
+ actor.tell %(I recognize "#{words[0]}" as a verb but could not understand it in this context.)
26
17
  end
18
+ else
19
+ actor.tell %(I don't recognize "#{words[0]}" as a verb.)
27
20
  end
28
21
  end
29
22
 
@@ -14,12 +14,8 @@ Gamefic.script do
14
14
  end
15
15
 
16
16
  respond :place, Use.children, Use.reachable(Supporter) do |actor, thing, supporter|
17
- if thing.sticky?
18
- actor.tell thing.sticky_message || "You need to keep #{the thing} for now."
19
- else
20
- thing.parent = supporter
21
- actor.tell "You put #{the thing} on #{the supporter}."
22
- end
17
+ thing.parent = supporter
18
+ actor.tell "You put #{the thing} on #{the supporter}."
23
19
  end
24
20
 
25
21
  respond :place, Use.visible, Use.text do |actor, thing, supporter|
@@ -1,16 +1,16 @@
1
- Gamefic.script do
2
- respond :inventory do |actor|
3
- if actor.children.length > 0
4
- carried = actor.children.that_are_not(:attached?)
5
- worn = actor.children.that_are(:attached?)
6
- if carried.length > 0
7
- actor.tell "You are carrying #{carried.join_and}."
8
- end
9
- if worn.length > 0
10
- actor.tell "You are wearing #{worn.join_and}."
11
- end
12
- else
13
- actor.tell "You aren't carrying anything."
14
- end
15
- end
16
- end
1
+ Gamefic.script do
2
+ respond :inventory do |actor|
3
+ if actor.children.length > 0
4
+ carried = actor.children.that_are_not(:attached?)
5
+ worn = actor.children.that_are(:attached?)
6
+ if carried.length > 0
7
+ actor.tell "You are carrying #{carried.join_and}."
8
+ end
9
+ if worn.length > 0
10
+ actor.tell "You are wearing #{worn.join_and}."
11
+ end
12
+ else
13
+ actor.tell "You aren't carrying anything."
14
+ end
15
+ end
16
+ end
@@ -1,22 +1,22 @@
1
- Gamefic.script do
2
- respond :wear, Use.available(Clothing) do |actor, clothing|
3
- if clothing.parent != actor
4
- actor.tell "You don't have #{the clothing}."
5
- end
6
- if clothing.attached?
7
- actor.tell "You're already wearing #{the clothing}."
8
- else
9
- already = actor.children.that_are(clothing.class).that_are(:attached?)
10
- if already.length == 0
11
- clothing.attached = true
12
- actor.tell "You put on #{the clothing}."
13
- else
14
- actor.tell "You're already wearing #{an already[0]}."
15
- end
16
- end
17
- end
18
-
19
- xlate "put on :clothing", "wear :clothing"
20
- xlate "put :clothing on", "wear :clothing"
21
- xlate "don :clothing", "wear :clothing"
22
- end
1
+ Gamefic.script do
2
+ respond :wear, Use.available(Clothing) do |actor, clothing|
3
+ if clothing.parent != actor
4
+ actor.tell "You don't have #{the clothing}."
5
+ end
6
+ if clothing.attached?
7
+ actor.tell "You're already wearing #{the clothing}."
8
+ else
9
+ already = actor.children.that_are(clothing.class).that_are(:attached?)
10
+ if already.length == 0
11
+ clothing.attached = true
12
+ actor.tell "You put on #{the clothing}."
13
+ else
14
+ actor.tell "You're already wearing #{an already[0]}."
15
+ end
16
+ end
17
+ end
18
+
19
+ xlate "put on :clothing", "wear :clothing"
20
+ xlate "put :clothing on", "wear :clothing"
21
+ xlate "don :clothing", "wear :clothing"
22
+ end
@@ -1,27 +1,27 @@
1
- # @gamefic.script standard/container
2
-
3
- require 'gamefic-standard/openable'
4
- require 'gamefic-standard/lockable'
5
-
6
- class Container < Receptacle
7
- include Openable
8
- include Lockable
9
- end
10
-
11
- Gamefic.script do
12
- respond :insert, Use.available, Use.available(Container) do |actor, thing, container|
13
- if container.open?
14
- actor.proceed
15
- else
16
- actor.tell "#{The container} is closed."
17
- end
18
- end
19
-
20
- respond :leave, Use.parent(Container, :enterable?, :closed?) do |actor, container|
21
- actor.tell "#{The container} is closed."
22
- end
23
-
24
- respond :enter, Use.siblings(Container, :enterable?, :closed?) do |actor, container|
25
- actor.tell "#{The container} is closed."
26
- end
27
- end
1
+ require 'gamefic-standard/openable'
2
+ require 'gamefic-standard/lockable'
3
+
4
+ # An openable and lockable receptacle.
5
+ #
6
+ class Container < Receptacle
7
+ include Openable
8
+ include Lockable
9
+ end
10
+
11
+ Gamefic.script do
12
+ respond :insert, Use.available, Use.available(Container) do |actor, _thing, container|
13
+ if container.open?
14
+ actor.proceed
15
+ else
16
+ actor.tell "#{The container} is closed."
17
+ end
18
+ end
19
+
20
+ respond :leave, Use.parent(Container, :enterable?, :closed?) do |actor, container|
21
+ actor.tell "#{The container} is closed."
22
+ end
23
+
24
+ respond :enter, Use.siblings(Container, :enterable?, :closed?) do |actor, container|
25
+ actor.tell "#{The container} is closed."
26
+ end
27
+ end
@@ -1,4 +1,6 @@
1
1
  class Direction
2
+ include Gamefic::Serialize
3
+
2
4
  attr_accessor :name, :adjective, :adverb, :reverse
3
5
 
4
6
  def initialize args = {}
@@ -48,7 +50,10 @@ class Direction
48
50
  @compass
49
51
  end
50
52
 
53
+ # @param dir [Direction, string]
54
+ # @return [Direction, nil]
51
55
  def find(dir)
56
+ return dir if dir.is_a?(Direction)
52
57
  compass[dir.to_s.downcase.to_sym]
53
58
  end
54
59
  end
@@ -7,5 +7,5 @@ class Character < Thing
7
7
  end
8
8
 
9
9
  Gamefic.script do
10
- player_class Character
10
+ set_player_class Character
11
11
  end
@@ -1,33 +1,29 @@
1
1
  class Portal < Thing
2
+ # @return [Gamefic::Entity]
2
3
  attr_accessor :destination
3
4
 
5
+ # Get the ordinal direction of this Portal
6
+ # Portals have distinct direction and name properties so games can display a
7
+ # bare compass direction for exits, e.g., "south" vs. "the southern door."
8
+ #
9
+ # A portal's destination can also be nil, in which case it can be referenced
10
+ # in commands by its destination, e.g., "go to the house."
11
+ #
12
+ # @return [Direction, nil]
13
+ attr_reader :direction
14
+
4
15
  # Find the portal in the destination that returns to this portal's parent
5
16
  #
6
- # @return [Room]
17
+ # @return [Room, nil]
7
18
  def find_reverse
8
19
  return nil if destination.nil?
9
- rev = direction.reverse
10
- if rev != nil
11
- destination.children.that_are(Portal).each { |c|
12
- if c.direction == rev
13
- return c
14
- end
15
- }
20
+ destination.children.that_are(Portal).find do |portal|
21
+ portal.destination == parent
16
22
  end
17
- nil
18
- end
19
-
20
- # Get the ordinal direction of this Portal
21
- # Portals have distinct direction and name properties so games can display a
22
- # bare compass direction for exits, e.g., "south" vs. "the southern door."
23
- #
24
- # @return [Direction]
25
- def direction
26
- @direction
27
23
  end
28
24
 
29
- def direction= d
30
- @direction = Direction.find(d)
25
+ def direction= dir
26
+ @direction = Direction.find(dir)
31
27
  end
32
28
 
33
29
  def name
@@ -7,10 +7,6 @@ class Room < Thing
7
7
  @explicit_exits
8
8
  end
9
9
 
10
- def synonyms
11
- @synonyms.to_s + " around here room"
12
- end
13
-
14
10
  def tell(message)
15
11
  children.each { |c|
16
12
  c.tell message
@@ -1,7 +1,3 @@
1
1
  class Supporter < Thing
2
2
  include Enterable
3
-
4
- set_default enter_verb: 'get on'
5
- set_default leave_verb: 'get off'
6
- set_default inside_verb: 'be on'
7
3
  end
@@ -3,8 +3,6 @@ class Thing < Gamefic::Entity
3
3
 
4
4
  attr_writer :itemized
5
5
 
6
- attr_writer :sticky
7
-
8
6
  attr_writer :portable
9
7
 
10
8
  # An optional description to use when itemizing entities in room
@@ -13,13 +11,7 @@ class Thing < Gamefic::Entity
13
11
  #
14
12
  attr_accessor :locale_description
15
13
 
16
- # A message to be displayed in response to DROP actions when the entity is
17
- # sticky.
18
- #
19
- attr_accessor :sticky_message
20
-
21
14
  set_default itemized: true
22
- set_default sticky: false
23
15
  set_default portable: false
24
16
 
25
17
  # Itemized entities are automatically listed in room descriptions.
@@ -29,13 +21,6 @@ class Thing < Gamefic::Entity
29
21
  @itemized
30
22
  end
31
23
 
32
- # Sticky entities cannot be dropped with DROP actions
33
- #
34
- # @return [Boolean]
35
- def sticky?
36
- @sticky
37
- end
38
-
39
24
  # Portable entities can be taken with TAKE actions.
40
25
  #
41
26
  # @return [Boolean]
@@ -48,14 +33,18 @@ class Thing < Gamefic::Entity
48
33
  @attached ||= false
49
34
  end
50
35
 
51
- # @param [Boolean]
36
+ # @param bool [Boolean]
52
37
  def attached= bool
53
- bool = false if parent.nil?
54
- @attached = bool
38
+ @attached = if parent.nil?
39
+ # @todo Log attachment failure
40
+ false
41
+ else
42
+ bool
43
+ end
55
44
  end
56
45
 
57
- def parent= p
58
- self.attached = false unless p == parent
46
+ def parent= new_parent
47
+ self.attached = false unless new_parent == parent
59
48
  super
60
49
  end
61
50
 
@@ -5,11 +5,7 @@ respond :give, Use.available, Gamefic::Query::Children.new do |actor, _character
5
5
  end
6
6
 
7
7
  respond :give, Use.available(Character), Use.available do |actor, character, gift|
8
- if gift.sticky?
9
- actor.tell gift.sticky_message || "You need to keep #{the gift} for now."
10
- else
11
- actor.tell "#{The character} doesn't want #{the gift}."
12
- end
8
+ actor.tell "#{The character} doesn't want #{the gift}."
13
9
  end
14
10
 
15
11
  respond :give, Use.available(Character), Use.available do |actor, _character, gift|
@@ -1,19 +1,7 @@
1
1
  module Enterable
2
- attr_writer :enterable, :leave_verb, :enter_verb, :inside_verb
2
+ attr_writer :enterable
3
3
 
4
4
  def enterable?
5
5
  @enterable ||= false
6
6
  end
7
-
8
- def inside_verb
9
- @inside_verb ||= "be in"
10
- end
11
-
12
- def enter_verb
13
- @enter_verb ||= "enter"
14
- end
15
-
16
- def leave_verb
17
- @leave_verb ||= "leave"
18
- end
19
7
  end
@@ -36,7 +36,7 @@ module Use
36
36
  end
37
37
 
38
38
  def self.itself *args
39
- Gamefic::Query::Room.new *args
39
+ Gamefic::Query::Itself.new *args
40
40
  end
41
41
 
42
42
  def self.from objects, *args
@@ -1,49 +1,49 @@
1
- # @gamefic.script standard/openable
2
-
3
- # A module for entities that are openable.
4
- #
5
- module Openable
6
- def open= bool
7
- @open = bool
8
- end
9
-
10
- def open?
11
- @open ||= false
12
- end
13
-
14
- def closed?
15
- !open?
16
- end
17
-
18
- def accessible?
19
- open?
20
- end
21
- end
22
-
23
- Gamefic.script do
24
- respond :open, Use.available do |actor, thing|
25
- actor.tell "You can't open #{the thing}."
26
- end
27
-
28
- respond :open, Use.available(Openable) do |actor, thing|
29
- if thing.open?
30
- actor.tell "#{The thing} is already open."
31
- else
32
- actor.tell "You open #{the thing}."
33
- thing.open = true
34
- end
35
- end
36
-
37
- respond :close, Use.available do |actor, thing|
38
- actor.tell "You can't close #{the thing}."
39
- end
40
-
41
- respond :close, Use.available(Openable) do |actor, thing|
42
- if thing.open?
43
- actor.tell "You close #{the thing}."
44
- thing.open = false
45
- else
46
- actor.tell "#{The thing} is already open."
47
- end
48
- end
49
- end
1
+ # @gamefic.script standard/openable
2
+
3
+ # A module for entities that are openable.
4
+ #
5
+ module Openable
6
+ def open= bool
7
+ @open = bool
8
+ end
9
+
10
+ def open?
11
+ @open ||= false
12
+ end
13
+
14
+ def closed?
15
+ !open?
16
+ end
17
+
18
+ def accessible?
19
+ open?
20
+ end
21
+ end
22
+
23
+ Gamefic.script do
24
+ respond :open, Use.available do |actor, thing|
25
+ actor.tell "You can't open #{the thing}."
26
+ end
27
+
28
+ respond :open, Use.available(Openable) do |actor, thing|
29
+ if thing.open?
30
+ actor.tell "#{The thing} is already open."
31
+ else
32
+ actor.tell "You open #{the thing}."
33
+ thing.open = true
34
+ end
35
+ end
36
+
37
+ respond :close, Use.available do |actor, thing|
38
+ actor.tell "You can't close #{the thing}."
39
+ end
40
+
41
+ respond :close, Use.available(Openable) do |actor, thing|
42
+ if thing.open?
43
+ actor.tell "You close #{the thing}."
44
+ thing.open = false
45
+ else
46
+ actor.tell "#{The thing} is already open."
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  module Gamefic
2
2
  module Standard
3
- VERSION = '2.0.0'
3
+ VERSION = '2.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamefic-standard
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-24 00:00:00.000000000 Z
11
+ date: 2021-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gamefic
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.3
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '2.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.3
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: bundler
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +98,7 @@ files:
92
98
  - ".rspec"
93
99
  - ".travis.yml"
94
100
  - ".vscode/launch.json"
101
+ - CHANGELOG.md
95
102
  - Gemfile
96
103
  - LICENSE.txt
97
104
  - README.md
@@ -175,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
182
  - !ruby/object:Gem::Version
176
183
  version: '0'
177
184
  requirements: []
178
- rubygems_version: 3.0.3
185
+ rubygems_version: 3.1.2
179
186
  signing_key:
180
187
  specification_version: 4
181
188
  summary: The Gamefic standard script library.