mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-11 16:23:14 +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:
@@ -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