gemwarrior 0.5 → 0.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dda7511ef167bd6776d0da74d168cb2d99b17635
4
- data.tar.gz: ceb694fe92e5528d0ec89a1e312a1878b0058e5f
3
+ metadata.gz: f8f4d5a687c7e67e55c6e675d53eed0ee81802b1
4
+ data.tar.gz: 64d4c7673e0956ab01a70933188160c40ef55c9f
5
5
  SHA512:
6
- metadata.gz: ce465c7fd3627748fdd14891dd203fe96606a39dedf287889ab49e947a3b11492d8a902adabc78273e554cda6fda32a9e9f899468f469d3c028118a095a9f636
7
- data.tar.gz: 50f552b9b60c672ed408e9928aa2019aa6850090ac012f9cc9d82f6d4e96c306f17e763d266b402ef8c0ef5e1ecacb8b5cb57718344b1825e522f3a461cc6945
6
+ metadata.gz: 4004e73feef6f2fb37694c904ab8e3953073af5a8d67e9f868e4643ba3f20b05588bea1428caaa581efdd59079fe5bed86b41a136aef2dafde5d5159441529f4
7
+ data.tar.gz: 8f9a8949bf9ae1f6c3de960ecd1417dec8597b0b712059b6b681ef288bcfab407cafd7849b594d01e0b1f1388fe266d38c1e4d69738008074d3ca2c9ba44ea95
data/README.md CHANGED
@@ -30,24 +30,26 @@ This is in super-hyper-turbo-edition pre-pre-pre-alpha right now, but a working
30
30
 
31
31
  `> c` - character check for visual identity
32
32
  `> i [object]` - check your inventory (or an individual item within)
33
- `> r` - take a load off (future: replenish stamina)
33
+ `> ls [entity_type]` - list entities in the game (monsters, items, locations)
34
+ `> r` - take a load off and replenish hp
34
35
  `> l [object]` - look at current location and its items and monsters
35
- `> ls [entity_type]` - list entities in the game (monsters, items, locations)
36
36
  `> t [object]` - take an item from a location
37
- `> e [object]` - equip an item in your inventory as a weapon
38
- `> a [monster]` - attack a monster
37
+ `> d [object]` - drop an item from your inventory
38
+ `> e [object]` - equip an item in your inventory as a weapon
39
+ `> ue [object]` - unequip an item in your inventory
39
40
  `> g [direction]` - go in a direction, if possible
40
- `> w` - list all the locations available in the world
41
- `> m` - list all the monsters available in the world
41
+ `> a [monster]` - attack a monster
42
42
  `> ch [attribute]` - change some things about yourself
43
- `> q` - quit this nonsense
43
+ `> h` - display available commands
44
+ `> q` - quit this nonsense w/ prompt
45
+ `> qq` - quit this nonsense w/o prompt
44
46
 
45
47
  To come:
46
48
 
47
49
  * ~~Ability to move between locations!~~
48
50
  * ~~Monsters!~~
49
51
  * ~~Ability to fight those monsters!~~
50
- * Monsters to fight back!
52
+ * ~~Monsters to fight back!~~
51
53
  * ~~Items you can pick up!~~
52
54
  * Saving!
53
55
  * Loading of said saved state!
data/bin/gemwarrior CHANGED
@@ -5,11 +5,21 @@ require 'optparse'
5
5
  require_relative '../lib/gemwarrior/misc/version'
6
6
  require_relative '../lib/gemwarrior/game'
7
7
 
8
+ GAME_NAME = "Gem Warrior"
9
+
8
10
  def parse_options
9
- opts.on('-v', '--version', 'Display version number and exit') do
10
- puts "#{$PROGRAM_NAME} #{Gemwarrior::VERSION}"
11
- exit
11
+ options = {}
12
+
13
+ optparse = OptionParser.new do |opts|
14
+ opts.on('-v', '--version', 'Display version number and exit') do
15
+ puts "#{GAME_NAME} v#{Gemwarrior::VERSION}"
16
+ exit
17
+ end
12
18
  end
