mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
Adds Upgraded Cybernetic Heart
This commit is contained in:
@@ -147,6 +147,7 @@
|
||||
if(reagents.has_reagent("teslium"))
|
||||
shock_damage *= 1.5 //If the mob has teslium in their body, shocks are 50% more damaging!
|
||||
take_overall_damage(0,shock_damage, TRUE, used_weapon = "Electrocution")
|
||||
shock_internal_organs(shock_damage)
|
||||
visible_message(
|
||||
"<span class='danger'>[src] was shocked by \the [source]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
|
||||
@@ -1116,3 +1117,7 @@ so that different stomachs can handle things in different ways VB*/
|
||||
if(I.flags_inv & HIDEMASK || forced)
|
||||
update_inv_wear_mask()
|
||||
update_inv_head()
|
||||
|
||||
/mob/living/carbon/proc/shock_internal_organs(intensity)
|
||||
for(var/obj/item/organ/O in internal_organs)
|
||||
O.shock_organ(intensity)
|
||||
@@ -522,6 +522,16 @@
|
||||
build_path = /obj/item/organ/internal/heart/cybernetic
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/cybernetic_heart_u
|
||||
name = "Upgraded Cybernetic Heart"
|
||||
desc = "An upgraded cybernetic heart."
|
||||
id = "cybernetic_heart_u"
|
||||
req_tech = list("biotech" = 5, "materials" = 5, "engineering" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 500)
|
||||
build_path = /obj/item/organ/internal/heart/cybernetic/upgraded
|
||||
category = list("Medical")
|
||||
|
||||
/datum/design/cybernetic_lungs
|
||||
name = "Cybernetic Lungs"
|
||||
desc = "A pair of cybernetic lungs."
|
||||
|
||||
@@ -33,9 +33,8 @@
|
||||
..()
|
||||
to_chat(user, "<span class='info'>[src] is assembled in the [parent_organ == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.</span>")
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(isscrewdriver(W))
|
||||
/obj/item/organ/internal/cyberimp/arm/attackby(obj/item/I, mob/user, params)
|
||||
if(isscrewdriver(I))
|
||||
if(parent_organ == "r_arm")
|
||||
parent_organ = "l_arm"
|
||||
else
|
||||
@@ -43,8 +42,8 @@
|
||||
slot = parent_organ + "_device"
|
||||
to_chat(user, "<span class='notice'>You modify [src] to be installed on the [parent_organ == "r_arm" ? "right" : "left"] arm.</span>")
|
||||
update_icon()
|
||||
else if(istype(W, /obj/item/card/emag))
|
||||
emag_act()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/remove(mob/living/carbon/M, special = 0)
|
||||
Retract()
|
||||
@@ -126,7 +125,7 @@
|
||||
|
||||
// You can emag the arm-mounted implant by activating it while holding emag in it's hand.
|
||||
var/arm_slot = (parent_organ == "r_arm" ? slot_r_hand : slot_l_hand)
|
||||
if(istype(owner.get_item_by_slot(arm_slot), /obj/item/card/emag) && emag_act())
|
||||
if(istype(owner.get_item_by_slot(arm_slot), /obj/item/card/emag) && emag_act(owner))
|
||||
return
|
||||
|
||||
if(!holder || (holder in src))
|
||||
@@ -205,12 +204,12 @@
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset/l
|
||||
parent_organ = "l_arm"
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset/emag_act()
|
||||
/obj/item/organ/internal/cyberimp/arm/toolset/emag_act(mob/user)
|
||||
if(!(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list))
|
||||
to_chat(usr, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
|
||||
to_chat(user, "<span class='notice'>You unlock [src]'s integrated knife!</span>")
|
||||
items_list += new /obj/item/kitchen/knife/combat/cyborg(src)
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/esword
|
||||
name = "arm-mounted energy blade"
|
||||
|
||||
@@ -147,4 +147,105 @@
|
||||
icon_base = "heart-c"
|
||||
dead_icon = "heart-c-off"
|
||||
origin_tech = "biotech=5"
|
||||
status = ORGAN_ROBOT
|
||||
status = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded
|
||||
name = "upgraded cybernetic heart"
|
||||
desc = "A more advanced version of a cybernetic heart. Grants the user additional stamina and heart stability, but the electronics are vulnerable to shock."
|
||||
icon_state = "heart-c-u-on"
|
||||
icon_base = "heart-c-u"
|
||||
dead_icon = "heart-c-u-off"
|
||||
origin_tech = "biotech=6"
|
||||
var/emagged = FALSE
|
||||
var/attempted_restart = FALSE
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/on_life()
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
if(!(status & ORGAN_DEAD) && !attempted_restart && !beating)
|
||||
to_chat(owner, "<span class='warning'>Your [name] detects a cardiac event and attempts to return to its normal rhythm!</span>")
|
||||
if(prob(20) && emagged)
|
||||
attempted_restart = TRUE
|
||||
Restart()
|
||||
addtimer(CALLBACK(src, .proc/message_to_owner, owner, "<span class='warning'>Your [name] returns to its normal rhythm!</span>"), 30)
|
||||
addtimer(CALLBACK(src, .proc/recharge), 200)
|
||||
else if(prob(10))
|
||||
attempted_restart = TRUE
|
||||
Restart()
|
||||
addtimer(CALLBACK(src, .proc/message_to_owner, owner, "<span class='warning'>Your [name] returns to its normal rhythm!</span>"), 30)
|
||||
addtimer(CALLBACK(src, .proc/recharge), 300)
|
||||
else
|
||||
attempted_restart = TRUE
|
||||
if(emagged)
|
||||
addtimer(CALLBACK(src, .proc/recharge), 200)
|
||||
else
|
||||
addtimer(CALLBACK(src, .proc/recharge), 300)
|
||||
addtimer(CALLBACK(src, .proc/message_to_owner, owner, "<span class='warning'>Your [name] fails to return to its normal rhythm!</span>"), 30)
|
||||
|
||||
if(!(status & ORGAN_DEAD))
|
||||
var/boost = emagged ? 2 : 1
|
||||
owner.AdjustDrowsy(-4 * boost)
|
||||
owner.AdjustParalysis(-1 * boost)
|
||||
owner.AdjustStunned(-1 * boost)
|
||||
owner.AdjustWeakened(-1 * boost)
|
||||
owner.SetSleeping(0)
|
||||
owner.adjustStaminaLoss(-1 * boost)
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/proc/message_to_owner(mob/M, message)
|
||||
to_chat(M, message)
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/proc/recharge()
|
||||
attempted_restart = FALSE
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/emag_act(mob/user)
|
||||
if(!emagged)
|
||||
to_chat(user, "<span class='warning'>You disable the safeties on [src]</span>")
|
||||
emagged = TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You re-enable the safeties on [src]</span>")
|
||||
emagged = FALSE
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/emp_act(severity)
|
||||
..()
|
||||
if(emp_proof)
|
||||
return
|
||||
necrotize()
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/cybernetic/upgraded/shock_organ(intensity)
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
intensity = min(intensity, 100)
|
||||
var/numHigh = round(intensity / 5)
|
||||
var/numMid = round(intensity / 10)
|
||||
var/numLow = round(intensity / 20)
|
||||
if(emagged && !(status & ORGAN_DEAD))
|
||||
if(prob(numHigh))
|
||||
to_chat(owner, "<span class='warning'>Your [name] spasms violently!</span>")
|
||||
owner.adjustBruteLoss(numHigh)
|
||||
if(prob(numHigh))
|
||||
to_chat(owner, "<span class='warning'>Your [name] shocks you painfully!</span>")
|
||||
owner.adjustFireLoss(numHigh)
|
||||
if(prob(numMid))
|
||||
to_chat(owner, "<span class='warning'>Your [name] lurches awkwardly!</span>")
|
||||
Stop()
|
||||
if(prob(numMid))
|
||||
to_chat(owner, "<span class='danger'>Your [name] stops beating!</span>")
|
||||
Stop()
|
||||
if(prob(numLow))
|
||||
to_chat(owner, "<span class='danger'>Your [name] shuts down!</span>")
|
||||
necrotize()
|
||||
else if(!emagged && !(status & ORGAN_DEAD))
|
||||
if(prob(numMid))
|
||||
to_chat(owner, "<span class='warning'>Your [name] spasms violently!</span>")
|
||||
owner.adjustBruteLoss(numMid)
|
||||
if(prob(numMid))
|
||||
to_chat(owner, "<span class='warning'>Your [name] shocks you painfully!</span>")
|
||||
owner.adjustFireLoss(numMid)
|
||||
if(prob(numLow))
|
||||
to_chat(owner, "<span class='warning'>Your [name] lurches awkwardly!</span>")
|
||||
Stop()
|
||||
@@ -63,6 +63,15 @@
|
||||
if(species_override)
|
||||
dna.species = new species_override
|
||||
|
||||
/obj/item/organ/attackby(obj/item/I, mob/user, params)
|
||||
if(is_robotic() && istype(I, /obj/item/stack/nanopaste))
|
||||
var/obj/item/stack/nanopaste/nano = I
|
||||
nano.use(1)
|
||||
rejuvenate()
|
||||
to_chat(user, "<span class='notice'>You repair the damage on [src].</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/proc/set_dna(var/datum/dna/new_dna)
|
||||
if(new_dna)
|
||||
dna = new_dna.Clone()
|
||||
@@ -138,7 +147,10 @@
|
||||
/obj/item/organ/examine(mob/user)
|
||||
..(user)
|
||||
if(status & ORGAN_DEAD)
|
||||
to_chat(user, "<span class='notice'>The decay has set in.</span>")
|
||||
if(!is_robotic())
|
||||
to_chat(user, "<span class='notice'>The decay has set in.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It looks in need of repairs.</span>")
|
||||
|
||||
/obj/item/organ/proc/handle_germ_effects()
|
||||
//** Handle the effects of infections
|
||||
@@ -171,6 +183,7 @@
|
||||
/obj/item/organ/proc/rejuvenate()
|
||||
damage = 0
|
||||
germ_level = 0
|
||||
surgeryize()
|
||||
if(is_robotic()) //Robotic organs stay robotic.
|
||||
status = ORGAN_ROBOT
|
||||
else
|
||||
@@ -269,6 +282,9 @@
|
||||
if(2)
|
||||
receive_damage(7, 1)
|
||||
|
||||
/obj/item/organ/proc/shock_organ(intensity)
|
||||
return
|
||||
|
||||
/obj/item/organ/proc/remove(var/mob/living/user,special = 0)
|
||||
if(!istype(owner))
|
||||
return
|
||||
|
||||
@@ -262,6 +262,7 @@ This function completely restores a damaged organ to perfect condition.
|
||||
*/
|
||||
/obj/item/organ/external/rejuvenate()
|
||||
damage_state = "00"
|
||||
surgeryize()
|
||||
if(is_robotic()) //Robotic organs stay robotic.
|
||||
status = ORGAN_ROBOT
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user