gamefic 0.6.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gamefic +3 -0
  3. data/lib/gamefic/character.rb +42 -6
  4. data/lib/gamefic/director/parser.rb +25 -25
  5. data/lib/gamefic/engine/tty.rb +14 -2
  6. data/lib/gamefic/engine.rb +8 -7
  7. data/lib/gamefic/grammar/gender.rb +1 -1
  8. data/lib/gamefic/grammar/pronouns.rb +53 -8
  9. data/lib/gamefic/grammar/verbs.rb +1 -0
  10. data/lib/gamefic/grammar/word_adapter.rb +31 -18
  11. data/lib/gamefic/html.rb +27 -13
  12. data/lib/gamefic/plot/article_mount.rb +1 -1
  13. data/lib/gamefic/plot/scene_mount.rb +27 -110
  14. data/lib/gamefic/{snapshots.rb → plot/snapshot.rb} +60 -29
  15. data/lib/gamefic/plot/you_mount.rb +1 -1
  16. data/lib/gamefic/plot.rb +56 -29
  17. data/lib/gamefic/query/base.rb +3 -1
  18. data/lib/gamefic/scene/active.rb +11 -18
  19. data/lib/gamefic/scene/base.rb +21 -0
  20. data/lib/gamefic/scene/conclusion.rb +11 -0
  21. data/lib/gamefic/scene/custom.rb +21 -0
  22. data/lib/gamefic/scene/multiple_choice/input.rb +11 -0
  23. data/lib/gamefic/scene/multiple_choice.rb +73 -0
  24. data/lib/gamefic/scene/passive.rb +17 -0
  25. data/lib/gamefic/scene/pause.rb +24 -0
  26. data/lib/gamefic/scene/question.rb +21 -0
  27. data/lib/gamefic/scene/yes_or_no.rb +30 -0
  28. data/lib/gamefic/scene.rb +10 -120
  29. data/lib/gamefic/script/base.rb +7 -2
  30. data/lib/gamefic/script.rb +4 -0
  31. data/lib/gamefic/shell/command/base.rb +38 -0
  32. data/lib/gamefic/shell/command/play.rb +51 -0
  33. data/lib/gamefic/shell/command.rb +4 -0
  34. data/lib/gamefic/shell/registry.rb +13 -0
  35. data/lib/gamefic/shell.rb +14 -71
  36. data/lib/gamefic/source/file.rb +1 -1
  37. data/lib/gamefic/source.rb +5 -0
  38. data/lib/gamefic/tester.rb +0 -1
  39. data/lib/gamefic/version.rb +1 -1
  40. data/lib/gamefic.rb +1 -6
  41. metadata +69 -61
  42. data/lib/gamefic/scene/concluded.rb +0 -22
  43. data/lib/gamefic/scene/multiplechoice.rb +0 -74
  44. data/lib/gamefic/scene/paused.rb +0 -26
  45. data/lib/gamefic/scene/yesorno.rb +0 -43
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamefic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-18 00:00:00.000000000 Z
11
+ date: 2016-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: An adventure game and interactive fiction framework
@@ -45,79 +45,88 @@ executables:
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - bin/gamefic
48
49
  - lib/gamefic.rb
49
- - lib/gamefic/grammar.rb
50
50
  - lib/gamefic/action.rb
51
- - lib/gamefic/stage.rb
51
+ - lib/gamefic/ansi.rb
52
+ - lib/gamefic/character.rb
53
+ - lib/gamefic/command.rb
52
54
  - lib/gamefic/core_ext/array.rb
53
55
  - lib/gamefic/core_ext/string.rb
56
+ - lib/gamefic/describable.rb
57
+ - lib/gamefic/direction.rb
58
+ - lib/gamefic/director.rb
59
+ - lib/gamefic/director/delegate.rb
60
+ - lib/gamefic/director/order.rb
61
+ - lib/gamefic/director/parser.rb
62
+ - lib/gamefic/engine.rb
54
63
  - lib/gamefic/engine/cgi.rb
