gemwarrior 0.4.1 → 0.5

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gemwarrior +0 -0
  3. data/lib/gemwarrior/entities/creature.rb +13 -18
  4. data/lib/gemwarrior/entities/entity.rb +3 -9
  5. data/lib/gemwarrior/entities/item.rb +6 -13
  6. data/lib/gemwarrior/entities/items/bed.rb +19 -0
  7. data/lib/gemwarrior/entities/items/feather.rb +19 -0
  8. data/lib/gemwarrior/entities/items/gun.rb +19 -0
  9. data/lib/gemwarrior/entities/items/stalactite.rb +19 -0
  10. data/lib/gemwarrior/entities/items/stone.rb +19 -0
  11. data/lib/gemwarrior/entities/items/tree.rb +19 -0
  12. data/lib/gemwarrior/entities/location.rb +38 -74
  13. data/lib/gemwarrior/entities/monster.rb +12 -35
  14. data/lib/gemwarrior/entities/monsters/alexandrat.rb +30 -0
  15. data/lib/gemwarrior/entities/monsters/amberoo.rb +30 -0
  16. data/lib/gemwarrior/entities/monsters/amethystle.rb +30 -0
  17. data/lib/gemwarrior/entities/monsters/apatiger.rb +30 -0
  18. data/lib/gemwarrior/entities/monsters/aquamarine.rb +30 -0
  19. data/lib/gemwarrior/entities/monsters/bloodstorm.rb +30 -0
  20. data/lib/gemwarrior/entities/monsters/citrinaga.rb +30 -0
  21. data/lib/gemwarrior/entities/monsters/coraliz.rb +30 -0
  22. data/lib/gemwarrior/entities/monsters/cubicat.rb +30 -0
  23. data/lib/gemwarrior/entities/monsters/diaman.rb +30 -0
  24. data/lib/gemwarrior/entities/player.rb +117 -154
  25. data/lib/gemwarrior/evaluator.rb +31 -16
  26. data/lib/gemwarrior/game.rb +28 -26
  27. data/lib/gemwarrior/inventory.rb +14 -16
  28. data/lib/gemwarrior/misc/version.rb +1 -1
  29. data/lib/gemwarrior/misc/wordlist.rb +7 -1
  30. data/lib/gemwarrior/repl.rb +2 -2
  31. data/lib/gemwarrior/world.rb +130 -298
  32. metadata +20 -7
  33. data/lib/gemwarrior/defaults.rb +0 -137
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 638aef0b767f40757bdadab429977bdcd2f23c22
4
- data.tar.gz: 9e7a30b926f56dee75605ac92a41a966c6886e7c
3
+ metadata.gz: dda7511ef167bd6776d0da74d168cb2d99b17635
4
+ data.tar.gz: ceb694fe92e5528d0ec89a1e312a1878b0058e5f
5
5
  SHA512:
6
- metadata.gz: a231f1497002ec5a325e913b156595b067a5ccfabd77f966c6e4861d73a07a6197e1dc8ddc096d912c309df82b2bbf34189a80ebe51c99799e567b437580b93e
7
- data.tar.gz: ddd8a4352f8e0691a67c6e382221b4a8cbb05c9c3de312f7ab7545e8e82a126e5812fba2fcf81bb4abfe6108a29343d2a0e9df06ee3a50501db8d516af4bfd64
6
+ metadata.gz: ce465c7fd3627748fdd14891dd203fe96606a39dedf287889ab49e947a3b11492d8a902adabc78273e554cda6fda32a9e9f899468f469d3c028118a095a9f636
7
+ data.tar.gz: 50f552b9b60c672ed408e9928aa2019aa6850090ac012f9cc9d82f6d4e96c306f17e763d266b402ef8c0ef5e1ecacb8b5cb57718344b1825e522f3a461cc6945
data/bin/gemwarrior CHANGED
File without changes
@@ -2,26 +2,21 @@
2
2
  # Creature base class
3
3
 
4
4
  require_relative 'entity'
5
- require_relative '../inventory'
6
5
 
7
6
  module Gemwarrior
8
7
  class Creature < Entity