19
+
20
+ optparse.parse!()
21
+
22
+ return options
13
23
  end
14
24
 
15
25
  def print_error(error)
@@ -23,6 +33,8 @@ def print_error(error)
23
33
  end
24
34
 
25
35
  begin
36
+ options = parse_options
37
+
26
38
  Gemwarrior::Game.new
27
39
  rescue => error
28
40
  print_error(error)
@@ -0,0 +1,184 @@
1
+ # lib/gemwarrior/battle.rb
2
+ # Monster battle
3
+
4
+ module Gemwarrior
5
+ class Battle
6
+ # CONSTANTS
7
+ ## ERRORS
8
+ ERROR_ATTACK_OPTION_INVALID = 'That will not do anything against the monster.'
9
+
10
+ attr_accessor :world, :player, :monster
11
+
12
+ def initialize(options)
13
+ self.world = options.fetch(:world)
14
+ self.player = options.fetch(:player)
15
+ self.monster = options.fetch(:monster)
16
+ end
17
+
18
+ def start
19
+ print_battle_line
20
+ puts "You decide to attack the #{monster.name}!"
21
+ puts "#{monster.name} cries out: #{monster.battlecry}"
22
+
23
+ # first strike!
24
+ if monster_strikes_first?
25
+ puts "#{monster.name} strikes first!"
26
+ monster_attacks_player
27
+ end
28
+
29
+ # main battle loop
30
+ loop do
31
+ if (monster.hp_cur <= 0)
32
+ monster_death
33
+ return
34
+ elsif (player.hp_cur <= 0 && !player.god_mode)
35
+ player_death
36
+ end
37
+
38
+ puts
39
+ puts "[Fight/Attack][Look][Run]"
40
+ puts "P :: #{player.hp_cur} HP\n"
41
+ puts "M :: #{monster.hp_cur} HP\n"
42
+
43
+ if ((player.hp_cur.to_f / player.hp_max.to_f) < 0.10)
44
+ puts "You are almost dead!\n"
45
+ end
46
+ if ((monster.hp_cur.to_f / monster.hp_max.to_f) < 0.10)
47
+ puts "#{monster.name} is almost dead!\n"
48
+ end
49
+
50
+ puts 'What do you do?'
51
+ cmd = gets.chomp.downcase
52
+
53
+ # player action
54
+ case cmd
55
+ when 'fight', 'f', 'attack', 'a'
56
+ puts "You attack #{monster.name}#{player.cur_weapon_name}!"
57
+ dmg = calculate_damage_to(monster)
58
+ if dmg > 0
59
+ puts "You wound it for #{dmg} point(s)!"
60
+ take_damage(monster, dmg)
61
+ if (monster.hp_cur <= 0)
62
+ monster_death
63
+ return
64
+ end
65
+ else
66
+ puts "You miss entirely!"
67
+ end
68
+ when 'look', 'l'
69
+ puts "#{monster.name}: #{monster.description}"
70
+ puts "Its got some distinguishing features, too: face is #{monster.face}, hands are #{monster.hands}, and general mood is #{monster.mood}."
71
+ when 'run', 'r'
72
+ if player_escape?
73
+ monster.hp_cur = monster.hp_max
74
+ puts "You successfully elude #{monster.name}!"
75
+ return
76
+ else
77
+ puts "You were not able to run away! :-("
78
+ end
79
+ else
80
+ puts ERROR_ATTACK_OPTION_INVALID
81
+ next
82
+ end
83
+
84
+ # monster action
85
+ monster_attacks_player
86
+ end
87
+ end
88
+
89
+ private
90
+
91
+ def monster_strikes_first?
92
+ if (monster.dexterity > player.dexterity)
93
+ return true
94
+ else
95
+ dex_diff = player.dexterity - monster.dexterity
96
+ rand_dex = rand(0..dex_diff)
97
+ if rand_dex % 2 > 0
98
+ return true
99
+ else
100
+ return false
101
+ end
102
+ end
103
+ end
104
+
105
+ def calculate_damage_to(entity)
106
+ miss = rand(0..100)
107
+ if (miss < 15)
108
+ 0
109
+ else
110
+ if entity.eql?(monster)
111
+ rand(player.atk_lo..player.atk_hi)
112
+ else
113
+ rand(monster.atk_lo..monster.atk_hi)
114
+ end
115
+ end
116
+ end
117
+
118
+ def take_damage(entity, dmg)
119
+ entity.hp_cur = entity.hp_cur.to_i - dmg.to_i
120
+ end
121
+
122
+ def monster_attacks_player
123
+ puts "#{monster.name} attacks you!"
124
+ dmg = calculate_damage_to(player)
125
+ if dmg > 0
126
+ puts "You are wounded for #{dmg} point(s)!"
127
+ take_damage(player, dmg)
128
+ if player.hp_cur <= 0
129
+ player_death
130
+ end
131
+ else
132
+ puts "#{monster.name} misses entirely!"
133
+ end
134
+ end
135
+
136
+ def calculate_monster_damage
137
+ miss = rand(0..100)
138
+ if (miss < 15)
139
+ 0
140
+ else
141
+ rand(player.atk_lo..player.atk_hi)
142
+ end
143
+ end
144
+
145
+ def monster_death
146
+ puts "You have defeated #{monster.name}!"
147
+ puts "You have received #{monster.xp} XP!"
148
+ puts "You have found #{monster.rox} barterable rox on your slain opponent!"
149
+ print_battle_line
150
+ update_player_stats
151
+ world.location_by_coords(player.cur_coords).remove_monster(monster.name)
152
+ end
153
+
154
+ def player_death
155
+ puts "You are dead, slain by the #{monster.name}!"
156
+ puts 'Your adventure ends here. Try again next time!'
157
+ print_battle_line
158
+ exit(0)
159
+ end
160
+
161
+ def update_player_stats
162
+ player.xp = player.xp + monster.xp
163
+ player.rox = player.rox + monster.rox
164
+ end
165
+
166
+ def player_escape?
167
+ if (player.dexterity > monster.dexterity)
168
+ return true
169
+ else
170
+ dex_diff = monster.dexterity - player.dexterity
171
+ rand_dex = rand(0..dex_diff)
172
+ if rand_dex % 2 > 0
173
+ return true
174
+ else
175
+ return false
176
+ end
177
+ end
178
+ end
179
+
180
+ def print_battle_line
181
+ puts '**************************************'
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,19 @@
1
+ # lib/gemwarrior/entities/items/stonemite.rb
2
+ # Item::Stonemite
3
+
4
+ require_relative '../item'
5
+
6
+ module Gemwarrior
7
+ class Stonemite < Item
8
+ def initialize
9
+ self.name = 'stonemite'
10
+ self.description = 'Stubby cave debris that is kind of neat to look at, as it is off-grey and sparkly, but the size makes it unusable as anything but skipping on a lake or tossing to the ground.'
11
+ self.atk_lo = nil
12
+ self.atk_hi = nil
13
+ self.takeable = true
14
+ self.useable = false
15
+ self.equippable = false
16
+ self.equipped = false
17
+ end
18
+ end
19
+ end
@@ -29,7 +29,13 @@ module Gemwarrior
29
29
  self.monsters_abounding = []
