gemwarrior 0.10.7 → 0.10.8

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: c311f05d4c6938a47b6d445678c5d097c569b3c3
4
- data.tar.gz: 46052a56af92e3ad73e0e964756d75dcafad5ad8
3
+ metadata.gz: d718994a9f914e593cfd757f77a1794583c2a805
4
+ data.tar.gz: 710b04151af8c0fe27d7fe38c8c3881202a154a0
5
5
  SHA512:
6
- metadata.gz: 5dffa3a34da0a0ad1b871169b8d89b9a35070db0d70625f1221eaa0b3ef31334e9609a6e500b1a8590342c0d10250b20314f3c324200383a7322af8840435c90
7
- data.tar.gz: 9723c86b4a47b72c76a2517451ffee3ba2fd88effc09e452547eb06546976009d390d1e21903c53d79f6b0da8826d58c5aec53b0cf62b4afe547433ec38e1b36
6
+ metadata.gz: 70792929d8361fa56fdebe0b037866e2009c3313b9a84c879306fa77bdb55f1e033332658761917fe65bfb61450da2ed36525763e605c5f896181471595d7667
7
+ data.tar.gz: a40fc1a74bf7791469b59b79c3dcec586299067dfdb981e51369da85b980b837582a522e12a2f3942d1f7ebccfae420e1740fd9abb825501d5f4434d6988cb25
data/bin/gemwarrior CHANGED
@@ -81,8 +81,8 @@ def parse_options_cli
81
81
  options[:use_wordnik] = true
82
82
  end
83
83
 
84
- opts.on('-x', '--extra COMMAND', 'Run a command immediately upon beginning the game') do |xc|
85
- options[:extra_command] = xc.to_s
84
+ opts.on('-x', '--extra COMMAND,PARAM1,PARAM2,PARAM3', String, 'Run a command, with optional params, immediately upon beginning the game') do |xc|
85
+ options[:extra_command] = xc.gsub(',',' ')
86
86
  end
87
87
  end
88
88
 
@@ -232,7 +232,7 @@ monsters:
232
232
  consumable: false
233
233
  used: false
234
234
  number_of_uses:
235
- name: Sparkly Thing(tm)
235
+ name: sparkly_thing
236
236
  description: The sparkling that this thing does is unimaginably brilliant.
237
237
  atk_lo:
238
238
  atk_hi:
