mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-25 22:12:58 +01:00
Merge branch 'master' into placeholder
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user