From 88a006407e2cdac886aeee54a59e90b9443e61de Mon Sep 17 00:00:00 2001 From: Starstreak Date: Tue, 12 Aug 2025 15:36:53 +0000 Subject: [PATCH 01/12] Minor fixes --- main.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index d3bde50..7b7df86 100644 --- a/main.go +++ b/main.go @@ -59,9 +59,9 @@ 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 +const bumfightsTotal = 25 // total bumfights used to reset bum fights per day const taxes = 500 // skimming off the top -var childsupport = 0 // if you get a hoe preggers +var childsupport = 0 // default 0 but changes if you get a hoe preggers // Lipgloss - Props to var border = lipgloss.NewStyle(). @@ -103,7 +103,7 @@ var green = lipgloss.NewStyle(). // 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") + 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 @@ -141,6 +141,8 @@ func HitTheStreets() { fmt.Println(border.Render(statsCombat)) fmt.Println("(A)ttack") fmt.Println("(E)scape") + fmt.Println("Your choice,") + fmt.Print(green.Render(PlayerName), ">") homelessPunch := "" fmt.Scan(&homelessPunch) if strings.ToUpper(homelessPunch) == "A" { @@ -285,14 +287,14 @@ func RedRoom() { if condoms == 0 { stdChance := rand.IntN(100) preggoChance := rand.IntN(100) - if stdChance > 25 { + if stdChance < 25 { std = true } else { } if preggoChance > 15 { fmt.Println(border.Render("You got the whore pregnant! Do you want to sell the kid to")) - fmt.Println(border.Render("Pakistan for $500 up front to sew soccer balls?")) + fmt.Println(border.Render("Pakistan for $500 to sew soccer balls?")) soccerBalls := "" fmt.Scan(&soccerBalls) if strings.ToUpper(soccerBalls) == "Y" { From d1e63b3e83dcde42b8646f4cb37117ddbb80d4ba Mon Sep 17 00:00:00 2001 From: Starstreak Date: Tue, 4 Nov 2025 14:27:41 +0000 Subject: [PATCH 02/12] Added combat system, too many changes went into this. --- main.go | 205 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 130 insertions(+), 75 deletions(-) diff --git a/main.go b/main.go index 7b7df86..5d89f27 100644 --- a/main.go +++ b/main.go @@ -49,7 +49,7 @@ 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 std = false // what happens if you have connies +var diseases = 0 // what happens if you 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) @@ -61,7 +61,9 @@ 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 var border = lipgloss.NewStyle(). @@ -87,8 +89,8 @@ var slutStyle = lipgloss.NewStyle(). Width(75). BorderForeground(lipgloss.Color("228")). BorderBackground(lipgloss.Color("#ff00a2ff")). - Foreground(lipgloss.Color("#ffffffff ")). - Background(lipgloss.Color("#ff00a2ff")) + Background(lipgloss.Color("#ffffffff ")). + Foreground(lipgloss.Color("#ff00a2ff")) var statsStyle = lipgloss.NewStyle(). BorderStyle(lipgloss.NormalBorder()). @@ -119,62 +121,95 @@ func breakRoom() { func HitTheStreets() { ClearScreen() - i := 0 choice := "" - for i < 1 { - ClearScreen() - CombatStats() - fmt.Println(storyStyle.Render(hitTheStreets)) - fmt.Println(statsStyle.Render(statsCombat)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - fmt.Scan(&choice) - if strings.ToUpper(choice) == "B" { + bumHP := 100 + i := 1 + for playerHP > 0 { + for i > 0 { ClearScreen() - fmt.Println(storyStyle.Render("Bum Fight!")) - fmt.Println() - fmt.Println("You encounter a ", red.Render("homeless piece of shit!")) - fmt.Println("") - fmt.Println("What do you do?") - fmt.Println("") CombatStats() - fmt.Println(border.Render(statsCombat)) - fmt.Println("(A)ttack") - fmt.Println("(E)scape") + fmt.Println(storyStyle.Render(hitTheStreets)) + fmt.Println(statsStyle.Render(statsCombat)) fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") - homelessPunch := "" - fmt.Scan(&homelessPunch) - if strings.ToUpper(homelessPunch) == "A" { - chance := rand.IntN(100) - if chance > 40 { + fmt.Scan(&choice) + if strings.ToUpper(choice) == "B" { + bumHP = 100 * level + outerLoop: + for bumHP > 0 { ClearScreen() - fmt.Println("You just hit the homeless bum with your police baton, it cracked his skull!") - fmt.Println("You sprinkle some crack on him and move along.") - MashEnterKey() - experience = experience + 250 - money = money + 20 - bumfights = bumfights - 1 - i = 0 - } else { - ClearScreen() - fmt.Println(red.Render("You missed, and he got away!")) + fmt.Println(storyStyle.Render("Bum Fight!")) fmt.Println() - fmt.Println("Perhaps you should lay off the donuts...") - bumfights = bumfights - 1 - MashEnterKey() - i = 0 + fmt.Println("You are staring at a ", red.Render("homeless piece of shit!"), "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) + if strings.ToUpper(homelessFight) == "F" { + chance := rand.IntN(100) + if chance > 40 { + attack := 20 // default attack power + + switch { + case fentanyl <= 0: + attack = 20 + default: + modifier := attack * fentanyl // default attack power multiplied by amount of fentanyl + attack = attack + modifier + } + + bumHP = bumHP - attack + 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: + money = money + 200 + bumfights = bumfights - 1 + experienceGain := cocaines * 100 + levelGain := level * 100 + experience = experience + levelGain + experienceGain + 100 + break outerLoop + } + } else { + ClearScreen() + fmt.Println(red.Render("You missed, he dodged your attack!")) + fmt.Println() + homelessAttack := 20 + playerHP = playerHP - homelessAttack + fmt.Println(red.Render("The homeless thug attacks you with a broken whiskey bottle for"), homelessAttack, " HP") + fmt.Println("Perhaps you should lay off the donuts...") + if playerHP < 0 { + bumHP = 100 + break outerLoop + } + MashEnterKey() + } + } else { + fmt.Println("You go back to HQ.") + bumfights = bumfights - 1 + bumHP = 0 + MashEnterKey() + MainMachine() + } } - } else { - fmt.Println("You escape successfully.") bumfights = bumfights - 1 - MashEnterKey() - i = 0 + } else if strings.ToUpper(choice) == "R" { + MainMachine() } - } else { - i = 1 } } + MainMachine() } @@ -195,6 +230,7 @@ func RedRoom() { 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) if strings.ToUpper(slavePurchase) == "Y" { @@ -221,6 +257,7 @@ func RedRoom() { fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") fmt.Println("Buy connies (Y/N)?") + fmt.Print(green.Render(PlayerName), ">") lapPurchase := "" fmt.Scan(&lapPurchase) if strings.ToUpper(lapPurchase) == "Y" { @@ -253,12 +290,13 @@ func RedRoom() { lapPurchase := "" fmt.Scan(&lapPurchase) if strings.ToUpper(lapPurchase) == "Y" { - if money > 20 { + if money >= 20 { 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 came in your pants.") + fmt.Println("That shit was so hot, you shot a hot load in your pants.") + playerHP = playerHP + 100 MashEnterKey() i = 0 } else { @@ -274,50 +312,66 @@ func RedRoom() { } else if strings.ToUpper(choice) == "F" { ClearScreen() - fmt.Println(border.Render("Get your Dick Wet at OPP McDick's")) + 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) if strings.ToUpper(fuckPurchase) == "Y" { - if money > 100 { + if money >= 100 { money = money - 100 if condoms == 0 { stdChance := rand.IntN(100) preggoChance := rand.IntN(100) - if stdChance < 25 { - std = true - } else { + ClearScreen() + fmt.Println(slutStyle.Render(wifeyFucked)) + fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!") + MashEnterKey() + + switch { + case stdChance <= 50: + diseases = diseases + 1 + ClearScreen() + fmt.Println(red.Render("Uh oh!")) + fmt.Println(slutStyle.Render("You got a disease!")) + MashEnterKey() } - if preggoChance > 15 { - fmt.Println(border.Render("You got the whore pregnant! Do you want to sell the kid to")) - fmt.Println(border.Render("Pakistan for $500 to sew soccer balls?")) + + switch { + 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) if strings.ToUpper(soccerBalls) == "Y" { money = money + 500 - fmt.Println(border.Render("Bonus! You just made $500!")) + fmt.Println(red.Render("Bonus! You just made $500... The kid is great at sewing soccer balls!")) + MashEnterKey() } else { - + 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() } } + } else { condoms = condoms - 1 + playerHP = playerHP + 200 } ClearScreen() - fmt.Println(slutStyle.Render(wifeyFucked)) - fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!") - MashEnterKey() - ClearScreen() i = 0 } else { ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() - ClearScreen() i = 0 } } else { @@ -359,14 +413,14 @@ func DoctorsOffice() { if money > 100 { fmt.Println("You pay the doctor $100 and you and/or your 'friends' are cured.") money = money - 100 - std = false + diseases = 0 i = 1 MashEnterKey() } else { - fmt.Println("You're too poor to cure your disease.") + fmt.Println("You're too poor to cure your diseases.") i = 1 - if std { - fmt.Println("But you still have a disease.") + if diseases >= 1 { + fmt.Println("But you still have a diseases.") MashEnterKey() } else { fmt.Println() @@ -376,7 +430,7 @@ func DoctorsOffice() { } else { ClearScreen() fmt.Println("No cure for you. I guess.") - if std { + if diseases >= 0 { fmt.Println("But you still have a disease.") MashEnterKey() } else { @@ -495,7 +549,7 @@ func PropertyRoom() { func ClockOut() { choice := 0 ClearScreen() - fmt.Println(storyStyle.Render(wifey)) + fmt.Println(slutStyle.Render(wifey)) for choice < 1 { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") @@ -507,7 +561,6 @@ func ClockOut() { ClearScreen() if cocaines > 1 { fmt.Println(red.Render("You pull out 1kg of cocaine and smash it open all over your face")) - cocaines = cocaines - 1 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)")) @@ -515,6 +568,7 @@ func ClockOut() { ClearScreen() } else { fmt.Println(red.Render("You bust your wife right in the fucking face!")) + MashEnterKey() } } else { ClearScreen() @@ -545,11 +599,12 @@ func ClockOut() { GameOver() } else { days = days - 1 - if std { - bumfights = bumfightsTotal - 15 + if diseases >= 1 { + bumfights = bumfightsTotal - 15 - diseases } else { bumfights = bumfightsTotal } + childsupport = offspring * 100 prostituteIncome := whores*500 - childsupport money = money + taxes + prostituteIncome fmt.Println("Cha ching! You now have ", money) @@ -571,7 +626,7 @@ func GameOver() { } func CheckStats() { - stats = "PLAYER STATS" + "\n\n" + "Name " + "\n" + PlayerName + "\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 + 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() { @@ -596,7 +651,7 @@ func CombatStats() { } else { fmt.Println() } - statsCombat = "Name: " + PlayerName + "\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 + 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() { From 8b25a1f5e0e66921ea54c1baf5fe76074a5a8b1a Mon Sep 17 00:00:00 2001 From: Starstreak Date: Tue, 4 Nov 2025 14:32:02 +0000 Subject: [PATCH 03/12] Updated Readme --- README.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 68d4b28..4b04e37 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,23 @@ A satirical take on drug wars, except you are a police officer. The irony is that you do the same stuff. -Features: -- Buy Drugs. -- Purchase Whores / Fuck Whores. -- Buy Condoms. -- Diseases. -- Beat up homeless people. +## Features +- Drugs: Increase XP gain, attack power or rewards from combat. +- Whores: Fuck to regain health. Buy to earn an income. +- Condoms: Protect your sexual health and prevent unwanted kids. +- Combat: Beat up homeless people to earn cash and experience points. + +## Drug Manual +Cocaine: Boosts XP gain. +Fentanyl: Boosts Attack power. +LSD: Not implemented - Just costs money. + +## Screenshots ![Screenshot Zero](screenshot0.avif) ![Screenshot One](screenshot1.avif) ![Screenshot Two](screenshot2.avif) +## Special Thanks + Props go out to [Lipgloss](https://github.com/charmbracelet/lipgloss) \ No newline at end of file From 1aa6704da40c8f325059ab71306bc1b43b64bf93 Mon Sep 17 00:00:00 2001 From: Starstreak Date: Sun, 9 Nov 2025 02:49:13 +0000 Subject: [PATCH 04/12] Refactored code. Replaced IF and ELSE statements with Switches. Cleaner and more readable. --- main.go | 326 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 184 insertions(+), 142 deletions(-) diff --git a/main.go b/main.go index 5d89f27..d594a90 100644 --- a/main.go +++ b/main.go @@ -49,7 +49,7 @@ 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 have connies +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) @@ -66,6 +66,7 @@ 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")) @@ -84,6 +85,14 @@ var storyStyle = lipgloss.NewStyle(). 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). @@ -124,7 +133,7 @@ func HitTheStreets() { choice := "" bumHP := 100 i := 1 - for playerHP > 0 { + for playerHP >= 0 { for i > 0 { ClearScreen() CombatStats() @@ -133,14 +142,20 @@ func HitTheStreets() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - if strings.ToUpper(choice) == "B" { + 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("homeless piece of shit!"), "with", bumHP, " HP") + fmt.Println("You are staring at a ", red.Render(enemyName), "with", bumHP, " HP") fmt.Println("") fmt.Println("What do you do?") fmt.Println("") @@ -152,20 +167,23 @@ func HitTheStreets() { fmt.Print(green.Render(PlayerName), ">") homelessFight := "" fmt.Scan(&homelessFight) - if strings.ToUpper(homelessFight) == "F" { + switch { + case strings.ToUpper(homelessFight) == "F": chance := rand.IntN(100) - if chance > 40 { - attack := 20 // default attack power + switch { + case chance > 40: + attack := 40 // default attack power switch { case fentanyl <= 0: - attack = 20 + attack = 40 * level default: - modifier := attack * fentanyl // default attack power multiplied by amount of fentanyl - attack = attack + modifier + 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 + 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") @@ -173,29 +191,31 @@ func HitTheStreets() { switch { - case bumHP <= 0: - money = money + 200 + 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 + 100 + experience = experience + levelGain + experienceGain + levelGain break outerLoop } - } else { + default: ClearScreen() fmt.Println(red.Render("You missed, he dodged your attack!")) fmt.Println() homelessAttack := 20 playerHP = playerHP - homelessAttack - fmt.Println(red.Render("The homeless thug attacks you with a broken whiskey bottle for"), homelessAttack, " HP") + 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...") - if playerHP < 0 { + switch { + case playerHP <= 0: bumHP = 100 break outerLoop } MashEnterKey() } - } else { + default: fmt.Println("You go back to HQ.") bumfights = bumfights - 1 bumHP = 0 @@ -204,13 +224,12 @@ func HitTheStreets() { } } bumfights = bumfights - 1 - } else if strings.ToUpper(choice) == "R" { + case strings.ToUpper(choice) == "R": MainMachine() } } + MainMachine() } - - MainMachine() } func RedRoom() { @@ -222,8 +241,8 @@ func RedRoom() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - // buy whore - if strings.ToUpper(choice) == "B" { + switch { + case strings.ToUpper(choice) == "B": // buy whore ClearScreen() fmt.Println(slutStyle.Render("Sex Slave Menu")) fmt.Println("Price: ", red.Render("$2000 per whore.")) @@ -233,54 +252,60 @@ func RedRoom() { fmt.Print(green.Render(PlayerName), ">") slavePurchase := "" fmt.Scan(&slavePurchase) - if strings.ToUpper(slavePurchase) == "Y" { - if money > 2000 { + switch { + case strings.ToUpper(slavePurchase) == "Y": + switch { + case money >= 2000: whores = whores + 1 - money = money - 5000 + 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 - } else { + default: ClearScreen() fmt.Println(slutStyle.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - } else { + default: i = 0 } - } else if strings.ToUpper(choice) == "P" { + + 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 connies (Y/N)?") + fmt.Println("Buy five connies (Y/N)?") fmt.Print(green.Render(PlayerName), ">") lapPurchase := "" fmt.Scan(&lapPurchase) - if strings.ToUpper(lapPurchase) == "Y" { - if money > 10 { + 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 - } else { + default: ClearScreen() fmt.Println(slutStyle.Render("Get some money, broke-ass!")) MashEnterKey() ClearScreen() i = 0 } - } else { + default: i = 0 } - } else if strings.ToUpper(choice) == "L" { + 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.")) @@ -289,28 +314,24 @@ func RedRoom() { fmt.Println("Buy a lap dance (Y/N)?") lapPurchase := "" fmt.Scan(&lapPurchase) - if strings.ToUpper(lapPurchase) == "Y" { - if money >= 20 { - 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 - } else { - ClearScreen() - fmt.Println(slutStyle.Render("Get some money, broke-ass!")) - MashEnterKey() - i = 0 - } - } else { + 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 } - // Fuck Whore - } else if strings.ToUpper(choice) == "F" { + 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.")) @@ -320,10 +341,13 @@ func RedRoom() { fmt.Print(green.Render(PlayerName), ">") fuckPurchase := "" fmt.Scan(&fuckPurchase) - if strings.ToUpper(fuckPurchase) == "Y" { - if money >= 100 { + switch { + case strings.ToUpper(fuckPurchase) == "Y": + switch { + case money >= 100: money = money - 100 - if condoms == 0 { + switch { + case condoms == 0: stdChance := rand.IntN(100) preggoChance := rand.IntN(100) @@ -332,7 +356,7 @@ func RedRoom() { fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!") MashEnterKey() - switch { + switch { // This is a switch without an expression, useful for condition checking case stdChance <= 50: diseases = diseases + 1 ClearScreen() @@ -341,7 +365,7 @@ func RedRoom() { MashEnterKey() } - switch { + switch { // This is a switch without an expression, useful for condition checking case preggoChance <= 25: ClearScreen() fmt.Println(red.Render("Uh oh!")) @@ -349,11 +373,12 @@ func RedRoom() { fmt.Print(green.Render(PlayerName), "(Y/N) >") soccerBalls := "" fmt.Scan(&soccerBalls) - if strings.ToUpper(soccerBalls) == "Y" { + 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() - } else { + 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("") @@ -361,28 +386,28 @@ func RedRoom() { MashEnterKey() } } - - } else { + default: condoms = condoms - 1 playerHP = playerHP + 200 } + ClearScreen() i = 0 - } else { + default: ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - } else { + default: i = 0 } - // Return to HQ - } else if strings.ToUpper(choice) == "R" { + + case strings.ToUpper(choice) == "R": // Return to HQ i = 1 - MainMachine() - } else { - i = 0 + + default: + i = 0 // If any other input is given, loop again } } } @@ -397,7 +422,8 @@ func DoctorsOffice() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - if strings.ToUpper(choice) == "C" { + switch { + case strings.ToUpper(choice) == "C": ClearScreen() fmt.Println(storyStyle.Render("Doctor's Miracle STD/STI Cures")) fmt.Println() @@ -409,37 +435,42 @@ func DoctorsOffice() { fmt.Println("(N)o") stdCure := "" fmt.Scan(&stdCure) - if strings.ToUpper(stdCure) == "Y" { - if money > 100 { + 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() - } else { + default: fmt.Println("You're too poor to cure your diseases.") i = 1 - if diseases >= 1 { + switch { + case diseases >= 1: fmt.Println("But you still have a diseases.") MashEnterKey() - } else { + default: fmt.Println() MashEnterKey() } + } - } else { + default: ClearScreen() fmt.Println("No cure for you. I guess.") - if diseases >= 0 { + switch { + case diseases > 0: fmt.Println("But you still have a disease.") MashEnterKey() - } else { - fmt.Println() - MashEnterKey() + i = 1 + default: + i = 1 } i = 0 } - } else { + default: ClearScreen() fmt.Println("You head back to HQ.") MashEnterKey() @@ -455,92 +486,103 @@ func PropertyRoom() { i := 0 choice := "" for i < 1 { - fmt.Println(storyStyle.Render(propertyRoom)) + fmt.Println(propertyStyle.Render(propertyRoom)) fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - if strings.ToUpper(choice) == "C" { + switch { + case strings.ToUpper(choice) == "C": // Cocaine Menu ClearScreen() - fmt.Println(border.Render("Cocaine Menu")) + 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) - if strings.ToUpper(cokePurchase) == "Y" { - if money > 1000 { + 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 - } else { + default: ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - } else { + default: i = 0 } - } else if strings.ToUpper(choice) == "L" { + + case strings.ToUpper(choice) == "L": // LSD Menu ClearScreen() - fmt.Println(border.Render("LSD Menu")) + 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 six tabs (Y/N)?") + fmt.Println("Buy five tabs (Y/N)?") LSDPurchase := "" fmt.Scan(&LSDPurchase) - if strings.ToUpper(LSDPurchase) == "Y" { - if money > 100 { + 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 - } else { + 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 } - } else { + default: i = 0 } - } else if strings.ToUpper(choice) == "F" { + + case strings.ToUpper(choice) == "F": // Fentanyl Menu ClearScreen() - fmt.Println(border.Render("Fentanyl Menu")) + 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) - if strings.ToUpper(fentyPurchase) == "Y" { - if money > 500 { + 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 - } else { + default: ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - } else { + default: i = 0 } - } else if strings.ToUpper(choice) == "R" { + + case strings.ToUpper(choice) == "R": // Return to Main Machine i = 1 MainMachine() - } else { + + default: // Invalid input i = 0 } } @@ -557,20 +599,21 @@ func ClockOut() { switch choice { case 1: chance := rand.IntN(100) - if chance < 50 { - ClearScreen() - if cocaines > 1 { + 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() - } else { - fmt.Println(red.Render("You bust your wife right in the fucking face!")) - MashEnterKey() } - } else { + 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!")) @@ -593,20 +636,24 @@ func ClockOut() { } ClearScreen() fmt.Println(border.Render("It is a new day!")) - if days == 0 { + switch { + case days <= 0: fmt.Println("You have run out of days...") MashEnterKey() GameOver() - } else { + default: days = days - 1 - if diseases >= 1 { + switch { + case diseases >= 1: bumfights = bumfightsTotal - 15 - diseases - } else { + default: bumfights = bumfightsTotal } childsupport = offspring * 100 - prostituteIncome := whores*500 - childsupport - money = money + taxes + prostituteIncome + diseaseUpkeep := diseases * 25 + whoresProfit := whores * 500 + income := whoresProfit - childsupport - diseaseUpkeep + money = money + taxes + income fmt.Println("Cha ching! You now have ", money) MainMachine() } @@ -630,27 +677,27 @@ func CheckStats() { } func CombatStats() { - if experience == 1000 { + switch { + case experience >= 1000: level = 2 - } else if experience == 4000 { + case experience >= 4000: level = 3 - } else if experience == 8000 { + case experience >= 9000: level = 4 - } else if experience == 25000 { + case experience >= 18000: level = 5 - } else if experience == 75000 { + case experience >= 30000: level = 6 - } else if experience == 120000 { + case experience >= 60000: level = 7 - } else if experience == 175000 { + case experience >= 120000: level = 8 - } else if experience == 250000 { + case experience >= 240000: level = 9 - } else if experience == 1000000 { + case experience >= 480000: level = 10 - } else { - fmt.Println() } + 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 } @@ -663,26 +710,21 @@ func MainMachine() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - if strings.ToUpper(choice) == "H" { + switch { + case strings.ToUpper(choice) == "H": HitTheStreets() - i = 1 - } else if strings.ToUpper(choice) == "P" { + case strings.ToUpper(choice) == "P": PropertyRoom() - i = 1 - } else if strings.ToUpper(choice) == "B" { + case strings.ToUpper(choice) == "B": breakRoom() - i = 1 - } else if strings.ToUpper(choice) == "R" { + case strings.ToUpper(choice) == "R": RedRoom() - i = 1 - } else if strings.ToUpper(choice) == "D" { + case strings.ToUpper(choice) == "D": DoctorsOffice() - i = 1 - } else if strings.ToUpper(choice) == "G" { + case strings.ToUpper(choice) == "G": ClockOut() - i = 1 - } else { - i = 0 + case strings.ToUpper(choice) == "Q": + GameOver() } } } From 4c7e9ff46de716dcf8db0052392d882d75f610b9 Mon Sep 17 00:00:00 2001 From: Starstreak Date: Sun, 9 Nov 2025 02:49:34 +0000 Subject: [PATCH 05/12] Added Quit to Menu --- menu.txt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/menu.txt b/menu.txt index 9416917..5988684 100644 --- a/menu.txt +++ b/menu.txt @@ -1,11 +1,9 @@ MAIN MENU -1. Locker -2. Aqcuire Drugs -3. Buy Condoms -4. Hit the Streets -5. Find Whore -6. Pay off Judge -7. Union -8. Doctor -9. Clock Out +(H)it the Streets +(P)roperty Room +(B)reak Room +(R)ed Room +(D)octor +(G)oodbye +(Q)uit the game From b92407b1e4d04955d3003abe519a7ffe0789d364 Mon Sep 17 00:00:00 2001 From: Starstreak Date: Sun, 9 Nov 2025 15:17:14 +0000 Subject: [PATCH 06/12] Random event text --- levels/randomEvent1.txt | 8 ++++++++ levels/randomEvent2.txt | 10 ++++++++++ levels/randomEvent3.txt | 10 ++++++++++ levels/randomEvent4.txt | 8 ++++++++ levels/randomEvent5.txt | 7 +++++++ 5 files changed, 43 insertions(+) create mode 100644 levels/randomEvent1.txt create mode 100644 levels/randomEvent2.txt create mode 100644 levels/randomEvent3.txt create mode 100644 levels/randomEvent4.txt create mode 100644 levels/randomEvent5.txt diff --git a/levels/randomEvent1.txt b/levels/randomEvent1.txt new file mode 100644 index 0000000..d5bc368 --- /dev/null +++ b/levels/randomEvent1.txt @@ -0,0 +1,8 @@ +You receive a call on your radio from a fellow officer who needs your help. + +"I got this degenerate transvestite who just served his boss with legal papers." you hear over the radio. + +What should they do? + +(1) Arrest the degenerate. +(2) Do nothing, it is for the courts to decide. diff --git a/levels/randomEvent2.txt b/levels/randomEvent2.txt new file mode 100644 index 0000000..8dc172d --- /dev/null +++ b/levels/randomEvent2.txt @@ -0,0 +1,10 @@ +You pull over a speeding car that was driving recklessly. + +The driver is a well known conservative poltician, who is visibly intoxicated and has an open container. + +There are also tire marks and a "stop sign" laying flat on the ground. + +He immediately offers you a large sum of cash to "forget this ever happened" and threatens your career if you don't. + +(1) Take the $500 and cocaine. +(2) Write him a ticket. \ No newline at end of file diff --git a/levels/randomEvent3.txt b/levels/randomEvent3.txt new file mode 100644 index 0000000..075ed31 --- /dev/null +++ b/levels/randomEvent3.txt @@ -0,0 +1,10 @@ +You are assigned to clear a peaceful but non-compliant protest blocking the entry to a foreclosed apartment complex. + +The protesters are local families being displaced. They are not violent, but their actions are delaying the official eviction process. + +The crowd will only move if you take action. What do you do? + +(1) Gas the crowd. +(2) Start arresting people. +(3) Talk with people and discuss their options. +(4) Call a team of mental health professionals and case workers. \ No newline at end of file diff --git a/levels/randomEvent4.txt b/levels/randomEvent4.txt new file mode 100644 index 0000000..a349814 --- /dev/null +++ b/levels/randomEvent4.txt @@ -0,0 +1,8 @@ +A shadowy figure in the bathroom slips you a note: + +"Grimstead is stashing product at the docks. Tonight." + +What do you do about it? + +(1) Steal the product. +(2) Report it to internal affairs. \ No newline at end of file diff --git a/levels/randomEvent5.txt b/levels/randomEvent5.txt new file mode 100644 index 0000000..b521bc2 --- /dev/null +++ b/levels/randomEvent5.txt @@ -0,0 +1,7 @@ +While processing a minor theft scene at an abandoned warehouse, you find +a hidden, unmarked briefcase containing a large sum of untraceable, clean +cash (enough to pay off your mortgage and then some). No one else knows +it's there, and the original owner is not the one who reported the theft. + +(1) Take the cash. +(2) File the briefcase as evidence. From ee8734ea373272dddf9687f8aeb03a20b8acc29b Mon Sep 17 00:00:00 2001 From: Starstreak Date: Sun, 9 Nov 2025 15:17:51 +0000 Subject: [PATCH 07/12] New feature: Random events during hitting the streets --- main.go | 231 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 217 insertions(+), 14 deletions(-) diff --git a/main.go b/main.go index d594a90..0e35539 100644 --- a/main.go +++ b/main.go @@ -42,6 +42,21 @@ 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 @@ -64,9 +79,12 @@ 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. -// Lipgloss - Props to -// Styles for the game dialog var border = lipgloss.NewStyle(). BorderStyle(lipgloss.NormalBorder()). BorderForeground(lipgloss.Color("63")) @@ -101,6 +119,14 @@ var slutStyle = lipgloss.NewStyle(). 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 ")). @@ -110,7 +136,7 @@ var red = lipgloss.NewStyle(). Foreground(lipgloss.Color("#f20b0bff")) var green = lipgloss.NewStyle(). - Foreground(lipgloss.Color("#18e60aff ")) + 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() { @@ -128,13 +154,158 @@ func breakRoom() { 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 - for playerHP >= 0 { +hitLoop: + for playerHP <= 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)) @@ -144,6 +315,12 @@ func HitTheStreets() { 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))] @@ -151,7 +328,7 @@ func HitTheStreets() { 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 { + for bumHP >= 0 { ClearScreen() fmt.Println(storyStyle.Render("Bum Fight!")) fmt.Println() @@ -211,7 +388,7 @@ func HitTheStreets() { switch { case playerHP <= 0: bumHP = 100 - break outerLoop + break hitLoop } MashEnterKey() } @@ -350,13 +527,18 @@ func RedRoom() { 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 { // This is a switch without an expression, useful for condition checking + switch { // checking your std chance case stdChance <= 50: diseases = diseases + 1 ClearScreen() @@ -365,7 +547,7 @@ func RedRoom() { MashEnterKey() } - switch { // This is a switch without an expression, useful for condition checking + switch { // checking your chance at having a kid case preggoChance <= 25: ClearScreen() fmt.Println(red.Render("Uh oh!")) @@ -504,10 +686,18 @@ func PropertyRoom() { case strings.ToUpper(cokePurchase) == "Y": switch { // Check money case money >= 1000: - cocaines = cocaines + 1 + 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() - fmt.Println("You just purchased 1 gram of coke!") + MashEnterKey() i = 0 default: @@ -533,10 +723,17 @@ func PropertyRoom() { case strings.ToUpper(LSDPurchase) == "Y": switch { case money >= 100: // When money is at least 100 do the following - LSD = LSD + 5 + 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() - 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 @@ -562,10 +759,16 @@ func PropertyRoom() { case strings.ToUpper(fentyPurchase) == "Y": switch { // Check money case money >= 500: - fentanyl = fentanyl + 1 + 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() - fmt.Println("You just purchased 1 bag of fenty!") MashEnterKey() i = 0 default: From 9bdcc397341d16c3a4fb24876f64afed0151d07f Mon Sep 17 00:00:00 2001 From: Starstreak Date: Sun, 9 Nov 2025 15:34:31 +0000 Subject: [PATCH 08/12] Bug fixes in combat and whore menu. --- main.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 0e35539..68b806c 100644 --- a/main.go +++ b/main.go @@ -288,7 +288,7 @@ func HitTheStreets() { bumHP := 100 i := 1 hitLoop: - for playerHP <= 0 { + for bumHP >= 0 { for i > 0 { ClearScreen() switch paragonRank { @@ -434,7 +434,7 @@ func RedRoom() { switch { case money >= 2000: whores = whores + 1 - money = money - 2000 // *** BUG FIX: Changed 5000 to 2000 *** + money = money - 2000 ClearScreen() fmt.Println(slutStyle.Render("You just purchased 1 whore to be a sex slave!")) MashEnterKey() @@ -523,6 +523,7 @@ func RedRoom() { switch { case money >= 100: money = money - 100 + playerHP = playerHP + 200 switch { case condoms == 0: stdChance := rand.IntN(100) @@ -570,9 +571,7 @@ func RedRoom() { } default: condoms = condoms - 1 - playerHP = playerHP + 200 } - ClearScreen() i = 0 default: From 98b516b0b6a541dc20591e0ed7591bf64fb28e73 Mon Sep 17 00:00:00 2001 From: Starstreak Date: Tue, 11 Nov 2025 15:24:08 +0000 Subject: [PATCH 09/12] Added missing file --- intro.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 intro.txt diff --git a/intro.txt b/intro.txt new file mode 100644 index 0000000..fc5d002 --- /dev/null +++ b/intro.txt @@ -0,0 +1,13 @@ +You are a Constable, fresh out of high school and eager to make a name for +yourself in the Village of Burk's Falls as a new recruit for the OPP. + +As you walk into the precinct, you're greeted by the familiar smell of +stale cigarettes and worn-out dreams. + +Your captain, a gruff mother fucker named Grimstead, calls you into his +office. + +"Rookie, I've got a few things to show you. This is where the real +money's made around here." + +He hands you a folder containing your badge number. \ No newline at end of file From 5cc479ad2ef89232206eb1af108ae9e92c98b2ef Mon Sep 17 00:00:00 2001 From: Starstreak Date: Mon, 1 Dec 2025 12:12:50 +0000 Subject: [PATCH 10/12] Massive updates - added classes, cleaned up code, changed diseases to infections --- classSelect.txt | 7 ++ intro.txt | 7 +- main.go | 255 +++++++++++++++++++++++++++++++++++------------- 3 files changed, 197 insertions(+), 72 deletions(-) create mode 100644 classSelect.txt diff --git a/classSelect.txt b/classSelect.txt new file mode 100644 index 0000000..72e0b20 --- /dev/null +++ b/classSelect.txt @@ -0,0 +1,7 @@ +=== Character Class Selection === + +What is your fondest memory? + +(1) Setting kittens on fire and torturing wildlife during childhood. +(2) Being raised by the Government to be a psionic assasin. +(3) Getting rebuilt into a ruthless killing machine after a tragic death. diff --git a/intro.txt b/intro.txt index fc5d002..ec75059 100644 --- a/intro.txt +++ b/intro.txt @@ -1,11 +1,10 @@ You are a Constable, fresh out of high school and eager to make a name for yourself in the Village of Burk's Falls as a new recruit for the OPP. -As you walk into the precinct, you're greeted by the familiar smell of -stale cigarettes and worn-out dreams. +Your captain, a gruff mother fucker named Staff Sergeant Grimstead, +calls you into his office. -Your captain, a gruff mother fucker named Grimstead, calls you into his -office. +He lifts his head out of a pile of cocaine. "Rookie, I've got a few things to show you. This is where the real money's made around here." diff --git a/main.go b/main.go index 68b806c..7e360a5 100644 --- a/main.go +++ b/main.go @@ -57,6 +57,9 @@ 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 @@ -64,12 +67,12 @@ 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 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 whores = 0 // number of sex slaves you own +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 @@ -78,9 +81,19 @@ 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 + +// 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. @@ -127,6 +140,14 @@ var eventStyle = lipgloss.NewStyle(). 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 ")). @@ -135,6 +156,9 @@ var statsStyle = lipgloss.NewStyle(). var red = lipgloss.NewStyle(). Foreground(lipgloss.Color("#f20b0bff")) +var superColour = lipgloss.NewStyle(). + Foreground(lipgloss.Color("#c6d007ff")) + var green = lipgloss.NewStyle(). Foreground(lipgloss.Color("#13820bff ")) @@ -149,11 +173,6 @@ func MashEnterKey() { bufio.NewReader(os.Stdin).ReadBytes('\n') } -func breakRoom() { - fmt.Println("Not Implemented") - MainMachine() -} - func RandomEvent() { eventSelection := rand.IntN(5) switch eventSelection { @@ -282,6 +301,32 @@ func RandomEvent() { } } +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 := "" @@ -292,16 +337,16 @@ hitLoop: for i > 0 { ClearScreen() switch paragonRank { - case 10: - isThereRandomGoodPunishment := rand.IntN(3) + 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 := 100 * level - fmt.Println(eventStyle.Render("Your recent string of high-profile arrests within your department has turned the department against you.")) + 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("You get shot for "), gangsterShot, red.Render(" HP!")) + 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() } @@ -322,9 +367,10 @@ hitLoop: 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) + 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: @@ -339,6 +385,15 @@ hitLoop: 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), ">") @@ -349,32 +404,28 @@ hitLoop: chance := rand.IntN(100) switch { case chance > 40: - attack := 40 // default attack power - + attackPW := attack // Grabbing default attack power switch { case fentanyl <= 0: - attack = 40 * level + attackPW = attackPW * 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 // + 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 - attack // attack homeless person + bumHP = bumHP - attackPW // attack homeless person ClearScreen() - fmt.Println(red.Render("You smash the bum for "), attack, "hit points!") - fmt.Println("The bum has ", bumHP, " HP left") + fmt.Println(red.Render("You smash the bum for "), attack, "HP!") + fmt.Println("The bum has ", bumHP, "HP left") MashEnterKey() - switch { - - case bumHP <= 0: // what happens if homeless person HP goes to or below 0 + 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 + break outerLoop // this will break out the loop and sends you back to the combat menu } default: ClearScreen() @@ -385,19 +436,77 @@ hitLoop: 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.") - bumfights = bumfights - 1 - bumHP = 0 MashEnterKey() - MainMachine() + bumfights = bumfights - 1 + break hitLoop } } bumfights = bumfights - 1 @@ -419,13 +528,13 @@ func RedRoom() { fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) switch { - case strings.ToUpper(choice) == "B": // buy whore + case strings.ToUpper(choice) == "B": // buy hooker ClearScreen() fmt.Println(slutStyle.Render("Sex Slave Menu")) - fmt.Println("Price: ", red.Render("$2000 per whore.")) + fmt.Println("Price: ", red.Render("$2000 per hooker.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") - fmt.Println("Buy one sex slave (Y/N)?") + fmt.Println("Buy one hooker (Y/N)?") fmt.Print(green.Render(PlayerName), ">") slavePurchase := "" fmt.Scan(&slavePurchase) @@ -433,10 +542,10 @@ func RedRoom() { case strings.ToUpper(slavePurchase) == "Y": switch { case money >= 2000: - whores = whores + 1 + hookers = hookers + 1 money = money - 2000 ClearScreen() - fmt.Println(slutStyle.Render("You just purchased 1 whore to be a sex slave!")) + fmt.Println(slutStyle.Render("You just purchased 1 hooker, you da pimp!")) MashEnterKey() i = 0 default: @@ -508,13 +617,13 @@ func RedRoom() { i = 0 } - case strings.ToUpper(choice) == "F": // Fuck Whore + 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 dirty whore for an hour.")) + 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 whore (Y/N)?") + fmt.Println("Buy an hour with a hooker (Y/N)?") fmt.Print(green.Render(PlayerName), ">") fuckPurchase := "" fmt.Scan(&fuckPurchase) @@ -536,15 +645,15 @@ func RedRoom() { ClearScreen() fmt.Println(slutStyle.Render(wifeyFucked)) - fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!") + fmt.Println("You just fucked a dirty hooker! Oh... shit, it's your cousin!") MashEnterKey() - switch { // checking your std chance + switch { // checking your sti chance case stdChance <= 50: - diseases = diseases + 1 + infections = infections + 1 ClearScreen() fmt.Println(red.Render("Uh oh!")) - fmt.Println(slutStyle.Render("You got a disease!")) + fmt.Println(slutStyle.Render("You got an infection!")) MashEnterKey() } @@ -552,7 +661,7 @@ func RedRoom() { 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.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) @@ -606,11 +715,11 @@ func DoctorsOffice() { switch { case strings.ToUpper(choice) == "C": ClearScreen() - fmt.Println(storyStyle.Render("Doctor's Miracle STD/STI Cures")) + 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' STD/STI for $100?") + fmt.Println("Do you want to cure you or your 'friends' STI for $100?") fmt.Println("") fmt.Println("(Y)es") fmt.Println("(N)o") @@ -622,15 +731,15 @@ func DoctorsOffice() { case money >= 100: fmt.Println("You pay the doctor $100 and you and/or your 'friends' are cured.") money = money - 100 - diseases = 0 + infections = 0 i = 1 MashEnterKey() default: - fmt.Println("You're too poor to cure your diseases.") + fmt.Println("You're too poor to cure your infections.") i = 1 switch { - case diseases >= 1: - fmt.Println("But you still have a diseases.") + case infections >= 1: + fmt.Println("But you still have an infection.") MashEnterKey() default: fmt.Println() @@ -642,8 +751,8 @@ func DoctorsOffice() { ClearScreen() fmt.Println("No cure for you. I guess.") switch { - case diseases > 0: - fmt.Println("But you still have a disease.") + case infections > 0: + fmt.Println("But you still have an infection.") MashEnterKey() i = 1 default: @@ -688,7 +797,7 @@ func PropertyRoom() { switch { case renegadeRank <= 10: cocaines = cocaines + 2 - fmt.Println("You just purchased 1 gram of coke! Here is one on the house!") + 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!") @@ -725,7 +834,7 @@ func PropertyRoom() { switch { case renegadeRank <= 10: LSD = LSD + 10 - fmt.Println("You just purchased 5 tabs of LSD! I'm tossing in a free sample!") + 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!") @@ -737,7 +846,7 @@ func PropertyRoom() { 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!")) + fmt.Println(red.Render("You don't have the greenbacks, loser!")) MashEnterKey() i = 0 } @@ -827,7 +936,7 @@ func ClockOut() { 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.") + fmt.Println("She apologizes for the cold dinner while she wipes the semen off her leg.") MashEnterKey() choice = 1 case 3: @@ -846,15 +955,15 @@ func ClockOut() { default: days = days - 1 switch { - case diseases >= 1: - bumfights = bumfightsTotal - 15 - diseases + case infections >= 1: + bumfights = bumfightsTotal - 15 - infections default: bumfights = bumfightsTotal } childsupport = offspring * 100 - diseaseUpkeep := diseases * 25 - whoresProfit := whores * 500 - income := whoresProfit - childsupport - diseaseUpkeep + diseaseUpkeep := infections * 25 + hookersProfit := hookers * 500 + income := hookersProfit - childsupport - diseaseUpkeep money = money + taxes + income fmt.Println("Cha ching! You now have ", money) MainMachine() @@ -875,7 +984,7 @@ func GameOver() { } 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 + 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() { @@ -898,6 +1007,16 @@ func CombatStats() { 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 @@ -917,8 +1036,6 @@ func MainMachine() { HitTheStreets() case strings.ToUpper(choice) == "P": PropertyRoom() - case strings.ToUpper(choice) == "B": - breakRoom() case strings.ToUpper(choice) == "R": RedRoom() case strings.ToUpper(choice) == "D": @@ -952,6 +1069,8 @@ func main() { 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() } From 34a57d1e6075576f6698e0d5d7c7ebee66d0da1c Mon Sep 17 00:00:00 2001 From: Starstreak Date: Mon, 1 Dec 2025 12:20:53 +0000 Subject: [PATCH 11/12] Update README.md --- README.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4b04e37..9374c9f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,21 @@ # oppwars -A satirical take on drug wars, except you are a police officer. +Text-based RPG heavily inspired by the old BBS game *Legend of the Red Dragon* but modern and single player. -The irony is that you do the same stuff. +You can play this in any terminal on Linux, macOS and Windows. + +Instead of a being a knight, you play as a cop in a city that's actively trying to kill you. You beat up homeless people, manage a Karma system (Paragon vs. Renegade), use drugs to get stat buffs, and have sexual relations with hookers to restore health. + +## Classes + +**1. The Robot** 🤖 +You have no empathy mechanics. You interpret the law literally. It's basically *RoboCop* logic—if they are loitering, they must be neutralized. + +**2. The Psychic** 🔮 +You were recruited and engineered as a kid, now you can fire psychic blasts with your mind, but you suffer from mental instability. + +**3. The Psychopath** 🔪 +You get bonuses for eating people. You aren't really interested in arresting people; you just like the ***taste*** of justice. This class excels at using violence to restore health. ## Features - Drugs: Increase XP gain, attack power or rewards from combat. @@ -11,9 +24,9 @@ The irony is that you do the same stuff. - Combat: Beat up homeless people to earn cash and experience points. ## Drug Manual -Cocaine: Boosts XP gain. -Fentanyl: Boosts Attack power. -LSD: Not implemented - Just costs money. +- Cocaine: Boosts XP gain. +- Fentanyl: Boosts Attack power. +- LSD: Not implemented - Just costs money. ## Screenshots From e9ae67fa8793b3e49f81def2b4757c304e004006 Mon Sep 17 00:00:00 2001 From: Starstreak Date: Mon, 1 Dec 2025 12:27:30 +0000 Subject: [PATCH 12/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9374c9f..60f4fc9 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ You get bonuses for eating people. You aren't really interested in arresting peo ## Features - Drugs: Increase XP gain, attack power or rewards from combat. -- Whores: Fuck to regain health. Buy to earn an income. +- Hookers: Fuck to regain health. Buy to earn an income. - Condoms: Protect your sexual health and prevent unwanted kids. - Combat: Beat up homeless people to earn cash and experience points.