Merge remote-tracking branch 'origin/master' into what-should-i-name-this-branch

This commit is contained in:
LetterN
2021-12-21 07:59:33 +08:00
164 changed files with 128258 additions and 912 deletions
@@ -566,3 +566,9 @@
path = SLOT_WEAR_MASK
path = /obj/item/clothing/mask/gas/clown_hat
ckeywhitelist = list("djkouta")
/datum/gear/donator/spacehoodie
name = "Space Hoodie"
path = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/spacehoodie
ckeywhitelist = list("bidlink2")
@@ -618,3 +618,12 @@
icon = 'icons/obj/custom.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
/obj/item/clothing/suit/spacehoodie
name = "space hoodie"
desc = "You are not sure why this hoodie exists... but it does and it is comfortable."
icon_state = "starhoodie"
item_state = "starhoodie"
icon = 'icons/obj/custom.dmi'
mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi'
mutantrace_variation = NONE
@@ -488,7 +488,8 @@ GLOBAL_LIST_EMPTY(rain_sounds)
end_message = "<span class='notice'>The downpour gradually slows until it stops.</span>"
area_type = /area/eventmap/outside
target_trait = ZTRAIT_STATION
target_trait = ZTRAIT_LONGRAIN
probability = 90
barometer_predictable = TRUE
@@ -0,0 +1,60 @@
//Festive Light Poles
/obj/structure/streetdecor/lamp
name = "lamp pole"
desc = "A metal pole with latern. Very effective at lighting up the cold streets on a breezy night."
layer = 4
density = TRUE
anchored = TRUE
light_power = 1.4
light_range = 15
light_color = "#ffffdd"
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "lamp_post"
max_integrity = 9999999
/obj/structure/streetdecor/lampfestive
name = "festive lamp pole"
desc = "A metal pole with latern and christmas decorations. Very effective at warming up the spirits of people."
layer = 4
density = TRUE
anchored = TRUE
light_power = 1.6
light_range = 15
light_color = "#ffffdd"
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "lamp_post_festive"
max_integrity = 9999999
/obj/structure/streetdecor/wreathpole
name = "wreath pole"
desc = "A metal pole with a fancy wreath."
layer = 4
density = TRUE
anchored = TRUE
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "wreath_post"
/obj/structure/streetdecor/welcomesign
name = "Welcome sign"
desc = "A tartan trapped sign welcoming you to Nova Edina."
layer = 4
density = TRUE
anchored = TRUE
icon = 'modular_citadel/code/modules/festive/city_sign.dmi'
icon_state = "sign"
/obj/structure/streetdecor/bigtree
name = "Big festive tree"
desc = "Big tree. Big heck. Big festive cheer!"
layer = 4
density = TRUE
anchored = TRUE
light_power = 2
light_range = 30
light_color = "#ffeeab"
icon = 'modular_citadel/code/modules/festive/bigtree.dmi'
icon_state = "bigtree"
max_integrity = 9999999
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,53 @@
/obj/effect/decal/festive
name = "Festive item!"
desc = "It fills you with holiday cheer."
icon = 'modular_citadel/code/modules/festive/festive_objects.dmi'
icon_state = "holly"
plane = -5 //makes the graffiti visible over a wall. I think
/obj/effect/decal/festive/holly
name = "Holly"
desc = "A prickly, yet cheerful flora laden with ripe berries of festive joy."
/obj/effect/decal/festive/fairylights
name = "Fairy lights"
desc = "A strand of smol glowing lights, almost as if the lights themselves were faries."
icon_state = "y_fairylights"
light_power = 1.6
light_range = 3
light_color = "#ffeeab"
/obj/effect/decal/festive/mistletoe
name = "Mistletoe"
desc = "A plant that causes 2 victims underneath to engage in a smooch!"
icon_state = "mistletoe"
/obj/effect/decal/festive/christmas_reef
name = "Christmas reef"
desc = "A ring reef of festive plants."
icon_state = "christmas_reef"
/obj/effect/decal/festive/green_stockings
name = "Green stockings"
desc = "3 wee booties out on a row, hoping for presents from the fat man's tow."
icon_state = "green_stockings"
/obj/effect/decal/festive/red_stockings
name = "Red stockings"
desc = "Santa seems to enjoy socks a lot, huh."
icon_state = "red_stockings"
/obj/effect/decal/festive/large_red_stocking
name = "Large red stocking"
desc = "A big hecking chonker of a sock, a braisen display of greed, or simply the sock of a large man?"
icon_state = "large_red_stocking"
/obj/effect/decal/festive/large_green_stocking
name = "Large green stocking"
desc = "They say his sock grew 3 sizes that day."
icon_state = "large_green_stocking"
/obj/effect/decal/festive/christmas_ivy_string
name = "Festive ivy"
desc = "In a recent study performed by the local university, it was found that ivy doesn't grow to live and thrive, but instead to spread festive cheer. You cannot help but feel the holiday spirit wrangle around you fantastically." //I am super tired and I wordswordswords
icon_state = "christmas_ivy_string"
@@ -0,0 +1,7 @@
/obj/item/paper/fluff/festive/note_for_qm
name = "To the Quartermaster(s)"
info = "Seeing as this is an event for employees spanning the entire sector, it's possible you may not be the only Quartermaster present today and you'll have to share this office should that be the case. Fortunately, you shouldn't need to share a locker - you shall find some additional lockers with quartermaster access in your department's locker room. Should you require additional lockers however, you will need to contact Central Command directly.<br>Additionally, the successful capture of a Syndicate freighter has left us with a surplus of Donksoft weaponry. Considering they pose far less of a concern than their real counterparts, your department has been put in charge of their distribution. Just be sure not to keep them all for yourself - 'tis the season of giving, after all.<br>- Administrator Roux"
/obj/item/paper/fluff/festive/note_for_chap
name = "A letter to the Chaplain"
info = "Chaplain,<br>You might not be alone in your duties today. Seeing as these are special circumstances, you will find additional supplies with which to arm your fellow clergymen.<br>Do we expect you to need to use what's inside? Thankfully, no. Alas, should malicious occult forces strike, we want your compatriots to be equipped to face them.<br>At the very least, don't just give these out to anyone. Every time I see an assistant running around with a holy 'sord', I can feel my insides crumble...<br>Soulstone Obelisk<br>Department of Higher Dimensional Affairs"
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,26 @@
//How to use:
//Set the name of off the the objects you want controlled by 1 button to the same name
//Set the tar_name of this to the same name
//Press the button in game.
/obj/machinery/button/privacy
name = "Privacy toggle"
var/tar_name
var/tint_objs = list()
/obj/machinery/button/privacy/setup_device()
if(!device)
for(var/obj/O in get_area(src))
if(O.name == tar_name)
tint_objs += O
..()
/obj/machinery/button/privacy/attack_hand(mob/user)
.=..()
for(var/obj/O in tint_objs)
if(O.opacity)
O.color = "#919191"
O.opacity = 0
else
O.opacity = 1
O.color = "#000000"
Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,114 @@
/obj/vehicle/sealed/vectorcraft/rideable/Initialize()
. = ..()
/obj/vehicle/sealed/vectorcraft/rideable/post_unbuckle_mob(mob/living/M)
remove_occupant(M)
M.pixel_x = 0
M.pixel_y = 0
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/post_buckle_mob(mob/living/M)
add_occupant(M)
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/move_car()
.=..()
driver.pixel_x = pixel_x
driver.pixel_y = pixel_y
driver.forceMove(src.loc)
driver.setDir(dir)
/obj/vehicle/sealed/vectorcraft/rideable/mob_enter(mob/living/M)
if(!istype(M))
return FALSE
M.visible_message("<span class='notice'>[M] climbs into \the [src]!</span>")
M.forceMove(src.loc)
add_occupant(M)
if(!driver)
driver = M
if(gear != "auto")
gear = driver.a_intent
start_engine()
driver.pixel_x = pixel_x
driver.pixel_y = pixel_y
return TRUE
/obj/vehicle/sealed/vectorcraft/rideable/mob_exit(mob/living/M)
.=..()
driver.pixel_x = 0
driver.pixel_y = 0
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair
name = "Hoverchair"
desc = "A chair with big hoverpads. It looks like you can move in this on your own."
icon = 'icons/obj/vehicles.dmi'
icon_state = "wheelchair"
layer = OBJ_LAYER
max_integrity = 100
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
canmove = TRUE
density = FALSE //Thought I couldn't fix this one easily, phew
max_acceleration = 1.5
accel_step = 0.5
acceleration = 0.35
max_deceleration = 1
max_velocity = 20
boost_power = 15
gear = "auto"
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, .proc/can_user_rotate),CALLBACK(src, .proc/can_be_rotated),null)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/Destroy()
if(has_buckled_mobs())
var/mob/living/carbon/H = buckled_mobs[1]
unbuckle_mob(H)
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/move_car()
. = ..()
cut_overlays()
playsound(src, 'sound/effects/roll.ogg', 75, 1)
if(has_buckled_mobs())
handle_rotation_overlayed()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/post_buckle_mob(mob/living/user)
. = ..()
handle_rotation_overlayed()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/post_unbuckle_mob()
. = ..()
cut_overlays()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/setDir(newdir)
..()
handle_rotation(newdir)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/handle_rotation(direction)
if(has_buckled_mobs())
handle_rotation_overlayed()
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.setDir(direction)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/handle_rotation_overlayed()
cut_overlays()
var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir)
add_overlay(V)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/can_be_rotated(mob/living/user)
return TRUE
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/can_user_rotate(mob/living/user)
var/mob/living/L = driver
if(istype(L))
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return FALSE
if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
return TRUE
return FALSE
Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