55
64
  - lib/gamefic/engine/tty.rb
65
+ - lib/gamefic/entity.rb
66
+ - lib/gamefic/grammar.rb
67
+ - lib/gamefic/grammar/conjugator.rb
68
+ - lib/gamefic/grammar/gender.rb
69
+ - lib/gamefic/grammar/person.rb
70
+ - lib/gamefic/grammar/plural.rb
71
+ - lib/gamefic/grammar/pronouns.rb
72
+ - lib/gamefic/grammar/tense.rb
73
+ - lib/gamefic/grammar/verb_set.rb
74
+ - lib/gamefic/grammar/verbs.rb
75
+ - lib/gamefic/grammar/word_adapter.rb
56
76
  - lib/gamefic/html.rb
57
- - lib/gamefic/describable.rb
58
- - lib/gamefic/command.rb
59
- - lib/gamefic/script/base.rb
60
- - lib/gamefic/script/file.rb
61
- - lib/gamefic/script/text.rb
77
+ - lib/gamefic/keywords.rb
78
+ - lib/gamefic/node.rb
79
+ - lib/gamefic/plot.rb
80
+ - lib/gamefic/plot/article_mount.rb
81
+ - lib/gamefic/plot/command_mount.rb
82
+ - lib/gamefic/plot/entity_mount.rb
83
+ - lib/gamefic/plot/query_mount.rb
84
+ - lib/gamefic/plot/scene_mount.rb
85
+ - lib/gamefic/plot/snapshot.rb
86
+ - lib/gamefic/plot/you_mount.rb
87
+ - lib/gamefic/query.rb
88
+ - lib/gamefic/query/ambiguous_children.rb
89
+ - lib/gamefic/query/base.rb
62
90
  - lib/gamefic/query/children.rb
91
+ - lib/gamefic/query/expression.rb
63
92
  - lib/gamefic/query/family.rb
93
+ - lib/gamefic/query/many_children.rb
64
94
  - lib/gamefic/query/matches.rb
65
95
  - lib/gamefic/query/parent.rb
96
+ - lib/gamefic/query/plural_children.rb
66
97
  - lib/gamefic/query/self.rb
67
98
  - lib/gamefic/query/siblings.rb
68
- - lib/gamefic/query/many_children.rb
69
- - lib/gamefic/query/ambiguous_children.rb
70
- - lib/gamefic/query/base.rb
71
- - lib/gamefic/query/expression.rb
72
- - lib/gamefic/query/plural_children.rb
73
99
  - lib/gamefic/query/text.rb
74
100
  - lib/gamefic/rule.rb
75
101
  - lib/gamefic/scene.rb
76
- - lib/gamefic/scene/concluded.rb
77
- - lib/gamefic/scene/multiplechoice.rb
78
- - lib/gamefic/scene/paused.rb
79
- - lib/gamefic/scene/yesorno.rb
80
102
  - lib/gamefic/scene/active.rb
103
+ - lib/gamefic/scene/base.rb
104
+ - lib/gamefic/scene/conclusion.rb
105
+ - lib/gamefic/scene/custom.rb
106
+ - lib/gamefic/scene/multiple_choice.rb
107
+ - lib/gamefic/scene/multiple_choice/input.rb
108
+ - lib/gamefic/scene/passive.rb
109
+ - lib/gamefic/scene/pause.rb
110
+ - lib/gamefic/scene/question.rb
111
+ - lib/gamefic/scene/yes_or_no.rb
112
+ - lib/gamefic/script.rb
113
+ - lib/gamefic/script/base.rb
114
+ - lib/gamefic/script/file.rb
115
+ - lib/gamefic/script/text.rb
116
+ - lib/gamefic/serialized.rb
81
117
  - lib/gamefic/shell.rb