30
30
  self.checked_for_monsters = false
31
31
  end
32
-
32
+
33
+ def status
34
+ status_text = name.ljust(20).upcase
35
+ status_text << coords.values.to_a
36
+ status_text << " #{description}\n"
37
+ end
38
+
33
39
  def remove_item(item_name)
34
40
  if items.map(&:name).include?(item_name)
35
41
  items.reject! { |item| item.name == item_name }
@@ -21,10 +21,5 @@ module Gemwarrior
21
21
  status_text << "HANDS: #{hands.ljust(11)} "
22
22
  status_text << "MOOD: #{mood.ljust(10)}\n"
23
23
  end
24
-
25
- def take_damage(dmg)
26
- self.hp_cur = hp_cur.to_i - dmg.to_i
27
- end
28
-
29
24
  end
30
25
  end
@@ -2,6 +2,7 @@
2
2
  # Player creature
3
3
 
4
4
  require_relative 'creature'
5
+ require_relative '../battle'
5
6
 
6
7
  module Gemwarrior
7
8
  class Player < Creature
@@ -14,9 +15,6 @@ module Gemwarrior
14
15
  FACE_DESC = ['smooth', 'tired', 'ruddy', 'moist', 'shocked', 'handsome', '5 o\'clock-shadowed']
15
16
  HANDS_DESC = ['worn', 'balled into fists', 'relaxed', 'cracked', 'tingly', 'mom\'s spaghetti']
