destiny 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/bin/destiny +25 -25
- data/lib/destiny.rb +95 -101
- data/lib/game_mechanics.rb +316 -250
- data/lib/mobs.rb +153 -74
- data/lib/places.rb +159 -96
- metadata +3 -3
data/lib/mobs.rb
CHANGED
@@ -1,74 +1,153 @@
|
|
1
|
-
class Mobs
|
2
|
-
|
3
|
-
attr_accessor :str, :agi, :int, :dmg, :armor, :hp, :cur_hp, :dodge, :mana, :cur_mana, :xp, :lvl, :coin, :name
|
4
|
-
|
5
|
-
def initialize(str, agi, int, dmg, armor, hp, cur_hp, dodge, mana, cur_mana, xp, lvl, coin, name="MOB")
|
6
|
-
@str = str
|
7
|
-
@agi = agi
|
8
|
-
@int = int
|
9
|
-
@dmg = dmg
|
10
|
-
@armor = armor
|
11
|
-
@hp = hp
|
12
|
-
@cur_hp = cur_hp
|
13
|
-
@dodge = dodge
|
14
|
-
@mana = mana
|
15
|
-
@cur_mana = cur_mana
|
16
|
-
@xp = xp
|
17
|
-
@lvl = lvl
|
18
|
-
@coin = coin
|
19
|
-
@name = name
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
# playable character roles
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
1
|
+
class Mobs
|
2
|
+
|
3
|
+
attr_accessor :str, :agi, :int, :dmg, :armor, :hp, :cur_hp, :dodge, :mana, :cur_mana, :xp, :lvl, :coin, :name
|
4
|
+
|
5
|
+
def initialize(str, agi, int, dmg, armor, hp, cur_hp, dodge, mana, cur_mana, xp, lvl, coin, name="MOB")
|
6
|
+
@str = str
|
7
|
+
@agi = agi
|
8
|
+
@int = int
|
9
|
+
@dmg = dmg
|
10
|
+
@armor = armor
|
11
|
+
@hp = hp
|
12
|
+
@cur_hp = cur_hp
|
13
|
+
@dodge = dodge
|
14
|
+
@mana = mana
|
15
|
+
@cur_mana = cur_mana
|
16
|
+
@xp = xp
|
17
|
+
@lvl = lvl
|
18
|
+
@coin = coin
|
19
|
+
@name = name
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
# playable character roles
|
25
|
+
# each role will have a focus, like healing or magic spells
|
26
|
+
|
27
|
+
class Cleric < Mobs
|
28
|
+
# clerics can heal themselves, and even put their HP's above max during combat, as a buffer
|
29
|
+
def initialize(str=12, agi=12, int=10, dmg=5, armor=8, hp=6, cur_hp=6, dodge=5, mana=12, cur_mana=12, xp=0, lvl=1, coin=0, name="Cleric")
|
30
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class Knight < Mobs
|
36
|
+
# the knight has the highest melee damage, strength, and armor
|
37
|
+
def initialize(str=14, agi=12, int=8, dmg=6, armor=10, hp=8, cur_hp=8, dodge=10, mana=8, cur_mana=8, xp=0, lvl=1, coin=0, name="Knight")
|
38
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
class Rogue < Mobs
|
44
|
+
# rogues have good melee damage and the highest dodge, they get extra coin too :)
|
45
|
+
def initialize(str=12, agi=16, int=12, dmg=6, armor=6, hp=6, cur_hp=6, dodge=20, mana=0, cur_mana=0, xp=0, lvl=1, coin=0, name="Rogue")
|
46
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class Wizard < Mobs
|
52
|
+
# wizards can cast damaging spells
|
53
|
+
def initialize(str=8, agi=10, int=16, dmg=4, armor=4, hp=4, cur_hp=4, dodge=5, mana=16, cur_mana=16, xp=0, lvl=1, coin=0, name="Wizard")
|
54
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
# Opponents below
|
60
|
+
|
61
|
+
class GiantRat < Mobs
|
62
|
+
|
63
|
+
def initialize(str=12, agi=10, int=4, dmg=5, armor=6, hp=8, cur_hp=8, dodge=5, mana=0, cur_mana=0, xp=150, lvl=1, coin=1, name="Giant Rat")
|
64
|
+
rat_type = dice(10)
|
65
|
+
case
|
66
|
+
when (1..8).include?(rat_type)
|
67
|
+
# no change, you just get the generic giant rat
|
68
|
+
when (9..10).include?(rat_type)
|
69
|
+
# this feller is much harder to defeat
|
70
|
+
str = 16
|
71
|
+
dmg = 8
|
72
|
+
hp = 10
|
73
|
+
cur_hp = 10
|
74
|
+
xp = 400
|
75
|
+
coin = 3
|
76
|
+
name = "ROUS"
|
77
|
+
end
|
78
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
class Goblin < Mobs
|
84
|
+
|
85
|
+
def initialize(str=10, agi=10, int=8, dmg=4, armor=6, hp=6, cur_hp=6, dodge=15, mana=2, cur_mana=2, xp=100, lvl=1, coin=1, name="Goblin")
|
86
|
+
# Should probably create a method that does the below
|
87
|
+
goblin_type = dice(10)
|
88
|
+
case
|
89
|
+
when (1..6).include?(goblin_type)
|
90
|
+
# no change, you just get the generic goblin
|
91
|
+
when (7..10).include?(goblin_type)
|
92
|
+
# this feller is stronger, but less nimble
|
93
|
+
str = 16
|
94
|
+
dmg = 6
|
95
|
+
armor = 8
|
96
|
+
hp = 8
|
97
|
+
cur_hp = 8
|
98
|
+
dodge = 10
|
99
|
+
xp = 200
|
100
|
+
coin = 2
|
101
|
+
name = "Goblin Warrior"
|
102
|
+
end
|
103
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
class Kobold < Mobs
|
109
|
+
|
110
|
+
def initialize(str=12, agi=8, int=8, dmg=5, armor=5, hp=6, cur_hp=6, dodge=10, mana=2, cur_mana=2, xp=150, lvl=1, coin=2, name="Kobold")
|
111
|
+
kobold_type = dice(10)
|
112
|
+
case
|
113
|
+
when (1..6).include?(kobold_type)
|
114
|
+
# no change, you just get the generic kobold
|
115
|
+
when (7..10).include?(kobold_type)
|
116
|
+
# this one has double the chance to dodge as a regular kobold
|
117
|
+
agi = 16
|
118
|
+
dmg = 6
|
119
|
+
armor = 6
|
120
|
+
hp = 8
|
121
|
+
cur_hp = 8
|
122
|
+
dodge = 20
|
123
|
+
xp = 300
|
124
|
+
coin = 4
|
125
|
+
name = "Kobold Thief"
|
126
|
+
end
|
127
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
class Skeleton < Mobs
|
133
|
+
|
134
|
+
def initialize(str=12, agi=10, int=8, dmg=5, armor=6, hp=8, cur_hp=8, dodge=5, mana=0, cur_mana=0, xp=200, lvl=1, coin=3, name="Skeleton")
|
135
|
+
skeleton_type = dice(10)
|
136
|
+
case
|
137
|
+
when (1..7).include?(skeleton_type)
|
138
|
+
# no change, you just get the generic skeleton
|
139
|
+
when (8..10).include?(skeleton_type)
|
140
|
+
# this feller is considerably tougher
|
141
|
+
str = 16
|
142
|
+
dmg = 6
|
143
|
+
armor = 8
|
144
|
+
hp = 10
|
145
|
+
cur_hp = 10
|
146
|
+
xp = 300
|
147
|
+
coin = 5
|
148
|
+
name = "Skeletal Knight"
|
149
|
+
end
|
150
|
+
super(str,agi,int,dmg,armor,hp,cur_hp,dodge,mana,cur_mana,xp,lvl,coin,name)
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
data/lib/places.rb
CHANGED
@@ -1,96 +1,159 @@
|
|
1
|
-
# This file will contain the various places the player can go
|
2
|
-
# Town, Tavern, Dungeon and options in each
|
3
|
-
|
4
|
-
class Town
|
5
|
-
|
6
|
-
def initialize
|
7
|
-
# Town is only available as an option in the Dungeon (to return to)
|
8
|
-
# initialize is only called the first time, so this greeting is only seen once
|
9
|
-
puts "These things always start the same way and your adventure is no exception..."
|
10
|
-
puts "You walk into town, scanning each nook and cranny. Most faces are friendly,"
|
11
|
-
puts "some are not..."
|
12
|
-
end
|
13
|
-
|
14
|
-
def choices
|
15
|
-
move = 0
|
16
|
-
until move == "3"
|
17
|
-
begin
|
18
|
-
load_data
|
19
|
-
puts # formatting
|
20
|
-
puts bar_top
|
21
|
-
puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
|
22
|
-
puts bar_low
|
23
|
-
puts # formatting
|
24
|
-
puts "Please choose where you will head next:"
|
25
|
-
puts "[1].
|
26
|
-
puts "[2].
|
27
|
-
puts "[3]. Exit
|
28
|
-
prompt; move = gets.chomp
|
29
|
-
end while not (move == "1" or move == "2" or move == "3")
|
30
|
-
case
|
31
|
-
when move == "1"
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
puts
|
73
|
-
puts
|
74
|
-
puts
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
puts
|
86
|
-
puts "
|
87
|
-
puts # formatting
|
88
|
-
random_encounter
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
1
|
+
# This file will contain the various places the player can go
|
2
|
+
# Town, Tavern, Dungeon and options in each
|
3
|
+
|
4
|
+
class Town
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
# Town is only available as an option in the Dungeon (to return to)
|
8
|
+
# initialize is only called the first time, so this greeting is only seen once
|
9
|
+
puts "These things always start the same way and your adventure is no exception..."
|
10
|
+
puts "You walk into town, scanning each nook and cranny. Most faces are friendly,"
|
11
|
+
puts "some are not..."
|
12
|
+
end
|
13
|
+
|
14
|
+
def choices
|
15
|
+
move = 0
|
16
|
+
until move == "3"
|
17
|
+
begin
|
18
|
+
load_data
|
19
|
+
puts # formatting
|
20
|
+
puts bar_top
|
21
|
+
puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
|
22
|
+
puts bar_low
|
23
|
+
puts # formatting
|
24
|
+
puts "Please choose where you will head next:"
|
25
|
+
puts "[1]. The Dungeon"
|
26
|
+
puts "[2]. Ye Old Tavern"
|
27
|
+
puts "[3]. Exit Game"
|
28
|
+
prompt; move = gets.chomp
|
29
|
+
end while not (move == "1" or move == "2" or move == "3")
|
30
|
+
case
|
31
|
+
when move == "1"
|
32
|
+
Dungeon.new.choices
|
33
|
+
when move == "2"
|
34
|
+
Tavern.new.choices
|
35
|
+
when move == "3"
|
36
|
+
# save the player's stats before exit
|
37
|
+
save_data
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class Dungeon
|
46
|
+
|
47
|
+
# can go here from town, will spawn random encounters, etc.
|
48
|
+
def initialize
|
49
|
+
puts # formatting
|
50
|
+
puts "You have entered the dungeon! DUM DUM DUM!!"
|
51
|
+
end
|
52
|
+
|
53
|
+
def choices
|
54
|
+
move = 0
|
55
|
+
load_data
|
56
|
+
bread_crumb = 0
|
57
|
+
until move == "2" and bread_crumb == 0
|
58
|
+
begin
|
59
|
+
puts # formatting
|
60
|
+
puts bar_top
|
61
|
+
puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
|
62
|
+
puts bar_low
|
63
|
+
puts # formatting
|
64
|
+
puts "Now #{@player.name}, what will you do next?"
|
65
|
+
puts "[1]. Go deeper into the dungeon."
|
66
|
+
puts "[2]. Return to town."
|
67
|
+
prompt; move = gets.chomp
|
68
|
+
end while not (move == "1" or move == "2")
|
69
|
+
case
|
70
|
+
when move == "1"
|
71
|
+
puts # formatting
|
72
|
+
puts "You walk further into the dark, dank, dirty, dungeon,"
|
73
|
+
puts "smirking slightly at your awesome alliteration ability."
|
74
|
+
puts # formatting
|
75
|
+
bread_crumb = bread_crumb + 1
|
76
|
+
random_encounter
|
77
|
+
when move == "2"
|
78
|
+
if bread_crumb < 1
|
79
|
+
puts "You make it back to town in one piece!"
|
80
|
+
puts # formatting
|
81
|
+
save_data
|
82
|
+
return
|
83
|
+
end
|
84
|
+
bread_crumb = bread_crumb - 1
|
85
|
+
puts # formatting
|
86
|
+
puts "You head back toward town."
|
87
|
+
puts # formatting
|
88
|
+
random_encounter
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
class Tavern
|
96
|
+
|
97
|
+
# only available as an option in the Town
|
98
|
+
# The tavern will "heal" the player by restoring mana and hp
|
99
|
+
def initialize
|
100
|
+
load_data
|
101
|
+
puts # formatting
|
102
|
+
puts "You enter the tavern. The air is thick with smoke, but the fire in the hearth"
|
103
|
+
puts "is warm and inviting."
|
104
|
+
puts if @player.cur_hp < @player.hp # formatting
|
105
|
+
puts "Some rest would probably do you good, #{@player.name}." if @player.cur_hp < @player.hp
|
106
|
+
puts # formatting
|
107
|
+
end
|
108
|
+
|
109
|
+
def choices
|
110
|
+
move = 0
|
111
|
+
until move == "4"
|
112
|
+
begin
|
113
|
+
puts # formatting
|
114
|
+
puts bar_top
|
115
|
+
puts stat_bar(@player.name, @player.xp, @player.lvl, @player.coin, @player.cur_hp, @player.cur_mana)
|
116
|
+
puts bar_low
|
117
|
+
puts # formatting
|
118
|
+
room_cost = @player.lvl*2
|
119
|
+
puts "What would you like to do in the tavern, #{@player.name}?"
|
120
|
+
puts "[1]. Buy some food."
|
121
|
+
puts "[2]. Buy a drink."
|
122
|
+
puts "[3]. Rest. | Cost: #{room_cost} coins."
|
123
|
+
puts "[4]. Leave the tavern."
|
124
|
+
prompt; move = gets.chomp
|
125
|
+
end while not (move == "1" or move == "2" or move == "3" or move == "4")
|
126
|
+
case
|
127
|
+
when move == "1"
|
128
|
+
puts # formatting
|
129
|
+
puts "You find a seat at an open table and the waiter approaches to take your order."
|
130
|
+
puts # formatting
|
131
|
+
when move == "2"
|
132
|
+
puts # formatting
|
133
|
+
puts "You sally up to the bar and have a drink."
|
134
|
+
puts # formatting
|
135
|
+
when move == "3"
|
136
|
+
if @player.coin >= @player.lvl*2
|
137
|
+
health = @player.cur_hp
|
138
|
+
mana = @player.cur_mana
|
139
|
+
restore_player
|
140
|
+
health = @player.cur_hp - health
|
141
|
+
mana = @player.cur_mana - mana
|
142
|
+
puts # formatting
|
143
|
+
puts "You pay for a small room and get a good night of rest."
|
144
|
+
puts "Resting has restored #{health} health points and #{mana} points of mana."
|
145
|
+
@player.coin = @player.coin - @player.lvl*2
|
146
|
+
else
|
147
|
+
puts # formatting
|
148
|
+
puts "You can't afford a room! Hit the dungeon and earn some money!"
|
149
|
+
end
|
150
|
+
when move == "4"
|
151
|
+
puts # formatting
|
152
|
+
puts "Feeling much better, you step out of the tavern and back into town."
|
153
|
+
save_data
|
154
|
+
return
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|