82
- - lib/gamefic/snapshots.rb
83
- - lib/gamefic/tester.rb
84
- - lib/gamefic/version.rb
85
- - lib/gamefic/node.rb
86
- - lib/gamefic/syntax.rb
118
+ - lib/gamefic/shell/command.rb
119
+ - lib/gamefic/shell/command/base.rb
120
+ - lib/gamefic/shell/command/play.rb
121
+ - lib/gamefic/shell/registry.rb
87
122
  - lib/gamefic/source.rb
88
123
  - lib/gamefic/source/base.rb
89
124
  - lib/gamefic/source/file.rb
90
125
  - lib/gamefic/source/text.rb
91
- - lib/gamefic/ansi.rb
92
- - lib/gamefic/script.rb
93
- - lib/gamefic/character.rb
94
- - lib/gamefic/entity.rb
95
- - lib/gamefic/query.rb
96
- - lib/gamefic/engine.rb
97
- - lib/gamefic/direction.rb
98
- - lib/gamefic/director/order.rb
99
- - lib/gamefic/director/delegate.rb
100
- - lib/gamefic/director/parser.rb
101
- - lib/gamefic/plot/query_mount.rb
102
- - lib/gamefic/plot/article_mount.rb
103
- - lib/gamefic/plot/you_mount.rb
104
- - lib/gamefic/plot/command_mount.rb
105
- - lib/gamefic/plot/entity_mount.rb
106
- - lib/gamefic/plot/scene_mount.rb
107
- - lib/gamefic/director.rb
108
- - lib/gamefic/grammar/conjugator.rb
109
- - lib/gamefic/grammar/person.rb
110
- - lib/gamefic/grammar/plural.rb
111
- - lib/gamefic/grammar/tense.rb
112
- - lib/gamefic/grammar/verb_set.rb
113
- - lib/gamefic/grammar/verbs.rb
114
- - lib/gamefic/grammar/gender.rb
115
- - lib/gamefic/grammar/pronouns.rb
116
- - lib/gamefic/grammar/word_adapter.rb
117
- - lib/gamefic/serialized.rb
118
- - lib/gamefic/keywords.rb
119
- - lib/gamefic/plot.rb
120
- - bin/gamefic
126
+ - lib/gamefic/stage.rb
127
+ - lib/gamefic/syntax.rb
128
+ - lib/gamefic/tester.rb
129
+ - lib/gamefic/version.rb
121
130
  homepage: http://gamefic.com
122
131
  licenses:
123
132
  - MIT
@@ -128,19 +137,18 @@ require_paths:
128
137
  - lib
129
138
  required_ruby_version: !ruby/object:Gem::Requirement
130
139
  requirements:
131
- - - '>='
140
+ - - ">="
132
141
  - !ruby/object:Gem::Version
133
142
  version: 1.9.3
134
143
  required_rubygems_version: !ruby/object:Gem::Requirement
135
144
  requirements:
136
- - - '>='
145
+ - - ">="
137
146
  - !ruby/object:Gem::Version
138
147
  version: '0'
139
148
  requirements: []
140
149
  rubyforge_project:
141
- rubygems_version: 2.0.14
150
+ rubygems_version: 2.4.8
142
151
  signing_key:
143
152
  specification_version: 4
144
153
  summary: Gamefic
145
154
  test_files: []
