oppwars/main.go
2025-08-07 10:04:10 +00:00

579 lines
15 KiB
Go

package main
import (
"fmt"
"math/rand/v2"
"os"
"strconv"
"strings"
"bufio"
_ "embed"
"github.com/charmbracelet/lipgloss"
)
// These are variables for embeding files - dont remove them, they just look like comments
//go:embed menu.txt
var menu string
//go:embed levels/wifey.txt
var wifey string
//go:embed levels/wife-fucked.txt
var wifeyFucked string
//go:embed officers.txt
var officers string
//go:embed intro.txt
var intro string
//go:embed levels/propertyRoom.txt
var propertyRoom string
//go:embed levels/redRoom.txt
var redRoom string
//go:embed levels/hitTheStreets.txt
var hitTheStreets string
//go:embed levels/doctorsRoom.txt
var doctorsRoom string
// End File Ebeds
// other variables - keep these from mixing with above embed strigs - its a weird go thing
var stats string
var statsCombat string
var PlayerName string
var condoms = 0
var std = false
var money = 1800
var experience = 100
var level = 1
var whores = 1
var cocaines = 0
var fentanyl = 0
var LSD = 0
var bumfights = 25
var border = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
BorderForeground(lipgloss.Color("63"))
var storyBorder = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("228")).
BorderBackground(lipgloss.Color("#0000FF"))
var statsStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#2a2a60ff"))
var red = lipgloss.NewStyle().
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#f20b0bff"))
var pink = lipgloss.NewStyle().
Foreground(lipgloss.Color("#ee00e2ff "))
var green = lipgloss.NewStyle().
Foreground(lipgloss.Color("#18e60aff ")).
Background(lipgloss.Color("#55576aff"))
func ClearScreen() {
fmt.Print("\033[H\033[2J")
}
func MashEnterKey() {
fmt.Println(statsStyle.Render("Mash the 'Enter' key!"))
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
func breakRoom() {
fmt.Println("Not Implemented")
MainMachine()
}
func HitTheStreets() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
ClearScreen()
fmt.Println(storyBorder.Render(hitTheStreets))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
if strings.ToUpper(choice) == "B" {
ClearScreen()
fmt.Println(storyBorder.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")
homelessPunch := ""
fmt.Scan(&homelessPunch)
if strings.ToUpper(homelessPunch) == "A" {
chance := rand.IntN(100)
if chance > 40 {
ClearScreen()
fmt.Println("You just hit the homeless bum and cracked his skull!")
fmt.Println("You sprinkle some crack on him and move along.")
MashEnterKey()
experience = experience + 100
money = money + 50
bumfights = bumfights - 1
i = 0
} else {
ClearScreen()
fmt.Println(red.Render("You missed, and he got away!"))
fmt.Println()
fmt.Println("Perhaps you should lay off the donuts...")
bumfights = bumfights - 1
MashEnterKey()
i = 0
}
} else {
fmt.Println("You escape successfully.")
bumfights = bumfights - 1
MashEnterKey()
i = 0
}
} else {
i = 1
}
}
MainMachine()
}
func RedRoom() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
fmt.Println(storyBorder.Render(redRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
// buy whore
if strings.ToUpper(choice) == "B" {
ClearScreen()
fmt.Println(border.Render("Sex Slave Menu"))
fmt.Println("Price: ", red.Render("$5000 per whore."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy one sex slave (Y/N)?")
slavePurchase := ""
fmt.Scan(&slavePurchase)
if strings.ToUpper(slavePurchase) == "Y" {
if money > 5000 {
whores = whores + 1
money = money - 5000
ClearScreen()
fmt.Println("You just purchased 1 whore to be a sex slave!")
MashEnterKey()
i = 0
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
} else if strings.ToUpper(choice) == "L" {
ClearScreen()
fmt.Println(border.Render("Get a fucking lap dance!"))
fmt.Println("Price: ", red.Render("$20 for a 3 minute song."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy a lap dance (Y/N)?")
lapPurchase := ""
fmt.Scan(&lapPurchase)
if strings.ToUpper(lapPurchase) == "Y" {
if money > 20 {
money = money - 20
ClearScreen()
fmt.Println("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
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
// Fuck Whore
} 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
condoms = condoms - 1
if condoms == 0 {
std = true
} else {
fmt.Println()
}
ClearScreen()
fmt.Println(pink.Render(wifeyFucked))
fmt.Println("You just fucked a dirty whore! Oh... shit, it's your cousin!")
MashEnterKey()
i = 0
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else if strings.ToUpper(choice) == "P" {
ClearScreen()
fmt.Println(border.Render("Purchase Condoms"))
fmt.Println("Price: ", red.Render("$10 to buy a five pack of connies."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy a five pack (Y/N)?")
fuckPurchase := ""
fmt.Scan(&fuckPurchase)
if strings.ToUpper(fuckPurchase) == "Y" {
if money > 10 {
money = money - 10
condoms = condoms + 5
ClearScreen()
fmt.Println("You just purchased a five pack of connies.")
MashEnterKey()
i = 0
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
// Return to HQ
} else if strings.ToUpper(choice) == "R" {
i = 1
MainMachine()
} else {
i = 0
}
}
}
}
func DoctorsOffice() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
ClearScreen()
fmt.Println(storyBorder.Render(doctorsRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
if strings.ToUpper(choice) == "C" {
ClearScreen()
fmt.Println(storyBorder.Render("Doctor's Miracle STD/STI Cures"))
fmt.Println()
fmt.Println("You encounter ", red.Render("the doctor."))
fmt.Println("")
fmt.Println("Do you want to cure you or your 'friends' STD/STI for $100?")
fmt.Println("")
fmt.Println("(Y)es")
fmt.Println("(N)o")
stdCure := ""
fmt.Scan(&stdCure)
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
std = false
i = 1
MashEnterKey()
} else {
fmt.Println("You're too poor to cure your disease.")
i = 1
if std {
fmt.Println("But you still have a disease.")
MashEnterKey()
} else {
fmt.Println()
MashEnterKey()
}
}
} else {
ClearScreen()
fmt.Println("No cure for you. I guess.")
if std {
fmt.Println("But you still have a disease.")
MashEnterKey()
} else {
fmt.Println()
MashEnterKey()
}
i = 0
}
} else {
ClearScreen()
fmt.Println("You head back to HQ.")
MashEnterKey()
i = 0
}
i = 1
}
MainMachine()
}
func PropertyRoom() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
fmt.Println(storyBorder.Render(propertyRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
if strings.ToUpper(choice) == "C" {
ClearScreen()
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)
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
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
} else if strings.ToUpper(choice) == "L" {
ClearScreen()
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 six tabs (Y/N)?")
LSDPurchase := ""
fmt.Scan(&LSDPurchase)
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
} else {
ClearScreen()
fmt.Println(red.Render("You don't have the greenbacks, loser! Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
} else if strings.ToUpper(choice) == "F" {
ClearScreen()
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)
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
} else {
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
} else {
i = 0
}
} else if strings.ToUpper(choice) == "R" {
i = 1
MainMachine()
} else {
i = 0
}
}
}
func ClockOut() {
choice := 0
ClearScreen()
fmt.Println(storyBorder.Render(wifey))
for choice < 1 {
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch choice {
case 1:
chance := rand.IntN(100)
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()
} else {
fmt.Println(red.Render("You bust your wife right in the fucking face!"))
}
} else {
ClearScreen()
fmt.Println(red.Render("You try to bust your wife in the face but she dodges you and runs out the front door!"))
fmt.Println(red.Render("Oh well.. who is she gonna call bro?"))
MashEnterKey()
}
choice = 1
case 2:
fmt.Println(border.Render(wifeyFucked))
fmt.Println("You successfully hate fucked your wife.")
fmt.Println()
fmt.Println("She apologizes for the cold dinner while she wipes the semen and blood from her butthole.")
MashEnterKey()
choice = 1
case 3:
fmt.Println("You take some of your drugs. You are enjoying your life for once.")
choice = 1
default:
choice = 0
}
}
}
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) // builds the stats paragraph for the main screen
}
func CombatStats() {
if experience == 1000 {
level = 2
} else if experience == 4000 {
level = 3
} else if experience == 8000 {
level = 4
} else if experience == 25000 {
level = 5
} else if experience == 75000 {
level = 6
} else if experience == 120000 {
level = 7
} else if experience == 175000 {
level = 8
} else if experience == 250000 {
level = 9
} else if experience == 1000000 {
level = 10
} else {
fmt.Println()
}
statsCombat = "COMBAT STATS" + "\n\n" + "Name " + "\n" + 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() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
ScreenMachine()
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
if strings.ToUpper(choice) == "H" {
HitTheStreets()
i = 1
} else if strings.ToUpper(choice) == "P" {
PropertyRoom()
i = 1
} else if strings.ToUpper(choice) == "B" {
breakRoom()
i = 1
} else if strings.ToUpper(choice) == "R" {
RedRoom()
i = 1
} else if strings.ToUpper(choice) == "D" {
DoctorsOffice()
i = 1
} else if strings.ToUpper(choice) == "G" {
ClockOut()
i = 1
} else {
i = 0
}
}
}
func ScreenMachine() {
CheckStats()
fmt.Println(border.Render("OPP Wars - Corruption"))
fmt.Println(lipgloss.JoinHorizontal(lipgloss.Top, border.Render(menu), statsStyle.Render(stats))) // makes a horizontal display joining two paras
}
func main() {
officerStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("0000FF"))
fmt.Println(border.Render("OPP Wars - Corruption"))
fmt.Println(officerStyle.Render(officers))
MashEnterKey()
ClearScreen()
fmt.Println(border.Render("OPP Wars - Corruption"))
fmt.Println(storyBorder.Render(intro))
fmt.Print("Enter your damned name, Constable: ")
reader := bufio.NewReader(os.Stdin)
prompt, _ := reader.ReadString('\n')
playerNameMaker := strings.Clone(prompt)
PlayerName = strings.TrimRight(playerNameMaker, "\n") // removes a trailing "Return" key that fucks everything up (i dont want the enter key IN the variable)
ClearScreen()
MainMachine()
}