gemwarrior 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +55 -50
- data/lib/gemwarrior/defaults.rb +108 -74
- data/lib/gemwarrior/evaluator.rb +33 -9
- data/lib/gemwarrior/game.rb +17 -11
- data/lib/gemwarrior/inventory.rb +50 -9
- data/lib/gemwarrior/item.rb +12 -6
- data/lib/gemwarrior/location.rb +19 -1
- data/lib/gemwarrior/monster.rb +13 -2
- data/lib/gemwarrior/player.rb +124 -4
- data/lib/gemwarrior/repl.rb +2 -1
- data/lib/gemwarrior/version.rb +1 -1
- data/lib/gemwarrior/world.rb +71 -26
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f01219fe323d1a74d0205758b61084bbea01e4e
|
4
|
+
data.tar.gz: 1dc551158da4ddcb6737c7daa15c33e151eaf5a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0099d78162db97ca70e0fc6760f103ee720667262a763c5a294d1c1fb505b2ac26827601673304c7eadb72674a1e2b28a0e5f0f0a1b4fdf77ca87aa22e962922
|
7
|
+
data.tar.gz: a9a84abd388aca04244c7afd9d558ac27ba460b4d2ba62505e12f1df3936791108e15d7f67aef06aaf9ebd1f6ec3dfa33a4a11bb870b4f4e5a1499e3ad74632c
|
data/README.md
CHANGED
@@ -1,50 +1,55 @@
|
|
1
|
-
```
|
2
|
-
/-+-+-+ +-+-+-+-+-+-+-\
|
3
|
-
|G|E|M| |W|A|R|R|I|O|R|
|
4
|
-
\-+-+-+ +-+-+-+-+-+-+-/
|
5
|
-
```
|
6
|
-
<small>logo courtesy of [ascii generator](http://www.network-science.de/ascii/)</small>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
`>
|
30
|
-
`>
|
31
|
-
`>
|
32
|
-
`>
|
33
|
-
`>
|
34
|
-
`>
|
35
|
-
`>
|
36
|
-
`>
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
* ~~
|
45
|
-
*
|
46
|
-
*
|
47
|
-
*
|
48
|
-
*
|
49
|
-
*
|
50
|
-
*
|
1
|
+
```
|
2
|
+
/-+-+-+ +-+-+-+-+-+-+-\
|
3
|
+
|G|E|M| |W|A|R|R|I|O|R|
|
4
|
+
\-+-+-+ +-+-+-+-+-+-+-/
|
5
|
+
```
|
6
|
+
<small>logo courtesy of [ascii generator](http://www.network-science.de/ascii/)</small>
|
7
|
+
|
8
|
+
[![Gem Version](https://badge.fury.io/rb/gemwarrior.svg)](http://badge.fury.io/rb/gemwarrior)
|
9
|
+
|
10
|
+
**Gem Warrior** is a text adventure that takes place in the land of **Jool**, where randomized fortune is just as likely as *mayhem*.
|
11
|
+
|
12
|
+
You take up the mantle of **1.upto(rand(5..10)) {print rand(65..90).chr}**, a gifted young acolyte who has been tasked by the queen herself, **Ruby**, to venture off into the unknown to recapture a **Shiny Thing<sup>tm</sup>** that holds great power within its crystallized boundaries. Unfortunately, it was stolen recently by a crazed madperson named **Emerald**, bent on using its frightening power for **Evil**. You are **Good**, obviously, and the rightful caretaker of such power, but he will not give it up willingly, and has cursed all the creatures of the land into doing his bidding, which is largely tearing you limb from limb.
|
13
|
+
|
14
|
+
Start in your poor, super lame cottage, where you live alone, subsisting off the sale of polished rocks you scavenge all day for in the neighboring caves. Once tasked with your quest, travel throughout the land of Jool, eventually reaching the sky tower that Emerald resides in with his stolen goods, laughing to himself, occasionally.
|
15
|
+
|
16
|
+
As you travel you will discover sights and sounds of the land, all of which are new to you because you don't really get out much. Visit towns with merchants willing to trade coin for wares they bought off of other adventurers who didn't last the previous attempts at thwartion. Sleep in makeshift huts to regain your health and magic points (or the ground, if that's all that's available), which are conveniently located in your peripheral vision (i.e. the console window). Eventually, if you're skilled (and I actually code it in), you'll reach **Emerald's Sky Tower**, part him from his **ShinyThing<sup>tm</sup>**, and then do what is "right".
|
17
|
+
|
18
|
+
## How to Get to Jool
|
19
|
+
|
20
|
+
1. `gem install gemwarrior`
|
21
|
+
2. `gemwarrior`
|
22
|
+
|
23
|
+
Run the two commands above and you'll be whisked away to Jool, ready to start or continue your quest to defeat Emerald and take back the coveted Shiny Thing(tm) that you will bring back to Queen Ruby (or will you...?).
|
24
|
+
|
25
|
+
## In Progress, Yanno
|
26
|
+
|
27
|
+
This is in super-hyper-turbo-edition pre-pre-pre-alpha right now, but a working console prompt, some commands (type `h` for a list), and a few locations exist already. Each time you start the game a new hero will be created with a randomized name, but you can change that with `> change name`.
|
28
|
+
|
29
|
+
`> c` - character check for visual identity
|
30
|
+
`> i [object]` - check your inventory (or an individual item within)
|
31
|
+
`> r` - take a load off (future: replenish stamina)
|
32
|
+
`> l [object]` - look at current location and its items and monsters
|
33
|
+
`> t [object]` - take an item from a location
|
34
|
+
`> e [object]` - equip an item in your inventory as a weapon
|
35
|
+
`> a [monster]` - attack a monster
|
36
|
+
`> g [direction]` - go in a direction, if possible
|
37
|
+
`> w` - list all the locations available in the world
|
38
|
+
`> m` - list all the monsters available in the world
|
39
|
+
`> ch [attribute]` - change some things about yourself
|
40
|
+
`> q` - quit this nonsense
|
41
|
+
|
42
|
+
To come:
|
43
|
+
|
44
|
+
* ~~Ability to move between locations!~~
|
45
|
+
* More locations to move between!
|
46
|
+
* ~~Monsters!~~
|
47
|
+
* ~~Ability to fight those monsters!~~
|
48
|
+
* Monsters to fight back!
|
49
|
+
* ~~Items you can pick up!~~
|
50
|
+
* Quests!
|
51
|
+
* Towns!
|
52
|
+
* Merchants!
|
53
|
+
* Sound FX!
|
54
|
+
* Music!
|
55
|
+
* Epic Length (whereby "Epic" I mean "maybe 30 minutes"?)!
|
data/lib/gemwarrior/defaults.rb
CHANGED
@@ -4,100 +4,134 @@
|
|
4
4
|
module Gemwarrior
|
5
5
|
module Entities
|
6
6
|
module Monsters
|
7
|
-
MOB_ID_ALEXANDRAT
|
8
|
-
MOB_NAME_ALEXANDRAT
|
9
|
-
MOB_DESC_ALEXANDRAT
|
10
|
-
MOB_LEVEL_ALEXANDRAT
|
7
|
+
MOB_ID_ALEXANDRAT = 0
|
8
|
+
MOB_NAME_ALEXANDRAT = 'alexandrat'
|
9
|
+
MOB_DESC_ALEXANDRAT = 'Tiny, but fierce, color-changing rodent.'
|
10
|
+
MOB_LEVEL_ALEXANDRAT = 1
|
11
|
+
MOB_DEXTERITY_ALEXANDRAT = 4
|
12
|
+
MOB_BATTLECRY_ALEXANDRAT = 'Bitey, bitey!'
|
11
13
|
|
12
|
-
MOB_ID_AMBEROO
|
13
|
-
MOB_NAME_AMBEROO
|
14
|
-
MOB_DESC_AMBEROO
|
15
|
-
MOB_LEVEL_AMBEROO
|
14
|
+
MOB_ID_AMBEROO = 1
|
15
|
+
MOB_NAME_AMBEROO = 'amberoo'
|
16
|
+
MOB_DESC_AMBEROO = 'Fossilized and jumping around like an adorably dangerous threat from the past.'
|
17
|
+
MOB_LEVEL_AMBEROO = 1
|
18
|
+
MOB_DEXTERITY_AMBEROO = 5
|
19
|
+
MOB_BATTLECRY_AMBEROO = 'I\'m hoppin\' mad!'
|
16
20
|
|
17
|
-
MOB_ID_AMETHYSTLE
|
18
|
-
MOB_NAME_AMETHYSTLE
|
19
|
-
MOB_DESC_AMETHYSTLE
|
20
|
-
MOB_LEVEL_AMETHYSTLE
|
21
|
+
MOB_ID_AMETHYSTLE = 2
|
22
|
+
MOB_NAME_AMETHYSTLE = 'amethystle'
|
23
|
+
MOB_DESC_AMETHYSTLE = 'Sober and contemplative, it moves with purplish tentacles swaying in the breeze.'
|
24
|
+
MOB_LEVEL_AMETHYSTLE = 2
|
25
|
+
MOB_DEXTERITY_AMETHYSTLE = 1
|
26
|
+
MOB_BATTLECRY_AMETHYSTLE = 'You\'ve found yourself in quite the thorny issue!'
|
21
27
|
|
22
|
-
MOB_ID_AQUAMARINE
|
23
|
-
MOB_NAME_AQUAMARINE
|
24
|
-
MOB_DESC_AQUAMARINE
|
25
|
-
MOB_LEVEL_AQUAMARINE
|
28
|
+
MOB_ID_AQUAMARINE = 3
|
29
|
+
MOB_NAME_AQUAMARINE = 'aquamarine'
|
30
|
+
MOB_DESC_AQUAMARINE = 'It is but one of the few, the proud, the underwater.'
|
31
|
+
MOB_LEVEL_AQUAMARINE = 3
|
32
|
+
MOB_DEXTERITY_AQUAMARINE = 6
|
33
|
+
MOB_BATTLECRY_AQUAMARINE = 'Attention! You are about to get smashed!'
|
26
34
|
|
27
|
-
MOB_ID_APATIGER
|
28
|
-
MOB_NAME_APATIGER
|
29
|
-
MOB_DESC_APATIGER
|
30
|
-
MOB_LEVEL_APATIGER
|
35
|
+
MOB_ID_APATIGER = 4
|
36
|
+
MOB_NAME_APATIGER = 'apatiger'
|
37
|
+
MOB_DESC_APATIGER = 'Apathetic about most everything as it lazes around, save for eating you.'
|
38
|
+
MOB_LEVEL_APATIGER = 4
|
39
|
+
MOB_DEXTERITY_APATIGER = 5
|
40
|
+
MOB_BATTLECRY_APATIGER = 'Gggggggggrrrrrrrrrrrrrrrrooooooooooowwwwwwwwwwwwlllllllll!'
|
31
41
|
|
32
|
-
MOB_ID_BLOODSTORM
|
33
|
-
MOB_NAME_BLOODSTORM
|
34
|
-
MOB_DESC_BLOODSTORM
|
35
|
-
MOB_LEVEL_BLOODSTORM
|
42
|
+
MOB_ID_BLOODSTORM = 5
|
43
|
+
MOB_NAME_BLOODSTORM = 'bloodstorm'
|
44
|
+
MOB_DESC_BLOODSTORM = 'A literal swirling, maniacal vortex of human hemoglobin.'
|
45
|
+
MOB_LEVEL_BLOODSTORM = 5
|
46
|
+
MOB_DEXTERITY_BLOODSTORM = 7
|
47
|
+
MOB_BATTLECRY_BLOODSTORM = '/swirls'
|
36
48
|
|
37
|
-
MOB_ID_CITRINAGA
|
38
|
-
MOB_NAME_CITRINAGA
|
39
|
-
MOB_DESC_CITRINAGA
|
40
|
-
MOB_LEVEL_CITRINAGA
|
49
|
+
MOB_ID_CITRINAGA = 6
|
50
|
+
MOB_NAME_CITRINAGA = 'citrinaga'
|
51
|
+
MOB_DESC_CITRINAGA = 'Refreshing in its shiny, gleaming effectiveness at ending your life.'
|
52
|
+
MOB_LEVEL_CITRINAGA = 4
|
53
|
+
MOB_DEXTERITY_CITRINAGA = 3
|
54
|
+
MOB_BATTLECRY_CITRINAGA = 'Slice and dice so nice!'
|
41
55
|
|
42
|
-
MOB_ID_CORALIZ
|
43
|
-
MOB_NAME_CORALIZ
|
44
|
-
MOB_DESC_CORALIZ
|
45
|
-
MOB_LEVEL_CORALIZ
|
56
|
+
MOB_ID_CORALIZ = 7
|
57
|
+
MOB_NAME_CORALIZ = 'coraliz'
|
58
|
+
MOB_DESC_CORALIZ = 'Small blue lizard that slithers around, nipping at your ankles.'
|
59
|
+
MOB_LEVEL_CORALIZ = 3
|
60
|
+
MOB_DEXTERITY_CORALIZ = 6
|
61
|
+
MOB_BATTLECRY_CORALIZ = 'Where am I? You\'ll never guess!'
|
46
62
|
|
47
|
-
MOB_ID_CUBICAT
|
48
|
-
MOB_NAME_CUBICAT
|
49
|
-
MOB_DESC_CUBICAT
|
50
|
-
MOB_LEVEL_CUBICAT
|
63
|
+
MOB_ID_CUBICAT = 8
|
64
|
+
MOB_NAME_CUBICAT = 'cubicat'
|
65
|
+
MOB_DESC_CUBICAT = 'Perfectly geometrically cubed feline, fresh from its woven enclosure, claws at the ready.'
|
66
|
+
MOB_LEVEL_CUBICAT = 4
|
67
|
+
MOB_DEXTERITY_CUBICAT = 6
|
68
|
+
MOB_BATTLECRY_CUBICAT = 'I don\'t really care, as long as you die!'
|
51
69
|
|
52
|
-
MOB_ID_DIAMAN
|
53
|
-
MOB_NAME_DIAMAN
|
54
|
-
MOB_DESC_DIAMAN
|
55
|
-
MOB_LEVEL_DIAMAN
|
70
|
+
MOB_ID_DIAMAN = 9
|
71
|
+
MOB_NAME_DIAMAN = 'diaman'
|
72
|
+
MOB_DESC_DIAMAN = 'Crystalline structure in the form of a man, lumbering toward you, with outstretched, edged pincers.'
|
73
|
+
MOB_LEVEL_DIAMAN = 6
|
74
|
+
MOB_DEXTERITY_DIAMAN = 10
|
75
|
+
MOB_BATTLECRY_DIAMAN = 'Precious human, prepare to be lost to the annals of time!'
|
56
76
|
end
|
57
77
|
|
58
78
|
module Items
|
59
|
-
ITEM_ID_STONE
|
60
|
-
ITEM_NAME_STONE
|
61
|
-
ITEM_DESC_STONE
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
79
|
+
ITEM_ID_STONE = 0
|
80
|
+
ITEM_NAME_STONE = 'stone'
|
81
|
+
ITEM_DESC_STONE = 'A small, sharp mega pebble, suitable for tossing in amusement, and perhaps combat.'
|
82
|
+
ITEM_ATK_LO_STONE = 1
|
83
|
+
ITEM_ATK_HI_STONE = 3
|
84
|
+
|
85
|
+
ITEM_ID_BED = 1
|
86
|
+
ITEM_NAME_BED = 'bed'
|
87
|
+
ITEM_DESC_BED = 'The place where you sleep when you\'re not adventuring.'
|
88
|
+
ITEM_ATK_LO_BED = nil
|
89
|
+
ITEM_ATK_HI_BED = nil
|
90
|
+
|
91
|
+
ITEM_ID_STALACTITE = 2
|
92
|
+
ITEM_NAME_STALACTITE = 'stalactite'
|
93
|
+
ITEM_DESC_STALACTITE = 'Long protrusion of cave adornment, broken off and fallen to the ground, where the stalagmites sneer at it from.'
|
94
|
+
ITEM_ATK_LO_STALACTITE = 1
|
95
|
+
ITEM_ATK_HI_STALACTITE = 3
|
96
|
+
|
97
|
+
ITEM_ID_FEATHER = 3
|
98
|
+
ITEM_NAME_FEATHER = 'feather'
|
99
|
+
ITEM_DESC_FEATHER = 'Soft and tender, unlike the craven bird that probably shed it.'
|
100
|
+
ITEM_ATK_LO_FEATHER = nil
|
101
|
+
ITEM_ATK_HI_FEATHER = nil
|
102
|
+
|
103
|
+
ITEM_ID_GUN = 4
|
104
|
+
ITEM_NAME_GUN = 'gun'
|
105
|
+
ITEM_DESC_GUN = 'Pew pew goes this firearm, you suspect.'
|
106
|
+
ITEM_ATK_LO_GUN = 3
|
107
|
+
ITEM_ATK_HI_GUN = 5
|
74
108
|
end
|
75
109
|
|
76
110
|
module Locations
|
77
|
-
LOC_ID_HOME
|
78
|
-
LOC_NAME_HOME
|
79
|
-
LOC_DESC_HOME
|
80
|
-
LOC_CONNECTIONS_HOME
|
111
|
+
LOC_ID_HOME = 0
|
112
|
+
LOC_NAME_HOME = 'Home'
|
113
|
+
LOC_DESC_HOME = 'The little, unimportant, decrepit hut that you live in.'
|
114
|
+
LOC_CONNECTIONS_HOME = {:north => 4, :east => 1, :south => nil, :west => 3}
|
81
115
|
|
82
|
-
LOC_ID_CAVE_ENTRANCE
|
83
|
-
LOC_NAME_CAVE_ENTRANCE
|
84
|
-
LOC_DESC_CAVE_ENTRANCE
|
116
|
+
LOC_ID_CAVE_ENTRANCE = 1
|
117
|
+
LOC_NAME_CAVE_ENTRANCE = 'Cave (Entrance)'
|
118
|
+
LOC_DESC_CAVE_ENTRANCE = 'A nearby, dank cavern\'s entrance, surely filled with stacktites, stonemites, and rocksites.'
|
85
119
|
LOC_CONNECTIONS_CAVE_ENTRANCE = {:north => nil, :east => 2, :south => nil, :west => 0}
|
86
120
|
|
87
|
-
LOC_ID_CAVE_ROOM1
|
88
|
-
LOC_NAME_CAVE_ROOM1
|
89
|
-
LOC_DESC_CAVE_ROOM1
|
90
|
-
LOC_CONNECTIONS_CAVE_ROOM1
|
121
|
+
LOC_ID_CAVE_ROOM1 = 2
|
122
|
+
LOC_NAME_CAVE_ROOM1 = 'Cave (Room1)'
|
123
|
+
LOC_DESC_CAVE_ROOM1 = 'Now inside the first cavernous room, you confirm that there are stacktites, stonemites, rocksites, and even one or two pebblejites.'
|
124
|
+
LOC_CONNECTIONS_CAVE_ROOM1 = {:north => nil, :east => nil, :south => nil, :west => 1}
|
91
125
|
|
92
|
-
LOC_ID_FOREST
|
93
|
-
LOC_NAME_FOREST
|
94
|
-
LOC_DESC_FOREST
|
95
|
-
LOC_CONNECTIONS_FOREST
|
126
|
+
LOC_ID_FOREST = 3
|
127
|
+
LOC_NAME_FOREST = 'Forest'
|
128
|
+
LOC_DESC_FOREST = 'Trees exist here, in droves.'
|
129
|
+
LOC_CONNECTIONS_FOREST = {:north => nil, :east => 0, :south => nil, :west => nil}
|
96
130
|
|
97
|
-
LOC_ID_SKYTOWER
|
98
|
-
LOC_NAME_SKYTOWER
|
99
|
-
LOC_DESC_SKYTOWER
|
100
|
-
LOC_CONNECTIONS_SKYTOWER
|
131
|
+
LOC_ID_SKYTOWER = 4
|
132
|
+
LOC_NAME_SKYTOWER = 'Emerald\'s Sky Tower'
|
133
|
+
LOC_DESC_SKYTOWER = 'The craziest guy that ever existed is around here somewhere amongst the cloud floors, snow walls, and ethereal vibe.'
|
134
|
+
LOC_CONNECTIONS_SKYTOWER = {:north => nil, :east => nil, :south => 0, :west => nil}
|
101
135
|
end
|
102
136
|
end
|
103
137
|
end
|
data/lib/gemwarrior/evaluator.rb
CHANGED
@@ -14,20 +14,23 @@ module Gemwarrior
|
|
14
14
|
CHANGE_PARAMS = 'Options: name'
|
15
15
|
|
16
16
|
## ERRORS
|
17
|
-
ERROR_COMMAND_INVALID
|
18
|
-
ERROR_LIST_PARAM_MISSING
|
19
|
-
ERROR_CHANGE_PARAM_MISSING
|
20
|
-
ERROR_CHANGE_PARAM_INVALID
|
21
|
-
ERROR_GO_PARAM_MISSING
|
22
|
-
|
23
|
-
|
17
|
+
ERROR_COMMAND_INVALID = 'That\'s not something the game yet understands.'
|
18
|
+
ERROR_LIST_PARAM_MISSING = 'You can\'t just "list". You gotta choose something to list.'
|
19
|
+
ERROR_CHANGE_PARAM_MISSING = 'Ch-ch-changes...aren\'t happening because you didn\'t specify what to change.'
|
20
|
+
ERROR_CHANGE_PARAM_INVALID = 'You can\'t change that...yet.'
|
21
|
+
ERROR_GO_PARAM_MISSING = 'Just wander aimlessly? A direction would be nice.'
|
22
|
+
ERROR_ATTACK_PARAM_MISSING = 'You can\'t just "attack". You gotta choose something to attack.'
|
23
|
+
ERROR_TAKE_PARAM_MISSING = 'You can\'t just "take". You gotta choose something to take.'
|
24
|
+
ERROR_DROP_PARAM_MISSING = 'You can\'t just "drop". You gotta choose something to drop.'
|
25
|
+
ERROR_EQUIP_PARAM_MISSING = 'You can\'t just "equip". You gotta choose something to equip.'
|
26
|
+
ERROR_UNEQUIP_PARAM_MISSING = 'You can\'t just "unequip". You gotta choose something to unequip.'
|
24
27
|
|
25
28
|
attr_accessor :world, :commands, :aliases, :descriptions
|
26
29
|
|
27
30
|
def initialize(world)
|
28
31
|
self.world = world
|
29
|
-
self.commands = %w(character inventory list rest look take drop go change help quit exit quit! exit!)
|
30
|
-
self.aliases = %w(c i ls r l t d g ch h q x qq xx)
|
32
|
+
self.commands = %w(character inventory list rest look take drop equip unequip go attack change help quit exit quit! exit!)
|
33
|
+
self.aliases = %w(c i ls r l t d e ue g a ch h q x qq xx)
|
31
34
|
self.descriptions = [
|
32
35
|
'Display character information',
|
33
36
|
'Look in your inventory',
|
@@ -36,7 +39,10 @@ module Gemwarrior
|
|
36
39
|
'Look around your current location',
|
37
40
|
'Take item',
|
38
41
|
'Drop item',
|
42
|
+
'Equip item',
|
43
|
+
'Unequip item',
|
39
44
|
'Go in a direction',
|
45
|
+
'Attack a monster',
|
40
46
|
'Change something',
|
41
47
|
'This help menu',
|
42
48
|
'Quit w/ confirmation',
|
@@ -95,12 +101,30 @@ module Gemwarrior
|
|
95
101
|
else
|
96
102
|
world.player.inventory.remove_item(param)
|
97
103
|
end
|
104
|
+
when 'equip', 'e'
|
105
|
+
if param.nil?
|
106
|
+
ERROR_EQUIP_PARAM_MISSING
|
107
|
+
else
|
108
|
+
world.player.inventory.equip_item(param)
|
109
|
+
end
|
110
|
+
when 'unequip', 'ue'
|
111
|
+
if param.nil?
|
112
|
+
ERROR_UNEQUIP_PARAM_MISSING
|
113
|
+
else
|
114
|
+
world.player.inventory.unequip_item(param)
|
115
|
+
end
|
98
116
|
when 'go', 'g'
|
99
117
|
if param.nil?
|
100
118
|
ERROR_GO_PARAM_MISSING
|
101
119
|
else
|
102
120
|
world.player.go(world.locations, param)
|
103
121
|
end
|
122
|
+
when 'attack', 'a'
|
123
|
+
if param.nil?
|
124
|
+
ERROR_ATTACK_PARAM_MISSING
|
125
|
+
else
|
126
|
+
world.player.attack(param)
|
127
|
+
end
|
104
128
|
when 'change', 'ch'
|
105
129
|
if param.nil?
|
106
130
|
puts ERROR_CHANGE_PARAM_MISSING
|
data/lib/gemwarrior/game.rb
CHANGED
@@ -11,15 +11,19 @@ module Gemwarrior
|
|
11
11
|
class Game
|
12
12
|
# CONSTANTS
|
13
13
|
## PLAYER DEFAULTS
|
14
|
-
PLYR_LEVEL_DEFAULT
|
15
|
-
PLYR_XP_DEFAULT
|
16
|
-
PLYR_HP_CUR_DEFAULT
|
17
|
-
PLYR_HP_MAX_DEFAULT
|
18
|
-
PLYR_STAM_CUR_DEFAULT
|
19
|
-
PLYR_STAM_MAX_DEFAULT
|
20
|
-
PLYR_ATK_LO_DEFAULT
|
21
|
-
PLYR_ATK_HI_DEFAULT
|
22
|
-
|
14
|
+
PLYR_LEVEL_DEFAULT = 1
|
15
|
+
PLYR_XP_DEFAULT = 0
|
16
|
+
PLYR_HP_CUR_DEFAULT = 10
|
17
|
+
PLYR_HP_MAX_DEFAULT = 10
|
18
|
+
PLYR_STAM_CUR_DEFAULT = 20
|
19
|
+
PLYR_STAM_MAX_DEFAULT = 20
|
20
|
+
PLYR_ATK_LO_DEFAULT = 1
|
21
|
+
PLYR_ATK_HI_DEFAULT = 2
|
22
|
+
PLYR_DEFENSE_DEFAULT = 5
|
23
|
+
PLYR_DEXTERITY_DEFAULT = 5
|
24
|
+
PLYR_INVENTORY_DEFAULT = Inventory.new
|
25
|
+
PLYR_ROX_DEFAULT = 0
|
26
|
+
PLYR_CUR_LOC_ID_DEFAULT = 0
|
23
27
|
|
24
28
|
attr_accessor :world, :eval, :repl
|
25
29
|
|
@@ -35,9 +39,11 @@ module Gemwarrior
|
|
35
39
|
PLYR_STAM_MAX_DEFAULT,
|
36
40
|
PLYR_ATK_LO_DEFAULT,
|
37
41
|
PLYR_ATK_HI_DEFAULT,
|
38
|
-
|
42
|
+
PLYR_DEFENSE_DEFAULT,
|
43
|
+
PLYR_DEXTERITY_DEFAULT,
|
44
|
+
PLYR_INVENTORY_DEFAULT,
|
39
45
|
PLYR_ROX_DEFAULT,
|
40
|
-
world.loc_by_id(
|
46
|
+
world.loc_by_id(PLYR_CUR_LOC_ID_DEFAULT)
|
41
47
|
)
|
42
48
|
|
43
49
|
# create the console
|
data/lib/gemwarrior/inventory.rb
CHANGED
@@ -5,16 +5,21 @@ module Gemwarrior
|
|
5
5
|
class Inventory
|
6
6
|
# CONSTANTS
|
7
7
|
## ERRORS
|
8
|
-
ERROR_INVENTORY_EMPTY
|
9
|
-
ERROR_ITEM_REMOVE_INVALID
|
10
|
-
ERROR_ITEM_ADD_UNTAKEABLE
|
11
|
-
ERROR_ITEM_ADD_INVALID
|
12
|
-
ERROR_ITEM_DESCRIBE_INVALID
|
8
|
+
ERROR_INVENTORY_EMPTY = '...and find you currently have diddly-squat, which is nothing.'
|
9
|
+
ERROR_ITEM_REMOVE_INVALID = 'Your inventory does not contain that item, so you can\'t drop it.'
|
10
|
+
ERROR_ITEM_ADD_UNTAKEABLE = 'That would be great if you could take that thing, wouldn\'t it? Well, it\'s not so great for you right now.'
|
11
|
+
ERROR_ITEM_ADD_INVALID = 'That item doesn\'t exist here.'
|
12
|
+
ERROR_ITEM_DESCRIBE_INVALID = 'You don\'t possess that.'
|
13
|
+
ERROR_ITEM_EQUIP_INVALID = 'You don\'t have anything called that to equip.'
|
14
|
+
ERROR_ITEM_EQUIP_NONWEAPON = 'That can\'t be equipped as a weapon.'
|
15
|
+
ERROR_ITEM_UNEQUIP_INVALID = 'You don\'t have anything called that to unequip.'
|
16
|
+
ERROR_ITEM_UNEQUIP_NONWEAPON = 'That can\'t be unequipped.'
|
13
17
|
|
14
|
-
attr_accessor :inventory
|
18
|
+
attr_accessor :inventory, :weapon
|
15
19
|
|
16
|
-
def initialize(inventory = [])
|
20
|
+
def initialize(inventory = [], weapon = nil)
|
17
21
|
self.inventory = inventory
|
22
|
+
self.weapon = weapon
|
18
23
|
end
|
19
24
|
|
20
25
|
def list_contents
|
@@ -22,7 +27,7 @@ module Gemwarrior
|
|
22
27
|
if inventory.empty?
|
23
28
|
return contents_text << ERROR_INVENTORY_EMPTY
|
24
29
|
else
|
25
|
-
return contents_text << ": #{inventory.map(&:name).join ', '}"
|
30
|
+
return contents_text << ": #{inventory.map(&:name).join ', '}\n"
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
@@ -37,7 +42,43 @@ module Gemwarrior
|
|
37
42
|
ERROR_ITEM_DESCRIBE_INVALID
|
38
43
|
end
|
39
44
|
end
|
40
|
-
|
45
|
+
|
46
|
+
def equip_item(item_name)
|
47
|
+
if inventory.map(&:name).include?(item_name)
|
48
|
+
inventory.each do |i|
|
49
|
+
if i.name.eql?(item_name)
|
50
|
+
if i.equippable
|
51
|
+
i.equipped = true
|
52
|
+
self.weapon = i
|
53
|
+
return "#{i.name} has been equipped"
|
54
|
+
else
|
55
|
+
ERROR_ITEM_EQUIP_NONWEAPON
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
else
|
60
|
+
ERROR_ITEM_EQUIP_INVALID
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def unequip_item(item_name)
|
65
|
+
if inventory.map(&:name).include?(item_name)
|
66
|
+
inventory.each do |i|
|
67
|
+
if i.name.eql?(item_name)
|
68
|
+
if i.equippable
|
69
|
+
i.equipped = false
|
70
|
+
self.weapon = nil
|
71
|
+
return "#{i.name} has been unequipped"
|
72
|
+
else
|
73
|
+
ERROR_ITEM_UNEQUIP_NONWEAPON
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
else
|
78
|
+
ERROR_ITEM_UNEQUIP_INVALID
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
41
82
|
def add_item(cur_loc, item_name)
|
42
83
|
cur_loc.items.each do |i|
|
43
84
|
if i.name.eql?(item_name)
|
data/lib/gemwarrior/item.rb
CHANGED
@@ -3,22 +3,28 @@
|
|
3
3
|
|
4
4
|
module Gemwarrior
|
5
5
|
class Item
|
6
|
-
attr_accessor :id, :name, :description,
|
6
|
+
attr_accessor :id, :name, :description,
|
7
|
+
:atk_lo, :atk_hi, :takeable, :equippable, :equipped
|
7
8
|
|
8
9
|
def initialize(
|
9
10
|
id,
|
10
11
|
name,
|
11
12
|
description,
|
12
|
-
|
13
|
+
atk_lo,
|
14
|
+
atk_hi,
|
15
|
+
takeable,
|
16
|
+
equippable,
|
17
|
+
equipped = false
|
13
18
|
)
|
14
19
|
self.id = id
|
15
20
|
self.name = name
|
16
21
|
self.description = description
|
22
|
+
self.atk_lo = atk_lo
|
23
|
+
self.atk_hi = atk_hi
|
17
24
|
self.takeable = takeable
|
25
|
+
self.equippable = equippable
|
26
|
+
self.equipped = equipped
|
18
27
|
end
|
19
|
-
|
20
|
-
def is_takeable?
|
21
|
-
takeable
|
22
|
-
end
|
28
|
+
|
23
29
|
end
|
24
30
|
end
|
data/lib/gemwarrior/location.rb
CHANGED
@@ -74,10 +74,28 @@ module Gemwarrior
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
def remove_monster(name)
|
78
|
+
if has_monster_to_attack?(name)
|
79
|
+
monsters_abounding.reject! { |monster| monster.name == name }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
77
83
|
def has_loc_to_the?(direction)
|
78
84
|
locs_connected[direction.to_sym]
|
79
85
|
end
|
80
86
|
|
87
|
+
def has_monster_to_attack?(name)
|
88
|
+
monsters_abounding.map(&:name).include?(name.downcase)
|
89
|
+
end
|
90
|
+
|
91
|
+
def monster_by_name(name)
|
92
|
+
monsters_abounding.each do |m|
|
93
|
+
if m.name.eql?(name)
|
94
|
+
return m
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
81
99
|
private
|
82
100
|
|
83
101
|
def checked_for_monsters?
|
@@ -117,7 +135,7 @@ module Gemwarrior
|
|
117
135
|
end
|
118
136
|
|
119
137
|
def populate_monsters
|
120
|
-
checked_for_monsters = true
|
138
|
+
self.checked_for_monsters = true
|
121
139
|
if has_monster?
|
122
140
|
self.monsters_abounding = []
|
123
141
|
return monsters_abounding.push(monsters_available[rand(0..monsters_available.length-1)])
|
data/lib/gemwarrior/monster.rb
CHANGED
@@ -5,7 +5,7 @@ require_relative 'creature'
|
|
5
5
|
|
6
6
|
module Gemwarrior
|
7
7
|
class Monster < Creature
|
8
|
-
attr_accessor :xp, :atk_hi, :atk_lo, :rox
|
8
|
+
attr_accessor :xp, :atk_hi, :atk_lo, :dexterity, :rox, :xp_to_give, :battlecry
|
9
9
|
|
10
10
|
def initialize(
|
11
11
|
id,
|
@@ -19,8 +19,11 @@ module Gemwarrior
|
|
19
19
|
hp_max,
|
20
20
|
atk_lo,
|
21
21
|
atk_hi,
|
22
|
+
dexterity,
|
22
23
|
inventory,
|
23
|
-
rox
|
24
|
+
rox,
|
25
|
+
xp_to_give,
|
26
|
+
battlecry
|
24
27
|
)
|
25
28
|
self.id = id
|
26
29
|
self.name = name
|
@@ -35,9 +38,17 @@ module Gemwarrior
|
|
35
38
|
|
36
39
|
self.atk_lo = atk_lo
|
37
40
|
self.atk_hi = atk_hi
|
41
|
+
self.dexterity = dexterity
|
38
42
|
|
39
43
|
self.inventory = inventory
|
40
44
|
self.rox = rox
|
45
|
+
self.xp_to_give = xp_to_give
|
46
|
+
|
47
|
+
self.battlecry = battlecry
|
48
|
+
end
|
49
|
+
|
50
|
+
def take_damage(dmg)
|
51
|
+
self.hp_cur = hp_cur.to_i - dmg.to_i
|
41
52
|
end
|
42
53
|
|
43
54
|
end
|
data/lib/gemwarrior/player.rb
CHANGED
@@ -19,9 +19,12 @@ module Gemwarrior
|
|
19
19
|
PLYR_DESC_DEFAULT = 'Picked to do battle against a wizened madman for a shiny something or other for world-saving purposes, you\'re actually fairly able, as long as you\'ve had breakfast first.'
|
20
20
|
|
21
21
|
## ERRORS
|
22
|
-
ERROR_GO_PARAM_INVALID
|
22
|
+
ERROR_GO_PARAM_INVALID = 'The place in that direction is far, far, FAR too dangerous. You should try a different way.'
|
23
|
+
ERROR_ATTACK_PARAM_INVALID = 'That monster doesn\'t exist here or can\'t be attacked.'
|
24
|
+
ERROR_ATTACK_OPTION_INVALID = 'That won\'t do anything against the monster.'
|
23
25
|
|
24
|
-
attr_accessor :xp, :stam_cur, :stam_max, :atk_hi, :atk_lo,
|
26
|
+
attr_accessor :xp, :stam_cur, :stam_max, :atk_hi, :atk_lo,
|
27
|
+
:defense, :dexterity, :rox, :cur_loc
|
25
28
|
|
26
29
|
def initialize(
|
27
30
|
level,
|
@@ -32,6 +35,8 @@ module Gemwarrior
|
|
32
35
|
stam_max,
|
33
36
|
atk_lo,
|
34
37
|
atk_hi,
|
38
|
+
defense,
|
39
|
+
dexterity,
|
35
40
|
inventory,
|
36
41
|
rox,
|
37
42
|
cur_loc
|
@@ -48,7 +53,9 @@ module Gemwarrior
|
|
48
53
|
|
49
54
|
self.atk_lo = atk_lo
|
50
55
|
self.atk_hi = atk_hi
|
51
|
-
|
56
|
+
self.defense = defense
|
57
|
+
self.dexterity = dexterity
|
58
|
+
|
52
59
|
self.inventory = inventory
|
53
60
|
self.rox = rox
|
54
61
|
|
@@ -57,7 +64,25 @@ module Gemwarrior
|
|
57
64
|
|
58
65
|
def check_self
|
59
66
|
print_char_pic
|
60
|
-
|
67
|
+
|
68
|
+
cur_weapon_name = ''
|
69
|
+
if inventory.weapon.nil?
|
70
|
+
cur_weapon_name = '(unarmed)'
|
71
|
+
else
|
72
|
+
cur_weapon_name = inventory.weapon.name
|
73
|
+
self.atk_lo = inventory.weapon.atk_lo
|
74
|
+
self.atk_hi = inventory.weapon.atk_hi
|
75
|
+
end
|
76
|
+
|
77
|
+
self_text = "You check yourself. Currently breathing, wearing clothing, and with a few other specific characteristics: face is #{face}, hands are #{hands}, and general mood is #{mood}.\n\n"
|
78
|
+
self_text << "NAME: #{name}\n"
|
79
|
+
self_text << "WPN : #{cur_weapon_name}\n"
|
80
|
+
self_text << "LVL : #{level}\n"
|
81
|
+
self_text << "XP : #{xp}\n"
|
82
|
+
self_text << "ATK : #{atk_lo}-#{atk_hi}\n"
|
83
|
+
self_text << "DEF : #{defense}\n"
|
84
|
+
self_text << "DEX : #{dexterity}\n"
|
85
|
+
|
61
86
|
end
|
62
87
|
|
63
88
|
def rest
|
@@ -132,7 +157,102 @@ module Gemwarrior
|
|
132
157
|
end
|
133
158
|
end
|
134
159
|
|
160
|
+
def attack(monster_name)
|
161
|
+
if cur_loc.has_monster_to_attack?(monster_name)
|
162
|
+
puts "You decide to attack the #{monster_name}"
|
163
|
+
monster = cur_loc.monster_by_name(monster_name)
|
164
|
+
puts "#{monster.name} cries out: #{monster.battlecry}"
|
165
|
+
|
166
|
+
loop do
|
167
|
+
if (monster.hp_cur <= 0)
|
168
|
+
puts "You have defeated #{monster.name}!"
|
169
|
+
puts "You have received #{monster.xp_to_give} XP!"
|
170
|
+
puts "You have gained #{monster.rox} barterable rox!"
|
171
|
+
update_player_stats(monster)
|
172
|
+
cur_loc.remove_monster(monster.name)
|
173
|
+
return
|
174
|
+
elsif (hp_cur <= 0)
|
175
|
+
puts "You are dead, slain by the #{monster.name}!"
|
176
|
+
return
|
177
|
+
end
|
178
|
+
|
179
|
+
puts "\nYour options are 'fight', 'look', and 'run'."
|
180
|
+
puts "P :: #{hp_cur} HP\n"
|
181
|
+
puts "E :: #{monster.hp_cur} HP\n"
|
182
|
+
|
183
|
+
if ((monster.hp_cur.to_f / monster.hp_max.to_f) < 0.10)
|
184
|
+
puts "#{monster.name} is almost dead!\n"
|
185
|
+
end
|
186
|
+
|
187
|
+
puts 'What do you do?'
|
188
|
+
cmd = gets.chomp
|
189
|
+
|
190
|
+
case cmd
|
191
|
+
when 'fight', 'f'
|
192
|
+
puts "You attack #{monster.name}#{inventory.weapon}!"
|
193
|
+
dmg = calculate_mob_damage
|
194
|
+
if dmg > 0
|
195
|
+
puts "You wound it for #{dmg} point(s)!"
|
196
|
+
monster.take_damage(dmg)
|
197
|
+
else
|
198
|
+
puts "You miss entirely!"
|
199
|
+
end
|
200
|
+
when 'look', 'l'
|
201
|
+
puts "#{monster.name}: #{monster.description}"
|
202
|
+
puts "Its got some distinguishing features, too: face is #{monster.face}, hands are #{monster.hands}, and its general mood is #{monster.mood}."
|
203
|
+
when 'run', 'r'
|
204
|
+
escape = calculate_escape(monster)
|
205
|
+
if escape
|
206
|
+
monster.hp_cur = monster.hp_max
|
207
|
+
puts "You successfully elude #{monster.name}!"
|
208
|
+
return
|
209
|
+
else
|
210
|
+
puts "You were not able to run away! :-("
|
211
|
+
end
|
212
|
+
else
|
213
|
+
puts ERROR_ATTACK_OPTION_INVALID
|
214
|
+
end
|
215
|
+
end
|
216
|
+
else
|
217
|
+
ERROR_ATTACK_PARAM_INVALID
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def cur_weapon_name
|
222
|
+
unless inventory.weapon.nil?
|
223
|
+
return " with your #{inventory.weapon.name}"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def calculate_mob_damage
|
228
|
+
miss = rand(0..100)
|
229
|
+
if (miss < 15)
|
230
|
+
0
|
231
|
+
else
|
232
|
+
rand(atk_lo..atk_hi)
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def calculate_escape(monster)
|
237
|
+
if (dexterity > monster.dexterity)
|
238
|
+
return true
|
239
|
+
else
|
240
|
+
dex_diff = monster.dexterity - dexterity
|
241
|
+
rand_dex = rand(0..dex_diff)
|
242
|
+
if rand_dex % 2 > 0
|
243
|
+
return true
|
244
|
+
else
|
245
|
+
return false
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
135
250
|
private
|
251
|
+
|
252
|
+
def update_player_stats(monster)
|
253
|
+
self.xp = xp + monster.xp_to_give
|
254
|
+
self.rox = rox + monster.rox
|
255
|
+
end
|
136
256
|
|
137
257
|
def print_traveling_text
|
138
258
|
loc = Thread.new do
|
data/lib/gemwarrior/repl.rb
CHANGED
@@ -76,10 +76,11 @@ module Gemwarrior
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def prompt
|
79
|
-
prompt_template = "\n[LV:%3s][XP:%3s][HP:%3s|%-3s][STM:%2s|%-2s] -- [%s @ %s]"
|
79
|
+
prompt_template = "\n[LV:%3s][XP:%3s][ROX:%3s] -- [HP:%3s|%-3s][STM:%2s|%-2s] -- [%s @ %s]"
|
80
80
|
prompt_vars_arr = [
|
81
81
|
world.player.level,
|
82
82
|
world.player.xp,
|
83
|
+
world.player.rox,
|
83
84
|
world.player.hp_cur,
|
84
85
|
world.player.hp_max,
|
85
86
|
world.player.stam_cur,
|
data/lib/gemwarrior/version.rb
CHANGED
data/lib/gemwarrior/world.rb
CHANGED
@@ -82,8 +82,11 @@ module Gemwarrior
|
|
82
82
|
MOB_LEVEL_ALEXANDRAT * 5,
|
83
83
|
MOB_LEVEL_ALEXANDRAT * 2,
|
84
84
|
MOB_LEVEL_ALEXANDRAT * 2,
|
85
|
+
MOB_DEXTERITY_ALEXANDRAT,
|
85
86
|
Inventory.new,
|
86
|
-
rand(0..10)
|
87
|
+
rand(0..10),
|
88
|
+
MOB_LEVEL_ALEXANDRAT * rand(1..2),
|
89
|
+
MOB_BATTLECRY_ALEXANDRAT
|
87
90
|
)
|
88
91
|
)
|
89
92
|
monsters.push(Monster.new(
|
@@ -98,8 +101,11 @@ module Gemwarrior
|
|
98
101
|
MOB_LEVEL_AMBEROO * 5,
|
99
102
|
MOB_LEVEL_AMBEROO * 2,
|
100
103
|
MOB_LEVEL_AMBEROO * 2,
|
104
|
+
MOB_DEXTERITY_AMBEROO,
|
101
105
|
Inventory.new,
|
102
|
-
rand(0..10)
|
106
|
+
rand(0..10),
|
107
|
+
MOB_LEVEL_AMBEROO * rand(1..2),
|
108
|
+
MOB_BATTLECRY_AMBEROO
|
103
109
|
)
|
104
110
|
)
|
105
111
|
monsters.push(Monster.new(
|
@@ -114,24 +120,11 @@ module Gemwarrior
|
|
114
120
|
MOB_LEVEL_AMETHYSTLE * 5,
|
115
121
|
MOB_LEVEL_AMETHYSTLE * 2,
|
116
122
|
MOB_LEVEL_AMETHYSTLE * 2,
|
123
|
+
MOB_DEXTERITY_AMETHYSTLE,
|
117
124
|
Inventory.new,
|
118
|
-
rand(0..10)
|
119
|
-
|
120
|
-
|
121
|
-
monsters.push(Monster.new(
|
122
|
-
MOB_ID_AQUAMARINE,
|
123
|
-
MOB_NAME_AQUAMARINE,
|
124
|
-
MOB_DESC_AQUAMARINE,
|
125
|
-
'strained',
|
126
|
-
'hairy',
|
127
|
-
'tempered',
|
128
|
-
MOB_LEVEL_AQUAMARINE,
|
129
|
-
MOB_LEVEL_AQUAMARINE * 5,
|
130
|
-
MOB_LEVEL_AQUAMARINE * 5,
|
131
|
-
MOB_LEVEL_AQUAMARINE * 2,
|
132
|
-
MOB_LEVEL_AQUAMARINE * 2,
|
133
|
-
Inventory.new,
|
134
|
-
rand(0..10)
|
125
|
+
rand(0..10),
|
126
|
+
MOB_LEVEL_AMETHYSTLE * rand(1..2),
|
127
|
+
MOB_BATTLECRY_AMETHYSTLE
|
135
128
|
)
|
136
129
|
)
|
137
130
|
monsters.push(Monster.new(
|
@@ -146,8 +139,30 @@ module Gemwarrior
|
|
146
139
|
MOB_LEVEL_APATIGER * 5,
|
147
140
|
MOB_LEVEL_APATIGER * 2,
|
148
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
|
+
)
|
148
|
+
)
|
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 * 2,
|
160
|
+
MOB_LEVEL_AQUAMARINE * 2,
|
161
|
+
MOB_DEXTERITY_AQUAMARINE,
|
149
162
|
Inventory.new,
|
150
|
-
rand(0..10)
|
163
|
+
rand(0..10),
|
164
|
+
MOB_LEVEL_AQUAMARINE * rand(1..2),
|
165
|
+
MOB_BATTLECRY_AQUAMARINE
|
151
166
|
)
|
152
167
|
)
|
153
168
|
monsters.push(Monster.new(
|
@@ -162,8 +177,11 @@ module Gemwarrior
|
|
162
177
|
MOB_LEVEL_BLOODSTORM * 5,
|
163
178
|
MOB_LEVEL_BLOODSTORM * 2,
|
164
179
|
MOB_LEVEL_BLOODSTORM * 2,
|
180
|
+
MOB_DEXTERITY_BLOODSTORM,
|
165
181
|
Inventory.new,
|
166
|
-
rand(0..10)
|
182
|
+
rand(0..10),
|
183
|
+
MOB_LEVEL_BLOODSTORM * rand(2..3),
|
184
|
+
MOB_BATTLECRY_BLOODSTORM
|
167
185
|
)
|
168
186
|
)
|
169
187
|
monsters.push(Monster.new(
|
@@ -178,8 +196,11 @@ module Gemwarrior
|
|
178
196
|
MOB_LEVEL_CITRINAGA * 5,
|
179
197
|
MOB_LEVEL_CITRINAGA * 2,
|
180
198
|
MOB_LEVEL_CITRINAGA * 2,
|
199
|
+
MOB_DEXTERITY_CITRINAGA,
|
181
200
|
Inventory.new,
|
182
|
-
rand(0..10)
|
201
|
+
rand(0..10),
|
202
|
+
MOB_LEVEL_CITRINAGA * rand(2..3),
|
203
|
+
MOB_BATTLECRY_CITRINAGA
|
183
204
|
)
|
184
205
|
)
|
185
206
|
monsters.push(Monster.new(
|
@@ -194,8 +215,11 @@ module Gemwarrior
|
|
194
215
|
MOB_LEVEL_CORALIZ * 5,
|
195
216
|
MOB_LEVEL_CORALIZ * 2,
|
196
217
|
MOB_LEVEL_CORALIZ * 2,
|
218
|
+
MOB_DEXTERITY_CORALIZ,
|
197
219
|
Inventory.new,
|
198
|
-
rand(0..10)
|
220
|
+
rand(0..10),
|
221
|
+
MOB_LEVEL_CORALIZ * rand(2..3),
|
222
|
+
MOB_BATTLECRY_CORALIZ
|
199
223
|
)
|
200
224
|
)
|
201
225
|
monsters.push(Monster.new(
|
@@ -210,8 +234,11 @@ module Gemwarrior
|
|
210
234
|
MOB_LEVEL_CUBICAT * 5,
|
211
235
|
MOB_LEVEL_CUBICAT * 2,
|
212
236
|
MOB_LEVEL_CUBICAT * 2,
|
237
|
+
MOB_DEXTERITY_CUBICAT,
|
213
238
|
Inventory.new,
|
214
|
-
rand(0..10)
|
239
|
+
rand(0..10),
|
240
|
+
MOB_LEVEL_CUBICAT * rand(3..4),
|
241
|
+
MOB_BATTLECRY_CUBICAT
|
215
242
|
)
|
216
243
|
)
|
217
244
|
monsters.push(Monster.new(
|
@@ -226,8 +253,11 @@ module Gemwarrior
|
|
226
253
|
MOB_LEVEL_DIAMAN * 5,
|
227
254
|
MOB_LEVEL_DIAMAN * 2,
|
228
255
|
MOB_LEVEL_DIAMAN * 2,
|
256
|
+
MOB_DEXTERITY_DIAMAN,
|
229
257
|
Inventory.new,
|
230
|
-
rand(0..10)
|
258
|
+
rand(0..10),
|
259
|
+
MOB_LEVEL_DIAMAN * rand(3..5),
|
260
|
+
MOB_BATTLECRY_DIAMAN
|
231
261
|
)
|
232
262
|
)
|
233
263
|
end
|
@@ -238,6 +268,9 @@ module Gemwarrior
|
|
238
268
|
ITEM_ID_STONE,
|
239
269
|
ITEM_NAME_STONE,
|
240
270
|
ITEM_DESC_STONE,
|
271
|
+
ITEM_ATK_LO_STONE,
|
272
|
+
ITEM_ATK_HI_STONE,
|
273
|
+
true,
|
241
274
|
true
|
242
275
|
)
|
243
276
|
)
|
@@ -245,6 +278,9 @@ module Gemwarrior
|
|
245
278
|
ITEM_ID_BED,
|
246
279
|
ITEM_NAME_BED,
|
247
280
|
ITEM_DESC_BED,
|
281
|
+
ITEM_ATK_LO_BED,
|
282
|
+
ITEM_ATK_HI_BED,
|
283
|
+
false,
|
248
284
|
false
|
249
285
|
)
|
250
286
|
)
|
@@ -252,6 +288,9 @@ module Gemwarrior
|
|
252
288
|
ITEM_ID_STALACTITE,
|
253
289
|
ITEM_NAME_STALACTITE,
|
254
290
|
ITEM_DESC_STALACTITE,
|
291
|
+
ITEM_ATK_LO_STALACTITE,
|
292
|
+
ITEM_ATK_HI_STALACTITE,
|
293
|
+
true,
|
255
294
|
true
|
256
295
|
)
|
257
296
|
)
|
@@ -259,13 +298,19 @@ module Gemwarrior
|
|
259
298
|
ITEM_ID_FEATHER,
|
260
299
|
ITEM_NAME_FEATHER,
|
261
300
|
ITEM_DESC_FEATHER,
|
262
|
-
|
301
|
+
ITEM_ATK_LO_FEATHER,
|
302
|
+
ITEM_ATK_HI_FEATHER,
|
303
|
+
true,
|
304
|
+
false
|
263
305
|
)
|
264
306
|
)
|
265
307
|
items.push(Item.new(
|
266
308
|
ITEM_ID_GUN,
|
267
309
|
ITEM_NAME_GUN,
|
268
310
|
ITEM_DESC_GUN,
|
311
|
+
ITEM_ATK_LO_GUN,
|
312
|
+
ITEM_ATK_HI_GUN,
|
313
|
+
true,
|
269
314
|
true
|
270
315
|
)
|
271
316
|
)
|