gemwarrior 0.10.8 → 0.11.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 +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
@@ -1,26 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/cow.rb
|
2
|
-
# Item::Cow
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
|
6
|
-
module Gemwarrior
|
7
|
-
class Cow < Item
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
|
11
|
-
self.name = 'cow'
|
12
|
-
self.description = 'Grazing on some fake grass, unperturbed, this black and white herd animal looks bored.'
|
13
|
-
self.atk_lo = nil
|
14
|
-
self.atk_hi = nil
|
15
|
-
self.takeable = true
|
16
|
-
self.useable = true
|
17
|
-
self.equippable = false
|
18
|
-
self.talkable = true
|
19
|
-
end
|
20
|
-
|
21
|
-
def use(player = nil)
|
22
|
-
puts '>> "Moo."'
|
23
|
-
{ type: nil, data: nil }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/pig.rb
|
2
|
-
# Item::Pig
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
|
6
|
-
module Gemwarrior
|
7
|
-
class Pig < Item
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
|
11
|
-
self.name = 'pig'
|
12
|
-
self.description = 'Dirty, eating slop, but still kind of cute. Yep, this is a pig.'
|
13
|
-
self.atk_lo = nil
|
14
|
-
self.atk_hi = nil
|
15
|
-
self.takeable = true
|
16
|
-
self.useable = true
|
17
|
-
self.equippable = false
|
18
|
-
self.talkable = true
|
19
|
-
end
|
20
|
-
|
21
|
-
def use(player = nil)
|
22
|
-
puts '>> "Oink."'
|
23
|
-
{ type: nil, data: nil }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/queen_ruby.rb
|
2
|
-
# Item::QueenRuby
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
require_relative '../../misc/animation'
|
6
|
-
|
7
|
-
module Gemwarrior
|
8
|
-
class QueenRuby < Item
|
9
|
-
# CONSTANTS
|
10
|
-
MOVE_TEXT = '*** WHOOOOOOSH ***'
|
11
|
-
|
12
|
-
def initialize
|
13
|
-
super
|
14
|
-
|
15
|
-
self.name = 'queen_ruby'
|
16
|
-
self.description = 'Queen Ruby glimmers like she was made from the substance of her name. She wears a wan smile, and her hands are delicately intertwined as she sits patiently.'
|
17
|
-
self.atk_lo = nil
|
18
|
-
self.atk_hi = nil
|
19
|
-
self.takeable = true
|
20
|
-
self.useable = true
|
21
|
-
self.equippable = false
|
22
|
-
self.talkable = true
|
23
|
-
end
|
24
|
-
|
25
|
-
def use(player = nil)
|
26
|
-
puts '>> "Thank you for bringing back the ShinyThing(tm)! The land of Jool is saved!"'
|
27
|
-
STDIN.getch
|
28
|
-
puts ">> \"Please, #{player.name}, hand the ShinyThing(tm) to me, before all is lost!\""
|
29
|
-
puts
|
30
|
-
print 'Hand over the ShinyThing(tm)? (y/n) '
|
31
|
-
answer = gets.chomp.downcase
|
32
|
-
|
33
|
-
case answer
|
34
|
-
when 'y', 'yes'
|
35
|
-
player.inventory.remove_item('sparkly_thing')
|
36
|
-
print '>> "Oh, thank you! Now that the evil Emerald is defeated, and I, Queen Ruby, have the ShinyThing(tm) again, peace can come to the land of Jool. Your reward is...'
|
37
|
-
STDIN.getch
|
38
|
-
Animation::run(phrase: '...', oneline: true)
|
39
|
-
STDIN.getch
|
40
|
-
Animation::run(phrase: '...', oneline: true)
|
41
|
-
STDIN.getch
|
42
|
-
Animation::run(phrase: '...my thanks!"', oneline: true)
|
43
|
-
STDIN.getch
|
44
|
-
puts
|
45
|
-
puts '>> "Now, be a dear and run on home."'
|
46
|
-
puts
|
47
|
-
STDIN.getch
|
48
|
-
puts 'And with that, she waves her arm in a tired, yet mystical, manner. Your mind and sight go blank, and you "poof" out of existence.'
|
49
|
-
puts
|
50
|
-
|
51
|
-
Animation::run(phrase: MOVE_TEXT)
|
52
|
-
{ type: 'move', data: 'Home' }
|
53
|
-
when 'n', 'no'
|
54
|
-
puts '>> "No? No??? Well, you are not leaving this room until you do, so think long and hard about that."'
|
55
|
-
{ type: nil, data: nil }
|
56
|
-
else
|
57
|
-
puts '>> "Take your time and let me know when you are going to give me the ShinyThing(tm), all right?"'
|
58
|
-
{ type: nil, data: nil }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/spear.rb
|
2
|
-
# Item::Spear
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
|
6
|
-
module Gemwarrior
|
7
|
-
class Spear < Item
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
|
11
|
-
self.name = 'spear'
|
12
|
-
self.description = 'Sharp spikes atop a steel ball, affixed to a sturdy wooden handle. You could do damage with this.'
|
13
|
-
self.atk_lo = 3
|
14
|
-
self.atk_hi = 7
|
15
|
-
self.takeable = true
|
16
|
-
self.useable = true
|
17
|
-
self.consumable = false
|
18
|
-
self.equippable = true
|
19
|
-
end
|
20
|
-
|
21
|
-
def use(player = nil)
|
22
|
-
puts 'This spear does, indeed, appear to strike fear upon that which is near.'
|
23
|
-
{ type: nil, data: nil }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/stone.rb
|
2
|
-
# Item::Stone
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
|
6
|
-
module Gemwarrior
|
7
|
-
class Stone < Item
|
8
|
-
def initialize
|
9
|
-
super
|
10
|
-
|
11
|
-
self.name = 'stone'
|
12
|
-
self.description = 'A small, sharp mega pebble, suitable for tossing in amusement, and perhaps combat.'
|
13
|
-
self.atk_lo = 1
|
14
|
-
self.atk_hi = 2
|
15
|
-
self.takeable = true
|
16
|
-
self.useable = true
|
17
|
-
self.equippable = true
|
18
|
-
end
|
19
|
-
|
20
|
-
def use(player = nil)
|
21
|
-
puts 'You toss the stone a few feet into the air, and then it falls back into your palm. The experience was truly thrilling.'
|
22
|
-
{ type: nil, data: nil }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# lib/gemwarrior/entities/items/ware_hawker.rb
|
2
|
-
# Item::WareHawker
|
3
|
-
|
4
|
-
require_relative '../item'
|
5
|
-
require_relative 'mace'
|
6
|
-
require_relative 'spear'
|
7
|
-
|
8
|
-
module Gemwarrior
|
9
|
-
class WareHawker < Item
|
10
|
-
# CONSTANTS
|
11
|
-
PRICE_MACE = 200
|
12
|
-
PRICE_SPEAR = 250
|
13
|
-
PLAYER_ROX_INSUFFICIENT = '>> "Are you seriously wasting my time? You are testing me, human."'
|
14
|
-
PLAYER_ITEMS_ADDITIONAL = '>> "Will there be something else?"'
|
15
|
-
PLAYER_COMMAND_INVALID = '>> "That means nothing to me."'
|
16
|
-
|
17
|
-
def initialize
|
18
|
-
super
|
19
|
-
|
20
|
-
self.name = 'ware_hawker'
|
21
|
-
self.description = 'A literal anthropomorphic hawk has set up shop behind a crudely-made table. Some wares are scattered atop its surface, seemingly within anyone\'s grasp, but the hawk\'s piercing eyes seem to belie this observation.'
|
22
|
-
self.atk_lo = nil
|
23
|
-
self.atk_hi = nil
|
24
|
-
self.takeable = false
|
25
|
-
self.useable = true
|
26
|
-
self.equippable = false
|
27
|
-
self.talkable = true
|
28
|
-
end
|
29
|
-
|
30
|
-
def use(player = nil)
|
31
|
-
puts 'You greet the hawk, mentioning that you are interested in the objects presented. The hawk speaks in a beautiful, yet commanding, tone:'
|
32
|
-
puts
|
33
|
-
|
34
|
-
hawk_shop(player)
|
35
|
-
end
|
36
|
-
|
37
|
-
def reuse(player = nil)
|
38
|
-
hawk_shop(player)
|
39
|
-
end
|
40
|
-
|
41
|
-
def hawk_shop(player)
|
42
|
-
items_purchased = []
|
43
|
-
|
44
|
-
puts '>> "I hope you have rox, human. My time is amenable to business transactions, not idle chit chat. What do you want?"'
|
45
|
-
puts
|
46
|
-
puts 'A feathered arm quickly moves across the table in an arc suggesting to you that a choice is to be made. Each object has a price tag underneath it, painstakingly written in ink.'
|
47
|
-
puts
|
48
|
-
puts "(1) Mace - #{PRICE_MACE} rox"
|
49
|
-
puts "(2) Spear - #{PRICE_SPEAR} rox"
|
50
|
-
puts
|
51
|
-
puts '>> "Choose. Now.'
|
52
|
-
|
53
|
-
loop do
|
54
|
-
puts ' 1 - Mace'
|
55
|
-
puts ' 2 - Spear'
|
56
|
-
puts ' x - leave'
|
57
|
-
print '[HAWK]> '
|
58
|
-
choice = gets.chomp.downcase
|
59
|
-
|
60
|
-
case choice
|
61
|
-
when '1'
|
62
|
-
if player.rox >= PRICE_MACE
|
63
|
-
player.rox -= PRICE_MACE
|
64
|
-
items_purchased.push(Mace.new)
|
65
|
-
puts '>> "Yes, fine."'
|
66
|
-
puts PLAYER_ITEMS_ADDITIONAL
|
67
|
-
next
|
68
|
-
else
|
69
|
-
puts PLAYER_ROX_INSUFFICIENT
|
70
|
-
next
|
71
|
-
end
|
72
|
-
when '2'
|
73
|
-
if player.rox >= PRICE_SPEAR
|
74
|
-
player.rox -= PRICE_SPEAR
|
75
|
-
items_purchased.push(Spear.new)
|
76
|
-
puts '>> "Hmph. Very well, then."'
|
77
|
-
puts PLAYER_ITEMS_ADDITIONAL
|
78
|
-
next
|
79
|
-
else
|
80
|
-
puts PLAYER_ROX_INSUFFICIENT
|
81
|
-
next
|
82
|
-
end
|
83
|
-
when 'x'
|
84
|
-
puts '>> "Our business is complete then."'
|
85
|
-
return { type: 'purchase', data: items_purchased }
|
86
|
-
else
|
87
|
-
puts PLAYER_COMMAND_INVALID
|
88
|
-
next
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|