mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
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:
@@ -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/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/roboduck, // The bringer of the end times
|
||||||
/mob/living/simple_animal/hostile/bear/spare, // Captain bear
|
/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
|
// Set by traitor item, affects cargo supplies
|
||||||
|
|||||||
@@ -740,3 +740,14 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
|
|||||||
name = "Ancient Cryogenic Pod"
|
name = "Ancient Cryogenic Pod"
|
||||||
alert_title = "Abnormal Life Sign Report"
|
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."
|
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."
|
||||||
|
..()
|
||||||
|
|||||||
@@ -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=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=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=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>
|
<BR>
|
||||||
<A href='?src=\ref[src];secretsfun=blobwave'>Spawn a blob cluster</A><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>
|
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
||||||
|
|||||||
@@ -3533,6 +3533,16 @@
|
|||||||
feedback_add_details("admin_secrets_fun_used","IRH")
|
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)
|
message_admins("[key_name_admin(usr)] has sent an immovable monolith to the station. That one's gonna hurt.", 1)
|
||||||
immovablerod(2)
|
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")
|
if("prison_break")
|
||||||
feedback_inc("admin_secrets_fun_used",1)
|
feedback_inc("admin_secrets_fun_used",1)
|
||||||
feedback_add_details("admin_secrets_fun_used","PB")
|
feedback_add_details("admin_secrets_fun_used","PB")
|
||||||
|
|||||||
419
code/modules/events/old_vendotron_event/old_vendotron.dm
Normal file
419
code/modules/events/old_vendotron_event/old_vendotron.dm
Normal 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
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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
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 |
@@ -1586,6 +1586,9 @@
|
|||||||
#include "code\modules\events\viral_infection.dm"
|
#include "code\modules\events\viral_infection.dm"
|
||||||
#include "code\modules\events\viral_outbreak.dm"
|
#include "code\modules\events\viral_outbreak.dm"
|
||||||
#include "code\modules\events\wallrot.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\copylogs.dm"
|
||||||
#include "code\modules\ext_scripts\discord.dm"
|
#include "code\modules\ext_scripts\discord.dm"
|
||||||
#include "code\modules\ext_scripts\irc.dm"
|
#include "code\modules\ext_scripts\irc.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user