gemwarrior 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -6
- data/bin/gemwarrior +1 -1
- data/gemwarrior.gemspec +1 -1
- data/lib/gemwarrior/entities/creature.rb +27 -0
- data/lib/gemwarrior/entities/entity.rb +20 -0
- data/lib/gemwarrior/entities/item.rb +22 -0
- data/lib/gemwarrior/{location.rb → entities/location.rb} +14 -12
- data/lib/gemwarrior/entities/monster.rb +53 -0
- data/lib/gemwarrior/{player.rb → entities/player.rb} +127 -62
- data/lib/gemwarrior/evaluator.rb +26 -12
- data/lib/gemwarrior/game.rb +19 -20
- data/lib/gemwarrior/misc/player_levels.rb +6 -0
- data/lib/gemwarrior/{version.rb → misc/version.rb} +6 -6
- data/lib/gemwarrior/{wordlist.rb → misc/wordlist.rb} +0 -0
- data/lib/gemwarrior/repl.rb +2 -2
- data/lib/gemwarrior/world.rb +308 -280
- metadata +15 -11
- data/lib/gemwarrior/creature.rb +0 -53
- data/lib/gemwarrior/item.rb +0 -30
- data/lib/gemwarrior/monster.rb +0 -55
data/lib/gemwarrior/evaluator.rb
CHANGED
@@ -10,14 +10,16 @@ module Gemwarrior
|
|
10
10
|
PROGRAM_NAME = 'Gem Warrior'
|
11
11
|
QUIT_MESSAGE = 'Thanks for playing the game. Until next time...'
|
12
12
|
RESUME_MESSAGE = 'Back to adventuring!'
|
13
|
-
SEPARATOR = '
|
13
|
+
SEPARATOR = '=========================================================================='
|
14
14
|
CHANGE_PARAMS = 'Options: name'
|
15
|
+
LIST_PARAMS = 'Options: monsters, items, locations'
|
15
16
|
|
16
17
|
## ERRORS
|
17
18
|
ERROR_COMMAND_INVALID = 'That\'s not something the game yet understands.'
|
18
19
|
ERROR_LIST_PARAM_MISSING = 'You can\'t just "list". You gotta choose something to list.'
|
19
20
|
ERROR_CHANGE_PARAM_MISSING = 'Ch-ch-changes...aren\'t happening because you didn\'t specify what to change.'
|
20
21
|
ERROR_CHANGE_PARAM_INVALID = 'You can\'t change that...yet.'
|
22
|
+
ERROR_LIST_PARAM_INVALID = 'You can\'t list that...yet.'
|
21
23
|
ERROR_GO_PARAM_MISSING = 'Just wander aimlessly? A direction would be nice.'
|
22
24
|
ERROR_ATTACK_PARAM_MISSING = 'You can\'t just "attack". You gotta choose something to attack.'
|
23
25
|
ERROR_TAKE_PARAM_MISSING = 'You can\'t just "take". You gotta choose something to take.'
|
@@ -25,12 +27,14 @@ module Gemwarrior
|
|
25
27
|
ERROR_EQUIP_PARAM_MISSING = 'You can\'t just "equip". You gotta choose something to equip.'
|
26
28
|
ERROR_UNEQUIP_PARAM_MISSING = 'You can\'t just "unequip". You gotta choose something to unequip.'
|
27
29
|
|
28
|
-
attr_accessor :world, :commands, :aliases, :descriptions
|
30
|
+
attr_accessor :world, :commands, :aliases, :descriptions, :devcmds, :devaliases
|
29
31
|
|
30
32
|
def initialize(world)
|
31
33
|
self.world = world
|
32
|
-
self.
|
33
|
-
self.
|
34
|
+
self.devcmds = %w(allvars godmode iddqd)
|
35
|
+
self.devaliases = %w(av god)
|
36
|
+
self.commands = %w(character inventory list rest look take drop equip unequip go attack change help quit quit!)
|
37
|
+
self.aliases = %w(c i ls r l t d e ue g a ch h q qq)
|
34
38
|
self.descriptions = [
|
35
39
|
'Display character information',
|
36
40
|
'Look in your inventory',
|
@@ -45,10 +49,8 @@ module Gemwarrior
|
|
45
49
|
'Attack a monster',
|
46
50
|
'Change something',
|
47
51
|
'This help menu',
|
48
|
-
'Quit w/ confirmation',
|
49
|
-
'
|
50
|
-
'Quit w/o confirmation',
|
51
|
-
'Exit w/o confirmation (very, very different, of course)'
|
52
|
+
'Quit w/ confirmation (also exit/x)',
|
53
|
+
'Quit w/o confirmation (also exit!/xx)'
|
52
54
|
]
|
53
55
|
end
|
54
56
|
|
@@ -67,6 +69,12 @@ module Gemwarrior
|
|
67
69
|
param = tokens[1]
|
68
70
|
|
69
71
|
case command
|
72
|
+
# dev commands
|
73
|
+
when 'allvars', 'av'
|
74
|
+
world.all_vars()
|
75
|
+
when 'iddqd', 'godmode', 'god'
|
76
|
+
world.player.god_mode = !world.player.god_mode
|
77
|
+
# normal commands
|
70
78
|
when 'character', 'c'
|
71
79
|
world.player.check_self
|
72
80
|
when 'inventory', 'i'
|
@@ -77,9 +85,15 @@ module Gemwarrior
|
|
77
85
|
end
|
78
86
|
when 'list', 'ls'
|
79
87
|
if param.nil?
|
80
|
-
ERROR_LIST_PARAM_MISSING
|
88
|
+
puts ERROR_LIST_PARAM_MISSING
|
89
|
+
puts LIST_PARAMS
|
81
90
|
else
|
82
|
-
|
91
|
+
case param
|
92
|
+
when 'monsters', 'items', 'locations'
|
93
|
+
world.list(param)
|
94
|
+
else
|
95
|
+
ERROR_LIST_PARAM_INVALID
|
96
|
+
end
|
83
97
|
end
|
84
98
|
when 'rest', 'r'
|
85
99
|
world.player.rest
|
@@ -166,7 +180,7 @@ module Gemwarrior
|
|
166
180
|
i = 0
|
167
181
|
print_separator
|
168
182
|
commands.each do |cmd|
|
169
|
-
puts " #{cmd}, #{aliases[i]}
|
183
|
+
puts " #{cmd.ljust(9)}, #{aliases[i].ljust(2)} -- #{descriptions[i]}"
|
170
184
|
i = i + 1
|
171
185
|
end
|
172
186
|
print_separator
|
@@ -174,7 +188,7 @@ module Gemwarrior
|
|
174
188
|
|
175
189
|
def input_valid?(input)
|
176
190
|
tokens = input.split
|
177
|
-
commands_and_aliases = commands | aliases
|
191
|
+
commands_and_aliases = commands | aliases | devcmds | devaliases
|
178
192
|
if commands_and_aliases.include?(tokens.first.downcase)
|
179
193
|
if tokens.size.between?(1,2)
|
180
194
|
return true
|
data/lib/gemwarrior/game.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# lib/gemwarrior/game.rb
|
2
2
|
# Main launching point for Gem Warrior
|
3
3
|
|
4
|
+
require_relative 'entities/player'
|
4
5
|
require_relative 'world'
|
5
|
-
require_relative 'player'
|
6
|
-
|
7
|
-
require_relative 'repl'
|
8
6
|
require_relative 'evaluator'
|
7
|
+
require_relative 'repl'
|
9
8
|
|
10
9
|
module Gemwarrior
|
11
10
|
class Game
|
@@ -13,8 +12,8 @@ module Gemwarrior
|
|
13
12
|
## PLAYER DEFAULTS
|
14
13
|
PLYR_LEVEL_DEFAULT = 1
|
15
14
|
PLYR_XP_DEFAULT = 0
|
16
|
-
PLYR_HP_CUR_DEFAULT =
|
17
|
-
PLYR_HP_MAX_DEFAULT =
|
15
|
+
PLYR_HP_CUR_DEFAULT = 30
|
16
|
+
PLYR_HP_MAX_DEFAULT = 30
|
18
17
|
PLYR_STAM_CUR_DEFAULT = 20
|
19
18
|
PLYR_STAM_MAX_DEFAULT = 20
|
20
19
|
PLYR_ATK_LO_DEFAULT = 1
|
@@ -30,21 +29,21 @@ module Gemwarrior
|
|
30
29
|
def initialize
|
31
30
|
# create new world and player
|
32
31
|
self.world = World.new
|
33
|
-
world.player = Player.new(
|
34
|
-
PLYR_LEVEL_DEFAULT,
|
35
|
-
PLYR_XP_DEFAULT,
|
36
|
-
PLYR_HP_CUR_DEFAULT,
|
37
|
-
PLYR_HP_MAX_DEFAULT,
|
38
|
-
PLYR_STAM_CUR_DEFAULT,
|
39
|
-
PLYR_STAM_MAX_DEFAULT,
|
40
|
-
PLYR_ATK_LO_DEFAULT,
|
41
|
-
PLYR_ATK_HI_DEFAULT,
|
42
|
-
PLYR_DEFENSE_DEFAULT,
|
43
|
-
PLYR_DEXTERITY_DEFAULT,
|
44
|
-
PLYR_INVENTORY_DEFAULT,
|
45
|
-
PLYR_ROX_DEFAULT,
|
46
|
-
world.loc_by_id(PLYR_CUR_LOC_ID_DEFAULT)
|
47
|
-
)
|
32
|
+
world.player = Player.new({
|
33
|
+
:level => PLYR_LEVEL_DEFAULT,
|
34
|
+
:xp => PLYR_XP_DEFAULT,
|
35
|
+
:hp_cur => PLYR_HP_CUR_DEFAULT,
|
36
|
+
:hp_max => PLYR_HP_MAX_DEFAULT,
|
37
|
+
:stam_cur => PLYR_STAM_CUR_DEFAULT,
|
38
|
+
:stam_max => PLYR_STAM_MAX_DEFAULT,
|
39
|
+
:atk_lo => PLYR_ATK_LO_DEFAULT,
|
40
|
+
:atk_hi => PLYR_ATK_HI_DEFAULT,
|
41
|
+
:defense => PLYR_DEFENSE_DEFAULT,
|
42
|
+
:dexterity => PLYR_DEXTERITY_DEFAULT,
|
43
|
+
:inventory => PLYR_INVENTORY_DEFAULT,
|
44
|
+
:rox => PLYR_ROX_DEFAULT,
|
45
|
+
:cur_loc => world.loc_by_id(PLYR_CUR_LOC_ID_DEFAULT)
|
46
|
+
})
|
48
47
|
|
49
48
|
# create the console
|
50
49
|
self.eval = Evaluator.new(world)
|
@@ -1,6 +1,6 @@
|
|
1
|
-
# lib/gemwarrior/version.rb
|
2
|
-
# Version of Gem Warrior
|
3
|
-
|
4
|
-
module Gemwarrior
|
5
|
-
VERSION = "0.4.
|
6
|
-
end
|
1
|
+
# lib/gemwarrior/version.rb
|
2
|
+
# Version of Gem Warrior
|
3
|
+
|
4
|
+
module Gemwarrior
|
5
|
+
VERSION = "0.4.1"
|
6
|
+
end
|
File without changes
|
data/lib/gemwarrior/repl.rb
CHANGED
data/lib/gemwarrior/world.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# lib/gemwarrior/world.rb
|
2
2
|
# World where the locations, monsters, items, etc. exist
|
3
3
|
|
4
|
+
require_relative 'entities/monster'
|
5
|
+
require_relative 'entities/item'
|
6
|
+
require_relative 'entities/location'
|
4
7
|
require_relative 'defaults'
|
5
|
-
require_relative 'monster'
|
6
|
-
require_relative 'item'
|
7
|
-
require_relative 'location'
|
8
8
|
|
9
9
|
module Gemwarrior
|
10
10
|
class World
|
@@ -26,14 +26,42 @@ module Gemwarrior
|
|
26
26
|
self.player = nil
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def all_vars
|
30
|
+
puts "======================\n"
|
31
|
+
puts "All Variables in World\n"
|
32
|
+
puts "======================\n"
|
33
|
+
puts "#{list("players", true)}\n"
|
34
|
+
puts "#{list("monsters", true)}\n\n"
|
35
|
+
puts "#{list("items", true)}\n\n"
|
36
|
+
puts "#{list("locations", true)}\n"
|
37
|
+
end
|
38
|
+
|
39
|
+
def list(param, details = false)
|
30
40
|
case param
|
31
|
-
when
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
41
|
+
when 'players'
|
42
|
+
puts '[PLAYERS]'
|
43
|
+
player.check_self(false)
|
44
|
+
when 'monsters'
|
45
|
+
puts '[MONSTERS]'
|
46
|
+
if details
|
47
|
+
return monsters.map { |m| print m.describe }
|
48
|
+
else
|
49
|
+
">> #{monsters.map(&:name).join(', ')}"
|
50
|
+
end
|
51
|
+
when 'items'
|
52
|
+
puts '[ITEMS]'
|
53
|
+
if details
|
54
|
+
items.map { |i| print i.status }
|
55
|
+
else
|
56
|
+
">> #{items.map(&:name).join(', ')}"
|
57
|
+
end
|
58
|
+
when 'locations'
|
59
|
+
puts '[LOCATIONS]'
|
60
|
+
if details
|
61
|
+
locations.map { |l| print l.status }
|
62
|
+
else
|
63
|
+
">> #{locations.map(&:name).join(', ')}"
|
64
|
+
end
|
37
65
|
else
|
38
66
|
ERROR_LIST_PARAM_INVALID
|
39
67
|
end
|
@@ -70,303 +98,303 @@ module Gemwarrior
|
|
70
98
|
|
71
99
|
def init_monsters
|
72
100
|
monsters = []
|
73
|
-
monsters.push(Monster.new(
|
74
|
-
MOB_ID_ALEXANDRAT,
|
75
|
-
MOB_NAME_ALEXANDRAT,
|
76
|
-
MOB_DESC_ALEXANDRAT,
|
77
|
-
'ugly',
|
78
|
-
'gnarled',
|
79
|
-
'unsurprisingly unchipper',
|
80
|
-
MOB_LEVEL_ALEXANDRAT,
|
81
|
-
MOB_LEVEL_ALEXANDRAT *
|
82
|
-
MOB_LEVEL_ALEXANDRAT *
|
83
|
-
MOB_LEVEL_ALEXANDRAT *
|
84
|
-
MOB_LEVEL_ALEXANDRAT * 2,
|
85
|
-
MOB_DEXTERITY_ALEXANDRAT,
|
86
|
-
Inventory.new,
|
87
|
-
rand(0..10),
|
88
|
-
MOB_LEVEL_ALEXANDRAT * rand(1..2),
|
89
|
-
MOB_BATTLECRY_ALEXANDRAT
|
90
|
-
)
|
101
|
+
monsters.push(Monster.new({
|
102
|
+
:id => MOB_ID_ALEXANDRAT,
|
103
|
+
:name => MOB_NAME_ALEXANDRAT,
|
104
|
+
:description => MOB_DESC_ALEXANDRAT,
|
105
|
+
:face => 'ugly',
|
106
|
+
:hands => 'gnarled',
|
107
|
+
:mood => 'unsurprisingly unchipper',
|
108
|
+
:level => (MOB_LEVEL_ALEXANDRAT * 1.5).floor,
|
109
|
+
:hp_cur => (MOB_LEVEL_ALEXANDRAT * 4.25).floor,
|
110
|
+
:hp_max => (MOB_LEVEL_ALEXANDRAT * 4.25).floor,
|
111
|
+
:atk_lo => (MOB_LEVEL_ALEXANDRAT * 1.25).floor,
|
112
|
+
:atk_hi => MOB_LEVEL_ALEXANDRAT * 2,
|
113
|
+
:dexterity => MOB_DEXTERITY_ALEXANDRAT,
|
114
|
+
:inventory => Inventory.new,
|
115
|
+
:rox_to_give => rand(0..10),
|
116
|
+
:xp_to_give => MOB_LEVEL_ALEXANDRAT * rand(1..2),
|
117
|
+
:battlecry => MOB_BATTLECRY_ALEXANDRAT
|
118
|
+
})
|
91
119
|
)
|
92
|
-
monsters.push(Monster.new(
|
93
|
-
MOB_ID_AMBEROO,
|
94
|
-
MOB_NAME_AMBEROO,
|
95
|
-
MOB_DESC_AMBEROO,
|
96
|
-
'punchy',
|
97
|
-
'balled',
|
98
|
-
'jumpy',
|
99
|
-
MOB_LEVEL_AMBEROO,
|
100
|
-
MOB_LEVEL_AMBEROO * 5,
|
101
|
-
MOB_LEVEL_AMBEROO * 5,
|
102
|
-
MOB_LEVEL_AMBEROO *
|
103
|
-
MOB_LEVEL_AMBEROO * 2,
|
104
|
-
MOB_DEXTERITY_AMBEROO,
|
105
|
-
Inventory.new,
|
106
|
-
rand(0..10),
|
107
|
-
MOB_LEVEL_AMBEROO * rand(1..2),
|
108
|
-
MOB_BATTLECRY_AMBEROO
|
109
|
-
)
|
120
|
+
monsters.push(Monster.new({
|
121
|
+
:id => MOB_ID_AMBEROO,
|
122
|
+
:name => MOB_NAME_AMBEROO,
|
123
|
+
:description => MOB_DESC_AMBEROO,
|
124
|
+
:face => 'punchy',
|
125
|
+
:hands => 'balled',
|
126
|
+
:mood => 'jumpy',
|
127
|
+
:level => (MOB_LEVEL_AMBEROO * 1.5).floor,
|
128
|
+
:hp_cur => (MOB_LEVEL_AMBEROO * 4.5).floor,
|
129
|
+
:hp_max => (MOB_LEVEL_AMBEROO * 4.5).floor,
|
130
|
+
:atk_lo => (MOB_LEVEL_AMBEROO * 1.25).floor,
|
131
|
+
:atk_hi => MOB_LEVEL_AMBEROO * 2,
|
132
|
+
:dexterity => MOB_DEXTERITY_AMBEROO,
|
133
|
+
:inventory => Inventory.new,
|
134
|
+
:rox_to_give => rand(0..10),
|
135
|
+
:xp_to_give => MOB_LEVEL_AMBEROO * rand(1..2),
|
136
|
+
:battlecry => MOB_BATTLECRY_AMBEROO
|
137
|
+
})
|
110
138
|
)
|
111
|
-
monsters.push(Monster.new(
|
112
|
-
MOB_ID_AMETHYSTLE,
|
113
|
-
MOB_NAME_AMETHYSTLE,
|
114
|
-
MOB_DESC_AMETHYSTLE,
|
115
|
-
'sharp',
|
116
|
-
'loose',
|
117
|
-
'mesmerizing',
|
118
|
-
MOB_LEVEL_AMETHYSTLE,
|
119
|
-
MOB_LEVEL_AMETHYSTLE * 5,
|
120
|
-
MOB_LEVEL_AMETHYSTLE * 5,
|
121
|
-
MOB_LEVEL_AMETHYSTLE *
|
122
|
-
MOB_LEVEL_AMETHYSTLE * 2,
|
123
|
-
MOB_DEXTERITY_AMETHYSTLE,
|
124
|
-
Inventory.new,
|
125
|
-
rand(0..10),
|
126
|
-
MOB_LEVEL_AMETHYSTLE * rand(1..2),
|
127
|
-
MOB_BATTLECRY_AMETHYSTLE
|
128
|
-
)
|
139
|
+
monsters.push(Monster.new({
|
140
|
+
:id => MOB_ID_AMETHYSTLE,
|
141
|
+
:name => MOB_NAME_AMETHYSTLE,
|
142
|
+
:description => MOB_DESC_AMETHYSTLE,
|
143
|
+
:face => 'sharp',
|
144
|
+
:hands => 'loose',
|
145
|
+
:mood => 'mesmerizing',
|
146
|
+
:level => MOB_LEVEL_AMETHYSTLE,
|
147
|
+
:hp_cur => MOB_LEVEL_AMETHYSTLE * 5,
|
148
|
+
:hp_max => MOB_LEVEL_AMETHYSTLE * 5,
|
149
|
+
:atk_lo => (MOB_LEVEL_AMETHYSTLE * 1.25).floor,
|
150
|
+
:atk_hi => MOB_LEVEL_AMETHYSTLE * 2,
|
151
|
+
:dexterity => MOB_DEXTERITY_AMETHYSTLE,
|
152
|
+
:inventory => Inventory.new,
|
153
|
+
:rox_to_give => rand(0..10),
|
154
|
+
:xp_to_give => MOB_LEVEL_AMETHYSTLE * rand(1..2),
|
155
|
+
:battlecry => MOB_BATTLECRY_AMETHYSTLE
|
156
|
+
})
|
129
157
|
)
|
130
|
-
monsters.push(Monster.new(
|
131
|
-
MOB_ID_APATIGER,
|
132
|
-
MOB_NAME_APATIGER,
|
133
|
-
MOB_DESC_APATIGER,
|
134
|
-
'calloused',
|
135
|
-
'soft',
|
136
|
-
'apathetic',
|
137
|
-
MOB_LEVEL_APATIGER,
|
138
|
-
MOB_LEVEL_APATIGER * 5,
|
139
|
-
MOB_LEVEL_APATIGER * 5,
|
140
|
-
MOB_LEVEL_APATIGER *
|
141
|
-
MOB_LEVEL_APATIGER * 2,
|
142
|
-
MOB_DEXTERITY_APATIGER,
|
143
|
-
Inventory.new,
|
144
|
-
rand(0..10),
|
145
|
-
MOB_LEVEL_APATIGER * rand(1..2),
|
146
|
-
MOB_BATTLECRY_APATIGER
|
147
|
-
)
|
158
|
+
monsters.push(Monster.new({
|
159
|
+
:id => MOB_ID_APATIGER,
|
160
|
+
:name => MOB_NAME_APATIGER,
|
161
|
+
:description => MOB_DESC_APATIGER,
|
162
|
+
:face => 'calloused',
|
163
|
+
:hands => 'soft',
|
164
|
+
:mood => 'apathetic',
|
165
|
+
:level => MOB_LEVEL_APATIGER,
|
166
|
+
:hp_cur => MOB_LEVEL_APATIGER * 5,
|
167
|
+
:hp_max => MOB_LEVEL_APATIGER * 5,
|
168
|
+
:atk_lo => (MOB_LEVEL_APATIGER * 1.25).floor,
|
169
|
+
:atk_hi => MOB_LEVEL_APATIGER * 2,
|
170
|
+
:dexterity => MOB_DEXTERITY_APATIGER,
|
171
|
+
:inventory => Inventory.new,
|
172
|
+
:rox_to_give => rand(0..10),
|
173
|
+
:xp_to_give => MOB_LEVEL_APATIGER * rand(1..2),
|
174
|
+
:battlecry => MOB_BATTLECRY_APATIGER
|
175
|
+
})
|
148
176
|
)
|
149
|
-
monsters.push(Monster.new(
|
150
|
-
MOB_ID_AQUAMARINE,
|
151
|
-
MOB_NAME_AQUAMARINE,
|
152
|
-
MOB_DESC_AQUAMARINE,
|
153
|
-
'strained',
|
154
|
-
'hairy',
|
155
|
-
'tempered',
|
156
|
-
MOB_LEVEL_AQUAMARINE,
|
157
|
-
MOB_LEVEL_AQUAMARINE * 5,
|
158
|
-
MOB_LEVEL_AQUAMARINE * 5,
|
159
|
-
MOB_LEVEL_AQUAMARINE *
|
160
|
-
MOB_LEVEL_AQUAMARINE * 2,
|
161
|
-
MOB_DEXTERITY_AQUAMARINE,
|
162
|
-
Inventory.new,
|
163
|
-
rand(0..10),
|
164
|
-
MOB_LEVEL_AQUAMARINE * rand(1..2),
|
165
|
-
MOB_BATTLECRY_AQUAMARINE
|
166
|
-
)
|
177
|
+
monsters.push(Monster.new({
|
178
|
+
:id => MOB_ID_AQUAMARINE,
|
179
|
+
:name => MOB_NAME_AQUAMARINE,
|
180
|
+
:description => MOB_DESC_AQUAMARINE,
|
181
|
+
:face => 'strained',
|
182
|
+
:hands => 'hairy',
|
183
|
+
:mood => 'tempered',
|
184
|
+
:level => MOB_LEVEL_AQUAMARINE,
|
185
|
+
:hp_cur => MOB_LEVEL_AQUAMARINE * 5,
|
186
|
+
:hp_max => MOB_LEVEL_AQUAMARINE * 5,
|
187
|
+
:atk_lo => (MOB_LEVEL_AQUAMARINE * 1.5).floor,
|
188
|
+
:atk_hi => MOB_LEVEL_AQUAMARINE * 2,
|
189
|
+
:dexterity => MOB_DEXTERITY_AQUAMARINE,
|
190
|
+
:inventory => Inventory.new,
|
191
|
+
:rox_to_give => rand(0..10),
|
192
|
+
:xp_to_give => MOB_LEVEL_AQUAMARINE * rand(1..2),
|
193
|
+
:battlecry => MOB_BATTLECRY_AQUAMARINE
|
194
|
+
})
|
167
195
|
)
|
168
|
-
monsters.push(Monster.new(
|
169
|
-
MOB_ID_BLOODSTORM,
|
170
|
-
MOB_NAME_BLOODSTORM,
|
171
|
-
MOB_DESC_BLOODSTORM,
|
172
|
-
'bloody',
|
173
|
-
'bloody',
|
174
|
-
'boiling',
|
175
|
-
MOB_LEVEL_BLOODSTORM,
|
176
|
-
MOB_LEVEL_BLOODSTORM * 5,
|
177
|
-
MOB_LEVEL_BLOODSTORM * 5,
|
178
|
-
MOB_LEVEL_BLOODSTORM *
|
179
|
-
MOB_LEVEL_BLOODSTORM * 2,
|
180
|
-
MOB_DEXTERITY_BLOODSTORM,
|
181
|
-
Inventory.new,
|
182
|
-
rand(0..10),
|
183
|
-
MOB_LEVEL_BLOODSTORM * rand(2..3),
|
184
|
-
MOB_BATTLECRY_BLOODSTORM
|
185
|
-
)
|
196
|
+
monsters.push(Monster.new({
|
197
|
+
:id => MOB_ID_BLOODSTORM,
|
198
|
+
:name => MOB_NAME_BLOODSTORM,
|
199
|
+
:description => MOB_DESC_BLOODSTORM,
|
200
|
+
:face => 'bloody',
|
201
|
+
:hands => 'bloody',
|
202
|
+
:mood => 'boiling',
|
203
|
+
:level => MOB_LEVEL_BLOODSTORM,
|
204
|
+
:hp_cur => MOB_LEVEL_BLOODSTORM * 5,
|
205
|
+
:hp_max => MOB_LEVEL_BLOODSTORM * 5,
|
206
|
+
:atk_lo => (MOB_LEVEL_BLOODSTORM * 1.5).floor,
|
207
|
+
:atk_hi => MOB_LEVEL_BLOODSTORM * 2,
|
208
|
+
:dexterity => MOB_DEXTERITY_BLOODSTORM,
|
209
|
+
:inventory => Inventory.new,
|
210
|
+
:rox_to_give => rand(0..10),
|
211
|
+
:xp_to_give => MOB_LEVEL_BLOODSTORM * rand(2..3),
|
212
|
+
:battlecry => MOB_BATTLECRY_BLOODSTORM
|
213
|
+
})
|
186
214
|
)
|
187
|
-
monsters.push(Monster.new(
|
188
|
-
MOB_ID_CITRINAGA,
|
189
|
-
MOB_NAME_CITRINAGA,
|
190
|
-
MOB_DESC_CITRINAGA,
|
191
|
-
'shiny',
|
192
|
-
'glistening',
|
193
|
-
'staid',
|
194
|
-
MOB_LEVEL_CITRINAGA,
|
195
|
-
MOB_LEVEL_CITRINAGA * 5,
|
196
|
-
MOB_LEVEL_CITRINAGA * 5,
|
197
|
-
MOB_LEVEL_CITRINAGA *
|
198
|
-
MOB_LEVEL_CITRINAGA * 2,
|
199
|
-
MOB_DEXTERITY_CITRINAGA,
|
200
|
-
Inventory.new,
|
201
|
-
rand(0..10),
|
202
|
-
MOB_LEVEL_CITRINAGA * rand(2..3),
|
203
|
-
MOB_BATTLECRY_CITRINAGA
|
204
|
-
)
|
215
|
+
monsters.push(Monster.new({
|
216
|
+
:id => MOB_ID_CITRINAGA,
|
217
|
+
:name => MOB_NAME_CITRINAGA,
|
218
|
+
:description => MOB_DESC_CITRINAGA,
|
219
|
+
:face => 'shiny',
|
220
|
+
:hands => 'glistening',
|
221
|
+
:mood => 'staid',
|
222
|
+
:level => MOB_LEVEL_CITRINAGA,
|
223
|
+
:hp_cur => MOB_LEVEL_CITRINAGA * 5,
|
224
|
+
:hp_max => MOB_LEVEL_CITRINAGA * 5,
|
225
|
+
:atk_lo => (MOB_LEVEL_CITRINAGA * 1.3).floor,
|
226
|
+
:atk_hi => MOB_LEVEL_CITRINAGA * 2,
|
227
|
+
:dexterity => MOB_DEXTERITY_CITRINAGA,
|
228
|
+
:inventory => Inventory.new,
|
229
|
+
:rox_to_give => rand(0..10),
|
230
|
+
:xp_to_give => MOB_LEVEL_CITRINAGA * rand(2..3),
|
231
|
+
:battlecry => MOB_BATTLECRY_CITRINAGA
|
232
|
+
})
|
205
233
|
)
|
206
|
-
monsters.push(Monster.new(
|
207
|
-
MOB_ID_CORALIZ,
|
208
|
-
MOB_NAME_CORALIZ,
|
209
|
-
MOB_DESC_CORALIZ,
|
210
|
-
'spotted',
|
211
|
-
'slippery',
|
212
|
-
'emotionless',
|
213
|
-
MOB_LEVEL_CORALIZ,
|
214
|
-
MOB_LEVEL_CORALIZ * 5,
|
215
|
-
MOB_LEVEL_CORALIZ * 5,
|
216
|
-
MOB_LEVEL_CORALIZ *
|
217
|
-
MOB_LEVEL_CORALIZ * 2,
|
218
|
-
MOB_DEXTERITY_CORALIZ,
|
219
|
-
Inventory.new,
|
220
|
-
rand(0..10),
|
221
|
-
MOB_LEVEL_CORALIZ * rand(2..3),
|
222
|
-
MOB_BATTLECRY_CORALIZ
|
223
|
-
)
|
234
|
+
monsters.push(Monster.new({
|
235
|
+
:id => MOB_ID_CORALIZ,
|
236
|
+
:name => MOB_NAME_CORALIZ,
|
237
|
+
:description => MOB_DESC_CORALIZ,
|
238
|
+
:face => 'spotted',
|
239
|
+
:hands => 'slippery',
|
240
|
+
:mood => 'emotionless',
|
241
|
+
:level => MOB_LEVEL_CORALIZ,
|
242
|
+
:hp_cur => MOB_LEVEL_CORALIZ * 5,
|
243
|
+
:hp_max => MOB_LEVEL_CORALIZ * 5,
|
244
|
+
:atk_lo => (MOB_LEVEL_CORALIZ * 1.5).floor,
|
245
|
+
:atk_hi => MOB_LEVEL_CORALIZ * 2,
|
246
|
+
:dexterity => MOB_DEXTERITY_CORALIZ,
|
247
|
+
:inventory => Inventory.new,
|
248
|
+
:rox_to_give => rand(0..10),
|
249
|
+
:xp_to_give => MOB_LEVEL_CORALIZ * rand(2..3),
|
250
|
+
:battlecry => MOB_BATTLECRY_CORALIZ
|
251
|
+
})
|
224
252
|
)
|
225
|
-
monsters.push(Monster.new(
|
226
|
-
MOB_ID_CUBICAT,
|
227
|
-
MOB_NAME_CUBICAT,
|
228
|
-
MOB_DESC_CUBICAT,
|
229
|
-
'striking',
|
230
|
-
'grippy',
|
231
|
-
'salacious',
|
232
|
-
MOB_LEVEL_CUBICAT,
|
233
|
-
MOB_LEVEL_CUBICAT * 5,
|
234
|
-
MOB_LEVEL_CUBICAT * 5,
|
235
|
-
MOB_LEVEL_CUBICAT *
|
236
|
-
MOB_LEVEL_CUBICAT * 2,
|
237
|
-
MOB_DEXTERITY_CUBICAT,
|
238
|
-
Inventory.new,
|
239
|
-
rand(0..10),
|
240
|
-
MOB_LEVEL_CUBICAT * rand(3..4),
|
241
|
-
MOB_BATTLECRY_CUBICAT
|
242
|
-
)
|
253
|
+
monsters.push(Monster.new({
|
254
|
+
:id => MOB_ID_CUBICAT,
|
255
|
+
:name => MOB_NAME_CUBICAT,
|
256
|
+
:description => MOB_DESC_CUBICAT,
|
257
|
+
:face => 'striking',
|
258
|
+
:hands => 'grippy',
|
259
|
+
:mood => 'salacious',
|
260
|
+
:level => MOB_LEVEL_CUBICAT,
|
261
|
+
:hp_cur => MOB_LEVEL_CUBICAT * 5,
|
262
|
+
:hp_max => MOB_LEVEL_CUBICAT * 5,
|
263
|
+
:atk_lo => (MOB_LEVEL_CUBICAT * 1.75).floor,
|
264
|
+
:atk_hi => MOB_LEVEL_CUBICAT * 2,
|
265
|
+
:dexterity => MOB_DEXTERITY_CUBICAT,
|
266
|
+
:inventory => Inventory.new,
|
267
|
+
:rox_to_give => rand(0..10),
|
268
|
+
:xp_to_give => MOB_LEVEL_CUBICAT * rand(3..4),
|
269
|
+
:battlecry => MOB_BATTLECRY_CUBICAT
|
270
|
+
})
|
243
271
|
)
|
244
|
-
monsters.push(Monster.new(
|
245
|
-
MOB_ID_DIAMAN,
|
246
|
-
MOB_NAME_DIAMAN,
|
247
|
-
MOB_DESC_DIAMAN,
|
248
|
-
'bright',
|
249
|
-
'jagged',
|
250
|
-
'adamant',
|
251
|
-
MOB_LEVEL_DIAMAN,
|
252
|
-
MOB_LEVEL_DIAMAN * 5,
|
253
|
-
MOB_LEVEL_DIAMAN * 5,
|
254
|
-
MOB_LEVEL_DIAMAN *
|
255
|
-
MOB_LEVEL_DIAMAN * 2,
|
256
|
-
MOB_DEXTERITY_DIAMAN,
|
257
|
-
Inventory.new,
|
258
|
-
rand(0..10),
|
259
|
-
MOB_LEVEL_DIAMAN * rand(3..5),
|
260
|
-
MOB_BATTLECRY_DIAMAN
|
261
|
-
)
|
272
|
+
monsters.push(Monster.new({
|
273
|
+
:id => MOB_ID_DIAMAN,
|
274
|
+
:name => MOB_NAME_DIAMAN,
|
275
|
+
:description => MOB_DESC_DIAMAN,
|
276
|
+
:face => 'bright',
|
277
|
+
:hands => 'jagged',
|
278
|
+
:mood => 'adamant',
|
279
|
+
:level => MOB_LEVEL_DIAMAN,
|
280
|
+
:hp_cur => MOB_LEVEL_DIAMAN * 5,
|
281
|
+
:hp_max => MOB_LEVEL_DIAMAN * 5,
|
282
|
+
:atk_lo => (MOB_LEVEL_DIAMAN * 1.75).floor,
|
283
|
+
:atk_hi => MOB_LEVEL_DIAMAN * 2,
|
284
|
+
:dexterity => MOB_DEXTERITY_DIAMAN,
|
285
|
+
:inventory => Inventory.new,
|
286
|
+
:rox_to_give => rand(0..10),
|
287
|
+
:xp_to_give => MOB_LEVEL_DIAMAN * rand(3..5),
|
288
|
+
:battlecry => MOB_BATTLECRY_DIAMAN
|
289
|
+
})
|
262
290
|
)
|
263
291
|
end
|
264
292
|
|
265
293
|
def init_items
|
266
294
|
items = []
|
267
|
-
items.push(Item.new(
|
268
|
-
ITEM_ID_STONE,
|
269
|
-
ITEM_NAME_STONE,
|
270
|
-
ITEM_DESC_STONE,
|
271
|
-
ITEM_ATK_LO_STONE,
|
272
|
-
ITEM_ATK_HI_STONE,
|
273
|
-
true,
|
274
|
-
true
|
275
|
-
)
|
295
|
+
items.push(Item.new({
|
296
|
+
:id => ITEM_ID_STONE,
|
297
|
+
:name => ITEM_NAME_STONE,
|
298
|
+
:description => ITEM_DESC_STONE,
|
299
|
+
:atk_lo => ITEM_ATK_LO_STONE,
|
300
|
+
:atk_hi => ITEM_ATK_HI_STONE,
|
301
|
+
:takeable => true,
|
302
|
+
:equippable => true
|
303
|
+
})
|
276
304
|
)
|
277
|
-
items.push(Item.new(
|
278
|
-
ITEM_ID_BED,
|
279
|
-
ITEM_NAME_BED,
|
280
|
-
ITEM_DESC_BED,
|
281
|
-
ITEM_ATK_LO_BED,
|
282
|
-
ITEM_ATK_HI_BED,
|
283
|
-
false,
|
284
|
-
false
|
285
|
-
)
|
305
|
+
items.push(Item.new({
|
306
|
+
:id => ITEM_ID_BED,
|
307
|
+
:name => ITEM_NAME_BED,
|
308
|
+
:description => ITEM_DESC_BED,
|
309
|
+
:atk_lo => ITEM_ATK_LO_BED,
|
310
|
+
:atk_hi => ITEM_ATK_HI_BED,
|
311
|
+
:takeable => false,
|
312
|
+
:equippable => false
|
313
|
+
})
|
286
314
|
)
|
287
|
-
items.push(Item.new(
|
288
|
-
ITEM_ID_STALACTITE,
|
289
|
-
ITEM_NAME_STALACTITE,
|
290
|
-
ITEM_DESC_STALACTITE,
|
291
|
-
ITEM_ATK_LO_STALACTITE,
|
292
|
-
ITEM_ATK_HI_STALACTITE,
|
293
|
-
true,
|
294
|
-
true
|
295
|
-
)
|
315
|
+
items.push(Item.new({
|
316
|
+
:id => ITEM_ID_STALACTITE,
|
317
|
+
:name => ITEM_NAME_STALACTITE,
|
318
|
+
:description => ITEM_DESC_STALACTITE,
|
319
|
+
:atk_lo => ITEM_ATK_LO_STALACTITE,
|
320
|
+
:atk_hi => ITEM_ATK_HI_STALACTITE,
|
321
|
+
:takeable => true,
|
322
|
+
:equippable => true
|
323
|
+
})
|
296
324
|
)
|
297
|
-
items.push(Item.new(
|
298
|
-
ITEM_ID_FEATHER,
|
299
|
-
ITEM_NAME_FEATHER,
|
300
|
-
ITEM_DESC_FEATHER,
|
301
|
-
ITEM_ATK_LO_FEATHER,
|
302
|
-
ITEM_ATK_HI_FEATHER,
|
303
|
-
true,
|
304
|
-
false
|
305
|
-
)
|
325
|
+
items.push(Item.new({
|
326
|
+
:id => ITEM_ID_FEATHER,
|
327
|
+
:name => ITEM_NAME_FEATHER,
|
328
|
+
:description => ITEM_DESC_FEATHER,
|
329
|
+
:atk_lo => ITEM_ATK_LO_FEATHER,
|
330
|
+
:atk_hi => ITEM_ATK_HI_FEATHER,
|
331
|
+
:takeable => true,
|
332
|
+
:equippable => false
|
333
|
+
})
|
306
334
|
)
|
307
|
-
items.push(Item.new(
|
308
|
-
ITEM_ID_GUN,
|
309
|
-
ITEM_NAME_GUN,
|
310
|
-
ITEM_DESC_GUN,
|
311
|
-
ITEM_ATK_LO_GUN,
|
312
|
-
ITEM_ATK_HI_GUN,
|
313
|
-
true,
|
314
|
-
true
|
315
|
-
)
|
335
|
+
items.push(Item.new({
|
336
|
+
:id => ITEM_ID_GUN,
|
337
|
+
:name => ITEM_NAME_GUN,
|
338
|
+
:description => ITEM_DESC_GUN,
|
339
|
+
:atk_lo => ITEM_ATK_LO_GUN,
|
340
|
+
:atk_hi => ITEM_ATK_HI_GUN,
|
341
|
+
:takeable => true,
|
342
|
+
:equippable => true
|
343
|
+
})
|
316
344
|
)
|
317
345
|
end
|
318
346
|
|
319
347
|
def init_locations
|
320
348
|
locations = []
|
321
|
-
locations.push(Location.new(
|
322
|
-
LOC_ID_HOME,
|
323
|
-
LOC_NAME_HOME,
|
324
|
-
LOC_DESC_HOME,
|
325
|
-
LOC_CONNECTIONS_HOME,
|
326
|
-
:none,
|
327
|
-
[item_by_id(0), item_by_id(1)],
|
328
|
-
monsters
|
329
|
-
)
|
349
|
+
locations.push(Location.new({
|
350
|
+
:id => LOC_ID_HOME,
|
351
|
+
:name => LOC_NAME_HOME,
|
352
|
+
:description => LOC_DESC_HOME,
|
353
|
+
:locs_connected => LOC_CONNECTIONS_HOME,
|
354
|
+
:danger_level => :none,
|
355
|
+
:items => [item_by_id(0), item_by_id(1)],
|
356
|
+
:monsters_available => monsters
|
357
|
+
})
|
330
358
|
)
|
331
|
-
locations.push(Location.new(
|
332
|
-
LOC_ID_CAVE_ENTRANCE,
|
333
|
-
LOC_NAME_CAVE_ENTRANCE,
|
334
|
-
LOC_DESC_CAVE_ENTRANCE,
|
335
|
-
LOC_CONNECTIONS_CAVE_ENTRANCE,
|
336
|
-
:low,
|
337
|
-
[],
|
338
|
-
monsters
|
339
|
-
)
|
359
|
+
locations.push(Location.new({
|
360
|
+
:id => LOC_ID_CAVE_ENTRANCE,
|
361
|
+
:name => LOC_NAME_CAVE_ENTRANCE,
|
362
|
+
:description => LOC_DESC_CAVE_ENTRANCE,
|
363
|
+
:locs_connected => LOC_CONNECTIONS_CAVE_ENTRANCE,
|
364
|
+
:danger_level => :low,
|
365
|
+
:items => [],
|
366
|
+
:monsters_available => monsters
|
367
|
+
})
|
340
368
|
)
|
341
|
-
locations.push(Location.new(
|
342
|
-
LOC_ID_CAVE_ROOM1,
|
343
|
-
LOC_NAME_CAVE_ROOM1,
|
344
|
-
LOC_DESC_CAVE_ROOM1,
|
345
|
-
LOC_CONNECTIONS_CAVE_ROOM1,
|
346
|
-
:moderate,
|
347
|
-
[item_by_id(2)],
|
348
|
-
monsters
|
349
|
-
)
|
369
|
+
locations.push(Location.new({
|
370
|
+
:id => LOC_ID_CAVE_ROOM1,
|
371
|
+
:name => LOC_NAME_CAVE_ROOM1,
|
372
|
+
:description => LOC_DESC_CAVE_ROOM1,
|
373
|
+
:locs_connected => LOC_CONNECTIONS_CAVE_ROOM1,
|
374
|
+
:danger_level => :moderate,
|
375
|
+
:items => [item_by_id(2)],
|
376
|
+
:monsters_available => monsters
|
377
|
+
})
|
350
378
|
)
|
351
|
-
locations.push(Location.new(
|
352
|
-
LOC_ID_FOREST,
|
353
|
-
LOC_NAME_FOREST,
|
354
|
-
LOC_DESC_FOREST,
|
355
|
-
LOC_CONNECTIONS_FOREST,
|
356
|
-
:low,
|
357
|
-
[item_by_id(3)],
|
358
|
-
monsters
|
359
|
-
)
|
379
|
+
locations.push(Location.new({
|
380
|
+
:id => LOC_ID_FOREST,
|
381
|
+
:name => LOC_NAME_FOREST,
|
382
|
+
:description => LOC_DESC_FOREST,
|
383
|
+
:locs_connected => LOC_CONNECTIONS_FOREST,
|
384
|
+
:danger_level => :low,
|
385
|
+
:items => [item_by_id(3)],
|
386
|
+
:monsters_available => monsters
|
387
|
+
})
|
360
388
|
)
|
361
|
-
locations.push(Location.new(
|
362
|
-
LOC_ID_SKYTOWER,
|
363
|
-
LOC_NAME_SKYTOWER,
|
364
|
-
LOC_DESC_SKYTOWER,
|
365
|
-
LOC_CONNECTIONS_SKYTOWER,
|
366
|
-
:assured,
|
367
|
-
[item_by_id(4)],
|
368
|
-
monsters
|
369
|
-
)
|
389
|
+
locations.push(Location.new({
|
390
|
+
:id => LOC_ID_SKYTOWER,
|
391
|
+
:name => LOC_NAME_SKYTOWER,
|
392
|
+
:description => LOC_DESC_SKYTOWER,
|
393
|
+
:locs_connected => LOC_CONNECTIONS_SKYTOWER,
|
394
|
+
:danger_level => :assured,
|
395
|
+
:items => [item_by_id(4)],
|
396
|
+
:monsters_available => monsters
|
397
|
+
})
|
370
398
|
)
|
371
399
|
end
|
372
400
|
end
|