957 lines
26 KiB
Go
957 lines
26 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand/v2"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"bufio"
|
|
_ "embed"
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
// =-=-=-=-=-= These are variables for embeding files as hardcoded strings - dont remove them, they just LOOK like comments =-=-=-=-=-=-=
|
|
|
|
//go:embed menu.txt
|
|
var menu string
|
|
|
|
//go:embed levels/wifey.txt
|
|
var wifey string
|
|
|
|
//go:embed levels/wife-fucked.txt
|
|
var wifeyFucked string
|
|
|
|
//go:embed officers.txt
|
|
var officers string
|
|
|
|
//go:embed intro.txt
|
|
var intro string
|
|
|
|
//go:embed levels/propertyRoom.txt
|
|
var propertyRoom string
|
|
|
|
//go:embed levels/redRoom.txt
|
|
var redRoom string
|
|
|
|
//go:embed levels/hitTheStreets.txt
|
|
var hitTheStreets string
|
|
|
|
//go:embed levels/doctorsRoom.txt
|
|
var doctorsRoom string
|
|
|
|
//go:embed levels/randomEvent1.txt
|
|
var randomEvent1 string
|
|
|
|
//go:embed levels/randomEvent2.txt
|
|
var randomEvent2 string
|
|
|
|
//go:embed levels/randomEvent3.txt
|
|
var randomEvent3 string
|
|
|
|
//go:embed levels/randomEvent4.txt
|
|
var randomEvent4 string
|
|
|
|
//go:embed levels/randomEvent5.txt
|
|
var randomEvent5 string
|
|
|
|
// =-=-=-=-=-=-= End File String Embeds =-=-=-=-=-=-=
|
|
|
|
// Game Variables - Core Gameplay
|
|
var stats string // variable for stats generation output
|
|
var statsCombat string // variable used for combat stats generation during fights
|
|
var PlayerName string // player's name...
|
|
var condoms = 0 // its better to have them and not need them
|
|
var diseases = 0 // what happens if you don't have connies
|
|
var money = 1800 // not specific currency
|
|
var days = 30 // total number of days (default 30)
|
|
var experience = 0 // your experience from combat battle fights (starts at 0)
|
|
var level = 1 // your level from combat battle fights (starts at 1)
|
|
var whores = 0 // number of sex slaves you own
|
|
var cocaines = 0 // cocaine in 1/gram units
|
|
var fentanyl = 0 // fentanyl in 500 miligram units
|
|
var LSD = 0 // LSD in pills
|
|
var bumfights = 25 // default number of homeless bum fights per day
|
|
const bumfightsTotal = 25 // total bumfights used to reset bum fights per day
|
|
const taxes = 500 // skimming off the top
|
|
var offspring = 0 // number of children you have by default
|
|
var childsupport = 0 // default 0 but changes if you get a hoe preggers
|
|
var playerHP = 200 // default hit points for the player
|
|
var paragonRank = 0 // default goodness rank
|
|
var renegadeRank = 0 // default evil rank
|
|
|
|
// Props to Lipgloss!
|
|
// These are colour and border styles for the game dialogs.
|
|
|
|
var border = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
BorderForeground(lipgloss.Color("63"))
|
|
|
|
var titleStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
BorderForeground(lipgloss.Color("#f20b0bff")).
|
|
Foreground(lipgloss.Color("#ffffffff ")).
|
|
Background(lipgloss.Color("#f20b0bff"))
|
|
|
|
var storyStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
Width(75).
|
|
BorderForeground(lipgloss.Color("228")).
|
|
BorderBackground(lipgloss.Color("#0000FF")).
|
|
Foreground(lipgloss.Color("#ffffffff ")).
|
|
Background(lipgloss.Color("#0000FF"))
|
|
|
|
var propertyStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
Width(75).
|
|
BorderForeground(lipgloss.Color("228")).
|
|
BorderBackground(lipgloss.Color("#5023aaff")).
|
|
Foreground(lipgloss.Color("#ffffffff ")).
|
|
Background(lipgloss.Color("#5023aaff"))
|
|
|
|
var slutStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
Width(75).
|
|
BorderForeground(lipgloss.Color("228")).
|
|
BorderBackground(lipgloss.Color("#ff00a2ff")).
|
|
Background(lipgloss.Color("#ffffffff ")).
|
|
Foreground(lipgloss.Color("#ff00a2ff"))
|
|
|
|
var eventStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
Width(75).
|
|
BorderForeground(lipgloss.Color("#0d7021ff")).
|
|
BorderBackground(lipgloss.Color("#0d7021ff")).
|
|
Background(lipgloss.Color("#0d7021ff ")).
|
|
Foreground(lipgloss.Color("#ffffffff"))
|
|
|
|
var statsStyle = lipgloss.NewStyle().
|
|
BorderStyle(lipgloss.NormalBorder()).
|
|
Foreground(lipgloss.Color("#ffffffff ")).
|
|
Background(lipgloss.Color("#2a2a60ff"))
|
|
|
|
var red = lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#f20b0bff"))
|
|
|
|
var green = lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#13820bff "))
|
|
|
|
// why the fuck does golang not do this - should work on win10/11 (yes it does support ansi escape codes *now*)
|
|
func ClearScreen() {
|
|
fmt.Print("\033[H\033[2J") // this does appear to work on windows pe liveiso from win11 (tested in qemu)
|
|
}
|
|
|
|
// Cool stylized Enter key masher
|
|
func MashEnterKey() {
|
|
fmt.Println(statsStyle.Render("Mash the 'Enter' key!"))
|
|
bufio.NewReader(os.Stdin).ReadBytes('\n')
|
|
}
|
|
|
|
func breakRoom() {
|
|
fmt.Println("Not Implemented")
|
|
MainMachine()
|
|
}
|
|
|
|
func RandomEvent() {
|
|
eventSelection := rand.IntN(5)
|
|
switch eventSelection {
|
|
case 1:
|
|
outerLoop1:
|
|
for {
|
|
fmt.Println(eventStyle.Render(randomEvent1))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
choice := 0
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
renegadeRank = renegadeRank + 1
|
|
paragonRank = paragonRank - 1
|
|
break outerLoop1
|
|
case 2:
|
|
paragonRank = paragonRank + 1
|
|
renegadeRank = renegadeRank - 1
|
|
break outerLoop1
|
|
default:
|
|
fmt.Println("Invalid Choice, Fool!")
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
case 2:
|
|
outerLoop2:
|
|
for {
|
|
fmt.Println(eventStyle.Render(randomEvent2))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
choice := 0
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
renegadeRank = renegadeRank + 1
|
|
paragonRank = paragonRank - 1
|
|
money = money + 500
|
|
cocaines = cocaines + 2
|
|
break outerLoop2
|
|
case 2:
|
|
paragonRank = paragonRank + 1
|
|
renegadeRank = renegadeRank - 1
|
|
break outerLoop2
|
|
default:
|
|
fmt.Println("Invalid Choice, Fool!")
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
case 3:
|
|
outerLoop3:
|
|
for {
|
|
fmt.Println(eventStyle.Render(randomEvent3))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
choice := 0
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
renegadeRank = renegadeRank + 2
|
|
paragonRank = paragonRank - 2
|
|
break outerLoop3
|
|
case 2:
|
|
renegadeRank = renegadeRank + 1
|
|
paragonRank = paragonRank - 1
|
|
break outerLoop3
|
|
case 3:
|
|
paragonRank = paragonRank + 1
|
|
renegadeRank = renegadeRank - 1
|
|
break outerLoop3
|
|
case 4:
|
|
paragonRank = paragonRank + 2
|
|
renegadeRank = renegadeRank - 2
|
|
break outerLoop3
|
|
default:
|
|
fmt.Println("Invalid Choice, Fool!")
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
case 4:
|
|
outerLoop4:
|
|
for {
|
|
fmt.Println(eventStyle.Render(randomEvent4))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
choice := 0
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
renegadeRank = renegadeRank + 1
|
|
paragonRank = paragonRank - 1
|
|
fentanyl = fentanyl + 2
|
|
break outerLoop4
|
|
case 2:
|
|
paragonRank = paragonRank + 2
|
|
renegadeRank = renegadeRank - 2
|
|
break outerLoop4
|
|
default:
|
|
fmt.Println("Invalid Choice, Fool!")
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
case 5:
|
|
outerLoop5:
|
|
for {
|
|
fmt.Println(eventStyle.Render(randomEvent5))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
choice := 0
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
renegadeRank = renegadeRank + 1
|
|
paragonRank = paragonRank - 1
|
|
money = money + 1000
|
|
break outerLoop5
|
|
case 2:
|
|
paragonRank = paragonRank + 1
|
|
renegadeRank = renegadeRank - 1
|
|
break outerLoop5
|
|
default:
|
|
fmt.Println("Invalid Choice, Fool!")
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func HitTheStreets() {
|
|
ClearScreen()
|
|
choice := ""
|
|
bumHP := 100
|
|
i := 1
|
|
hitLoop:
|
|
for bumHP >= 0 {
|
|
for i > 0 {
|
|
ClearScreen()
|
|
switch paragonRank {
|
|
case 10:
|
|
isThereRandomGoodPunishment := rand.IntN(3)
|
|
switch isThereRandomGoodPunishment {
|
|
case 1:
|
|
gangsterShot := 100 * level
|
|
fmt.Println(eventStyle.Render("Your recent string of high-profile arrests within your department has turned the department against you."))
|
|
fmt.Println("")
|
|
MashEnterKey()
|
|
fmt.Println(eventStyle.Render("A gang of drug dealers are unleashed upon you by Captain Grimstead himself!"))
|
|
fmt.Println(red.Render("You get shot for "), gangsterShot, red.Render(" HP!"))
|
|
playerHP = playerHP - gangsterShot
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
ClearScreen()
|
|
CombatStats()
|
|
fmt.Println(storyStyle.Render(hitTheStreets))
|
|
fmt.Println(statsStyle.Render(statsCombat))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch {
|
|
case strings.ToUpper(choice) == "B":
|
|
ClearScreen()
|
|
isThereRandomEvent := rand.IntN(6)
|
|
switch {
|
|
case isThereRandomEvent == 1:
|
|
RandomEvent()
|
|
}
|
|
bumHP = 100 * level
|
|
enemyList := []string{"homeless piece of shit", "drug addled homeless bum", "shit smeared homeless bum", "crazy homeless person"}
|
|
enemyNameGen := enemyList[rand.IntN(len(enemyList))]
|
|
enemyName := strings.Clone(enemyNameGen)
|
|
attackList := []string{"a broken whiskey bottle!", "a tinfoil hat!", "a rusty heroine needle!", "his crusty dick!", "a soiled newspaper!",
|
|
"a crack pipe!", "moldy bread!"}
|
|
outerLoop:
|
|
for bumHP >= 0 {
|
|
ClearScreen()
|
|
fmt.Println(storyStyle.Render("Bum Fight!"))
|
|
fmt.Println()
|
|
fmt.Println("You are staring at a ", red.Render(enemyName), "with", bumHP, " HP")
|
|
fmt.Println("")
|
|
fmt.Println("What do you do?")
|
|
fmt.Println("")
|
|
CombatStats()
|
|
fmt.Println(border.Render(statsCombat))
|
|
fmt.Println("(F)ight")
|
|
fmt.Println("(G)o back to HQ")
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
homelessFight := ""
|
|
fmt.Scan(&homelessFight)
|
|
switch {
|
|
case strings.ToUpper(homelessFight) == "F":
|
|
chance := rand.IntN(100)
|
|
switch {
|
|
case chance > 40:
|
|
attack := 40 // default attack power
|
|
|
|
switch {
|
|
case fentanyl <= 0:
|
|
attack = 40 * level
|
|
default:
|
|
buffs := attack * fentanyl // default attack power multiplied by amount of fentanyl
|
|
modifier := level * 2 // double the damage based on level
|
|
attack = attack + buffs + modifier //
|
|
}
|
|
|
|
bumHP = bumHP - attack // attack homeless person
|
|
ClearScreen()
|
|
fmt.Println(red.Render("You smash the bum for "), attack, "hit points!")
|
|
fmt.Println("The bum has ", bumHP, " HP left")
|
|
MashEnterKey()
|
|
|
|
switch {
|
|
|
|
case bumHP <= 0: // what happens if homeless person HP goes to or below 0
|
|
money = money*level + 300
|
|
bumfights = bumfights - 1
|
|
experienceGain := cocaines * 100
|
|
levelGain := level * 100
|
|
experience = experience + levelGain + experienceGain + levelGain
|
|
break outerLoop
|
|
}
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("You missed, he dodged your attack!"))
|
|
fmt.Println()
|
|
homelessAttack := 20
|
|
playerHP = playerHP - homelessAttack
|
|
randomAttack := attackList[rand.IntN(len(attackList))]
|
|
fmt.Println(red.Render("The "), enemyName, red.Render("attacks you with "), randomAttack, red.Render(" for"), homelessAttack, red.Render(" HP"))
|
|
fmt.Println("Perhaps you should lay off the donuts...")
|
|
switch {
|
|
case playerHP <= 0:
|
|
bumHP = 100
|
|
break hitLoop
|
|
}
|
|
MashEnterKey()
|
|
}
|
|
default:
|
|
fmt.Println("You go back to HQ.")
|
|
bumfights = bumfights - 1
|
|
bumHP = 0
|
|
MashEnterKey()
|
|
MainMachine()
|
|
}
|
|
}
|
|
bumfights = bumfights - 1
|
|
case strings.ToUpper(choice) == "R":
|
|
MainMachine()
|
|
}
|
|
}
|
|
MainMachine()
|
|
}
|
|
}
|
|
|
|
func RedRoom() {
|
|
ClearScreen()
|
|
i := 0
|
|
choice := ""
|
|
for i < 1 {
|
|
fmt.Println(slutStyle.Render(redRoom))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch {
|
|
case strings.ToUpper(choice) == "B": // buy whore
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("Sex Slave Menu"))
|
|
fmt.Println("Price: ", red.Render("$2000 per whore."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy one sex slave (Y/N)?")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
slavePurchase := ""
|
|
fmt.Scan(&slavePurchase)
|
|
switch {
|
|
case strings.ToUpper(slavePurchase) == "Y":
|
|
switch {
|
|
case money >= 2000:
|
|
whores = whores + 1
|
|
money = money - 2000
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("You just purchased 1 whore to be a sex slave!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "P": // Buy Connies (Condoms)
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("$10 to buy a five pack of connies?"))
|
|
fmt.Println("Price: ", red.Render("$10 for a five pack."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy five connies (Y/N)?")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
lapPurchase := ""
|
|
fmt.Scan(&lapPurchase)
|
|
switch {
|
|
case strings.ToUpper(lapPurchase) == "Y":
|
|
switch {
|
|
case money >= 10:
|
|
money = money - 10
|
|
condoms = condoms + 5
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("You just purchased a five pack of connies."))
|
|
fmt.Println()
|
|
MashEnterKey()
|
|
ClearScreen()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
ClearScreen()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "L": // Get Lap Dance
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("Get a fucking lap dance!"))
|
|
fmt.Println("Price: ", red.Render("$20 for a 3 minute song."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy a lap dance (Y/N)?")
|
|
lapPurchase := ""
|
|
fmt.Scan(&lapPurchase)
|
|
switch {
|
|
case strings.ToUpper(lapPurchase) == "Y":
|
|
money = money - 20
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("That slut grinds on your dick to the song 'I like it that way' by Backstreet Boys."))
|
|
fmt.Println()
|
|
fmt.Println("That shit was so hot, you shot a hot load in your pants.")
|
|
playerHP = playerHP + 100
|
|
MashEnterKey()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "F": // Fuck Whore
|
|
ClearScreen()
|
|
fmt.Println(border.Render("Get your dick wet at OPP McDick's"))
|
|
fmt.Println("Price: ", red.Render("$100 to fuck a dirty whore for an hour."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy an hour with a whore (Y/N)?")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fuckPurchase := ""
|
|
fmt.Scan(&fuckPurchase)
|
|
switch {
|
|
case strings.ToUpper(fuckPurchase) == "Y":
|
|
switch {
|
|
case money >= 100:
|
|
money = money - 100
|
|
playerHP = playerHP + 200
|
|
switch {
|
|
case condoms == 0:
|
|
stdChance := rand.IntN(100)
|
|
preggoChance := rand.IntN(100)
|
|
switch {
|
|
case renegadeRank >= 10:
|
|
stdChance = 100
|
|
preggoChance = 25
|
|
}
|
|
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render(wifeyFucked))
|
|
fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!")
|
|
MashEnterKey()
|
|
|
|
switch { // checking your std chance
|
|
case stdChance <= 50:
|
|
diseases = diseases + 1
|
|
ClearScreen()
|
|
fmt.Println(red.Render("Uh oh!"))
|
|
fmt.Println(slutStyle.Render("You got a disease!"))
|
|
MashEnterKey()
|
|
}
|
|
|
|
switch { // checking your chance at having a kid
|
|
case preggoChance <= 25:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("Uh oh!"))
|
|
fmt.Println(slutStyle.Render("You got the whore pregnant! Do you want to sell the kid to Pakistan for $500?"))
|
|
fmt.Print(green.Render(PlayerName), "(Y/N) >")
|
|
soccerBalls := ""
|
|
fmt.Scan(&soccerBalls)
|
|
switch {
|
|
case strings.ToUpper(soccerBalls) == "Y":
|
|
money = money + 500
|
|
fmt.Println(red.Render("Bonus! You just made $500... The kid is great at sewing soccer balls!"))
|
|
MashEnterKey()
|
|
default:
|
|
fmt.Println(red.Render("You have too much of a heart to sell your kid. Now you have to pay child support!"))
|
|
offspring = offspring + 1
|
|
fmt.Println("")
|
|
fmt.Println(red.Render("Fuck!"))
|
|
MashEnterKey()
|
|
}
|
|
}
|
|
default:
|
|
condoms = condoms - 1
|
|
}
|
|
ClearScreen()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "R": // Return to HQ
|
|
i = 1
|
|
|
|
default:
|
|
i = 0 // If any other input is given, loop again
|
|
}
|
|
}
|
|
}
|
|
|
|
func DoctorsOffice() {
|
|
ClearScreen()
|
|
i := 0
|
|
choice := ""
|
|
for i < 1 {
|
|
ClearScreen()
|
|
fmt.Println(storyStyle.Render(doctorsRoom))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch {
|
|
case strings.ToUpper(choice) == "C":
|
|
ClearScreen()
|
|
fmt.Println(storyStyle.Render("Doctor's Miracle STD/STI Cures"))
|
|
fmt.Println()
|
|
fmt.Println("You encounter ", red.Render("the doctor."))
|
|
fmt.Println("")
|
|
fmt.Println("Do you want to cure you or your 'friends' STD/STI for $100?")
|
|
fmt.Println("")
|
|
fmt.Println("(Y)es")
|
|
fmt.Println("(N)o")
|
|
stdCure := ""
|
|
fmt.Scan(&stdCure)
|
|
switch {
|
|
case strings.ToUpper(stdCure) == "Y":
|
|
switch {
|
|
case money >= 100:
|
|
fmt.Println("You pay the doctor $100 and you and/or your 'friends' are cured.")
|
|
money = money - 100
|
|
diseases = 0
|
|
i = 1
|
|
MashEnterKey()
|
|
default:
|
|
fmt.Println("You're too poor to cure your diseases.")
|
|
i = 1
|
|
switch {
|
|
case diseases >= 1:
|
|
fmt.Println("But you still have a diseases.")
|
|
MashEnterKey()
|
|
default:
|
|
fmt.Println()
|
|
MashEnterKey()
|
|
}
|
|
|
|
}
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println("No cure for you. I guess.")
|
|
switch {
|
|
case diseases > 0:
|
|
fmt.Println("But you still have a disease.")
|
|
MashEnterKey()
|
|
i = 1
|
|
default:
|
|
i = 1
|
|
}
|
|
i = 0
|
|
}
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println("You head back to HQ.")
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
i = 1
|
|
}
|
|
MainMachine()
|
|
}
|
|
|
|
func PropertyRoom() {
|
|
ClearScreen()
|
|
i := 0
|
|
choice := ""
|
|
for i < 1 {
|
|
fmt.Println(propertyStyle.Render(propertyRoom))
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch {
|
|
case strings.ToUpper(choice) == "C": // Cocaine Menu
|
|
ClearScreen()
|
|
fmt.Println(propertyStyle.Render("Cocaine Menu"))
|
|
fmt.Println("Price: ", red.Render("$1000 per gram."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy one gram (Y/N)?")
|
|
cokePurchase := ""
|
|
fmt.Scan(&cokePurchase)
|
|
switch { // Check purchase confirmation (Y/N)
|
|
case strings.ToUpper(cokePurchase) == "Y":
|
|
switch { // Check money
|
|
case money >= 1000:
|
|
switch {
|
|
case renegadeRank <= 10:
|
|
cocaines = cocaines + 2
|
|
fmt.Println("You just purchased 1 gram of coke! Here is one on the house!")
|
|
default:
|
|
cocaines = cocaines + 1
|
|
fmt.Println("You just purchased 1 gram of coke!")
|
|
|
|
}
|
|
money = money - 1000
|
|
ClearScreen()
|
|
|
|
MashEnterKey()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "L": // LSD Menu
|
|
ClearScreen()
|
|
fmt.Println(propertyStyle.Render("LSD Menu"))
|
|
fmt.Println("Price: ", red.Render("$100 for five tabs."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy five tabs (Y/N)?")
|
|
LSDPurchase := ""
|
|
fmt.Scan(&LSDPurchase)
|
|
switch { // Check purchase confirmation (Y/N)
|
|
case strings.ToUpper(LSDPurchase) == "Y":
|
|
switch {
|
|
case money >= 100: // When money is at least 100 do the following
|
|
switch {
|
|
case renegadeRank <= 10:
|
|
LSD = LSD + 10
|
|
fmt.Println("You just purchased 5 tabs of LSD! I'm tossing in a free sample!")
|
|
default:
|
|
LSD = LSD + 5
|
|
fmt.Println("You just purchased 5 tabs of LSD! Fuck yeah!")
|
|
}
|
|
money = money - 100
|
|
ClearScreen()
|
|
|
|
MashEnterKey()
|
|
i = 0
|
|
default: // otherwise do this when the user doesn't have 100 dollars
|
|
ClearScreen()
|
|
fmt.Println(red.Render("You don't have the greenbacks, loser! Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "F": // Fentanyl Menu
|
|
ClearScreen()
|
|
fmt.Println(propertyStyle.Render("Fentanyl Menu"))
|
|
fmt.Println("Price: ", red.Render("$500 per hundred milligrams."))
|
|
fmt.Println("Your cash: $", strconv.Itoa(money))
|
|
fmt.Println("")
|
|
fmt.Println("Buy 100 milligrams (Y/N)?")
|
|
fentyPurchase := ""
|
|
fmt.Scan(&fentyPurchase)
|
|
switch { // Check purchase confirmation (Y/N)
|
|
case strings.ToUpper(fentyPurchase) == "Y":
|
|
switch { // Check money
|
|
case money >= 500:
|
|
switch {
|
|
case renegadeRank <= 10:
|
|
fentanyl = fentanyl + 2
|
|
fmt.Println("You just purchased 1 bag of fenty! And one is on the house!")
|
|
default:
|
|
fentanyl = fentanyl + 1
|
|
fmt.Println("You just purchased 1 bag of fenty!")
|
|
}
|
|
money = money - 500
|
|
ClearScreen()
|
|
MashEnterKey()
|
|
i = 0
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("Get some money, broke-ass!"))
|
|
MashEnterKey()
|
|
i = 0
|
|
}
|
|
default:
|
|
i = 0
|
|
}
|
|
|
|
case strings.ToUpper(choice) == "R": // Return to Main Machine
|
|
i = 1
|
|
MainMachine()
|
|
|
|
default: // Invalid input
|
|
i = 0
|
|
}
|
|
}
|
|
}
|
|
|
|
func ClockOut() {
|
|
choice := 0
|
|
ClearScreen()
|
|
fmt.Println(slutStyle.Render(wifey))
|
|
for choice < 1 {
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch choice {
|
|
case 1:
|
|
chance := rand.IntN(100)
|
|
switch {
|
|
case chance <= 50:
|
|
switch cocaines {
|
|
case 0:
|
|
fmt.Println(red.Render("You bust your wife right in the fucking face!"))
|
|
MashEnterKey()
|
|
default:
|
|
fmt.Println(red.Render("You pull out 1kg of cocaine and smash it open all over your face"))
|
|
fmt.Println(red.Render("You shout 'COKE SLAM!'"))
|
|
fmt.Println(red.Render("You bust your wife right in the fucking face!"))
|
|
fmt.Println(red.Render("YARRRRR! (You don't know why you're a pirate now)"))
|
|
MashEnterKey()
|
|
ClearScreen()
|
|
}
|
|
default:
|
|
ClearScreen()
|
|
fmt.Println(red.Render("You try to bust your wife in the face but she dodges you and runs out the"))
|
|
fmt.Println(red.Render("front door!"))
|
|
fmt.Println(red.Render("Oh well.. who is she gonna call bro?"))
|
|
MashEnterKey()
|
|
}
|
|
choice = 1
|
|
case 2:
|
|
fmt.Println(border.Render(wifeyFucked))
|
|
fmt.Println("You successfully hate fucked your wife.")
|
|
fmt.Println()
|
|
fmt.Println("She apologizes for the cold dinner while she wipes the semen and blood from her butthole.")
|
|
MashEnterKey()
|
|
choice = 1
|
|
case 3:
|
|
fmt.Println("You take some of your drugs. You are enjoying your life for once.")
|
|
choice = 1
|
|
default:
|
|
choice = 0
|
|
}
|
|
ClearScreen()
|
|
fmt.Println(border.Render("It is a new day!"))
|
|
switch {
|
|
case days <= 0:
|
|
fmt.Println("You have run out of days...")
|
|
MashEnterKey()
|
|
GameOver()
|
|
default:
|
|
days = days - 1
|
|
switch {
|
|
case diseases >= 1:
|
|
bumfights = bumfightsTotal - 15 - diseases
|
|
default:
|
|
bumfights = bumfightsTotal
|
|
}
|
|
childsupport = offspring * 100
|
|
diseaseUpkeep := diseases * 25
|
|
whoresProfit := whores * 500
|
|
income := whoresProfit - childsupport - diseaseUpkeep
|
|
money = money + taxes + income
|
|
fmt.Println("Cha ching! You now have ", money)
|
|
MainMachine()
|
|
}
|
|
}
|
|
}
|
|
|
|
func GameOver() {
|
|
fmt.Println(border.Render("Game Over, Bitch!!!"))
|
|
CheckStats()
|
|
CombatStats()
|
|
fmt.Println(statsStyle.Render(stats))
|
|
fmt.Println(statsStyle.Render(statsCombat))
|
|
fmt.Println()
|
|
fmt.Println("The game will exit now...")
|
|
MashEnterKey()
|
|
os.Exit(0)
|
|
}
|
|
|
|
func CheckStats() {
|
|
stats = "PLAYER STATS" + "\n\n" + "Name " + "\n" + PlayerName + "\n" + "Hit Points: " + strconv.Itoa(playerHP) + "\n" + "Condoms: " + strconv.Itoa(condoms) + "\n" + "Money: $" + strconv.Itoa(money) + "\n" + "Whores:" + strconv.Itoa(whores) + "\n" + "Cocaine (1 gram bags): " + strconv.Itoa(cocaines) + "\n" + "Fentanyl (100/mg bags): " + strconv.Itoa(fentanyl) + "\n" + "LSD (tabs): " + strconv.Itoa(LSD) + "\n" + "Days Left: " + strconv.Itoa(days) // builds the stats paragraph for the main screen
|
|
}
|
|
|
|
func CombatStats() {
|
|
switch {
|
|
case experience >= 1000:
|
|
level = 2
|
|
case experience >= 4000:
|
|
level = 3
|
|
case experience >= 9000:
|
|
level = 4
|
|
case experience >= 18000:
|
|
level = 5
|
|
case experience >= 30000:
|
|
level = 6
|
|
case experience >= 60000:
|
|
level = 7
|
|
case experience >= 120000:
|
|
level = 8
|
|
case experience >= 240000:
|
|
level = 9
|
|
case experience >= 480000:
|
|
level = 10
|
|
}
|
|
|
|
statsCombat = "Name: " + PlayerName + "\n" + "Hit Points: " + strconv.Itoa(playerHP) + "\n" + "Level :" + strconv.Itoa(level) + "\n" + "Money: $" + strconv.Itoa(money) + "\n" + "Experience :" + strconv.Itoa(experience) + "\n" + "Bum Fights Left: " + strconv.Itoa(bumfights) // builds Combat Stats
|
|
}
|
|
|
|
func MainMachine() {
|
|
ClearScreen()
|
|
i := 0
|
|
choice := ""
|
|
for i < 1 {
|
|
ScreenMachine()
|
|
fmt.Println("Your choice,")
|
|
fmt.Print(green.Render(PlayerName), ">")
|
|
fmt.Scan(&choice)
|
|
switch {
|
|
case strings.ToUpper(choice) == "H":
|
|
HitTheStreets()
|
|
case strings.ToUpper(choice) == "P":
|
|
PropertyRoom()
|
|
case strings.ToUpper(choice) == "B":
|
|
breakRoom()
|
|
case strings.ToUpper(choice) == "R":
|
|
RedRoom()
|
|
case strings.ToUpper(choice) == "D":
|
|
DoctorsOffice()
|
|
case strings.ToUpper(choice) == "G":
|
|
ClockOut()
|
|
case strings.ToUpper(choice) == "Q":
|
|
GameOver()
|
|
}
|
|
}
|
|
}
|
|
|
|
func ScreenMachine() {
|
|
CheckStats()
|
|
fmt.Println(storyStyle.Render("OPP Wars - Corruption"))
|
|
fmt.Println(lipgloss.JoinHorizontal(lipgloss.Top, border.Render(menu), statsStyle.Render(stats))) // makes a horizontal display joining two paras
|
|
|
|
}
|
|
|
|
func main() {
|
|
officerStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("0000FF"))
|
|
fmt.Println(titleStyle.Render("OPP Wars - Corruption"))
|
|
fmt.Println(officerStyle.Render(officers))
|
|
MashEnterKey()
|
|
ClearScreen()
|
|
fmt.Println(storyStyle.Render("OPP Wars - Corruption"))
|
|
fmt.Println(storyStyle.Render(intro))
|
|
fmt.Print("Enter your damned name, Constable: ")
|
|
reader := bufio.NewReader(os.Stdin)
|
|
prompt, _ := reader.ReadString('\n')
|
|
playerNameMaker := strings.Clone(prompt)
|
|
PlayerName = strings.TrimRight(playerNameMaker, "\n") // removes a trailing "Return" key that fucks everything up (i dont want the enter key IN the variable)
|
|
ClearScreen()
|
|
MainMachine()
|
|
|
|
}
|