Old Vendotron Events (#30921)

* Only works a little

* This took longer than expected

* Donezo

* Wait no now donezo

* Weird place for this

* This is more fun anyway

* Nothing to see here

Co-authored-by: Rubylips <Questionfrog@gmail.com>
This commit is contained in:
GreatBigFailure
2021-10-02 00:05:30 -04:00
committed by GitHub
parent 475d7c940f
commit 316117d29e
10 changed files with 573 additions and 1 deletions

View File

@@ -403,7 +403,8 @@ var/list/boss_mobs = list(
/mob/living/simple_animal/hostile/humanoid/surgeon/skeleton, // Second stage of Doctor Placeholder
/mob/living/simple_animal/hostile/roboduck, // The bringer of the end times
/mob/living/simple_animal/hostile/bear/spare, // Captain bear
/mob/living/simple_animal/hostile/ginger/gingerbroodmother // Gingerbominations...
/mob/living/simple_animal/hostile/ginger/gingerbroodmother, // Gingerbominations...
/mob/living/simple_animal/hostile/old_vendotron, // Why is a normal, harmless, vending machine on this list?
)
// Set by traitor item, affects cargo supplies

View File

@@ -740,3 +740,14 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
name = "Ancient Cryogenic Pod"
alert_title = "Abnormal Life Sign Report"
message = "An abnormal life sign has been detected in promiximity of the station. Long range scans determine signal to be human life. Approach with caution."
/datum/command_alert/old_vendotron_crash
alert_title = "Odd Machine Debris"
message = "A large chunk of debris is on a collision course with your station. Moderate damage is expected at its current velocity. The nature of the debris is unknown, however our sensors are picking up what sounds like the faint jingling of coins."
/datum/command_alert/old_vendotron_teleport
alert_title = "Warning - Unknown Bluespace Anom#ly Det%ct!$"
/datum/command_alert/old_vendotron_teleport/announce()
message = "A bluespace tear of unknown origin is formi!g w£thi$ !$@ cu&ic met£#s o£ [station_name()] plea$e-BZZZZZZZT Come on down for fabulous, splendiferous, one of a kind goods at reasona#le pri$es! We'%e prac@ic£all% giving #$e@ away! All $ales a#$ fi@%l-BZZZT excercise caution and report any anomalous activity."
..()

View File

@@ -836,6 +836,8 @@ var/global/floorIsLava = 0
<A href='?src=\ref[src];secretsfun=immovablehyper'>Spawn an Immovable Monolith (highly destructive!)</A><BR>
<A href='?src=\ref[src];secretsfun=meaty_gores'>Trigger an Organic Debris Field</A><BR>
<A href='?src=\ref[src];secretsfun=fireworks'>Send some fireworks at the station</A><BR>
<A href='?src=\ref[src];secretsfun=old_vendotron_crash'>Launch an old vendotron at the station</A><BR>
<A href='?src=\ref[src];secretsfun=old_vendotron_teleport'>Teleport an old vendotron onto the station</A><BR>
<BR>
<A href='?src=\ref[src];secretsfun=blobwave'>Spawn a blob cluster</A><BR>
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>

View File

@@ -3533,6 +3533,16 @@
feedback_add_details("admin_secrets_fun_used","IRH")
message_admins("[key_name_admin(usr)] has sent an immovable monolith to the station. That one's gonna hurt.", 1)
immovablerod(2)
if("old_vendotron_crash")
feedback_inc("admin_secrets_fun_used", 1)
feedback_add_details("admin_secrets_fun_used","VENDC")
message_admins("[key_name_admin(usr)] has started an old vendotron crash event", 1)
new /datum/event/old_vendotron_crash
if("old_vendotron_teleport")
feedback_inc("admin_secrets_fun_used", 1)
feedback_add_details("admin_secrets_fun_used","VENDT")
message_admins("[key_name_admin(usr)] has started an old vendotron teleport event", 1)
new /datum/event/old_vendotron_teleport
if("prison_break")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","PB")

View File

@@ -0,0 +1,419 @@
/obj/machinery/vending/old_vendotron
name = "old vendotron"
desc = "Covered in layers of gunk of varying ages and origins, it's obvious this old vendotron has a history, and wares to match."
icon_state = "Old_Vendotron"
icon_vend = "Old_Vendotron-vend"
unhackable = TRUE
mech_flags = MECH_SCAN_FAIL
var/list/commonStock = list(
/obj/item/pizzabox/meat = 50,
/obj/item/toy/crayon/rainbow = 15,
/obj/item/toy/crayon/mime = 15,
/obj/item/weapon/reagent_containers/food/snacks/egg/parrot = 20,
/mob/living/simple_animal/crab = 40,
/mob/living/simple_animal/corgi/puppy = 25,
/mob/living/simple_animal/hostile/carp/baby = 75,
/obj/item/weapon/storage/box/autoinjectors = 75,
/obj/item/weapon/fossil = 50,
/obj/item/weapon/fossil/egg = 50,
/obj/item/weapon/fossil/plant = 50,
/obj/item/weapon/reagent_containers/glass/beaker/vial/mystery = 50,
/obj/item/clothing/gloves/yellow = 100,
/obj/item/clothing/gloves/black = 150, //Same price as pickpocket gloves so you don't know which you're getting
/obj/item/weapon/reagent_containers/syringe/giant = 50,
/obj/item/weapon/storage/box/donkpockets = 50,
/obj/item/weapon/storage/box/snappops = 50,
/obj/item/weapon/storage/box/actionfigure = 150,
/obj/item/weapon/storage/box/biscuit = 100,
/obj/item/device/camera_bug = 25,
/obj/item/weapon/tank/emergency_oxygen/double = 100,
/obj/item/weapon/storage/wallet = 40,
/obj/item/weapon/storage/fancy/donut_box = 75,
/obj/item/weapon/beach_ball = 50,
/obj/item/weapon/beartrap = 150,
/obj/item/device/wormhole_jaunter = 40,
/obj/item/weapon/soap/ = 25,
/obj/item/clothing/glasses/monocle = 35,
/obj/item/clothing/glasses/sunglasses/purple = 35,
/obj/item/clothing/glasses/sunglasses/star = 35,
/obj/item/clothing/glasses/sunglasses/rockstar = 35,
/obj/item/clothing/glasses/sunglasses/big = 35,
/obj/item/clothing/head/helmet/snail_helm = 50,
/obj/item/clothing/head/cakehat = 50,
/obj/item/clothing/head/pumpkinhead = 50,
/obj/item/clothing/head/tinfoil = 50,
/obj/item/clothing/mask/horsehead = 150,
/obj/item/clothing/shoes/leather = 50,
/obj/item/clothing/shoes/magboots = 75,
/obj/item/weapon/dnainjector/nofail/randompower = 350,
/obj/item/weapon/gun/hookshot = 200,
/obj/item/weapon/gun/siren/supersoaker = 250,
/obj/item/device/mobcapsule = 75,
/obj/item/supermatter_shielding = 350,
/obj/item/weapon/boomerang = 50,
/obj/item/weapon/melee/lance = 250,
/obj/item/weapon/storage/pill_bottle/random = 120,
/obj/item/weapon/reagent_containers/pill/time_release = 120,
/obj/item/weapon/reagent_containers/pill/random/maintenance = 20, //Obviously the expensive one is better, right?
/obj/item/weapon/reagent_containers/pill/random/maintenance = 40,
/obj/item/weapon/reagent_containers/pill/random/maintenance = 60,
/obj/item/weapon/reagent_containers/pill/random/maintenance = 80,
/obj/item/weapon/reagent_containers/pill/random/maintenance = 100,
/obj/item/weapon/bikehorn/rubberducky = 150,
/obj/item/weapon/glue/temp_glue = 100,
/obj/item/weapon/storage/toolbox/syndicate = 150,
/obj/item/weapon/storage/firstaid/adv = 150,
/obj/item/weapon/reagent_containers/food/snacks/donut/chaos = 50,
/obj/item/weapon/stock_parts/micro_laser/high/ultra = 150,
/obj/item/weapon/stock_parts/manipulator/nano/pico = 150,
/obj/item/weapon/stock_parts/scanning_module/adv/phasic = 150,
/obj/item/weapon/stock_parts/capacitor/adv/super = 150,
/obj/item/slime_extract/grey = 100,
/obj/item/slime_extract/silver = 130,
/obj/item/slime_extract/pink = 150,
/obj/item/slime_extract/bluespace = 200,
/obj/item/weapon/pickaxe/drill/diamond = 500,
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/mysterycube = 150,
/obj/item/weapon/storage/box/large/mystery_material = 150,
)
var/list/uncommonStock = list(
/mob/living/simple_animal/rabbit = 250,
/obj/item/potion/healing = 250,
/obj/item/potion/transform = 300,
/obj/item/potion/stoneskin = 250,
/obj/item/potion/random = 150,
/obj/item/potion/invisibility/major = 350,
/obj/item/weapon/dice/d20/cursed = 250,
/obj/item/weapon/implanter/compressed = 400,
/obj/item/weapon/storage/box/syndie_kit/imp_freedom = 500,
/obj/item/weapon/reagent_containers/food/snacks/egg/chaos = 50,
/obj/item/bluespace_crystal = 75,
/mob/living/simple_animal/hostile/gremlin = 125,
/mob/living/simple_animal/hostile/wolf/pliable = 200,
/obj/item/weapon/gun/hookshot/whip = 75,
/obj/item/clothing/head/leather/deer/horned = 200,
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/gourmonger = 65,
/obj/item/weapon/storage/box/monkeycubes/spacecarpcube = 350,
/obj/item/weapon/storage/belt/leather = 175,
/obj/item/clothing/suit/armor/ice = 250,
/obj/item/weapon/butterflyknife/viscerator/bunny = 200,
/obj/item/weapon/reagent_containers/glass/beaker/large/plasma = 100,
/obj/item/clothing/gloves/black/thief = 150,
/obj/item/clothing/gloves/black/thief/storage = 150,
/obj/item/weapon/grenade/chem_grenade/wind = 75,
/obj/item/clothing/suit/armor/reactive = 175,
/obj/item/weapon/storage/box/boxen = 200,
/obj/item/weapon/tank/emergency_oxygen/double/wizard = 250,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel = 150,
/obj/item/weapon/storage/backpack/holding = 250,
/obj/item/weapon/reagent_containers/glass/bottle/frostoil = 75,
/obj/item/clothing/accessory/holomap_chip = 250,
/obj/item/weapon/fireaxe = 150,
/obj/item/clothing/suit/space/rig/syndicate_elite = 150,
/obj/item/clothing/shoes/clown_shoes/advanced = 150,
/obj/item/clothing/back/magiccape = 150,
/obj/item/clothing/glasses/thermal = 250,
/obj/item/clothing/glasses/emitter = 250,
/obj/item/clothing/head/helmet/knight = 200,
/obj/item/clothing/head/helmet/knight/interrogator = 200,
/obj/item/clothing/mask/gas/voice = 300,
/obj/item/clothing/mask/goldface = 200,
/obj/item/clothing/mask/morphing/amorphous = 300,
/obj/item/clothing/mask/morphing = 250,
/obj/item/clothing/under/chameleon = 250,
/obj/item/clothing/under/contortionist = 600,
/obj/item/device/modkit/storm_rig = 500,
/obj/item/device/modkit/fatsec_rig = 450,
/obj/item/soulstone = 150,
/obj/item/weapon/gun/energy/taser/ricochet = 350,
/obj/item/weapon/reagent_containers/food/snacks/meat/wendigo = 400,
/obj/item/weapon/disk/shuttle_coords/vault/random = 200,
/obj/item/weapon/glue = 450,
/obj/item/weapon/shield/energy = 350,
/obj/item/weapon/storage/pill_bottle/creatine = 300,
/obj/item/weapon/bikehorn/baton = 300,
/obj/item/weapon/grenade/flashbang/clusterbang = 300,
/obj/item/cannonball/bananium = 200,
/obj/item/weapon/stock_parts/micro_laser/high/ultra/giga = 200,
/obj/item/weapon/stock_parts/capacitor/adv/super/ultra = 250,
/obj/item/weapon/stock_parts/manipulator/nano/pico/femto = 200,
/obj/item/weapon/stock_parts/scanning_module/adv/phasic/bluespace = 200,
/obj/item/weapon/storage/lockbox/advanced = 150,
/obj/item/device/analyzer/scope = 220,
/obj/item/weapon/circuitboard/mecha/phazon/main = 350,
/obj/item/mecha_parts/mecha_equipment/teleporter = 300,
/obj/item/mecha_parts/mecha_equipment/gravcatapult = 300,
/obj/item/weapon/storage/box/mysterycubes = 250,
/obj/item/weapon/glow_orb = 200,
/obj/item/stack/sheet/mineral/phazon = 300,
)
var/list/rareStock = list(
/obj/item/clothing/suit/armor/rune = 1500,
/obj/item/clothing/gloves/powerfist = 1800, //I don't even know if these work!
/obj/item/clothing/head/bearpelt/real/spare = 800,
/obj/item/clothing/head/celtic = 250,
/obj/item/weapon/winter_gift/special = 2400, //Extremely difficult outside of the whole station wanting you to be a vampire
/obj/item/clothing/mask/morphing/amorphous = 150, //Cheaper than uncommon
/obj/item/clothing/shoes/magboots/deathsquad = 500,
/obj/item/clothing/suit/space/rig/centcomm/old = 500,
/obj/item/clothing/suit/space/santa = 800,
/obj/item/clothing/head/helmet/space/santahat = 500,
/obj/item/clothing/suit/storage/draculacoat = 300,
/obj/item/clothing/suit/clownpiece/flying = 500,
/obj/item/clothing/suit/bomber_vest = 600,
/obj/item/clothing/under/chameleon/all = 1200, //Style ain't cheap
/obj/item/gingerbread_egg = 750,
/obj/item/weapon/gun/portalgun = 1100,
/obj/item/weapon/gun/energy/staff/swapper = 1000,
/obj/item/bluespace_crystal/flawless = 2400, //Spessmart has it at 1800 so we're making it pricier
/obj/item/weapon/cloakingcloak = 1400,
/obj/structure/bed/chair/vehicle/wheelchair/multi_people = 900,
/obj/item/weapon/veilrender/vealrender = 50000, //One day, 30 years from now, someone will win the lottery in a round this is rolled
/obj/item/phylactery = 750,
/obj/item/clothing/shoes/blindingspeed = 1800,
)
/obj/machinery/vending/old_vendotron/New()
..()
decideStock()
build_inventories()
/obj/machinery/vending/old_vendotron/proc/decideStock()
var/stockAmount = rand(6, 18)
var/rarerRolls = 1 + round(player_list.len * 0.1, 1) //More players more stock, slightly
for(var/i = 1 to stockAmount)
if(prob(70))
addCommonStock()
else
addUncommonStock()
for(var/u = 1 to rarerRolls) //Guaranteed uncommon stock, much more likely rare stock
addUncommonStock()
/obj/machinery/vending/old_vendotron/proc/addCommonStock()
var/theStock = 0
theStock = rand(1, commonStock.len)
var/chosenStock = commonStock[theStock]
products.Add(chosenStock)
if(prob(50)) //common items can easily have 2-3 stock
products[chosenStock] = 2
else if(prob(25))
products[chosenStock] = 3
var/stockPrice = priceRandomizer(commonStock[chosenStock])
prices.Add(chosenStock)
prices[chosenStock] = stockPrice
/obj/machinery/vending/old_vendotron/proc/addUncommonStock()
if(prob(80))
var/theStock = 0
theStock = rand(1, uncommonStock.len)
var/chosenStock = uncommonStock[theStock]
products.Add(chosenStock)
if(prob(15)) //Uncommon items A rare double stock
products[chosenStock] = 2
var/stockPrice = priceRandomizer(uncommonStock[chosenStock])
prices.Add(chosenStock)
prices[chosenStock] = stockPrice
else
addRareStock()
/obj/machinery/vending/old_vendotron/proc/addRareStock()
var/theStock = 0
theStock = rand(1, rareStock.len)
var/chosenStock = rareStock[theStock]
products.Add(chosenStock)
var/stockPrice = priceRandomizer(rareStock[chosenStock])
prices.Add(chosenStock)
prices[chosenStock] = stockPrice
/obj/machinery/vending/old_vendotron/proc/priceRandomizer(var/thePrice = 0)
thePrice = rand(thePrice * 0.7, thePrice * 1.3) //30% cheaper or pricier, totally random for SPICE
return thePrice
//Begin spoilers/////
/obj/machinery/vending/old_vendotron/emag(mob/user)
if(!emagged)
emagged = TRUE
if(prob(50))
punishCheapskate()
else
neoUltraCapitalismMode(user)
/obj/machinery/vending/old_vendotron/emp_act(severity)
if(severity < 3)
punishCheapskate()
/obj/machinery/vending/old_vendotron/kick_act(mob/living/carbon/human/user)
..()
if(prob(1)) //Let's make it very hard to turn this against the crew without tools
if(prob(75))
punishCheapskate()
else
neoUltraCapitalismMode(user)
/obj/machinery/vending/old_vendotron/malfunction()
punishCheapskate()
/obj/machinery/vending/old_vendotron/crowbarDestroy(mob/user, obj/item/tool/crowbar/C)
user.visible_message( "[user] struggles to pry out the firmly secured circuitboard from \the [src].",
"You struggle to pry out the firmly secured circuitboard from \the [src]...")
if(do_after(user, src, 10 SECONDS)) //This is a strong hint that something may or may not be going on
user.drop_item(C, get_turf(user), 1) //Your glue won't help
C.animationBolt()
user.visible_message( "\The [src] begins to pry out the circuitboard from [user].",
"\The [src] begins to pry out the circuitboard from you.")
/obj/machinery/vending/old_vendotron/proc/punishCheapskate()
var/ourPunishment = rand(1, 6)
switch(ourPunishment)
if(1)
ahhSpiders() //I will not be changing these proc names.
if(2)
platesPlatesPlates() //They are perfect the way they are
if(3)
broadSideBarrage() //I mean it, I'm not changing these
if(4)
youHaveToEatAllTheEggs() //Go on, ask me
if(5)
ghettoNightmare() //I will say "No"
if(6)
neoUltraCapitalismMode()
/obj/machinery/vending/old_vendotron/proc/ahhSpiders(var/spiderAmount = 20)
visible_message("<span class='big danger'>Loud chittering can be heard from \the [src]!</span>")
for(var/i = 1, i < spiderAmount, i++)
spawn(i+1)
if(prob(75))
new /mob/living/simple_animal/hostile/giant_spider/spiderling(get_turf(src))
else
new /mob/living/simple_animal/hostile/giant_spider/hunter(get_turf(src))
/obj/machinery/vending/old_vendotron/proc/platesPlatesPlates(var/plateAmount = 50) //This many is necessary, I promise
visible_message("<span class='big danger'>\The [src] enters dinner mode!</span>")
for(var/i = 1, i < plateAmount, i++)
spawn(i+2)
var/obj/item/trash/plate/thePlate = new /obj/item/trash/plate(get_turf(src))
var/turf/plateTarg = null
if(prob(50))
var/plateDir = pick(alldirs)
plateTarg = get_edge_target_turf(src, plateDir)
else
var/mob/living/t = locate() in view(7, src) //copy paste of vendor throwing for theming
plateTarg = t
if(plateTarg)
thePlate.throw_at(plateTarg, 10, i)
/obj/machinery/vending/old_vendotron/proc/broadSideBarrage()
visible_message("<span class='big danger'>\The [src] detects a product piracy attempt!</span>")
for(var/dir in cardinal)
var/turf/T = get_turf(get_step(loc, dir))
var/obj/structure/siege_cannon/sC = new /obj/structure/siege_cannon(T)
var/obj/item/cannonball/cB = null
if(prob(25))
cB = new /obj/item/cannonball/bananium(sC)
sC.icon_state = "clownnon"
sC.name = "circus cannon"
sC.beenClowned = TRUE
else
cB = new /obj/item/cannonball/iron(sC)
sC.loadedItem = cB
sC.wFuel = 20
sC.dir = get_dir(src, sC)
sC.anchored = TRUE
spawn(1 SECONDS)
if(!sC.gcDestroyed)
sC.itemFire()
animate(src, alpha = 0, time = 1 SECONDS)
spawn(2 SECONDS)
if(!sC.gcDestroyed)
qdel(sC)
/obj/machinery/vending/old_vendotron/proc/youHaveToEatAllTheEggs(var/eggAmount = 8)
visible_message("<span class='big danger'>\The [src] vends some peculiar eggs!</span>")
for(var/i = 1 to eggAmount)
var/turf/eggT = get_turf(pick(orange(5, get_turf(src))))
var/obj/item/weapon/reagent_containers/food/snacks/egg/cEgg = new /obj/item/weapon/reagent_containers/food/snacks/egg/chaos(eggT)
var/eggTimer = rand(3, 10)
spawn(eggTimer SECONDS)
if(!cEgg.gcDestroyed)
cEgg.hatch()
/obj/machinery/vending/old_vendotron/proc/ghettoNightmare(var/nightmareLevel = 8, mob/user) //This is a sin
visible_message("<span class='big danger'>Even \the [src] looks afraid!</span>")
var/obj/item/weapon/grenade/iedcasing/preassembled/gNightmare = new /obj/item/weapon/grenade/iedcasing/preassembled(get_turf(src))
gNightmare.det_time = 5 SECONDS
gNightmare.name = "Improvised Explosive Nightmare"
for(var/i = 1 to nightmareLevel)
var/obj/item/anvil/A = new /obj/item/anvil(gNightmare)
gNightmare.shrapnel_list.Add(A)
gNightmare.current_shrapnel++
if(gNightmare.current_shrapnel >= gNightmare.max_shrapnel)
break //More of a safety, already breaking the laws of IED
var/turf/gTarg = get_ranged_target_turf(src, dir, 3)
gNightmare.throw_at(gTarg, 3, 5)
gNightmare.attack_self(user)
animate(gNightmare, transform = matrix()*3, time = 5 SECONDS)
/obj/machinery/vending/old_vendotron/proc/neoUltraCapitalismMode(mob/user)
visible_message("<span class='big danger'>\The [src] engages neo-ultra-capitalism mode!</span>")
do_flick(src, "Old_Vendotron-transform", 25)
var/mob/living/simple_animal/hostile/old_vendotron/madVendor = new /mob/living/simple_animal/hostile/old_vendotron(loc)
madVendor.ourVendor = src
src.forceMove(madVendor)
if(user)
madVendor.GiveTarget(user)
/mob/living/simple_animal/hostile/old_vendotron
name = "old vendotron"
desc = "Pay up"
icon = 'icons/mob/old_vendotron.dmi'
icon_state = "Old_Vendotron"
icon_living = "Old_Vendotron"
maxHealth = 600
health = 600
melee_damage_lower = 10
melee_damage_upper = 30
attacktext = "vends"
mob_property_flags = MOB_CONSTRUCT | MOB_ROBOTIC | MOB_NO_PETRIFY | MOB_NO_LAZ
environment_smash_flags = SMASH_CONTAINERS | SMASH_WALLS | OPEN_DOOR_STRONG
var/obj/machinery/vending/old_vendotron/ourVendor = null
var/lastPunish = 0
var/punishCooldown = 50
/mob/living/simple_animal/hostile/old_vendotron/death(var/gibbed = FALSE)
if(ourVendor)
ourVendor.forceMove(loc)
else
explosion(loc, 1,2,2)
..(gibbed)
qdel(src)
/mob/living/simple_animal/hostile/old_vendotron/Life()
..()
if(stance == HOSTILE_STANCE_ATTACK || stance == HOSTILE_STANCE_ATTACKING)
if(punishCommies())
lastPunish = world.time
/mob/living/simple_animal/hostile/old_vendotron/proc/punishCommies()
if(lastPunish + punishCooldown <= world.time)
if(prob(15))
ourVendor.platesPlatesPlates(30)
return TRUE
if(prob(20))
ourVendor.broadSideBarrage()
return TRUE
if(prob(5))
ourVendor.ghettoNightmare(3)
if(prob(10))
ourVendor.youHaveToEatAllTheEggs(3)
return TRUE
if(prob(10))
ourVendor.ahhSpiders(10)
return TRUE
return FALSE

View File

@@ -0,0 +1,53 @@
/datum/event/old_vendotron_crash
endWhen = 15
announceWhen = 5
/datum/event/old_vendotron_crash/can_start()
return 5
/datum/event/old_vendotron_crash/setup()
startWhen = rand(5, 15)
/datum/event/old_vendotron_crash/announce()
command_alert(/datum/command_alert/old_vendotron_crash)
/datum/event/old_vendotron_crash/start()
launchVendor()
/datum/event/old_vendotron_crash/proc/launchVendor()
var/turf/startPoint = random_start_turf(1)
var/obj/item/projectile/immovablerod/vending/vRod = new /obj/item/projectile/immovablerod/vending(startPoint)
var/obj/machinery/vending/old_vendotron/theVend = new /obj/machinery/vending/old_vendotron(vRod)
vRod.myVend = theVend
var/turf/endPoint = locate(map.center_x, map.center_y, 1)
vRod.throw_at(endPoint)
/obj/item/projectile/immovablerod/vending
name = "\improper mid-collision space debris"
icon = 'icons/obj/vending.dmi'
icon_state = "Old_Vendotron"
var/collisionCount = 0
var/obj/machinery/vending/old_vendotron/myVend = null
/obj/item/projectile/immovablerod/vending/New()
..()
collisionCount = rand(4, 6)
/obj/item/projectile/immovablerod/vending/break_stuff()
if(loc.density)
loc.ex_act(2)
collisionCount--
if(prob(25))
clong()
if(collisionCount <= 0)
becomeVendor()
/obj/item/projectile/immovablerod/vending/proc/becomeVendor()
myVend.forceMove(loc)
myVend.state = anchored
myVend.power_change()
qdel(src)

View File

@@ -0,0 +1,73 @@
/datum/event/old_vendotron_teleport
endWhen = 15
announceWhen = 5
/datum/event/old_vendotron_teleport/can_start()
return 15
/datum/event/old_vendotron_teleport/setup()
startWhen = rand(5, 15)
/datum/event/old_vendotron_teleport/announce()
command_alert(/datum/command_alert/old_vendotron_teleport)
/datum/event/old_vendotron_teleport/start()
teleportVendor()
/datum/event/old_vendotron_teleport/proc/teleportVendor()
var/turf/vendT = vendSpawnDecide()
fancyEntrance(vendT)
/datum/event/old_vendotron_teleport/proc/vendSpawnDecide()
var/list/dontSpawnHere = list(
/area/derelictparts,
/area/solar,
/area/assembly, //Because I don't know what that is
/area/shuttle/administration/station,
/area/ai_monitored/storage/emergency,
/area/arrival,
/area/shuttle/escape_pod1,
/area/shuttle/escape_pod2,
/area/shuttle/escape_pod3,
/area/shuttle/escape_pod4,
/area/shuttle/escape_pod5,
/area/shuttle/prison/,
)
var/list/vendSpawnAreas = the_station_areas - dontSpawnHere
var/area/toSpawn = pick(vendSpawnAreas)
toSpawn = locate(toSpawn)
var/list/turf/simulated/floor/vendSpawn = list()
for(var/turf/simulated/floor/F in toSpawn)
if(!F.has_dense_content())
vendSpawn.Add(F)
if(!vendSpawn.len) //Copy paste from infestation
message_admins("Old Vendotron event has failed! Could not find any viable turfs in [toSpawn].")
announceWhen = -1
endWhen = 0
return
return pick(vendSpawn)
/datum/event/old_vendotron_teleport/proc/fancyEntrance(var/turf/vendT)
var/obj/effect/old_vendotron_entrance/E = new /obj/effect/old_vendotron_entrance(vendT)
E.aestheticEntrance()
playsound(E, 'sound/effects/eleczap.ogg', 100, 1)
spawn(4 SECONDS)
var/obj/machinery/vending/old_vendotron/OV = new /obj/machinery/vending/old_vendotron(vendT)
playsound(OV, 'sound/effects/coins.ogg', 100, 1)
/obj/effect/old_vendotron_entrance
name = "unknown bluespace tear"
icon_state = "anom"
alpha = 0
/obj/effect/old_vendotron_entrance/New()
..()
for(var/mob/dead/observer/people in observers)
to_chat(people, "<span class = 'notice'>\A [src] has been thrown at the station, <a href='?src=\ref[people];follow=\ref[src]'>Follow it</a></span>")
/obj/effect/old_vendotron_entrance/proc/aestheticEntrance()
animate(src, alpha = 255, transform = matrix()*2, time = 3 SECONDS)
spawn(3 SECONDS)
animate(src, icon_state = "bhole3", transform = matrix()*0.1, time = 3 SECONDS)
spawn(35)
qdel(E)

BIN
icons/mob/old_vendotron.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 183 KiB

View File

@@ -1586,6 +1586,9 @@
#include "code\modules\events\viral_infection.dm"
#include "code\modules\events\viral_outbreak.dm"
#include "code\modules\events\wallrot.dm"
#include "code\modules\events\old_vendotron_event\old_vendotron.dm"
#include "code\modules\events\old_vendotron_event\vendor_crash_event.dm"
#include "code\modules\events\old_vendotron_event\vendor_teleport_event.dm"
#include "code\modules\ext_scripts\copylogs.dm"
#include "code\modules\ext_scripts\discord.dm"
#include "code\modules\ext_scripts\irc.dm"