gemwarrior 0.8.5 → 0.8.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/data/locations.yml +3 -1
- data/lib/gemwarrior/battle.rb +11 -0
- data/lib/gemwarrior/entities/item.rb +10 -0
- data/lib/gemwarrior/entities/items/map.rb +25 -0
- data/lib/gemwarrior/entities/location.rb +13 -5
- data/lib/gemwarrior/entities/monster.rb +11 -4
- data/lib/gemwarrior/entities/player.rb +3 -1
- data/lib/gemwarrior/evaluator.rb +8 -5
- data/lib/gemwarrior/misc/music.rb +3 -5
- data/lib/gemwarrior/repl.rb +18 -14
- data/lib/gemwarrior/version.rb +1 -1
- data/lib/gemwarrior/world.rb +18 -11
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4adb293d5ef28ea948ddefa890aba39e892b1f67
|
4
|
+
data.tar.gz: abb4df914fa5da5d2300d434d9a5b3c823099f75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4af0a454c2928b69af31098408600aafcbe20690db64ec49085bac65d494627daab325b5d4fb393a5d7c96f9c31fe98f63a783e02a97ddb0b74ec5b0cbd1070d
|
7
|
+
data.tar.gz: ce558c2829a12c6b1bc5ebd3de146ab8f1e9348bf4c4e2bc7c1e042bfd14d239f420f30b45386ede65e1e5eaa6a2054964b424f23a2b5c996592d383b181c15b
|
data/.gitignore
CHANGED
data/data/locations.yml
CHANGED
@@ -435,7 +435,7 @@
|
|
435
435
|
|
436
436
|
-
|
437
437
|
name: 'Cave (Causeway)'
|
438
|
-
description: 'Paths lead north and west
|
438
|
+
description: 'Paths lead north and west as a dank, musty smell permeates your sinuses.'
|
439
439
|
danger_level: :moderate
|
440
440
|
coords:
|
441
441
|
x: 8
|
@@ -449,6 +449,8 @@
|
|
449
449
|
monster_level_range:
|
450
450
|
lo: 2
|
451
451
|
hi: 3
|
452
|
+
items:
|
453
|
+
- Map
|
452
454
|
-
|
453
455
|
name: 'Forest (Southeast)'
|
454
456
|
description: 'Trees exist here, in droves.'
|
data/lib/gemwarrior/battle.rb
CHANGED
@@ -225,7 +225,18 @@ module Gemwarrior
|
|
225
225
|
puts "You have defeated #{monster.name}!\n".colorize(:green)
|
226
226
|
if monster.is_boss
|
227
227
|
if monster.name.eql?("Emerald")
|
228
|
+
Music::cue([
|
229
|
+
{:freq_or_note => 'G3', :duration => 50},
|
230
|
+
{:freq_or_note => 'A3', :duration => 50},
|
231
|
+
{:freq_or_note => 'B3', :duration => 50},
|
232
|
+
{:freq_or_note => 'C4', :duration => 50},
|
233
|
+
{:freq_or_note => 'D4', :duration => 50},
|
234
|
+
{:freq_or_note => 'E4', :duration => 50},
|
235
|
+
{:freq_or_note => 'F#4', :duration => 50},
|
236
|
+
{:freq_or_note => 'G4', :duration => 50}
|
237
|
+
])
|
228
238
|
puts monster.defeated_text
|
239
|
+
gets
|
229
240
|
exit(0)
|
230
241
|
else
|
231
242
|
puts 'You just beat a boss monster. Way to go!'
|
@@ -16,5 +16,15 @@ module Gemwarrior
|
|
16
16
|
def use(inventory = nil)
|
17
17
|
'That item does not do anything...yet.'
|
18
18
|
end
|
19
|
+
|
20
|
+
def describe
|
21
|
+
status_text = name.upcase.colorize(:green)
|
22
|
+
status_text << "\n#{description} \n".colorize(:white)
|
23
|
+
status_text << "ATTACK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)} ".colorize(:white) unless atk_lo.nil?
|
24
|
+
status_text << "TAKEABLE? #{takeable} ".colorize(:white)
|
25
|
+
status_text << "USEABLE? #{useable} ".colorize(:white)
|
26
|
+
status_text << "EQUIPPABLE? #{equippable} ".colorize(:white)
|
27
|
+
status_text << "\n"
|
28
|
+
end
|
19
29
|
end
|
20
30
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# lib/gemwarrior/entities/items/map.rb
|
2
|
+
# Item::Map
|
3
|
+
|
4
|
+
require_relative '../item'
|
5
|
+
|
6
|
+
module Gemwarrior
|
7
|
+
class Map < Item
|
8
|
+
def initialize
|
9
|
+
self.name = 'map'
|
10
|
+
self.description = 'The land of Jool is contained on this piece of canvas, in a useful, if not very detailed, manner.'
|
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
|
+
|
19
|
+
def use(player = nil)
|
20
|
+
puts 'You unfold the piece of worn canvas, and study the markings upon it.'
|
21
|
+
|
22
|
+
{:type => 'action', :data => 'map'}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -29,15 +29,23 @@ module Gemwarrior
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def status(debug_mode = false)
|
32
|
-
status_text = name.ljust(
|
32
|
+
status_text = name.ljust(30).upcase.colorize(:green)
|
33
33
|
status_text << coords.values.to_a.to_s.colorize(:white)
|
34
34
|
status_text << " DL[#{danger_level.to_s.ljust(8)}] ".colorize(:white) if debug_mode
|
35
35
|
status_text << " MLR[#{monster_level_range.to_s.ljust(6)}] ".colorize(:white) if debug_mode
|
36
|
-
status_text << "
|
36
|
+
status_text << "\n#{description}\n".colorize(:white)
|
37
37
|
end
|
38
38
|
|
39
39
|
def has_item?(item_name)
|
40
|
-
items.map
|
40
|
+
items.map{|i| i.name.downcase}.include?(item_name)
|
41
|
+
end
|
42
|
+
|
43
|
+
def has_monster?(monster_name)
|
44
|
+
monsters_abounding.map{|m| m.name.downcase}.include?(monster_name)
|
45
|
+
end
|
46
|
+
|
47
|
+
def has_boss?(boss_name)
|
48
|
+
bosses_abounding.map{|b| b.name.downcase}.include?(boss_name)
|
41
49
|
end
|
42
50
|
|
43
51
|
def add_item(item_name)
|
@@ -89,7 +97,7 @@ module Gemwarrior
|
|
89
97
|
checked_for_monsters
|
90
98
|
end
|
91
99
|
|
92
|
-
def
|
100
|
+
def should_spawn_monster?
|
93
101
|
found = false
|
94
102
|
unless danger_level.eql?(:none)
|
95
103
|
max = DANGER_LEVEL[danger_level]
|
@@ -146,7 +154,7 @@ module Gemwarrior
|
|
146
154
|
end
|
147
155
|
|
148
156
|
def populate_monsters(monsters_available, spawn = false)
|
149
|
-
if
|
157
|
+
if should_spawn_monster? || spawn
|
150
158
|
self.checked_for_monsters = true unless spawn
|
151
159
|
self.monsters_abounding = [] unless spawn
|
152
160
|
random_monster = nil
|
@@ -19,7 +19,13 @@ module Gemwarrior
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def describe
|
22
|
-
status_text = name.upcase.ljust(
|
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
|
23
29
|
status_text << "LEVEL: #{level.to_s.rjust(2)}, ".colorize(:white)
|
24
30
|
status_text << "HP: #{hp_cur.to_s.rjust(3)}/#{hp_max.to_s.rjust(3)} ".colorize(:white)
|
25
31
|
status_text << "ATK: #{atk_lo.to_s.rjust(2)}-#{atk_hi.to_s.rjust(2)} ".colorize(:white)
|
@@ -27,9 +33,10 @@ module Gemwarrior
|
|
27
33
|
status_text << "DEX: #{dexterity.to_s.rjust(2)} ".colorize(:white)
|
28
34
|
status_text << "ROX: #{rox.to_s.rjust(3)} ".colorize(:white)
|
29
35
|
status_text << "XP: #{xp.to_s.rjust(3)} ".colorize(:white)
|
30
|
-
status_text << "
|
31
|
-
status_text << "
|
32
|
-
status_text << "
|
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)
|
33
40
|
status_text << "INV: #{inventory.list_contents}".colorize(:white)
|
34
41
|
status_text << "\n"
|
35
42
|
end
|
@@ -216,7 +216,9 @@ module Gemwarrior
|
|
216
216
|
Animation::run({:oneline => false, :phrase => "* #{direction_text} *"})
|
217
217
|
if sound
|
218
218
|
Music::cue([
|
219
|
-
{:freq_or_note => 'C3,
|
219
|
+
{:freq_or_note => 'C3', :duration => 75},
|
220
|
+
{:freq_or_note => 'D3', :duration => 75},
|
221
|
+
{:freq_or_note => 'E3', :duration => 75}
|
220
222
|
])
|
221
223
|
end
|
222
224
|
end
|
data/lib/gemwarrior/evaluator.rb
CHANGED
@@ -65,7 +65,7 @@ module Gemwarrior
|
|
65
65
|
|
66
66
|
self.commands = %w(character inventory rest look take use drop equip unequip go attack change help quit quit!)
|
67
67
|
self.aliases = %w(c i r l t u d e ue g a ch h q qq)
|
68
|
-
self.extras = %w(exit exit! x x)
|
68
|
+
self.extras = %w(exit exit! x x fight f)
|
69
69
|
self.cmd_descriptions = [
|
70
70
|
'Display character information',
|
71
71
|
'Look in your inventory',
|
@@ -111,13 +111,13 @@ module Gemwarrior
|
|
111
111
|
when 'beast', 'bs'
|
112
112
|
return world.player.beast_mode = !world.player.beast_mode
|
113
113
|
when 'vars', 'v'
|
114
|
-
world.
|
114
|
+
world.print_vars
|
115
115
|
when 'list', 'ls'
|
116
116
|
if param1.nil?
|
117
117
|
puts ERROR_LIST_PARAM_MISSING
|
118
118
|
return DEBUG_LIST_PARAMS
|
119
119
|
else
|
120
|
-
return world.list(param1)
|
120
|
+
return world.list(param1, param2)
|
121
121
|
end
|
122
122
|
when 'map', 'm'
|
123
123
|
world.print_map
|
@@ -307,8 +307,11 @@ module Gemwarrior
|
|
307
307
|
world.player.heal_damage(result[:data])
|
308
308
|
return
|
309
309
|
when 'action'
|
310
|
-
|
310
|
+
case result[:data]
|
311
|
+
when 'rest'
|
311
312
|
world.player.rest(world)
|
313
|
+
when 'map'
|
314
|
+
world.print_map
|
312
315
|
end
|
313
316
|
when 'arena'
|
314
317
|
arena = Arena.new({:world => world, :player => world.player})
|
@@ -354,7 +357,7 @@ module Gemwarrior
|
|
354
357
|
ERROR_GO_PARAM_INVALID
|
355
358
|
end
|
356
359
|
end
|
357
|
-
when 'attack', 'a'
|
360
|
+
when 'attack', 'a', 'fight', 'f'
|
358
361
|
if param1.nil?
|
359
362
|
ERROR_ATTACK_PARAM_MISSING
|
360
363
|
else
|
@@ -7,12 +7,12 @@ module Gemwarrior
|
|
7
7
|
defaults = {
|
8
8
|
:freq_or_note => 440,
|
9
9
|
:waveform => 'saw',
|
10
|
-
:volume => 0.
|
10
|
+
:volume => 0.3,
|
11
11
|
:duration => 500,
|
12
12
|
:notext => true
|
13
13
|
}
|
14
14
|
|
15
|
-
|
15
|
+
Thread.start {
|
16
16
|
sequence.each do |note|
|
17
17
|
note_to_play = note[:freq_or_note]
|
18
18
|
waveform = note[:waveform].nil? ? defaults[:waveform] : note[:waveform]
|
@@ -28,9 +28,7 @@ module Gemwarrior
|
|
28
28
|
:notext => notext
|
29
29
|
})
|
30
30
|
end
|
31
|
-
|
32
|
-
|
33
|
-
return th.join
|
31
|
+
}
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
data/lib/gemwarrior/repl.rb
CHANGED
@@ -18,8 +18,8 @@ module Gemwarrior
|
|
18
18
|
attr_accessor :world, :eval
|
19
19
|
|
20
20
|
def initialize(world, evaluator)
|
21
|
-
self.world
|
22
|
-
self.eval
|
21
|
+
self.world = world
|
22
|
+
self.eval = evaluator
|
23
23
|
end
|
24
24
|
|
25
25
|
def start(initialCommand = nil)
|
@@ -42,27 +42,23 @@ module Gemwarrior
|
|
42
42
|
private
|
43
43
|
|
44
44
|
def clear_screen
|
45
|
-
|
46
|
-
system('cls')
|
47
|
-
else
|
48
|
-
system('clear')
|
49
|
-
end
|
45
|
+
OS.windows? ? system('cls') : system('clear')
|
50
46
|
end
|
51
47
|
|
52
48
|
def print_logo
|
53
|
-
puts "/-+-+-+ +-+-+-+-+-+-+-\\".colorize(:yellow)
|
54
|
-
puts '|G|E|M| |W|A|R|R|I|O|R|'.colorize(:yellow)
|
55
|
-
puts "\\-+-+-+ +-+-+-+-+-+-+-/".colorize(:yellow)
|
56
|
-
|
57
49
|
if world.sound
|
58
50
|
Music::cue([
|
59
51
|
{:freq_or_note => 'A3,E4,C#5,F#5', :duration => 1000}
|
60
52
|
])
|
61
53
|
end
|
54
|
+
|
55
|
+
puts "/-+-+-+ +-+-+-+-+-+-+-\\".colorize(:yellow)
|
56
|
+
puts '|G|E|M| |W|A|R|R|I|O|R|'.colorize(:yellow)
|
57
|
+
puts "\\-+-+-+ +-+-+-+-+-+-+-/".colorize(:yellow)
|
58
|
+
puts '[[[[[[[DEBUGGING]]]]]]]'.colorize(:white) if world.debug_mode
|
62
59
|
end
|
63
60
|
|
64
61
|
def print_splash_message
|
65
|
-
print_logo
|
66
62
|
SPLASH_MESSAGE.length.times do print '=' end
|
67
63
|
puts
|
68
64
|
puts SPLASH_MESSAGE
|
@@ -88,9 +84,10 @@ module Gemwarrior
|
|
88
84
|
def setup_screen(initialCommand = nil)
|
89
85
|
# welcome player to game
|
90
86
|
clear_screen
|
87
|
+
print_logo
|
91
88
|
print_splash_message
|
92
89
|
print_fortune
|
93
|
-
print_help
|
90
|
+
print_help unless world.debug_mode
|
94
91
|
|
95
92
|
# hook to do something right off the bat
|
96
93
|
puts eval.evaluate(initialCommand) unless initialCommand.nil?
|
@@ -98,6 +95,9 @@ module Gemwarrior
|
|
98
95
|
|
99
96
|
def prompt
|
100
97
|
prompt_template = "\n[LV:%3s][XP:%3s][ROX:%3s] -- [HP:%3s/%-3s][STM:%2s/%-2s] -- [%s @ %s]"
|
98
|
+
if world.debug_mode
|
99
|
+
prompt_template += "[%s, %s, %s]"
|
100
|
+
end
|
101
101
|
prompt_vars_arr = [
|
102
102
|
world.player.level,
|
103
103
|
world.player.xp,
|
@@ -109,11 +109,15 @@ module Gemwarrior
|
|
109
109
|
world.player.name,
|
110
110
|
world.location_by_coords(world.player.cur_coords).name
|
111
111
|
]
|
112
|
+
if world.debug_mode
|
113
|
+
prompt_vars_arr.push(world.player.cur_coords[:x], world.player.cur_coords[:y], world.player.cur_coords[:z])
|
114
|
+
end
|
112
115
|
puts (prompt_template % prompt_vars_arr).colorize(:yellow)
|
113
116
|
end
|
114
117
|
|
115
118
|
def read_line
|
116
|
-
|
119
|
+
prompt_text = world.debug_mode ? ' GW[D]> ' : ' GW> '
|
120
|
+
Readline.readline(prompt_text, true).to_s
|
117
121
|
end
|
118
122
|
end
|
119
123
|
end
|
data/lib/gemwarrior/version.rb
CHANGED
data/lib/gemwarrior/world.rb
CHANGED
@@ -25,7 +25,7 @@ module Gemwarrior
|
|
25
25
|
self.player = nil
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
28
|
+
def print_vars
|
29
29
|
puts "======================\n"
|
30
30
|
puts "All Variables in World\n"
|
31
31
|
puts "======================\n"
|
@@ -64,6 +64,14 @@ module Gemwarrior
|
|
64
64
|
0.upto(WORLD_DIM_WIDTH-1) do |count_x|
|
65
65
|
print "#{count_x} "
|
66
66
|
end
|
67
|
+
if debug_mode
|
68
|
+
puts
|
69
|
+
puts
|
70
|
+
puts "Current level: #{player.cur_coords[:z]}"
|
71
|
+
puts '| | = invalid location'
|
72
|
+
puts '|X| = valid location'
|
73
|
+
puts '|O| = player'
|
74
|
+
end
|
67
75
|
return
|
68
76
|
end
|
69
77
|
|
@@ -73,10 +81,9 @@ module Gemwarrior
|
|
73
81
|
puts '[PLAYERS]'
|
74
82
|
player.check_self(false)
|
75
83
|
when 'monsters'
|
76
|
-
puts "[MONSTERS](#{monsters.length})"
|
84
|
+
puts "[MONSTERS](#{monsters.length})".colorize(:yellow)
|
77
85
|
if details
|
78
|
-
monsters.map { |m| print m.describe
|
79
|
-
monsters.map { |m| print m.describe if m.is_boss }
|
86
|
+
monsters.map { |m| print m.describe }
|
80
87
|
return
|
81
88
|
else
|
82
89
|
monster_text = ">> monsters: #{monsters.map(&:name).join(', ')}"
|
@@ -88,10 +95,10 @@ module Gemwarrior
|
|
88
95
|
item_count = item_count + 1
|
89
96
|
end
|
90
97
|
end
|
91
|
-
puts "[ITEMS](#{item_count})"
|
98
|
+
puts "[ITEMS](#{item_count})".colorize(:yellow)
|
92
99
|
if details
|
93
100
|
locations.each do |l|
|
94
|
-
l.items.map { |i| print i.
|
101
|
+
l.items.map { |i| print i.describe }
|
95
102
|
end
|
96
103
|
return
|
97
104
|
else
|
@@ -102,7 +109,7 @@ module Gemwarrior
|
|
102
109
|
">> #{item_list.sort.join(', ')}"
|
103
110
|
end
|
104
111
|
when 'locations'
|
105
|
-
puts "[LOCATIONS](#{locations.length})"
|
112
|
+
puts "[LOCATIONS](#{locations.length})".colorize(:yellow)
|
106
113
|
if details
|
107
114
|
locations.map { |l| print l.status(self.debug_mode) }
|
108
115
|
return
|
@@ -159,18 +166,18 @@ module Gemwarrior
|
|
159
166
|
end
|
160
167
|
|
161
168
|
def describe_entity(point, entity_name)
|
162
|
-
if point.
|
169
|
+
if point.has_item?(entity_name)
|
163
170
|
point.items.each do |i|
|
164
171
|
if i.name.downcase.eql?(entity_name.downcase)
|
165
172
|
if debug_mode
|
166
|
-
return i.
|
173
|
+
return i.describe
|
167
174
|
else
|
168
175
|
return i.description
|
169
176
|
end
|
170
177
|
end
|
171
178
|
end
|
172
179
|
elsif
|
173
|
-
if point.
|
180
|
+
if point.has_monster?(entity_name)
|
174
181
|
point.monsters_abounding.each do |m|
|
175
182
|
if m.name.downcase.eql?(entity_name.downcase)
|
176
183
|
if debug_mode
|
@@ -182,7 +189,7 @@ module Gemwarrior
|
|
182
189
|
end
|
183
190
|
end
|
184
191
|
elsif
|
185
|
-
if point.
|
192
|
+
if point.has_boss?(entity_name)
|
186
193
|
point.bosses_abounding.each do |b|
|
187
194
|
if b.name.downcase.eql?(entity_name.downcase)
|
188
195
|
if debug_mode
|
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.8.
|
4
|
+
version: 0.8.6
|
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-
|
11
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: os
|
@@ -208,6 +208,7 @@ files:
|
|
208
208
|
- lib/gemwarrior/entities/items/herb.rb
|
209
209
|
- lib/gemwarrior/entities/items/keystone.rb
|
210
210
|
- lib/gemwarrior/entities/items/ladder.rb
|
211
|
+
- lib/gemwarrior/entities/items/map.rb
|
211
212
|
- lib/gemwarrior/entities/items/massive_door.rb
|
212
213
|
- lib/gemwarrior/entities/items/opalaser.rb
|
213
214
|
- lib/gemwarrior/entities/items/pond.rb
|