gemwarrior 0.14.4 → 0.14.5
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 +1 -1
- data/gemwarrior.gemspec +5 -8
- data/lib/gemwarrior/battle.rb +6 -1
- data/lib/gemwarrior/entities/items/bookcase.rb +1 -0
- data/lib/gemwarrior/entities/items/massive_door.rb +1 -0
- data/lib/gemwarrior/entities/items/pedestal.rb +1 -0
- data/lib/gemwarrior/entities/items/pond.rb +1 -0
- data/lib/gemwarrior/entities/items/small_hole.rb +1 -0
- data/lib/gemwarrior/entities/items/tree.rb +3 -1
- data/lib/gemwarrior/game.rb +5 -0
- data/lib/gemwarrior/misc/audio.rb +54 -14
- data/lib/gemwarrior/misc/audio_cues.rb +18 -7
- data/lib/gemwarrior/misc/bloops_cues.rb +166 -0
- data/lib/gemwarrior/repl.rb +21 -2
- data/lib/gemwarrior/version.rb +1 -1
- metadata +3 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9eed4c481dd9b8c403851ed62c05ea92757f56d7
|
|
4
|
+
data.tar.gz: b2d8cbfee1c8dac0daed910d8436970e8cdab12a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2c9168749c94929d96c7175698a90f44c393846d45d7d5d9d2000ac20fe077adf1305ddecbe46b6b7a24a47f5a552363720c7f4ee7d8c306e9c2f98396a70110
|
|
7
|
+
data.tar.gz: 7c7e3eb9aab5d32d8f20ef14577935ba3d4aa69666fbb6c28a64262b0fc6baf77f6e3d91e7a08764e8fa924651c010d5bb6a2ca97c57cf9f63ad239b5492d76c
|
data/bin/gemwarrior
CHANGED
|
@@ -117,7 +117,7 @@ end
|
|
|
117
117
|
def init_config
|
|
118
118
|
Dir.mkdir(GW_HOME) unless Dir.exist?(GW_HOME)
|
|
119
119
|
|
|
120
|
-
sound_system_default = OS.windows? ? 'win32-sound' : '
|
|
120
|
+
sound_system_default = OS.windows? ? 'win32-sound' : 'bloops'
|
|
121
121
|
|
|
122
122
|
GameOptions.add 'sound_system', sound_system_default
|
|
123
123
|
GameOptions.add 'save_file_mode', 'Y'
|
data/gemwarrior.gemspec
CHANGED
|
@@ -25,19 +25,16 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
spec.add_runtime_dependency 'colorize', '~> 0.7.7'
|
|
26
26
|
spec.add_runtime_dependency 'matrext', '~> 0.4.10'
|
|
27
27
|
spec.add_runtime_dependency 'clocker', '~> 0.1.6'
|
|
28
|
-
spec.add_runtime_dependency 'win32-sound', '~> 0.6.0'
|
|
29
|
-
spec.add_runtime_dependency 'feep', '~> 0.1.3'
|
|
30
28
|
spec.add_runtime_dependency 'gems', '~> 0.8.3'
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
29
|
+
|
|
30
|
+
# sound systems
|
|
31
|
+
#spec.add_runtime_dependency 'feep', '~> 0.1.3'
|
|
32
|
+
#spec.add_runtime_dependency 'win32-sound', '~> 0.6.0'
|
|
33
|
+
#spec.add_runtime_dependency 'bloopsaphone', '>= 0.4'
|
|
35
34
|
|
|
36
35
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
|
37
36
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
38
|
-
|
|
39
37
|
spec.add_development_dependency 'rubocop', '~> 0.29'
|
|
40
|
-
|
|
41
38
|
spec.add_development_dependency 'rspec'
|
|
42
39
|
spec.add_development_dependency 'rspec-nc'
|
|
43
40
|
spec.add_development_dependency 'guard'
|
data/lib/gemwarrior/battle.rb
CHANGED
|
@@ -541,7 +541,6 @@ module Gemwarrior
|
|
|
541
541
|
end
|
|
542
542
|
|
|
543
543
|
def monster_death
|
|
544
|
-
Audio.play_synth(:battle_win)
|
|
545
544
|
puts " YOU HAVE DEFEATED #{monster.name.upcase}!\n".colorize(:green)
|
|
546
545
|
|
|
547
546
|
if monster.is_boss
|
|
@@ -557,6 +556,8 @@ module Gemwarrior
|
|
|
557
556
|
# game ending: initiate
|
|
558
557
|
return monster.initiate_ending(world)
|
|
559
558
|
elsif monster.name.eql?('jaspern')
|
|
559
|
+
Audio.play_synth(:battle_win_boss)
|
|
560
|
+
|
|
560
561
|
puts ' You just beat a MINIBOSS! Fantastic!'
|
|
561
562
|
puts
|
|
562
563
|
|
|
@@ -565,11 +566,15 @@ module Gemwarrior
|
|
|
565
566
|
# river bridge boss: initiate
|
|
566
567
|
return monster.river_bridge_success(world)
|
|
567
568
|
else
|
|
569
|
+
Audio.play_synth(:battle_win_boss)
|
|
570
|
+
|
|
568
571
|
reward_player(monster)
|
|
569
572
|
|
|
570
573
|
world.location_by_coords(player.cur_coords).remove_monster(monster.name)
|
|
571
574
|
end
|
|
572
575
|
else
|
|
576
|
+
Audio.play_synth(:battle_win_monster)
|
|
577
|
+
|
|
573
578
|
# stats
|
|
574
579
|
world.player.monsters_killed += 1
|
|
575
580
|
|
|
@@ -16,6 +16,7 @@ module Gemwarrior
|
|
|
16
16
|
def use(world)
|
|
17
17
|
puts 'You attempt to open the seriously massive door that separates you from Emerald himself.'
|
|
18
18
|
if world.player.inventory.contains_item?('keystone')
|
|
19
|
+
Audio.play_synth(:uncover_secret)
|
|
19
20
|
puts 'The keystone in your inventory glows as you approach the incredibly titanic-sized door, so you naturally pull it out and thrust it into the stone-shaped depression within the cloudy obstruction. The door "opens" in a way and you can now pass through.'
|
|
20
21
|
{ type: 'move', data: 'Sky Tower (Throne Room)' }
|
|
21
22
|
else
|
|
@@ -93,6 +93,7 @@ module Gemwarrior
|
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
if pedestal_configured
|
|
96
|
+
Audio.play_synth(:uncover_secret)
|
|
96
97
|
puts 'You push the large gem into the pedestal and it descends without a hitch, almost as if it were meant to be. The pedestal begins to violently shake and a strong gust of wind picks you up off the ground. You feel completely taken aback and unsettled, but you have no choice: you are being whisked away somewhere into the sky, destination unknown.'.colorize(:yellow)
|
|
97
98
|
|
|
98
99
|
# stats
|
|
@@ -20,6 +20,7 @@ module Gemwarrior
|
|
|
20
20
|
puts 'You gently place your fingers on the pond\'s rippling surface.'
|
|
21
21
|
|
|
22
22
|
if (NEEDED_ITEMS - world.player.inventory.items.map(&:name)).empty?
|
|
23
|
+
Audio.play_synth(:uncover_secret)
|
|
23
24
|
puts 'The pond water explodes with a force that knocks you back onto the ground. When you come to, you notice the depression in the ground where the pond once was now has a new curious object!'
|
|
24
25
|
self.description = 'A barren depression in the ground is all that is left of the pond.'
|
|
25
26
|
return { type: 'item', data: 'Opalaser' }
|
|
@@ -17,6 +17,7 @@ module Gemwarrior
|
|
|
17
17
|
if !self.used
|
|
18
18
|
self.used = true
|
|
19
19
|
|
|
20
|
+
Audio.play_synth(:uncover_secret)
|
|
20
21
|
puts 'You lower yourself to the ground and attempt to peer in the hole in the wall. Just as you begin to think this is a fruitless endeavor, a pair of bright, beady eyes manifest, and an unexpectedly low voice speaks:'
|
|
21
22
|
Person.new.speak('Hello. I\'m Rockney, of Rockney\'s Hole in the Wall. Pleasure!')
|
|
22
23
|
|
|
@@ -20,7 +20,9 @@ module Gemwarrior
|
|
|
20
20
|
return { type: nil, data: nil }
|
|
21
21
|
elsif self.used
|
|
22
22
|
self.used_again = true
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
Audio.play_synth(:uncover_secret)
|
|
25
|
+
|
|
24
26
|
puts 'Looking further into the small opening in the trunk your eye catches the light glinting off a few small metallic objects.'
|
|
25
27
|
|
|
26
28
|
cur_loc = world.location_by_name('forest-southeast')
|
data/lib/gemwarrior/game.rb
CHANGED
|
@@ -88,6 +88,11 @@ module Gemwarrior
|
|
|
88
88
|
# create options file if not existing
|
|
89
89
|
update_options_file
|
|
90
90
|
|
|
91
|
+
# require needed files for selected sound_system if sound_enabled
|
|
92
|
+
if GameOptions.data['sound_enabled']
|
|
93
|
+
Audio.init
|
|
94
|
+
end
|
|
95
|
+
|
|
91
96
|
# create the console
|
|
92
97
|
self.evaluator = Evaluator.new(world)
|
|
93
98
|
self.repl = Repl.new(self, world, evaluator)
|
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
# lib/gemwarrior/misc/audio.rb
|
|
2
2
|
# Audio cues using either synth or samples
|
|
3
|
-
# Synth: win32-sound
|
|
3
|
+
# Synth: win32-sound, feep, or bloopsaphone depending on platform/choice
|
|
4
4
|
# Samples: small wav files
|
|
5
5
|
|
|
6
6
|
require_relative '../game_options'
|
|
7
|
-
require_relative 'audio_cues'
|
|
8
|
-
require_relative 'musical_notes'
|
|
9
7
|
|
|
10
8
|
module Gemwarrior
|
|
11
9
|
module Audio
|
|
12
|
-
def self.
|
|
13
|
-
|
|
10
|
+
def self.init
|
|
11
|
+
if GameOptions.data['sound_system'].eql?('win32-sound')
|
|
12
|
+
begin
|
|
13
|
+
require 'win32/sound'
|
|
14
|
+
rescue LoadError => e
|
|
15
|
+
GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}'. Gem Warrior will be silent for now."
|
|
16
|
+
end
|
|
17
|
+
elsif GameOptions.data['sound_system'].eql?('feep')
|
|
18
|
+
begin
|
|
19
|
+
require 'feep'
|
|
20
|
+
rescue LoadError => e
|
|
21
|
+
GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}'. Gem Warrior will be silent for now."
|
|
22
|
+
end
|
|
23
|
+
elsif GameOptions.data['sound_system'].eql?('bloops')
|
|
24
|
+
begin
|
|
25
|
+
require 'bloops'
|
|
26
|
+
rescue LoadError => e
|
|
27
|
+
GameOptions.data['errors'] = "#{GameOptions.data['sound_system']} could not be loaded. You may need to run 'gem install #{GameOptions.data['sound_system']}aphone'. Gem Warrior will be silent for now."
|
|
28
|
+
end
|
|
29
|
+
end
|
|
14
30
|
end
|
|
15
31
|
|
|
16
32
|
def self.play_synth(audio_cue_symbol)
|
|
17
33
|
if GameOptions.data['sound_enabled']
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
34
|
+
case GameOptions.data['sound_system']
|
|
35
|
+
when 'win32-sound'
|
|
36
|
+
require_relative 'audio_cues'
|
|
21
37
|
require_relative 'musical_notes'
|
|
22
|
-
|
|
23
38
|
Thread.start do
|
|
24
39
|
AudioCues.cues[audio_cue_symbol][:synth].each do |seq|
|
|
25
40
|
threads = []
|
|
@@ -31,10 +46,8 @@ module Gemwarrior
|
|
|
31
46
|
threads.each { |th| th.join }
|
|
32
47
|
end
|
|
33
48
|
end
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
require 'feep'
|
|
37
|
-
|
|
49
|
+
when 'feep'
|
|
50
|
+
require_relative 'audio_cues'
|
|
38
51
|
feep_defaults = {
|
|
39
52
|
frequencies: '440',
|
|
40
53
|
waveform: 'sine',
|
|
@@ -42,7 +55,7 @@ module Gemwarrior
|
|
|
42
55
|
duration: 500,
|
|
43
56
|
notext: true
|
|
44
57
|
}
|
|
45
|
-
|
|
58
|
+
|
|
46
59
|
Thread.start do
|
|
47
60
|
AudioCues.cues[audio_cue_symbol][:synth].each do |seq|
|
|
48
61
|
seq = feep_defaults.merge(seq)
|
|
@@ -56,8 +69,35 @@ module Gemwarrior
|
|
|
56
69
|
})
|
|
57
70
|
end
|
|
58
71
|
end
|
|
72
|
+
when 'bloops'
|
|
73
|
+
require_relative 'bloops_cues'
|
|
74
|
+
Thread.start do
|
|
75
|
+
BloopsCues.cues[audio_cue_symbol][:synth].each do |seq|
|
|
76
|
+
threads = []
|
|
77
|
+
|
|
78
|
+
seq.each do |note|
|
|
79
|
+
threads << Thread.new do
|
|
80
|
+
b = Bloops.new
|
|
81
|
+
b.tempo = 240
|
|
82
|
+
snd = b.sound Bloops::SQUARE
|
|
83
|
+
snd.punch = GameOptions.data['sound_volume']/2
|
|
84
|
+
snd.sustain = 0.7
|
|
85
|
+
snd.decay = 0.2
|
|
86
|
+
b.tune snd, note[1]
|
|
87
|
+
b.play
|
|
88
|
+
sleep 0.1 while !b.stopped?
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
threads.each { |th| th.join }
|
|
93
|
+
end
|
|
94
|
+
end
|
|
59
95
|
end
|
|
60
96
|
end
|
|
61
97
|
end
|
|
98
|
+
|
|
99
|
+
def self.play_sample(audio_cue_symbol)
|
|
100
|
+
# future use
|
|
101
|
+
end
|
|
62
102
|
end
|
|
63
103
|
end
|
|
@@ -93,13 +93,11 @@ module Gemwarrior
|
|
|
93
93
|
|
|
94
94
|
self.add :intro, {
|
|
95
95
|
synth: [
|
|
96
|
-
{ frequencies: '
|
|
97
|
-
{ frequencies: '
|
|
98
|
-
{ frequencies: '
|
|
99
|
-
{ frequencies: '
|
|
100
|
-
{ frequencies: '
|
|
101
|
-
{ frequencies: 'F4,C6', duration: 50 },
|
|
102
|
-
{ frequencies: 'G4,B5,D6', duration: 500 }
|
|
96
|
+
{ frequencies: 'C3,G4', duration: 50 },
|
|
97
|
+
{ frequencies: 'D3,A4', duration: 50 },
|
|
98
|
+
{ frequencies: 'E3,B4', duration: 50 },
|
|
99
|
+
{ frequencies: 'F3,C5', duration: 50 },
|
|
100
|
+
{ frequencies: 'G3,B4,D5', duration: 350 }
|
|
103
101
|
],
|
|
104
102
|
sample: 'intro.wav'
|
|
105
103
|
}
|
|
@@ -131,6 +129,19 @@ module Gemwarrior
|
|
|
131
129
|
sample: 'player_travel.wav'
|
|
132
130
|
}
|
|
133
131
|
|
|
132
|
+
self.add :uncover_secret, {
|
|
133
|
+
synth: [
|
|
134
|
+
{ frequencies: 'F5', duration: 150 },
|
|
135
|
+
{ frequencies: 'E5', duration: 150 },
|
|
136
|
+
{ frequencies: 'C#4', duration: 150 },
|
|
137
|
+
{ frequencies: 'C4', duration: 150 },
|
|
138
|
+
{ frequencies: 'D#5', duration: 150 },
|
|
139
|
+
{ frequencies: 'F#5', duration: 150 },
|
|
140
|
+
{ frequencies: 'A5', duration: 150 }
|
|
141
|
+
],
|
|
142
|
+
sample: 'uncover_secret.wav'
|
|
143
|
+
}
|
|
144
|
+
|
|
134
145
|
self.add :win_game, {
|
|
135
146
|
synth: [
|
|
136
147
|
{ frequencies: 'G3', duration: 250 },
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# lib/gemwarrior/misc/bloops_cues.rb
|
|
2
|
+
# Bloops cue symbol -> notes/wav_file
|
|
3
|
+
|
|
4
|
+
module Gemwarrior
|
|
5
|
+
module BloopsCues
|
|
6
|
+
def self.add key, val
|
|
7
|
+
@@cues ||= {}
|
|
8
|
+
@@cues[key] = val
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.cues
|
|
12
|
+
@@cues ||= {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
self.add :bg1, {
|
|
16
|
+
synth: [
|
|
17
|
+
{ s1: '2:C4' },
|
|
18
|
+
{ s1: '2:C5' },
|
|
19
|
+
{ s1: '2:C4' },
|
|
20
|
+
{ s1: '2:C5' },
|
|
21
|
+
{ s1: '2:C4' },
|
|
22
|
+
{ s1: '2:C5' },
|
|
23
|
+
{ s1: '2:G4' },
|
|
24
|
+
{ s1: '2:A4' },
|
|
25
|
+
{ s1: '2:C4' },
|
|
26
|
+
{ s1: '2:C5' },
|
|
27
|
+
{ s1: '2:C4' },
|
|
28
|
+
{ s1: '2:C5' },
|
|
29
|
+
{ s1: '2:C4' },
|
|
30
|
+
{ s1: '2:C5' },
|
|
31
|
+
{ s1: '2:B4' },
|
|
32
|
+
{ s1: '2:A4' },
|
|
33
|
+
],
|
|
34
|
+
sample: 'bg1.wav'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
self.add :battle_start, {
|
|
38
|
+
synth: [
|
|
39
|
+
{ s1: '16:G4' },
|
|
40
|
+
{ s1: '16:G#4' },
|
|
41
|
+
{ s1: '16:G4' },
|
|
42
|
+
{ s1: '16:G#4' },
|
|
43
|
+
{ s1: '16:G4' },
|
|
44
|
+
{ s1: '16:G#4' }
|
|
45
|
+
],
|
|
46
|
+
sample: 'battle_start.wav'
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
self.add :battle_player_attack, {
|
|
50
|
+
synth: [{ s1: '16:A4', s2: '16:E4', s3: '16:B5' }],
|
|
51
|
+
sample: 'battle_player_attack.wav'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
self.add :battle_player_miss, {
|
|
55
|
+
synth: [{ s1: '8:A4' }],
|
|
56
|
+
sample: 'battle_player_miss.wav'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
self.add :battle_monster_attack, {
|
|
60
|
+
synth: [{ s1: '16:B4', s2: '16:E#5', s3: '16:A5' }],
|
|
61
|
+
sample: 'battle_monster_attack.wav'
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
self.add :battle_monster_miss, {
|
|
65
|
+
synth: [{ s1: '8:B4' }],
|
|
66
|
+
sample: 'battle_monster_miss.wav'
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
self.add :battle_win_boss, {
|
|
70
|
+
synth: [
|
|
71
|
+
{ s1: '16:E5' },
|
|
72
|
+
{ s1: '16:F5' },
|
|
73
|
+
{ s1: '8:E5' },
|
|
74
|
+
{ s1: '16:E5' },
|
|
75
|
+
{ s1: '16:F5' },
|
|
76
|
+
{ s1: '8:E5' },
|
|
77
|
+
{ s1: '16:E4', s2: '16:A4' },
|
|
78
|
+
{ s1: '4:E4', s2: '4:A4' }
|
|
79
|
+
],
|
|
80
|
+
sample: 'battle_win_boss.wav'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
self.add :battle_win_monster, {
|
|
84
|
+
synth: [
|
|
85
|
+
{ s1: '16:D5' },
|
|
86
|
+
{ s1: '16:E5' },
|
|
87
|
+
{ s1: '8:D5' },
|
|
88
|
+
{ s1: '16:D4' },
|
|
89
|
+
{ s1: '4:D4' }
|
|
90
|
+
],
|
|
91
|
+
sample: 'battle_win_monster.wav'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
self.add :intro, {
|
|
95
|
+
synth: [
|
|
96
|
+
{ s1: '16:C3', s2: '16:G4' },
|
|
97
|
+
{ s1: '16:D3', s2: '16:A4' },
|
|
98
|
+
{ s1: '16:E3', s2: '16:B4' },
|
|
99
|
+
{ s1: '16:F3', s2: '16:C5' },
|
|
100
|
+
{ s1: '4:G3', s2: '4:B4', s3: '4:D5' }
|
|
101
|
+
],
|
|
102
|
+
sample: 'intro.wav'
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
self.add :player_level_up, {
|
|
106
|
+
synth: [
|
|
107
|
+
{ s1: '8:D4', s2: '8:A4', s3: '8:D5', s4: '8:A5', s5: '8:D6' },
|
|
108
|
+
{ s1: '4:D4', s2: '4:A4', s3: '4:D5', s4: '4:A5', s5: '4:D6' },
|
|
109
|
+
{ s1: '1:E4', s2: '1:B4', s3: '1:E5', s4: '1:B5', s5: '1:E6' }
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
self.add :player_resurrection, {
|
|
114
|
+
synth: [
|
|
115
|
+
{ s1: '16:D#5' },
|
|
116
|
+
{ s1: '14:A4' },
|
|
117
|
+
{ s1: '12:F#4' },
|
|
118
|
+
{ s1: '2:F4' }
|
|
119
|
+
],
|
|
120
|
+
sample: 'player_resurrection.wav'
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
self.add :player_travel, {
|
|
124
|
+
synth: [
|
|
125
|
+
{ s1: '16:C4' },
|
|
126
|
+
{ s1: '16:D4' },
|
|
127
|
+
{ s1: '16:E4' }
|
|
128
|
+
],
|
|
129
|
+
sample: 'player_travel.wav'
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
self.add :uncover_secret, {
|
|
133
|
+
synth: [
|
|
134
|
+
{ s1: '8:F5' },
|
|
135
|
+
{ s1: '8:E5' },
|
|
136
|
+
{ s1: '8:C#4' },
|
|
137
|
+
{ s1: '8:C4' },
|
|
138
|
+
{ s1: '8:D#5' },
|
|
139
|
+
{ s1: '8:F#5' },
|
|
140
|
+
{ s1: '8:A5' }
|
|
141
|
+
],
|
|
142
|
+
sample: 'uncover_secret.wav'
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
self.add :win_game, {
|
|
146
|
+
synth: [
|
|
147
|
+
{ s1: '4:G3' },
|
|
148
|
+
{ s1: '16:A3' },
|
|
149
|
+
{ s1: '16:B3' },
|
|
150
|
+
{ s1: '16:C4' },
|
|
151
|
+
{ s1: '4:D4' },
|
|
152
|
+
{ s1: '16:E4' },
|
|
153
|
+
{ s1: '16:F#4' },
|
|
154
|
+
{ s1: '16:G4' },
|
|
155
|
+
{ s1: '4:A4' },
|
|
156
|
+
{ s1: '16:B4' },
|
|
157
|
+
{ s1: '16:C5' },
|
|
158
|
+
{ s1: '16:D5' },
|
|
159
|
+
{ s1: '16:E5' },
|
|
160
|
+
{ s1: '16:F#5' },
|
|
161
|
+
{ s1: '1:G5' }
|
|
162
|
+
],
|
|
163
|
+
sample: 'win_game.wav'
|
|
164
|
+
}
|
|
165
|
+
end
|
|
166
|
+
end
|
data/lib/gemwarrior/repl.rb
CHANGED
|
@@ -203,9 +203,17 @@ module Gemwarrior
|
|
|
203
203
|
print ' (2) FEEP '
|
|
204
204
|
print '(SELECTED)'.colorize(:yellow) if GameOptions.data['sound_system'].eql?('feep')
|
|
205
205
|
print "\n"
|
|
206
|
+
print ' (3) BLOOPS '
|
|
207
|
+
print '(SELECTED)'.colorize(:yellow) if GameOptions.data['sound_system'].eql?('bloops')
|
|
208
|
+
print "\n"
|
|
209
|
+
puts
|
|
210
|
+
puts ' WIN32-SOUND : good quality; Windows-only'
|
|
211
|
+
puts ' FEEP : cross-platform; VERY SLOW and BUGGY'
|
|
212
|
+
puts ' BLOOPS : cross-platform; requires portaudio'
|
|
206
213
|
puts
|
|
207
|
-
puts '
|
|
208
|
-
puts '
|
|
214
|
+
puts ' NOTE: none of these are required dependencies anymore, as sound is optional.'
|
|
215
|
+
puts ' If you do not have the one selected installed on your machine, you will get '
|
|
216
|
+
puts ' an error on game load, and no sound will be heard.'
|
|
209
217
|
puts
|
|
210
218
|
puts '================================='.colorize(:yellow)
|
|
211
219
|
puts
|
|
@@ -221,6 +229,9 @@ module Gemwarrior
|
|
|
221
229
|
when '2'
|
|
222
230
|
GameOptions.add 'sound_system', 'feep'
|
|
223
231
|
print_options_sound_sytem
|
|
232
|
+
when '3'
|
|
233
|
+
GameOptions.add 'sound_system', 'bloops'
|
|
234
|
+
print_options_sound_sytem
|
|
224
235
|
else
|
|
225
236
|
return
|
|
226
237
|
end
|
|
@@ -493,6 +504,7 @@ module Gemwarrior
|
|
|
493
504
|
|
|
494
505
|
# main menu loop until new game or exit
|
|
495
506
|
if new_skip
|
|
507
|
+
print_errors
|
|
496
508
|
play_intro_tune
|
|
497
509
|
print_splash_message
|
|
498
510
|
print_fortune
|
|
@@ -501,6 +513,7 @@ module Gemwarrior
|
|
|
501
513
|
if result.nil?
|
|
502
514
|
run_main_menu
|
|
503
515
|
else
|
|
516
|
+
print_errors
|
|
504
517
|
self.world = result
|
|
505
518
|
self.evaluator = Evaluator.new(self.world)
|
|
506
519
|
end
|
|
@@ -513,6 +526,12 @@ module Gemwarrior
|
|
|
513
526
|
puts evaluator.parse(extra_command) unless extra_command.nil?
|
|
514
527
|
end
|
|
515
528
|
|
|
529
|
+
def print_errors
|
|
530
|
+
if GameOptions.data['errors']
|
|
531
|
+
puts GameOptions.data['errors'].colorize(:red)
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
|
|
516
535
|
def play_intro_tune
|
|
517
536
|
Audio.play_synth(:intro)
|
|
518
537
|
end
|
data/lib/gemwarrior/version.rb
CHANGED
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.14.
|
|
4
|
+
version: 0.14.5
|
|
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-09-
|
|
11
|
+
date: 2015-09-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: os
|
|
@@ -100,34 +100,6 @@ dependencies:
|
|
|
100
100
|
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
102
|
version: 0.1.6
|
|
103
|
-
- !ruby/object:Gem::Dependency
|
|
104
|
-
name: win32-sound
|
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - "~>"
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: 0.6.0
|
|
110
|
-
type: :runtime
|
|
111
|
-
prerelease: false
|
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - "~>"
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: 0.6.0
|
|
117
|
-
- !ruby/object:Gem::Dependency
|
|
118
|
-
name: feep
|
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - "~>"
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: 0.1.3
|
|
124
|
-
type: :runtime
|
|
125
|
-
prerelease: false
|
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
127
|
-
requirements:
|
|
128
|
-
- - "~>"
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
version: 0.1.3
|
|
131
103
|
- !ruby/object:Gem::Dependency
|
|
132
104
|
name: gems
|
|
133
105
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -354,6 +326,7 @@ files:
|
|
|
354
326
|
- lib/gemwarrior/misc/animation.rb
|
|
355
327
|
- lib/gemwarrior/misc/audio.rb
|
|
356
328
|
- lib/gemwarrior/misc/audio_cues.rb
|
|
329
|
+
- lib/gemwarrior/misc/bloops_cues.rb
|
|
357
330
|
- lib/gemwarrior/misc/formatting.rb
|
|
358
331
|
- lib/gemwarrior/misc/hr.rb
|
|
359
332
|
- lib/gemwarrior/misc/musical_notes.rb
|