@@ -142,7 +142,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
var/creatorName
var/mob/living/creator
pH = 10
chemical_flags = REAGENT_ONMOBMERGE | REAGENT_DONOTSPLIT //Procs on_mob_add when merging into a human
chemical_flags = REAGENT_ONMOBMERGE | REAGENT_DONOTSPLIT | REAGENT_ALL_PROCESS //Procs on_mob_add when merging into a human
can_synth = FALSE
value = REAGENT_VALUE_EXCEPTIONAL
@@ -270,7 +270,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
color = "#2C051A" // rgb: , 0, 255
metabolization_rate = 1
taste_description = "extremely bitter chocolate"
chemical_flags = REAGENT_DONOTSPLIT
chemical_flags = REAGENT_DONOTSPLIT | REAGENT_ORGANIC_PROCESS
can_synth = FALSE
/datum/reagent/fermi/enthrallExplo/on_mob_life(mob/living/carbon/M) //Drug them, jitter them, dizzy them, confuse them
@@ -169,17 +169,17 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
if(21)
to_chat(M, "<span class='notice'>You feel the synethic cells rest uncomfortably within your body as they start to pulse and grow rapidly.</span>")
if(22 to 29)
M.adjust_nutrition(M.nutrition/10)
M.adjust_nutrition(10)
if(30)
to_chat(M, "<span class='notice'>You feel the synethic cells grow and expand within yourself, bloating your body outwards.</span>")
if(31 to 49)
M.adjust_nutrition(M.nutrition/5)
M.adjust_nutrition(20)
if(50)
to_chat(M, "<span class='notice'>The synthetic cells begin to merge with your body, it feels like your body is made of a viscous water, making your movements difficult.</span>")
M.action_cooldown_mod += 4//If this makes you fast then please fix it, it should make you slow!!
//candidates = pollGhostCandidates("Do you want to play as a clone of [M.name] and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you. ", "FermiClone", null, ROLE_SENTIENCE, 300) // see poll_ignore.dm, should allow admins to ban greifers or bullies
if(51 to 79)
M.adjust_nutrition(M.nutrition/2)
M.adjust_nutrition(50)
if(80)
to_chat(M, "<span class='notice'>The cells begin to precipitate outwards of your body, you feel like you'll split soon...</span>")
if (M.nutrition < 20000)
@@ -336,7 +336,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/startHunger
can_synth = TRUE
taste_description = "a weird chemical fleshy flavour"
chemical_flags = REAGENT_SNEAKYNAME
chemical_flags = REAGENT_SNEAKYNAME | REAGENT_ALL_PROCESS
value = REAGENT_VALUE_RARE
/datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
@@ -9,6 +9,7 @@
impure_chem = /datum/reagent/impure/fermiTox // What chemical is metabolised with an inpure reaction
inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising
inverse_chem = /datum/reagent/impure/fermiTox
chemical_flags = REAGENT_ALL_PROCESS //Lets just default to robots being able to process these funky chems.
//This should process fermichems to find out how pure they are and what effect to do.
@@ -36,7 +37,7 @@
taste_description = "like jerky, whiskey and an off aftertaste of a crypt."
metabolization_rate = 0.2
overdose_threshold = 25
chemical_flags = REAGENT_DONOTSPLIT
chemical_flags = REAGENT_DONOTSPLIT | REAGENT_ALL_PROCESS
pH = 4
can_synth = TRUE
@@ -84,7 +85,7 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
inverse_chem_val = 0
var/obj/item/organ/tongue/nT
chemical_flags = REAGENT_DONOTSPLIT
chemical_flags = REAGENT_DONOTSPLIT | REAGENT_ALL_PROCESS
pH = 5
var/obj/item/organ/tongue/T
can_synth = TRUE
@@ -240,7 +241,7 @@
name = "Electromagnetic crystals"
description = "Causes items upon the patient to sometimes short out, as well as causing a shock in the patient, if the residual charge between the crystals builds up to sufficient quantities"
metabolization_rate = 0.5
chemical_flags = REAGENT_INVISIBLE
chemical_flags = REAGENT_INVISIBLE | REAGENT_ALL_PROCESS
//Increases shock events.
/datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
@@ -303,7 +304,7 @@
/datum/reagent/fermi/fermiTest
name = "Fermis Test Reagent"
description = "You should be really careful with this...! Also, how did you get this?"
chemical_flags = REAGENT_FORCEONNEW
chemical_flags = REAGENT_FORCEONNEW | REAGENT_ALL_PROCESS
can_synth = FALSE
/datum/reagent/fermi/fermiTest/on_new(datum/reagents/holder)
@@ -338,7 +339,7 @@
description = "This reagent will consume itself and move the pH of a beaker towards acidity when added to another."
color = "#fbc314"
pH = 0
chemical_flags = REAGENT_FORCEONNEW
chemical_flags = REAGENT_FORCEONNEW | REAGENT_ALL_PROCESS
can_synth = TRUE
var/strength = 1.5
@@ -376,7 +377,7 @@
description = "This reagent will consume itself and move the pH of a beaker towards alkalinity when added to another."
color = "#3853a4"
pH = 14
chemical_flags = REAGENT_FORCEONNEW
chemical_flags = REAGENT_FORCEONNEW | REAGENT_ALL_PROCESS
can_synth = TRUE
var/strength = 1.5
@@ -140,7 +140,16 @@
out_message += "<span class='warning'>A reaction appears to be occuring currently.<span class='notice'>\n"
out_message += "Chemicals found in the beaker:</b>\n"
for(var/datum/reagent/R in cont.reagents.reagent_list)
out_message += "<b>[R.volume]u of [R.name]</b>, <b>Purity:</b> [R.purity], [(scanmode?"[(R.overdose_threshold?"<b>Overdose:</b> [R.overdose_threshold]u, ":"")][(R.addiction_threshold?"<b>Addiction:</b> [R.addiction_threshold]u, ":"")]<b>Base pH:</b> [R.pH].":".")]\n"
var/processtype
if(CHECK_MULTIPLE_BITFIELDS(R.chemical_flags, (REAGENT_ROBOTIC_PROCESS | REAGENT_ORGANIC_PROCESS)))
processtype = "Both robots and organics"
else if(R.chemical_flags & REAGENT_ROBOTIC_PROCESS)
processtype = "Robots only"
else if(R.chemical_flags & REAGENT_ORGANIC_PROCESS)
processtype = "Organics only"
else
processtype = "Noone?! (Report this to Nanotrasen's spacetime department immediately)"
out_message += "<b>[R.volume]u of [R.name]</b>, <b>Purity:</b> [R.purity], [(scanmode?"[(R.overdose_threshold?"<b>Overdose:</b> [R.overdose_threshold]u, ":"")][(R.addiction_threshold?"<b>Addiction:</b> [R.addiction_threshold]u, ":"")]<b>Metabolized by:</b> [processtype], <b>Base pH:</b> [R.pH].":".")]\n"
if(scanmode)
out_message += "<b>Analysis:</b> [R.description]\n"
to_chat(user, "[out_message]</span>")
@@ -27,9 +27,21 @@
var/gear
var/boost_cooldown
//Changes for custom
var/i_m_acell
var/i_m_decell
var/i_boost
var/i_acell
var/mob/living/carbon/human/driver
/obj/vehicle/sealed/vectorcraft/Initialize()
..()
i_m_acell = max_acceleration
i_m_decell = max_deceleration
i_boost = boost_power
i_acell = acceleration
/obj/vehicle/sealed/vectorcraft/mob_enter(mob/living/M)
if(!driver)
driver = M
@@ -0,0 +1,147 @@
/obj/vehicle/sealed/vectorcraft/boot
name = "Hovertruck"
desc = "An all-terrain vehicle built for traversing rough terrain with ease. This one comes equipt with a sizeable boot that can store up to 3 items!"
icon_state = "truck"
max_integrity = 200
var/obj/structure/boot = list()//Trunkspace of craft
var/boot_size = 3
max_acceleration = 3
accel_step = 0.15
acceleration = 0.3
max_deceleration = 5
max_velocity = 80
boost_power = 20
enginesound_delay = 0
var/static/radial_heal = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_heal")
var/static/radial_eject_car = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_car")
var/static/radial_eject_key = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_key")
var/static/radial_eject_boot = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_boot")
/obj/vehicle/sealed/vectorcraft/boot/MouseDrop_T(atom/dropping, mob/user)
if(istype(dropping, /obj/))
if(LAZYLEN(boot) < boot_size)
boot += dropping
to_chat(user, "<span class='notice'>You add the [dropping] to the [src]'s boot!</span>")
return TRUE
if(iscarbon(dropping))
var/mob/living/carbon/M = dropping
mob_try_enter(M)
to_chat(user, "<span class='notice'>You put [M] into the [src]!</span>")
return TRUE
/obj/vehicle/sealed/vectorcraft/boot/proc/eject_boot()
for(var/obj/o in boot)
o.forceMove(drop_location())
/obj/vehicle/sealed/vectorcraft/boot/ambulance //weewoos have to go fast
name = "Ambulance"
var/obj/machinery/sleeper/Sl
max_acceleration = 3
accel_step = 0.15
acceleration = 0.3
max_deceleration = 5
max_velocity = 100
boost_power = 25
enginesound_delay = 0
icon_state = "ambutruck"
var/weewoo = FALSE
var/weewoocount = 0
/obj/vehicle/sealed/vectorcraft/boot/ambulance/Initialize()
. = ..()
Sl = new /obj/machinery/sleeper
/obj/vehicle/sealed/vectorcraft/boot/ambulance/process()
..()
if(weewoo)
weewoo()
/obj/vehicle/sealed/vectorcraft/boot/ambulance/MouseDrop_T(mob/living/L, mob/user)
if(isliving(L))
Sl.close_machine(L)
to_chat(user, "<span class='notice'>You put [L] into the [src]'s emergency sleeper!</span>")
return TRUE
..()
/obj/vehicle/sealed/vectorcraft/boot/ambulance/proc/weewoo()
if(weewoocount>10)
weewoocount = 0
return
weewoo++
/obj/vehicle/sealed/vectorcraft/boot/ambulance/ui_interact(mob/user) // taken from the microwave/grinder
. = ..()
var/list/options = list()
if(isAI(user))
options["radial_eject_car"] = radial_eject_car
else
if(vector["y"] == 0 && vector["x"] == 0)
options["radial_eject_car"] = radial_eject_car
if(Sl.occupant)
options["radial_heal"] = radial_heal
if(inserted_key)
if(!driver)
options["radial_eject_key"] = radial_eject_key
if(length(boot))
options["radial_eject_boot"] = radial_eject_boot
var/choice
if(length(options) < 1)
return
if(length(options) == 1)
for(var/key in options)
choice = key
else
choice = show_radial_menu(user, src, options, require_near = !issilicon(user))
// post choice verification
if(isAI(user) || !user.canUseTopic(src, !issilicon(user)))
return
switch(choice)
if("eject_car")
if(driver)
remove_occupant(driver)
else
for(var/mob/m in occupants)
remove_occupant(m)
if("radial_heal")
Sl.ui_interact(user)
if("eject_key")
to_chat(user, "<span class='notice'>You remove \the [inserted_key] from \the [src].</span>")
inserted_key.forceMove(drop_location())
user.put_in_hands(inserted_key)
inserted_key = null
if("eject_boot")
eject_boot(user)
/obj/vehicle/sealed/vectorcraft/boot/ambulance/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/sleeper_buffer))
var/obj/item/reagent_containers/sleeper_buffer/SB = I
if((SB.reagents.total_volume + Sl.reagents.total_volume) < Sl.reagents.maximum_volume)
SB.reagents.trans_to(Sl.reagents, SB.reagents.total_volume)
visible_message("[user] places the [SB] into the [src].")
qdel(SB)
return
else
SB.reagents.trans_to(Sl.reagents, SB.reagents.total_volume)
visible_message("[user] adds as much as they can to the [src] from the [SB].")
return
if(istype(I, /obj/item/reagent_containers))
var/obj/item/reagent_containers/RC = I
if(RC.reagents.total_volume == 0)
to_chat(user, "<span class='notice'>The [I] is empty!</span>")
for(var/datum/reagent/R in RC.reagents.reagent_list)
if((obj_flags & EMAGGED) || (allowed(usr)))
break
if(!istype(R, /datum/reagent/medicine))
visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"")
return
RC.reagents.trans_to(Sl.reagents, 1000)
visible_message("[user] adds as much as they can to the [src] from the [I].")
return