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.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+
@@ -0,0 +1,12 @@
1
+ def timer(num=1)
2
+ i = 0
3
+ until i >= num
4
+ g = 0
5
+ h = []
6
+ while g <= 1000
7
+ h << ' ' * (h.length * g)
8
+ g += 1
9
+ end
10
+ i+= 1
11
+ end
12
+ end
@@ -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}