gemwarrior 0.9.13 → 0.9.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/gemwarrior +0 -0
- data/lib/gemwarrior/arena.rb +1 -1
- data/lib/gemwarrior/entities/player.rb +15 -5
- data/lib/gemwarrior/evaluator.rb +20 -4
- data/lib/gemwarrior/inventory.rb +16 -11
- data/lib/gemwarrior/repl.rb +16 -4
- data/lib/gemwarrior/version.rb +1 -1
- data/lib/gemwarrior/world.rb +19 -19
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93bc49273b5962d3094e927e1f2b604fcd4190b9
|
4
|
+
data.tar.gz: c7219c8675e8549d72e2df4db0e5caf860ab3b47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1efa9aa0504e57f90d77bcf29e1dc6677a7709ba1114016256cf280cf626f3d2e5bd6eed100c5f72eb093f8f52bb1eab16964c454f0c043ef5fb709d1271277c
|
7
|
+
data.tar.gz: 4d80c518aad9e8eff5fc8f0c916b38031b01b234e3fc13f87ff4eb73c45cc6af4a1cd6538013cb94e6ca82dae2ea727cc9982c80b64d5d7ad94657c1fb0ad165
|
data/bin/gemwarrior
CHANGED
File without changes
|
data/lib/gemwarrior/arena.rb
CHANGED
@@ -95,14 +95,24 @@ module Gemwarrior
|
|
95
95
|
self_text << "Current status - breathing, wearing clothing, and with a few other specific characteristics: face is #{self.face}, hands are #{self.hands}, and general mood is #{self.mood}.\n"
|
96
96
|
end
|
97
97
|
|
98
|
-
def rest(world, tent_uses = nil)
|
98
|
+
def rest(world, tent_uses = nil, ensure_fight = false)
|
99
|
+
if ensure_fight
|
100
|
+
battle = Battle.new({:world => world, :player => self, :monster => world.monsters[rand(0..world.monsters.length-1)].clone})
|
101
|
+
result = battle.start(is_arena = false, is_event = true)
|
102
|
+
if result.eql?('death')
|
103
|
+
return 'death'
|
104
|
+
else
|
105
|
+
return
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
99
109
|
cur_loc = world.location_by_coords(cur_coords)
|
100
110
|
|
101
111
|
if cur_loc.should_spawn_monster?
|
102
112
|
chance_of_ambush = rand(0..100)
|
103
113
|
|
104
114
|
if chance_of_ambush < 25
|
105
|
-
battle = Battle.new({:world => world, :player => self, :monster => cur_loc.monsters_abounding[rand(0..cur_loc.monsters_abounding.length-1)]})
|
115
|
+
battle = Battle.new({:world => world, :player => self, :monster => cur_loc.monsters_abounding[rand(0..cur_loc.monsters_abounding.length-1)].clone})
|
106
116
|
return battle.start(is_arena = false, is_event = true)
|
107
117
|
end
|
108
118
|
end
|
@@ -123,12 +133,12 @@ module Gemwarrior
|
|
123
133
|
if tent_uses > 0
|
124
134
|
self.hp_cur = self.hp_max
|
125
135
|
|
126
|
-
|
136
|
+
puts "You brandish the trusty magical canvas and, with a flick of the wrist, your home for the evening is set up. Approximately #{hours} #{hours_text}, #{minutes} #{mins_text}, and #{seconds} #{secs_text} later, you wake up, fully rested, ready for adventure."
|
127
137
|
else
|
128
138
|
self.hp_cur = self.hp_cur.to_i + rand(10..15)
|
129
139
|
self.hp_cur = self.hp_max if self.hp_cur > self.hp_max
|
130
140
|
|
131
|
-
|
141
|
+
puts "You lie down somewhere quasi-flat and after a few moments, due to extreme exhaustion, you fall into a deep, yet troubled, slumber. Approximately #{hours} #{hours_text}, #{minutes} #{mins_text}, and #{seconds} #{secs_text} later, you wake up with a start. Upon getting to your feet you look around, notice you feel somewhat better, and wonder why you dreamt about #{WordList.new(world.use_wordnik, 'noun-plural').get_random_value}."
|
132
142
|
end
|
133
143
|
end
|
134
144
|
|
@@ -241,7 +251,7 @@ module Gemwarrior
|
|
241
251
|
self.inventory.items.concat monster_items unless monster_items.empty?
|
242
252
|
end
|
243
253
|
when trigger[:reason].eql?(:xp)
|
244
|
-
self.xp += trigger[:value]
|
254
|
+
self.xp += trigger[:value]
|
245
255
|
when trigger[:reason].eql?(:level_bump)
|
246
256
|
next_player_level = old_player_level + 1
|
247
257
|
self.xp = PlayerLevels::get_level_stats(next_player_level)[:xp_start]
|
data/lib/gemwarrior/evaluator.rb
CHANGED
@@ -47,8 +47,8 @@ module Gemwarrior
|
|
47
47
|
def initialize(world)
|
48
48
|
self.world = world
|
49
49
|
|
50
|
-
self.devcommands = %w(god beast list vars map stat teleport spawn levelbump)
|
51
|
-
self.devaliases = %w(gd bs ls v m s tp sp lb)
|
50
|
+
self.devcommands = %w(god beast list vars map stat teleport spawn levelbump restfight)
|
51
|
+
self.devaliases = %w(gd bs ls v m s tp sp lb rf)
|
52
52
|
self.devextras = %w(st)
|
53
53
|
self.devcmd_descriptions = [
|
54
54
|
'Toggle god mode (i.e. invincible)',
|
@@ -59,7 +59,8 @@ module Gemwarrior
|
|
59
59
|
'Change player stat',
|
60
60
|
'Teleport to coordinates (5 0 0) or location name (\'Home\')',
|
61
61
|
'Spawn random monster',
|
62
|
-
'Bump your character to the next experience level'
|
62
|
+
'Bump your character to the next experience level',
|
63
|
+
'Rest, but ensure battle for testing'
|
63
64
|
]
|
64
65
|
|
65
66
|
self.commands = %w(character inventory rest look take use drop equip unequip go attack change help quit quit!)
|
@@ -247,6 +248,12 @@ module Gemwarrior
|
|
247
248
|
end
|
248
249
|
when 'levelbump', 'lb'
|
249
250
|
world.player.update_stats({:reason => :level_bump, :value => 1})
|
251
|
+
when 'restfight', 'rf'
|
252
|
+
result = world.player.rest(world, nil, true)
|
253
|
+
|
254
|
+
if result.eql?('death')
|
255
|
+
player_death_resurrection
|
256
|
+
end
|
250
257
|
end
|
251
258
|
end
|
252
259
|
|
@@ -290,7 +297,12 @@ module Gemwarrior
|
|
290
297
|
end
|
291
298
|
end
|
292
299
|
end
|
293
|
-
|
300
|
+
|
301
|
+
result = world.player.rest(world, tent_uses)
|
302
|
+
|
303
|
+
if result.eql?('death')
|
304
|
+
player_death_resurrection
|
305
|
+
end
|
294
306
|
when 'look', 'l'
|
295
307
|
if param1
|
296
308
|
world.describe_entity(world.location_by_coords(world.player.cur_coords), param1)
|
@@ -328,6 +340,8 @@ module Gemwarrior
|
|
328
340
|
elsif i.consumable
|
329
341
|
result = i.use(world.player)
|
330
342
|
world.player.inventory.remove_item(i.name)
|
343
|
+
else
|
344
|
+
result = i.use(world.player)
|
331
345
|
end
|
332
346
|
else
|
333
347
|
return ERROR_USE_PARAM_UNUSEABLE
|
@@ -349,6 +363,8 @@ module Gemwarrior
|
|
349
363
|
elsif i.consumable
|
350
364
|
result = i.use(world.player)
|
351
365
|
world.player.inventory.remove_item(i.name)
|
366
|
+
else
|
367
|
+
result = i.use(world.player)
|
352
368
|
end
|
353
369
|
else
|
354
370
|
return ERROR_USE_PARAM_UNUSEABLE
|
data/lib/gemwarrior/inventory.rb
CHANGED
@@ -8,10 +8,9 @@ module Gemwarrior
|
|
8
8
|
ERROR_ITEM_REMOVE_INVALID = 'Your inventory does not contain that item, so you cannot drop it.'
|
9
9
|
ERROR_ITEM_ADD_UNTAKEABLE = 'That would be great if you could take that thing, wouldn\'t it? Well, it\'s not so great for you right now.'
|
10
10
|
ERROR_ITEM_ADD_INVALID = 'That item does not exist here.'
|
11
|
-
|
12
|
-
ERROR_ITEM_EQUIP_INVALID = 'You do not have anything called that to equip.'
|
11
|
+
ERROR_ITEM_EQUIP_INVALID = 'You do not possess anything called that to equip.'
|
13
12
|
ERROR_ITEM_EQUIP_NONWEAPON = 'That cannot be equipped as a weapon.'
|
14
|
-
ERROR_ITEM_UNEQUIP_INVALID = 'You do not
|
13
|
+
ERROR_ITEM_UNEQUIP_INVALID = 'You do not possess anything called that to unequip.'
|
15
14
|
ERROR_ITEM_UNEQUIP_NONWEAPON = 'That cannot be unequipped.'
|
16
15
|
|
17
16
|
attr_accessor :items, :weapon
|
@@ -41,7 +40,7 @@ module Gemwarrior
|
|
41
40
|
end
|
42
41
|
end
|
43
42
|
else
|
44
|
-
|
43
|
+
return false
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
@@ -54,7 +53,7 @@ module Gemwarrior
|
|
54
53
|
self.weapon = i
|
55
54
|
return "The #{i.name} has taken charge, and been equipped."
|
56
55
|
else
|
57
|
-
ERROR_ITEM_EQUIP_NONWEAPON
|
56
|
+
return ERROR_ITEM_EQUIP_NONWEAPON
|
58
57
|
end
|
59
58
|
end
|
60
59
|
end
|
@@ -102,13 +101,19 @@ module Gemwarrior
|
|
102
101
|
|
103
102
|
def remove_item(item_name)
|
104
103
|
if contains_item?(item_name)
|
105
|
-
|
106
|
-
|
107
|
-
unless self.weapon.nil?
|
108
|
-
self.weapon = nil if self.weapon.name.eql?(item_name)
|
109
|
-
end
|
104
|
+
puts "Are you sure you want to permanently throw away #{item_name}? (Y/N)"
|
105
|
+
answer = gets.downcase.chomp!
|
110
106
|
|
111
|
-
|
107
|
+
if answer.eql?('y')
|
108
|
+
items.delete_at(items.map(&:name).index(item_name) || items.length)
|
109
|
+
unless self.weapon.nil?
|
110
|
+
self.weapon = nil if self.weapon.name.eql?(item_name)
|
111
|
+
end
|
112
|
+
|
113
|
+
return "The #{item_name} has been thrown on the ground, but far out of reach, and you're much too lazy to go get it now, so it's as good as gone."
|
114
|
+
else
|
115
|
+
return "You decide to keep #{item_name} for now."
|
116
|
+
end
|
112
117
|
else
|
113
118
|
ERROR_ITEM_REMOVE_INVALID
|
114
119
|
end
|
data/lib/gemwarrior/repl.rb
CHANGED
@@ -17,7 +17,8 @@ module Gemwarrior
|
|
17
17
|
## MESSAGES
|
18
18
|
QUIT_MESSAGE = 'Temporal flux detected. Shutting down...'.colorize(:red)
|
19
19
|
MAIN_MENU_QUIT_MESSAGE = 'Giving up so soon? Jool will be waiting...'.colorize(:yellow)
|
20
|
-
SPLASH_MESSAGE = 'Welcome to
|
20
|
+
SPLASH_MESSAGE = 'Welcome to *Jool*, where randomized fortune is just as likely as mayhem.'
|
21
|
+
WRAP_WIDTH = 80
|
21
22
|
|
22
23
|
attr_accessor :world, :eval
|
23
24
|
|
@@ -91,6 +92,7 @@ module Gemwarrior
|
|
91
92
|
noun3_values = WordList.new(world.use_wordnik, 'noun-plural')
|
92
93
|
|
93
94
|
puts "* Remember: #{noun1_values.get_random_value} and #{noun2_values.get_random_value} are the key to #{noun3_values.get_random_value} *\n\n"
|
95
|
+
puts
|
94
96
|
end
|
95
97
|
|
96
98
|
def print_help
|
@@ -174,14 +176,19 @@ module Gemwarrior
|
|
174
176
|
print_logo
|
175
177
|
|
176
178
|
# main menu loop until new game or exit
|
177
|
-
|
179
|
+
if world.new_game
|
180
|
+
print_splash_message
|
181
|
+
print_fortune
|
182
|
+
else
|
183
|
+
run_main_menu
|
184
|
+
end
|
178
185
|
|
179
186
|
# hook to do something right off the bat
|
180
187
|
puts eval.evaluate(initialCommand) unless initialCommand.nil?
|
181
188
|
end
|
182
189
|
|
183
190
|
def prompt
|
184
|
-
prompt_template = "\n[LV:%
|
191
|
+
prompt_template = "\n[LV:%2s][XP:%3s][ROX:%3s] [HP:%3s/%-3s][STM:%2s/%-2s] [%s @ %s]"
|
185
192
|
if world.debug_mode
|
186
193
|
prompt_template += "[%s, %s, %s]"
|
187
194
|
end
|
@@ -199,12 +206,17 @@ module Gemwarrior
|
|
199
206
|
if world.debug_mode
|
200
207
|
prompt_vars_arr.push(world.player.cur_coords[:x], world.player.cur_coords[:y], world.player.cur_coords[:z])
|
201
208
|
end
|
202
|
-
|
209
|
+
print (prompt_template % prompt_vars_arr).colorize(:yellow)
|
210
|
+
print "\n"
|
203
211
|
end
|
204
212
|
|
205
213
|
def read_line
|
206
214
|
prompt_text = world.debug_mode ? ' GW[D]> ' : ' GW> '
|
207
215
|
Readline.readline(prompt_text, true).to_s
|
208
216
|
end
|
217
|
+
|
218
|
+
def puts(s='', width=WRAP_WIDTH)
|
219
|
+
super s.gsub(/(.{1,#{width}})(\s+|\Z)/, "\\1\n") unless s.nil?
|
220
|
+
end
|
209
221
|
end
|
210
222
|
end
|
data/lib/gemwarrior/version.rb
CHANGED
data/lib/gemwarrior/world.rb
CHANGED
@@ -170,9 +170,11 @@ module Gemwarrior
|
|
170
170
|
end
|
171
171
|
|
172
172
|
def describe_entity(point, entity_name)
|
173
|
+
entity_name.downcase!
|
174
|
+
|
173
175
|
if point.has_item?(entity_name)
|
174
176
|
point.items.each do |i|
|
175
|
-
if i.name.downcase.eql?(entity_name
|
177
|
+
if i.name.downcase.eql?(entity_name)
|
176
178
|
if debug_mode
|
177
179
|
return i.describe
|
178
180
|
else
|
@@ -180,30 +182,28 @@ module Gemwarrior
|
|
180
182
|
end
|
181
183
|
end
|
182
184
|
end
|
183
|
-
elsif
|
184
|
-
|
185
|
-
|
186
|
-
if
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
return m.description
|
191
|
-
end
|
185
|
+
elsif point.has_monster?(entity_name)
|
186
|
+
point.monsters_abounding.each do |m|
|
187
|
+
if m.name.downcase.eql?(entity_name)
|
188
|
+
if debug_mode
|
189
|
+
return m.describe
|
190
|
+
else
|
191
|
+
return m.description
|
192
192
|
end
|
193
193
|
end
|
194
194
|
end
|
195
|
-
elsif
|
196
|
-
|
197
|
-
|
198
|
-
if
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
return b.description
|
203
|
-
end
|
195
|
+
elsif point.has_boss?(entity_name)
|
196
|
+
point.bosses_abounding.each do |b|
|
197
|
+
if b.name.downcase.eql?(entity_name)
|
198
|
+
if debug_mode
|
199
|
+
return b.describe
|
200
|
+
else
|
201
|
+
return b.description
|
204
202
|
end
|
205
203
|
end
|
206
204
|
end
|
205
|
+
elsif player.inventory.contains_item?(entity_name)
|
206
|
+
player.inventory.describe_item(entity_name)
|
207
207
|
else
|
208
208
|
ERROR_LOCATION_DESCRIBE_ENTITY_INVALID
|
209
209
|
end
|
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.9.
|
4
|
+
version: 0.9.14
|
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-
|
11
|
+
date: 2015-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: os
|
@@ -294,4 +294,6 @@ rubygems_version: 2.4.8
|
|
294
294
|
signing_key:
|
295
295
|
specification_version: 4
|
296
296
|
summary: RubyGem text adventure
|
297
|
-
test_files:
|
297
|
+
test_files:
|
298
|
+
- spec/rubywarrior_spec.rb
|
299
|
+
- spec/spec_helper.rb
|