16
17
  MOOD_DESC = ['calm', 'excited', 'depressed', 'tense', 'lackadaisical', 'angry', 'positive']
17
-
18
- ## ERRORS
19
- ERROR_ATTACK_OPTION_INVALID = 'That will not do anything against the monster.'
20
18
 
21
19
  attr_accessor :stam_cur, :stam_max, :cur_coords, :god_mode
22
20
 
@@ -63,6 +61,7 @@ module Gemwarrior
63
61
  end
64
62
 
65
63
  self_text = "NAME: #{name}\n"
64
+ self_text = "XY : #{cur_coords.values.to_a}\n"
66
65
  self_text << "WPN : #{cur_weapon_name}\n"
67
66
  self_text << "LVL : #{level}\n"
68
67
  self_text << "XP : #{xp}\n"
@@ -129,106 +128,8 @@ module Gemwarrior
129
128
  end
130
129
 
131
130
  def attack(world, monster)
132
- print_battle_line
133
- puts "You decide to attack the #{monster.name}!"
134
-
135
- puts "#{monster.name} cries out: #{monster.battlecry}"
136
-
137
- # first strike!
138
- if calculate_first_strike(monster)
139
- puts "#{monster.name} strikes first!"
140
- player_attacked_by(monster)
141
- end
142
-
143
- # main battle loop
144
- loop do
145
- if (monster.hp_cur <= 0)
146
- monster_death(world, monster)
147
- return
148
- elsif (hp_cur <= 0 && !god_mode)
149
- player_death(monster)
150
- end
151
-
152
- puts
153
- puts "[Fight/Attack][Look][Run]"
154
- puts "P :: #{hp_cur} HP\n"
155
- puts "M :: #{monster.hp_cur} HP\n"
156
-
157
- if ((monster.hp_cur.to_f / monster.hp_max.to_f) < 0.10)
158
- puts "#{monster.name} is almost dead!\n"
159
- end
160
-
161
- puts 'What do you do?'
162
- cmd = gets.chomp.downcase
163
-
164
- # player action
165
- case cmd
166
- when 'fight', 'f', 'attack', 'a'
167
- puts "You attack #{monster.name}#{cur_weapon_name}!"
168
- dmg = calculate_mob_damage
169
- if dmg > 0
170
- puts "You wound it for #{dmg} point(s)!"
171
- monster.take_damage(dmg)
172
- if (monster.hp_cur <= 0)
173
- monster_death(world, monster)
174
- return
175
- end
176
- else
177
- puts "You miss entirely!"
178
- end
179
- when 'look', 'l'
180
- puts "#{monster.name}: #{monster.description}"
181
- puts "Its got some distinguishing features, too: face is #{monster.face}, hands are #{monster.hands}, and general mood is #{monster.mood}."
182
- when 'run', 'r'
183
- if player_escape?(monster)
184
- monster.hp_cur = monster.hp_max
185
- puts "You successfully elude #{monster.name}!"
186
- return
187
- else
188
- puts "You were not able to run away! :-("
189
- end
190
- else
191
- puts ERROR_ATTACK_OPTION_INVALID
192
- end
193
-
194
- # monster action
195
- player_attacked_by(monster)
196
- end
197
- end
198
-
199
- private
200
-
201
- # COMBAT
202
- def update_player_stats(monster)
203
- self.xp = xp + monster.xp
204
- self.rox = rox + monster.rox
205
- end
206
-
207
- def monster_death(world, monster)
208
- puts "You have defeated #{monster.name}!"
209
- puts "You have received #{monster.xp} XP!"
210
- puts "You have found #{monster.rox} barterable rox on your slain opponent!"
211
- print_battle_line
212
- update_player_stats(monster)
213
- world.location_by_coords(cur_coords).remove_monster(monster.name)
214
- end
215
-
216
- def player_death(monster)
217
- puts "You are dead, slain by the #{monster.name}!"
218
- puts 'Your adventure ends here. Try again next time!'
219
- print_battle_line
220
- exit(0)
221
- end
222
-
223
- def player_attacked_by(monster)
224
- puts "#{monster.name} attacks you!"
225
- dmg = calculate_player_damage(monster)
226
- if dmg > 0
227
- puts "You are wounded for #{dmg} point(s)!"
228
- take_damage(dmg)
229
- else
230
- puts "#{monster.name} misses entirely!"
231
- end
131
+ battle = Battle.new({:world => world, :player => self, :monster => monster})
132
+ battle.start
232
133
  end
