Merge remote-tracking branch 'origin/master' into what-should-i-name-this-branch
@@ -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
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
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"
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
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"
|
||||
|
After Width: | Height: | Size: 707 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 506 B |
|
After Width: | Height: | Size: 444 B |
@@ -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
|
||||
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
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
|
||||