texugo-engine 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +70 -0
- data/lib/armour.rb +34 -0
- data/lib/books.rb +13 -0
- data/lib/characters.rb +51 -0
- data/lib/commands.rb +327 -0
- data/lib/denofshadows.rb +200 -0
- data/lib/games/.gitkeep +0 -0
- data/lib/hamlet.rb +115 -0
- data/lib/items.rb +59 -0
- data/lib/maps.rb +26 -0
- data/lib/middleton.rb +239 -0
- data/lib/modules.rb +169 -0
- data/lib/monsters.rb +106 -0
- data/lib/northshire.rb +160 -0
- data/lib/play.rb +218 -0
- data/lib/player.rb +65 -0
- data/lib/rand_fight.rb +120 -0
- data/lib/ridgedale.rb +43 -0
- data/lib/shop.rb +144 -0
- data/lib/spells.rb +53 -0
- data/lib/timer.rb +12 -0
- data/lib/weapons.rb +17 -0
- data/texugo-engine.gemspec +16 -0
- metadata +72 -0
data/lib/player.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'shop'
|
2
|
+
|
3
|
+
class Player
|
4
|
+
attr_accessor :name, :strength, :endurance, :agility, :intelligence, :life, :magic, :level, :experience, :inventory, :spells, :armour, :weapon, :gold, :area, :position, :maps, :party, :visited
|
5
|
+
|
6
|
+
def initialize (name, strength, endurance, agility, intelligence, level = 1, experience = 0, gold = 0)
|
7
|
+
@name = name
|
8
|
+
@strength = strength
|
9
|
+
@endurance = endurance
|
10
|
+
@agility = agility
|
11
|
+
@intelligence = intelligence
|
12
|
+
@life = endurance * 10
|
13
|
+
@magic = intelligence * 3
|
14
|
+
@experience = experience
|
15
|
+
@level = level
|
16
|
+
@inventory = ['potion']
|
17
|
+
@spells = ['fire']
|
18
|
+
@weapon = []
|
19
|
+
@armour = []
|
20
|
+
@gold = gold
|
21
|
+
@area = []
|
22
|
+
@position = []
|
23
|
+
@maps = []
|
24
|
+
@party = []
|
25
|
+
@visited = []
|
26
|
+
end
|
27
|
+
|
28
|
+
def armour_rating
|
29
|
+
initial_rating = 0
|
30
|
+
self.armour.each do |armour|
|
31
|
+
initial_rating += (armour.rating)
|
32
|
+
end
|
33
|
+
return initial_rating
|
34
|
+
end
|
35
|
+
|
36
|
+
def attribute
|
37
|
+
{:strength => strength, :endurance => endurance, :agility => agility, :intelligence => intelligence}.each do |attribute, value|
|
38
|
+
puts 'Your ' + attribute.to_s.capitalize + ' is ' + value.to_s
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
def experience(player, exp)
|
46
|
+
player.exp += exp
|
47
|
+
end
|
48
|
+
|
49
|
+
def level_up?(player)
|
50
|
+
if player.experience >= 50 *player.level * player.level
|
51
|
+
player.level += 1
|
52
|
+
player.strength += 1
|
53
|
+
player.endurance += 1
|
54
|
+
player.agility += 1
|
55
|
+
player.intelligence += 1
|
56
|
+
puts ''
|
57
|
+
puts "#{player.name} LEVEL UP!"
|
58
|
+
puts''
|
59
|
+
if player == $player
|
60
|
+
player.attribute
|
61
|
+
player.life = player.endurance * 10
|
62
|
+
player.magic = player.intelligence * 3
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/rand_fight.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
require_relative 'commands'
|
2
|
+
require_relative 'timer'
|
3
|
+
require_relative 'monsters'
|
4
|
+
|
5
|
+
def rand_monster
|
6
|
+
roll = (rand($player.level * 2) + 1)
|
7
|
+
return Ghoul.new if roll <= 2
|
8
|
+
return Spector.new if roll > 2 && roll <= 4
|
9
|
+
return Imp.new if roll > 4 && roll <= 6
|
10
|
+
return Orc.new if roll > 6 && roll <= 8
|
11
|
+
return Troll.new if roll > 8 && roll <= 10
|
12
|
+
return Siren.new if roll > 10 && roll <= 12
|
13
|
+
return Undead.new if roll > 12
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
def fight(monster = rand_monster, player = $player)
|
18
|
+
@monster = monster
|
19
|
+
action = ''
|
20
|
+
puts''
|
21
|
+
puts @monster.name.to_s + ' Approaches'
|
22
|
+
puts ''
|
23
|
+
|
24
|
+
puts @monster.name.to_s + "'s life is " + @monster.life.to_s
|
25
|
+
puts 'Your life is ' + player.life.to_s
|
26
|
+
puts 'You have ' + player.magic.to_s + ' magic'
|
27
|
+
puts''
|
28
|
+
until @monster.life <= 0
|
29
|
+
break if player.life <= 0
|
30
|
+
puts''
|
31
|
+
timer
|
32
|
+
action = ''
|
33
|
+
while true
|
34
|
+
puts 'What would you like to do?'
|
35
|
+
action = gets.chomp
|
36
|
+
if Commands_fight.include? action
|
37
|
+
send(action)
|
38
|
+
break unless action == 'inventory'
|
39
|
+
else puts 'please enter a recognized command'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
break if @monster.life <= 0
|
43
|
+
timer
|
44
|
+
if player.party.length > 0
|
45
|
+
player.party.each do |char|
|
46
|
+
if (char.life != 0) && (char.life < (char.endurance*2)) && (char.magic >= char.intelligence)
|
47
|
+
puts "#{char.name} casts heal."
|
48
|
+
heal(char)
|
49
|
+
puts ''
|
50
|
+
elsif char.life == 0
|
51
|
+
break
|
52
|
+
else
|
53
|
+
hit(char, @monster)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
break if @monster.life <= 0
|
58
|
+
puts''
|
59
|
+
timer
|
60
|
+
hit_chance = rand(player.party.length + 1)
|
61
|
+
if hit_chance == 0
|
62
|
+
puts @monster.name.to_s + ' lunges at you!'
|
63
|
+
if player.agility * (rand(6) + 1) <= player.agility * 4
|
64
|
+
damage = (@monster.strength * (rand(6)+1) - player.armour_rating)
|
65
|
+
unless damage < 0
|
66
|
+
puts 'and hits you!'
|
67
|
+
player.life -= damage
|
68
|
+
end
|
69
|
+
puts 'Your armour absorbs the blow' if damage <= 0
|
70
|
+
else
|
71
|
+
puts 'but the swing misses'
|
72
|
+
end
|
73
|
+
else
|
74
|
+
defender = player.party[hit_chance - 1]
|
75
|
+
puts @monster.name.to_s + " lunges at #{defender.name}!"
|
76
|
+
if defender.agility * (rand(6) + 1) <= defender.agility * 4
|
77
|
+
damage = (@monster.strength * (rand(6)+1) - defender.armour_rating)
|
78
|
+
unless damage < 0
|
79
|
+
puts "and hits #{defender.name}!"
|
80
|
+
defender.life -= damage
|
81
|
+
end
|
82
|
+
puts "#{defender.name}'s armour absorbs the blow" if damage <= 0
|
83
|
+
else
|
84
|
+
puts 'but the swing misses'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
timer
|
88
|
+
puts''
|
89
|
+
puts @monster.name.to_s.capitalize + "'s life is " + @monster.life.to_s
|
90
|
+
puts ''
|
91
|
+
player.party.each do |char|
|
92
|
+
puts "#{char.name}'s life is #{char.life}"
|
93
|
+
end
|
94
|
+
puts 'Your life is ' + player.life.to_s
|
95
|
+
puts "You have #{player.magic} magic left"
|
96
|
+
break if player.life <=0
|
97
|
+
end
|
98
|
+
timer
|
99
|
+
if @monster.life <= 0
|
100
|
+
puts ''
|
101
|
+
puts @monster.name.to_s + "'s lifeless body hits the ground with a thud" unless @monster.class == Spector
|
102
|
+
puts 'The Spectral form disipates' if @monster.class == Spector
|
103
|
+
player.experience += @monster.experience
|
104
|
+
puts 'total experience is ' + player.experience.to_s
|
105
|
+
puts 'current level is ' + player.level.to_s
|
106
|
+
loot
|
107
|
+
gold = (rand(4) * (@monster.experience / 3))
|
108
|
+
player.gold += gold
|
109
|
+
puts 'gained ' + gold.to_s + ' gold'
|
110
|
+
puts 'total gold is ' + player.gold.to_s
|
111
|
+
level_up?(player)
|
112
|
+
player.party.each do |char|
|
113
|
+
char.experience += @monster.experience if char.life > 0
|
114
|
+
level_up?(char)
|
115
|
+
end
|
116
|
+
timer
|
117
|
+
end
|
118
|
+
puts ''
|
119
|
+
puts ''
|
120
|
+
end
|
data/lib/ridgedale.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'monsters'
|
2
|
+
|
3
|
+
class Ridge_dale
|
4
|
+
attr_accessor :name, :locations, :visit, :fightchance, :monsters
|
5
|
+
|
6
|
+
def initialize(name = 'Ridgedale', locations = {}, visit = 0, fight_chance = 8, monsters = 1)
|
7
|
+
@name = name
|
8
|
+
@locations = locations
|
9
|
+
@visit = visit
|
10
|
+
@fightchance = fight_chance
|
11
|
+
@monsters = monsters
|
12
|
+
end
|
13
|
+
|
14
|
+
def introduction
|
15
|
+
end
|
16
|
+
|
17
|
+
def look
|
18
|
+
end
|
19
|
+
|
20
|
+
def monster
|
21
|
+
return Human.new('Mugger')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class RidgedaleWeapons
|
26
|
+
end
|
27
|
+
|
28
|
+
class RidgedaleArmour
|
29
|
+
end
|
30
|
+
|
31
|
+
class RidgedaleItems
|
32
|
+
end
|
33
|
+
|
34
|
+
class RidgedaleInn
|
35
|
+
end
|
36
|
+
|
37
|
+
class GrandChurch
|
38
|
+
end
|
39
|
+
|
40
|
+
class RidgedaleTavern
|
41
|
+
end
|
42
|
+
|
43
|
+
Ridgedale = Ridge_dale.new
|
data/lib/shop.rb
ADDED
@@ -0,0 +1,144 @@
|
|
1
|
+
def shop
|
2
|
+
puts ''
|
3
|
+
puts '=' * 50
|
4
|
+
puts 'SHOP'.center(50)
|
5
|
+
puts '='*50
|
6
|
+
puts 'Welcome Adventurer!'
|
7
|
+
timer
|
8
|
+
|
9
|
+
@items = {'potion' => 50, 'mana' => 70, 'rejuvinate' => 350, 'xpotion' => 150}
|
10
|
+
@weapons = {'club' => 50, 'sword' => 150, 'axe' => 400, 'claymore' => 800}
|
11
|
+
@spells = {'heal' => 100 , 'holy' => 200, 'flame' => 500}
|
12
|
+
@armour = {Hat.name => 200, Leather.name => 500, Gloves.name => 175, Shield.name => 375, Shoes.name => 225}
|
13
|
+
def buy
|
14
|
+
inventory = [self.weapons, self.items, self.spells, self.armour]
|
15
|
+
puts 'What would you like to purchase?'
|
16
|
+
puts ''
|
17
|
+
puts '-'*10
|
18
|
+
puts 'items'.center(10)
|
19
|
+
puts '-'*10
|
20
|
+
@items.each_key do |key|
|
21
|
+
puts key.to_s + ' - ' + @items[key].to_s + ' gold'
|
22
|
+
end
|
23
|
+
puts '-'*10
|
24
|
+
puts 'spells'.center(10)
|
25
|
+
puts '-'*10
|
26
|
+
@spells.each_key do |key|
|
27
|
+
puts key.to_s + ' - ' + @spells[key].to_s + ' gold'
|
28
|
+
end
|
29
|
+
puts '-'*10
|
30
|
+
puts 'weapons'.center(10)
|
31
|
+
puts '-'*10
|
32
|
+
@weapons.each_key do |key|
|
33
|
+
puts "#{key.to_s.upcase} - #{@weapons[key].to_s} gold"
|
34
|
+
puts "Damage rating: #{Weapon_id[key].damage.to_s}"
|
35
|
+
end
|
36
|
+
puts '-'*10
|
37
|
+
puts 'armour'
|
38
|
+
puts '-'*10
|
39
|
+
@armour.each_key do |key|
|
40
|
+
puts "#{key.to_s.upcase} - #{@armour[key].to_s} gold"
|
41
|
+
puts "Defense rating: #{Armour_id[key].rating.to_s}"
|
42
|
+
puts "Armour type: #{Armour_id[key].type.to_s}"
|
43
|
+
end
|
44
|
+
puts ''
|
45
|
+
purchase = ''
|
46
|
+
while true
|
47
|
+
purchase = gets.chomp
|
48
|
+
break if purchase == 'back'
|
49
|
+
if(@items.include? purchase) || (@weapons.include? purchase) || (@spells.include? purchase) || (@armour.include? purchase)
|
50
|
+
inventory.each do |invtry|
|
51
|
+
if (invtry.each_key.include? purchase) && (Player1.gold >= invtry[purchase])
|
52
|
+
Player1.inventory << purchase if @items.include? purchase
|
53
|
+
Player1.inventory << Weapon_id[purchase] if @weapons.include? purchase
|
54
|
+
Player1.inventory << Armour_id[purchase] if @armour.include? purchase
|
55
|
+
Player1.spells << purchase if @spells.include? purchase
|
56
|
+
Player1.gold -= invtry[purchase]
|
57
|
+
elsif (invtry.each_key.include? purchase) && (Player1.gold < invtry[purchase])
|
58
|
+
puts 'You do not have enough gold'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
puts ''
|
62
|
+
puts 'you have ' + Player1.gold.to_s + ' left.'
|
63
|
+
puts ''
|
64
|
+
puts 'Would you like anything else?'
|
65
|
+
puts ''
|
66
|
+
else
|
67
|
+
puts 'No such item in inventory'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def sell
|
73
|
+
sell = ''
|
74
|
+
while true
|
75
|
+
puts 'what would you like to sell?'
|
76
|
+
invtry = []
|
77
|
+
Player1.inventory.each do |item|
|
78
|
+
unless (item.class == Weapon) || (item.class == Armour)
|
79
|
+
invtry << item
|
80
|
+
puts item.to_s + ' - ' + (@items[item]/2).to_s
|
81
|
+
else (item.class == Weapon) || (item.class == Armour)
|
82
|
+
invtry << item.name
|
83
|
+
puts item.name.to_s + ' - ' + (@weapons[item.name]/2).to_s if item.class == Weapon
|
84
|
+
puts item.name.to_s + ' - ' + (@armour[item.name]/2).to_s if item.class == Armour
|
85
|
+
end
|
86
|
+
end
|
87
|
+
puts ''
|
88
|
+
sell = gets.chomp
|
89
|
+
puts ''
|
90
|
+
break if sell == 'back'
|
91
|
+
if (invtry.include? sell) && (@items.has_key? sell)
|
92
|
+
Player1.inventory.delete_at(Player1.inventory.index(sell))
|
93
|
+
Player1.gold += (@items[sell] / 2)
|
94
|
+
elsif (invtry.include? sell) && (@weapons.has_key? sell)
|
95
|
+
Player1.inventory.delete_at(Player1.inventory.index(Weapon_id[sell]))
|
96
|
+
temp = []
|
97
|
+
Player1.inventory.each do |item|
|
98
|
+
(temp << item) if (item == Weapon_id[sell])
|
99
|
+
end
|
100
|
+
Player1.weapon.delete_at 0 if temp.length == 0
|
101
|
+
Player1.gold += (@weapons[sell] / 2)
|
102
|
+
elsif (invtry.include? sell) && (@armour.has_key? sell)
|
103
|
+
Player1.inventory.delete_at(Player1.inventory.index(Armour_id[sell]))
|
104
|
+
temp = []
|
105
|
+
Player1.inventory.each do |item|
|
106
|
+
(temp << item) if (item == Armour_id[sell])
|
107
|
+
end
|
108
|
+
Player1.armour.delete_at(Player1.armour.index(sell).to_i) if temp.length == 0
|
109
|
+
Player1.gold += (@armour[sell] / 2)
|
110
|
+
else
|
111
|
+
puts 'No such item in your inventory'
|
112
|
+
puts ''
|
113
|
+
end
|
114
|
+
puts ''
|
115
|
+
puts 'You now have ' + Player1.gold.to_s + ' gold.'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
shop_options = ['buy', 'sell']
|
120
|
+
response = ''
|
121
|
+
while true
|
122
|
+
puts 'What would you like to do? (buy or sell)'
|
123
|
+
puts ''
|
124
|
+
inventory
|
125
|
+
puts 'your spells: ' +Player1.spells.to_s
|
126
|
+
puts 'your weapon: ' + Player1.weapon[0].name.to_s unless Player1.weapon.length == 0
|
127
|
+
puts 'your weapon: ' + Player1.weapon.to_s if Player1.weapon.length == 0
|
128
|
+
puts ''
|
129
|
+
puts 'Your gold: ' + Player1.gold.to_s
|
130
|
+
puts ''
|
131
|
+
response = gets.chomp
|
132
|
+
puts ''
|
133
|
+
break if response == 'leave'
|
134
|
+
if shop_options.include? response
|
135
|
+
send(response)
|
136
|
+
else
|
137
|
+
puts 'Please enter a valid option'
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
puts '='*50
|
142
|
+
puts ''
|
143
|
+
puts '='*50
|
144
|
+
end
|
data/lib/spells.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
def fire(offense = $player, defense = @monster)
|
3
|
+
puts 'not enough magic' if offense.magic < 3
|
4
|
+
damage = offense.intelligence * (rand(6)+ 1)
|
5
|
+
if offense.magic >= 3 && (defense.class != Ghoul && defense.class != Undead)
|
6
|
+
defense.life -= damage
|
7
|
+
offense.magic -= 3
|
8
|
+
end
|
9
|
+
if offense.magic >= 3 && (defense.class == Ghoul || defense.class == Undead)
|
10
|
+
defense.life -= damage * 2
|
11
|
+
offense.magic -= 3
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def heal(user = $player)
|
16
|
+
puts 'not enough magic' if user.magic < user.intelligence
|
17
|
+
if user.magic >= user.intelligence
|
18
|
+
user.life += user.intelligence*user.intelligence*2
|
19
|
+
user.magic -= user.intelligence
|
20
|
+
end
|
21
|
+
if user.life > user.endurance * 10
|
22
|
+
user.life = user.endurance * 10
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def holy(offense = $player, defense = @monster)
|
27
|
+
puts 'not enough magic' if offense.magic < 15
|
28
|
+
if defense.class == Undead && offense.magic >= 20
|
29
|
+
defense.life = (defense.life/3)
|
30
|
+
offense.magic -= 20
|
31
|
+
elsif defense.class == Bal && offense.magic >= 20
|
32
|
+
defense. life -= offense.intelligence * (rand(6)+1) * 3
|
33
|
+
else
|
34
|
+
puts 'The spell has no effect'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def flame(offense = $player, defense = @monster)
|
39
|
+
puts 'not enough magic' if offense.magic < 20
|
40
|
+
damage = offense.intelligence * (rand(6)+1) * 3
|
41
|
+
if offense.magic >= 3 && (defense.class != Ghoul && defense.class != Undead)
|
42
|
+
defense.life -= damage
|
43
|
+
offense.magic -= 3
|
44
|
+
end
|
45
|
+
if offense.magic >= 3 && (defense.class == Ghoul || defense.class == Undead)
|
46
|
+
defense.life -= damage * 2
|
47
|
+
offense.magic -= 3
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
Spells_price = {'heal' => 100 , 'holy' => 200, 'flame' => 500}
|
52
|
+
|
53
|
+
|
data/lib/timer.rb
ADDED
data/lib/weapons.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
class Weapon
|
3
|
+
attr_accessor :name, :damage
|
4
|
+
|
5
|
+
def initialize (name, damage)
|
6
|
+
@name = name
|
7
|
+
@damage = damage
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Club = Weapon.new('club', 5)
|
12
|
+
Sword = Weapon.new('sword', 10)
|
13
|
+
Axe = Weapon.new('axe', 15)
|
14
|
+
Claymore = Weapon.new('claymore',20)
|
15
|
+
|
16
|
+
Weapon_id = {'club' => Club, 'sword' => Sword , 'axe' => Axe , 'claymore' => Claymore }
|
17
|
+
Weapons_price = {'club' => 50, 'sword' => 500, 'axe' => 1000, 'claymore' => 2000}
|