9
- attr_accessor :id, :name, :description, :face, :hands, :mood,
10
- :level, :hp_cur, :hp_max, :inventory
11
-
12
- def initialize(options)
13
- self.id = options[:id]
14
- self.name = options[:name]
15
- self.description = options[:description]
16
- self.face = options[:face]
17
- self.hands = options[:hands]
18
- self.mood = options[:mood]
19
-
20
- self.level = options[:level]
21
- self.hp_cur = options[:hp_cur]
22
- self.hp_max = options[:hp_max]
23
-
24
- self.inventory = options[:inventory]
25
- end
8
+ attr_accessor :face,
9
+ :hands,
10
+ :mood,
11
+ :level,
12
+ :xp,
13
+ :hp_cur,
14
+ :hp_max,
15
+ :atk_lo,
16
+ :atk_hi,
17
+ :defense,
18
+ :dexterity,
19
+ :inventory,
20
+ :rox
26
21
  end
27
22
  end
@@ -3,18 +3,12 @@
3
3
 
4
4
  module Gemwarrior
5
5
  class Entity
6
- attr_reader :id, :name, :description
7
-
8
- def initialize(options)
9
- self.id = options[:id]
10
- self.name = options[:name]
11
- self.description = options[:description]
12
- end
13
-
6
+ attr_accessor :name,
7
+ :description
8
+
14
9
  def status
15
10
  status_text = name.ljust(20).upcase
16
11
  status_text << "#{description}\n"
17
- status_text.to_s
18
12
  end
19
13
  end
20
14
  end
@@ -5,18 +5,11 @@ require_relative 'entity'
5
5
 
6
6
  module Gemwarrior
7
7
  class Item < Entity
8
- attr_accessor :id, :name, :description,
9
- :atk_lo, :atk_hi, :takeable, :equippable, :equipped
10
-
11
- def initialize(options)
12
- self.id = options[:id]
13
- self.name = options[:name]
14
- self.description = options[:description]
15
- self.atk_lo = options[:atk_lo]
16
- self.atk_hi = options[:atk_hi]
17
- self.takeable = options[:takeable]
18
- self.equippable = options[:equippable]
19
- self.equipped = options[:equipped]
20
- end
8
+ attr_accessor :atk_lo,
9
+ :atk_hi,
10
+ :takeable,
11
+ :useable,
12
+ :equippable,
13
+ :equipped
21
14
  end
22
15
  end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/bed.rb
2
+ # Item::Bed
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Bed < Item
8
+ def initialize
9
+ self.name = 'bed'
10
+ self.description = 'The place where you sleep when you are not adventuring.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = false
14
+ self.useable = true
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/feather.rb
2
+ # Item::Feather
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Feather < Item
8
+ def initialize
9
+ self.name = 'feather'
10
+ self.description = 'A blue and green feather. It is soft and tender, unlike the craven bird that probably shed it.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/gun.rb
2
+ # Item::Gun
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Gun < Item
8
+ def initialize
9
+ self.name = 'gun'
10
+ self.description = 'Pew pew goes this firearm, you suspect.'
11
+ self.atk_lo = 3
12
+ self.atk_hi = 5
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/stalactite.rb
2
+ # Item::Stalactite
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Stalactite < Item
8
+ def initialize
9
+ self.name = 'stalactite'
10
+ self.description = 'Long protrusion of cave adornment, broken off and fallen to the ground, where the stalagmites sneer at it from.'
11
+ self.atk_lo = 2
12
+ self.atk_hi = 3
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/stone.rb
2
+ # Item::Stone
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Stone < Item
8
+ def initialize
9
+ self.name = 'stone'
10
+ self.description = 'A small, sharp mega pebble, suitable for tossing in amusement, and perhaps combat.'
11
+ self.atk_lo = 2
12
+ self.atk_hi = 3
13
+ self.takeable = true
14
+ self.useable = true
15
+ self.equippable = true
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/tree.rb
2
+ # Item::Tree
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Tree < Item
8
+ def initialize
9
+ self.name = 'tree'
10
+ self.description = 'A mighty representation of nature, older than your father\'s father\'s second great-uncle.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = false
14
+ self.useable = false
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -12,62 +12,24 @@ module Gemwarrior
12
12
  DANGER_LEVEL = {:none => 0, :low => 15, :moderate => 30, :high => 55, :assured => 100}
