mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-13 01:02:43 +01:00
Medical Expansion (#6465)
* Starts work on the Medical Expansion. * Further Work * Save Everything! * Large volume of things. * Log of Change * I'm an idiot. * Kidney assisted sprites. They didn't exist, for some reason. * Fixfix * Fixfix * Update encased.dm * Update glass.dm * Update Chemistry-Reagents.dm I am once more an idiot. * Split augs. * Fixfix
This commit is contained in:
@@ -381,6 +381,7 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
if(G.slot == "implant")
|
||||
var/obj/item/weapon/implant/I = G.spawn_item(H)
|
||||
I.invisibility = 100
|
||||
I.implant_loadout(H)
|
||||
continue
|
||||
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
var/loaded_dna //Blood sample for DNA hashing.
|
||||
var/malfunctioning = FALSE // May cause rejection, or the printing of some alien limb instead!
|
||||
|
||||
var/complex_organs = FALSE // Can it print more 'complex' organs?
|
||||
|
||||
var/anomalous_organs = FALSE // Can it print anomalous organs?
|
||||
|
||||
// These should be subtypes of /obj/item/organ
|
||||
// Costs roughly 20u Phoron (1 sheet) per internal organ, limbs are 60u for limb and extremity
|
||||
var/list/products = list(
|
||||
@@ -29,6 +33,7 @@
|
||||
"Kidneys" = list(/obj/item/organ/internal/kidneys,20),
|
||||
"Eyes" = list(/obj/item/organ/internal/eyes, 20),
|
||||
"Liver" = list(/obj/item/organ/internal/liver, 20),
|
||||
"Spleen" = list(/obj/item/organ/internal/spleen, 20),
|
||||
"Arm, Left" = list(/obj/item/organ/external/arm, 40),
|
||||
"Arm, Right" = list(/obj/item/organ/external/arm/right, 40),
|
||||
"Leg, Left" = list(/obj/item/organ/external/leg, 40),
|
||||
@@ -39,6 +44,18 @@
|
||||
"Hand, Right" = list(/obj/item/organ/external/hand/right, 20)
|
||||
)
|
||||
|
||||
var/list/complex_products = list(
|
||||
"Brain" = list(/obj/item/organ/internal/brain, 60),
|
||||
"Larynx" = list(/obj/item/organ/internal/voicebox, 20),
|
||||
"Head" = list(/obj/item/organ/external/head, 40)
|
||||
)
|
||||
|
||||
var/list/anomalous_products = list(
|
||||
"Lymphatic Complex" = list(/obj/item/organ/internal/immunehub, 120),
|
||||
"Respiration Nexus" = list(/obj/item/organ/internal/lungs/replicant/mending, 80),
|
||||
"Adrenal Valve Cluster" = list(/obj/item/organ/internal/heart/replicant/rage, 80)
|
||||
)
|
||||
|
||||
/obj/machinery/organ_printer/attackby(var/obj/item/O, var/mob/user)
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
updateUsrDialog()
|
||||
@@ -90,6 +107,17 @@
|
||||
else
|
||||
malfunctioning = initial(malfunctioning)
|
||||
|
||||
if(manip_rating >= 3)
|
||||
complex_organs = TRUE
|
||||
if(manip_rating >= 4)
|
||||
anomalous_organs = TRUE
|
||||
if(manip_rating >= 5)
|
||||
malfunctioning = TRUE
|
||||
else
|
||||
complex_organs = initial(complex_organs)
|
||||
anomalous_organs = initial(anomalous_organs)
|
||||
malfunctioning = initial(malfunctioning)
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/organ_printer/attack_hand(mob/user)
|
||||
@@ -113,7 +141,17 @@
|
||||
to_chat(user, "<span class='warning'>\The [src] can't operate without a reagent reservoir!</span>")
|
||||
|
||||
/obj/machinery/organ_printer/proc/printing_menu(mob/user)
|
||||
var/choice = input("What would you like to print?") as null|anything in products
|
||||
var/list/possible_list = list()
|
||||
|
||||
possible_list |= products
|
||||
|
||||
if(complex_organs)
|
||||
possible_list |= complex_products
|
||||
|
||||
if(anomalous_organs)
|
||||
possible_list |= anomalous_products
|
||||
|
||||
var/choice = input("What would you like to print?") as null|anything in possible_list
|
||||
|
||||
if(!choice || printing || (stat & (BROKEN|NOPOWER)))
|
||||
return
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/oxygen_pump
|
||||
name = "emergency oxygen pump"
|
||||
icon = 'icons/obj/walllocker.dmi'
|
||||
desc = "A wall mounted oxygen pump with a retractable face mask that you can pull over your face in case of emergencies."
|
||||
desc = "A wall mounted oxygen pump with a retractable mask that you can pull over your face in case of emergencies."
|
||||
icon_state = "oxygen_tank"
|
||||
|
||||
anchored = TRUE
|
||||
@@ -236,3 +236,76 @@
|
||||
icon_state_closed = "anesthetic_tank"
|
||||
icon_state_open = "anesthetic_tank_open"
|
||||
mask_type = /obj/item/clothing/mask/breath/anesthetic
|
||||
|
||||
/obj/machinery/oxygen_pump/mobile
|
||||
name = "portable oxygen pump"
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
desc = "A portable oxygen pump with a retractable mask that you can pull over your face in case of emergencies."
|
||||
icon_state = "medpump"
|
||||
icon_state_open = "medpump_open"
|
||||
icon_state_closed = "medpump"
|
||||
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
|
||||
mask_type = /obj/item/clothing/mask/gas/clear
|
||||
|
||||
var/last_area = null
|
||||
|
||||
/obj/machinery/oxygen_pump/mobile/process()
|
||||
..()
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!last_area && T)
|
||||
last_area = T.loc
|
||||
|
||||
if(last_area != T.loc)
|
||||
power_change()
|
||||
last_area = T.loc
|
||||
|
||||
/obj/machinery/oxygen_pump/mobile/anesthetic
|
||||
name = "portable anesthetic pump"
|
||||
spawn_type = /obj/item/weapon/tank/anesthetic
|
||||
icon_state = "medpump_n2o"
|
||||
icon_state_closed = "medpump_n2o"
|
||||
icon_state_open = "medpump_n2o_open"
|
||||
mask_type = /obj/item/clothing/mask/breath/anesthetic
|
||||
|
||||
/obj/machinery/oxygen_pump/mobile/stabilizer
|
||||
name = "portable patient stabilizer"
|
||||
desc = "A portable oxygen pump with a retractable mask used for stabilizing patients in the field."
|
||||
|
||||
/obj/machinery/oxygen_pump/mobile/stabilizer/process()
|
||||
if(breather)
|
||||
if(!can_apply_to_target(breather))
|
||||
if(tank)
|
||||
tank.forceMove(src)
|
||||
breather.remove_from_mob(contained)
|
||||
contained.forceMove(src)
|
||||
src.visible_message("<span class='notice'>\The [contained] rapidly retracts back into \the [src]!</span>")
|
||||
breather = null
|
||||
use_power = 1
|
||||
else if(!breather.internal && tank)
|
||||
breather.internal = tank
|
||||
if(breather.internals)
|
||||
breather.internals.icon_state = "internal0"
|
||||
|
||||
if(breather) // Safety.
|
||||
if(ishuman(breather))
|
||||
var/mob/living/carbon/human/H = breather
|
||||
|
||||
if(H.stat == DEAD)
|
||||
H.add_modifier(/datum/modifier/bloodpump_corpse, 6 SECONDS)
|
||||
|
||||
else
|
||||
H.add_modifier(/datum/modifier/bloodpump, 6 SECONDS)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(!last_area && T)
|
||||
last_area = T.loc
|
||||
|
||||
if(last_area != T.loc)
|
||||
power_change()
|
||||
last_area = T.loc
|
||||
|
||||
@@ -522,3 +522,232 @@
|
||||
S.reagents.add_reagent(reagent,amount)
|
||||
S.chassis.use_power(energy_drain)
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone
|
||||
name = "crisis dronebay"
|
||||
desc = "A small shoulder-mounted dronebay containing a rapid response drone capable of moderately stabilizing a patient near the exosuit."
|
||||
icon_state = "mecha_dronebay"
|
||||
origin_tech = list(TECH_PHORON = 3, TECH_MAGNET = 6, TECH_BIO = 5, TECH_DATA = 4)
|
||||
range = MELEE|RANGED
|
||||
equip_cooldown = 3 SECONDS
|
||||
required_type = list(/obj/mecha/medical)
|
||||
|
||||
var/droid_state = "med_droid"
|
||||
|
||||
var/beam_state = "medbeam"
|
||||
|
||||
var/enabled = FALSE
|
||||
|
||||
var/icon/drone_overlay
|
||||
|
||||
var/max_distance = 3
|
||||
|
||||
var/damcap = 60
|
||||
var/heal_dead = FALSE // Does this device heal the dead?
|
||||
|
||||
var/brute_heal = 0.5 // Amount of bruteloss healed.
|
||||
var/burn_heal = 0.5 // Amount of fireloss healed.
|
||||
var/tox_heal = 0.5 // Amount of toxloss healed.
|
||||
var/oxy_heal = 1 // Amount of oxyloss healed.
|
||||
var/rad_heal = 0 // Amount of radiation healed.
|
||||
var/clone_heal = 0 // Amount of cloneloss healed.
|
||||
var/hal_heal = 0.2 // Amount of halloss healed.
|
||||
var/bone_heal = 0 // Percent chance it will heal a broken bone. this does not mean 'make it not instantly re-break'.
|
||||
|
||||
var/mob/living/Target = null
|
||||
var/datum/beam/MyBeam = null
|
||||
|
||||
equip_type = EQUIP_HULL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Initialize()
|
||||
..()
|
||||
drone_overlay = new(src.icon, icon_state = droid_state)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/attach(obj/mecha/M as obj)
|
||||
. = ..(M)
|
||||
if(chassis)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/detach(atom/moveto=null)
|
||||
shut_down()
|
||||
. = ..(moveto)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/critfail()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
shut_down()
|
||||
if(chassis && chassis.occupant)
|
||||
to_chat(chassis.occupant, "<span class='notice'>\The [chassis] shudders as something jams!</span>")
|
||||
log_message("[src.name] has malfunctioned. Maintenance required.")
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/process() // Will continually try to find the nearest person above the threshold that is a valid target, and try to heal them.
|
||||
if(chassis && enabled && chassis.has_charge(energy_drain) && (chassis.occupant || enable_special))
|
||||
var/mob/living/Targ = Target
|
||||
var/TargDamage = 0
|
||||
|
||||
if(!valid_target(Target))
|
||||
Target = null
|
||||
|
||||
if(Target)
|
||||
TargDamage = (Targ.getOxyLoss() + Targ.getFireLoss() + Targ.getBruteLoss() + Targ.getToxLoss())
|
||||
|
||||
for(var/mob/living/Potential in viewers(max_distance, chassis))
|
||||
if(!valid_target(Potential))
|
||||
continue
|
||||
|
||||
var/tallydamage = 0
|
||||
if(oxy_heal)
|
||||
tallydamage += Potential.getOxyLoss()
|
||||
if(burn_heal)
|
||||
tallydamage += Potential.getFireLoss()
|
||||
if(brute_heal)
|
||||
tallydamage += Potential.getBruteLoss()
|
||||
if(tox_heal)
|
||||
tallydamage += Potential.getToxLoss()
|
||||
if(hal_heal)
|
||||
tallydamage += Potential.getHalLoss()
|
||||
if(clone_heal)
|
||||
tallydamage += Potential.getCloneLoss()
|
||||
if(rad_heal)
|
||||
tallydamage += Potential.radiation / 2
|
||||
|
||||
if(tallydamage > TargDamage)
|
||||
Target = Potential
|
||||
|
||||
if(MyBeam && !valid_target(MyBeam.target))
|
||||
QDEL_NULL(MyBeam)
|
||||
|
||||
if(Target)
|
||||
if(MyBeam && MyBeam.target != Target)
|
||||
QDEL_NULL(MyBeam)
|
||||
|
||||
if(valid_target(Target))
|
||||
if(!MyBeam)
|
||||
MyBeam = chassis.Beam(Target,icon='icons/effects/beam.dmi',icon_state=beam_state,time=3 SECONDS,maxdistance=max_distance,beam_type = /obj/effect/ebeam,beam_sleep_time=2)
|
||||
heal_target(Target)
|
||||
|
||||
else
|
||||
shut_down()
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/proc/valid_target(var/mob/living/L)
|
||||
. = TRUE
|
||||
|
||||
if(!L || !istype(L))
|
||||
return FALSE
|
||||
|
||||
if(get_dist(L, src) > max_distance)
|
||||
return FALSE
|
||||
|
||||
if(!(L in viewers(max_distance, chassis)))
|
||||
return FALSE
|
||||
|
||||
if(!unique_patient_checks(L))
|
||||
return FALSE
|
||||
|
||||
if(L.stat == DEAD && !heal_dead)
|
||||
return FALSE
|
||||
|
||||
var/tallydamage = 0
|
||||
if(oxy_heal)
|
||||
tallydamage += L.getOxyLoss()
|
||||
if(burn_heal)
|
||||
tallydamage += L.getFireLoss()
|
||||
if(brute_heal)
|
||||
tallydamage += L.getBruteLoss()
|
||||
if(tox_heal)
|
||||
tallydamage += L.getToxLoss()
|
||||
if(hal_heal)
|
||||
tallydamage += L.getHalLoss()
|
||||
if(clone_heal)
|
||||
tallydamage += L.getCloneLoss()
|
||||
if(rad_heal)
|
||||
tallydamage += L.radiation / 2
|
||||
|
||||
if(tallydamage < damcap)
|
||||
return FALSE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/proc/shut_down()
|
||||
if(enabled)
|
||||
chassis.visible_message("<span class='notice'>\The [chassis]'s [src] buzzes as its drone returns to port.</span>")
|
||||
toggle_drone()
|
||||
if(!isnull(Target))
|
||||
Target = null
|
||||
if(MyBeam)
|
||||
QDEL_NULL(MyBeam)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/proc/unique_patient_checks(var/mob/living/L) // Anything special for subtypes. Does it only work on Robots? Fleshies? A species?
|
||||
. = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/proc/heal_target(var/mob/living/L) // We've done all our special checks, just get to fixing damage.
|
||||
chassis.use_power(energy_drain)
|
||||
if(istype(L))
|
||||
L.adjustBruteLoss(brute_heal * -1)
|
||||
L.adjustFireLoss(burn_heal * -1)
|
||||
L.adjustToxLoss(tox_heal * -1)
|
||||
L.adjustOxyLoss(oxy_heal * -1)
|
||||
L.adjustCloneLoss(clone_heal * -1)
|
||||
L.adjustHalLoss(hal_heal * -1)
|
||||
L.radiation = max(0, L.radiation - rad_heal)
|
||||
|
||||
if(ishuman(L) && bone_heal)
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
if(H.bad_external_organs.len)
|
||||
for(var/obj/item/organ/external/E in H.bad_external_organs)
|
||||
if(prob(bone_heal))
|
||||
E.status &= ~ORGAN_BROKEN
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/proc/toggle_drone()
|
||||
..()
|
||||
if(chassis)
|
||||
enabled = !enabled
|
||||
if(enabled)
|
||||
set_ready_state(0)
|
||||
log_message("Activated.")
|
||||
chassis.overlays += drone_overlay
|
||||
else
|
||||
set_ready_state(1)
|
||||
log_message("Deactivated.")
|
||||
chassis.overlays -= drone_overlay
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["toggle_drone"])
|
||||
toggle_drone()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/get_equip_info()
|
||||
if(!chassis) return
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [src.name] - <a href='?src=\ref[src];toggle_drone=1'>[enabled?"Dea":"A"]ctivate</a>"
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/crisis_drone/rad
|
||||
name = "hazmat dronebay"
|
||||
desc = "A small shoulder-mounted dronebay containing a rapid response drone capable of purging a patient near the exosuit of radiation damage."
|
||||
icon_state = "mecha_dronebay_rad"
|
||||
|
||||
droid_state = "rad_drone"
|
||||
beam_state = "g_beam"
|
||||
|
||||
tox_heal = 0.5
|
||||
rad_heal = 5
|
||||
clone_heal = 0.2
|
||||
hal_heal = 0.2
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/powertool/medanalyzer
|
||||
name = "mounted humanoid scanner"
|
||||
desc = "An exosuit-mounted scanning device."
|
||||
icon_state = "mecha_analyzer_health"
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 5, TECH_BIO = 5)
|
||||
equip_cooldown = 5 SECONDS
|
||||
energy_drain = 100
|
||||
range = MELEE
|
||||
equip_type = EQUIP_UTILITY
|
||||
ready_sound = 'sound/weapons/flash.ogg'
|
||||
required_type = list(/obj/mecha/medical)
|
||||
|
||||
tooltype = /obj/item/device/healthanalyzer/advanced
|
||||
|
||||
@@ -169,6 +169,30 @@ HALOGEN COUNTER - Radcount on mobs
|
||||
dat += stomachunknownreagents[d]
|
||||
else
|
||||
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span><br>"
|
||||
if(C.touching && C.touching.total_volume)
|
||||
var/unknown = 0
|
||||
var/touchreagentdata[0]
|
||||
var/touchunknownreagents[0]
|
||||
for(var/B in C.touching.reagent_list)
|
||||
var/datum/reagent/T = B
|
||||
if(T.scannable)
|
||||
touchreagentdata["[T.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
||||
if (advscan == 0 || showadvscan == 0)
|
||||
dat += "<span class='notice'>[T.name] found in subject's dermis.</span><br>"
|
||||
else
|
||||
++unknown
|
||||
touchunknownreagents["[T.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(T.id), 1)]u [T.name]</span><br>"
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
|
||||
for(var/d in touchreagentdata)
|
||||
dat += touchreagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's dermis:</span><br>"
|
||||
for(var/d in touchunknownreagents)
|
||||
dat += touchunknownreagents[d]
|
||||
else
|
||||
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.</span><br>"
|
||||
if(C.virus2.len)
|
||||
for (var/ID in C.virus2)
|
||||
if (ID in virusDB)
|
||||
|
||||
@@ -50,4 +50,9 @@
|
||||
/datum/matter_synth/wire
|
||||
name = "Wire Synthesizer"
|
||||
max_energy = 50
|
||||
recharge_rate = 2
|
||||
recharge_rate = 2
|
||||
|
||||
/datum/matter_synth/bandage
|
||||
name = "Bandage Synthesizer"
|
||||
max_energy = 10
|
||||
recharge_rate = 1
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
var/heal_burn = 0
|
||||
var/apply_sounds
|
||||
|
||||
var/upgrade_to // The type path this stack can be upgraded to.
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (!istype(M))
|
||||
user << "<span class='warning'>\The [src] cannot be applied to [M]!</span>"
|
||||
@@ -59,6 +61,80 @@
|
||||
use(1)
|
||||
|
||||
M.updatehealth()
|
||||
|
||||
/obj/item/stack/medical/proc/upgrade_stack(var/upgrade_amount)
|
||||
. = FALSE
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if(ispath(upgrade_to) && use(upgrade_amount))
|
||||
var/obj/item/stack/medical/M = new upgrade_to(T, upgrade_amount)
|
||||
return M
|
||||
|
||||
return .
|
||||
|
||||
/obj/item/stack/medical/crude_pack
|
||||
name = "crude bandage"
|
||||
singular_name = "crude bandage length"
|
||||
desc = "Some bandages to wrap around bloody stumps."
|
||||
icon_state = "gauze"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
|
||||
|
||||
upgrade_to = /obj/item/stack/medical/bruise_pack
|
||||
|
||||
/obj/item/stack/medical/crude_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts bandaging [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start bandaging [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if(W.bandaged)
|
||||
continue
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/3))
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
|
||||
if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandage over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandage over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "roll of gauze"
|
||||
singular_name = "gauze length"
|
||||
@@ -68,6 +144,8 @@
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
|
||||
|
||||
upgrade_to = /obj/item/stack/medical/advanced/bruise_pack
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
var/list/datum/matter_synth/synths = null
|
||||
var/no_variants = TRUE // Determines whether the item should update it's sprites based on amount.
|
||||
|
||||
var/pass_color = FALSE // Will the item pass its own color var to the created item? Dyed cloth, wood, etc.
|
||||
var/strict_color_stacking = FALSE // Will the stack merge with other stacks that are different colors? (Dyed cloth, wood, etc)
|
||||
|
||||
/obj/item/stack/New(var/loc, var/amount=null)
|
||||
..()
|
||||
if (!stacktype)
|
||||
@@ -159,6 +162,17 @@
|
||||
for (var/obj/item/I in O)
|
||||
qdel(I)
|
||||
|
||||
if ((pass_color || recipe.pass_color))
|
||||
if(!color)
|
||||
if(recipe.use_material)
|
||||
var/material/MAT = get_material_by_name(recipe.use_material)
|
||||
if(MAT.icon_colour)
|
||||
O.color = MAT.icon_colour
|
||||
else
|
||||
return
|
||||
else
|
||||
O.color = color
|
||||
|
||||
/obj/item/stack/Topic(href, href_list)
|
||||
..()
|
||||
if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
|
||||
@@ -242,6 +256,9 @@
|
||||
return 0
|
||||
if ((stacktype != S.stacktype) && !type_verified)
|
||||
return 0
|
||||
if ((strict_color_stacking || S.strict_color_stacking) && S.color != color)
|
||||
return 0
|
||||
|
||||
if (isnull(tamount))
|
||||
tamount = src.get_amount()
|
||||
|
||||
@@ -355,8 +372,9 @@
|
||||
var/one_per_turf = 0
|
||||
var/on_floor = 0
|
||||
var/use_material
|
||||
var/pass_color
|
||||
|
||||
New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null)
|
||||
New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null, pass_stack_color)
|
||||
src.title = title
|
||||
src.result_type = result_type
|
||||
src.req_amount = req_amount
|
||||
@@ -366,6 +384,7 @@
|
||||
src.one_per_turf = one_per_turf
|
||||
src.on_floor = on_floor
|
||||
src.use_material = supplied_material
|
||||
src.pass_color = pass_stack_color
|
||||
|
||||
/*
|
||||
* Recipe list datum
|
||||
|
||||
@@ -80,6 +80,10 @@
|
||||
name = "\improper \"LiquidProtein\" ration"
|
||||
icon_state = "liquidprotein"
|
||||
|
||||
/obj/item/trash/liquidvitamin
|
||||
name = "\improper \"VitaPaste\" ration"
|
||||
icon_state = "liquidvitamin"
|
||||
|
||||
/obj/item/trash/tastybread
|
||||
name = "bread tube"
|
||||
icon_state = "tastybread"
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/implant_color = "b"
|
||||
var/allow_reagents = 0
|
||||
var/malfunction = 0
|
||||
var/initialize_loc = BP_TORSO
|
||||
show_messages = 1
|
||||
|
||||
/obj/item/weapon/implant/proc/trigger(emote, source as mob)
|
||||
@@ -30,7 +31,7 @@
|
||||
var/mob/living/carbon/human/H = source
|
||||
var/obj/item/organ/external/affected = H.get_organ(target_zone)
|
||||
if(affected)
|
||||
affected.implants += src
|
||||
affected.implants |= src
|
||||
part = affected
|
||||
if(part)
|
||||
forceMove(part)
|
||||
@@ -65,8 +66,9 @@
|
||||
|
||||
/obj/item/weapon/implant/proc/implant_loadout(var/mob/living/carbon/human/H)
|
||||
if(H)
|
||||
var/obj/item/organ/external/affected = H.organs_by_name[BP_HEAD]
|
||||
var/obj/item/organ/external/affected = H.organs_by_name[initialize_loc]
|
||||
if(handle_implant(H, affected))
|
||||
invisibility = initial(invisibility)
|
||||
post_implant(H)
|
||||
|
||||
/obj/item/weapon/implant/Destroy()
|
||||
@@ -110,7 +112,7 @@ GLOBAL_LIST_BOILERPLATE(all_tracking_implants, /obj/item/weapon/implant/tracking
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implant/tracking/post_implant(var/mob/source)
|
||||
START_PROCESSING(SSobj, src)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/implant/tracking/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
@@ -563,7 +565,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
|
||||
/obj/item/weapon/implant/death_alarm/post_implant(mob/source as mob)
|
||||
mobname = source.real_name
|
||||
START_PROCESSING(SSobj, src)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
//////////////////////////////
|
||||
// Compressed Matter Implant
|
||||
|
||||
@@ -0,0 +1,196 @@
|
||||
//////////////////////////////
|
||||
// Nanite Organ Implant
|
||||
//////////////////////////////
|
||||
/obj/item/weapon/implant/organ
|
||||
name = "nanite fabrication implant"
|
||||
desc = "A buzzing implant covered in a writhing layer of metal insects."
|
||||
icon_state = "implant_evil"
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 2, TECH_ILLEGAL = 2)
|
||||
|
||||
var/organ_to_implant = /obj/item/organ/internal/augment/bioaugment/thermalshades
|
||||
var/organ_display_name = "unknown organ"
|
||||
|
||||
/obj/item/weapon/implant/organ/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> \"GreyDoctor\" Class Nanite Hive<BR>
|
||||
<b>Life:</b> Activates upon implantation, destroying itself in the process.<BR>
|
||||
<b>Important Notes:</b> Nanites will fail to complete their task if a suitable location cannot be found for the organ.<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Nanites will fabricate: <span class='alien'>[organ_display_name]</span><BR>
|
||||
<b>Special Features:</b> Organ identification protocols.<BR>
|
||||
<b>Integrity:</b> N/A"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/organ/post_implant(var/mob/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
var/obj/item/organ/NewOrgan = new organ_to_implant()
|
||||
|
||||
var/obj/item/organ/external/E = H.get_organ(NewOrgan.parent_organ)
|
||||
to_chat(H, "<span class='notice'>You feel a tingling sensation in your [part].</span>")
|
||||
if(E && !(H.internal_organs_by_name[NewOrgan.organ_tag]))
|
||||
spawn(rand(1 SECONDS, 30 SECONDS))
|
||||
to_chat(H, "<span class='alien'>You feel a pressure in your [E] as the tingling fades, the lump caused by the implant now gone.</span>")
|
||||
|
||||
NewOrgan.forceMove(H)
|
||||
NewOrgan.owner = H
|
||||
if(E.internal_organs == null)
|
||||
E.internal_organs = list()
|
||||
E.internal_organs |= NewOrgan
|
||||
H.internal_organs_by_name[NewOrgan.organ_tag] = NewOrgan
|
||||
H.internal_organs |= NewOrgan
|
||||
NewOrgan.handle_organ_mod_special()
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
else
|
||||
qdel(NewOrgan)
|
||||
to_chat(H, "<span class='warning'>You feel a pinching sensation in your [part]. The implant remains.</span>")
|
||||
|
||||
/obj/item/weapon/implant/organ/islegal()
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Arm / leg mounted augments.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment
|
||||
name = "nanite implant"
|
||||
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/taser
|
||||
organ_display_name = "physiological augment"
|
||||
|
||||
var/list/possible_targets = list(O_AUG_L_FOREARM, O_AUG_R_FOREARM)
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/post_implant(var/mob/M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
var/obj/item/organ/NewOrgan = new organ_to_implant()
|
||||
|
||||
var/obj/item/organ/external/E = setup_augment_slots(H, NewOrgan)
|
||||
to_chat(H, "<span class='notice'>You feel a tingling sensation in your [part].</span>")
|
||||
if(E && istype(E) && !(H.internal_organs_by_name[NewOrgan.organ_tag]))
|
||||
spawn(rand(1 SECONDS, 30 SECONDS))
|
||||
to_chat(H, "<span class='alien'>You feel a pressure in your [E] as the tingling fades, the lump caused by the implant now gone.</span>")
|
||||
|
||||
NewOrgan.forceMove(H)
|
||||
NewOrgan.owner = H
|
||||
if(E.internal_organs == null)
|
||||
E.internal_organs = list()
|
||||
E.internal_organs |= NewOrgan
|
||||
H.internal_organs_by_name[NewOrgan.organ_tag] = NewOrgan
|
||||
H.internal_organs |= NewOrgan
|
||||
NewOrgan.handle_organ_mod_special()
|
||||
|
||||
spawn(1)
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
else
|
||||
qdel(NewOrgan)
|
||||
to_chat(H, "<span class='warning'>You feel a pinching sensation in your [part]. The implant remains.</span>")
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/proc/setup_augment_slots(var/mob/living/carbon/human/H, var/obj/item/organ/internal/augment/armmounted/I)
|
||||
var/list/Choices = possible_targets.Copy()
|
||||
|
||||
for(var/targ in possible_targets)
|
||||
if(H.internal_organs_by_name[targ])
|
||||
Choices -= targ
|
||||
|
||||
var/target_choice = null
|
||||
if(Choices && Choices.len)
|
||||
if(Choices.len == 1)
|
||||
target_choice = Choices[1]
|
||||
else
|
||||
target_choice = input("Choose augment location:") in Choices
|
||||
|
||||
else
|
||||
return FALSE
|
||||
|
||||
if(target_choice)
|
||||
switch(target_choice)
|
||||
if(O_AUG_R_HAND)
|
||||
I.organ_tag = O_AUG_R_HAND
|
||||
I.parent_organ = BP_R_HAND
|
||||
I.target_slot = slot_r_hand
|
||||
if(O_AUG_L_HAND)
|
||||
I.organ_tag = O_AUG_L_HAND
|
||||
I.parent_organ = BP_L_HAND
|
||||
I.target_slot = slot_l_hand
|
||||
|
||||
if(O_AUG_R_FOREARM)
|
||||
I.organ_tag = O_AUG_R_FOREARM
|
||||
I.parent_organ = BP_R_ARM
|
||||
I.target_slot = slot_r_hand
|
||||
if(O_AUG_L_FOREARM)
|
||||
I.organ_tag = O_AUG_L_FOREARM
|
||||
I.parent_organ = BP_L_ARM
|
||||
I.target_slot = slot_l_hand
|
||||
|
||||
if(O_AUG_R_UPPERARM)
|
||||
I.organ_tag = O_AUG_R_UPPERARM
|
||||
I.parent_organ = BP_R_ARM
|
||||
I.target_slot = slot_r_hand
|
||||
if(O_AUG_L_UPPERARM)
|
||||
I.organ_tag = O_AUG_L_UPPERARM
|
||||
I.parent_organ = BP_L_ARM
|
||||
I.target_slot = slot_l_hand
|
||||
|
||||
. = H.get_organ(I.parent_organ)
|
||||
|
||||
/*
|
||||
* Limb implant primary subtypes.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/upperarm
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/shoulder/multiple
|
||||
organ_display_name = "multi-use augment"
|
||||
|
||||
possible_targets = list(O_AUG_R_UPPERARM,O_AUG_L_UPPERARM)
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/wrist
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/hand
|
||||
organ_display_name = "wrist augment"
|
||||
|
||||
possible_targets = list(O_AUG_R_HAND,O_AUG_L_HAND)
|
||||
|
||||
/*
|
||||
* Limb implant general subtypes.
|
||||
*/
|
||||
|
||||
// Wrist
|
||||
/obj/item/weapon/implant/organ/limbaugment/wrist/sword
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/hand/sword
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
// Fore-arm
|
||||
/obj/item/weapon/implant/organ/limbaugment/laser
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/dart
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/dartbow
|
||||
organ_display_name = "weapon augment"
|
||||
|
||||
// Upper-arm.
|
||||
/obj/item/weapon/implant/organ/limbaugment/upperarm/medkit
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/shoulder/multiple/medical
|
||||
|
||||
/obj/item/weapon/implant/organ/limbaugment/upperarm/surge
|
||||
organ_to_implant = /obj/item/organ/internal/augment/armmounted/shoulder/surge
|
||||
|
||||
/*
|
||||
* Others
|
||||
*/
|
||||
|
||||
/obj/item/weapon/implant/organ/pelvic
|
||||
name = "nanite fabrication implant"
|
||||
|
||||
organ_to_implant = /obj/item/organ/internal/augment/bioaugment/sprint_enhance
|
||||
organ_display_name = "pelvic augment"
|
||||
@@ -179,3 +179,103 @@
|
||||
src.imp = new /obj/item/weapon/implant/language/eal( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/shades
|
||||
name = "glass case - 'Integrated Shades'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/shades/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/taser
|
||||
name = "glass case - 'Taser'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/taser/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/laser
|
||||
name = "glass case - 'Laser'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/laser/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/laser( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/dart
|
||||
name = "glass case - 'Dart'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/dart/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/dart( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/toolkit
|
||||
name = "glass case - 'Toolkit'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/toolkit/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/medkit
|
||||
name = "glass case - 'Toolkit'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/medkit/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/medkit( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/surge
|
||||
name = "glass case - 'Muscle Overclocker'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/surge/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/upperarm/surge( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/analyzer
|
||||
name = "glass case - 'Scanner'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/analyzer/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/sword
|
||||
name = "glass case - 'Scanner'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/sword/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/limbaugment/wrist/sword( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/sprinter
|
||||
name = "glass case - 'Sprinter'"
|
||||
desc = "A case containing a nanite fabricator implant."
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/sprinter/New()
|
||||
src.imp = new /obj/item/weapon/implant/organ/pelvic( src )
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/obj/item/weapon/implant/dud
|
||||
name = "unknown implant"
|
||||
desc = "A small device with small connector wires."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant"
|
||||
initialize_loc = BP_HEAD
|
||||
var/roundstart = TRUE
|
||||
|
||||
/obj/item/weapon/implant/dud/torso
|
||||
name = "unknown implant"
|
||||
desc = "A small device with small connector wires."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant"
|
||||
initialize_loc = BP_TORSO
|
||||
|
||||
/obj/item/weapon/implant/dud/old
|
||||
name = "old implant"
|
||||
desc = "A small device with small connector wires."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "implant"
|
||||
roundstart = FALSE
|
||||
|
||||
/obj/item/weapon/implant/dud/Initialize()
|
||||
..()
|
||||
if(roundstart)
|
||||
invisibility = 100
|
||||
..()
|
||||
spawn(3)
|
||||
if(!ishuman(loc) && !QDELETED(src))
|
||||
qdel(src)
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/weapon/implant/neural
|
||||
name = "neural framework implant"
|
||||
desc = "A small metal casing with numerous wires stemming off of it."
|
||||
initialize_loc = BP_HEAD
|
||||
var/obj/item/organ/internal/brain/my_brain = null
|
||||
var/target_state = null
|
||||
var/robotic_brain = FALSE
|
||||
@@ -104,3 +105,10 @@ Implant Specifics:<BR>"}
|
||||
my_brain.take_damage(15)
|
||||
my_brain = null
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/neural/roundstart/Initialize()
|
||||
invisibility = 100
|
||||
..()
|
||||
spawn(3)
|
||||
if(!ishuman(loc) && !QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
@@ -185,6 +185,20 @@ MRE Stuff
|
||||
/obj/random/mre/sauce/crayon
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/mre/menu13
|
||||
name = "medical MRE"
|
||||
meal_desc = "This one is menu 13, vitamin paste & dessert. Only for emergencies."
|
||||
icon_state = "crayonmre"
|
||||
starts_with = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidvitamin,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidprotein,
|
||||
/obj/random/mre/drink,
|
||||
/obj/item/weapon/storage/mrebag/dessert,
|
||||
/obj/item/weapon/material/kitchen/utensil/spoon/plastic
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/mre/random
|
||||
meal_desc = "The menu label is faded out."
|
||||
starts_with = list(
|
||||
|
||||
@@ -93,6 +93,42 @@
|
||||
O.update()
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug
|
||||
name = "boxed augment implant (with injector)"
|
||||
var/case_type = /obj/item/weapon/implantcase/shades
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/Initialize()
|
||||
new /obj/item/weapon/implanter(src)
|
||||
new case_type(src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/taser
|
||||
case_type = /obj/item/weapon/implantcase/taser
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/laser
|
||||
case_type = /obj/item/weapon/implantcase/laser
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/dart
|
||||
case_type = /obj/item/weapon/implantcase/dart
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/toolkit
|
||||
case_type = /obj/item/weapon/implantcase/toolkit
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/medkit
|
||||
case_type = /obj/item/weapon/implantcase/medkit
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/surge
|
||||
case_type = /obj/item/weapon/implantcase/surge
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/analyzer
|
||||
case_type = /obj/item/weapon/implantcase/analyzer
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/sword
|
||||
case_type = /obj/item/weapon/implantcase/sword
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/imp_aug/sprinter
|
||||
case_type = /obj/item/weapon/implantcase/sprinter
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/space
|
||||
name = "boxed space suit and helmet"
|
||||
starts_with = list(
|
||||
|
||||
@@ -128,6 +128,15 @@
|
||||
icon_state = "scalpel_manager_on"
|
||||
force = 7.5
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/ripper
|
||||
name = "organ pincers"
|
||||
desc = "A horrifying bladed tool with a large metal spike in its center. The tool is used for rapidly removing organs from hopefully willing patients."
|
||||
icon_state = "organ_ripper"
|
||||
item_state = "bone_setter"
|
||||
force = 15.0
|
||||
toolspeed = 0.75
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 3, TECH_ILLEGAL = 2)
|
||||
|
||||
/*
|
||||
* Circular Saw
|
||||
*/
|
||||
@@ -147,6 +156,19 @@
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/obj/item/weapon/surgical/circular_saw/manager
|
||||
name = "energetic bone diverter"
|
||||
desc = "For heavy duty cutting (and sealing), with science!"
|
||||
icon_state = "adv_saw"
|
||||
item_state = "saw3"
|
||||
hitsound = 'sound/weapons/emitter2.ogg'
|
||||
damtype = SEARING
|
||||
w_class = ITEMSIZE_LARGE
|
||||
origin_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 6)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 12500)
|
||||
attack_verb = list("attacked", "slashed", "seared", "cut")
|
||||
toolspeed = 0.75
|
||||
|
||||
//misc, formerly from code/defines/weapons.dm
|
||||
/obj/item/weapon/surgical/bonegel
|
||||
name = "bone gel"
|
||||
@@ -245,4 +267,4 @@
|
||||
|
||||
/obj/item/weapon/surgical/bone_clamp/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.75
|
||||
toolspeed = 0.75
|
||||
|
||||
Reference in New Issue
Block a user