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 //go:embed classSelect.txt var classSelect 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 infections = 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 hookers = 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 // Character Stats var playerHP = 200 // default hit points for the player var attack = 40 // default attack strength var paragonRank = 0 // default goodness rank var renegadeRank = 0 // default evil rank // character classes var classTerminator = false // the robot warrior class var classPsionic = false // the psionic magic class var classPower = 1 // default starter psionic power var classPsychopath = false // the psychopath torture class // 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 classSelectStyle = lipgloss.NewStyle(). BorderStyle(lipgloss.NormalBorder()). Width(75). BorderForeground(lipgloss.Color("#0a72aaff")). BorderBackground(lipgloss.Color("#0a72aaff")). Background(lipgloss.Color("#0a72aaff")). 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 superColour = lipgloss.NewStyle(). Foreground(lipgloss.Color("#c6d007ff")) 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 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 ClassSelection() { classLoop: for { ClearScreen() fmt.Println(classSelectStyle.Render(classSelect)) fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") choice := 0 fmt.Scan(&choice) switch choice { case 1: classPsychopath = true break classLoop case 2: classPsionic = true break classLoop case 3: classTerminator = true break classLoop default: fmt.Println("Incorrect Selection") MashEnterKey() } } } func HitTheStreets() { ClearScreen() choice := "" bumHP := 100 i := 1 hitLoop: for bumHP >= 0 { for i > 0 { ClearScreen() switch paragonRank { case 10: // when paragonRank reaches 10 we give a 25% chance to get shot for being a good cop isThereRandomGoodPunishment := rand.IntN(4) switch isThereRandomGoodPunishment { case 1: gangsterShot := 50 * level fmt.Println(eventStyle.Render("Your recent string of high-profile good deeds within your department has turned them 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("They drive by in a noisy Cadillac spraying bullets in your direction. 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 maniac", "drug addled homeless bum", "shit smeared homeless bum", "crazy homeless person", "tent dweller surrounded by needles"} // list of enemy names in a slice enemyNameGen := enemyList[rand.IntN(len(enemyList))] // picks a random enemy name from the slice enemyName := strings.Clone(enemyNameGen) // memory copy from generated name 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") switch { case classPsionic: classPower = classPower + 1 fmt.Println(superColour.Render("(S)uper Ability: Psychic Blast")) case classTerminator: fmt.Println(superColour.Render("(S)uper Ability: Charged Shot")) case classPsychopath: fmt.Println(superColour.Render("(S)uper Ability: Chow Down")) } 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: attackPW := attack // Grabbing default attack power switch { case fentanyl <= 0: attackPW = attackPW * level default: buffs := attack * fentanyl // default attack power multiplied by amount of fentanyl modifier := level * 2 // double the damage based on level attackPW = attackPW + buffs + modifier // } bumHP = bumHP - attackPW // attack homeless person ClearScreen() fmt.Println(red.Render("You smash the bum for "), attack, "HP!") fmt.Println("The bum has ", bumHP, "HP left") MashEnterKey() switch { case bumHP <= 0: // If you kill the bum, you get money and new stats money = money*level + 300 bumfights = bumfights - 1 experienceGain := cocaines * 100 levelGain := level * 100 experience = experience + levelGain + experienceGain + levelGain break outerLoop // this will break out the loop and sends you back to the combat menu } 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...") MashEnterKey() switch { case playerHP <= 0: bumHP = 100 break hitLoop } } case strings.ToUpper(homelessFight) == "S": switch { case classPsionic: psionicBlast := classPower * (attack * level) // This is supposed to seperate the atk and lvl variables so math works bumHP = bumHP - psionicBlast classPower = 1 ClearScreen() fmt.Println(superColour.Render("You blast the"), enemyName, superColour.Render(" for"), psionicBlast, superColour.Render("HP")) fmt.Println("The bum has ", bumHP, "HP left") MashEnterKey() switch { case bumHP <= 0: // If you kill the bum, you get money and new stats money = money*level + 300 bumfights = bumfights - 1 experienceGain := cocaines * 100 levelGain := level * 100 experience = experience + levelGain + experienceGain + levelGain break outerLoop // this will break out the loop and sends you back to the combat menu } case classPsychopath: psychoUP := classPower * (attack * level) // same as above bumHP = bumHP - psychoUP classPower = 1 ClearScreen() fmt.Println(superColour.Render("You take a bite out of "), enemyName, superColour.Render(" for"), psychoUP, superColour.Render("HP")) fmt.Println("The bum has ", bumHP, "HP left") psychoBuff := psychoUP / 2 // This part takes half the damage you deal playerHP = playerHP + psychoBuff // and converts it into health. fmt.Println("You also absorb life force by digesting the flesh, gaining ", psychoUP, superColour.Render("HP!")) MashEnterKey() switch { case bumHP <= 0: // If you kill the bum, you get money and new stats money = money*level + 300 bumfights = bumfights - 1 experienceGain := cocaines * 100 levelGain := level * 100 experience = experience + levelGain + experienceGain + levelGain break outerLoop // this will break out the loop and sends you back to the combat menu } case classTerminator: chargedShot := classPower * (attack * level * 2) // as above so below bumHP = bumHP - chargedShot classPower = 1 ClearScreen() fmt.Println(superColour.Render("You pull a plasma blaster out of your robotic leg and shoot the "), enemyName, superColour.Render(" for"), chargedShot, superColour.Render("HP")) fmt.Println("The bum has ", bumHP, "HP left") MashEnterKey() switch { case bumHP <= 0: // If you kill the bum, you get money and new stats money = money*level + 300 bumfights = bumfights - 1 experienceGain := cocaines * 100 levelGain := level * 100 experience = experience + levelGain + experienceGain + levelGain break outerLoop // this will break out the loop and sends you back to the combat menu } } default: fmt.Println("You go back to HQ.") MashEnterKey() bumfights = bumfights - 1 break hitLoop } } 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 hooker ClearScreen() fmt.Println(slutStyle.Render("Sex Slave Menu")) fmt.Println("Price: ", red.Render("$2000 per hooker.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") fmt.Println("Buy one hooker (Y/N)?") fmt.Print(green.Render(PlayerName), ">") slavePurchase := "" fmt.Scan(&slavePurchase) switch { case strings.ToUpper(slavePurchase) == "Y": switch { case money >= 2000: hookers = hookers + 1 money = money - 2000 ClearScreen() fmt.Println(slutStyle.Render("You just purchased 1 hooker, you da pimp!")) 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 hooker ClearScreen() fmt.Println(border.Render("Get your dick wet at OPP McDick's")) fmt.Println("Price: ", red.Render("$100 to fuck a hooker for an hour.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") fmt.Println("Buy an hour with a hooker (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 hooker! Oh... shit, it's your cousin!") MashEnterKey() switch { // checking your sti chance case stdChance <= 50: infections = infections + 1 ClearScreen() fmt.Println(red.Render("Uh oh!")) fmt.Println(slutStyle.Render("You got an infection!")) 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 hooker 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 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' 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 infections = 0 i = 1 MashEnterKey() default: fmt.Println("You're too poor to cure your infections.") i = 1 switch { case infections >= 1: fmt.Println("But you still have an infection.") MashEnterKey() default: fmt.Println() MashEnterKey() } } default: ClearScreen() fmt.Println("No cure for you. I guess.") switch { case infections > 0: fmt.Println("But you still have an infection.") 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 for being a team player!") 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 since you're such a team player!") 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!")) 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 off her leg.") 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 infections >= 1: bumfights = bumfightsTotal - 15 - infections default: bumfights = bumfightsTotal } childsupport = offspring * 100 diseaseUpkeep := infections * 25 hookersProfit := hookers * 500 income := hookersProfit - 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" + "hookers:" + strconv.Itoa(hookers) + "\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 case experience >= 960000: level = 11 case experience >= 1920000: level = 12 case experience >= 3840000: level = 13 case experience >= 7680000: level = 14 case experience >= 15360000: level = 15 } 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) == "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() ClassSelection() ClearScreen() MainMachine() }