oppwars/main.go

1076 lines
31 KiB
Go

package main
import (
"fmt"
"math/rand/v2"
"os"
"strconv"
"strings"
"bufio"
_ "embed"
"github.com/charmbracelet/lipgloss"
)
// =-=-=-=-=-= These are variables for embeding files as hardcoded strings - dont remove them, they just LOOK like comments =-=-=-=-=-=-=
//go:embed menu.txt
var menu string
//go:embed levels/wifey.txt
var wifey string
//go:embed levels/wife-fucked.txt
var wifeyFucked string
//go:embed officers.txt
var officers string
//go:embed intro.txt
var intro string
//go:embed levels/propertyRoom.txt
var propertyRoom string
//go:embed levels/redRoom.txt
var redRoom string
//go:embed levels/hitTheStreets.txt
var hitTheStreets string
//go:embed levels/doctorsRoom.txt
var doctorsRoom string
//go:embed levels/randomEvent1.txt
var randomEvent1 string
//go:embed levels/randomEvent2.txt
var randomEvent2 string
//go:embed levels/randomEvent3.txt
var randomEvent3 string
//go:embed levels/randomEvent4.txt
var randomEvent4 string
//go:embed levels/randomEvent5.txt
var randomEvent5 string
//go:embed classSelect.txt
var classSelect string
// =-=-=-=-=-=-= End File String Embeds =-=-=-=-=-=-=
// Game Variables - Core Gameplay
var stats string // variable for stats generation output
var statsCombat string // variable used for combat stats generation during fights
var PlayerName string // player's name...
var condoms = 0 // its better to have them and not need them
var infections = 0 // what happens if you don't have connies
var money = 1800 // not specific currency
var days = 30 // total number of days (default 30)
var experience = 0 // your experience from combat battle fights (starts at 0)
var level = 1 // your level from combat battle fights (starts at 1)
var hookers = 0 // number of sex slaves you own
var cocaines = 0 // cocaine in 1/gram units
var fentanyl = 0 // fentanyl in 500 miligram units
var LSD = 0 // LSD in pills
var bumfights = 25 // default number of homeless bum fights per day
const bumfightsTotal = 25 // total bumfights used to reset bum fights per day
const taxes = 500 // skimming off the top
var offspring = 0 // number of children you have by default
var childsupport = 0 // default 0 but changes if you get a hoe preggers
// Character Stats
var playerHP = 200 // default hit points for the player
var attack = 40 // default attack strength
var paragonRank = 0 // default goodness rank
var renegadeRank = 0 // default evil rank
// character classes
var classTerminator = false // the robot warrior class
var classPsionic = false // the psionic magic class
var classPower = 1 // default starter psionic power
var classPsychopath = false // the psychopath torture class
// Props to Lipgloss!
// These are colour and border styles for the game dialogs.
var border = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
BorderForeground(lipgloss.Color("63"))
var titleStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
BorderForeground(lipgloss.Color("#f20b0bff")).
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#f20b0bff"))
var storyStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("228")).
BorderBackground(lipgloss.Color("#0000FF")).
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#0000FF"))
var propertyStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("228")).
BorderBackground(lipgloss.Color("#5023aaff")).
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#5023aaff"))
var slutStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("228")).
BorderBackground(lipgloss.Color("#ff00a2ff")).
Background(lipgloss.Color("#ffffffff ")).
Foreground(lipgloss.Color("#ff00a2ff"))
var eventStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("#0d7021ff")).
BorderBackground(lipgloss.Color("#0d7021ff")).
Background(lipgloss.Color("#0d7021ff ")).
Foreground(lipgloss.Color("#ffffffff"))
var classSelectStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Width(75).
BorderForeground(lipgloss.Color("#0a72aaff")).
BorderBackground(lipgloss.Color("#0a72aaff")).
Background(lipgloss.Color("#0a72aaff")).
Foreground(lipgloss.Color("#ffffffff"))
var statsStyle = lipgloss.NewStyle().
BorderStyle(lipgloss.NormalBorder()).
Foreground(lipgloss.Color("#ffffffff ")).
Background(lipgloss.Color("#2a2a60ff"))
var red = lipgloss.NewStyle().
Foreground(lipgloss.Color("#f20b0bff"))
var superColour = lipgloss.NewStyle().
Foreground(lipgloss.Color("#c6d007ff"))
var green = lipgloss.NewStyle().
Foreground(lipgloss.Color("#13820bff "))
// why the fuck does golang not do this - should work on win10/11 (yes it does support ansi escape codes *now*)
func ClearScreen() {
fmt.Print("\033[H\033[2J") // this does appear to work on windows pe liveiso from win11 (tested in qemu)
}
// Cool stylized Enter key masher
func MashEnterKey() {
fmt.Println(statsStyle.Render("Mash the 'Enter' key!"))
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
func RandomEvent() {
eventSelection := rand.IntN(5)
switch eventSelection {
case 1:
outerLoop1:
for {
fmt.Println(eventStyle.Render(randomEvent1))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
renegadeRank = renegadeRank + 1
paragonRank = paragonRank - 1
break outerLoop1
case 2:
paragonRank = paragonRank + 1
renegadeRank = renegadeRank - 1
break outerLoop1
default:
fmt.Println("Invalid Choice, Fool!")
MashEnterKey()
}
}
case 2:
outerLoop2:
for {
fmt.Println(eventStyle.Render(randomEvent2))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
renegadeRank = renegadeRank + 1
paragonRank = paragonRank - 1
money = money + 500
cocaines = cocaines + 2
break outerLoop2
case 2:
paragonRank = paragonRank + 1
renegadeRank = renegadeRank - 1
break outerLoop2
default:
fmt.Println("Invalid Choice, Fool!")
MashEnterKey()
}
}
case 3:
outerLoop3:
for {
fmt.Println(eventStyle.Render(randomEvent3))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
renegadeRank = renegadeRank + 2
paragonRank = paragonRank - 2
break outerLoop3
case 2:
renegadeRank = renegadeRank + 1
paragonRank = paragonRank - 1
break outerLoop3
case 3:
paragonRank = paragonRank + 1
renegadeRank = renegadeRank - 1
break outerLoop3
case 4:
paragonRank = paragonRank + 2
renegadeRank = renegadeRank - 2
break outerLoop3
default:
fmt.Println("Invalid Choice, Fool!")
MashEnterKey()
}
}
case 4:
outerLoop4:
for {
fmt.Println(eventStyle.Render(randomEvent4))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
renegadeRank = renegadeRank + 1
paragonRank = paragonRank - 1
fentanyl = fentanyl + 2
break outerLoop4
case 2:
paragonRank = paragonRank + 2
renegadeRank = renegadeRank - 2
break outerLoop4
default:
fmt.Println("Invalid Choice, Fool!")
MashEnterKey()
}
}
case 5:
outerLoop5:
for {
fmt.Println(eventStyle.Render(randomEvent5))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
renegadeRank = renegadeRank + 1
paragonRank = paragonRank - 1
money = money + 1000
break outerLoop5
case 2:
paragonRank = paragonRank + 1
renegadeRank = renegadeRank - 1
break outerLoop5
default:
fmt.Println("Invalid Choice, Fool!")
MashEnterKey()
}
}
}
}
func ClassSelection() {
classLoop:
for {
ClearScreen()
fmt.Println(classSelectStyle.Render(classSelect))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
choice := 0
fmt.Scan(&choice)
switch choice {
case 1:
classPsychopath = true
break classLoop
case 2:
classPsionic = true
break classLoop
case 3:
classTerminator = true
break classLoop
default:
fmt.Println("Incorrect Selection")
MashEnterKey()
}
}
}
func HitTheStreets() {
ClearScreen()
choice := ""
bumHP := 100
i := 1
hitLoop:
for bumHP >= 0 {
for i > 0 {
ClearScreen()
switch paragonRank {
case 10: // when paragonRank reaches 10 we give a 25% chance to get shot for being a good cop
isThereRandomGoodPunishment := rand.IntN(4)
switch isThereRandomGoodPunishment {
case 1:
gangsterShot := 50 * level
fmt.Println(eventStyle.Render("Your recent string of high-profile good deeds within your department has turned them against you."))
fmt.Println("")
MashEnterKey()
fmt.Println(eventStyle.Render("A gang of drug dealers are unleashed upon you by Captain Grimstead himself!"))
fmt.Println(red.Render("They drive by in a noisy Cadillac spraying bullets in your direction. You get shot for "), gangsterShot, red.Render(" HP!"))
playerHP = playerHP - gangsterShot
MashEnterKey()
}
}
ClearScreen()
CombatStats()
fmt.Println(storyStyle.Render(hitTheStreets))
fmt.Println(statsStyle.Render(statsCombat))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch {
case strings.ToUpper(choice) == "B":
ClearScreen()
isThereRandomEvent := rand.IntN(6)
switch {
case isThereRandomEvent == 1:
RandomEvent()
}
bumHP = 100 * level
enemyList := []string{"homeless maniac", "drug addled homeless bum", "shit smeared homeless bum", "crazy homeless person",
"tent dweller surrounded by needles"} // list of enemy names in a slice
enemyNameGen := enemyList[rand.IntN(len(enemyList))] // picks a random enemy name from the slice
enemyName := strings.Clone(enemyNameGen) // memory copy from generated name
attackList := []string{"a broken whiskey bottle!", "a tinfoil hat!", "a rusty heroine needle!", "his crusty dick!", "a soiled newspaper!",
"a crack pipe!", "moldy bread!"}
outerLoop:
for bumHP >= 0 {
ClearScreen()
fmt.Println(storyStyle.Render("Bum Fight!"))
fmt.Println()
fmt.Println("You are staring at a ", red.Render(enemyName), "with", bumHP, " HP")
fmt.Println("")
fmt.Println("What do you do?")
fmt.Println("")
CombatStats()
fmt.Println(border.Render(statsCombat))
fmt.Println("(F)ight")
switch {
case classPsionic:
classPower = classPower + 1
fmt.Println(superColour.Render("(S)uper Ability: Psychic Blast"))
case classTerminator:
fmt.Println(superColour.Render("(S)uper Ability: Charged Shot"))
case classPsychopath:
fmt.Println(superColour.Render("(S)uper Ability: Chow Down"))
}
fmt.Println("(G)o back to HQ")
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
homelessFight := ""
fmt.Scan(&homelessFight)
switch {
case strings.ToUpper(homelessFight) == "F":
chance := rand.IntN(100)
switch {
case chance > 40:
attackPW := attack // Grabbing default attack power
switch {
case fentanyl <= 0:
attackPW = attackPW * level
default:
buffs := attack * fentanyl // default attack power multiplied by amount of fentanyl
modifier := level * 2 // double the damage based on level
attackPW = attackPW + buffs + modifier //
}
bumHP = bumHP - attackPW // attack homeless person
ClearScreen()
fmt.Println(red.Render("You smash the bum for "), attack, "HP!")
fmt.Println("The bum has ", bumHP, "HP left")
MashEnterKey()
switch {
case bumHP <= 0: // If you kill the bum, you get money and new stats
money = money*level + 300
bumfights = bumfights - 1
experienceGain := cocaines * 100
levelGain := level * 100
experience = experience + levelGain + experienceGain + levelGain
break outerLoop // this will break out the loop and sends you back to the combat menu
}
default:
ClearScreen()
fmt.Println(red.Render("You missed, he dodged your attack!"))
fmt.Println()
homelessAttack := 20
playerHP = playerHP - homelessAttack
randomAttack := attackList[rand.IntN(len(attackList))]
fmt.Println(red.Render("The "), enemyName, red.Render("attacks you with "), randomAttack, red.Render(" for"), homelessAttack, red.Render(" HP"))
fmt.Println("Perhaps you should lay off the donuts...")
MashEnterKey()
switch {
case playerHP <= 0:
bumHP = 100
break hitLoop
}
}
case strings.ToUpper(homelessFight) == "S":
switch {
case classPsionic:
psionicBlast := classPower * (attack * level) // This is supposed to seperate the atk and lvl variables so math works
bumHP = bumHP - psionicBlast
classPower = 1
ClearScreen()
fmt.Println(superColour.Render("You blast the"), enemyName, superColour.Render(" for"), psionicBlast, superColour.Render("HP"))
fmt.Println("The bum has ", bumHP, "HP left")
MashEnterKey()
switch {
case bumHP <= 0: // If you kill the bum, you get money and new stats
money = money*level + 300
bumfights = bumfights - 1
experienceGain := cocaines * 100
levelGain := level * 100
experience = experience + levelGain + experienceGain + levelGain
break outerLoop // this will break out the loop and sends you back to the combat menu
}
case classPsychopath:
psychoUP := classPower * (attack * level) // same as above
bumHP = bumHP - psychoUP
classPower = 1
ClearScreen()
fmt.Println(superColour.Render("You take a bite out of "), enemyName, superColour.Render(" for"), psychoUP, superColour.Render("HP"))
fmt.Println("The bum has ", bumHP, "HP left")
psychoBuff := psychoUP / 2 // This part takes half the damage you deal
playerHP = playerHP + psychoBuff // and converts it into health.
fmt.Println("You also absorb life force by digesting the flesh, gaining ", psychoUP, superColour.Render("HP!"))
MashEnterKey()
switch {
case bumHP <= 0: // If you kill the bum, you get money and new stats
money = money*level + 300
bumfights = bumfights - 1
experienceGain := cocaines * 100
levelGain := level * 100
experience = experience + levelGain + experienceGain + levelGain
break outerLoop // this will break out the loop and sends you back to the combat menu
}
case classTerminator:
chargedShot := classPower * (attack * level * 2) // as above so below
bumHP = bumHP - chargedShot
classPower = 1
ClearScreen()
fmt.Println(superColour.Render("You pull a plasma blaster out of your robotic leg and shoot the "), enemyName, superColour.Render(" for"), chargedShot, superColour.Render("HP"))
fmt.Println("The bum has ", bumHP, "HP left")
MashEnterKey()
switch {
case bumHP <= 0: // If you kill the bum, you get money and new stats
money = money*level + 300
bumfights = bumfights - 1
experienceGain := cocaines * 100
levelGain := level * 100
experience = experience + levelGain + experienceGain + levelGain
break outerLoop // this will break out the loop and sends you back to the combat menu
}
}
default:
fmt.Println("You go back to HQ.")
MashEnterKey()
bumfights = bumfights - 1
break hitLoop
}
}
bumfights = bumfights - 1
case strings.ToUpper(choice) == "R":
MainMachine()
}
}
MainMachine()
}
}
func RedRoom() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
fmt.Println(slutStyle.Render(redRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch {
case strings.ToUpper(choice) == "B": // buy hooker
ClearScreen()
fmt.Println(slutStyle.Render("Sex Slave Menu"))
fmt.Println("Price: ", red.Render("$2000 per hooker."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy one hooker (Y/N)?")
fmt.Print(green.Render(PlayerName), ">")
slavePurchase := ""
fmt.Scan(&slavePurchase)
switch {
case strings.ToUpper(slavePurchase) == "Y":
switch {
case money >= 2000:
hookers = hookers + 1
money = money - 2000
ClearScreen()
fmt.Println(slutStyle.Render("You just purchased 1 hooker, you da pimp!"))
MashEnterKey()
i = 0
default:
ClearScreen()
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "P": // Buy Connies (Condoms)
ClearScreen()
fmt.Println(slutStyle.Render("$10 to buy a five pack of connies?"))
fmt.Println("Price: ", red.Render("$10 for a five pack."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy five connies (Y/N)?")
fmt.Print(green.Render(PlayerName), ">")
lapPurchase := ""
fmt.Scan(&lapPurchase)
switch {
case strings.ToUpper(lapPurchase) == "Y":
switch {
case money >= 10:
money = money - 10
condoms = condoms + 5
ClearScreen()
fmt.Println(slutStyle.Render("You just purchased a five pack of connies."))
fmt.Println()
MashEnterKey()
ClearScreen()
i = 0
default:
ClearScreen()
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
MashEnterKey()
ClearScreen()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "L": // Get Lap Dance
ClearScreen()
fmt.Println(slutStyle.Render("Get a fucking lap dance!"))
fmt.Println("Price: ", red.Render("$20 for a 3 minute song."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy a lap dance (Y/N)?")
lapPurchase := ""
fmt.Scan(&lapPurchase)
switch {
case strings.ToUpper(lapPurchase) == "Y":
money = money - 20
ClearScreen()
fmt.Println(slutStyle.Render("That slut grinds on your dick to the song 'I like it that way' by Backstreet Boys."))
fmt.Println()
fmt.Println("That shit was so hot, you shot a hot load in your pants.")
playerHP = playerHP + 100
MashEnterKey()
i = 0
default:
ClearScreen()
fmt.Println(slutStyle.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
case strings.ToUpper(choice) == "F": // Fuck hooker
ClearScreen()
fmt.Println(border.Render("Get your dick wet at OPP McDick's"))
fmt.Println("Price: ", red.Render("$100 to fuck a hooker for an hour."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy an hour with a hooker (Y/N)?")
fmt.Print(green.Render(PlayerName), ">")
fuckPurchase := ""
fmt.Scan(&fuckPurchase)
switch {
case strings.ToUpper(fuckPurchase) == "Y":
switch {
case money >= 100:
money = money - 100
playerHP = playerHP + 200
switch {
case condoms == 0:
stdChance := rand.IntN(100)
preggoChance := rand.IntN(100)
switch {
case renegadeRank >= 10:
stdChance = 100
preggoChance = 25
}
ClearScreen()
fmt.Println(slutStyle.Render(wifeyFucked))
fmt.Println("You just fucked a dirty hooker! Oh... shit, it's your cousin!")
MashEnterKey()
switch { // checking your sti chance
case stdChance <= 50:
infections = infections + 1
ClearScreen()
fmt.Println(red.Render("Uh oh!"))
fmt.Println(slutStyle.Render("You got an infection!"))
MashEnterKey()
}
switch { // checking your chance at having a kid
case preggoChance <= 25:
ClearScreen()
fmt.Println(red.Render("Uh oh!"))
fmt.Println(slutStyle.Render("You got the hooker pregnant! Do you want to sell the kid to Pakistan for $500?"))
fmt.Print(green.Render(PlayerName), "(Y/N) >")
soccerBalls := ""
fmt.Scan(&soccerBalls)
switch {
case strings.ToUpper(soccerBalls) == "Y":
money = money + 500
fmt.Println(red.Render("Bonus! You just made $500... The kid is great at sewing soccer balls!"))
MashEnterKey()
default:
fmt.Println(red.Render("You have too much of a heart to sell your kid. Now you have to pay child support!"))
offspring = offspring + 1
fmt.Println("")
fmt.Println(red.Render("Fuck!"))
MashEnterKey()
}
}
default:
condoms = condoms - 1
}
ClearScreen()
i = 0
default:
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "R": // Return to HQ
i = 1
default:
i = 0 // If any other input is given, loop again
}
}
}
func DoctorsOffice() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
ClearScreen()
fmt.Println(storyStyle.Render(doctorsRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch {
case strings.ToUpper(choice) == "C":
ClearScreen()
fmt.Println(storyStyle.Render("Doctor's Miracle STI Cures"))
fmt.Println()
fmt.Println("You encounter ", red.Render("the doctor."))
fmt.Println("")
fmt.Println("Do you want to cure you or your 'friends' STI for $100?")
fmt.Println("")
fmt.Println("(Y)es")
fmt.Println("(N)o")
stdCure := ""
fmt.Scan(&stdCure)
switch {
case strings.ToUpper(stdCure) == "Y":
switch {
case money >= 100:
fmt.Println("You pay the doctor $100 and you and/or your 'friends' are cured.")
money = money - 100
infections = 0
i = 1
MashEnterKey()
default:
fmt.Println("You're too poor to cure your infections.")
i = 1
switch {
case infections >= 1:
fmt.Println("But you still have an infection.")
MashEnterKey()
default:
fmt.Println()
MashEnterKey()
}
}
default:
ClearScreen()
fmt.Println("No cure for you. I guess.")
switch {
case infections > 0:
fmt.Println("But you still have an infection.")
MashEnterKey()
i = 1
default:
i = 1
}
i = 0
}
default:
ClearScreen()
fmt.Println("You head back to HQ.")
MashEnterKey()
i = 0
}
i = 1
}
MainMachine()
}
func PropertyRoom() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
fmt.Println(propertyStyle.Render(propertyRoom))
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch {
case strings.ToUpper(choice) == "C": // Cocaine Menu
ClearScreen()
fmt.Println(propertyStyle.Render("Cocaine Menu"))
fmt.Println("Price: ", red.Render("$1000 per gram."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy one gram (Y/N)?")
cokePurchase := ""
fmt.Scan(&cokePurchase)
switch { // Check purchase confirmation (Y/N)
case strings.ToUpper(cokePurchase) == "Y":
switch { // Check money
case money >= 1000:
switch {
case renegadeRank <= 10:
cocaines = cocaines + 2
fmt.Println("You just purchased 1 gram of coke! Here is one on the house for being a team player!")
default:
cocaines = cocaines + 1
fmt.Println("You just purchased 1 gram of coke!")
}
money = money - 1000
ClearScreen()
MashEnterKey()
i = 0
default:
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "L": // LSD Menu
ClearScreen()
fmt.Println(propertyStyle.Render("LSD Menu"))
fmt.Println("Price: ", red.Render("$100 for five tabs."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy five tabs (Y/N)?")
LSDPurchase := ""
fmt.Scan(&LSDPurchase)
switch { // Check purchase confirmation (Y/N)
case strings.ToUpper(LSDPurchase) == "Y":
switch {
case money >= 100: // When money is at least 100 do the following
switch {
case renegadeRank <= 10:
LSD = LSD + 10
fmt.Println("You just purchased 5 tabs of LSD! I'm tossing in a free sample since you're such a team player!")
default:
LSD = LSD + 5
fmt.Println("You just purchased 5 tabs of LSD! Fuck yeah!")
}
money = money - 100
ClearScreen()
MashEnterKey()
i = 0
default: // otherwise do this when the user doesn't have 100 dollars
ClearScreen()
fmt.Println(red.Render("You don't have the greenbacks, loser!"))
MashEnterKey()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "F": // Fentanyl Menu
ClearScreen()
fmt.Println(propertyStyle.Render("Fentanyl Menu"))
fmt.Println("Price: ", red.Render("$500 per hundred milligrams."))
fmt.Println("Your cash: $", strconv.Itoa(money))
fmt.Println("")
fmt.Println("Buy 100 milligrams (Y/N)?")
fentyPurchase := ""
fmt.Scan(&fentyPurchase)
switch { // Check purchase confirmation (Y/N)
case strings.ToUpper(fentyPurchase) == "Y":
switch { // Check money
case money >= 500:
switch {
case renegadeRank <= 10:
fentanyl = fentanyl + 2
fmt.Println("You just purchased 1 bag of fenty! And one is on the house!")
default:
fentanyl = fentanyl + 1
fmt.Println("You just purchased 1 bag of fenty!")
}
money = money - 500
ClearScreen()
MashEnterKey()
i = 0
default:
ClearScreen()
fmt.Println(red.Render("Get some money, broke-ass!"))
MashEnterKey()
i = 0
}
default:
i = 0
}
case strings.ToUpper(choice) == "R": // Return to Main Machine
i = 1
MainMachine()
default: // Invalid input
i = 0
}
}
}
func ClockOut() {
choice := 0
ClearScreen()
fmt.Println(slutStyle.Render(wifey))
for choice < 1 {
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch choice {
case 1:
chance := rand.IntN(100)
switch {
case chance <= 50:
switch cocaines {
case 0:
fmt.Println(red.Render("You bust your wife right in the fucking face!"))
MashEnterKey()
default:
fmt.Println(red.Render("You pull out 1kg of cocaine and smash it open all over your face"))
fmt.Println(red.Render("You shout 'COKE SLAM!'"))
fmt.Println(red.Render("You bust your wife right in the fucking face!"))
fmt.Println(red.Render("YARRRRR! (You don't know why you're a pirate now)"))
MashEnterKey()
ClearScreen()
}
default:
ClearScreen()
fmt.Println(red.Render("You try to bust your wife in the face but she dodges you and runs out the"))
fmt.Println(red.Render("front door!"))
fmt.Println(red.Render("Oh well.. who is she gonna call bro?"))
MashEnterKey()
}
choice = 1
case 2:
fmt.Println(border.Render(wifeyFucked))
fmt.Println("You successfully hate fucked your wife.")
fmt.Println()
fmt.Println("She apologizes for the cold dinner while she wipes the semen off her leg.")
MashEnterKey()
choice = 1
case 3:
fmt.Println("You take some of your drugs. You are enjoying your life for once.")
choice = 1
default:
choice = 0
}
ClearScreen()
fmt.Println(border.Render("It is a new day!"))
switch {
case days <= 0:
fmt.Println("You have run out of days...")
MashEnterKey()
GameOver()
default:
days = days - 1
switch {
case infections >= 1:
bumfights = bumfightsTotal - 15 - infections
default:
bumfights = bumfightsTotal
}
childsupport = offspring * 100
diseaseUpkeep := infections * 25
hookersProfit := hookers * 500
income := hookersProfit - childsupport - diseaseUpkeep
money = money + taxes + income
fmt.Println("Cha ching! You now have ", money)
MainMachine()
}
}
}
func GameOver() {
fmt.Println(border.Render("Game Over, Bitch!!!"))
CheckStats()
CombatStats()
fmt.Println(statsStyle.Render(stats))
fmt.Println(statsStyle.Render(statsCombat))
fmt.Println()
fmt.Println("The game will exit now...")
MashEnterKey()
os.Exit(0)
}
func CheckStats() {
stats = "PLAYER STATS" + "\n\n" + "Name " + "\n" + PlayerName + "\n" + "Hit Points: " + strconv.Itoa(playerHP) + "\n" + "Condoms: " + strconv.Itoa(condoms) + "\n" + "Money: $" + strconv.Itoa(money) + "\n" + "hookers:" + strconv.Itoa(hookers) + "\n" + "Cocaine (1 gram bags): " + strconv.Itoa(cocaines) + "\n" + "Fentanyl (100/mg bags): " + strconv.Itoa(fentanyl) + "\n" + "LSD (tabs): " + strconv.Itoa(LSD) + "\n" + "Days Left: " + strconv.Itoa(days) // builds the stats paragraph for the main screen
}
func CombatStats() {
switch {
case experience >= 1000:
level = 2
case experience >= 4000:
level = 3
case experience >= 9000:
level = 4
case experience >= 18000:
level = 5
case experience >= 30000:
level = 6
case experience >= 60000:
level = 7
case experience >= 120000:
level = 8
case experience >= 240000:
level = 9
case experience >= 480000:
level = 10
case experience >= 960000:
level = 11
case experience >= 1920000:
level = 12
case experience >= 3840000:
level = 13
case experience >= 7680000:
level = 14
case experience >= 15360000:
level = 15
}
statsCombat = "Name: " + PlayerName + "\n" + "Hit Points: " + strconv.Itoa(playerHP) + "\n" + "Level :" + strconv.Itoa(level) + "\n" + "Money: $" + strconv.Itoa(money) + "\n" + "Experience :" + strconv.Itoa(experience) + "\n" + "Bum Fights Left: " + strconv.Itoa(bumfights) // builds Combat Stats
}
func MainMachine() {
ClearScreen()
i := 0
choice := ""
for i < 1 {
ScreenMachine()
fmt.Println("Your choice,")
fmt.Print(green.Render(PlayerName), ">")
fmt.Scan(&choice)
switch {
case strings.ToUpper(choice) == "H":
HitTheStreets()
case strings.ToUpper(choice) == "P":
PropertyRoom()
case strings.ToUpper(choice) == "R":
RedRoom()
case strings.ToUpper(choice) == "D":
DoctorsOffice()
case strings.ToUpper(choice) == "G":
ClockOut()
case strings.ToUpper(choice) == "Q":
GameOver()
}
}
}
func ScreenMachine() {
CheckStats()
fmt.Println(storyStyle.Render("OPP Wars - Corruption"))
fmt.Println(lipgloss.JoinHorizontal(lipgloss.Top, border.Render(menu), statsStyle.Render(stats))) // makes a horizontal display joining two paras
}
func main() {
officerStyle := lipgloss.NewStyle().Foreground(lipgloss.Color("0000FF"))
fmt.Println(titleStyle.Render("OPP Wars - Corruption"))
fmt.Println(officerStyle.Render(officers))
MashEnterKey()
ClearScreen()
fmt.Println(storyStyle.Render("OPP Wars - Corruption"))
fmt.Println(storyStyle.Render(intro))
fmt.Print("Enter your damned name, Constable: ")
reader := bufio.NewReader(os.Stdin)
prompt, _ := reader.ReadString('\n')
playerNameMaker := strings.Clone(prompt)
PlayerName = strings.TrimRight(playerNameMaker, "\n") // removes a trailing "Return" key that fucks everything up (i dont want the enter key IN the variable)
ClearScreen()
ClassSelection()
ClearScreen()
MainMachine()
}