Merge branch 'master' into placeholder

This commit is contained in:
Ferner
2021-01-02 23:21:47 +01:00
117 changed files with 2994 additions and 11056 deletions
@@ -83,6 +83,8 @@
if(perp.shoes && !perp.buckled)//Adding blood to shoes
var/obj/item/clothing/shoes/S = perp.shoes
if(istype(S))
if(S.item_flags & LIGHTSTEP)
return
S.blood_color = basecolor
S.track_footprint = max(amount, S.track_footprint)
if(!S.blood_overlay)
@@ -625,3 +625,78 @@ BREATH ANALYZER
++unknown
if(unknown)
to_chat(user,"<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's respitory system.</span>")
/obj/item/device/advanced_healthanalyzer
name = "zeng-hu body analyzer"
desc = "An expensive and varied-use health analyzer that prints full-body scans after a short scanning delay."
icon_state = "zh-analyzer"
item_state = "healthanalyzer"
slot_flags = SLOT_BELT
w_class = ITEMSIZE_NORMAL
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 3)
var/obj/machinery/body_scanconsole/internal_bodyscanner = null //this is used to print the date and to deal with extra
/obj/item/device/advanced_healthanalyzer/Initialize()
. = ..()
if(!internal_bodyscanner)
var/obj/machinery/body_scanconsole/S = new (src)
S.forceMove(src)
S.use_power = FALSE
internal_bodyscanner = S
/obj/item/device/advanced_healthanalyzer/Destroy()
if(internal_bodyscanner)
QDEL_NULL(internal_bodyscanner)
return ..()
/obj/item/device/advanced_healthanalyzer/attack(mob/living/M, mob/living/user)
if(!internal_bodyscanner)
return
if(do_after(user, 7 SECONDS, TRUE))
print_scan(M, user)
add_fingerprint(user)
/obj/item/device/advanced_healthanalyzer/proc/print_scan(var/mob/M, var/mob/living/user)
var/obj/item/paper/R = new(user.loc)
R.color = "#eeffe8"
R.set_content_unsafe("Scan ([M.name])", internal_bodyscanner.format_occupant_data(get_medical_data(M)))
if(ishuman(user) && !(user.l_hand && user.r_hand))
user.put_in_hands(R)
user.visible_message("\The [src] spits out a piece of paper.")
/obj/item/device/advanced_healthanalyzer/proc/get_medical_data(var/mob/living/carbon/human/H)
if (!ishuman(H))
return
var/list/medical_data = list(
"stationtime" = worldtime2text(),
"brain_activity" = H.get_brain_status(),
"blood_volume" = H.get_blood_volume(),
"blood_oxygenation" = H.get_blood_oxygenation(),
"blood_pressure" = H.get_blood_pressure(),
"bruteloss" = get_severity(H.getBruteLoss(), TRUE),
"fireloss" = get_severity(H.getFireLoss(), TRUE),
"oxyloss" = get_severity(H.getOxyLoss(), TRUE),
"toxloss" = get_severity(H.getToxLoss(), TRUE),
"cloneloss" = get_severity(H.getCloneLoss(), TRUE),
"rads" = H.total_radiation,
"paralysis" = H.paralysis,
"bodytemp" = H.bodytemperature,
"borer_present" = H.has_brain_worms(),
"inaprovaline_amount" = H.reagents.get_reagent_amount(/datum/reagent/inaprovaline),
"dexalin_amount" = H.reagents.get_reagent_amount(/datum/reagent/dexalin),
"stoxin_amount" = H.reagents.get_reagent_amount(/datum/reagent/soporific),
"bicaridine_amount" = H.reagents.get_reagent_amount(/datum/reagent/bicaridine),
"dermaline_amount" = H.reagents.get_reagent_amount(/datum/reagent/dermaline),
"blood_amount" = H.vessel.get_reagent_amount(/datum/reagent/blood),
"disabilities" = H.sdisabilities,
"lung_ruptured" = H.is_lung_ruptured(),
"external_organs" = H.organs.Copy(),
"internal_organs" = H.internal_organs.Copy(),
"species_organs" = H.species.has_organ
)
return medical_data
+2
View File
@@ -219,6 +219,8 @@
for(var/i = 1 to GUMBALL_MAX)
var/obj/item/clothing/mask/chewable/candy/gum/gumball/medical/G = new(src)
contained += G
return INITIALIZE_HINT_LATELOAD
#undef JAR_NOTHING
#undef JAR_MONEY
+3 -1
View File
@@ -503,7 +503,9 @@
/obj/item/toy/snappop/Crossed(H as mob|obj)
if((ishuman(H))) //i guess carp and shit shouldn't set them off
var/mob/living/carbon/M = H
var/mob/living/carbon/human/M = H
if(M.shoes?.item_flags & LIGHTSTEP)
return
if(M.m_intent == M_RUN)
to_chat(M, SPAN_WARNING("You step on the snap pop!"))
do_pop()
+1
View File
@@ -336,6 +336,7 @@ RFD Construction-Class
/obj/item/rfd/construction/mounted/can_use(var/mob/user,var/turf/T)
return (user.Adjacent(T) && !user.stat && !user.restrained())
/*
RFD Service-Class
*/
@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/circuitboard/mech_recharger
@@ -10,4 +10,13 @@
req_components = list(
"/obj/item/stock_parts/capacitor" = 2,
"/obj/item/stock_parts/scanning_module" = 1,
"/obj/item/stock_parts/manipulator" = 2)
"/obj/item/stock_parts/manipulator" = 2)
/obj/item/circuitboard/mech_recharger/hephaestus
name = T_BOARD("hephaestus mech recharger")
build_path = /obj/machinery/mech_recharger/hephaestus
origin_tech = list(TECH_DATA = 2, TECH_POWER = 3, TECH_ENGINEERING = 3)
req_components = list(
"/obj/item/stock_parts/capacitor" = 3,
"/obj/item/stock_parts/scanning_module" = 2,
"/obj/item/stock_parts/manipulator" = 3)
@@ -57,6 +57,11 @@
/obj/item/landmine/Crossed(AM as mob|obj)
if(deployed)
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(H.shoes?.item_flags & LIGHTSTEP)
..()
return
if(isliving(AM))
var/mob/living/L = AM
if(L.mob_size >= 5)
@@ -22,9 +22,10 @@
var/damage_coef = 1
if(H.buckled)
return
if(H.resting)
return
if(H.shoes?.item_flags & LIGHTSTEP)
return
to_chat(H, SPAN_DANGER("You step on \the [src]!"))
playsound(get_turf(src), 'sound/effects/glass_step.ogg', 50, TRUE)
@@ -82,6 +82,7 @@
)
sharp = 1
edge = 1
force_divisor = 0.25
/obj/item/material/minihoe // -- Numbers
name = "mini hoe"
+19 -1
View File
@@ -71,8 +71,26 @@ var/list/tape_roll_applications = list()
/obj/item/tape/engineering
name = "engineering tape"
desc = "A length of engineering tape. Better not cross it."
req_one_access = list(access_engine,access_atmospherics)
desc_info = "You can use a multitool on this tape to allow emergency shield generators to deploy shields on this tile."
req_one_access = list(access_engine, access_atmospherics)
icon_base = "engineering"
var/shield_marker = FALSE
/obj/item/tape/engineering/examine(mob/user, distance)
. = ..()
if(shield_marker)
to_chat(user, SPAN_NOTICE("This strip of tape has been modified to serve as a marker for emergency shield generators to lock onto."))
/obj/item/tape/engineering/attackby(obj/item/W, mob/user)
if(W.ismultitool())
shield_marker = !shield_marker
to_chat(user, SPAN_NOTICE("You [shield_marker ? "" : "un"]designate \the [src] as a target for an emergency shield generator."))
if(shield_marker)
animate(src, 1 SECOND, color = color_rotation(-60))
else
animate(src, 1 SECOND, color = initial(color))
return
return ..()
/obj/item/taperoll/attack_self(mob/user as mob)
if(icon_state == "[icon_base]_start")
+5 -1
View File
@@ -47,7 +47,11 @@
overlays += image('icons/obj/items.dmi', icon_state = "soap_key_overlay")
/obj/item/soap/Crossed(AM as mob|obj)
if (istype(AM, /mob/living))
if(isliving(AM))
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(H.shoes?.item_flags & LIGHTSTEP)
return
var/mob/living/M = AM
M.slip("the [src.name]",3)
@@ -513,3 +513,20 @@
canremove = 0
species_restricted = list(BODYTYPE_VAURCA_BREEDER)
sprite_sheets = list(BODYTYPE_VAURCA_BREEDER = 'icons/mob/species/breeder/back.dmi')
/obj/item/storage/backpack/service
name = "idris service backpack"
desc = "The infamously Idris Service Standard refers to this monstrous, self-stabilizing back-mounted utensil and service item holder, not anything professional."
icon_state = "idris_backpack"
storage_slots = 6
max_w_class = ITEMSIZE_LARGE
can_hold = list(
/obj/item/tray,
/obj/item/material/kitchen/utensil/fork,
/obj/item/material/kitchen/utensil/knife,
/obj/item/material/kitchen/utensil/spoon,
/obj/item/material/knife,
/obj/item/material/hatchet/butch,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/storage/toolbox/lunchbox/nt
)
@@ -137,7 +137,8 @@
starts_with = list(
/obj/item/stack/medical/bruise_pack = 2,
/obj/item/stack/medical/advanced/bruise_pack = 2,
/obj/item/reagent_containers/pill/bicaridine = 2,
/obj/item/reagent_containers/pill/bicaridine = 1,
/obj/item/reagent_containers/hypospray/autoinjector/coagzolug = 1,
/obj/item/device/healthanalyzer = 1
)
@@ -84,3 +84,16 @@
/obj/item/storage/internal/Adjacent(var/atom/neighbor)
return master_item.Adjacent(neighbor)
/obj/item/storage/internal/skrell
name = "headtail storage"
icon = 'icons/obj/action_buttons/organs.dmi'
icon_state = "skrell_headpocket"
storage_slots = 1
max_storage_space = 2
max_w_class = ITEMSIZE_SMALL
use_sound = null
/obj/item/storage/internal/skrell/Initialize()
. = ..()
name = initial(name)
@@ -118,6 +118,7 @@
new /obj/item/storage/box/inhalers(src)
new /obj/item/clothing/glasses/hud/health/aviator(src)
new /obj/item/storage/box/fancy/keypouch/med(src)
new /obj/item/device/advanced_healthanalyzer(src)
/obj/structure/closet/secure_closet/CMO2
name = "chief medical officer's attire"
@@ -82,6 +82,11 @@
desc += padding_material ? " It's made of [material.use_name] and covered with [padding_material.use_name]." : " It's made of [material.use_name]."
/obj/structure/bed/forceMove(atom/dest)
. = ..()
if(buckled_mob)
buckled_mob.forceMove(dest)
/obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover) && mover.checkpass(PASSTABLE))
return 1