gemwarrior 0.10.8 → 0.11.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.
- checksums.yaml +4 -4
- data/bin/gemwarrior +0 -0
- data/data/default_world.yaml +282 -436
- data/gemwarrior.gemspec +1 -1
- data/lib/gemwarrior/arena.rb +17 -17
- data/lib/gemwarrior/battle.rb +146 -77
- data/lib/gemwarrior/entities/armor.rb +34 -0
- data/lib/gemwarrior/entities/armor/iron_helmet.rb +17 -0
- data/lib/gemwarrior/entities/creature.rb +81 -4
- data/lib/gemwarrior/entities/creatures/cow.rb +24 -0
- data/lib/gemwarrior/entities/{items → creatures}/goat.rb +9 -11
- data/lib/gemwarrior/entities/creatures/pig.rb +24 -0
- data/lib/gemwarrior/entities/entity.rb +59 -5
- data/lib/gemwarrior/entities/item.rb +10 -22
- data/lib/gemwarrior/entities/items/apple.rb +2 -5
- data/lib/gemwarrior/entities/items/arena_door.rb +2 -6
- data/lib/gemwarrior/entities/items/bed.rb +7 -11
- data/lib/gemwarrior/entities/items/bookcase.rb +57 -0
- data/lib/gemwarrior/entities/items/bullet.rb +25 -0
- data/lib/gemwarrior/entities/items/couch.rb +6 -10
- data/lib/gemwarrior/entities/items/cup.rb +2 -5
- data/lib/gemwarrior/entities/items/dehumidifier.rb +3 -6
- data/lib/gemwarrior/entities/items/feather.rb +2 -5
- data/lib/gemwarrior/entities/items/floor_tile.rb +6 -10
- data/lib/gemwarrior/entities/items/flower.rb +1 -4
- data/lib/gemwarrior/entities/items/herb.rb +12 -13
- data/lib/gemwarrior/entities/items/keystone.rb +2 -5
- data/lib/gemwarrior/entities/items/ladder.rb +7 -11
- data/lib/gemwarrior/entities/items/letter.rb +20 -23
- data/lib/gemwarrior/entities/items/map.rb +3 -6
- data/lib/gemwarrior/entities/items/massive_door.rb +3 -7
- data/lib/gemwarrior/entities/items/pedestal.rb +6 -10
- data/lib/gemwarrior/entities/items/pond.rb +4 -8
- data/lib/gemwarrior/entities/items/rope.rb +4 -8
- data/lib/gemwarrior/entities/items/small_hole.rb +15 -77
- data/lib/gemwarrior/entities/items/snowman.rb +5 -9
- data/lib/gemwarrior/entities/items/sparkly_thing.rb +3 -7
- data/lib/gemwarrior/entities/items/stonemite.rb +2 -6
- data/lib/gemwarrior/entities/items/tent.rb +3 -6
- data/lib/gemwarrior/entities/items/throne.rb +7 -6
- data/lib/gemwarrior/entities/items/tree.rb +2 -6
- data/lib/gemwarrior/entities/items/waterfall.rb +9 -8
- data/lib/gemwarrior/entities/location.rb +49 -43
- data/lib/gemwarrior/entities/monster.rb +34 -28
- data/lib/gemwarrior/entities/monsters/alexandrat.rb +3 -3
- data/lib/gemwarrior/entities/monsters/amberoo.rb +3 -3
- data/lib/gemwarrior/entities/monsters/amethystle.rb +3 -3
- data/lib/gemwarrior/entities/monsters/apatiger.rb +3 -3
- data/lib/gemwarrior/entities/monsters/aquamarine.rb +3 -3
- data/lib/gemwarrior/entities/monsters/bloodstorm.rb +3 -3
- data/lib/gemwarrior/entities/monsters/bosses/emerald.rb +12 -27
- data/lib/gemwarrior/entities/monsters/bosses/garynetty.rb +17 -5
- data/lib/gemwarrior/entities/monsters/bosses/jaspern.rb +66 -0
- data/lib/gemwarrior/entities/monsters/citrinaga.rb +3 -3
- data/lib/gemwarrior/entities/monsters/coraliz.rb +3 -3
- data/lib/gemwarrior/entities/monsters/cubicat.rb +3 -3
- data/lib/gemwarrior/entities/monsters/diaman.rb +3 -3
- data/lib/gemwarrior/entities/{items → people}/arena_master.rb +8 -13
- data/lib/gemwarrior/entities/{items → people}/drunk_man.rb +14 -35
- data/lib/gemwarrior/entities/people/queen_ruby.rb +71 -0
- data/lib/gemwarrior/entities/people/rockney.rb +132 -0
- data/lib/gemwarrior/entities/{items → people}/shifty_woman.rb +7 -12
- data/lib/gemwarrior/entities/{items → people}/thin_man.rb +9 -14
- data/lib/gemwarrior/entities/people/ware_hawker.rb +153 -0
- data/lib/gemwarrior/entities/person.rb +20 -0
- data/lib/gemwarrior/entities/player.rb +102 -60
- data/lib/gemwarrior/entities/weapon.rb +38 -0
- data/lib/gemwarrior/entities/{items → weapons}/dagger.rb +5 -7
- data/lib/gemwarrior/entities/{items → weapons}/gun.rb +8 -10
- data/lib/gemwarrior/entities/{items → weapons}/mace.rb +6 -9
- data/lib/gemwarrior/entities/{items → weapons}/opalaser.rb +5 -7
- data/lib/gemwarrior/entities/weapons/spear.rb +23 -0
- data/lib/gemwarrior/entities/{items → weapons}/stalactite.rb +5 -7
- data/lib/gemwarrior/entities/weapons/stone.rb +23 -0
- data/lib/gemwarrior/evaluator.rb +111 -107
- data/lib/gemwarrior/game.rb +61 -29
- data/lib/gemwarrior/game_assets.rb +76 -0
- data/lib/gemwarrior/inventory.rb +77 -43
- data/lib/gemwarrior/misc/animation.rb +17 -13
- data/lib/gemwarrior/misc/{music.rb → audio.rb} +15 -7
- data/lib/gemwarrior/misc/audio_cues.rb +133 -0
- data/lib/gemwarrior/misc/formatting.rb +9 -9
- data/lib/gemwarrior/misc/player_levels.rb +21 -0
- data/lib/gemwarrior/repl.rb +32 -31
- data/lib/gemwarrior/version.rb +1 -1
- data/lib/gemwarrior/world.rb +155 -134
- metadata +34 -22
- data/lib/gemwarrior/entities/items/cow.rb +0 -26
- data/lib/gemwarrior/entities/items/pig.rb +0 -26
- data/lib/gemwarrior/entities/items/queen_ruby.rb +0 -62
- data/lib/gemwarrior/entities/items/spear.rb +0 -26
- data/lib/gemwarrior/entities/items/stone.rb +0 -25
- data/lib/gemwarrior/entities/items/ware_hawker.rb +0 -93
data/gemwarrior.gemspec
CHANGED
@@ -23,7 +23,7 @@ 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.
|
26
|
+
spec.add_runtime_dependency 'matrext', '~> 0.4.10'
|
27
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'
|
data/lib/gemwarrior/arena.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
# lib/gemwarrior/arena.rb
|
2
2
|
# Arena series of battles
|
3
3
|
|
4
|
-
require_relative 'misc/player_levels'
|
5
4
|
require_relative 'battle'
|
6
5
|
|
7
6
|
module Gemwarrior
|
8
7
|
class Arena
|
8
|
+
# CONSTANTS
|
9
|
+
BONUS_ROX_MULTIPLIER = 25
|
10
|
+
BONUS_XP_MULTIPLIER = 10
|
11
|
+
|
9
12
|
attr_accessor :world, :player
|
10
13
|
|
11
14
|
def initialize(options)
|
@@ -21,29 +24,28 @@ module Gemwarrior
|
|
21
24
|
loop do
|
22
25
|
monster = generate_monster
|
23
26
|
battle = Battle.new(world: world, player: player, monster: monster)
|
24
|
-
result = battle.start(is_arena
|
27
|
+
result = battle.start(is_arena: true)
|
25
28
|
|
26
|
-
if result.eql?('death')
|
27
|
-
return 'death'
|
28
|
-
end
|
29
|
+
return 'death' if result.eql?('death')
|
29
30
|
|
30
31
|
arena_monsters_vanquished += 1
|
31
32
|
|
32
|
-
|
33
|
-
print 'Do you wish to continue fighting in the Arena? (y/n) '
|
33
|
+
print ' Do you wish to continue fighting in the Arena? (y/n) '
|
34
34
|
answer = gets.chomp.downcase
|
35
35
|
|
36
36
|
case answer
|
37
37
|
when 'y', 'yes'
|
38
|
+
puts
|
38
39
|
next
|
39
40
|
else
|
40
|
-
bonus_rox = arena_monsters_vanquished *
|
41
|
-
bonus_xp = arena_monsters_vanquished *
|
41
|
+
bonus_rox = arena_monsters_vanquished * BONUS_ROX_MULTIPLIER
|
42
|
+
bonus_xp = arena_monsters_vanquished * BONUS_XP_MULTIPLIER
|
42
43
|
player.rox = player.rox + bonus_rox
|
43
44
|
player.xp = player.xp + bonus_xp
|
44
|
-
puts
|
45
|
-
puts
|
46
|
-
puts "You
|
45
|
+
puts
|
46
|
+
puts ' You decided you\'ve had enough of the exhausting Arena for one day and exit the main stage.'
|
47
|
+
puts " You defeated #{arena_monsters_vanquished} monsters!"
|
48
|
+
puts " You have gained #{bonus_rox} rox and #{bonus_xp} XP!"
|
47
49
|
|
48
50
|
return print_arena_outro
|
49
51
|
end
|
@@ -56,14 +58,12 @@ module Gemwarrior
|
|
56
58
|
random_monster = nil
|
57
59
|
|
58
60
|
loop do
|
59
|
-
random_monster =
|
61
|
+
random_monster = GameMonsters.data[rand(0..GameMonsters.data.length - 1)].clone
|
60
62
|
|
61
|
-
unless random_monster.is_boss
|
62
|
-
break
|
63
|
-
end
|
63
|
+
break unless random_monster.is_boss
|
64
64
|
end
|
65
65
|
|
66
|
-
|
66
|
+
random_monster.clone
|
67
67
|
end
|
68
68
|
|
69
69
|
def print_arena_intro
|
data/lib/gemwarrior/battle.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
# lib/gemwarrior/battle.rb
|
2
2
|
# Monster battle
|
3
3
|
|
4
|
-
require_relative 'misc/player_levels'
|
5
4
|
require_relative 'game_options'
|
6
|
-
require_relative 'entities/items/sparkly_thing'
|
7
5
|
|
8
6
|
module Gemwarrior
|
9
7
|
class Battle
|
10
8
|
# CONSTANTS
|
11
9
|
ERROR_ATTACK_OPTION_INVALID = 'That will not do anything against the monster.'
|
12
10
|
BEAST_MODE_ATTACK = 100
|
13
|
-
ESCAPE_TEXT = '
|
11
|
+
ESCAPE_TEXT = '** POOF **'
|
14
12
|
|
15
13
|
attr_accessor :world, :player, :monster, :player_is_defending
|
16
14
|
|
@@ -22,21 +20,15 @@ module Gemwarrior
|
|
22
20
|
end
|
23
21
|
|
24
22
|
def start(is_arena = nil, is_event = nil)
|
25
|
-
|
26
|
-
{ frequencies: 'G4', duration: 50 },
|
27
|
-
{ frequencies: 'G#4', duration: 50 },
|
28
|
-
{ frequencies: 'G4', duration: 50 },
|
29
|
-
{ frequencies: 'G#4', duration: 50 },
|
30
|
-
{ frequencies: 'G4', duration: 50 },
|
31
|
-
{ frequencies: 'G#4', duration: 50 }
|
32
|
-
])
|
23
|
+
Audio.play_synth(:battle_start)
|
33
24
|
|
34
25
|
# begin battle!
|
35
26
|
print_battle_header unless is_arena
|
36
27
|
|
37
28
|
if is_arena
|
38
29
|
print ' Your opponent is now...'
|
39
|
-
Animation
|
30
|
+
Animation.run(phrase: "#{monster.name.upcase}", speed: :slow, oneline: true)
|
31
|
+
print "!\n"
|
40
32
|
elsif is_event
|
41
33
|
puts " You are ambushed by #{monster.name}!".colorize(:yellow)
|
42
34
|
else
|
@@ -55,6 +47,8 @@ module Gemwarrior
|
|
55
47
|
|
56
48
|
# main battle loop
|
57
49
|
loop do
|
50
|
+
skip_next_monster_attack = false
|
51
|
+
|
58
52
|
if monster_dead?
|
59
53
|
result = monster_death
|
60
54
|
return result
|
@@ -64,12 +58,8 @@ module Gemwarrior
|
|
64
58
|
end
|
65
59
|
|
66
60
|
# check for near death
|
67
|
-
if player_near_death?
|
68
|
-
|
69
|
-
end
|
70
|
-
if monster_near_death?
|
71
|
-
puts " #{monster.name} is almost dead!\n".colorize(:yellow)
|
72
|
-
end
|
61
|
+
puts " You are almost dead!\n".colorize(:yellow) if player_near_death?
|
62
|
+
puts " #{monster.name} is almost dead!\n".colorize(:yellow) if monster_near_death?
|
73
63
|
|
74
64
|
puts
|
75
65
|
|
@@ -92,51 +82,92 @@ module Gemwarrior
|
|
92
82
|
self.player_is_defending = false
|
93
83
|
|
94
84
|
# battle options prompt
|
95
|
-
|
96
|
-
print ' ['.colorize(:yellow)
|
97
|
-
print 'F'.colorize(:green)
|
98
|
-
print 'ight/'.colorize(:yellow)
|
99
|
-
print 'A'.colorize(:green)
|
100
|
-
print 'ttack]['.colorize(:yellow)
|
101
|
-
print 'D'.colorize(:green)
|
102
|
-
print 'efend]['.colorize(:yellow)
|
103
|
-
print 'L'.colorize(:green)
|
104
|
-
print 'ook]['.colorize(:yellow)
|
105
|
-
print 'P'.colorize(:green)
|
106
|
-
print 'ass]['.colorize(:yellow)
|
107
|
-
print 'R'.colorize(:green)
|
108
|
-
print 'un]'.colorize(:yellow)
|
109
|
-
print "\n"
|
110
|
-
print ' [BATTLE]> '
|
85
|
+
print_battle_options
|
111
86
|
player_action = STDIN.gets.chomp.downcase
|
112
87
|
|
113
88
|
# player action
|
114
89
|
case player_action
|
115
90
|
when 'fight', 'f', 'attack', 'a'
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
91
|
+
can_attack = true
|
92
|
+
|
93
|
+
# gun exception
|
94
|
+
if player.has_weapon_equipped?
|
95
|
+
if player.inventory.weapon.name.eql?('gun')
|
96
|
+
if player.inventory.contains_item?('bullet')
|
97
|
+
player.inventory.remove_item('bullet')
|
98
|
+
else
|
99
|
+
puts ' Your gun is out of bullets! Running is your best option now.'.colorize(:red)
|
100
|
+
can_attack = false
|
101
|
+
end
|
125
102
|
end
|
126
|
-
|
127
|
-
Music::cue([{ frequencies: 'A4', duration: 75 }])
|
103
|
+
end
|
128
104
|
|
129
|
-
|
105
|
+
if can_attack
|
106
|
+
puts " You attack #{monster.name}#{player.cur_weapon_name}!"
|
107
|
+
dmg = calculate_damage_to(monster)
|
108
|
+
if dmg > 0
|
109
|
+
Audio.play_synth(:battle_player_attack)
|
110
|
+
|
111
|
+
take_damage(monster, dmg)
|
112
|
+
if monster_dead?
|
113
|
+
result = monster_death
|
114
|
+
return result
|
115
|
+
end
|
116
|
+
else
|
117
|
+
Audio.play_synth(:battle_player_miss)
|
118
|
+
|
119
|
+
puts ' You miss entirely!'.colorize(:yellow)
|
120
|
+
end
|
130
121
|
end
|
131
122
|
when 'defend', 'd'
|
132
123
|
puts ' You dig in and defend this round.'
|
133
124
|
self.player_is_defending = true
|
134
|
-
when '
|
135
|
-
|
125
|
+
when 'item', 'i'
|
126
|
+
if player.inventory.is_empty?
|
127
|
+
puts ' You have no items!'
|
128
|
+
next
|
129
|
+
elsif player.inventory.contains_battle_item?
|
130
|
+
puts ' Which item do you want to use?'
|
131
|
+
puts
|
132
|
+
b_items = player.inventory.list_battle_items
|
133
|
+
count = 0
|
134
|
+
b_items.each do |bi|
|
135
|
+
puts " (#{count + 1}) #{bi.name}"
|
136
|
+
count += 1
|
137
|
+
end
|
138
|
+
puts ' (x) exit'
|
139
|
+
|
140
|
+
loop do
|
141
|
+
print_battle_prompt
|
142
|
+
answer = gets.chomp.downcase
|
143
|
+
|
144
|
+
case answer
|
145
|
+
when 'x', 'q'
|
146
|
+
skip_next_monster_attack = true
|
147
|
+
break
|
148
|
+
else
|
149
|
+
begin
|
150
|
+
item = b_items[answer.to_i - 1]
|
151
|
+
if item
|
152
|
+
result = item.use(world)
|
153
|
+
player.hp_cur += result[:data]
|
154
|
+
player.inventory.remove_item(item.name) if item.consumable
|
155
|
+
break
|
156
|
+
end
|
157
|
+
rescue
|
158
|
+
puts ' That is not a valid item choice.'
|
159
|
+
puts
|
160
|
+
next
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
else
|
165
|
+
puts ' You have no battle items!'
|
166
|
+
end
|
136
167
|
when 'look', 'l'
|
137
168
|
print " #{monster.name}".colorize(:white)
|
138
169
|
print " (#{monster.hp_cur}/#{monster.hp_max} HP): #{monster.description}\n"
|
139
|
-
puts " It has some distinguishing features, too: face is #{monster.face}, hands are #{monster.hands}, and
|
170
|
+
puts " It has some distinguishing features, too: face is #{monster.face.colorize(:yellow)}, hands are #{monster.hands.colorize(:yellow)}, and mood, currently, is #{monster.mood.colorize(:yellow)}."
|
140
171
|
if GameOptions.data['debug_mode']
|
141
172
|
puts ' If defeated, will receive:'
|
142
173
|
puts " >> XP : #{monster.xp}"
|
@@ -144,23 +175,25 @@ module Gemwarrior
|
|
144
175
|
puts " >> ITEMS: #{monster.inventory.list_contents}"
|
145
176
|
next
|
146
177
|
end
|
178
|
+
when 'pass', 'p'
|
179
|
+
puts ' You decide to pass your turn for some reason. Brave!'
|
147
180
|
when 'run', 'r'
|
148
181
|
if player_escape?(is_arena)
|
149
182
|
monster.hp_cur = monster.hp_max
|
150
183
|
puts " You successfully elude #{monster.name}!".colorize(:green)
|
151
184
|
print_escape_text
|
152
185
|
print_battle_line
|
153
|
-
return
|
186
|
+
return
|
154
187
|
else
|
155
188
|
puts ' You were not able to run away! :-('.colorize(:yellow)
|
156
189
|
end
|
157
190
|
else
|
158
|
-
puts ERROR_ATTACK_OPTION_INVALID
|
191
|
+
puts " #{ERROR_ATTACK_OPTION_INVALID}"
|
159
192
|
next
|
160
193
|
end
|
161
194
|
|
162
195
|
# monster action
|
163
|
-
monster_attacks_player
|
196
|
+
monster_attacks_player unless skip_next_monster_attack
|
164
197
|
end
|
165
198
|
end
|
166
199
|
|
@@ -176,12 +209,12 @@ module Gemwarrior
|
|
176
209
|
# base attack range
|
177
210
|
base_atk_lo = player.atk_lo
|
178
211
|
base_atk_hi = player.atk_hi
|
179
|
-
|
212
|
+
|
180
213
|
if player.has_weapon_equipped?
|
181
214
|
base_atk_lo += player.inventory.weapon.atk_lo
|
182
215
|
base_atk_hi += player.inventory.weapon.atk_hi
|
183
216
|
end
|
184
|
-
|
217
|
+
|
185
218
|
atk_range = base_atk_lo..base_atk_hi
|
186
219
|
|
187
220
|
# beast mode modifier
|
@@ -221,7 +254,7 @@ module Gemwarrior
|
|
221
254
|
end
|
222
255
|
|
223
256
|
print who_gets_wounded_start
|
224
|
-
Animation
|
257
|
+
Animation.run(phrase: dmg.to_s, speed: :slow, oneline: true, alpha: false, random: false)
|
225
258
|
print who_gets_wounded_end
|
226
259
|
end
|
227
260
|
|
@@ -245,11 +278,11 @@ module Gemwarrior
|
|
245
278
|
|
246
279
|
dmg = calculate_damage_to(player)
|
247
280
|
if dmg > 0
|
248
|
-
|
281
|
+
Audio.play_synth(:battle_monster_attack)
|
249
282
|
|
250
283
|
take_damage(player, dmg)
|
251
284
|
else
|
252
|
-
|
285
|
+
Audio.play_synth(:battle_monster_miss)
|
253
286
|
|
254
287
|
puts " #{monster.name} misses entirely!".colorize(:yellow)
|
255
288
|
end
|
@@ -264,39 +297,56 @@ module Gemwarrior
|
|
264
297
|
end
|
265
298
|
|
266
299
|
def monster_death
|
300
|
+
Audio.play_synth(:battle_win)
|
267
301
|
puts " YOU HAVE DEFEATED #{monster.name.upcase}!\n".colorize(:green)
|
268
302
|
|
269
303
|
if monster.is_boss
|
304
|
+
# stats
|
270
305
|
world.player.bosses_killed += 1
|
271
|
-
|
272
|
-
if monster.name.eql?('
|
306
|
+
|
307
|
+
if monster.name.eql?('emerald')
|
308
|
+
puts ' You just beat THE FINAL BOSS! Unbelievable!'
|
309
|
+
puts
|
310
|
+
|
311
|
+
reward_player(monster)
|
312
|
+
|
273
313
|
# game ending: initiate
|
274
314
|
return monster.initiate_ending(world)
|
275
|
-
|
276
|
-
puts ' You just beat a
|
315
|
+
elsif monster.name.eql?('jaspern')
|
316
|
+
puts ' You just beat a MINIBOSS! Fantastic!'
|
277
317
|
puts
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
318
|
+
|
319
|
+
reward_player(monster)
|
320
|
+
|
321
|
+
# river bridge boss: initiate
|
322
|
+
return monster.river_bridge_success(world)
|
323
|
+
else
|
324
|
+
reward_player(monster)
|
325
|
+
|
283
326
|
world.location_by_coords(player.cur_coords).remove_monster(monster.name)
|
284
327
|
end
|
285
328
|
else
|
329
|
+
# stats
|
286
330
|
world.player.monsters_killed += 1
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
puts " ROX : #{monster.rox}".colorize(:green)
|
291
|
-
unless monster.inventory.nil?
|
292
|
-
puts " ITEMS: #{monster.inventory.list_contents}".colorize(:green) unless monster.inventory.items.empty?
|
293
|
-
end
|
294
|
-
print_battle_line
|
295
|
-
player.update_stats(reason: :monster, value: monster)
|
331
|
+
|
332
|
+
reward_player(monster)
|
333
|
+
|
296
334
|
world.location_by_coords(player.cur_coords).remove_monster(monster.name)
|
297
335
|
end
|
298
336
|
end
|
299
337
|
|
338
|
+
def reward_player(monster)
|
339
|
+
puts ' You get the following spoils of war:'
|
340
|
+
puts " XP : #{monster.xp}".colorize(:green)
|
341
|
+
puts " ROX : #{monster.rox}".colorize(:green)
|
342
|
+
unless monster.inventory.nil?
|
343
|
+
puts " ITEMS: #{monster.inventory.list_contents}".colorize(:green) unless monster.inventory.items.empty?
|
344
|
+
end
|
345
|
+
print_battle_line
|
346
|
+
world.player.update_stats(reason: :monster, value: monster)
|
347
|
+
puts
|
348
|
+
end
|
349
|
+
|
300
350
|
# PLAYER
|
301
351
|
def player_near_death?
|
302
352
|
((player.hp_cur.to_f / player.hp_max.to_f) < 0.10 && !GameOptions.data['god_mode'])
|
@@ -327,12 +377,13 @@ module Gemwarrior
|
|
327
377
|
end
|
328
378
|
end
|
329
379
|
end
|
330
|
-
|
380
|
+
false
|
331
381
|
end
|
332
382
|
|
333
383
|
# STATUS TEXT
|
334
384
|
def print_escape_text
|
335
|
-
|
385
|
+
print ' '
|
386
|
+
Animation.run(phrase: ESCAPE_TEXT, oneline: false)
|
336
387
|
end
|
337
388
|
|
338
389
|
def print_battle_line
|
@@ -340,6 +391,24 @@ module Gemwarrior
|
|
340
391
|
print "\n"
|
341
392
|
end
|
342
393
|
|
394
|
+
def print_battle_options
|
395
|
+
puts ' What do you do?'
|
396
|
+
print ' '
|
397
|
+
print "#{'['.colorize(:yellow)}"
|
398
|
+
print "#{'F'.colorize(:green)}#{'ight]['.colorize(:yellow)}"
|
399
|
+
print "#{'D'.colorize(:green)}#{'efend]['.colorize(:yellow)}"
|
400
|
+
print "#{'L'.colorize(:green)}#{'ook]['.colorize(:yellow)}"
|
401
|
+
print "#{'I'.colorize(:green)}#{'tem]['.colorize(:yellow)}"
|
402
|
+
print "#{'P'.colorize(:green)}#{'ass]['.colorize(:yellow)}"
|
403
|
+
print "#{'R'.colorize(:green)}#{'un]'.colorize(:yellow)}"
|
404
|
+
print "\n"
|
405
|
+
print_battle_prompt
|
406
|
+
end
|
407
|
+
|
408
|
+
def print_battle_prompt
|
409
|
+
print ' [BATTLE]> '
|
410
|
+
end
|
411
|
+
|
343
412
|
def print_battle_header
|
344
413
|
print_battle_line
|
345
414
|
puts ' BATTLE BEGINS!'.ljust(GameOptions.data['wrap_width']).colorize(background: :red, color: :white)
|