233
134
 
234
135
  def cur_weapon_name
@@ -236,56 +137,8 @@ module Gemwarrior
236
137
  return " with your #{inventory.weapon.name}"
237
138
  end
238
139
  end
239
-
240
- def calculate_mob_damage
241
- miss = rand(0..100)
242
- if (miss < 15)
243
- 0
244
- else
245
- rand(atk_lo..atk_hi)
246
- end
247
- end
248
-
249
- def calculate_player_damage(monster)
250
- miss = rand(0..100)
251
- if (miss < 15)
252
- 0
253
- else
254
- rand(monster.atk_lo..monster.atk_hi)
255
- end
256
- end
257
-
258
- def calculate_first_strike(monster)
259
- if (monster.dexterity > dexterity)
260
- return true
261
- else
262
- dex_diff = dexterity - monster.dexterity
263
- rand_dex = rand(0..dex_diff)
264
- if rand_dex % 2 > 0
265
- return true
266
- else
267
- return false
268
- end
269
- end
270
- end
271
-
272
- def player_escape?(monster)
273
- if (dexterity > monster.dexterity)
274
- return true
275
- else
276
- dex_diff = monster.dexterity - dexterity
277
- rand_dex = rand(0..dex_diff)
278
- if rand_dex % 2 > 0
279
- return true
280
- else
281
- return false
282
- end
283
- end
284
- end
285
-
286
- def take_damage(dmg)
287
- self.hp_cur = hp_cur.to_i - dmg.to_i
288
- end
140
+
141
+ private
289
142
 
290
143
  # TRAVEL
291
144
  def print_traveling_text
@@ -300,13 +153,13 @@ module Gemwarrior
300
153
  # CHARACTER
301
154
  def print_char_pic
302
155
  char_pic = ""
303
- char_pic << "**********\n"
304
- char_pic << "* () *\n"
305
- char_pic << "* \\-||-/ *\n"
306
- char_pic << "* -- *\n"
307
- char_pic << "* || *\n"
308
- char_pic << "* _||_ *\n"
309
- char_pic << "**********\n"
156
+ char_pic << "************\n"
157
+ char_pic << "* () *\n"
158
+ char_pic << "* \\-||-/ *\n"
159
+ char_pic << "* -- *\n"
160
+ char_pic << "* || *\n"
161
+ char_pic << "* _||_ *\n"
162
+ char_pic << "************\n"
310
163
  puts char_pic
311
164
  end
312
165
 
@@ -28,13 +28,15 @@ module Gemwarrior
28
28
  ERROR_DROP_PARAM_MISSING = 'You cannot just "drop". You gotta choose something to drop.'
