texugo-engine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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}
|