146
- has_rdoc:
@@ -1,22 +0,0 @@
1
- module Gamefic
2
-
3
- class ConcludedSceneManager < SceneManager
4
- def scene_class
5
- ConcludedScene
6
- end
7
- def state
8
- @state ||= "Concluded"
9
- end
10
- def prompt
11
- @prompt ||= "GAME OVER"
12
- end
13
- end
14
-
15
- class ConcludedScene < Scene
16
- # TODO: This class might need some logic for closing the game. Then again,
17
- # maybe not. The Concluded state might be enough for the plot to know what
18
- # to do. In fact, if the plot detects the Concluded state, it might never
19
- # get around to calling the scene's finish proc.
20
- end
21
-
22
- end
@@ -1,74 +0,0 @@
1
- module Gamefic
2
-
3
- class MultipleChoiceSceneManager < SceneManager
4
- def data_class
5
- MultipleChoiceSceneData
6
- end
7
- def scene_class
8
- MultipleChoiceScene
9
- end
10
- def state
11
- @state ||= "MultipleChoice"
12
- end
13
- def prompt
14
- @prompt ||= "Enter a choice:"
15
- end
16
- end
17
-
18
- class MultipleChoiceSceneData < SceneData
19
- attr_accessor :index, :selection, :options
20
- def options
21
- @options ||= []
22
- end
23
- end
24
-
25
- class MultipleChoiceScene < Scene
26
- def initialize manager, key
27
- super
28
- @prompt ||= "Enter a choice:"
29
- end
30
- def start actor
31
- super
32
- list = '<ol class="multiple_choice">'
33
- @data.options.each { |o|
34
- list += "<li>#{o}</li>"
35
- }
36
- list += "</ol>"
37
- actor.tell list
38
- @data.prompt ||= @prompt
39
- end
40
- def finish actor, input
41
- @data.input = input
42
- @data.index = nil
43
- @data.selection = nil
44
- if @data.input.strip =~ /[0-9]+/
45
- if input.to_i > 0
46
- @data.index = input.to_i - 1
47
- @data.selection = @data.options[@data.index]
48
- @data.index = nil if @data.selection.nil?
49
- end
50
- else
51
- i = 0
52
- @data.options.each { |o|
53
- if o.casecmp(@data.input).zero?
54
- @data.index = i
55
- @data.selection = o
56
- break
57
- end
58
- i += 1
59
- }
60
- end
61
- if @data.selection.nil?
62
- # TODO: Consider allowing for an error block to customize this
63
- # response.
64
- actor.tell "That's not a valid selection."
65
- else
66
- @data.next_cue ||= :active
67
- if !@finish.nil?
68
- @finish.call actor, @data
69
- end
70
- end
71
- end
72
- end
73
-
74
- end
@@ -1,26 +0,0 @@
1
- module Gamefic
2
-
3
- class PausedSceneManager < SceneManager
4
- def scene_class
5
- PausedScene
6
- end
7
- def data_class
8
- PausedSceneData
9
- end
10
- def state
11
- @state ||= "Paused"
12
- end
13
- def prompt
14
- @prompt ||= "Press enter to continue..."
15
- end
16
- end
17
-
18
- class PausedSceneData < SceneData
19
- attr_accessor :next_cue
20
- end
21
-
22
- class PausedScene < Scene
23
-
24
- end
25
-
26
- end
@@ -1,43 +0,0 @@
1
- module Gamefic
2
-
3
- class YesOrNoSceneManager < SceneManager
4
- def scene_class
5
- YesOrNoScene
6
- end
7
- def data_class
8
- YesOrNoSceneData
9
- end
10
- def state
11
- @state ||= "YesOrNo"
12
- end
13
- def prompt
14
- @prompt ||= "Enter Yes Or No:"
15
- end
16
- end
17
-
18
- class YesOrNoSceneData < SceneData
19
- # @!attribute [rw] answer
20
- # @return [String] The answer provided by the user, normalized to either "yes" or "no"
21
- attr_accessor :answer
22
- end
23
-
24
- class YesOrNoScene < Scene
25
- def finish actor, input
26
- @data.input = input
27
- # The input in a YesOrNoScene gets normalized to "yes" or "no"
28
- @data.answer = nil
29
- if input.downcase[0, 1] == "y"
30
- @data.answer = "yes"
31
- elsif input.downcase[0, 1] == "n"
32
- @data.answer = "no"
33
- end
34
- if @data.answer.nil?
35
- actor.tell "Please enter Yes or No."
36
- else
37
- return if @finish.nil?
38
- @finish.call actor, data
39
- end
40
- end
41
- end
42
-
43
- end