gamefic 0.2.0 → 0.6.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.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/lib/gamefic/action.rb +87 -56
  3. data/lib/gamefic/ansi.rb +55 -0
  4. data/lib/gamefic/character.rb +130 -76
  5. data/lib/gamefic/command.rb +19 -0
  6. data/lib/gamefic/core_ext/array.rb +51 -40
  7. data/lib/gamefic/core_ext/string.rb +4 -0
  8. data/lib/gamefic/describable.rb +108 -46
  9. data/lib/gamefic/direction.rb +46 -0
  10. data/lib/gamefic/director/delegate.rb +91 -0
  11. data/lib/gamefic/director/order.rb +10 -0
  12. data/lib/gamefic/director/parser.rb +119 -0
  13. data/lib/gamefic/director.rb +16 -197
  14. data/lib/gamefic/engine/cgi.rb +221 -0
  15. data/lib/gamefic/engine/tty.rb +237 -0
  16. data/lib/gamefic/engine.rb +88 -67
  17. data/lib/gamefic/entity.rb +96 -69
  18. data/lib/gamefic/grammar/conjugator.rb +20 -0
  19. data/lib/gamefic/grammar/gender.rb +11 -0
  20. data/lib/gamefic/grammar/person.rb +10 -0
  21. data/lib/gamefic/grammar/plural.rb +13 -0
  22. data/lib/gamefic/grammar/pronouns.rb +60 -0
  23. data/lib/gamefic/grammar/tense.rb +6 -0
  24. data/lib/gamefic/grammar/verb_set.rb +43 -0
  25. data/lib/gamefic/grammar/verbs.rb +25 -0
  26. data/lib/gamefic/grammar/word_adapter.rb +36 -0
  27. data/lib/gamefic/grammar.rb +13 -0
  28. data/lib/gamefic/html.rb +53 -0
  29. data/lib/gamefic/keywords.rb +51 -33
  30. data/lib/gamefic/node.rb +65 -58
  31. data/lib/gamefic/plot/article_mount.rb +22 -0
  32. data/lib/gamefic/plot/command_mount.rb +88 -0
  33. data/lib/gamefic/plot/entity_mount.rb +45 -0
  34. data/lib/gamefic/plot/query_mount.rb +9 -0
  35. data/lib/gamefic/plot/scene_mount.rb +181 -0
  36. data/lib/gamefic/plot/you_mount.rb +22 -0
  37. data/lib/gamefic/plot.rb +296 -247
  38. data/lib/gamefic/query/ambiguous_children.rb +5 -0
  39. data/lib/gamefic/query/base.rb +265 -0
  40. data/lib/gamefic/query/children.rb +10 -0
  41. data/lib/gamefic/query/expression.rb +47 -0
  42. data/lib/gamefic/query/family.rb +10 -0
  43. data/lib/gamefic/query/many_children.rb +7 -0
  44. data/lib/gamefic/query/matches.rb +11 -0
  45. data/lib/gamefic/query/parent.rb +10 -0
  46. data/lib/gamefic/query/plural_children.rb +14 -0
  47. data/lib/gamefic/query/self.rb +10 -0
  48. data/lib/gamefic/query/siblings.rb +10 -0
  49. data/lib/gamefic/query/text.rb +43 -0
  50. data/lib/gamefic/query.rb +19 -203
  51. data/lib/gamefic/rule.rb +18 -0
  52. data/lib/gamefic/scene/active.rb +25 -0
  53. data/lib/gamefic/scene/concluded.rb +22 -0
  54. data/lib/gamefic/scene/multiplechoice.rb +74 -0
  55. data/lib/gamefic/scene/paused.rb +26 -0
  56. data/lib/gamefic/scene/yesorno.rb +43 -0
  57. data/lib/gamefic/scene.rb +125 -0
  58. data/lib/gamefic/script/base.rb +33 -0
  59. data/lib/gamefic/script/file.rb +14 -0
  60. data/lib/gamefic/script/text.rb +14 -0
  61. data/lib/gamefic/script.rb +9 -0
  62. data/lib/gamefic/serialized.rb +24 -0
  63. data/lib/gamefic/shell.rb +9 -247
  64. data/lib/gamefic/snapshots.rb +134 -0
  65. data/lib/gamefic/source/base.rb +12 -0
  66. data/lib/gamefic/source/file.rb +23 -0
  67. data/lib/gamefic/source/text.rb +16 -0
  68. data/lib/gamefic/source.rb +9 -0
  69. data/lib/gamefic/stage.rb +75 -0
  70. data/lib/gamefic/syntax.rb +106 -124
  71. data/lib/gamefic/tester.rb +20 -0
  72. data/lib/gamefic/version.rb +3 -0
  73. data/lib/gamefic.rb +18 -12
  74. metadata +102 -70
  75. data/lib/gamefic/base.rb +0 -10
  76. data/lib/gamefic/before.rb +0 -12
  77. data/lib/gamefic/import/basics/actions/close.rb +0 -16
  78. data/lib/gamefic/import/basics/actions/commands.rb +0 -3
  79. data/lib/gamefic/import/basics/actions/drop-in.rb +0 -17
  80. data/lib/gamefic/import/basics/actions/drop-on.rb +0 -16
  81. data/lib/gamefic/import/basics/actions/drop.rb +0 -30
  82. data/lib/gamefic/import/basics/actions/enter.rb +0 -16
  83. data/lib/gamefic/import/basics/actions/go.rb +0 -35
  84. data/lib/gamefic/import/basics/actions/inventory.rb +0 -8
  85. data/lib/gamefic/import/basics/actions/leave.rb +0 -29
  86. data/lib/gamefic/import/basics/actions/look-in-at.rb +0 -27
  87. data/lib/gamefic/import/basics/actions/look-under.rb +0 -3
  88. data/lib/gamefic/import/basics/actions/look.rb +0 -71
  89. data/lib/gamefic/import/basics/actions/nil.rb +0 -25
  90. data/lib/gamefic/import/basics/actions/open.rb +0 -23
  91. data/lib/gamefic/import/basics/actions/quit.rb +0 -3
  92. data/lib/gamefic/import/basics/actions/take.rb +0 -107
  93. data/lib/gamefic/import/basics/entities/container.rb +0 -8
  94. data/lib/gamefic/import/basics/entities/entity.rb +0 -11
  95. data/lib/gamefic/import/basics/entities/fixture.rb +0 -5
  96. data/lib/gamefic/import/basics/entities/item.rb +0 -5
  97. data/lib/gamefic/import/basics/entities/portal.rb +0 -40
  98. data/lib/gamefic/import/basics/entities/room.rb +0 -30
  99. data/lib/gamefic/import/basics/entities/scenery.rb +0 -5
  100. data/lib/gamefic/import/basics/entities/supporter.rb +0 -6
  101. data/lib/gamefic/import/basics/entities/thing.rb +0 -16
  102. data/lib/gamefic/import/basics/queries/reachable.rb +0 -38
  103. data/lib/gamefic/import/basics/queries/room.rb +0 -8
  104. data/lib/gamefic/import/basics/queries/visible.rb +0 -32
  105. data/lib/gamefic/import/basics/rules/has-enough-light.rb +0 -14
  106. data/lib/gamefic/import/basics.old/actions/container.rb +0 -112
  107. data/lib/gamefic/import/basics.old/actions/inventory.rb +0 -50
  108. data/lib/gamefic/import/basics.old/actions/look.rb +0 -53
  109. data/lib/gamefic/import/basics.old/actions/meta.rb +0 -6
  110. data/lib/gamefic/import/basics.old/actions/traversal.rb +0 -35
  111. data/lib/gamefic/import/basics.old/actions.rb +0 -1
  112. data/lib/gamefic/import/basics.old/entities/container.rb +0 -3
  113. data/lib/gamefic/import/basics.old/entities/fixture.rb +0 -3
  114. data/lib/gamefic/import/basics.old/entities/item.rb +0 -3
  115. data/lib/gamefic/import/basics.old/entities/portal.rb +0 -43
  116. data/lib/gamefic/import/basics.old/entities/room.rb +0 -27
  117. data/lib/gamefic/import/basics.old/entities/scenery.rb +0 -3
  118. data/lib/gamefic/import/basics.old/entities/supporter.rb +0 -3
  119. data/lib/gamefic/import/basics.old/entities.rb +0 -1
  120. data/lib/gamefic/import/basics.old/room_modes.rb +0 -48
  121. data/lib/gamefic/import/basics.rb +0 -6
  122. data/lib/gamefic/import/room_modes.rb +0 -48
  123. data/lib/gamefic/import/standard.rb +0 -1
  124. data/lib/gamefic/meta.rb +0 -12
  125. data/lib/gamefic/optionset.rb +0 -114
  126. data/lib/gamefic/requirement.rb +0 -14
  127. data/lib/gamefic/story.rb +0 -14
  128. data/lib/gamefic/thing.rb +0 -7