29
29
  ERROR_EQUIP_PARAM_MISSING = 'You cannot just "equip". You gotta choose something to equip.'
30
30
  ERROR_UNEQUIP_PARAM_MISSING = 'You cannot just "unequip". You gotta choose something to unequip.'
31
+ ERROR_DEBUG_PARAM_MISSING = 'You cannot just "debug". You gotta choose a debug command.'
32
+ ERROR_DEBUG_PARAM_INVALID = 'You cannot debug that...yet.'
31
33
 
32
34
  attr_accessor :world, :commands, :aliases, :descriptions, :devcmds, :devaliases
33
35
 
34
36
  def initialize(world)
35
37
  self.world = world
36
- self.devcmds = %w(allvars godmode iddqd)
37
- self.devaliases = %w(av god)
38
+ self.devcmds = %w(debug)
39
+ self.devaliases = %w(db)
38
40
  self.commands = %w(character inventory list rest look take drop equip unequip go attack change help quit quit!)
39
41
  self.aliases = %w(c i ls r l t d e ue g a ch h q qq)
40
42
  self.descriptions = [
@@ -72,10 +74,21 @@ module Gemwarrior
72
74
 
73
75
  case command
74
76
  # dev commands
75
- when 'allvars', 'av'
76
- world.all_vars()
77
- when 'iddqd', 'godmode', 'god'
78
- world.player.god_mode = !world.player.god_mode
77
+ when 'debug', 'db'
78
+ if param.nil?
79
+ ERROR_DEBUG_PARAM_MISSING
80
+ else
81
+ case param
82
+ when 'vars', 'v'
83
+ world.print_all_vars
84
+ when 'godmode', 'iddqd', 'god', 'g'
85
+ world.player.god_mode = !world.player.god_mode
86
+ when 'map', 'm'
87
+ world.print_map
88
+ else
89
+ ERROR_DEBUG_PARAM_INVALID
90
+ end
91
+ end
79
92
  # normal commands
80
93
  when 'character', 'c'
81
94
  world.player.check_self
@@ -2,5 +2,5 @@
2
2
  # Version of Gem Warrior
3
3
 
4
4
  module Gemwarrior
5
- VERSION = "0.5"
5
+ VERSION = "0.5.1"
6
6
  end
@@ -7,6 +7,10 @@ require_relative 'entities/location'
7
7
  module Gemwarrior
8
8
  class World
9
9
  # CONSTANTS
10
+ ## WORLD DIMENSIONS
11
+ WORLD_DIM_WIDTH = 10
12
+ WORLD_DIM_HEIGHT = 10
13
+
10
14
  ## ERRORS
11
15
  ERROR_LIST_PARAM_INVALID = 'That is not something that can be listed.'
12
16
 
@@ -18,7 +22,7 @@ module Gemwarrior
18
22
  self.player = nil
19
23
  end
20
24
 
21
- def all_vars
25
+ def print_all_vars
22
26
  puts "======================\n"
23
27
  puts "All Variables in World\n"
24
28
  puts "======================\n"
@@ -27,7 +31,32 @@ module Gemwarrior
27
31
  puts "#{list("items", true)}\n\n"
28
32
  puts "#{list("locations", true)}\n"
29
33
  end
30
-
34
+
35
+ def print_map
36
+ 0.upto(WORLD_DIM_HEIGHT-1) do |count_y|
37
+ print ' '
38
+ 0.upto(WORLD_DIM_WIDTH-1) do
39
+ print '___'
40
+ end
41
+ print "\n"
42
+ print "#{(WORLD_DIM_HEIGHT-1) - count_y} "
43
+ 0.upto(WORLD_DIM_WIDTH-1) do |count_x|
44
+ if location_by_coords({:x => count_x, :y => (WORLD_DIM_HEIGHT-1) - count_y})
45
+ print '|X|'
46
+ else
47
+ print '|_|'
48
+ end
49
+ end
50
+ print "\n"
51
+ end
52
+ puts
53
+ print ' '
54
+ 0.upto(WORLD_DIM_WIDTH-1) do |count_x|
55
+ print "#{count_x} "
56
+ end
57
+ return
58
+ end
59
+
31
60
  def list(param, details = false)
32
61
  case param
33
62
  when 'players'
@@ -163,6 +192,7 @@ module Gemwarrior
163
192
  require_relative 'entities/items/feather'
164
193
  require_relative 'entities/items/gun'
165
194
  require_relative 'entities/items/stalactite'
195
+ require_relative 'entities/items/stonemite'
166
196
  require_relative 'entities/items/stone'
167
197
  require_relative 'entities/items/tree'
168
198
 
@@ -189,12 +219,42 @@ module Gemwarrior
189
219
  })
