gemwarrior 0.9.39 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/gemwarrior +23 -14
- data/data/default_world.yaml +2336 -0
- data/data/{fantasy_names.yml → fantasy_names.yaml} +0 -0
- data/lib/gemwarrior/entities/player.rb +27 -64
- data/lib/gemwarrior/evaluator.rb +5 -3
- data/lib/gemwarrior/game.rb +78 -34
- data/lib/gemwarrior/misc/name_generator.rb +1 -1
- data/lib/gemwarrior/repl.rb +66 -40
- data/lib/gemwarrior/version.rb +1 -1
- data/lib/gemwarrior/world.rb +9 -96
- metadata +4 -4
- data/data/locations.yml +0 -1182
File without changes
|
@@ -20,39 +20,23 @@ 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,
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
self.defense = options.fetch(:defense)
|
41
|
-
self.dexterity = options.fetch(:dexterity)
|
42
|
-
|
43
|
-
self.inventory = options.fetch(:inventory)
|
44
|
-
self.rox = options.fetch(:rox)
|
45
|
-
|
46
|
-
self.stam_cur = options.fetch(:stam_cur)
|
47
|
-
self.stam_max = options.fetch(:stam_max)
|
48
|
-
self.cur_coords = options.fetch(:cur_coords)
|
49
|
-
self.special_abilities = []
|
50
|
-
|
51
|
-
self.monsters_killed = 0
|
52
|
-
self.items_taken = 0
|
53
|
-
self.movements_made = 0
|
54
|
-
self.rests_taken = 0
|
55
|
-
self.deaths = 0
|
23
|
+
:monsters_killed, :items_taken, :movements_made,
|
24
|
+
:rests_taken, :deaths
|
25
|
+
|
26
|
+
def generate_name
|
27
|
+
NameGenerator.new('fantasy').generate_name
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_face
|
31
|
+
WordList.new('adjective').get_random_value
|
32
|
+
end
|
33
|
+
|
34
|
+
def generate_hands
|
35
|
+
WordList.new('adjective').get_random_value
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_mood
|
39
|
+
WordList.new('adjective').get_random_value
|
56
40
|
end
|
57
41
|
|
58
42
|
def check_self(show_pic = true)
|
@@ -77,20 +61,21 @@ module Gemwarrior
|
|
77
61
|
else
|
78
62
|
abilities = Formatting::upstyle(special_abilities.collect { |x| x.to_s }).join(', ')
|
79
63
|
end
|
64
|
+
|
80
65
|
self_text = "NAME : #{self.name}\n"
|
81
|
-
self_text << "POSITION : #{self.cur_coords.values.to_a}\n" if GameOptions.data['debug_mode']
|
82
|
-
self_text << "WEAPON : #{weapon_slot}\n"
|
83
66
|
self_text << "LEVEL : #{self.level}\n"
|
84
67
|
self_text << "EXPERIENCE: #{self.xp}\n"
|
85
68
|
self_text << "HIT POINTS: #{self.hp_cur}/#{self.hp_max}\n"
|
69
|
+
self_text << "WEAPON : #{weapon_slot}\n"
|
86
70
|
self_text << "ATTACK : #{atk_lo}-#{atk_hi}\n"
|
87
71
|
self_text << "DEXTERITY : #{self.dexterity}\n"
|
88
72
|
self_text << "DEFENSE : #{self.defense}\n"
|
89
73
|
self_text << "ABILITIES : #{abilities}\n"
|
90
74
|
|
91
75
|
if GameOptions.data['debug_mode']
|
92
|
-
self_text << "
|
93
|
-
self_text << "
|
76
|
+
self_text << " POSITION : #{self.cur_coords.values.to_a}\n"
|
77
|
+
self_text << " GOD_MODE : #{GameOptions.data['god_mode']}\n"
|
78
|
+
self_text << " BEAST_MODE: #{GameOptions.data['beast_mode']}\n"
|
94
79
|
end
|
95
80
|
|
96
81
|
self_text << "\n"
|
@@ -99,7 +84,7 @@ module Gemwarrior
|
|
99
84
|
|
100
85
|
self_text << "\n\n"
|
101
86
|
|
102
|
-
self_text << "[Current Status]\nBreathing, non-naked, with a #{self.face.colorize(:yellow)} face, #{self.hands.colorize(:yellow)} hands, and
|
87
|
+
self_text << "[Current Status]\nBreathing, non-naked, with a #{self.face.colorize(:yellow)} face, #{self.hands.colorize(:yellow)} hands, and\nfeeling, generally, #{self.mood.colorize(:yellow)}."
|
103
88
|
|
104
89
|
self_text << "\n"
|
105
90
|
end
|
@@ -225,10 +210,6 @@ module Gemwarrior
|
|
225
210
|
# stats
|
226
211
|
self.movements_made += 1
|
227
212
|
end
|
228
|
-
|
229
|
-
def at_full_hp?
|
230
|
-
self.hp_cur == self.hp_max
|
231
|
-
end
|
232
213
|
|
233
214
|
def attack(world, monster)
|
234
215
|
battle = Battle.new(world: world, player: self, monster: monster)
|
@@ -317,6 +298,10 @@ module Gemwarrior
|
|
317
298
|
end
|
318
299
|
end
|
319
300
|
|
301
|
+
def at_full_hp?
|
302
|
+
self.hp_cur == self.hp_max
|
303
|
+
end
|
304
|
+
|
320
305
|
private
|
321
306
|
|
322
307
|
def player_death
|
@@ -325,7 +310,6 @@ module Gemwarrior
|
|
325
310
|
return 'death'
|
326
311
|
end
|
327
312
|
|
328
|
-
# TRAVEL
|
329
313
|
def print_traveling_text(direction_text)
|
330
314
|
Music::cue([
|
331
315
|
{ frequencies: 'C4', duration: 75 },
|
@@ -335,7 +319,6 @@ module Gemwarrior
|
|
335
319
|
Animation::run(phrase: "* #{direction_text} *", oneline: false)
|
336
320
|
end
|
337
321
|
|
338
|
-
# CHARACTER
|
339
322
|
def print_char_pic
|
340
323
|
char_pic = ''
|
341
324
|
char_pic << "************\n"
|
@@ -351,25 +334,5 @@ module Gemwarrior
|
|
351
334
|
def print_battle_line
|
352
335
|
puts '**************************************'
|
353
336
|
end
|
354
|
-
|
355
|
-
# INIT
|
356
|
-
def generate_name
|
357
|
-
NameGenerator.new('fantasy').generate_name
|
358
|
-
end
|
359
|
-
|
360
|
-
def generate_face
|
361
|
-
face_descriptors = WordList.new('adjective')
|
362
|
-
face_descriptors.get_random_value
|
363
|
-
end
|
364
|
-
|
365
|
-
def generate_hands
|
366
|
-
hand_descriptors = WordList.new('adjective')
|
367
|
-
hand_descriptors.get_random_value
|
368
|
-
end
|
369
|
-
|
370
|
-
def generate_mood
|
371
|
-
mood_descriptors = WordList.new('adjective')
|
372
|
-
mood_descriptors.get_random_value
|
373
|
-
end
|
374
337
|
end
|
375
338
|
end
|
data/lib/gemwarrior/evaluator.rb
CHANGED
@@ -112,9 +112,11 @@ module Gemwarrior
|
|
112
112
|
if GameOptions.data['debug_mode']
|
113
113
|
case command
|
114
114
|
when 'god', 'gd'
|
115
|
-
|
115
|
+
GameOptions.data['god_mode'] = !GameOptions.data['god_mode']
|
116
|
+
return "God mode set to #{GameOptions.data['god_mode']}"
|
116
117
|
when 'beast', 'bs'
|
117
|
-
|
118
|
+
GameOptions.data['beast_mode'] = !GameOptions.data['beast_mode']
|
119
|
+
return "Beast mode set to #{GameOptions.data['beast_mode']}"
|
118
120
|
when 'vars', 'vs'
|
119
121
|
world.print_vars
|
120
122
|
when 'list', 'ls'
|
@@ -522,7 +524,7 @@ module Gemwarrior
|
|
522
524
|
when 'version', 'v'
|
523
525
|
Gemwarrior::VERSION
|
524
526
|
when 'quit', 'exit', 'q', 'x'
|
525
|
-
|
527
|
+
print 'You sure you want to quit? (y/n) '
|
526
528
|
response = gets.chomp.downcase
|
527
529
|
if (response.eql?('y') || response.eql?('yes'))
|
528
530
|
puts QUIT_MESSAGE
|
data/lib/gemwarrior/game.rb
CHANGED
@@ -4,9 +4,6 @@
|
|
4
4
|
require 'colorize'
|
5
5
|
require 'matrext'
|
6
6
|
|
7
|
-
require_relative 'entities/player'
|
8
|
-
require_relative 'entities/items/herb'
|
9
|
-
require_relative 'misc/player_levels'
|
10
7
|
require_relative 'misc/animation'
|
11
8
|
require_relative 'misc/music'
|
12
9
|
require_relative 'world'
|
@@ -17,16 +14,14 @@ require_relative 'game_options'
|
|
17
14
|
|
18
15
|
module Gemwarrior
|
19
16
|
class Game
|
20
|
-
include PlayerLevels
|
21
|
-
|
22
17
|
# CONSTANTS
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
PLAYER_ROX_DEBUG = 300
|
18
|
+
INVENTORY_DEFAULT = Inventory.new
|
19
|
+
INVENTORY_DEBUG = Inventory.new([Herb.new])
|
20
|
+
ROX_DEFAULT = 0
|
21
|
+
ROX_DEBUG = 300
|
28
22
|
|
29
|
-
attr_accessor :world, :evaluator, :repl
|
23
|
+
attr_accessor :world, :evaluator, :repl,
|
24
|
+
:monsters, :items
|
30
25
|
|
31
26
|
def initialize(options)
|
32
27
|
# set game options
|
@@ -36,38 +31,33 @@ module Gemwarrior
|
|
36
31
|
GameOptions.add 'sound_enabled', options.fetch(:sound_enabled)
|
37
32
|
GameOptions.add 'sound_volume', options.fetch(:sound_volume)
|
38
33
|
GameOptions.add 'use_wordnik', options.fetch(:use_wordnik)
|
34
|
+
|
35
|
+
# add classes for monsters and items to game
|
36
|
+
init_monsters
|
37
|
+
init_items
|
38
|
+
|
39
|
+
# create new world based on default template
|
40
|
+
self.world = init_world
|
39
41
|
|
40
|
-
#
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
world.player
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
hp_cur: start_stats[:hp_max],
|
50
|
-
hp_max: start_stats[:hp_max],
|
51
|
-
stam_cur: start_stats[:stam_max],
|
52
|
-
stam_max: start_stats[:stam_max],
|
53
|
-
atk_lo: start_stats[:atk_lo],
|
54
|
-
atk_hi: start_stats[:atk_hi],
|
55
|
-
defense: start_stats[:defense],
|
56
|
-
dexterity: start_stats[:dexterity],
|
57
|
-
inventory: GameOptions.data['debug_mode'] ? PLAYER_INVENTORY_DEBUG : PLAYER_INVENTORY_DEFAULT,
|
58
|
-
rox: GameOptions.data['debug_mode'] ? PLAYER_ROX_DEBUG : PLAYER_ROX_DEFAULT,
|
59
|
-
cur_coords: world.location_coords_by_name('Home')
|
60
|
-
})
|
42
|
+
# update some player aspects to make more dynamic
|
43
|
+
world.player.name = world.player.generate_name
|
44
|
+
world.player.face = world.player.generate_face
|
45
|
+
world.player.hands = world.player.generate_hands
|
46
|
+
world.player.mood = world.player.generate_mood
|
47
|
+
world.player.inventory = GameOptions.data['debug_mode'] ? INVENTORY_DEBUG : INVENTORY_DEFAULT
|
48
|
+
world.player.rox = GameOptions.data['debug_mode'] ? ROX_DEBUG : ROX_DEFAULT
|
49
|
+
|
50
|
+
world.duration = { mins: 0, secs: 0, ms: 0 }
|
61
51
|
|
62
52
|
# create options file if not existing
|
63
53
|
update_options_file
|
64
|
-
|
54
|
+
|
65
55
|
# create the console
|
66
56
|
self.evaluator = Evaluator.new(world)
|
67
57
|
self.repl = Repl.new(self, world, evaluator)
|
68
58
|
|
69
59
|
# enter Jool!
|
70
|
-
repl.start('look', options.fetch(:extra_command), options.fetch(:
|
60
|
+
repl.start('look', options.fetch(:extra_command), options.fetch(:new_skip), options.fetch(:resume_skip))
|
71
61
|
end
|
72
62
|
|
73
63
|
def update_options_file
|
@@ -77,5 +67,59 @@ module Gemwarrior
|
|
77
67
|
f.puts "use_wordnik:#{GameOptions.data['use_wordnik']}"
|
78
68
|
end
|
79
69
|
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def init_monsters
|
74
|
+
Dir.glob(File.expand_path('../entities/monsters/*.rb', __FILE__)).each do |item|
|
75
|
+
require_relative item
|
76
|
+
end
|
77
|
+
Dir.glob(File.expand_path('../entities/monsters/bosses/*.rb', __FILE__)).each do |item|
|
78
|
+
require_relative item
|
79
|
+
end
|
80
|
+
|
81
|
+
self.monsters = [
|
82
|
+
Alexandrat.new,
|
83
|
+
Amberoo.new,
|
84
|
+
Amethystle.new,
|
85
|
+
Apatiger.new,
|
86
|
+
Aquamarine.new,
|
87
|
+
Bloodstorm.new,
|
88
|
+
Citrinaga.new,
|
89
|
+
Coraliz.new,
|
90
|
+
Cubicat.new,
|
91
|
+
Diaman.new,
|
92
|
+
Emerald.new,
|
93
|
+
Garynetty.new
|
94
|
+
]
|
95
|
+
end
|
96
|
+
|
97
|
+
def init_items
|
98
|
+
Dir.glob(File.expand_path('../entities/items/*.rb', __FILE__)).each do |item|
|
99
|
+
require_relative item
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def init_world
|
104
|
+
mode = GameOptions.data['save_file_mode']
|
105
|
+
|
106
|
+
if mode.eql?('Y')
|
107
|
+
if File.exist?(GameOptions.data['default_world_path_yaml'])
|
108
|
+
File.open(GameOptions.data['default_world_path_yaml'], 'r') do |f|
|
109
|
+
return YAML::load(f)
|
110
|
+
end
|
111
|
+
else
|
112
|
+
puts "Error: cannot load #{GameOptions.data['default_world_path_yaml']}."
|
113
|
+
end
|
114
|
+
else
|
115
|
+
if File.exist?(GameOptions.data['default_world_path_bin'])
|
116
|
+
File.open(GameOptions.data['default_world_path_bin'], 'r') do |f|
|
117
|
+
return Marshal::load(f)
|
118
|
+
end
|
119
|
+
else
|
120
|
+
puts "Error: cannot load #{GameOptions.data['default_world_path_bin']}."
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
80
124
|
end
|
81
125
|
end
|
@@ -17,7 +17,7 @@ class NameGenerator
|
|
17
17
|
# load sample names
|
18
18
|
def get_name_set(type)
|
19
19
|
names = []
|
20
|
-
names_data = YAML.load_file(File.expand_path("../../../../data/#{type}_names.
|
20
|
+
names_data = YAML.load_file(File.expand_path("../../../../data/#{type}_names.yaml", __FILE__))
|
21
21
|
names_data.each do |n|
|
22
22
|
names.push(n)
|
23
23
|
end
|
data/lib/gemwarrior/repl.rb
CHANGED
@@ -31,16 +31,16 @@ module Gemwarrior
|
|
31
31
|
self.evaluator = evaluator
|
32
32
|
end
|
33
33
|
|
34
|
-
def start(initial_command, extra_command,
|
35
|
-
setup_screen(initial_command, extra_command,
|
34
|
+
def start(initial_command, extra_command, new_skip, resume_skip)
|
35
|
+
setup_screen(initial_command, extra_command, new_skip, resume_skip)
|
36
36
|
|
37
37
|
clocker = Clocker.new
|
38
38
|
|
39
39
|
at_exit do
|
40
|
-
|
40
|
+
update_duration(clocker.stop)
|
41
41
|
game.update_options_file
|
42
42
|
log_stats(world.duration, world.player)
|
43
|
-
|
43
|
+
save_game(world)
|
44
44
|
end
|
45
45
|
|
46
46
|
clocker.clock do
|
@@ -167,7 +167,7 @@ module Gemwarrior
|
|
167
167
|
print "#{line}"
|
168
168
|
end
|
169
169
|
if GameOptions.data['debug_mode']
|
170
|
-
print 'Clear log of attempts (y/n)
|
170
|
+
print 'Clear log of attempts? (y/n) '
|
171
171
|
answer = gets.chomp.downcase
|
172
172
|
|
173
173
|
case answer
|
@@ -204,7 +204,7 @@ module Gemwarrior
|
|
204
204
|
puts " GW v#{Gemwarrior::VERSION}"
|
205
205
|
puts '======================='
|
206
206
|
puts ' (N)ew Game'
|
207
|
-
|
207
|
+
puts ' (R)esume Game' if save_file_exist?
|
208
208
|
puts ' (A)bout'
|
209
209
|
puts ' (H)elp'
|
210
210
|
puts ' (O)ptions'
|
@@ -227,16 +227,15 @@ module Gemwarrior
|
|
227
227
|
|
228
228
|
case choice
|
229
229
|
when 'n'
|
230
|
-
|
230
|
+
if overwrite_save?
|
231
231
|
clear_screen
|
232
232
|
play_intro_tune
|
233
233
|
print_splash_message
|
234
234
|
print_fortune
|
235
235
|
return
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
=begin
|
236
|
+
else
|
237
|
+
run_main_menu
|
238
|
+
end
|
240
239
|
when 'r'
|
241
240
|
if save_file_exist?
|
242
241
|
result = resume_game
|
@@ -244,9 +243,10 @@ module Gemwarrior
|
|
244
243
|
run_main_menu
|
245
244
|
elsif
|
246
245
|
self.world = result
|
246
|
+
self.evaluator = Evaluator.new(self.world)
|
247
|
+
return
|
247
248
|
end
|
248
249
|
end
|
249
|
-
=end
|
250
250
|
when 'a'
|
251
251
|
puts choice
|
252
252
|
print_about_text
|
@@ -286,14 +286,14 @@ module Gemwarrior
|
|
286
286
|
print " #{duration[:secs].to_s.colorize(color: :white, background: :black)} sec(s),"
|
287
287
|
print " and #{duration[:ms].to_s.colorize(color: :white, background: :black)} ms\n"
|
288
288
|
puts '----------------------------------------------------------------------'
|
289
|
-
print "
|
290
|
-
print "\n".ljust(
|
289
|
+
print "#{pl.name.ljust(10)} killed #{pl.monsters_killed.to_s.colorize(color: :white, background: :black)} monster(s)"
|
290
|
+
print "\n".ljust(12)
|
291
291
|
print "picked up #{pl.items_taken.to_s.colorize(color: :white, background: :black)} item(s)"
|
292
|
-
print "\n".ljust(
|
292
|
+
print "\n".ljust(12)
|
293
293
|
print "traveled #{pl.movements_made.to_s.colorize(color: :white, background: :black)} time(s)"
|
294
|
-
print "\n".ljust(
|
294
|
+
print "\n".ljust(12)
|
295
295
|
print "rested #{pl.rests_taken.to_s.colorize(color: :white, background: :black)} time(s)"
|
296
|
-
print "\n".ljust(
|
296
|
+
print "\n".ljust(12)
|
297
297
|
print "died #{pl.deaths.to_s.colorize(color: :white, background: :black)} time(s)"
|
298
298
|
print "\n"
|
299
299
|
puts '######################################################################'
|
@@ -307,13 +307,13 @@ module Gemwarrior
|
|
307
307
|
def save_game(world)
|
308
308
|
mode = GameOptions.data['save_file_mode']
|
309
309
|
puts 'Saving game...'
|
310
|
-
|
310
|
+
|
311
311
|
if mode.eql? 'Y'
|
312
|
-
File.open(GameOptions.data['save_file_yaml_path'], 'w
|
312
|
+
File.open(GameOptions.data['save_file_yaml_path'], 'w') do |f|
|
313
313
|
f.write YAML::dump(world)
|
314
314
|
end
|
315
315
|
elsif mode.eql? 'M'
|
316
|
-
File.open(GameOptions.data['save_file_bin_path'], 'w
|
316
|
+
File.open(GameOptions.data['save_file_bin_path'], 'w') do |f|
|
317
317
|
f.write Marshal::dump(world)
|
318
318
|
end
|
319
319
|
else
|
@@ -338,29 +338,27 @@ module Gemwarrior
|
|
338
338
|
mode = GameOptions.data['save_file_mode']
|
339
339
|
puts 'Resuming game...'
|
340
340
|
|
341
|
-
if
|
342
|
-
if
|
343
|
-
|
344
|
-
|
345
|
-
return YAML::load(f)
|
346
|
-
end
|
347
|
-
else
|
348
|
-
puts 'No save file exists.'
|
349
|
-
nil
|
341
|
+
if mode.eql? 'Y'
|
342
|
+
if File.exist?(GameOptions.data['save_file_yaml_path'])
|
343
|
+
File.open(GameOptions.data['save_file_yaml_path'], 'r') do |f|
|
344
|
+
return YAML::load(f)
|
350
345
|
end
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
346
|
+
else
|
347
|
+
puts 'No save file exists.'
|
348
|
+
nil
|
349
|
+
end
|
350
|
+
elsif mode.eql? 'M'
|
351
|
+
if File.exist?(GameOptions.data['save_file_marshal_path'])
|
352
|
+
File.open(GameOptions.data['save_file_marshal_path'], 'r') do |f|
|
353
|
+
return Marshal::load(f)
|
359
354
|
end
|
355
|
+
else
|
356
|
+
puts 'No save file exists.'
|
357
|
+
nil
|
360
358
|
end
|
361
359
|
end
|
362
360
|
end
|
363
|
-
|
361
|
+
|
364
362
|
def overwrite_save?
|
365
363
|
mode = GameOptions.data['save_file_mode']
|
366
364
|
save_file_path = ''
|
@@ -388,6 +386,26 @@ module Gemwarrior
|
|
388
386
|
true
|
389
387
|
end
|
390
388
|
|
389
|
+
def update_duration(new_duration)
|
390
|
+
new_mins = new_duration[:mins]
|
391
|
+
new_secs = new_duration[:secs]
|
392
|
+
new_ms = new_duration[:ms]
|
393
|
+
|
394
|
+
world.duration[:mins] += new_mins
|
395
|
+
world.duration[:secs] += new_secs
|
396
|
+
world.duration[:ms] += new_ms
|
397
|
+
|
398
|
+
if world.duration[:ms] > 1000
|
399
|
+
world.duration[:secs] += world.duration[:ms] / 1000
|
400
|
+
world.duration[:ms] = world.duration[:ms] % 1000
|
401
|
+
end
|
402
|
+
|
403
|
+
if world.duration[:secs] > 60
|
404
|
+
world.duration[:mins] += world.duration[:secs] / 60
|
405
|
+
world.duration[:secs] = world.duration[:secs] % 60
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
391
409
|
def play_intro_tune
|
392
410
|
Music::cue([
|
393
411
|
{ frequencies: 'A3,E4,C#5,E5', duration: 300 },
|
@@ -395,16 +413,24 @@ module Gemwarrior
|
|
395
413
|
])
|
396
414
|
end
|
397
415
|
|
398
|
-
def setup_screen(initial_command = nil, extra_command = nil,
|
416
|
+
def setup_screen(initial_command = nil, extra_command = nil, new_skip = false, resume_skip = false)
|
399
417
|
# welcome player to game
|
400
418
|
clear_screen
|
401
419
|
print_logo
|
402
420
|
|
403
421
|
# main menu loop until new game or exit
|
404
|
-
if
|
422
|
+
if new_skip
|
405
423
|
play_intro_tune
|
406
424
|
print_splash_message
|
407
425
|
print_fortune
|
426
|
+
elsif resume_skip
|
427
|
+
result = resume_game
|
428
|
+
if result.nil?
|
429
|
+
run_main_menu
|
430
|
+
elsif
|
431
|
+
self.world = result
|
432
|
+
self.evaluator = Evaluator.new(self.world)
|
433
|
+
end
|
408
434
|
else
|
409
435
|
run_main_menu
|
410
436
|
end
|