@@ -1,112 +0,0 @@
1
- respond :look, Query::Family.new(Container) do |actor, thing|
2
- passthru
3
- if thing.closeable?
4
- actor.tell "#{thing.longname.specify.cap_first} is #{thing.closed? ? 'closed' : 'open'}."
5
- end
6
- end
7
-
8
- respond :look_inside, Query::Family.new(Container) do |actor, container|
9
- if container.closed?
10
- actor.tell "#{container.longname.cap_first.specify} is closed."
11
- else
12
- if container.children.length == 0
13
- actor.tell "You don't find anything."
14
- else
15
- if container.children.length == 1
16
- actor.tell "#{container.longname.specify.cap_first} contains #{container.children[0].longname}."
17
- else
18
- actor.tell "#{container.longname.specify.cap_first} contains: #{container.children.join_and(', ')}."
19
- end
20
- end
21
- end
22
- end
23
- xlate "look inside :container", :look_inside, :container
24
- xlate "search :container", :look_inside, :container
25
- xlate "look in :container", :look_inside, :container
26
-
27
- respond :look_in_at, Query::Family.new(Container), Query::Subquery.new(Entity) do |actor, container, item|
28
- if container.closed?
29
- actor.tell "#{container.longname.cap_first.specify} is closed."
30
- else
31
- actor.tell item.description
32
- end
33
- end
34
-
35
- respond :look_in_at, Query::Family.new(Container), Query::Text.new() do |actor, container, item|
36
- if container.closed?
37
- actor.tell "#{container.longname.cap_first.specify} is closed."
38
- else
39
- passthru
40
- end
41
- end
42
-
43
- xlate "look at :item in :container", :look_in_at, :container, :item
44
- xlate "look :item in :container", :look_in_at, :container, :item
45
-
46
- respond :take_from, Query::Family.new(Container), Query::Subquery.new(Thing) do |actor, container, item|
47
- # TODO: Make sure thing is portable
48
- if container.closed?
49
- actor.tell "#{container.longname.cap_first.specify} is closed."
50
- else
51
- item.parent = actor
52
- actor.tell "You take #{item.longname} from #{container.longname.specify}."
53
- end
54
- end
55
- xlate "take :item from :container", :take_from, :container, :item
56
- xlate "get :item from :container", :take_from, :container, :item
57
- xlate "remove :item from :container", :take_from, :container, :item
58
-
59
- respond :drop_in, Query::Family.new(Container), Query::Children.new() do |actor, container, item|
60
- if container.closed?
61
- actor.tell "#{container.longname.cap_first.specify} is closed."
62
- else
63
- item.parent = container
64
- actor.tell "You put #{item.longname} in #{container.longname}."
65
- end
66
- end
67
- xlate "drop :item in :container", :drop_in, :container, :item
68
- xlate "put :item in :container", :drop_in, :container, :item
69
- xlate "place :item in :container", :drop_in, :container, :item
70
-
71
- respond :open, Query::Text.new() do |actor, string|
72
- actor.tell "You don't see any \"#{string}\" here."
73
- end
74
-
75
- respond :open, Query::Family.new(Entity) do |actor, thing|
76
- actor.tell "You can't open #{thing.longname.specify}."
77
- end
78
-
79
- respond :open, Query::Family.new(Container) do |actor, container|
80
- if container.closeable?
81
- if container.closed?
82
- actor.tell "You open #{container.longname.specify}."
83
- container.closed = false
84
- actor.perform "look inside #{container.longname}"
85
- else
86
- actor.tell "It's already open."
87
- end
88
- else
89
- actor.tell "You can't open #{container.longname.specify}."
90
- end
91
- end
92
-
93
- respond :close, Query::Text.new() do |actor, string|
94
- actor.tell "You don't see any \"#{string}\" here."
95
- end
96
-
97
- respond :close, Query::Family.new(Entity) do |actor, thing|
98
- actor.tell "You can't close #{thing.longname.specify}."
99
- end
100
-
101
- respond :close, Query::Family.new(Container) do |actor, container|
102
- if container.closeable?
103
- if container.closed?
104
- actor.tell "It's already closed."
105
- else
106
- actor.tell "You close #{container.longname.specify}."
107
- container.closed = true
108
- end
109
- else
110
- actor.tell "You can't close #{container.longname.specify}."
111
- end
112
- end
@@ -1,50 +0,0 @@
1
- respond :inventory do |actor|
2
- if actor.children.length > 0
3
- actor.tell actor.children.join(', ')
4
- else
5
- actor.tell "You aren't carrying anything."
6
- end
7
- end
8
- xlate "i", :inventory
9
-
10
- respond :take, Query::Siblings.new(Thing) do |actor, thing|
11
- # TODO: Make sure the thing is portable or whatever
12
- thing.parent = actor
13
- actor.tell "You take #{the thing}.", true
14
- end
15
-
16
- respond :take, Query::Siblings.new() do |actor, thing|
17
- actor.tell "You can't carry #{the thing}."
18
- end
19
-
20
- respond :take, Query::Text.new() do |actor, thing|
21
- containers = actor.children.that_are(Container)
22
- containers = containers + actor.parent.children.that_are(Container)
23
- found = false
24
- containers.each { |container|
25
- if container.closed? == false
26
- query = Query::Children.new(Portable)
27
- result = query.execute(container, thing)
28
- if result.objects.length == 1
29
- found = true
30
- actor.perform "take #{result.objects[0].name} from #{container.name}"
31
- break
32
- end
33
- end
34
- }
35
- if found == false
36
- actor.tell "You don't see any \"#{thing}\" here."
37
- end
38
- end
39
-
40
- respond :drop, Query::Children.new() do |actor, thing|
41
- thing.parent = actor.parent
42
- actor.tell "You drop #{the thing}.", true
43
- end
44
-
45
- xlate "get :thing", :take, :thing
46
- xlate "pick :thing up", :take, :thing
47
- xlate "pick up :thing", :take, :thing
48
-
49
- xlate "put down :thing", :drop, :thing
50
- xlate "put :thing down", :drop, :thing
@@ -1,53 +0,0 @@
1
- OptionSet.new(Thing, :itemized)
2
-
3
- respond :look, Query::Parent.new() do |actor, room|
4
- actor.tell actor.parent.name.cap_first
5
- actor.tell actor.parent.description
6
- chars = actor.parent.children.that_are(Character) - [actor]
7
- if chars.length > 0
8
- actor.tell "Others here: #{chars.join(", ")}"
9
- end
10
- items = actor.parent.children.that_are(:itemized) - [actor]
11
- if items.length > 0
12
- actor.tell "Visible items: #{items.join(", ")}"
13
- end
14
- portals = actor.parent.children.that_are(Portal)
15
- if portals.length > 0
16
- actor.tell "Obvious exits: #{portals.join(', ')}"
17
- else
18
- actor.tell "Obvious exits: none"
19
- end
20
- end
21
- xlate "look", :look, "around"
22
-
23
- respond :look, Query::Family.new() do |actor, thing|
24
- actor.tell thing.description
25
- end
26
-
27
- respond :look, Query::Text.new() do |actor, string|
28
- containers = actor.children.that_are(Container)
29
- containers = containers + actor.parent.children.that_are(Container)
30
- found = false
31
- containers.each { |container|
32
- if container.closed? == false
33
- query = Query::Children.new(Portable)
34
- result = query.execute(container, string)
35
- if result.objects.length == 1
36
- found = true
37
- actor.tell "You look at #{result.objects[0].name.specify} in #{container.name.specify}."
38
- actor.perform "look #{result.objects[0].name} in #{container.name}"
39
- break
40
- end
41
- end
42
- }
43
- if found == false
44
- actor.tell "You don't see any \"#{string}\" here."
45
- end
46
- end
47
-
48
- xlate "look at :thing", :look, :thing
49
- xlate "l", :look
50
- xlate "l :thing", :look, :thing
51
- xlate "examine :thing", :look, :thing
52
- xlate "exam :thing", :look, :thing
53
- xlate "x :thing", :look, :thing
@@ -1,6 +0,0 @@
1
- meta :quit do |actor|
2
- actor.state = GameOverState.new(actor)
3
- end
4
- meta :commands do |actor|
5
- actor.tell actor.plot.commandwords.sort.join(", ")
6
- end
@@ -1,35 +0,0 @@
1
- respond :go, Query::Siblings.new(Portal) do |actor, portal|
2
- actor.parent = portal.destination
3
- actor.tell "You go #{portal.name}."
4
- actor.perform "look"
5
- end
6
-
7
- respond :go, Query::Text.new() do |actor, string|
8
- actor.tell "You don't see any exit \"#{string}\" from here."
9
- end
10
-
11
- respond :go do |actor|
12
- actor.tell "Where do you want to go?"
13
- end
14
-
15
- xlate "north", :go, "north"
16
- xlate "south", :go, "south"
17
- xlate "west", :go, "west"
18
- xlate "east", :go, "east"
19
- xlate "up", :go, "up"
20
- xlate "down", :go, "down"
21
- xlate "northwest", :go, "northwest"
22
- xlate "northeast", :go, "northeast"
23
- xlate "southwest", :go, "southwest"
24
- xlate "southeast", :go, "southeast"
25
-
26
- xlate "n", :go, "north"
27
- xlate "s", :go, "south"
28
- xlate "w", :go, "west"
29
- xlate "e", :go, "east"
30
- xlate "u", :go, "up"
31
- xlate "d", :go, "down"
32
- xlate "nw", :go, "northwest"
33
- xlate "ne", :go, "northeast"
34
- xlate "sw", :go, "southwest"
35
- xlate "se", :go, "southeast"
@@ -1 +0,0 @@
1
- import 'basics/actions/*'
@@ -1,3 +0,0 @@
1
- class Container < Thing
2
-
3
- end
@@ -1,3 +0,0 @@
1
- class Fixture < Entity
2
-
3
- end
@@ -1,3 +0,0 @@
1
- class Item < Thing
2
-
3
- end
@@ -1,43 +0,0 @@
1
- class Portal < Entity
2
- attr_accessor :destination
3
- #def initialize
4
- # super
5
- # @destination = nil
6
- #end
7
- def find_reverse
8
- rev = Portal.reverse(self.name)
9
- if rev != nil
10
- destination.children.that_are(Portal).each { |c|
11
- if c.name == rev
12
- return c
13
- end
14
- }
15
- end
16
- end
17
- def self.reverse(direction)
18
- case direction.downcase
19
- when "north"
20
- "south"
21
- when "south"
22
- "north"
23
- when "west"
24
- "east"
25
- when "east"
26
- "west"
27
- when "northwest"
28
- "southeast"
29
- when "southeast"
30
- "northwest"
31
- when "northeast"
32
- "southwest"
33
- when "southwest"
34
- "northeast"
35
- when "up"
36
- "down"
37
- when "down"
38
- "up"
39
- else
40
- nil
41
- end
42
- end
43
- end
@@ -1,27 +0,0 @@
1
- import 'basics/entities/portal'
2
-
3
- class Room < Entity
4
- def connect(destination, direction, type = Portal, two_way = true)
5
- portal = type.new self.plot, :name => direction, :parent => self, :destination => destination
6
- if two_way == true
7
- reverse = Portal.reverse(direction)
8
- if reverse == nil
9
- raise "\"#{direction.cap_first}\" does not have an opposite direction"
10
- end
11
- portal2 = type.new(self.plot, {
12
- :name => reverse,
13
- :parent => destination,
14
- :destination => self
15
- })
16
- end
17
- portal
18
- end
19
- def synonyms
20
- super.to_s + " around"
21
- end
22
- def tell(message, refresh = false)
23
- children.each { |c|
24
- c.tell message, refresh
25
- }
26
- end
27
- end
@@ -1,3 +0,0 @@
1
- class Scenery < Entity
2
-
3
- end
@@ -1,3 +0,0 @@
1
- class Supporter < Thing
2
-
3
- end
@@ -1 +0,0 @@
1
- import 'basics/entities/*'
@@ -1,48 +0,0 @@
1
- module RoomModes
2
- attr_writer :description_mode
3
- def description_seen
4
- @description_seen ||= Array.new
5
- end
6
- def description_seen=(value)
7
- if value.kind_of?(Array)
8
- @description_seen = value
9
- else
10
- raise "Character#description_seen must be an Array"
11
- end
12
- end
13
- def description_mode
14
- @description_mode ||= "verbose"
15
- end
16
- end
17
-
18
- class Character
19
- include RoomModes
20
- end
21
-
22
- respond :go, Query::Siblings.new(Portal) do |actor, portal|
23
- actor.tell "You go #{portal.name}."
24
- actor.parent = portal.destination
25
- if actor.description_mode == "superbrief" or (actor.description_mode == "brief" and actor.description_seen.include?(actor.parent))
26
- actor.tell actor.parent.longname.cap_first
27
- else
28
- actor.perform "look"
29
- end
30
- if actor.description_seen.include?(actor.parent) == false
31
- actor.description_seen.push actor.parent
32
- end
33
- end
34
-
35
- respond :brief do |actor|
36
- actor.description_mode = "brief"
37
- actor.tell "You are now in BRIEF mode. Detailed descriptions of rooms will only be displayed the first time you visit them. Other options are SUPERBRIEF and VERBOSE."
38
- end
39
-
40
- respond :verbose do |actor|
41
- actor.description_mode = "verbose"
42
- actor.tell "You are now in VERBOSE mode. Detailed descriptions will be displayed every time you enter a room. Other options are BRIEF and SUPERBRIEF."
43
- end
44
-
45
- respond :superbrief do |actor|
46
- actor.description_mode = "superbrief"
47
- actor.tell "You are now in SUPERBRIEF mode. Detailed room descriptions will never be displayed unless you LOOK AROUND. Other options are BRIEF and VERBOSE."
48
- end
@@ -1,6 +0,0 @@
1
- import 'basics/entities/entity'
2
- import 'basics/entities/thing'
3
- import 'basics/entities/*'
4
- import 'basics/queries/*'
5
- import 'basics/actions/*'
6
- import 'basics/rules/*'
@@ -1,48 +0,0 @@
1
- module RoomModes
2
- attr_writer :description_mode
3
- def description_seen
4
- @description_seen ||= Array.new
5
- end
6
- def description_seen=(value)
7
- if value.kind_of?(Array)
8
- @description_seen = value
9
- else
10
- raise "Character#description_seen must be an Array"
11
- end
12
- end
13
- def description_mode
14
- @description_mode ||= "verbose"
15
- end
16
- end
17
-
18
- class Character
19
- include RoomModes
20
- end
21
-
22
- respond :go, Query::Siblings.new(Portal) do |actor, portal|
23
- actor.tell "You go #{portal.name}."
24
- actor.parent = portal.destination
25
- if actor.description_mode == "superbrief" or (actor.description_mode == "brief" and actor.description_seen.include?(actor.parent))
26
- actor.tell actor.parent.name.cap_first
27
- else
28
- actor.perform "look"
29
- end
30
- if actor.description_seen.include?(actor.parent) == false
31
- actor.description_seen.push actor.parent
32
- end
33
- end
34
-
35
- respond :brief do |actor|
36
- actor.description_mode = "brief"
37
- actor.tell "You are now in BRIEF mode. Detailed descriptions of rooms will only be displayed the first time you visit them. Other options are SUPERBRIEF and VERBOSE."
38
- end
39
-
40
- respond :verbose do |actor|
41
- actor.description_mode = "verbose"
42
- actor.tell "You are now in VERBOSE mode. Detailed descriptions will be displayed every time you enter a room. Other options are BRIEF and SUPERBRIEF."
43
- end
44
-
45
- respond :superbrief do |actor|
46
- actor.description_mode = "superbrief"
47
- actor.tell "You are now in SUPERBRIEF mode. Detailed room descriptions will never be displayed unless you LOOK AROUND. Other options are BRIEF and VERBOSE."
48
- end
@@ -1 +0,0 @@
1
- import 'basics'
data/lib/gamefic/meta.rb DELETED
@@ -1,12 +0,0 @@
1
- module Gamefic
2
-
3
- class Meta < Action
4
- def initialize *args
5
- super
6
- @plot.before @command, *@queries do |*args|
7
- @plot.pass :everything
8
- end
9
- end
10
- end
11
-
12
- end
@@ -1,114 +0,0 @@
1
- class OptionSet
2
- attr_accessor :options
3
- attr_reader :default
4
- def initialize *args
5
- @options = args
6
- if @options.length == 0
7
- raise "No options defined"
8
- end
9
- if @options.length == 1
10
- raise "Option sets require at least 2 options"
11
- end
12
- @default = @options[0]
13
- end
14
- def default=(val)
15
- if @options.include?(val) == false
16
- raise "Option #{val} not available"
17
- end
18
- @default = val
19
- end
20
- end
21
-
22
- module OptionMap
23
- def option_map
24
- @option_map ||= Hash.new
25
- end
26
- def options cls, *args
27
- os = OptionSet.new *args
28
- option_map[cls] ||= {}
29
- os.options.each { |o|
30
- if option_map[cls][o] != nil
31
- raise "Option #{o} already exists"
32
- end
33
- option_map[cls][o] = os
34
- }
35
- os
36
- end
37
- def get_default_for(cls, opt)
38
- os = get_option_set_for(cls, opt)
39
- if os == nil
40
- raise "Option does not exist"
41
- end
42
- return os.default
43
- end
44
- def set_default_for(cls, opt)
45
- os = get_option_set_for(cls, opt)
46
- os.default = opt
47
- end
48
- def get_all_option_sets_for(cls)
49
- all = []
50
- option_map.each_value { |s|
51
- s.each_key { |o|
52
- set = get_option_set_for(cls, o, false)
53
- if set != nil
54
- all.push set
55
- end
56
- }
57
- }
58
- all.uniq
59
- end
60
- def get_option_set_for(cls, opt, create_if_inherited = true)
61
- if option_map[cls] and option_map[cls][opt]
62
- return option_map[cls][opt]
63
- elsif cls.superclass
64
- os = get_option_set_for(cls.superclass, opt, false)
65
- if os != nil and create_if_inherited == true
66
- os = options(cls, *os.options)
67
- end
68
- return os
69
- end
70
- return nil
71
- end
72
- end
73
-
74
- module OptionSettings
75
- attr_reader :option_mapper
76
- def option_array
77
- @option_array ||= []
78
- end
79
- def option_select(opt)
80
- if option_array.include?(opt) == false
81
- set = option_mapper.get_option_set_for(self.class, opt)
82
- if set == nil
83
- raise "Invalid option #{opt}"
84
- end
85
- (set.options - [opt]).each { |o|
86
- option_array.delete o
87
- }
88
- option_array.push opt
89
- end
90
- end
91
- def option_unselect(opt)
92
- set = option_mapper.get_option_set_for(self.class, opt)
93
- if set == nil
94
- raise "Invalid option #{opt}"
95
- end
96
- option_array.delete opt
97
- end
98
- def option_selected?(opt)
99
- set = option_mapper.get_option_set_for(self.class, opt)
100
- return false if set.nil?
101
- return true if option_array.include?(opt)
102
- other = set.options & option_array
103
- if other.length == 0 and set.default == opt
104
- return true
105
- end
106
- return false
107
- end
108
- def is(opt)
109
- option_select opt
110
- end
111
- def is?(opt)
112
- option_selected?(opt)
113
- end
114
- end
@@ -1,14 +0,0 @@
1
- module Gamefic
2
-
3
- class Requirement
4
- def initialize plot, name, &proc
5
- @plot = plot
6
- @name = name
7
- @proc = proc
8
- end
9
- def test actor
10
- return @proc.call actor
11
- end
12
- end
13
-
14
- end
data/lib/gamefic/story.rb DELETED
@@ -1,14 +0,0 @@
1
- module Gamefic
2
-
3
- class Story < Plot
4
- def post_initialize
5
- Action.defaults.each {|a|
6
- add_action a
7
- }
8
- Syntax.defaults.each {|s|
9
- add_syntax s
10
- }
11
- end
12
- end
13
-
14
- end
data/lib/gamefic/thing.rb DELETED
@@ -1,7 +0,0 @@
1
- module Gamefic
2
-
3
- class Thing < Entity
4
-
5
- end
6
-
7
- end