1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218[<RequireQualifiedAccess>]
module Duets.Cli.Text.Command
open Duets.Common
open Duets.Entities
let prompt = Styles.faded ">"
let commonPrompt date dayMoment attributes =
$"""{Generic.infoBar date dayMoment attributes}
{Styles.prompt "What do you want to do? Type 'help' if you're lost"}"""
let adjustDrumsDescription =
"Allows you to adjust the drum settings. Doesn't do much, but it's important to play comfortably"
let bassSoloDescription =
"Allows you to play a bass solo and remind people that you are on stage"
let composeSongDescription = "Allows you to create a new song"
let disabledNotEnoughEnergy _ =
Styles.error "You don't have enough energy to do that. Try to rest first"
let disabledNotEnoughHealth _ =
Styles.error
"You don't have enough health to do that. Try to rest or go to a doctor"
let disabledNotEnoughMood _ =
Styles.error
"You don't really feel like doing that... Maybe something more interesting might spark your interest"
let drumSoloDescription =
"Allows you to play a drum solo and show the world that the drummer can also rock"
let editAlbumNameDescription =
"Allows you to edit the name of an album you previously recorded but did not release"
let helpDescription = "Here are all the commands you can execute right now:"
let discardSongDescription =
"Prompts you for a song to discard from the list of unfinished songs"
let giveSpeechDescription =
"Allows you to give a speech to the crowd. Make sure you're actually good with words, otherwise people might not understand you"
let playDescription = "Allows you to choose a song to play in the concert"
let dedicateSongDescription =
"Dedicates a song and then plays it. Might give you a little boost in points as long as you don't overdo it"
let getOffStageDescription =
"Moves you to the backstage, where you can decide if you want to do an encore (if possible) or finish the concert for good"
let greetAudienceDescription =
"Allows you to be a polite musician and say hello before blasting the crowd's ears"
let doEncoreDescription = "Moves you back to the stage where you can play more!"
let finishConcertDescription = "Finishes the concert"
let faceBandDescription = "Makes you look towards your band, isn't that cool?"
let faceCrowdDescription = "Makes you look towards the crowd again"
let finishSongDescription =
"Prompts your for a song to finish from the list of unfinished songs"
let fireMemberDescription = "Allows you to fire a member of your band"
let guitarSoloDescription =
"Allows you to perform a guitar solo and elevate your ego to a higher dimension"
let hireMemberDescription = "Allows you to hire a new member for your band"
let improveSongDescription =
"Prompts you for a song to improve a previously composed song"
let listMembersDescription = "Lists all current and past members of your band"
let lookDescription = "Shows all the objects you have around you"
let lookExit exit =
$"""There's also an exit to {Styles.place exit} ({Styles.information "out"})"""
let lookNoObjectsAround = "There are no objects around you."
let lookVisibleObjectsPrefix = "You can see:"
let outDescription = "Exits the current place"
let exitDescription = "Exits the game saving the progress"
let makeCrowdSingDescription =
"Allows you to try to make the crowd sing along a chant or a song, so get your voice ready"
let phoneDescription =
"Opens your phone where you can check statistics and manage your bank"
let practiceSongDescription =
"Prompts you for a song to practice, which improves the quality when performing the song live"
let putMicOnStandDescription = "Allows you to put the mic back on the stand"
let releaseAlbumDescription =
"Allows you to release an album you previously recorded but did not release"
let takeMicDescription =
"Allows you to take the mic from the stand and move freely on the stage"
let talkDescription =
$"""Allows you to talk with a character in the world. Use as {Styles.information "talk to {name}"}. You can reference characters by their full name or just their first name"""
let talkInvalidInput =
Styles.error
$"""I didn't quite catch that. Make sure you are referencing characters by their first or full name with {Styles.information "talk to {name}"}"""
let talkNpcNotFound name =
Styles.error $"There are no characters named '{name}' around"
let talkNothing = "Nothing"
let tuneInstrumentDescription =
"Tunes your instrument, which looks cool sometimes"
let waitDescription = "Waits for one day moment without doing anything"
let waitInvalidTimes input =
Styles.error $"The given amount '{input}' is not valid. Try a real number"
let waitResult date dayMoment =
$"""You waited and it's now {Generic.dayMomentName dayMoment |> String.lowercase |> Styles.highlight} on the {Date.simple date |> Styles.highlight}"""
let sleepDescription =
"Allows you to get some sleep and restore your energy and health"
let exerciseDescription =
"Allows you to exercise, improve your fitness skills and restore your health"
let playGameDescription =
"Allows you to play a game like darts or videogames through a console"
let watchTvDescription = "Allows you to watch TV and restore your mood"
let orderDescription =
$"""Allows you to order an item from the establishment's menu. Use either as {Styles.information "order {item name}"} or use without arguments to select interactively"""
let buyDescription =
$"""Allows you to buy an item from the shop. Use either as {Styles.information "buy {item name}"} or use without arguments to select interactively"""
let buyCarDescription = "Allows you to buy a car from the dealer."
let seeMenuDescription =
"Displays the available items that can be bought in this establishment"
let inventoryDescription = "Displays the items that you are currently carrying"
let drinkDescription =
$"""Allows you to drink a given item. Use as {Styles.information "drink {item name}"}"""
let eatDescription =
$"""Allows you to eat a given item. Use as {Styles.information "eat {item name}"}"""
let readDescription =
$"""Allows you to read a book. Use as {Styles.information "read {book name}"}"""
let rideDescription verb =
$"""Allows you to ride a vehicle. Use as {Styles.information $"{verb} {{vehicle name}}"}"""
let putUsage = $"""{Styles.information "put {item name} in {storage name}"}"""
let putDescription =
$"Allows you to place an item in a shelf or some form of storage. Use as: {putUsage}"
let openDescription =
"Allows you to peek at the contents of a shelf or some other form of storage and get an item out of it"
let meDescription = "Shows information about your character"
let private meItem header value =
$"""- {Styles.header header}: {value}"""
let meName name = meItem "Name" name
let meBirthdayAge birthday age =
meItem "Birthday" $"{Date.simple birthday} ({age} years old)"
let wrongUsage usageSample =
Styles.error $"Can't recognize that. Use as: {usageSample}"
let mapDescription =
"Shows all the places in the current city that you can travel to"
let mapChoosePlaceTypePrompt =
Styles.prompt "Which type of place do you want to travel to?"
let mapChoosePlace = Styles.prompt "Which place do you want to travel to?"
let mapCurrentCity cityId =
Styles.header
$"""You are currently in {Generic.cityName cityId |> Styles.highlight}"""
let mapTip =
Styles.faded
"Tip: In order to travel anywhere outside this city, use the airport to fly to another city"
let boardPlaneDescription flight =
$"Boards your plane to {Generic.cityName flight.Destination}"
let passSecurityCheckDescription = "Allows you to enter the boarding gate"
let waitForLandingDescription =
"Makes you wait until the plane lands and lets you enter the destination airport"
let startConcertDescription = "Starts the concert that you scheduled here"
let workDescription (job: Job) =
$"Starts a shift in your work as {Career.name job}. It will take {Career.shiftDurationDescription job.CurrentStage.Schedule}"