13
13
 
14
14
  ## ERRORS
15
- ERROR_LOCATION_ITEM_REMOVE_INVALID = 'That item cannot be removed as it doesn\'t exist here.'
16
- ERROR_LOCATION_DESCRIBE_ENTITY_INVALID = 'You don\'t see that here.'
15
+ ERROR_LOCATION_ITEM_REMOVE_INVALID = 'That item cannot be removed as it does not exist here.'
16
+ ERROR_LOCATION_DESCRIBE_ENTITY_INVALID = 'You do not see that here.'
17
17
 
18
- attr_accessor :id, :name, :description, :locs_connected, :danger_level,
19
- :items, :monsters_available, :monsters_abounding, :checked_for_monsters
18
+ attr_accessor :coords, :locs_connected, :danger_level, :items,
19
+ :monsters_available, :monsters_abounding, :checked_for_monsters
20
20
 
21
21
  def initialize(options)
22
- self.id = options[:id]
23
- self.name = options[:name]
24
- self.description = options[:description]
25
- self.locs_connected = options[:locs_connected]
26
- self.danger_level = options[:danger_level]
27
- self.items = options[:items]
28
- self.monsters_available = options[:monsters_available]
22
+ self.name = options.fetch(:name)
23
+ self.description = options.fetch(:description)
24
+ self.coords = options.fetch(:coords)
25
+ self.locs_connected = options.fetch(:locs_connected)
26
+ self.danger_level = options.fetch(:danger_level)
27
+ self.items = options.fetch(:items)
28
+ self.monsters_available = options.fetch(:monsters_available)
29
29
  self.monsters_abounding = []
30
30
  self.checked_for_monsters = false
31
31
  end
32
-
33
- def describe
34
- desc_text = ""
35
- desc_text << "[ #{name} ]\n"
36
- desc_text << description
37
- unless checked_for_monsters?
38
- populate_monsters
39
- end
40
- unless list_items.nil?
41
- desc_text << list_items
42
- end
43
- unless list_monsters.nil?
44
- desc_text << list_monsters
45
- end
46
- desc_text << list_paths
47
32
 
48
- return desc_text
49
- end
50
-
51
- def describe_entity(entity_name)
52
- if items.map(&:name).include?(entity_name)
53
- items.each do |i|
54
- if i.name.eql?(entity_name)
55
- return "#{i.description}"
56
- end
57
- end
58
- elsif
59
- if monsters_abounding.map(&:name).include?(entity_name)
60
- monsters_abounding.each do |m|
61
- if m.name.eql?(entity_name)
62
- return "#{m.description}"
63
- end
64
- end
65
- end
66
- else
67
- ERROR_LOCATION_DESCRIBE_ENTITY_INVALID
68
- end
69
- end
70
-
71
33
  def remove_item(item_name)
72
34
  if items.map(&:name).include?(item_name)
73
35
  items.reject! { |item| item.name == item_name }
@@ -77,19 +39,23 @@ module Gemwarrior
77
39
  end
78
40
 
79
41
  def remove_monster(name)
80
- if has_monster_to_attack?(name)
81
- monsters_abounding.reject! { |monster| monster.name == name }
82
- end
42
+ monsters_abounding.reject! { |monster| monster.name == name }
83
43
  end
84
44
 
85
45
  def has_loc_to_the?(direction)
46
+ case direction
47
+ when 'n'
48
+ direction = 'north'
49
+ when 'e'
50
+ direction = 'east'
51
+ when 's'
52
+ direction = 'south'
53
+ when 'w'
54
+ direction = 'west'
55
+ end
86
56
  locs_connected[direction.to_sym]
87
57
  end
88
58
 
89
- def has_monster_to_attack?(name)
90
- monsters_abounding.map(&:name).include?(name.downcase)
91
- end
92
-
93
59
  def monster_by_name(name)
94
60
  monsters_abounding.each do |m|
95
61
  if m.name.eql?(name)
@@ -98,12 +64,24 @@ module Gemwarrior
98
64
  end
99
65
  end
100
66
 
101
- private
102
-
103
67
  def checked_for_monsters?
104
68
  checked_for_monsters
105
69
  end
106
70
 