190
220
  )
191
221
  locations.push(Location.new({
192
- :name => 'Cave (Room1)',
193
- :description => 'Now inside the first cavernous room, you confirm that there are stacktites, stonemites, rocksites, and even one or two pebblejites.',
222
+ :name => 'Cave (Foyer)',
223
+ :description => 'Now inside the entrance to the cavern, you confirm that there are stacktites, stonemites, rocksites, and even one or two pebblejites.',
194
224
  :coords => {:x => 7, :y => 0},
195
- :locs_connected => {:north => false, :east => false, :south => false, :west => true},
225
+ :locs_connected => {:north => true, :east => true, :south => false, :west => true},
196
226
  :danger_level => :moderate,
197
- :items => [Stalactite.new],
227
+ :items => [Stalactite.new, Stonemite.new],
228
+ :monsters_available => monsters
229
+ })
230
+ )
231
+ locations.push(Location.new({
232
+ :name => 'Cave (Nook)',
233
+ :description => 'A depression in the cave wall casts a shadow over a small rock shelf.',
234
+ :coords => {:x => 7, :y => 1},
235
+ :locs_connected => {:north => false, :east => true, :south => true, :west => false},
236
+ :danger_level => :moderate,
237
+ :items => [],
238
+ :monsters_available => monsters
239
+ })
240
+ )
241
+ locations.push(Location.new({
242
+ :name => 'Cave (Dropoff)',
243
+ :description => 'Caves do not usually feature sudden chasms spilling down into an unknowable void, but this one does.',
244
+ :coords => {:x => 8, :y => 1},
245
+ :locs_connected => {:north => false, :east => false, :south => true, :west => true},
246
+ :danger_level => :moderate,
247
+ :items => [],
248
+ :monsters_available => monsters
249
+ })
250
+ )
251
+ locations.push(Location.new({
252
+ :name => 'Cave (Causeway)',
253
+ :description => 'Paths lead north and west, but nothing of interest is in this causeway.',
254
+ :coords => {:x => 8, :y => 0},
255
+ :locs_connected => {:north => true, :east => false, :south => false, :west => true},
256
+ :danger_level => :moderate,
257
+ :items => [],
198
258
  :monsters_available => monsters
199
259
  })
200
260
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemwarrior
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.5'
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Chadwick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-04 00:00:00.000000000 Z
11
+ date: 2015-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: os
@@ -158,6 +158,7 @@ files:
158
158
  - Rakefile
159
159
  - bin/gemwarrior
160
160
  - gemwarrior.gemspec
161
+ - lib/gemwarrior/battle.rb
161
162
  - lib/gemwarrior/entities/creature.rb
162
163
  - lib/gemwarrior/entities/entity.rb
163
164
  - lib/gemwarrior/entities/item.rb
@@ -166,6 +167,7 @@ files:
166
167
  - lib/gemwarrior/entities/items/gun.rb
167
168
  - lib/gemwarrior/entities/items/stalactite.rb
168
169
  - lib/gemwarrior/entities/items/stone.rb
170
+ - lib/gemwarrior/entities/items/stonemite.rb
169
171
  - lib/gemwarrior/entities/items/tree.rb
170
172
  - lib/gemwarrior/entities/location.rb
171
173
  - lib/gemwarrior/entities/monster.rb