gamefic-standard 3.2.3 → 3.3.0
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/CHANGELOG.md +10 -0
- data/Rakefile +5 -2
- data/gamefic-standard.gemspec +13 -11
- data/lib/gamefic-standard/actions/attack.rb +23 -19
- data/lib/gamefic-standard/actions/close.rb +16 -10
- data/lib/gamefic-standard/actions/drop.rb +31 -16
- data/lib/gamefic-standard/actions/enter.rb +32 -26
- data/lib/gamefic-standard/actions/give.rb +41 -0
- data/lib/gamefic-standard/actions/go.rb +47 -43
- data/lib/gamefic-standard/actions/insert.rb +42 -28
- data/lib/gamefic-standard/actions/inventory.rb +13 -8
- data/lib/gamefic-standard/actions/leave.rb +44 -37
- data/lib/gamefic-standard/actions/lock.rb +22 -16
- data/lib/gamefic-standard/actions/look.rb +123 -104
- data/lib/gamefic-standard/actions/move.rb +18 -14
- data/lib/gamefic-standard/actions/nil.rb +62 -52
- data/lib/gamefic-standard/actions/open.rb +34 -24
- data/lib/gamefic-standard/actions/place.rb +35 -20
- data/lib/gamefic-standard/actions/pronouns.rb +26 -18
- data/lib/gamefic-standard/actions/quit.rb +17 -7
- data/lib/gamefic-standard/actions/repeat.rb +17 -9
- data/lib/gamefic-standard/actions/save-restore-undo.rb +19 -11
- data/lib/gamefic-standard/actions/search.rb +31 -21
- data/lib/gamefic-standard/actions/take.rb +47 -34
- data/lib/gamefic-standard/actions/talk.rb +45 -31
- data/lib/gamefic-standard/actions/unlock.rb +31 -21
- data/lib/gamefic-standard/actions/wait.rb +15 -5
- data/lib/gamefic-standard/actions.rb +33 -0
- data/lib/gamefic-standard/articles.rb +45 -40
- data/lib/gamefic-standard/enterable.rb +13 -0
- data/lib/gamefic-standard/entities/character.rb +3 -0
- data/lib/gamefic-standard/entities/container.rb +2 -2
- data/lib/gamefic-standard/entities/door.rb +13 -13
- data/lib/gamefic-standard/entities/portal.rb +1 -1
- data/lib/gamefic-standard/entities/receptacle.rb +1 -1
- data/lib/gamefic-standard/entities/room.rb +20 -5
- data/lib/gamefic-standard/entities/supporter.rb +1 -1
- data/lib/gamefic-standard/entities/thing.rb +1 -5
- data/lib/gamefic-standard/introduction.rb +14 -4
- data/lib/gamefic-standard/lockable.rb +36 -0
- data/lib/gamefic-standard/openable.rb +33 -0
- data/lib/gamefic-standard/pathfinder.rb +75 -55
- data/lib/gamefic-standard/standardized.rb +65 -0
- data/lib/gamefic-standard/version.rb +1 -1
- data/lib/gamefic-standard.rb +12 -3
- metadata +36 -13
- data/lib/gamefic-standard/give.rb +0 -21
- data/lib/gamefic-standard/grammar/attributes.rb +0 -37
- data/lib/gamefic-standard/grammar/pronoun.rb +0 -101
- data/lib/gamefic-standard/grammar.rb +0 -2
- data/lib/gamefic-standard/modules/enterable.rb +0 -9
- data/lib/gamefic-standard/modules/lockable.rb +0 -34
- data/lib/gamefic-standard/modules/openable.rb +0 -19
- data/lib/gamefic-standard/modules/standardized.rb +0 -57
- data/lib/gamefic-standard/modules.rb +0 -6
- data/spec-opal/spec_helper.rb +0 -32
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# An openable portal.
|
|
3
|
+
# An openable and lockable portal.
|
|
4
4
|
#
|
|
5
5
|
class Door < Portal
|
|
6
|
-
include Openable
|
|
7
|
-
include Lockable
|
|
6
|
+
include Gamefic::Standard::Openable
|
|
7
|
+
include Gamefic::Standard::Lockable
|
|
8
8
|
|
|
9
9
|
def post_initialize
|
|
10
10
|
update_reverse_open
|
|
11
|
+
update_reverse_lock
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
def open=
|
|
14
|
+
def open=(bool)
|
|
14
15
|
super
|
|
16
|
+
reverse&.lock_key = lock_key
|
|
15
17
|
update_reverse_open
|
|
18
|
+
update_reverse_lock
|
|
16
19
|
end
|
|
17
20
|
|
|
18
|
-
def locked=
|
|
21
|
+
def locked=(bool)
|
|
19
22
|
super
|
|
20
23
|
update_reverse_lock
|
|
21
24
|
end
|
|
22
25
|
|
|
23
|
-
def two_way_lock_key=
|
|
24
|
-
lock_key = key
|
|
25
|
-
|
|
26
|
-
reverse.lock_key = key
|
|
26
|
+
def two_way_lock_key=(key)
|
|
27
|
+
self.lock_key = key
|
|
28
|
+
reverse&.lock_key = key
|
|
27
29
|
end
|
|
28
30
|
|
|
29
31
|
private
|
|
30
32
|
|
|
31
33
|
def update_reverse_open
|
|
32
34
|
rev = find_reverse
|
|
33
|
-
|
|
34
|
-
rev.open = open?
|
|
35
|
+
rev&.open = open? unless rev&.open? == open?
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
def update_reverse_lock
|
|
38
39
|
rev = find_reverse
|
|
39
|
-
|
|
40
|
-
rev.locked = locked?
|
|
40
|
+
rev&.locked = locked? unless rev&.locked? == locked?
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -23,14 +23,12 @@ class Room < Thing
|
|
|
23
23
|
# @param type [Class<Portal>]
|
|
24
24
|
# @param two_way [Boolean]
|
|
25
25
|
# @return [Portal, Array<Portal>]
|
|
26
|
-
def connect
|
|
26
|
+
def connect(destination, direction: nil, type: Portal, two_way: true, **opts)
|
|
27
27
|
direction = Direction.find(direction)
|
|
28
|
-
here = type.new
|
|
29
|
-
destination: destination,
|
|
30
|
-
direction: Direction.find(direction))
|
|
28
|
+
here = type.new parent: self, destination: destination, direction: Direction.find(direction), **opts
|
|
31
29
|
return here unless two_way
|
|
32
30
|
|
|
33
|
-
there = type.new
|
|
31
|
+
there = type.new parent: destination, destination: self, direction: direction&.reverse, **opts
|
|
34
32
|
[here, there]
|
|
35
33
|
end
|
|
36
34
|
|
|
@@ -43,4 +41,21 @@ class Room < Thing
|
|
|
43
41
|
set_default explicit_exits: bool
|
|
44
42
|
end
|
|
45
43
|
end
|
|
44
|
+
|
|
45
|
+
protected
|
|
46
|
+
|
|
47
|
+
%w[north south west east northeast southeast southwest northwest up down].each do |direction|
|
|
48
|
+
define_method "#{direction}=" do |destination|
|
|
49
|
+
connect destination, direction: direction
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def connect=(destinations)
|
|
54
|
+
all = [destinations].flatten
|
|
55
|
+
until all.empty?
|
|
56
|
+
destination = all.shift
|
|
57
|
+
direction = (all.first.is_a?(String) ? all.shift : nil)
|
|
58
|
+
connect destination, direction: direction
|
|
59
|
+
end
|
|
60
|
+
end
|
|
46
61
|
end
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
Gamefic
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
module Gamefic
|
|
4
|
+
module Standard
|
|
5
|
+
# Add a simple introduction that sets an appropriate name and synonyms for
|
|
6
|
+
# the player character.
|
|
7
|
+
#
|
|
8
|
+
module Introduction
|
|
9
|
+
extend Gamefic::Scriptable
|
|
10
|
+
|
|
11
|
+
introduction do |actor|
|
|
12
|
+
actor.name = 'you'
|
|
13
|
+
actor.synonyms = 'self me yourself myself'
|
|
14
|
+
actor.proper_named = true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
7
17
|
end
|
|
8
18
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Gamefic
|
|
4
|
+
module Standard
|
|
5
|
+
# A module for entities that are both openable and lockable.
|
|
6
|
+
#
|
|
7
|
+
module Lockable
|
|
8
|
+
include Openable
|
|
9
|
+
|
|
10
|
+
attr_accessor :lock_key
|
|
11
|
+
|
|
12
|
+
def locked=(bool)
|
|
13
|
+
@locked = bool
|
|
14
|
+
@open = false if @locked
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def open=(bool)
|
|
18
|
+
@open = bool
|
|
19
|
+
@locked = false if @open
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def locked?
|
|
23
|
+
@locked ||= false
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def unlocked?
|
|
27
|
+
!locked?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def lock_key?
|
|
31
|
+
!@lock_key.nil?
|
|
32
|
+
end
|
|
33
|
+
alias has_lock_key? lock_key?
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Gamefic
|
|
4
|
+
module Standard
|
|
5
|
+
# A module for entities that are openable.
|
|
6
|
+
#
|
|
7
|
+
module Openable
|
|
8
|
+
def open
|
|
9
|
+
self.open = true
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def close
|
|
13
|
+
self.open = false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def open=(bool)
|
|
17
|
+
@open = bool
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def open?
|
|
21
|
+
@open ||= false
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def closed?
|
|
25
|
+
!open?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def accessible?
|
|
29
|
+
open?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -1,62 +1,82 @@
|
|
|
1
|
-
#
|
|
2
|
-
# destination needs to be accessible from the origin through portals. Note
|
|
3
|
-
# that Pathfinders do not take into account portals that characters should
|
|
4
|
-
# not be able to traverse, such as locked doors.
|
|
5
|
-
class Pathfinder
|
|
6
|
-
# @return [Room]
|
|
7
|
-
attr_reader :origin
|
|
8
|
-
|
|
9
|
-
# @return [Room]
|
|
10
|
-
attr_reader :destination
|
|
11
|
-
|
|
12
|
-
def initialize origin, destination
|
|
13
|
-
@origin = origin
|
|
14
|
-
@destination = destination
|
|
15
|
-
@path = nil
|
|
16
|
-
@paths = [[@origin]]
|
|
17
|
-
@visited = []
|
|
18
|
-
if @origin == @destination
|
|
19
|
-
@path = []
|
|
20
|
-
else
|
|
21
|
-
embark while @path.nil? && @paths.length > 0
|
|
22
|
-
end
|
|
23
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
24
2
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
|
|
3
|
+
module Gamefic
|
|
4
|
+
module Standard
|
|
5
|
+
# Pathfinders provide the shortest route between two rooms. The destination
|
|
6
|
+
# needs to be accessible from the origin through portals. Note that
|
|
7
|
+
# Pathfinder does not take into account portals that characters should not
|
|
8
|
+
# be able to traverse, such as locked doors.
|
|
9
|
+
#
|
|
10
|
+
class Pathfinder
|
|
11
|
+
# @return [Room]
|
|
12
|
+
attr_reader :origin
|
|
31
13
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
14
|
+
# @return [Room]
|
|
15
|
+
attr_reader :destination
|
|
16
|
+
|
|
17
|
+
# @param origin [Room]
|
|
18
|
+
# @param destination [Room]
|
|
19
|
+
def initialize(origin, destination)
|
|
20
|
+
@origin = origin
|
|
21
|
+
@destination = destination
|
|
22
|
+
@visited = []
|
|
23
|
+
if origin == destination
|
|
24
|
+
@path = []
|
|
25
|
+
else
|
|
26
|
+
embark [[origin]]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# An array of rooms starting with the first room after the origin and
|
|
31
|
+
# ending with the destination.
|
|
32
|
+
#
|
|
33
|
+
# The path will be empty if a path could not be found or the origin and
|
|
34
|
+
# destination are the same room.
|
|
35
|
+
#
|
|
36
|
+
# @return [Array<Room>]
|
|
37
|
+
def path
|
|
38
|
+
@path || []
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# True if there is a valid path from the origin to the destination (or
|
|
42
|
+
# the origin and destination are the same room).
|
|
43
|
+
#
|
|
44
|
+
def valid?
|
|
45
|
+
!!@path
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def embark(paths)
|
|
51
|
+
return if paths.empty?
|
|
52
|
+
|
|
53
|
+
new_paths = paths.each_with_object([]) do |path, acc|
|
|
54
|
+
updates = traverse(path)
|
|
55
|
+
acc.concat updates
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if new_paths.last&.last == destination
|
|
59
|
+
@path = new_paths.last
|
|
60
|
+
else
|
|
61
|
+
embark new_paths
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def traverse(path)
|
|
66
|
+
portals_with_destination(path).map do |portal|
|
|
67
|
+
next if @visited.include?(portal.destination)
|
|
68
|
+
|
|
69
|
+
return [path[1..] + [portal.destination]] if portal.destination == destination
|
|
36
70
|
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
def embark
|
|
40
|
-
new_paths = []
|
|
41
|
-
@paths.each { |path|
|
|
42
|
-
last = path.last
|
|
43
|
-
portals = last.children.that_are(Portal)
|
|
44
|
-
portals.each { |portal|
|
|
45
|
-
new_path = path.clone
|
|
46
|
-
if !@visited.include?(portal.destination)
|
|
47
|
-
new_path.push portal.destination
|
|
48
71
|
@visited.push portal.destination
|
|
49
|
-
|
|
50
|
-
@path = new_path
|
|
51
|
-
@path.shift
|
|
52
|
-
break
|
|
53
|
-
end
|
|
54
|
-
new_paths.push new_path
|
|
72
|
+
path + [portal.destination]
|
|
55
73
|
end
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
.compact
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def portals_with_destination(path)
|
|
78
|
+
path.last.children.that_are(Portal).select(&:destination)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
61
81
|
end
|
|
62
82
|
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Gamefic
|
|
4
|
+
module Standard
|
|
5
|
+
# Common features of standard entities.
|
|
6
|
+
#
|
|
7
|
+
module Standardized
|
|
8
|
+
# @return [Boolean]
|
|
9
|
+
attr_writer :itemized
|
|
10
|
+
|
|
11
|
+
# @return [Boolean]
|
|
12
|
+
attr_writer :portable
|
|
13
|
+
|
|
14
|
+
# An optional description to use when itemizing entities in room
|
|
15
|
+
# descriptions. The locale_description will be used instead of adding
|
|
16
|
+
# the entity's name to a list.
|
|
17
|
+
#
|
|
18
|
+
# @return [String, nil]
|
|
19
|
+
attr_accessor :locale_description
|
|
20
|
+
|
|
21
|
+
# Itemized entities are automatically listed in room descriptions.
|
|
22
|
+
#
|
|
23
|
+
# @return [Boolean]
|
|
24
|
+
def itemized?
|
|
25
|
+
@itemized
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Portable entities can be taken with TAKE actions.
|
|
29
|
+
#
|
|
30
|
+
# @return [Boolean]
|
|
31
|
+
def portable?
|
|
32
|
+
@portable
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @return [Boolean]
|
|
36
|
+
def attached?
|
|
37
|
+
@attached ||= false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @param bool [Boolean]
|
|
41
|
+
def attached=(bool)
|
|
42
|
+
@attached = if parent.nil?
|
|
43
|
+
# @todo Log attachment failure
|
|
44
|
+
false
|
|
45
|
+
else
|
|
46
|
+
bool
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def parent=(new_parent)
|
|
51
|
+
self.attached = false unless new_parent == parent
|
|
52
|
+
super
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# The entity's parent room (i.e., the closest ascendant that is a Room).
|
|
56
|
+
#
|
|
57
|
+
# @return [Room]
|
|
58
|
+
def room
|
|
59
|
+
ascendant = parent
|
|
60
|
+
ascendant = ascendant.parent until ascendant.is_a?(Room) || ascendant.nil?
|
|
61
|
+
ascendant
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/gamefic-standard.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'gamefic'
|
|
4
|
+
require 'gamefic-grammar'
|
|
5
|
+
require 'gamefic-what'
|
|
4
6
|
|
|
5
7
|
module Gamefic
|
|
6
8
|
# The Gamefic standard library provides a base collection of entities and
|
|
@@ -10,15 +12,22 @@ module Gamefic
|
|
|
10
12
|
extend Gamefic::Scriptable
|
|
11
13
|
|
|
12
14
|
require 'gamefic-standard/version'
|
|
13
|
-
require 'gamefic-standard/grammar'
|
|
14
15
|
require 'gamefic-standard/articles'
|
|
15
16
|
require 'gamefic-standard/queries'
|
|
16
|
-
require 'gamefic-standard/
|
|
17
|
+
require 'gamefic-standard/standardized'
|
|
18
|
+
require 'gamefic-standard/enterable'
|
|
19
|
+
require 'gamefic-standard/openable'
|
|
20
|
+
require 'gamefic-standard/lockable'
|
|
17
21
|
require 'gamefic-standard/direction'
|
|
18
22
|
require 'gamefic-standard/entities'
|
|
19
23
|
require 'gamefic-standard/actions'
|
|
20
24
|
require 'gamefic-standard/introduction'
|
|
21
|
-
require 'gamefic-standard/
|
|
25
|
+
require 'gamefic-standard/pathfinder'
|
|
26
|
+
|
|
27
|
+
include Articles
|
|
28
|
+
include Grammar::Pronoun
|
|
29
|
+
include Actions
|
|
30
|
+
include Introduction
|
|
22
31
|
|
|
23
32
|
def connect(origin, destination, direction = nil, type: Portal, two_way: true)
|
|
24
33
|
origin.connect destination, direction: direction, type: type, two_way: two_way
|
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: 3.
|
|
4
|
+
version: 3.3.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: 2024-
|
|
11
|
+
date: 2024-10-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: gamefic
|
|
@@ -24,6 +24,34 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '3.3'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: gamefic-grammar
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: gamefic-what
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '1.0'
|
|
27
55
|
- !ruby/object:Gem::Dependency
|
|
28
56
|
name: opal
|
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,6 +150,7 @@ files:
|
|
|
122
150
|
- lib/gamefic-standard/actions/close.rb
|
|
123
151
|
- lib/gamefic-standard/actions/drop.rb
|
|
124
152
|
- lib/gamefic-standard/actions/enter.rb
|
|
153
|
+
- lib/gamefic-standard/actions/give.rb
|
|
125
154
|
- lib/gamefic-standard/actions/go.rb
|
|
126
155
|
- lib/gamefic-standard/actions/insert.rb
|
|
127
156
|
- lib/gamefic-standard/actions/inventory.rb
|
|
@@ -143,6 +172,7 @@ files:
|
|
|
143
172
|
- lib/gamefic-standard/actions/wait.rb
|
|
144
173
|
- lib/gamefic-standard/articles.rb
|
|
145
174
|
- lib/gamefic-standard/direction.rb
|
|
175
|
+
- lib/gamefic-standard/enterable.rb
|
|
146
176
|
- lib/gamefic-standard/entities.rb
|
|
147
177
|
- lib/gamefic-standard/entities/character.rb
|
|
148
178
|
- lib/gamefic-standard/entities/container.rb
|
|
@@ -156,21 +186,14 @@ files:
|
|
|
156
186
|
- lib/gamefic-standard/entities/scenery.rb
|
|
157
187
|
- lib/gamefic-standard/entities/supporter.rb
|
|
158
188
|
- lib/gamefic-standard/entities/thing.rb
|
|
159
|
-
- lib/gamefic-standard/give.rb
|
|
160
|
-
- lib/gamefic-standard/grammar.rb
|
|
161
|
-
- lib/gamefic-standard/grammar/attributes.rb
|
|
162
|
-
- lib/gamefic-standard/grammar/pronoun.rb
|
|
163
189
|
- lib/gamefic-standard/introduction.rb
|
|
164
|
-
- lib/gamefic-standard/
|
|
165
|
-
- lib/gamefic-standard/
|
|
166
|
-
- lib/gamefic-standard/modules/lockable.rb
|
|
167
|
-
- lib/gamefic-standard/modules/openable.rb
|
|
168
|
-
- lib/gamefic-standard/modules/standardized.rb
|
|
190
|
+
- lib/gamefic-standard/lockable.rb
|
|
191
|
+
- lib/gamefic-standard/openable.rb
|
|
169
192
|
- lib/gamefic-standard/pathfinder.rb
|
|
170
193
|
- lib/gamefic-standard/queries.rb
|
|
194
|
+
- lib/gamefic-standard/standardized.rb
|
|
171
195
|
- lib/gamefic-standard/version.rb
|
|
172
|
-
|
|
173
|
-
homepage: http://gamefic.com
|
|
196
|
+
homepage: https://gamefic.com
|
|
174
197
|
licenses:
|
|
175
198
|
- MIT
|
|
176
199
|
metadata: {}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Gamefic::Standard::Give
|
|
2
|
-
extend Gamefic::Scriptable
|
|
3
|
-
|
|
4
|
-
script do
|
|
5
|
-
respond :give, available, children do |actor, _character, _gift|
|
|
6
|
-
actor.tell 'Nothing happens.'
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
respond :give, available(Character), available do |actor, character, gift|
|
|
10
|
-
actor.tell "#{The character} doesn't want #{the gift}."
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
respond :give, available(Character), available do |actor, _character, gift|
|
|
14
|
-
actor.execute :take, gift if gift.parent != actor
|
|
15
|
-
|
|
16
|
-
actor.proceed if gift.parent == actor
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
interpret 'give :gift to :character', 'give :character :gift'
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Grammar
|
|
2
|
-
# A collection of attributes that enable grammar features for entities, such
|
|
3
|
-
# as selecting their correct pronouns.
|
|
4
|
-
#
|
|
5
|
-
module Attributes
|
|
6
|
-
# @see #gender
|
|
7
|
-
attr_writer :gender
|
|
8
|
-
|
|
9
|
-
# @see #plural?
|
|
10
|
-
attr_writer :plural
|
|
11
|
-
|
|
12
|
-
# The gender of the object. Supported values are :male, :female, :neutral,
|
|
13
|
-
# and :other. Use :neutral for objects that don't have a gender (i.e.,
|
|
14
|
-
# "it"). Use :other for people or characters that have an unspecified or
|
|
15
|
-
# non-binary gender (i.e., "they").
|
|
16
|
-
#
|
|
17
|
-
# @return [Symbol]
|
|
18
|
-
def gender
|
|
19
|
-
@gender ||= :neutral
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
# True if the object should be referred to in the plural, e.g., "they"
|
|
23
|
-
# instead of "it."
|
|
24
|
-
# @return [Boolean]
|
|
25
|
-
#
|
|
26
|
-
def plural?
|
|
27
|
-
@plural ||= false
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# For now, the object's person is always assumed to be third
|
|
31
|
-
# (he/she/it/they). A future version of this library might support first
|
|
32
|
-
# (I/me) and second (you).
|
|
33
|
-
def person
|
|
34
|
-
3
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|