71
+ def has_monster?
72
+ found = false
73
+ unless danger_level.eql?(:none)
74
+ max = DANGER_LEVEL[danger_level]
75
+ trigger_values = 0..max
76
+ actual_value = rand(1..100)
77
+
78
+ if trigger_values.include?(actual_value)
79
+ found = true
80
+ end
81
+ end
82
+ return found
83
+ end
84
+
107
85
  def list_items
108
86
  return "\n >> Shiny object(s): #{items.map(&:name).join(', ')}" if items.length > 0
109
87
  end
@@ -115,32 +93,18 @@ module Gemwarrior
115
93
  def list_paths
116
94
  valid_paths = []
117
95
  locs_connected.each do |key, value|
118
- unless value.nil?
96
+ if value
119
97
  valid_paths.push(key.to_s)
120
98
  end
121
99
  end
122
100
  return "\n >> Paths: #{valid_paths.join(', ')}"
123
101
  end
124
102
 
125
- def has_monster?
126
- found = false
127
- unless danger_level.eql?(:none)
128
- max = DANGER_LEVEL[danger_level]
129
- trigger_values = 0..max
130
- actual_value = rand(1..100)
131
-
132
- if trigger_values.include?(actual_value)
133
- found = true
134
- end
135
- end
136
- return found
137
- end
138
-
139
103
  def populate_monsters
140
104
  self.checked_for_monsters = true
141
105
  if has_monster?
142
106
  self.monsters_abounding = []
143
- return monsters_abounding.push(monsters_available[rand(0..monsters_available.length-1)])
107
+ monsters_abounding.push(monsters_available[rand(0..monsters_available.length-1)])
144
108
  else
145
109
  return nil
146
110
  end
@@ -5,44 +5,21 @@ require_relative 'creature'
5
5
 
6
6
  module Gemwarrior
7
7
  class Monster < Creature
8
- attr_accessor :xp, :atk_hi, :atk_lo, :dexterity,
9
- :rox_to_give, :xp_to_give, :battlecry
10
-
11
- def initialize(options)
12
- self.id = options[:id]
13
- self.name = options[:name]
14
- self.description = options[:description]
15
- self.face = options[:face]
16
- self.hands = options[:hands]
17
- self.mood = options[:mood]
18
-
19
- self.level = options[:level]
20
- self.hp_cur = options[:hp_cur]
21
- self.hp_max = options[:hp_max]
22
-
23
- self.atk_lo = options[:atk_lo]
24
- self.atk_hi = options[:atk_hi]
25
- self.dexterity = options[:dexterity]
26
-
27
- self.inventory = options[:inventory]
28
- self.rox_to_give = options[:rox_to_give]
29
- self.xp_to_give = options[:xp_to_give]
30
-
31
- self.battlecry = options[:battlecry]
32
- end
33
-
8
+ attr_accessor :battlecry
9
+
34
10
  def describe
35
- status_text = name.upcase.ljust(13)
11
+ status_text = name.upcase.ljust(20)
36
12
  status_text << "LEVEL: #{level.to_s.rjust(2)}, "
37
- status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)}, "
38
- status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)}, "
39
- status_text << "DEX: #{dexterity.to_s.rjust(3)}, "
40
- status_text << "XP: #{xp_to_give.to_s.rjust(3)}, "
41
- status_text << "ROX: #{rox_to_give.to_s.rjust(3)}, "
42
- status_text << "FACE: #{face.ljust(10)}, "
43
- status_text << "HANDS: #{hands.ljust(10)}, "
13
+ status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)} "
14
+ status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)} "
15
+ status_text << "DEF: #{defense.to_s.rjust(2)} "
16
+ status_text << "DEX: #{dexterity.to_s.rjust(2)} "
17
+ status_text << "INV: #{inventory.list_contents} "
18
+ status_text << "ROX: #{rox.to_s.rjust(3)} "
19
+ status_text << "XP: #{xp.to_s.rjust(3)} "
20
+ status_text << "FACE: #{face.ljust(10)} "
21
+ status_text << "HANDS: #{hands.ljust(11)} "
44
22
  status_text << "MOOD: #{mood.ljust(10)}\n"
45
- status_text.to_s
46
23
  end
47
24
 
48
25
  def take_damage(dmg)