mission_game 1.1.3 → 1.1.4
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 +4 -4
- data/lib/enemy.rb +14 -14
- data/lib/main.rb +57 -63
- data/lib/neworleans.rb +12 -12
- data/lib/player.rb +21 -21
- data/lib/story.rb +30 -30
- data/lib/ui.rb +68 -68
- data/mission_game.rb +19 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d66722df3461198bda49db54f496e0437ec18a3c3e1a05c21e31ef0eca35f40f
|
4
|
+
data.tar.gz: bd28000d24248ce9081869a824cae1bffe7299338db144c31c6efda2230a7080
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06473f5cf90a8de3cad9f83c6b6149074c8588deed51f6df57fcb0eaf9b9c76ebb05de03f7ff93eef7e9ee1a994a61f06f212667bfc4c325efd4474f659635b2
|
7
|
+
data.tar.gz: e93986a7c2eb38dd12fe6e81f751de0da6c071f75ad6688355850f2bf2d21af747288e313a20777c0385c1930db813442423a7394ab2a48ba535c140d80a6605
|
data/lib/enemy.rb
CHANGED
@@ -5,18 +5,18 @@
|
|
5
5
|
|
6
6
|
module MISSIONGAME
|
7
7
|
ENEMY_CATALOG = [
|
8
|
-
[name:
|
9
|
-
[name:
|
10
|
-
[name:
|
11
|
-
[name:
|
12
|
-
[name:
|
13
|
-
[name:
|
14
|
-
[name:
|
15
|
-
[name:
|
16
|
-
[name:
|
8
|
+
[name: "Lucien Castle", lives: 3, bonus: 0, str: 3, points: 1],
|
9
|
+
[name: "Klaus Mikaelson", lives: 8, bonus: 8, str: 4, points: 10],
|
10
|
+
[name: "Damon Salvatore", lives: 5, bonus: 0, str: 4, points: 7],
|
11
|
+
[name: "Mikael", lives: 3, bonus: 2, str: 4, points: 6],
|
12
|
+
[name: "Taylor Lockwood", lives: 4, bonus: 0, str: 4, points: 2],
|
13
|
+
[name: "Marcel Gerard", lives: 7, bonus: 3, str: 5, points: 5],
|
14
|
+
[name: "Dahlia", lives: 2, bonus: 6, str: 1, points: 2],
|
15
|
+
[name: "The Hollow", lives: 5, bonus: 0, str: 4, points: 3],
|
16
|
+
[name: "Celeste Dubois", lives: 3, bonus: 10, str: 2, points: 5]
|
17
17
|
]
|
18
18
|
|
19
|
-
PLAYER_DEAD =
|
19
|
+
PLAYER_DEAD = "PLAYER_DEAD"
|
20
20
|
|
21
21
|
class Enemy
|
22
22
|
attr_accessor :name
|
@@ -46,11 +46,11 @@ module MISSIONGAME
|
|
46
46
|
str_diff = (enemy.str - player.str) * 2
|
47
47
|
hit_chance = rand(1...100) + str_diff
|
48
48
|
|
49
|
-
if
|
49
|
+
if hit_chance > 30
|
50
50
|
# Determine value of the attack
|
51
51
|
attack_value = rand(1...player.str)
|
52
|
-
print enemy.name.light_red +
|
53
|
-
|
52
|
+
print enemy.name.light_red + " hits you for " +
|
53
|
+
attack_value.to_s.light_yellow + " damage(s)!\n"
|
54
54
|
if attack_value > player.lives
|
55
55
|
return PLAYER_DEAD
|
56
56
|
else
|
@@ -59,7 +59,7 @@ module MISSIONGAME
|
|
59
59
|
else
|
60
60
|
print enemy.name.light_red + " sees you as an easy prey!\n"
|
61
61
|
end
|
62
|
-
|
62
|
+
true
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
data/lib/main.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Written by Webster AVosa
|
4
4
|
|
5
|
-
MISSIONGAME_VERSION =
|
5
|
+
MISSIONGAME_VERSION = "1.00"
|
6
6
|
|
7
7
|
# Create a new UI and New Orleans
|
8
8
|
ui = MISSIONGAME::UI.new
|
@@ -13,15 +13,17 @@ ui.clear
|
|
13
13
|
ui.welcome
|
14
14
|
|
15
15
|
# Ask name
|
16
|
-
name = ui.ask(
|
16
|
+
name = ui.ask("What is your name?", /\w/)
|
17
17
|
|
18
18
|
# Create a new player
|
19
|
-
player = MISSIONGAME::Player.new({
|
19
|
+
player = MISSIONGAME::Player.new({name: name, neworleans: neworleans})
|
20
20
|
|
21
21
|
# Show intro story
|
22
22
|
ui.new_line
|
23
23
|
story = MISSIONGAME::Story.new
|
24
|
-
ui.draw_frame({
|
24
|
+
ui.draw_frame({text: story.intro})
|
25
|
+
map = neworleans.get_map({player: player})
|
26
|
+
ui.draw_frame({text: map})
|
25
27
|
|
26
28
|
# MAIN INPUT LOOP
|
27
29
|
running = 1
|
@@ -31,64 +33,56 @@ while running
|
|
31
33
|
# Get command from user
|
32
34
|
cmd = ui.get_cmd
|
33
35
|
case cmd
|
34
|
-
when
|
36
|
+
when "~"
|
35
37
|
binding.pry
|
36
|
-
when
|
37
|
-
map = neworleans.get_map({
|
38
|
-
ui.draw_frame({
|
39
|
-
when
|
38
|
+
when "map", "m"
|
39
|
+
map = neworleans.get_map({player: player})
|
40
|
+
ui.draw_frame({text: map})
|
41
|
+
when "version", "ver"
|
40
42
|
ui.display_version
|
41
|
-
when
|
43
|
+
when "clear", "cls", "c"
|
42
44
|
ui.clear
|
43
|
-
when
|
44
|
-
ui.display_name({
|
45
|
-
when
|
46
|
-
ui.show_location({
|
47
|
-
when
|
48
|
-
neworleans.check_area({
|
49
|
-
when
|
50
|
-
|
51
|
-
if !player.move(
|
52
|
-
{ direction: :up, neworleans: neworleans, ui: ui, story: story }
|
53
|
-
)
|
54
|
-
player.in_combat = 1
|
55
|
-
end
|
56
|
-
else
|
45
|
+
when "name", "whoami"
|
46
|
+
ui.display_name({player: player})
|
47
|
+
when "location", "loc", "where", "whereami"
|
48
|
+
ui.show_location({player: player})
|
49
|
+
when "look", "what", "around"
|
50
|
+
neworleans.check_area({player: player, ui: ui, story: story})
|
51
|
+
when "forward", "f"
|
52
|
+
if player.in_combat
|
57
53
|
ui.cannot_travel_combat
|
54
|
+
elsif !player.move(
|
55
|
+
{direction: :up, neworleans: neworleans, ui: ui, story: story}
|
56
|
+
)
|
57
|
+
player.in_combat = 1
|
58
58
|
end
|
59
|
-
when
|
60
|
-
|
61
|
-
if !player.move(
|
62
|
-
{ direction: :down, neworleans: neworleans, ui: ui, story: story }
|
63
|
-
)
|
64
|
-
player.in_combat = 1
|
65
|
-
end
|
66
|
-
else
|
59
|
+
when "backward", "b"
|
60
|
+
if player.in_combat
|
67
61
|
ui.cannot_travel_combat
|
62
|
+
elsif !player.move(
|
63
|
+
{direction: :down, neworleans: neworleans, ui: ui, story: story}
|
64
|
+
)
|
65
|
+
player.in_combat = 1
|
68
66
|
end
|
69
|
-
when
|
70
|
-
|
71
|
-
if !player.move(
|
72
|
-
{ direction: :left, neworleans: neworleans, ui: ui, story: story }
|
73
|
-
)
|
74
|
-
player.in_combat = 1
|
75
|
-
end
|
76
|
-
else
|
67
|
+
when "left", "l"
|
68
|
+
if player.in_combat
|
77
69
|
ui.cannot_travel_combat
|
70
|
+
elsif !player.move(
|
71
|
+
{direction: :left, neworleans: neworleans, ui: ui, story: story}
|
72
|
+
)
|
73
|
+
player.in_combat = 1
|
78
74
|
end
|
79
|
-
when
|
80
|
-
|
81
|
-
if !player.move(
|
82
|
-
{ direction: :right, neworleans: neworleans, ui: ui, story: story }
|
83
|
-
)
|
84
|
-
player.in_combat = 1
|
85
|
-
end
|
86
|
-
else
|
75
|
+
when "right", "r"
|
76
|
+
if player.in_combat
|
87
77
|
ui.cannot_travel_combat
|
78
|
+
elsif !player.move(
|
79
|
+
{direction: :right, neworleans: neworleans, ui: ui, story: story}
|
80
|
+
)
|
81
|
+
player.in_combat = 1
|
88
82
|
end
|
89
|
-
when
|
83
|
+
when "attack", "a"
|
90
84
|
if player.in_combat
|
91
|
-
retval = player.attack({
|
85
|
+
retval = player.attack({enemy: player.current_enemy, ui: ui})
|
92
86
|
if retval == MISSIONGAME::ENEMY_KILLED
|
93
87
|
player.points += player.current_enemy.points
|
94
88
|
|
@@ -102,24 +96,24 @@ while running
|
|
102
96
|
end
|
103
97
|
if retval.is_a? Numeric
|
104
98
|
player.current_enemy.lives -= retval
|
105
|
-
retval = player.current_enemy.attack({
|
99
|
+
retval = player.current_enemy.attack({player: player})
|
106
100
|
player.lives -= retval if retval.is_a? Numeric
|
107
101
|
player.dead = 1 if retval == MISSIONGAME::PLAYER_DEAD
|
108
102
|
end
|
109
103
|
else
|
110
104
|
ui.not_in_combat
|
111
105
|
end
|
112
|
-
when
|
113
|
-
ui.player_info({
|
114
|
-
when
|
115
|
-
player.in_combat ? ui.enemy_info({
|
116
|
-
when
|
117
|
-
ui.points({
|
118
|
-
when
|
106
|
+
when "player", "me", "info", "status", "i"
|
107
|
+
ui.player_info({player: player})
|
108
|
+
when "enemy"
|
109
|
+
player.in_combat ? ui.enemy_info({player: player}) : ui.not_in_combat
|
110
|
+
when "points", "score"
|
111
|
+
ui.points({player: player})
|
112
|
+
when "suicide"
|
119
113
|
player.dead = 1
|
120
|
-
when
|
114
|
+
when "help", "h", "?"
|
121
115
|
ui.help
|
122
|
-
when
|
116
|
+
when "quit", "q", "exit"
|
123
117
|
ui.quit
|
124
118
|
running = nil
|
125
119
|
else
|
@@ -130,18 +124,18 @@ while running
|
|
130
124
|
if player.in_combat && !player.current_enemy
|
131
125
|
enemy = MISSIONGAME::Enemy.new
|
132
126
|
player.current_enemy = enemy
|
133
|
-
ui.enemy_greet({
|
127
|
+
ui.enemy_greet({enemy: enemy})
|
134
128
|
end
|
135
129
|
|
136
130
|
# Player is dead!
|
137
131
|
if player.dead == 1
|
138
|
-
ui.player_dead({
|
132
|
+
ui.player_dead({story: story})
|
139
133
|
exit
|
140
134
|
end
|
141
135
|
|
142
136
|
# If player has reached the Witch
|
143
137
|
if player.x == MISSIONGAME::MAP_WIDTH && player.y == 1
|
144
|
-
ui.draw_frame({
|
138
|
+
ui.draw_frame({text: story.ending})
|
145
139
|
ui.new_line
|
146
140
|
running = false
|
147
141
|
end
|
data/lib/neworleans.rb
CHANGED
@@ -52,23 +52,23 @@ module MISSIONGAME
|
|
52
52
|
# Return map data in a display format
|
53
53
|
def get_map(args)
|
54
54
|
player = args[:player]
|
55
|
-
buffer =
|
55
|
+
buffer = []
|
56
56
|
x = 1
|
57
57
|
y = 1
|
58
58
|
@the_map.each do |row|
|
59
|
-
tmp_row =
|
59
|
+
tmp_row = []
|
60
60
|
x = 1
|
61
61
|
row.each do |col|
|
62
62
|
placed = 0
|
63
63
|
|
64
64
|
# Place WITCH
|
65
|
-
if x == MAP_WITCH_X
|
65
|
+
if x == MAP_WITCH_X && y == MAP_WITCH_Y
|
66
66
|
tmp_row << MAP_KEY_WITCH.colorize(color: :white, background: :red)
|
67
67
|
placed = 1
|
68
68
|
end
|
69
69
|
|
70
70
|
# If player is here, display them
|
71
|
-
if x == player.x
|
71
|
+
if x == player.x && y == player.y
|
72
72
|
tmp_row << MAP_KEY_PLAYER.colorize(color: :red, background: :white)
|
73
73
|
placed = 1
|
74
74
|
end
|
@@ -94,7 +94,7 @@ module MISSIONGAME
|
|
94
94
|
y += 1
|
95
95
|
end
|
96
96
|
|
97
|
-
|
97
|
+
buffer
|
98
98
|
end
|
99
99
|
|
100
100
|
# Check the current area on the map and describe it
|
@@ -107,16 +107,16 @@ module MISSIONGAME
|
|
107
107
|
current_area = @the_map[y - 1][x - 1]
|
108
108
|
case current_area
|
109
109
|
when MAP_KEY_TREE
|
110
|
-
ui.draw_frame({
|
110
|
+
ui.draw_frame({text: story.area_tree})
|
111
111
|
when MAP_KEY_WATER
|
112
|
-
ui.draw_frame({
|
112
|
+
ui.draw_frame({text: story.area_water})
|
113
113
|
when MAP_KEY_MOUNTAIN
|
114
|
-
ui.draw_frame({
|
114
|
+
ui.draw_frame({text: story.area_mountain})
|
115
115
|
when MAP_KEY_ENEMY
|
116
|
-
ui.draw_frame({
|
116
|
+
ui.draw_frame({text: story.area_enemy})
|
117
117
|
return false
|
118
118
|
end
|
119
|
-
|
119
|
+
true
|
120
120
|
end
|
121
121
|
|
122
122
|
private
|
@@ -127,11 +127,11 @@ module MISSIONGAME
|
|
127
127
|
|
128
128
|
# Create a random new orleans map
|
129
129
|
def generate_map
|
130
|
-
tmp_map =
|
130
|
+
tmp_map = []
|
131
131
|
|
132
132
|
# Step through MAX_HEIGHT times
|
133
133
|
MAP_HEIGHT.times do
|
134
|
-
tmp_row =
|
134
|
+
tmp_row = []
|
135
135
|
MAP_WIDTH.times { tmp_row << MAP_POSSIBLE_KEYS.sample }
|
136
136
|
|
137
137
|
# Add our assembled row to the map
|
data/lib/player.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Written by Webster Avosa
|
4
4
|
|
5
5
|
module MISSIONGAME
|
6
|
-
ENEMY_KILLED =
|
6
|
+
ENEMY_KILLED = "KILLED"
|
7
7
|
|
8
8
|
HIT_CHANCE_MODIFIER = 5
|
9
9
|
ATTACK_VALUE_MODIFIER = 1
|
@@ -37,7 +37,7 @@ module MISSIONGAME
|
|
37
37
|
@current_enemy = nil
|
38
38
|
@points = 0
|
39
39
|
@dead = 0
|
40
|
-
|
40
|
+
"Welcome %{name}! Let's play!"
|
41
41
|
end
|
42
42
|
|
43
43
|
# Player attacks enemy
|
@@ -49,32 +49,32 @@ module MISSIONGAME
|
|
49
49
|
# Does the player even hit the enemy?
|
50
50
|
# We could use a hit chance stat here, but since we don't have one,
|
51
51
|
# we'll just base it off the player/enemy stength discrepency.
|
52
|
-
ui.enemy_info({
|
53
|
-
ui.player_info({
|
52
|
+
ui.enemy_info({player: player})
|
53
|
+
ui.player_info({player: player})
|
54
54
|
str_diff = (player.str - enemy.str) * 2
|
55
55
|
hit_chance = rand(1...100) + str_diff + HIT_CHANCE_MODIFIER
|
56
56
|
|
57
|
-
if
|
57
|
+
if hit_chance > 50
|
58
58
|
# Determine value of the attack
|
59
59
|
attack_value = rand(1...player.str) + ATTACK_VALUE_MODIFIER
|
60
60
|
if attack_value > enemy.lives
|
61
|
-
print
|
62
|
-
|
63
|
-
|
64
|
-
print
|
65
|
-
|
61
|
+
print "You fought for your life and " + "hit".light_yellow + " " +
|
62
|
+
enemy.name.light_red + " for " +
|
63
|
+
attack_value.to_s.light_white + " damages, killing him!\n"
|
64
|
+
print "You gain " + enemy.points.to_s.light_white + " points.\n"
|
65
|
+
ENEMY_KILLED
|
66
66
|
else
|
67
|
-
print
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
print "You fought for your life and " + "hit".light_yellow + " " +
|
68
|
+
enemy.name.light_red + " for " +
|
69
|
+
attack_value.to_s.light_white + " damages, killing him!\n"
|
70
|
+
attack_value
|
71
71
|
end
|
72
72
|
else
|
73
|
-
print
|
74
|
-
|
75
|
-
|
73
|
+
print "You fought for your life and " + "missed".light_red + " " +
|
74
|
+
enemy.name + "!\n"
|
75
|
+
0
|
76
76
|
end
|
77
|
-
|
77
|
+
true
|
78
78
|
end
|
79
79
|
|
80
80
|
def move(args)
|
@@ -112,10 +112,10 @@ module MISSIONGAME
|
|
112
112
|
return false
|
113
113
|
end
|
114
114
|
end
|
115
|
-
|
116
|
-
|
115
|
+
if neworleans.check_area({player: self, ui: ui, story: story})
|
116
|
+
true
|
117
117
|
else
|
118
|
-
|
118
|
+
false
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
data/lib/story.rb
CHANGED
@@ -5,77 +5,77 @@
|
|
5
5
|
|
6
6
|
module MISSIONGAME
|
7
7
|
STORY_INTRO = [
|
8
|
-
|
8
|
+
"This is a game based on the movie series," + "The Originals".light_green +
|
9
9
|
", that has it's setting in New Orleans, Louisiana, United States.",
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
"Your mission is to meet " + "Davina Clare".light_white +
|
11
|
+
" a very powerful witch of New Orleans, and free her.",
|
12
|
+
"She is currently hostaged by the vampirers under the reign of Klaus Mikaelson.",
|
13
13
|
"She will provide you answers of all the questions you've always wanted to know.",
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
"",
|
15
|
+
"To get stated you will find a " + "map".light_white +
|
16
|
+
" in the Mystic Falls of Virginia.",
|
17
|
+
"Understanding the map will be key to reaching the destination"
|
18
18
|
]
|
19
19
|
|
20
20
|
STORY_AREA_TREE = [
|
21
|
-
|
21
|
+
"Take a selfie of you before encountering a bloody scene lol."
|
22
22
|
]
|
23
23
|
|
24
|
-
STORY_AREA_WATER = [
|
24
|
+
STORY_AREA_WATER = ["You just got close to Mississippi River."]
|
25
25
|
|
26
26
|
STORY_AREA_MOUNTAIN = [
|
27
|
-
|
27
|
+
"A cool place to get yourself a beer before continuing with your mission."
|
28
28
|
]
|
29
29
|
|
30
|
-
STORY_AREA_VILLAINE = [
|
30
|
+
STORY_AREA_VILLAINE = ["You encountered a hungry vampire!"]
|
31
31
|
|
32
32
|
STORY_PLAYER_DEAD = [
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
"You have been fed on.",
|
34
|
+
"",
|
35
|
+
"You failed to reach the witch. Please try again."
|
36
36
|
]
|
37
37
|
|
38
38
|
STORY_END = [
|
39
39
|
"You've reached Davina Clare, the powerful witch!".light_white,
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
"",
|
41
|
+
"She stares at you and utters",
|
42
|
+
"",
|
43
43
|
"I can't imagine the time has finally come".light_yellow,
|
44
|
-
|
44
|
+
"This is going to be the end of dominance by vampires becuase this is your kingdom"
|
45
45
|
.light_yellow,
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
"you are special and powerful.".light_yellow,
|
47
|
+
"",
|
48
|
+
"THANK YOU FOR PLAYING!".light_red,
|
49
|
+
""
|
50
50
|
]
|
51
51
|
|
52
52
|
class Story
|
53
53
|
def intro
|
54
|
-
|
54
|
+
STORY_INTRO
|
55
55
|
end
|
56
56
|
|
57
57
|
def ending
|
58
|
-
|
58
|
+
STORY_END
|
59
59
|
end
|
60
60
|
|
61
61
|
def area_tree
|
62
|
-
|
62
|
+
STORY_AREA_TREE
|
63
63
|
end
|
64
64
|
|
65
65
|
def area_water
|
66
|
-
|
66
|
+
STORY_AREA_WATER
|
67
67
|
end
|
68
68
|
|
69
69
|
def area_mountain
|
70
|
-
|
70
|
+
STORY_AREA_MOUNTAIN
|
71
71
|
end
|
72
72
|
|
73
73
|
def area_enemy
|
74
|
-
|
74
|
+
STORY_AREA_VILLAINE
|
75
75
|
end
|
76
76
|
|
77
77
|
def player_dead
|
78
|
-
|
78
|
+
STORY_PLAYER_DEAD
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
data/lib/ui.rb
CHANGED
@@ -24,70 +24,70 @@ module MISSIONGAME
|
|
24
24
|
def display_map(args)
|
25
25
|
map = args[:map]
|
26
26
|
new_line
|
27
|
-
draw_frame({
|
27
|
+
draw_frame({text: map})
|
28
28
|
new_line
|
29
29
|
end
|
30
30
|
|
31
31
|
def help
|
32
32
|
new_line
|
33
|
-
print
|
33
|
+
print "Valid Commands".light_green
|
34
34
|
new_line(2)
|
35
|
-
print UI_ARROW.light_yellow +
|
36
|
-
|
35
|
+
print UI_ARROW.light_yellow + " " + "right, r, ".light_white +
|
36
|
+
++" - Move right/east"
|
37
37
|
new_line
|
38
|
-
print UI_ARROW.light_yellow +
|
39
|
-
|
38
|
+
print UI_ARROW.light_yellow + " " + "backward, b, ".light_white +
|
39
|
+
++" - Move backward/south"
|
40
40
|
new_line
|
41
|
-
print UI_ARROW.light_yellow +
|
42
|
-
|
41
|
+
print UI_ARROW.light_yellow + " " + "left, l, ".light_white +
|
42
|
+
++" - Move left/west"
|
43
43
|
new_line
|
44
|
-
print UI_ARROW.light_yellow +
|
45
|
-
|
44
|
+
print UI_ARROW.light_yellow + " " + "forward, f, ".light_white +
|
45
|
+
++" - Move forward/north"
|
46
46
|
new_line
|
47
|
-
print UI_ARROW.light_yellow +
|
47
|
+
print UI_ARROW.light_yellow + " " + "map, m".light_white + " - Display map"
|
48
48
|
new_line
|
49
|
-
print UI_ARROW.light_yellow +
|
50
|
-
|
49
|
+
print UI_ARROW.light_yellow + " " + "where".light_white +
|
50
|
+
" - Describe current surroundings"
|
51
51
|
new_line
|
52
|
-
print UI_ARROW.light_yellow +
|
53
|
-
|
52
|
+
print UI_ARROW.light_yellow + " " + "name".light_white +
|
53
|
+
" - Reminds player their name"
|
54
54
|
new_line
|
55
|
-
print UI_ARROW.light_yellow +
|
56
|
-
|
55
|
+
print UI_ARROW.light_yellow + " " + "a, attack".light_white +
|
56
|
+
" - Attack (only in combat)"
|
57
57
|
new_line
|
58
|
-
print UI_ARROW.light_yellow +
|
59
|
-
|
58
|
+
print UI_ARROW.light_yellow + " " + "enemy".light_white +
|
59
|
+
" - Display information about your enemy"
|
60
60
|
new_line
|
61
|
-
print UI_ARROW.light_yellow +
|
62
|
-
|
63
|
-
|
61
|
+
print UI_ARROW.light_yellow + " " +
|
62
|
+
"points, score, status, info".light_white +
|
63
|
+
" - Display points (score)"
|
64
64
|
new_line
|
65
|
-
print UI_ARROW.light_yellow +
|
66
|
-
|
65
|
+
print UI_ARROW.light_yellow + " " + "clear, cls".light_white +
|
66
|
+
" - Clears the screen"
|
67
67
|
new_line
|
68
|
-
print UI_ARROW.light_yellow +
|
69
|
-
|
68
|
+
print UI_ARROW.light_yellow + " " + "q, quit, exit".light_white +
|
69
|
+
" - Quits the MISSIONGAME"
|
70
70
|
new_line
|
71
71
|
end
|
72
72
|
|
73
73
|
def points(args)
|
74
74
|
player = args[:player]
|
75
|
-
print
|
75
|
+
print "You currently have " + player.points.to_s.light_white + " points."
|
76
76
|
new_line
|
77
77
|
end
|
78
78
|
|
79
79
|
def enemy_info(args)
|
80
80
|
player = args[:player]
|
81
81
|
enemy = player.current_enemy
|
82
|
-
print enemy.name.light_red +
|
83
|
-
|
82
|
+
print enemy.name.light_red + " has " + enemy.str.to_s.light_white +
|
83
|
+
" strength and " + enemy.lives.to_s.light_white + " lives."
|
84
84
|
new_line
|
85
85
|
end
|
86
86
|
|
87
87
|
def player_info(args)
|
88
88
|
player = args[:player]
|
89
|
-
print
|
90
|
-
|
89
|
+
print "You have " + player.lives.to_s.light_white + " lives and have " +
|
90
|
+
player.points.to_s.light_white + " points."
|
91
91
|
new_line
|
92
92
|
end
|
93
93
|
|
@@ -97,40 +97,40 @@ module MISSIONGAME
|
|
97
97
|
match = false
|
98
98
|
answer = nil
|
99
99
|
while match == false
|
100
|
-
print UI_ARROW.red + question.light_white +
|
100
|
+
print UI_ARROW.red + question.light_white + " "
|
101
101
|
answer = gets.chomp
|
102
102
|
if answer.match(filter)
|
103
103
|
return answer
|
104
104
|
else
|
105
|
-
print
|
105
|
+
print "Sorry, please try again.".red
|
106
106
|
new_line
|
107
107
|
new_line
|
108
108
|
end
|
109
109
|
end
|
110
110
|
else
|
111
|
-
print "\u2712 ".red + question.light_white +
|
112
|
-
|
113
|
-
|
111
|
+
print "\u2712 ".red + question.light_white + " "
|
112
|
+
gets.chomp
|
113
|
+
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
117
|
# Display welcome
|
118
118
|
def welcome
|
119
|
-
text =
|
119
|
+
text = []
|
120
120
|
text <<
|
121
|
-
|
122
|
-
|
121
|
+
"This is a text adventure game inspired by the movie series ".white +
|
122
|
+
"The Originals".light_green
|
123
123
|
text <<
|
124
|
-
|
125
|
-
|
124
|
+
"Written by: ".white +
|
125
|
+
"Webster Avosa".light_green
|
126
126
|
text <<
|
127
|
-
|
128
|
-
|
129
|
-
text <<
|
127
|
+
"Copyright " + UI_COPYRIGHT +
|
128
|
+
" Webster Avosa, All Rights Reserved.".white
|
129
|
+
text << "Licensed under MIT.".white
|
130
130
|
text <<
|
131
|
-
|
132
|
-
|
133
|
-
draw_frame({
|
131
|
+
"Contact me ".white + UI_EMAIL.light_white +
|
132
|
+
" websterb17@gmail.com".white
|
133
|
+
draw_frame({text: text})
|
134
134
|
new_line
|
135
135
|
end
|
136
136
|
|
@@ -148,12 +148,12 @@ module MISSIONGAME
|
|
148
148
|
text.each do |t|
|
149
149
|
t_size = get_real_size(t)
|
150
150
|
draw_vert_frame_begin
|
151
|
-
if t.
|
151
|
+
if t.is_a?(Array)
|
152
152
|
t.each { |s| print s }
|
153
153
|
else
|
154
154
|
print t
|
155
155
|
end
|
156
|
-
(width - (t_size + 4)).times { print
|
156
|
+
(width - (t_size + 4)).times { print " " }
|
157
157
|
draw_vert_frame_end
|
158
158
|
new_line
|
159
159
|
end
|
@@ -161,22 +161,22 @@ module MISSIONGAME
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def display_version
|
164
|
-
puts
|
164
|
+
puts " Version " + MISSIONMISSIONGAME_VERSION.light_white
|
165
165
|
new_line
|
166
166
|
end
|
167
167
|
|
168
168
|
def not_found
|
169
|
-
print
|
170
|
-
|
169
|
+
print "Command not understood. Use the " + "help or h".red +
|
170
|
+
" to see available commands.".light_white
|
171
171
|
new_line
|
172
172
|
end
|
173
173
|
|
174
174
|
def show_location(args)
|
175
175
|
player = args[:player]
|
176
|
-
print
|
177
|
-
|
176
|
+
print "You are currently on row " + player.y.to_s.light_white +
|
177
|
+
", column " + player.x.to_s.light_white
|
178
178
|
new_line
|
179
|
-
print
|
179
|
+
print "Use the " + "map".light_white + " command to see the map."
|
180
180
|
new_line
|
181
181
|
end
|
182
182
|
|
@@ -185,31 +185,31 @@ module MISSIONGAME
|
|
185
185
|
end
|
186
186
|
|
187
187
|
def not_in_combat
|
188
|
-
puts
|
188
|
+
puts "No vampire has attacked you just yet."
|
189
189
|
end
|
190
190
|
|
191
191
|
def quit
|
192
192
|
new_line
|
193
|
-
print
|
194
|
-
|
193
|
+
print "You abandoned your journey to getting answers to all of your many unaswered questions."
|
194
|
+
.red
|
195
195
|
new_line(2)
|
196
196
|
end
|
197
197
|
|
198
198
|
def get_cmd
|
199
|
-
print
|
200
|
-
print "\u2712 ".red +
|
201
|
-
|
199
|
+
print "Type ".white + "help".light_white + " for possible commands.\n"
|
200
|
+
print "\u2712 ".red + "Your command? ".light_white
|
201
|
+
gets.chomp.downcase
|
202
202
|
end
|
203
203
|
|
204
204
|
def out_of_bounds
|
205
|
-
print
|
205
|
+
print "x".red + " Requested move out of bounds."
|
206
206
|
new_line
|
207
207
|
end
|
208
208
|
|
209
209
|
def display_name(args)
|
210
210
|
player = args[:player]
|
211
|
-
print
|
212
|
-
|
211
|
+
print "You are " + player.name.light_white +
|
212
|
+
". Have you forgotten your own name?"
|
213
213
|
new_line
|
214
214
|
end
|
215
215
|
|
@@ -223,18 +223,18 @@ module MISSIONGAME
|
|
223
223
|
|
224
224
|
def enemy_greet(args)
|
225
225
|
enemy = args[:enemy]
|
226
|
-
print enemy.name.light_white +
|
226
|
+
print enemy.name.light_white + " attacks!"
|
227
227
|
new_line
|
228
228
|
end
|
229
229
|
|
230
230
|
private
|
231
231
|
|
232
232
|
def draw_vert_frame_begin
|
233
|
-
print UI_FRAME_VERTICAL.yellow +
|
233
|
+
print UI_FRAME_VERTICAL.yellow + " "
|
234
234
|
end
|
235
235
|
|
236
236
|
def draw_vert_frame_end
|
237
|
-
print
|
237
|
+
print " " + UI_FRAME_VERTICAL.yellow
|
238
238
|
end
|
239
239
|
|
240
240
|
def draw_top_frame(width)
|
@@ -253,7 +253,7 @@ module MISSIONGAME
|
|
253
253
|
|
254
254
|
# Returns actual length of text accounting for UTF-8 and ANSI
|
255
255
|
def get_real_size(text)
|
256
|
-
text.
|
256
|
+
text.is_a?(Array) ? text.size : text.uncolorize.size
|
257
257
|
end
|
258
258
|
|
259
259
|
# Returns size of longest string in array
|
data/mission_game.rb
CHANGED
@@ -2,40 +2,40 @@
|
|
2
2
|
#
|
3
3
|
# Written by Webster Avosa
|
4
4
|
|
5
|
-
GAME_VERSION =
|
5
|
+
GAME_VERSION = "1.00"
|
6
6
|
|
7
7
|
begin
|
8
|
-
require
|
9
|
-
require
|
8
|
+
require "colorize"
|
9
|
+
require "pry"
|
10
10
|
rescue LoadError
|
11
11
|
puts
|
12
12
|
puts "This game requires the 'colorize' and 'pry' gem to run."
|
13
13
|
puts
|
14
|
-
puts
|
15
|
-
puts
|
14
|
+
puts "Installation Instructions"
|
15
|
+
puts "-------------------------"
|
16
16
|
puts
|
17
|
-
puts
|
18
|
-
puts
|
17
|
+
puts "Debian/Ubuntu Linux:"
|
18
|
+
puts " sudo apt install ruby-colorize && sudo apt install pry"
|
19
19
|
puts
|
20
|
-
puts
|
21
|
-
puts
|
20
|
+
puts "Other Linux Distros:"
|
21
|
+
puts " gem install colorize && gem install pry"
|
22
22
|
puts
|
23
|
-
puts
|
24
|
-
puts
|
23
|
+
puts "Windows:"
|
24
|
+
puts " gem install colorize && gem install pry"
|
25
25
|
puts
|
26
|
-
puts
|
27
|
-
puts
|
26
|
+
puts "macOS:"
|
27
|
+
puts " gem install colorize && gem install pry"
|
28
28
|
puts
|
29
29
|
puts
|
30
30
|
exit
|
31
31
|
end
|
32
32
|
|
33
33
|
# Require libraries
|
34
|
-
load
|
35
|
-
load
|
36
|
-
load
|
37
|
-
load
|
38
|
-
load
|
34
|
+
load "lib/ui.rb"
|
35
|
+
load "lib/neworleans.rb"
|
36
|
+
load "lib/player.rb"
|
37
|
+
load "lib/story.rb"
|
38
|
+
load "lib/enemy.rb"
|
39
39
|
|
40
40
|
# Start
|
41
|
-
load
|
41
|
+
load "lib/main.rb"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mission_game
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Webster Avosa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|