diff --git a/README.md b/README.md index 60f4fc9..68d4b28 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,18 @@ # oppwars -Text-based RPG heavily inspired by the old BBS game *Legend of the Red Dragon* but modern and single player. +A satirical take on drug wars, except you are a police officer. -You can play this in any terminal on Linux, macOS and Windows. +The irony is that you do the same stuff. -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. -- 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. - -## Drug Manual -- Cocaine: Boosts XP gain. -- Fentanyl: Boosts Attack power. -- LSD: Not implemented - Just costs money. - -## Screenshots +Features: +- Buy Drugs. +- Purchase Whores / Fuck Whores. +- Buy Condoms. +- Diseases. +- Beat up homeless people. ![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 diff --git a/classSelect.txt b/classSelect.txt deleted file mode 100644 index 72e0b20..0000000 --- a/classSelect.txt +++ /dev/null @@ -1,7 +0,0 @@ -=== 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 deleted file mode 100644 index ec75059..0000000 --- a/intro.txt +++ /dev/null @@ -1,12 +0,0 @@ -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. - -Your captain, a gruff mother fucker named Staff Sergeant 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." - -He hands you a folder containing your badge number. \ No newline at end of file diff --git a/levels/randomEvent1.txt b/levels/randomEvent1.txt deleted file mode 100644 index d5bc368..0000000 --- a/levels/randomEvent1.txt +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index 8dc172d..0000000 --- a/levels/randomEvent2.txt +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index 075ed31..0000000 --- a/levels/randomEvent3.txt +++ /dev/null @@ -1,10 +0,0 @@ -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 deleted file mode 100644 index a349814..0000000 --- a/levels/randomEvent4.txt +++ /dev/null @@ -1,8 +0,0 @@ -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 deleted file mode 100644 index b521bc2..0000000 --- a/levels/randomEvent5.txt +++ /dev/null @@ -1,7 +0,0 @@ -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. diff --git a/main.go b/main.go index 7e360a5..d3bde50 100644 --- a/main.go +++ b/main.go @@ -42,24 +42,6 @@ var hitTheStreets string //go:embed levels/doctorsRoom.txt var doctorsRoom string -//go:embed levels/randomEvent1.txt -var randomEvent1 string - -//go:embed levels/randomEvent2.txt -var randomEvent2 string - -//go:embed levels/randomEvent3.txt -var randomEvent3 string - -//go:embed levels/randomEvent4.txt -var randomEvent4 string - -//go:embed levels/randomEvent5.txt -var randomEvent5 string - -//go:embed classSelect.txt -var classSelect string - // =-=-=-=-=-=-= End File String Embeds =-=-=-=-=-=-= // Game Variables - Core Gameplay @@ -67,37 +49,21 @@ var stats string // variable for stats generation output var statsCombat string // variable used for combat stats generation during fights var PlayerName string // player's name... var condoms = 0 // its better to have them and not need them -var infections = 0 // what happens if you don't have connies +var std = false // 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) var level = 1 // your level from combat battle fights (starts at 1) -var hookers = 0 // number of sex slaves you own +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 bumfightsTotal = 25 // total bumfights const taxes = 500 // skimming off the top -var offspring = 0 // number of children you have by default -var childsupport = 0 // default 0 but changes if you get a hoe preggers - -// Character Stats - -var playerHP = 200 // default hit points for the player -var attack = 40 // default attack strength -var paragonRank = 0 // default goodness rank -var renegadeRank = 0 // default evil rank - -// character classes -var classTerminator = false // the robot warrior class -var classPsionic = false // the psionic magic class -var classPower = 1 // default starter psionic power -var classPsychopath = false // the psychopath torture class - -// Props to Lipgloss! -// These are colour and border styles for the game dialogs. +var childsupport = 0 // if you get a hoe preggers +// Lipgloss - Props to var border = lipgloss.NewStyle(). BorderStyle(lipgloss.NormalBorder()). BorderForeground(lipgloss.Color("63")) @@ -116,37 +82,13 @@ 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). BorderForeground(lipgloss.Color("228")). BorderBackground(lipgloss.Color("#ff00a2ff")). - Background(lipgloss.Color("#ffffffff ")). - Foreground(lipgloss.Color("#ff00a2ff")) - -var eventStyle = lipgloss.NewStyle(). - BorderStyle(lipgloss.NormalBorder()). - Width(75). - BorderForeground(lipgloss.Color("#0d7021ff")). - BorderBackground(lipgloss.Color("#0d7021ff")). - Background(lipgloss.Color("#0d7021ff ")). - Foreground(lipgloss.Color("#ffffffff")) - -var classSelectStyle = lipgloss.NewStyle(). - BorderStyle(lipgloss.NormalBorder()). - Width(75). - BorderForeground(lipgloss.Color("#0a72aaff")). - BorderBackground(lipgloss.Color("#0a72aaff")). - Background(lipgloss.Color("#0a72aaff")). - Foreground(lipgloss.Color("#ffffffff")) + Foreground(lipgloss.Color("#ffffffff ")). + Background(lipgloss.Color("#ff00a2ff")) var statsStyle = lipgloss.NewStyle(). BorderStyle(lipgloss.NormalBorder()). @@ -156,15 +98,12 @@ 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 ")) + 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) + fmt.Print("\033[H\033[2J") } // Cool stylized Enter key masher @@ -173,349 +112,68 @@ func MashEnterKey() { bufio.NewReader(os.Stdin).ReadBytes('\n') } -func RandomEvent() { - eventSelection := rand.IntN(5) - switch eventSelection { - case 1: - outerLoop1: - for { - fmt.Println(eventStyle.Render(randomEvent1)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - renegadeRank = renegadeRank + 1 - paragonRank = paragonRank - 1 - break outerLoop1 - case 2: - paragonRank = paragonRank + 1 - renegadeRank = renegadeRank - 1 - break outerLoop1 - default: - fmt.Println("Invalid Choice, Fool!") - MashEnterKey() - } - } - case 2: - outerLoop2: - for { - fmt.Println(eventStyle.Render(randomEvent2)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - renegadeRank = renegadeRank + 1 - paragonRank = paragonRank - 1 - money = money + 500 - cocaines = cocaines + 2 - break outerLoop2 - case 2: - paragonRank = paragonRank + 1 - renegadeRank = renegadeRank - 1 - break outerLoop2 - default: - fmt.Println("Invalid Choice, Fool!") - MashEnterKey() - } - } - case 3: - outerLoop3: - for { - fmt.Println(eventStyle.Render(randomEvent3)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - renegadeRank = renegadeRank + 2 - paragonRank = paragonRank - 2 - break outerLoop3 - case 2: - renegadeRank = renegadeRank + 1 - paragonRank = paragonRank - 1 - break outerLoop3 - case 3: - paragonRank = paragonRank + 1 - renegadeRank = renegadeRank - 1 - break outerLoop3 - case 4: - paragonRank = paragonRank + 2 - renegadeRank = renegadeRank - 2 - break outerLoop3 - default: - fmt.Println("Invalid Choice, Fool!") - MashEnterKey() - } - } - case 4: - outerLoop4: - for { - fmt.Println(eventStyle.Render(randomEvent4)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - renegadeRank = renegadeRank + 1 - paragonRank = paragonRank - 1 - fentanyl = fentanyl + 2 - break outerLoop4 - case 2: - paragonRank = paragonRank + 2 - renegadeRank = renegadeRank - 2 - break outerLoop4 - default: - fmt.Println("Invalid Choice, Fool!") - MashEnterKey() - } - } - case 5: - outerLoop5: - for { - fmt.Println(eventStyle.Render(randomEvent5)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - renegadeRank = renegadeRank + 1 - paragonRank = paragonRank - 1 - money = money + 1000 - break outerLoop5 - case 2: - paragonRank = paragonRank + 1 - renegadeRank = renegadeRank - 1 - break outerLoop5 - default: - fmt.Println("Invalid Choice, Fool!") - MashEnterKey() - } - } - } -} - -func ClassSelection() { -classLoop: - for { - ClearScreen() - fmt.Println(classSelectStyle.Render(classSelect)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - choice := 0 - fmt.Scan(&choice) - switch choice { - case 1: - classPsychopath = true - break classLoop - case 2: - classPsionic = true - break classLoop - case 3: - classTerminator = true - break classLoop - default: - fmt.Println("Incorrect Selection") - MashEnterKey() - } - } +func breakRoom() { + fmt.Println("Not Implemented") + MainMachine() } func HitTheStreets() { ClearScreen() + i := 0 choice := "" - bumHP := 100 - i := 1 -hitLoop: - for bumHP >= 0 { - for i > 0 { - ClearScreen() - switch paragonRank { - case 10: // when paragonRank reaches 10 we give a 25% chance to get shot for being a good cop - isThereRandomGoodPunishment := rand.IntN(4) - switch isThereRandomGoodPunishment { - case 1: - gangsterShot := 50 * level - fmt.Println(eventStyle.Render("Your recent string of high-profile good deeds within your department has turned them against you.")) - fmt.Println("") - MashEnterKey() - fmt.Println(eventStyle.Render("A gang of drug dealers are unleashed upon you by Captain Grimstead himself!")) - fmt.Println(red.Render("They drive by in a noisy Cadillac spraying bullets in your direction. You get shot for "), gangsterShot, red.Render(" HP!")) - playerHP = playerHP - gangsterShot - MashEnterKey() - } - } + 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" { 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(storyStyle.Render(hitTheStreets)) - fmt.Println(statsStyle.Render(statsCombat)) - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - fmt.Scan(&choice) - switch { - case strings.ToUpper(choice) == "B": - ClearScreen() - isThereRandomEvent := rand.IntN(6) - switch { - case isThereRandomEvent == 1: - RandomEvent() - } - bumHP = 100 * level - enemyList := []string{"homeless maniac", "drug addled homeless bum", "shit smeared homeless bum", "crazy homeless person", - "tent dweller surrounded by needles"} // list of enemy names in a slice - enemyNameGen := enemyList[rand.IntN(len(enemyList))] // picks a random enemy name from the slice - enemyName := strings.Clone(enemyNameGen) // memory copy from generated name - attackList := []string{"a broken whiskey bottle!", "a tinfoil hat!", "a rusty heroine needle!", "his crusty dick!", "a soiled newspaper!", - "a crack pipe!", "moldy bread!"} - outerLoop: - for bumHP >= 0 { + fmt.Println(border.Render(statsCombat)) + fmt.Println("(A)ttack") + fmt.Println("(E)scape") + homelessPunch := "" + fmt.Scan(&homelessPunch) + if strings.ToUpper(homelessPunch) == "A" { + chance := rand.IntN(100) + if chance > 40 { ClearScreen() - fmt.Println(storyStyle.Render("Bum Fight!")) + 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() - fmt.Println("You are staring at a ", red.Render(enemyName), "with", bumHP, " HP") - fmt.Println("") - fmt.Println("What do you do?") - fmt.Println("") - CombatStats() - fmt.Println(border.Render(statsCombat)) - fmt.Println("(F)ight") - switch { - case classPsionic: - classPower = classPower + 1 - fmt.Println(superColour.Render("(S)uper Ability: Psychic Blast")) - case classTerminator: - fmt.Println(superColour.Render("(S)uper Ability: Charged Shot")) - case classPsychopath: - fmt.Println(superColour.Render("(S)uper Ability: Chow Down")) - } - fmt.Println("(G)o back to HQ") - fmt.Println("Your choice,") - fmt.Print(green.Render(PlayerName), ">") - homelessFight := "" - fmt.Scan(&homelessFight) - switch { - case strings.ToUpper(homelessFight) == "F": - chance := rand.IntN(100) - switch { - case chance > 40: - attackPW := attack // Grabbing default attack power - switch { - case fentanyl <= 0: - attackPW = attackPW * level - default: - buffs := attack * fentanyl // default attack power multiplied by amount of fentanyl - modifier := level * 2 // double the damage based on level - attackPW = attackPW + buffs + modifier // - } - bumHP = bumHP - attackPW // attack homeless person - ClearScreen() - fmt.Println(red.Render("You smash the bum for "), attack, "HP!") - fmt.Println("The bum has ", bumHP, "HP left") - MashEnterKey() - switch { - case bumHP <= 0: // If you kill the bum, you get money and new stats - money = money*level + 300 - bumfights = bumfights - 1 - experienceGain := cocaines * 100 - levelGain := level * 100 - experience = experience + levelGain + experienceGain + levelGain - break outerLoop // this will break out the loop and sends you back to the combat menu - } - default: - ClearScreen() - fmt.Println(red.Render("You missed, he dodged your attack!")) - fmt.Println() - homelessAttack := 20 - playerHP = playerHP - homelessAttack - randomAttack := attackList[rand.IntN(len(attackList))] - fmt.Println(red.Render("The "), enemyName, red.Render("attacks you with "), randomAttack, red.Render(" for"), homelessAttack, red.Render(" HP")) - fmt.Println("Perhaps you should lay off the donuts...") - MashEnterKey() - switch { - case playerHP <= 0: - bumHP = 100 - break hitLoop - } - } - case strings.ToUpper(homelessFight) == "S": - switch { - case classPsionic: - psionicBlast := classPower * (attack * level) // This is supposed to seperate the atk and lvl variables so math works - bumHP = bumHP - psionicBlast - classPower = 1 - ClearScreen() - fmt.Println(superColour.Render("You blast the"), enemyName, superColour.Render(" for"), psionicBlast, superColour.Render("HP")) - fmt.Println("The bum has ", bumHP, "HP left") - MashEnterKey() - switch { - case bumHP <= 0: // If you kill the bum, you get money and new stats - money = money*level + 300 - bumfights = bumfights - 1 - experienceGain := cocaines * 100 - levelGain := level * 100 - experience = experience + levelGain + experienceGain + levelGain - break outerLoop // this will break out the loop and sends you back to the combat menu - } - case classPsychopath: - psychoUP := classPower * (attack * level) // same as above - bumHP = bumHP - psychoUP - classPower = 1 - ClearScreen() - fmt.Println(superColour.Render("You take a bite out of "), enemyName, superColour.Render(" for"), psychoUP, superColour.Render("HP")) - fmt.Println("The bum has ", bumHP, "HP left") - psychoBuff := psychoUP / 2 // This part takes half the damage you deal - playerHP = playerHP + psychoBuff // and converts it into health. - fmt.Println("You also absorb life force by digesting the flesh, gaining ", psychoUP, superColour.Render("HP!")) - MashEnterKey() - switch { - case bumHP <= 0: // If you kill the bum, you get money and new stats - money = money*level + 300 - bumfights = bumfights - 1 - experienceGain := cocaines * 100 - levelGain := level * 100 - experience = experience + levelGain + experienceGain + levelGain - break outerLoop // this will break out the loop and sends you back to the combat menu - } - - case classTerminator: - chargedShot := classPower * (attack * level * 2) // as above so below - bumHP = bumHP - chargedShot - classPower = 1 - ClearScreen() - fmt.Println(superColour.Render("You pull a plasma blaster out of your robotic leg and shoot the "), enemyName, superColour.Render(" for"), chargedShot, superColour.Render("HP")) - fmt.Println("The bum has ", bumHP, "HP left") - MashEnterKey() - switch { - case bumHP <= 0: // If you kill the bum, you get money and new stats - money = money*level + 300 - bumfights = bumfights - 1 - experienceGain := cocaines * 100 - levelGain := level * 100 - experience = experience + levelGain + experienceGain + levelGain - break outerLoop // this will break out the loop and sends you back to the combat menu - } - - } - default: - fmt.Println("You go back to HQ.") - MashEnterKey() - bumfights = bumfights - 1 - break hitLoop - } + fmt.Println("Perhaps you should lay off the donuts...") + bumfights = bumfights - 1 + MashEnterKey() + i = 0 } + } else { + fmt.Println("You escape successfully.") bumfights = bumfights - 1 - case strings.ToUpper(choice) == "R": - MainMachine() + MashEnterKey() + i = 0 } + } else { + i = 1 } - MainMachine() } + MainMachine() } func RedRoom() { @@ -527,71 +185,63 @@ func RedRoom() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - switch { - case strings.ToUpper(choice) == "B": // buy hooker + // buy whore + if strings.ToUpper(choice) == "B" { ClearScreen() fmt.Println(slutStyle.Render("Sex Slave Menu")) - fmt.Println("Price: ", red.Render("$2000 per hooker.")) + fmt.Println("Price: ", red.Render("$2000 per whore.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") - fmt.Println("Buy one hooker (Y/N)?") - fmt.Print(green.Render(PlayerName), ">") + fmt.Println("Buy one sex slave (Y/N)?") slavePurchase := "" fmt.Scan(&slavePurchase) - switch { - case strings.ToUpper(slavePurchase) == "Y": - switch { - case money >= 2000: - hookers = hookers + 1 - money = money - 2000 + if strings.ToUpper(slavePurchase) == "Y" { + if money > 2000 { + whores = whores + 1 + money = money - 5000 ClearScreen() - fmt.Println(slutStyle.Render("You just purchased 1 hooker, you da pimp!")) + fmt.Println(slutStyle.Render("You just purchased 1 whore to be a sex slave!")) MashEnterKey() i = 0 - default: + } else { ClearScreen() fmt.Println(slutStyle.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - default: + } else { i = 0 } - - case strings.ToUpper(choice) == "P": // Buy Connies (Condoms) + } else if strings.ToUpper(choice) == "P" { 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), ">") + fmt.Println("Buy connies (Y/N)?") lapPurchase := "" fmt.Scan(&lapPurchase) - switch { - case strings.ToUpper(lapPurchase) == "Y": - switch { - case money >= 10: + if strings.ToUpper(lapPurchase) == "Y" { + if 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: + } else { ClearScreen() fmt.Println(slutStyle.Render("Get some money, broke-ass!")) MashEnterKey() ClearScreen() i = 0 } - default: + } else { i = 0 } - case strings.ToUpper(choice) == "L": // Get Lap Dance + } else if strings.ToUpper(choice) == "L" { ClearScreen() fmt.Println(slutStyle.Render("Get a fucking lap dance!")) fmt.Println("Price: ", red.Render("$20 for a 3 minute song.")) @@ -600,104 +250,83 @@ func RedRoom() { fmt.Println("Buy a lap dance (Y/N)?") lapPurchase := "" fmt.Scan(&lapPurchase) - switch { - case strings.ToUpper(lapPurchase) == "Y": - money = money - 20 - ClearScreen() - fmt.Println(slutStyle.Render("That slut grinds on your dick to the song 'I like it that way' by Backstreet Boys.")) - fmt.Println() - fmt.Println("That shit was so hot, you shot a hot load in your pants.") - playerHP = playerHP + 100 - MashEnterKey() - i = 0 - default: - ClearScreen() - fmt.Println(slutStyle.Render("Get some money, broke-ass!")) - MashEnterKey() - i = 0 - } - - case strings.ToUpper(choice) == "F": // Fuck hooker - ClearScreen() - fmt.Println(border.Render("Get your dick wet at OPP McDick's")) - fmt.Println("Price: ", red.Render("$100 to fuck a hooker for an hour.")) - fmt.Println("Your cash: $", strconv.Itoa(money)) - fmt.Println("") - fmt.Println("Buy an hour with a hooker (Y/N)?") - fmt.Print(green.Render(PlayerName), ">") - fuckPurchase := "" - fmt.Scan(&fuckPurchase) - switch { - case strings.ToUpper(fuckPurchase) == "Y": - switch { - case money >= 100: - money = money - 100 - playerHP = playerHP + 200 - switch { - case condoms == 0: - stdChance := rand.IntN(100) - preggoChance := rand.IntN(100) - switch { - case renegadeRank >= 10: - stdChance = 100 - preggoChance = 25 - } - - ClearScreen() - fmt.Println(slutStyle.Render(wifeyFucked)) - fmt.Println("You just fucked a dirty hooker! Oh... shit, it's your cousin!") - MashEnterKey() - - switch { // checking your sti chance - case stdChance <= 50: - infections = infections + 1 - ClearScreen() - fmt.Println(red.Render("Uh oh!")) - fmt.Println(slutStyle.Render("You got an infection!")) - MashEnterKey() - } - - switch { // checking your chance at having a kid - case preggoChance <= 25: - ClearScreen() - fmt.Println(red.Render("Uh oh!")) - fmt.Println(slutStyle.Render("You got the hooker pregnant! Do you want to sell the kid to Pakistan for $500?")) - fmt.Print(green.Render(PlayerName), "(Y/N) >") - soccerBalls := "" - fmt.Scan(&soccerBalls) - switch { - case strings.ToUpper(soccerBalls) == "Y": - money = money + 500 - fmt.Println(red.Render("Bonus! You just made $500... The kid is great at sewing soccer balls!")) - MashEnterKey() - default: - fmt.Println(red.Render("You have too much of a heart to sell your kid. Now you have to pay child support!")) - offspring = offspring + 1 - fmt.Println("") - fmt.Println(red.Render("Fuck!")) - MashEnterKey() - } - } - default: - condoms = condoms - 1 - } + 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 came in your pants.") + MashEnterKey() i = 0 - default: + } else { ClearScreen() - fmt.Println(red.Render("Get some money, broke-ass!")) + fmt.Println(slutStyle.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - default: + } else { i = 0 } + // Fuck Whore - case strings.ToUpper(choice) == "R": // Return to HQ + } else if strings.ToUpper(choice) == "F" { + 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)?") + fuckPurchase := "" + fmt.Scan(&fuckPurchase) + if strings.ToUpper(fuckPurchase) == "Y" { + if money > 100 { + money = money - 100 + if condoms == 0 { + stdChance := rand.IntN(100) + preggoChance := rand.IntN(100) + 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?")) + soccerBalls := "" + fmt.Scan(&soccerBalls) + if strings.ToUpper(soccerBalls) == "Y" { + money = money + 500 + fmt.Println(border.Render("Bonus! You just made $500!")) + } else { + + } + } + } else { + condoms = condoms - 1 + } + 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 { + i = 0 + } + // Return to HQ + } else if strings.ToUpper(choice) == "R" { i = 1 - - default: - i = 0 // If any other input is given, loop again + MainMachine() + } else { + i = 0 } } } @@ -712,55 +341,49 @@ func DoctorsOffice() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - switch { - case strings.ToUpper(choice) == "C": + if strings.ToUpper(choice) == "C" { ClearScreen() - fmt.Println(storyStyle.Render("Doctor's Miracle STI Cures")) + 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' STI for $100?") + 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: + if strings.ToUpper(stdCure) == "Y" { + if money > 100 { fmt.Println("You pay the doctor $100 and you and/or your 'friends' are cured.") money = money - 100 - infections = 0 + std = false i = 1 MashEnterKey() - default: - fmt.Println("You're too poor to cure your infections.") + } else { + fmt.Println("You're too poor to cure your disease.") i = 1 - switch { - case infections >= 1: - fmt.Println("But you still have an infection.") + if std { + fmt.Println("But you still have a disease.") MashEnterKey() - default: + } else { fmt.Println() MashEnterKey() } - } - default: + } else { ClearScreen() fmt.Println("No cure for you. I guess.") - switch { - case infections > 0: - fmt.Println("But you still have an infection.") + if std { + fmt.Println("But you still have a disease.") + MashEnterKey() + } else { + fmt.Println() MashEnterKey() - i = 1 - default: - i = 1 } i = 0 } - default: + } else { ClearScreen() fmt.Println("You head back to HQ.") MashEnterKey() @@ -776,124 +399,92 @@ func PropertyRoom() { i := 0 choice := "" for i < 1 { - fmt.Println(propertyStyle.Render(propertyRoom)) + fmt.Println(storyStyle.Render(propertyRoom)) fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - switch { - case strings.ToUpper(choice) == "C": // Cocaine Menu + if strings.ToUpper(choice) == "C" { ClearScreen() - fmt.Println(propertyStyle.Render("Cocaine Menu")) + fmt.Println(border.Render("Cocaine Menu")) fmt.Println("Price: ", red.Render("$1000 per gram.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") fmt.Println("Buy one gram (Y/N)?") cokePurchase := "" fmt.Scan(&cokePurchase) - switch { // Check purchase confirmation (Y/N) - case strings.ToUpper(cokePurchase) == "Y": - switch { // Check money - case money >= 1000: - switch { - case renegadeRank <= 10: - cocaines = cocaines + 2 - fmt.Println("You just purchased 1 gram of coke! Here is one on the house for being a team player!") - default: - cocaines = cocaines + 1 - fmt.Println("You just purchased 1 gram of coke!") - - } + if strings.ToUpper(cokePurchase) == "Y" { + if money > 1000 { + cocaines = cocaines + 1 money = money - 1000 ClearScreen() - + fmt.Println("You just purchased 1 gram of coke!") MashEnterKey() i = 0 - default: + } else { ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - default: + } else { i = 0 } - - case strings.ToUpper(choice) == "L": // LSD Menu + } else if strings.ToUpper(choice) == "L" { ClearScreen() - fmt.Println(propertyStyle.Render("LSD Menu")) + fmt.Println(border.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)?") + fmt.Println("Buy six tabs (Y/N)?") LSDPurchase := "" fmt.Scan(&LSDPurchase) - switch { // Check purchase confirmation (Y/N) - case strings.ToUpper(LSDPurchase) == "Y": - switch { - case money >= 100: // When money is at least 100 do the following - switch { - case renegadeRank <= 10: - LSD = LSD + 10 - fmt.Println("You just purchased 5 tabs of LSD! I'm tossing in a free sample since you're such a team player!") - default: - LSD = LSD + 5 - fmt.Println("You just purchased 5 tabs of LSD! Fuck yeah!") - } + if strings.ToUpper(LSDPurchase) == "Y" { + if money > 100 { + 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 + } else { ClearScreen() - fmt.Println(red.Render("You don't have the greenbacks, loser!")) + fmt.Println(red.Render("You don't have the greenbacks, loser! Get some money, broke-ass!")) MashEnterKey() i = 0 } - default: + } else { i = 0 } - - case strings.ToUpper(choice) == "F": // Fentanyl Menu + } else if strings.ToUpper(choice) == "F" { ClearScreen() - fmt.Println(propertyStyle.Render("Fentanyl Menu")) + fmt.Println(border.Render("Fentanyl Menu")) fmt.Println("Price: ", red.Render("$500 per hundred milligrams.")) fmt.Println("Your cash: $", strconv.Itoa(money)) fmt.Println("") fmt.Println("Buy 100 milligrams (Y/N)?") fentyPurchase := "" fmt.Scan(&fentyPurchase) - switch { // Check purchase confirmation (Y/N) - case strings.ToUpper(fentyPurchase) == "Y": - switch { // Check money - case money >= 500: - switch { - case renegadeRank <= 10: - fentanyl = fentanyl + 2 - fmt.Println("You just purchased 1 bag of fenty! And one is on the house!") - default: - fentanyl = fentanyl + 1 - fmt.Println("You just purchased 1 bag of fenty!") - } + if strings.ToUpper(fentyPurchase) == "Y" { + if money > 500 { + fentanyl = fentanyl + 1 money = money - 500 ClearScreen() + fmt.Println("You just purchased 1 bag of fenty!") MashEnterKey() i = 0 - default: + } else { ClearScreen() fmt.Println(red.Render("Get some money, broke-ass!")) MashEnterKey() i = 0 } - default: + } else { i = 0 } - - case strings.ToUpper(choice) == "R": // Return to Main Machine + } else if strings.ToUpper(choice) == "R" { i = 1 MainMachine() - - default: // Invalid input + } else { i = 0 } } @@ -902,7 +493,7 @@ func PropertyRoom() { func ClockOut() { choice := 0 ClearScreen() - fmt.Println(slutStyle.Render(wifey)) + fmt.Println(storyStyle.Render(wifey)) for choice < 1 { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") @@ -910,21 +501,20 @@ func ClockOut() { 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: + if chance < 50 { + 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)")) MashEnterKey() ClearScreen() + } else { + fmt.Println(red.Render("You bust your wife right in the fucking face!")) } - default: + } else { 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!")) @@ -936,7 +526,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 off her leg.") + fmt.Println("She apologizes for the cold dinner while she wipes the semen and blood from her butthole.") MashEnterKey() choice = 1 case 3: @@ -947,24 +537,19 @@ func ClockOut() { } ClearScreen() fmt.Println(border.Render("It is a new day!")) - switch { - case days <= 0: + if days == 0 { fmt.Println("You have run out of days...") MashEnterKey() GameOver() - default: + } else { days = days - 1 - switch { - case infections >= 1: - bumfights = bumfightsTotal - 15 - infections - default: + if std { + bumfights = bumfightsTotal - 15 + } else { bumfights = bumfightsTotal } - childsupport = offspring * 100 - diseaseUpkeep := infections * 25 - hookersProfit := hookers * 500 - income := hookersProfit - childsupport - diseaseUpkeep - money = money + taxes + income + prostituteIncome := whores*500 - childsupport + money = money + taxes + prostituteIncome fmt.Println("Cha ching! You now have ", money) MainMachine() } @@ -984,42 +569,32 @@ 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" + "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 + 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 } func CombatStats() { - switch { - case experience >= 1000: + if experience == 1000 { level = 2 - case experience >= 4000: + } else if experience == 4000 { level = 3 - case experience >= 9000: + } else if experience == 8000 { level = 4 - case experience >= 18000: + } else if experience == 25000 { level = 5 - case experience >= 30000: + } else if experience == 75000 { level = 6 - case experience >= 60000: + } else if experience == 120000 { level = 7 - case experience >= 120000: + } else if experience == 175000 { level = 8 - case experience >= 240000: + } else if experience == 250000 { level = 9 - case experience >= 480000: + } else if experience == 1000000 { 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 + } 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 + 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 } func MainMachine() { @@ -1031,19 +606,26 @@ func MainMachine() { fmt.Println("Your choice,") fmt.Print(green.Render(PlayerName), ">") fmt.Scan(&choice) - switch { - case strings.ToUpper(choice) == "H": + if strings.ToUpper(choice) == "H" { HitTheStreets() - case strings.ToUpper(choice) == "P": + i = 1 + } else if strings.ToUpper(choice) == "P" { PropertyRoom() - case strings.ToUpper(choice) == "R": + i = 1 + } else if strings.ToUpper(choice) == "B" { + breakRoom() + i = 1 + } else if strings.ToUpper(choice) == "R" { RedRoom() - case strings.ToUpper(choice) == "D": + i = 1 + } else if strings.ToUpper(choice) == "D" { DoctorsOffice() - case strings.ToUpper(choice) == "G": + i = 1 + } else if strings.ToUpper(choice) == "G" { ClockOut() - case strings.ToUpper(choice) == "Q": - GameOver() + i = 1 + } else { + i = 0 } } } @@ -1069,8 +651,6 @@ 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() } diff --git a/menu.txt b/menu.txt index 5988684..9416917 100644 --- a/menu.txt +++ b/menu.txt @@ -1,9 +1,11 @@ MAIN MENU -(H)it the Streets -(P)roperty Room -(B)reak Room -(R)ed Room -(D)octor -(G)oodbye -(Q)uit the game +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