@@ -249,6 +249,7 @@ monsters:
249
249
  Warrior\e[0m!\nYou decide to ignore \e[0;31;49mQueen Ruby\e[0m and take your spoils
250
250
  back home\nwhere you live out the rest of your days staring at it, wondering\nwhat
251
251
  it was all about.\n\nThank you for playing. Goodbye.\n<^><^><^><^><^><^><^><^><^><^>\n"
252
+ is_dead: false
252
253
  - !ruby/object:Gemwarrior::Garynetty
253
254
  name: Garynetty
254
255
  description: Conservative, yet odd, the Garynetty is not messing around.
@@ -2240,7 +2241,8 @@ locations:
2240
2241
  number_of_uses:
2241
2242
  name: throne
2242
2243
  description: Made of what appears to be unfulfilled desires and latent, flawed
2243
- happiness, the well-crafted seat still looks kinda comfy.
2244
+ happiness, the well-crafted seat still looks kinda comfy. The wizard Emerald
2245
+ sits in it, glaring at you.
2244
2246
  atk_lo:
2245
2247
  atk_hi:
2246
2248
  takeable: false
@@ -2250,8 +2252,9 @@ locations:
2250
2252
  bosses_abounding:
2251
2253
  - !ruby/object:Gemwarrior::Emerald
2252
2254
  name: Emerald
2253
- description: A wily, beefy, tower of a man, champion of both wisdom and strength,
2254
- sporting a constant glint in his eyes.
2255
+ description: A wily, beefy, tower of a man, Emerald looks to be a champion of
2256
+ both wisdom, from what you've heard, AND strength, from what you plainly see.
2257
+ He sports a permanent scowl as he faces you, dead-on.
2255
2258
  face: gleaming
2256
2259
  hands: tantalizing
2257
2260
  mood: enraged
@@ -2269,7 +2272,7 @@ locations:
2269
2272
  consumable: false
2270
2273
  used: false
2271
2274
  number_of_uses:
2272
- name: Sparkly Thing(tm)
2275
+ name: sparkly_thing
2273
2276
  description: The sparkling that this thing does is unimaginably brilliant.
2274
2277
  atk_lo:
2275
2278
  atk_hi:
@@ -2279,13 +2282,10 @@ locations:
2279
2282
  weapon:
2280
2283
  rox: 35
2281
2284
  xp: 22
2282
- battlecry: 'Ha ha ha ha ha! Prepare yourself: today your whole life crumbles!'
2285
+ battlecry: 'You have come for the SparklyThing(tm), I see. To that I say: Ha ha
2286
+ ha ha ha! Prepare yourself fool: today your whole life crumbles!'
2283
2287
  is_boss: true
2284
- defeated_text: "<^><^><^><^><^><^><^><^><^><^>\nYou beat Emerald! You win!\nYou
2285
- receive the \e[0;35;49mSparklyThing(tm)\e[0m and become the true \e[0;33;49mGem
2286
- Warrior\e[0m!\nYou decide to ignore \e[0;31;49mQueen Ruby\e[0m and take your
2287
- spoils back home\nwhere you live out the rest of your days staring at it, wondering\nwhat
2288
- it was all about.\n\nThank you for playing. Goodbye.\n<^><^><^><^><^><^><^><^><^><^>\n"
2288
+ is_dead: false
2289
2289
  checked_for_monsters: false
2290
2290
  - !ruby/object:Gemwarrior::Location
2291
2291
  name: Sky Tower (Lounge)
@@ -2391,6 +2391,37 @@ locations:
2391
2391
  monsters_abounding: []
2392
2392
  bosses_abounding: []
2393
2393
  checked_for_monsters: false
2394
+ - !ruby/object:Gemwarrior::Location
2395
+ name: Queen Room
2396
+ description: Your surroundings contain four walls with no windows, a vaulted ceiling above, and a tile floor below, all immaculately decorated. A small throne lies before you with a woman sitting on it. You must be in the presence of Queen Ruby herself.
2397
+ coords:
2398
+ :x: 5
2399
+ :y: 5
2400
+ :z: 2
2401
+ locs_connected:
2402
+ :north: false
2403
+ :east: false
2404
+ :south: false
2405
+ :west: false
2406
+ danger_level: :none
2407
+ monster_level_range:
2408
+ items:
2409
+ - !ruby/object:Gemwarrior::QueenRuby
2410
+ equipped: false
2411
+ consumable: false
2412
+ used: false
2413
+ number_of_uses:
2414
+ name: queen_ruby
2415
+ description: Queen Ruby glimmers like she was made from the substance of her name. She wears a wan smile, and her hands are delicately intertwined as she sits patiently.
2416
+ atk_lo:
2417
+ atk_hi:
2418
+ takeable: false
2419
+ useable: true
2420
+ equippable: false
2421
+ talkable: true
2422
+ monsters_abounding: []
2423
+ bosses_abounding: []
2424
+ checked_for_monsters: false
2394
2425
  player: !ruby/object:Gemwarrior::Player
2395
2426
  name: Player
2396
2427
  description: |-
@@ -2416,8 +2447,10 @@ player: !ruby/object:Gemwarrior::Player
2416
2447
  cur_coords: *2
2417
2448
  special_abilities: []
2418
2449
  monsters_killed: 0
2450
+ bosses_killed: 0
2419
2451
  items_taken: 0
2420
2452
  movements_made: 0
2421
2453
  rests_taken: 0
2422
2454
  deaths: 0
2455
+ emerald_beaten: false
2423
2456
  duration:
data/gemwarrior.gemspec CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency 'http', '~> 0.8.10'
24
24
  spec.add_runtime_dependency 'json', '~> 1.8.2'
25
25
  spec.add_runtime_dependency 'colorize', '~> 0.7.7'
26
- spec.add_runtime_dependency 'matrext', '~> 0.4.8'
27
- spec.add_runtime_dependency 'clocker', '~> 0.1.2'
26
+ spec.add_runtime_dependency 'matrext', '~> 0.4.9'
27
+ spec.add_runtime_dependency 'clocker', '~> 0.1.6'
28
28
  spec.add_runtime_dependency 'win32-sound', '~> 0.6.0'
29
29
  spec.add_runtime_dependency 'feep', '~> 0.1.3'
30
30
  spec.add_runtime_dependency 'gems', '~> 0.8.3'
@@ -3,6 +3,7 @@
3
3
 
4
4
  require_relative 'misc/player_levels'
5
5
  require_relative 'game_options'
6
+ require_relative 'entities/items/sparkly_thing'
6
7
 
7
8
  module Gemwarrior
8
9
  class Battle
@@ -212,7 +213,7 @@ module Gemwarrior
212
213
  who_gets_wounded_start = ''
213
214
 
214
215
  if entity.eql?(monster)
215
- who_gets_wounded_start = " > You wound #{monster.name} for "
216
+ who_gets_wounded_start = " > You wound #{monster.name} for ".colorize(:green)
216
217
  who_gets_wounded_end = " point(s)!\n".colorize(:green)
217
218
  else
218
219
  who_gets_wounded_start = ' > You are wounded for '.colorize(:red)
@@ -265,35 +266,16 @@ module Gemwarrior
265
266
  def monster_death
266
267
  puts " YOU HAVE DEFEATED #{monster.name.upcase}!\n".colorize(:green)
267
268
 
268
- # stats
269
- world.player.monsters_killed += 1
270
-
271
269
  if monster.is_boss
270
+ world.player.bosses_killed += 1
272
271
  # end game boss!
273
272
  if monster.name.eql?('Emerald')
274
- Music::cue([
275
- { frequencies: 'G3', duration: 250 },
276
- { frequencies: 'A3', duration: 50 },
277
- { frequencies: 'B3', duration: 50 },
278
- { frequencies: 'C4', duration: 50 },
279
- { frequencies: 'D4', duration: 250 },
280
- { frequencies: 'E4', duration: 50 },
281
- { frequencies: 'F#4', duration: 50 },
282
- { frequencies: 'G4', duration: 50 },
283
- { frequencies: 'A4', duration: 250 },
284
- { frequencies: 'B4', duration: 50 },
285
- { frequencies: 'C5', duration: 50 },
286
- { frequencies: 'D5', duration: 50 },
287
- { frequencies: 'E5', duration: 50 },
288
- { frequencies: 'F#5', duration: 50 },
289
- { frequencies: 'G5', duration: 1000 }
290
- ])
291
-
292
- puts monster.defeated_text
293
- gets
294
- return 'exit'
273
+ # game ending: initiate
274
+ return monster.initiate_ending(world)
295
275
  else
296
276
  puts ' You just beat a boss monster. Way to go!'
277
+ puts
278
+ puts ' You get the following spoils of war:'
297
279
  puts " XP : #{monster.xp}".colorize(:green)
298
280
  puts " ROX: #{monster.rox}".colorize(:green)
299
281
  print_battle_line
@@ -301,6 +283,8 @@ module Gemwarrior
301
283
  world.location_by_coords(player.cur_coords).remove_monster(monster.name)
302
284
  end
303
285
  else
286
+ world.player.monsters_killed += 1
287
+
304
288
  puts ' You get the following spoils of war:'
305
289
  puts " XP : #{monster.xp}".colorize(:green)
306
290
  puts " ROX : #{monster.rox}".colorize(:green)
@@ -23,15 +23,14 @@ module Gemwarrior
23
23
  def describe
24
24
  status_text = name.upcase.colorize(:green)
25
25
  status_text << "\n#{description} \n".colorize(:white)
26
- status_text << "ATTACK: #{atk_lo}-#{atk_hi} \n".colorize(:white) unless atk_lo.nil?
27
- status_text << "TAKEABLE? #{takeable}\n".colorize(:white)
28
- status_text << "USEABLE? #{useable}\n".colorize(:white)
29
- status_text << "USED? #{used}\n".colorize(:white)
30
- status_text << "EQUIPPABLE? #{equippable}\n".colorize(:white)
31
- status_text << "CONSUMABLE? #{consumable}\n".colorize(:white)
26
+ status_text << "ATTACK: #{atk_lo}-#{atk_hi} \n".colorize(:white) unless atk_lo.nil?
27
+ status_text << "TAKEABLE? #{takeable}\n".colorize(:white)
28
+ status_text << "USEABLE? #{useable}\n".colorize(:white)
29
+ status_text << "USED? #{used}\n".colorize(:white)
30
+ status_text << "EQUIPPABLE? #{equippable}\n".colorize(:white)
31
+ status_text << "CONSUMABLE? #{consumable}\n".colorize(:white)
32
32
  status_text << "NUMBER OF USES? #{number_of_uses}\n".colorize(:white) unless number_of_uses.nil?
33
- status_text << "TALKABLE? #{talkable}\n".colorize(:white)
34
- status_text << "\n"
33
+ status_text << "TALKABLE? #{talkable}\n".colorize(:white)
35
34
  end
36
35
  end
37
36
  end
@@ -0,0 +1,62 @@
1
+ # lib/gemwarrior/entities/items/queen_ruby.rb
2
+ # Item::QueenRuby
3
+
4
+ require_relative '../item'
5
+ require_relative '../../misc/animation'
6
+
7
+ module Gemwarrior
8
+ class QueenRuby < Item
9
+ # CONSTANTS
10
+ MOVE_TEXT = '*** WHOOOOOOSH ***'
11
+
12
+ def initialize
13
+ super
14
+
15
+ self.name = 'queen_ruby'
16
+ self.description = 'Queen Ruby glimmers like she was made from the substance of her name. She wears a wan smile, and her hands are delicately intertwined as she sits patiently.'
17
+ self.atk_lo = nil
18
+ self.atk_hi = nil
19
+ self.takeable = true
20
+ self.useable = true
21
+ self.equippable = false
22
+ self.talkable = true
23
+ end
24
+
25
+ def use(player = nil)
26
+ puts '>> "Thank you for bringing back the ShinyThing(tm)! The land of Jool is saved!"'
27
+ STDIN.getch
28
+ puts ">> \"Please, #{player.name}, hand the ShinyThing(tm) to me, before all is lost!\""
29
+ puts
30
+ print 'Hand over the ShinyThing(tm)? (y/n) '
31
+ answer = gets.chomp.downcase
32
+
33
+ case answer
34
+ when 'y', 'yes'
35
+ player.inventory.remove_item('sparkly_thing')
36
+ print '>> "Oh, thank you! Now that the evil Emerald is defeated, and I, Queen Ruby, have the ShinyThing(tm) again, peace can come to the land of Jool. Your reward is...'
37
+ STDIN.getch
38
+ Animation::run(phrase: '...', oneline: true)
39
+ STDIN.getch
40
+ Animation::run(phrase: '...', oneline: true)
41
+ STDIN.getch
42
+ Animation::run(phrase: '...my thanks!"', oneline: true)
43
+ STDIN.getch
44
+ puts
45
+ puts '>> "Now, be a dear and run on home."'
46
+ puts
47
+ STDIN.getch
48
+ puts 'And with that, she waves her arm in a tired, yet mystical, manner. Your mind and sight go blank, and you "poof" out of existence.'
49
+ puts
50
+
51
+ Animation::run(phrase: MOVE_TEXT)
52
+ { type: 'move', data: 'Home' }
53
+ when 'n', 'no'
54
+ puts '>> "No? No??? Well, you are not leaving this room until you do, so think long and hard about that."'
55
+ { type: nil, data: nil }
56
+ else
57
+ puts '>> "Take your time and let me know when you are going to give me the ShinyThing(tm), all right?"'
58
+ { type: nil, data: nil }
59
+ end
60
+ end
61
+ end
62
+ end
@@ -8,7 +8,7 @@ module Gemwarrior
8
8
  def initialize
9
9
  super
10
10
 
11
- self.name = 'Sparkly Thing(tm)'
11
+ self.name = 'sparkly_thing'
12
12
  self.description = 'The sparkling that this thing does is unimaginably brilliant.'
13
13
  self.atk_lo = nil
14
14
  self.atk_hi = nil
@@ -9,7 +9,7 @@ module Gemwarrior
9
9
  super
10
10
 
11
11
  self.name = 'throne'
12
- self.description = 'Made of what appears to be unfulfilled desires and latent, flawed happiness, the well-crafted seat still looks kinda comfy.'
12
+ self.description = 'Made of what appears to be unfulfilled desires and latent, flawed happiness, the well-crafted seat still looks kinda comfy. The wizard Emerald sits in it, glaring at you.'
13
13
  self.atk_lo = nil
14
14
  self.atk_hi = nil
15
15
  self.takeable = false
@@ -8,7 +8,7 @@ module Gemwarrior
8
8
  class Monster < Creature
9
9
  INVENTORY_ITEMS_DEFAULT = [Herb.new]
10
10
 
11
- attr_accessor :inventory, :battlecry, :is_boss
11
+ attr_accessor :inventory, :battlecry, :is_boss, :is_dead
12
12
 
13
13
  def initialize
14
14
  if [true, false].sample
@@ -19,25 +19,24 @@ module Gemwarrior
19
19
  end
20
20
 
21
21
  def describe
22
- status_text = name.upcase.ljust(13).colorize(:green)
23
- status_text << "#{description}\n".colorize(:white)
24
- if is_boss
25
- status_text << '(BOSS)'.ljust(13).colorize(:yellow)
26
- else
27
- status_text << ''.ljust(13)
28
- end
29
- status_text << "LEVEL: #{level.to_s.rjust(2)}, ".colorize(:white)
30
- status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)} ".colorize(:white)
31
- status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)} ".colorize(:white)
32
- status_text << "DEF: #{defense.to_s.rjust(2)} ".colorize(:white)
33
- status_text << "DEX: #{dexterity.to_s.rjust(2)} ".colorize(:white)
34
- status_text << "ROX: #{rox.to_s.rjust(3)} ".colorize(:white)
35
- status_text << "XP: #{xp.to_s.rjust(3)} ".colorize(:white)
36
- status_text << "\n".ljust(14)
37
- status_text << "FACE: #{face} ".colorize(:white)
38
- status_text << "HANDS: #{hands} ".colorize(:white)
39
- status_text << "MOOD: #{mood} ".colorize(:white)
40
- status_text << "INV: #{inventory.list_contents}".colorize(:white)
22
+ status_text = name.upcase.colorize(:green)
23
+ status_text << '(BOSS)'.ljust(13).colorize(:yellow) if is_boss
24
+ status_text << "\n"
25
+ status_text << "#{description}".colorize(:white)
26
+ status_text << "\n"
27
+
28
+ status_text << "DEAD? #{is_dead}\n" unless is_dead.nil?
29
+ status_text << "LVL : #{level}\n".colorize(:white)
30
+ status_text << "HP : #{hp_cur}/#{hp_max}\n".colorize(:white)
31
+ status_text << "ATK : #{atk_lo}-#{atk_hi}\n".colorize(:white)
32
+ status_text << "DEF : #{defense}\n".colorize(:white)
33
+ status_text << "DEX : #{dexterity}\n".colorize(:white)
34
+ status_text << "ROX : #{rox}\n".colorize(:white)
35
+ status_text << "XP : #{xp}\n".colorize(:white)
36
+ status_text << "FACE : #{face}\n".colorize(:white)
37
+ status_text << "HANDS: #{hands}\n".colorize(:white)
38
+ status_text << "MOOD : #{mood}\n".colorize(:white)
39
+ status_text << "INV : #{inventory.list_contents}".colorize(:white)
41
40
  status_text << "\n"
42
41
  end
43
42
  end
@@ -2,15 +2,17 @@
2
2
  # Emerald boss monster
3
3
 
4
4
  require_relative '../../monster'
5
- require_relative '../../items/sparklything'
5
+ require_relative '../../items/sparkly_thing'
6
+ require_relative '../../../misc/music'
6
7
 
7
8
  module Gemwarrior
8
9
  class Emerald < Monster
9
- attr_accessor :defeated_text
10
+ # CONSTANTS
11
+ MOVE_TEXT = '*** WHOOOOOOSH ***'
10
12
 
11
13
  def initialize
12
14
  self.name = 'Emerald'
13
- self.description = 'A wily, beefy, tower of a man, champion of both wisdom and strength, sporting a constant glint in his eyes.'
15
+ self.description = 'A wily, beefy, tower of a man, Emerald looks to be a champion of both wisdom, from what you\'ve heard, AND strength, from what you plainly see. He sports a constant glint in his eyes as he faces you, dead-on.'
14
16
  self.face = 'gleaming'
15
17
  self.hands = 'tantalizing'
16
18
  self.mood = 'enraged'
@@ -27,26 +29,72 @@ module Gemwarrior
27
29
  self.rox = rand((level * 2)..(level * 3))
28
30
  self.xp = rand(level..(level * 2))
29
31
 
30
- self.battlecry = 'Ha ha ha ha ha! Prepare yourself: today your whole life crumbles!'
32
+ self.battlecry = 'You\'ve come for the SparklyThing(tm), I see. To that I say: Ha ha ha ha ha! Prepare yourself fool: today your whole life crumbles!'
31
33
  self.is_boss = true
32
- self.defeated_text = defeated_text
34
+ self.is_dead = false
33
35
  end
36
+
37
+ def initiate_ending(world)
38
+ # fanfare!
39
+ Music::cue([
40
+ { frequencies: 'G3', duration: 250 },
41
+ { frequencies: 'A3', duration: 50 },
42
+ { frequencies: 'B3', duration: 50 },
43
+ { frequencies: 'C4', duration: 50 },
44
+ { frequencies: 'D4', duration: 250 },
45
+ { frequencies: 'E4', duration: 50 },
46
+ { frequencies: 'F#4', duration: 50 },
47
+ { frequencies: 'G4', duration: 50 },
48
+ { frequencies: 'A4', duration: 250 },
49
+ { frequencies: 'B4', duration: 50 },
50
+ { frequencies: 'C5', duration: 50 },
51
+ { frequencies: 'D5', duration: 50 },
52
+ { frequencies: 'E5', duration: 50 },
53
+ { frequencies: 'F#5', duration: 50 },
54
+ { frequencies: 'G5', duration: 1000 }
55
+ ])
34
56
 
35
- def defeated_text
36
- text = "<^><^><^><^><^><^><^><^><^><^>\n"
37
- text << "You beat #{name}! You win!\n"
38
- text << 'You receive the '
39
- text << 'SparklyThing(tm)'.colorize(:magenta)
40
- text << ' and become the true '
41
- text << 'Gem Warrior'.colorize(:yellow)
42
- text << "!\n"
43
- text << 'You decide to ignore '
44
- text << 'Queen Ruby'.colorize(:red)
45
- text << " and take your spoils back home\n"
46
- text << "where you live out the rest of your days staring at it, wondering\n"
47
- text << "what it was all about.\n\n"
48
- text << "Thank you for playing. Goodbye.\n"
49
- text << "<^><^><^><^><^><^><^><^><^><^>\n"
57
+ # get reference to throne room, emerald monster, and throne item
58
+ throne_room = world.location_by_coords(world.location_coords_by_name('Sky Tower (Throne Room)'))
59
+ emerald = throne_room.bosses_abounding[0]
60
+ throne = throne_room.items.each { |i| i.name == 'throne' }[0]
61
+
62
+ # emerald is dead, so room and items change
63
+ emerald.is_dead = true
64
+ emerald.face = 'sullen'
65
+ emerald.hands = 'limp'
66
+ emerald.mood = 'blank'
67
+ emerald.hp_cur = 0
68
+ emerald.rox = 0
69
+ emerald.description = 'Emerald slumps over in his chair, completely lifeless. The color has drained from his eyes and a pallor has been cast over his face. His reign is no more.'
70
+ throne_room.description = 'Emerald\'s throne room feels much less imposing now that you have defeated him in mortal combat. Who knew?'
71
+ throne_room.danger_level = :none
72
+ throne_room.monster_level_range = nil
73
+ throne_room.monsters_abounding = []
74
+ throne.description = 'The grim spectacle of Emerald\'s dead body drooping blankly in his chosen seat really brings down the market value of it, you guess.'
75
+
76
+ # world knows you beat emerald
77
+ world.emerald_beaten = true
78
+
79
+ # remove sparkly_thing from emerald
80
+ emerald.inventory.remove_item('sparkly_thing')
81
+ # give player sparkly_thing
82
+ world.player.inventory.items.push(SparklyThing.new)
83
+
84
+ # ending text
85
+ puts '<^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^>'
86
+ puts "You beat #{name}! You win! You receive the #{"SparklyThing(tm)".colorize(:magenta)} and become the true #{"Gem Warrior".colorize(:yellow)}!"
87
+ puts '<^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^><^>'
88
+ STDIN.getc
89
+
90
+ puts 'Suddenly, an icy feeling shoots up your back. You feel lighter than air. Blackness takes over.'
91
+ STDIN.getc
92
+
93
+ # onto the queen
94
+ Animation::run(phrase: MOVE_TEXT)
95
+ puts
96
+
97
+ return { type: 'move', data: 'Queen Room'}
50
98
  end
51
99
  end
52
100
  end
@@ -20,7 +20,7 @@ module Gemwarrior
20
20
  include Formatting
21
21
 
22
22
  attr_accessor :stam_cur, :stam_max, :cur_coords, :special_abilities,
23
- :monsters_killed, :items_taken, :movements_made,
23
+ :monsters_killed, :bosses_killed, :items_taken, :movements_made,
24
24
  :rests_taken, :deaths
25
25
 
26
26
  def generate_name
@@ -214,12 +214,18 @@ module Gemwarrior
214
214
  end
215
215
 
216
216
  def attack(world, monster)
217
- battle = Battle.new(world: world, player: self, monster: monster)
218
- result = battle.start
219
- if result.eql?('death')
220
- return 'death'
221
- elsif result.eql?('exit')
222
- return 'exit'
217
+ if monster.is_dead
218
+ { type: 'message', data: 'That monster is now dead forever and cannot be attacked. You must have done them a good one.' }
219
+ else
220
+ battle = Battle.new(world: world, player: self, monster: monster)
221
+ result = battle.start
222
+ if result.eql?('death')
223
+ return 'death'
224
+ elsif result.eql?('exit')
225
+ return 'exit'
226
+ else
227
+ return result
228
+ end
223
229
  end
224
230
  end
225
231
 
@@ -282,7 +282,7 @@ module Gemwarrior
282
282
  case command
283
283
  when 'character', 'c'
284
284
  # bypass puts so it prints out with newlines properly
285
- print world.player.check_self(GameOptions.data['debug_mode'])
285
+ print world.player.check_self
286
286
  when 'inventory', 'i'
287
287
  if param1
288
288
  world.player.inventory.describe_item(param1)
@@ -572,6 +572,16 @@ module Gemwarrior
572
572
  elsif result.eql?('exit')
573
573
  return 'exit'
574
574
  end
575
+
576
+ unless result.nil?
577
+ case result[:type]
578
+ when 'message'
579
+ result[:data]
580
+ when 'move'
581
+ world.player.cur_coords = world.location_coords_by_name(result[:data])
582
+ world.describe(world.location_by_coords(world.player.cur_coords))
583
+ end
584
+ end
575
585
  else
576
586
  ERROR_ATTACK_PARAM_INVALID
577
587
  end
@@ -39,7 +39,7 @@ module Gemwarrior
39
39
 
40
40
  # create new world based on default template
41
41
  self.world = init_world
42
-
42
+
43
43
  # update some player aspects to make more dynamic
44
44
  world.player.name = world.player.generate_name
45
45
  world.player.face = world.player.generate_face
@@ -49,6 +49,7 @@ module Gemwarrior
49
49
  world.player.rox = GameOptions.data['debug_mode'] ? ROX_DEBUG : ROX_DEFAULT
50
50
 
51
51
  world.duration = { mins: 0, secs: 0, ms: 0 }
52
+ world.emerald_beaten = false
52
53
 
53
54
  # create options file if not existing
54
55
  update_options_file
@@ -331,6 +331,8 @@ module Gemwarrior
331
331
  puts '----------------------------------------------------------------------'
332
332
  print "#{pl.name.ljust(10)} killed #{pl.monsters_killed.to_s.colorize(color: :white, background: :black)} monster(s)"
333
333
  print "\n".ljust(12)
334
+ print "killed #{pl.bosses_killed.to_s.colorize(color: :white, background: :black)} boss(es)"
335
+ print "\n".ljust(12)
334
336
  print "picked up #{pl.items_taken.to_s.colorize(color: :white, background: :black)} item(s)"
335
337
  print "\n".ljust(12)
336
338
  print "traveled #{pl.movements_made.to_s.colorize(color: :white, background: :black)} time(s)"
@@ -343,7 +345,7 @@ module Gemwarrior
343
345
 
344
346
  # log stats to file in home directory
345
347
  File.open(GameOptions.data['log_file_path'], 'a') do |f|
346
- f.write "#{Time.now} #{pl.name.rjust(10)} - V:#{Gemwarrior::VERSION} LV:#{pl.level} XP:#{pl.xp} $:#{pl.rox} KIL:#{pl.monsters_killed} ITM:#{pl.items_taken} MOV:#{pl.movements_made} RST:#{pl.rests_taken} DTH:#{pl.deaths}\n"
348
+ f.write "#{Time.now} #{pl.name.rjust(10)} - V:#{Gemwarrior::VERSION} LV:#{pl.level} XP:#{pl.xp} $:#{pl.rox} MK:#{pl.monsters_killed} BK:#{pl.bosses_killed} ITM:#{pl.items_taken} MOV:#{pl.movements_made} RST:#{pl.rests_taken} DTH:#{pl.deaths}\n"
347
349
  end
348
350
  end
349
351
 
@@ -2,5 +2,5 @@
2
2
  # Version of Gem Warrior
3
3
 
4
4
  module Gemwarrior
5
- VERSION = '0.10.7'
5
+ VERSION = '0.10.8'
6
6
  end
@@ -16,7 +16,7 @@ module Gemwarrior
16
16
  WORLD_DIM_WIDTH = 10
17
17
  WORLD_DIM_HEIGHT = 10
18
18
 
19
- attr_accessor :monsters, :locations, :player, :duration
19
+ attr_accessor :monsters, :locations, :player, :duration, :emerald_beaten
20
20
 
21
21
  def print_vars
22
22
  puts "======================\n"
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.10.7
4
+ version: 0.10.8
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-08-18 00:00:00.000000000 Z
11
+ date: 2015-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: os
@@ -78,28 +78,28 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 0.4.8
81
+ version: 0.4.9
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 0.4.8
88
+ version: 0.4.9
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: clocker
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: 0.1.2
95
+ version: 0.1.6
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: 0.1.2
102
+ version: 0.1.6
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: win32-sound
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -274,7 +274,6 @@ files:
274
274
  - gemwarrior.gemspec
275
275
  - lib/gemwarrior/arena.rb
276
276
  - lib/gemwarrior/battle.rb
277
- - lib/gemwarrior/entities/boss.rb
278
277
  - lib/gemwarrior/entities/creature.rb
279
278
  - lib/gemwarrior/entities/entity.rb
280
279
  - lib/gemwarrior/entities/item.rb
@@ -304,11 +303,12 @@ files:
304
303
  - lib/gemwarrior/entities/items/pedestal.rb
305
304
  - lib/gemwarrior/entities/items/pig.rb
306
305
  - lib/gemwarrior/entities/items/pond.rb
306
+ - lib/gemwarrior/entities/items/queen_ruby.rb
307
307
  - lib/gemwarrior/entities/items/rope.rb
308
308
  - lib/gemwarrior/entities/items/shifty_woman.rb
309
309
  - lib/gemwarrior/entities/items/small_hole.rb
310
310
  - lib/gemwarrior/entities/items/snowman.rb
311
- - lib/gemwarrior/entities/items/sparklything.rb
311
+ - lib/gemwarrior/entities/items/sparkly_thing.rb
312
312
  - lib/gemwarrior/entities/items/spear.rb
313
313
  - lib/gemwarrior/entities/items/stalactite.rb
314
314
  - lib/gemwarrior/entities/items/stone.rb
@@ -375,6 +375,4 @@ rubygems_version: 2.4.8
375
375
  signing_key:
376
376
  specification_version: 4
377
377
  summary: RubyGem text adventure
378
- test_files:
379
- - spec/gemwarrior_spec.rb
380
- - spec/spec_helper.rb
378
+ test_files: []
@@ -1,18 +0,0 @@
1
- # lib/gemwarrior/entities/boss.rb
2
- # Boss monster
3
-
4
- require_relative 'monster'
5
-
6
- module Gemwarrior
7
- class Boss < Monster
8
- attr_reader :win_text
9
-
10
- def win_text
11
- win_text = "You beat #{name}! You win!"
12
- win_text << 'You become the true Gem Warrior, marry Queen Ruby, and have many fine, sparkling children. '
13
- win_text << 'Thank you for playing. Goodbye.'
14
- puts win_text
15
- exit(0)
16
- end
17
- end
18
- end