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 // =-=-=-=-=-=-= 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 // Lipgloss - Props to // Styles for the game dialog 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 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("#18e60aff ")) // 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 HitTheStreets() { ClearScreen() choice := "" bumHP := 100 i := 1 for playerHP >= 0 { for i > 0 { 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": 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 outerLoop } 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 // *** BUG FIX: Changed 5000 to 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 switch { case condoms == 0: stdChance := rand.IntN(100) preggoChance := rand.IntN(100) ClearScreen() fmt.Println(slutStyle.Render(wifeyFucked)) fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!") MashEnterKey() switch { // This is a switch without an expression, useful for condition checking case stdChance <= 50: diseases = diseases + 1 ClearScreen() fmt.Println(red.Render("Uh oh!")) fmt.Println(slutStyle.Render("You got a disease!")) MashEnterKey() } switch { // This is a switch without an expression, useful for condition checking 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 playerHP = playerHP + 200 } 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: cocaines = cocaines + 1 money = money - 1000 ClearScreen() fmt.Println("You just purchased 1 gram of coke!") 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 LSD = LSD + 5 money = money - 100 ClearScreen() fmt.Println("You just purchased 5 tabs of LSD! Fuck yeah!") 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: fentanyl = fentanyl + 1 money = money - 500 ClearScreen() fmt.Println("You just purchased 1 bag of fenty!") 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() }