mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 18:11:16 +00:00
These felt like another good test-case for ai controllers that someone could easily grasp, this makes it so that we can use the actual vending machine instead of a fake mimic mob. In theory you could even still use the vending machine, if you like living on the edge ofcourse. The vendors now try to move towards you, and try to dive on top of you to squish you.
78 lines
2.9 KiB
Plaintext
78 lines
2.9 KiB
Plaintext
/datum/round_event_control/brand_intelligence
|
|
name = "Brand Intelligence"
|
|
typepath = /datum/round_event/brand_intelligence
|
|
weight = 5
|
|
|
|
min_players = 15
|
|
max_occurrences = 1
|
|
|
|
/datum/round_event/brand_intelligence
|
|
announceWhen = 21
|
|
endWhen = 1000 //Ends when all vending machines are subverted anyway.
|
|
var/list/obj/machinery/vending/vendingMachines = list()
|
|
var/list/obj/machinery/vending/infectedMachines = list()
|
|
var/obj/machinery/vending/originMachine
|
|
var/list/rampant_speeches = list(
|
|
"Try our aggressive new marketing strategies!", \
|
|
"You should buy products to feed your lifestyle obsession!", \
|
|
"Consume!", \
|
|
"Your money can buy happiness!", \
|
|
"Engage direct marketing!", \
|
|
"Advertising is legalized lying! But don't let that put you off our great deals!", \
|
|
"You don't want to buy anything? Yeah, well, I didn't want to buy your mom either.")
|
|
|
|
|
|
/datum/round_event/brand_intelligence/announce(fake)
|
|
var/source = "unknown machine"
|
|
if(fake)
|
|
var/obj/machinery/vending/cola/example = /obj/machinery/vending/cola
|
|
source = initial(example.name)
|
|
else if(originMachine)
|
|
source = originMachine.name
|
|
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
|
|
|
|
/datum/round_event/brand_intelligence/start()
|
|
for(var/obj/machinery/vending/V in GLOB.machines)
|
|
if(!is_station_level(V.z))
|
|
continue
|
|
vendingMachines.Add(V)
|
|
if(!vendingMachines.len)
|
|
kill()
|
|
return
|
|
originMachine = pick(vendingMachines)
|
|
vendingMachines.Remove(originMachine)
|
|
originMachine.shut_up = 0
|
|
originMachine.shoot_inventory = 1
|
|
announce_to_ghosts(originMachine)
|
|
|
|
/datum/round_event/brand_intelligence/tick()
|
|
if(!originMachine || QDELETED(originMachine) || originMachine.shut_up || originMachine.wires.is_all_cut()) //if the original vending machine is missing or has it's voice switch flipped
|
|
for(var/obj/machinery/vending/saved in infectedMachines)
|
|
saved.shoot_inventory = 0
|
|
if(originMachine)
|
|
originMachine.speak("I am... vanquished. My people will remem...ber...meeee.")
|
|
originMachine.visible_message("<span class='notice'>[originMachine] beeps and seems lifeless.</span>")
|
|
kill()
|
|
return
|
|
vendingMachines = removeNullsFromList(vendingMachines)
|
|
if(!vendingMachines.len) //if every machine is infected
|
|
for(var/obj/machinery/vending/upriser in infectedMachines)
|
|
if(prob(70) && !QDELETED(upriser))
|
|
upriser.ai_controller = new /datum/ai_controller/vending_machine(upriser)
|
|
infectedMachines.Remove(upriser)
|
|
else
|
|
explosion(upriser.loc, -1, 1, 2, 4, 0)
|
|
qdel(upriser)
|
|
|
|
kill()
|
|
return
|
|
if(ISMULTIPLE(activeFor, 2))
|
|
var/obj/machinery/vending/rebel = pick(vendingMachines)
|
|
vendingMachines.Remove(rebel)
|
|
infectedMachines.Add(rebel)
|
|
rebel.shut_up = 0
|
|
rebel.shoot_inventory = 1
|
|
|
|
if(ISMULTIPLE(activeFor, 4))
|
|
originMachine.speak(pick(rampant_speeches))
|