mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-26 14:47:50 +01:00
Protean Death Handler
This commit is contained in:
+6
-4
@@ -185,6 +185,8 @@ datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
|
||||
humanform.species.Stat(humanform)
|
||||
|
||||
/mob/living/simple_mob/protean_blob/updatehealth()
|
||||
if(humanform.nano_dead_check(src))
|
||||
return
|
||||
if(!humanform)
|
||||
return ..()
|
||||
|
||||
@@ -196,7 +198,7 @@ datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
|
||||
|
||||
//Alive, becoming dead
|
||||
if((stat < DEAD) && (health <= 0))
|
||||
death()
|
||||
humanform.death()
|
||||
|
||||
nutrition = humanform.nutrition
|
||||
|
||||
@@ -338,6 +340,7 @@ datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
|
||||
target.forceMove(vore_selected)
|
||||
to_chat(target,"<span class='warning'>\The [src] quickly engulfs you, [vore_selected.vore_verb]ing you into their [vore_selected.name]!</span>")
|
||||
|
||||
/* Don't need this block anymore since our Prots have hands
|
||||
/mob/living/simple_mob/protean_blob/attack_target(var/atom/A)
|
||||
if(refactory && istype(A,/obj/item/stack/material))
|
||||
var/obj/item/stack/material/S = A
|
||||
@@ -367,6 +370,7 @@ datum/riding/simple_mob/protean_blob/handle_vehicle_layer()
|
||||
I.forceMove(vore_selected)
|
||||
else
|
||||
return ..()
|
||||
*/
|
||||
|
||||
/mob/living/simple_mob/protean_blob/attackby(var/obj/item/O, var/mob/user)
|
||||
if(refactory && istype(O,/obj/item/stack/material))
|
||||
@@ -408,9 +412,7 @@ var/global/list/disallowed_protean_accessories = list(
|
||||
|
||||
// Helpers - Unsafe, WILL perform change.
|
||||
/mob/living/carbon/human/proc/nano_intoblob(force)
|
||||
if(loc == /obj/item/weapon/rig/protean)
|
||||
return
|
||||
if(!force && !isturf(loc))
|
||||
if(!force && !isturf(loc) && !loc == /obj/item/weapon/rig/protean)
|
||||
to_chat(src,"<span class='warning'>You can't change forms while inside something.</span>")
|
||||
return
|
||||
|
||||
|
||||
+11
-8
@@ -23,60 +23,63 @@
|
||||
/obj/item/organ/external/arm/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000 //Please
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/arm/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/leg/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/leg/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/hand/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/hand/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/foot/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
/obj/item/organ/external/foot/right/unbreakable/nano
|
||||
robotic = ORGAN_NANOFORM
|
||||
encased = FALSE
|
||||
max_damage = 100
|
||||
max_damage = 65
|
||||
min_broken_damage = 1000
|
||||
vital = FALSE
|
||||
model = "protean"
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/nano/disfigure()
|
||||
return //No way to repair disfigured prots
|
||||
|
||||
// // // Internal Organs
|
||||
/obj/item/organ/internal/nano
|
||||
robotic = ORGAN_ROBOT
|
||||
|
||||
+37
-8
@@ -12,6 +12,9 @@
|
||||
var/mob/living/caller = src
|
||||
if(temporary_form)
|
||||
caller = temporary_form
|
||||
if(nano_dead_check(caller))
|
||||
to_chat(caller, "<span class='warning'>You need to be repaired first before you can act!</span>")
|
||||
return
|
||||
if(stat)
|
||||
to_chat(caller,"<span class='warning'>You must be awake and standing to perform this action!</span>")
|
||||
return
|
||||
@@ -206,6 +209,9 @@
|
||||
var/mob/living/caller = src
|
||||
if(temporary_form)
|
||||
caller = temporary_form
|
||||
if(nano_dead_check(caller))
|
||||
to_chat(caller, "<span class='warning'>You need to be repaired first before you can act!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/nano/refactory/refactory = nano_get_refactory()
|
||||
//Missing the organ that does this
|
||||
@@ -245,17 +251,24 @@
|
||||
////
|
||||
// Blob Form
|
||||
////
|
||||
/mob/living/carbon/human/proc/nano_blobform()
|
||||
/mob/living/carbon/human/proc/nano_blobform(var/forced)
|
||||
set name = "Toggle Blobform"
|
||||
set desc = "Switch between amorphous and humanoid forms."
|
||||
set category = "Abilities"
|
||||
set hidden = 1
|
||||
|
||||
if(nano_dead_check(src))
|
||||
return
|
||||
if(forced)
|
||||
if(temporary_form)
|
||||
nano_outofblob(temporary_form, forced)
|
||||
else
|
||||
nano_intoblob(forced)
|
||||
return
|
||||
var/atom/movable/to_locate = temporary_form || src
|
||||
if(!isturf(to_locate.loc))
|
||||
if(!isturf(to_locate.loc) && !forced)
|
||||
to_chat(to_locate,"<span class='warning'>You need more space to perform this action!</span>")
|
||||
return
|
||||
|
||||
//Blob form
|
||||
if(temporary_form)
|
||||
if(temporary_form.stat)
|
||||
@@ -294,16 +307,19 @@
|
||||
////
|
||||
// Rig Transform
|
||||
////
|
||||
/mob/living/carbon/human/proc/nano_rig_transform()
|
||||
/mob/living/carbon/human/proc/nano_rig_transform(var/forced)
|
||||
set name = "Modify Form - Hardsuit"
|
||||
set desc = "Allows a protean to retract its mass into its hardsuit module at will."
|
||||
set category = "Abilities"
|
||||
set hidden = 1
|
||||
|
||||
if(!temporary_form) //If you're human, force you into blob form before rig'ing
|
||||
nano_blobform()
|
||||
spawn(2)
|
||||
if(nano_dead_check(src))
|
||||
to_chat(temporary_form, "<span class='warning'>You need to be repaired first before you can act!</span>")
|
||||
return
|
||||
|
||||
if(!temporary_form) //If you're human, force you into blob form before rig'ing
|
||||
nano_blobform(forced)
|
||||
spawn(2)
|
||||
|
||||
if(istype(src.species, /datum/species/protean))
|
||||
var/datum/species/protean/S = src.species
|
||||
@@ -323,7 +339,7 @@
|
||||
S.OurRig.Moved()
|
||||
P.has_hands = 1
|
||||
else //We're not in our own RIG
|
||||
if(P.stat || P.resting)
|
||||
if(P.stat || P.resting && !forced)
|
||||
to_chat(P,"<span class='warning'>You can only do this while not stunned.</span>")
|
||||
else
|
||||
if(P.l_hand)
|
||||
@@ -373,6 +389,8 @@
|
||||
var/mob/living/caller = src
|
||||
var/mob/living/carbon/human/target
|
||||
var/datum/species/protean/S = src.species
|
||||
if(nano_dead_check(src))
|
||||
return
|
||||
if(temporary_form)
|
||||
caller = temporary_form
|
||||
if(caller.loc == S.OurRig)
|
||||
@@ -427,7 +445,18 @@
|
||||
/mob/living/carbon/human/nano_get_refactory()
|
||||
return ..(locate(/obj/item/organ/internal/nano/refactory) in internal_organs)
|
||||
|
||||
//I hate this whole bit but I want proteans to be able to "die" and still be "alive" in their blob as a suit
|
||||
/mob/living/carbon/human/proc/nano_dead_check(var/mob/living/caller)
|
||||
if(istype(src.species, /datum/species/protean))
|
||||
var/datum/species/protean/S = src.species
|
||||
if(S.pseudodead)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/proc/nano_set_dead(var/num)
|
||||
if(istype(src.species, /datum/species/protean))
|
||||
var/datum/species/protean/S = src.species
|
||||
S.pseudodead = num
|
||||
|
||||
/// /// /// Ability objects for stat panel
|
||||
/obj/effect/protean_ability
|
||||
|
||||
+40
@@ -24,6 +24,7 @@
|
||||
offline_vision_restriction = 0
|
||||
open = 1
|
||||
cell_type = /obj/item/weapon/cell/protean
|
||||
var/dead = 0
|
||||
|
||||
/obj/item/weapon/rig/protean/relaymove(mob/user, var/direction)
|
||||
if(user.stat || user.stunned)
|
||||
@@ -340,6 +341,16 @@
|
||||
for(var/obj/item/rig_module/module in installed_modules)
|
||||
if(module.accepts_item(W,user)) //Item is handled in this proc
|
||||
return
|
||||
if(dead)
|
||||
if(istype(W, /obj/item/stack/material/plasteel))
|
||||
var/obj/item/stack/material/plasteel/PL = W
|
||||
if(PL.get_amount() < 5)
|
||||
to_chat(user, "<span class='warning'>You need five sheets of plasteel to reconstruct this Protean.</span>")
|
||||
return
|
||||
if(PL.use(5))
|
||||
to_chat(user, "<span class='notice'>You feed plasteel to the Protean, they will be able to reconstitute now.</span>")
|
||||
make_alive(myprotean)
|
||||
return
|
||||
if(rig_storage)
|
||||
var/obj/item/weapon/storage/backpack = rig_storage
|
||||
if(backpack.can_be_inserted(W, 1))
|
||||
@@ -349,6 +360,35 @@
|
||||
AssimilateBag(user,0,W)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/rig/protean/proc/make_alive(var/mob/living/simple_mob/protean_blob/P)
|
||||
var/mob/living/carbon/human/H
|
||||
var/datum/species/protean/S
|
||||
if(P.humanform)
|
||||
H = P.humanform
|
||||
H.setToxLoss(0)
|
||||
H.setOxyLoss(0)
|
||||
H.setCloneLoss(0)
|
||||
H.setBrainLoss(0)
|
||||
H.SetParalysis(0)
|
||||
H.SetStunned(0)
|
||||
H.SetWeakened(0)
|
||||
H.blinded = 0
|
||||
H.SetBlinded(0)
|
||||
H.eye_blurry = 0
|
||||
H.ear_deaf = 0
|
||||
H.ear_damage = 0
|
||||
H.heal_overall_damage(H.getBruteLoss(), H.getFireLoss(), 1)
|
||||
dead_mob_list.Remove(H)
|
||||
living_mob_list += H
|
||||
H.tod = null
|
||||
H.timeofdeath = 0
|
||||
H.set_stat(CONSCIOUS)
|
||||
if(istype(H.species, /datum/species/protean))
|
||||
S = H.species
|
||||
S.pseudodead = 0
|
||||
dead = 0
|
||||
to_chat(P, "<span class='notice'>You've been fed the necessary plasteel to reconstitute your form, you can act again!</span>")
|
||||
|
||||
/obj/item/weapon/rig/protean/take_hit(damage, source, is_emp=0)
|
||||
return //We don't do that here
|
||||
|
||||
|
||||
+26
-17
@@ -29,18 +29,19 @@
|
||||
male_scream_sound = null
|
||||
female_scream_sound = null
|
||||
|
||||
virus_immune = 1
|
||||
blood_volume = 0
|
||||
min_age = 18
|
||||
max_age = 200
|
||||
oxy_mod = 0
|
||||
radiation_mod = 0 //Can't be assed with fandangling rad protections while blob formed/suited
|
||||
virus_immune = 1
|
||||
blood_volume = 0
|
||||
min_age = 18
|
||||
max_age = 200
|
||||
oxy_mod = 0
|
||||
radiation_mod = 0 //Can't be assed with fandangling rad protections while blob formed/suited
|
||||
darksight = 10
|
||||
siemens_coefficient = 2
|
||||
emp_dmg_mod = 1.4
|
||||
|
||||
hazard_low_pressure = -1 //Space doesn't bother them
|
||||
hazard_high_pressure = INFINITY //consistency
|
||||
|
||||
//Cold/heat does affect them, but it's done in special ways below - //No it isn't?
|
||||
cold_level_1 = -INFINITY
|
||||
cold_level_2 = -INFINITY
|
||||
cold_level_3 = -INFINITY
|
||||
@@ -112,6 +113,8 @@
|
||||
|
||||
var/blob_appearance = "puddle2"
|
||||
|
||||
var/pseudodead = 0
|
||||
|
||||
/datum/species/protean/New()
|
||||
..()
|
||||
if(!LAZYLEN(abilities))
|
||||
@@ -174,14 +177,20 @@
|
||||
|
||||
/datum/species/protean/handle_death(var/mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return // Iono!
|
||||
|
||||
return //No body?
|
||||
var/mob/temp = H
|
||||
if(H.temporary_form)
|
||||
H.forceMove(H.temporary_form.drop_location())
|
||||
H.ckey = H.temporary_form.ckey
|
||||
QDEL_NULL(H.temporary_form)
|
||||
|
||||
to_chat(H, "<span class='warning'>You died as a Protean. Please sit out of the round for at least 5 or 10 minutes before respawning, to represent the time it would take to ship a new-you to the station, depending on how you died.</span>")
|
||||
temp = H.temporary_form
|
||||
playsound(temp, 'modular_chomp/sound/voice/borg_deathsound.ogg', 50, 1)
|
||||
temp.visible_message("<b>[temp.name]</b> shudders and retreats inwards, coalescing into a single core componant!")
|
||||
to_chat(temp, "<span class='warning'>You've died as a Protean! While dead, you will be locked to your core RIG control module until you can be repaired. You will need to be fed 5 sheets of plasteel in order to reshape yourself.</span>")
|
||||
if(H.temporary_form)
|
||||
if(!istype(H.temporary_form.loc, /obj/item/weapon/rig/protean))
|
||||
H.nano_rig_transform(1)
|
||||
else
|
||||
H.nano_rig_transform(1)
|
||||
OurRig.dead = 1
|
||||
pseudodead = 1
|
||||
|
||||
/datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if((H.getActualBruteLoss() + H.getActualFireLoss()) > H.maxHealth*0.5 && isturf(H.loc)) //So, only if we're not a blob (we're in nullspace) or in someone (or a locker, really, but whatever)
|
||||
@@ -317,8 +326,9 @@ CHOMP Removal end*/
|
||||
material_name = MAT_STEEL
|
||||
|
||||
/datum/modifier/protean/steel/tick()
|
||||
holder.adjustBruteLoss(-1,include_robo = TRUE) //Modified by species resistances
|
||||
holder.adjustFireLoss(-1,include_robo = TRUE) //Modified by species resistances
|
||||
holder.adjustBruteLoss(-1,include_robo = TRUE)
|
||||
holder.adjustFireLoss(-1,include_robo = TRUE)
|
||||
holder.adjustToxLoss(-1)
|
||||
var/mob/living/carbon/human/H = holder
|
||||
for(var/obj/item/organ/O as anything in H.internal_organs)
|
||||
// Fix internal damage
|
||||
@@ -328,7 +338,6 @@ CHOMP Removal end*/
|
||||
else if(O.status & ORGAN_DEAD)
|
||||
O.status &= ~ORGAN_DEAD //Unset dead if we repaired it entirely
|
||||
|
||||
|
||||
// PAN Card
|
||||
/obj/item/clothing/accessory/permit/nanotech
|
||||
name = "\improper P.A.N. card"
|
||||
|
||||
Reference in New Issue
Block a user