mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 11:07:12 +01:00
@@ -246,6 +246,13 @@
|
||||
key = "5"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
syllables = list("02011","01222","10100","10210","21012","02011","21200","1002","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
|
||||
|
||||
/datum/language/machine/get_random_name()
|
||||
if(prob(70))
|
||||
name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
else
|
||||
name = pick(ai_names)
|
||||
return name
|
||||
|
||||
/datum/language/kidan
|
||||
name = "Chittin"
|
||||
|
||||
@@ -169,9 +169,9 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if((H.species.flags & IS_SYNTHETIC))
|
||||
if(!H.check_has_mouth())
|
||||
return
|
||||
|
||||
|
||||
if(!sterile)
|
||||
//target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance
|
||||
target.visible_message("<span class='danger'>[src] falls limp after violating [target]'s face!</span>", \
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
canmove = 0
|
||||
icon = null
|
||||
invisibility = 101
|
||||
if(!(species.flags & IS_SYNTHETIC))
|
||||
if(!isSynthetic())
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
@@ -27,7 +27,7 @@
|
||||
// Override the current limb status and don't cause an explosion
|
||||
E.droplimb(DROPLIMB_EDGE)
|
||||
|
||||
if(!(species.flags & IS_SYNTHETIC))
|
||||
if(!isSynthetic())
|
||||
flick("gibbed-h", animation)
|
||||
hgibs(loc, viruses, dna)
|
||||
else
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
if(temp && !temp.is_stump())
|
||||
if(temp.status & ORGAN_ROBOT)
|
||||
if(!(temp.brute_dam + temp.burn_dam))
|
||||
if(!(species.flags & IS_SYNTHETIC))
|
||||
if(!isSynthetic())
|
||||
wound_flavor_text["[temp.limb_name]"] = "<span class='warning'>[t_He] has a robotic [temp.name]!</span>\n"
|
||||
continue
|
||||
else
|
||||
|
||||
@@ -1130,26 +1130,47 @@
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone)
|
||||
. = 1 // Default to returning true.
|
||||
if(user && !target_zone)
|
||||
target_zone = user.zone_sel.selecting
|
||||
// If targeting the head, see if the head item is thin enough.
|
||||
// If targeting anything else, see if the wear suit is thin enough.
|
||||
if(above_neck(target_zone))
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
. = 1
|
||||
|
||||
if(!target_zone)
|
||||
if(!user)
|
||||
target_zone = pick("chest","chest","chest","left leg","right leg","left arm", "right arm", "head")
|
||||
else
|
||||
target_zone = user.zone_sel.selecting
|
||||
|
||||
var/obj/item/organ/external/affecting = get_organ(target_zone)
|
||||
var/fail_msg
|
||||
if(!affecting)
|
||||
. = 0
|
||||
fail_msg = "They are missing that limb."
|
||||
else if (affecting.status & ORGAN_ROBOT)
|
||||
. = 0
|
||||
fail_msg = "That limb is robotic."
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
switch(target_zone)
|
||||
if("head")
|
||||
if(head && head.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
if(wear_suit && wear_suit.flags & THICKMATERIAL)
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
// Might need re-wording.
|
||||
user << "<span class='alert'>There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"].</span>"
|
||||
if(!fail_msg)
|
||||
fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into."
|
||||
user << "<span class='alert'>[fail_msg]</span>"
|
||||
|
||||
/mob/living/carbon/human/proc/check_has_mouth()
|
||||
// Todo, check stomach organ when implemented.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
if(!H || !H.can_intake_reagents)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/vomit(hairball=0)
|
||||
if(stat==2)return
|
||||
if(stat==DEAD)return
|
||||
|
||||
if(species.flags & IS_SYNTHETIC)
|
||||
return //Machines don't throw up.
|
||||
if(!check_has_mouth())
|
||||
return
|
||||
|
||||
if(!lastpuke)
|
||||
lastpuke = 1
|
||||
|
||||
@@ -63,13 +63,17 @@
|
||||
help_shake_act(M)
|
||||
add_logs(src, M, "shaked")
|
||||
return 1
|
||||
// if(M.health < -75) return 0
|
||||
|
||||
if(!H.check_has_mouth())
|
||||
H << "<span class='danger'>You don't have a mouth, you cannot perform CPR!</span>"
|
||||
return
|
||||
if(!check_has_mouth())
|
||||
H << "<span class='danger'>They don't have a mouth, you cannot perform CPR!</span>"
|
||||
return
|
||||
if((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH) && !M.wear_mask.mask_adjusted))
|
||||
M << "<span class='boldnotice'>Remove your mask!</span>"
|
||||
M << "<span class='warning'>Remove your mask!</span>"
|
||||
return 0
|
||||
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH) && !wear_mask.mask_adjusted))
|
||||
M << "<span class='boldnotice'>Remove his mask!</span>"
|
||||
M << "<span class='warning'>Remove his mask!</span>"
|
||||
return 0
|
||||
|
||||
var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human()
|
||||
|
||||
@@ -11,13 +11,8 @@
|
||||
total_burn += O.burn_dam
|
||||
health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute
|
||||
//TODO: fix husking
|
||||
if( (((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) && (!(species.flags & IS_SYNTHETIC)))//100 only being used as the magic human max health number, feel free to change it if you add a var for it -- Urist
|
||||
if( (((100 - total_burn) < config.health_threshold_dead) && stat == DEAD))//100 only being used as the magic human max health number, feel free to change it if you add a var for it -- Urist
|
||||
ChangeToHusk()
|
||||
if (species.flags & IS_SYNTHETIC)
|
||||
var/obj/item/organ/external/head/H = organs_by_name["head"]
|
||||
if(H)
|
||||
if((health >= (config.health_threshold_dead/100*75)) && stat == DEAD) //need to get them 25% away from death point before reviving synthetics
|
||||
update_revive()
|
||||
if (stat == CONSCIOUS && (src in dead_mob_list)) //Defib fix
|
||||
update_revive()
|
||||
return
|
||||
@@ -31,17 +26,45 @@
|
||||
tod = 0
|
||||
timeofdeath = 0
|
||||
|
||||
/mob/living/carbon/human/adjustBrainLoss(var/amount)
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
sponge.take_damage(amount)
|
||||
sponge.damage = min(max(sponge.damage, 0),(maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
else
|
||||
brainloss = 200
|
||||
else
|
||||
brainloss = 0
|
||||
|
||||
/mob/living/carbon/human/setBrainLoss(var/amount)
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
sponge.damage = min(max(amount, 0),(maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
else
|
||||
brainloss = 200
|
||||
else
|
||||
brainloss = 0
|
||||
|
||||
/mob/living/carbon/human/getBrainLoss()
|
||||
var/res = brainloss
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(!sponge)
|
||||
return
|
||||
if (sponge.is_bruised())
|
||||
res += 20
|
||||
if (sponge.is_broken())
|
||||
res += 50
|
||||
res = min(res,maxHealth*2)
|
||||
return res
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(species && species.has_organ["brain"])
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
brainloss = min(sponge.damage,maxHealth*2)
|
||||
else
|
||||
brainloss = 200
|
||||
else
|
||||
brainloss = 0
|
||||
return brainloss
|
||||
|
||||
//These procs fetch a cumulative total damage from all organs
|
||||
/mob/living/carbon/human/getBruteLoss()
|
||||
@@ -114,13 +137,12 @@
|
||||
/mob/living/carbon/human/Paralyse(amount)
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/carbon/human/adjustCloneLoss(var/amount)
|
||||
|
||||
if(species.flags & IS_SYNTHETIC)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
if(species.flags & (NO_SCAN))
|
||||
cloneloss = 0
|
||||
return
|
||||
|
||||
var/heal_prob = max(0, 80 - getCloneLoss())
|
||||
var/mut_prob = min(80, getCloneLoss()+10)
|
||||
@@ -151,6 +173,41 @@
|
||||
O.unmutate()
|
||||
src << "<span class = 'notice'>Your [O.name] is shaped normally again.</span>"
|
||||
hud_updateflag |= 1 << HEALTH_HUD
|
||||
|
||||
// Defined here solely to take species flags into account without having to recast at mob/living level.
|
||||
/mob/living/carbon/human/getOxyLoss()
|
||||
if(species.flags & NO_BREATHE)
|
||||
oxyloss = 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/adjustOxyLoss(var/amount)
|
||||
if(species.flags & NO_BREATHE)
|
||||
oxyloss = 0
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/setOxyLoss(var/amount)
|
||||
if(species.flags & NO_BREATHE)
|
||||
oxyloss = 0
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/getToxLoss()
|
||||
if(species.flags & NO_POISON)
|
||||
toxloss = 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/adjustToxLoss(var/amount)
|
||||
if(species.flags & NO_POISON)
|
||||
toxloss = 0
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/setToxLoss(var/amount)
|
||||
if(species.flags & NO_POISON)
|
||||
toxloss = 0
|
||||
else
|
||||
..()
|
||||
|
||||
////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -35,13 +35,13 @@ emp_act
|
||||
if(check_shields(P.damage, "the [P.name]", P))
|
||||
P.on_hit(src, 100, def_zone)
|
||||
return 2
|
||||
|
||||
|
||||
var/obj/item/organ/external/organ = get_organ(check_zone(def_zone))
|
||||
if(isnull(organ))
|
||||
return
|
||||
|
||||
//Shrapnel
|
||||
if (P.damage_type == BRUTE)
|
||||
var/obj/item/organ/external/organ = get_organ(check_zone(def_zone))
|
||||
if(!organ)
|
||||
return
|
||||
var/armor = getarmor_organ(organ, "bullet")
|
||||
if((P.embed && prob(20 + max(P.damage - armor, -10))))
|
||||
var/obj/item/weapon/shard/shrapnel/SP = new()
|
||||
@@ -50,9 +50,7 @@ emp_act
|
||||
(SP.loc) = organ
|
||||
organ.embed(SP)
|
||||
|
||||
var/mob/living/carbon/human/M = src
|
||||
var/obj/item/organ/external/affected = M.get_organ(def_zone)
|
||||
affected.add_autopsy_data(P.name, P.damage) // Add the bullet's name to the autopsy data
|
||||
organ.add_autopsy_data(P.name, P.damage) // Add the bullet's name to the autopsy data
|
||||
|
||||
return (..(P , def_zone))
|
||||
|
||||
@@ -204,11 +202,6 @@ emp_act
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
O.emp_act(severity)
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.status & ORGAN_DESTROYED) continue
|
||||
O.emp_act(severity)
|
||||
for(var/obj/item/organ/I in O.internal_organs)
|
||||
I.emp_act(severity)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/emag_act(user as mob, var/obj/item/organ/external/affecting)
|
||||
|
||||
@@ -72,11 +72,9 @@
|
||||
|
||||
for(var/limb_tag in list("l_leg","r_leg","l_foot","r_foot"))
|
||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||
if(!E)
|
||||
stance_damage += 2
|
||||
else if (E.status & ORGAN_DESTROYED)
|
||||
stance_damage += 2 // let it fail even if just foot&leg
|
||||
else if (E.is_malfunctioning() || (E.is_broken() && !(E.status & ORGAN_SPLINTED)) || !E.is_usable())
|
||||
if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)) || E.is_malfunctioning())
|
||||
stance_damage += 2 // let it fail even if just foot&leg. Also malfunctioning happens sporadically so it should impact more when it procs
|
||||
else if (E.is_broken() || !E.is_usable())
|
||||
stance_damage += 1
|
||||
|
||||
// Canes and crutches help you stand (if the latter is ever added)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/mob/living/carbon/human/proc/has_organ(name)
|
||||
var/obj/item/organ/external/O = organs_by_name[name]
|
||||
|
||||
return (O && !(O.status & ORGAN_DESTROYED) )
|
||||
return (O && !(O.status & ORGAN_DESTROYED) && !O.is_stump())
|
||||
|
||||
/mob/living/carbon/human/proc/has_organ_for_slot(slot)
|
||||
switch(slot)
|
||||
|
||||
@@ -245,10 +245,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
adjustCloneLoss(0.1)
|
||||
|
||||
/mob/living/carbon/human/proc/handle_mutations_and_radiation()
|
||||
|
||||
if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss.
|
||||
return
|
||||
|
||||
if(getFireLoss())
|
||||
if((RESIST_HEAT in mutations) || (prob(1)))
|
||||
heal_organ_damage(0,1)
|
||||
@@ -847,7 +843,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
|
||||
if(species && species.flags & NO_INTORGANS) return
|
||||
|
||||
if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems()
|
||||
handle_trace_chems()
|
||||
|
||||
updatehealth()
|
||||
|
||||
@@ -904,7 +900,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(!reagents.has_reagent("epinephrine"))
|
||||
adjustOxyLoss(1)*/
|
||||
|
||||
if(hallucination && !(species.flags & IS_SYNTHETIC))
|
||||
if(hallucination && !(species.flags & NO_DNA_RAD))
|
||||
spawn handle_hallucinations()
|
||||
|
||||
if(hallucination<=2)
|
||||
@@ -967,18 +963,35 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(!E.len)
|
||||
embedded_flag = 0
|
||||
|
||||
|
||||
//Eyes
|
||||
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
|
||||
blinded = 1
|
||||
else if(eye_blind) //blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
blinded = 1
|
||||
else if(tinttotal >= TINT_BLIND) //covering your eyes heals blurry eyes faster
|
||||
eye_blurry = max(eye_blurry-3, 0)
|
||||
// blinded = 1 //now handled under /handle_regular_hud_updates()
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
//Vision
|
||||
var/obj/item/organ/vision
|
||||
if(species.vision_organ)
|
||||
vision = internal_organs_by_name[species.vision_organ]
|
||||
|
||||
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
|
||||
eye_blind = 0
|
||||
blinded = 0
|
||||
eye_blurry = 0
|
||||
else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind.
|
||||
eye_blind = 1
|
||||
blinded = 1
|
||||
eye_blurry = 1
|
||||
else
|
||||
//blindness
|
||||
if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own
|
||||
blinded = 1
|
||||
else if(eye_blind) // Blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
blinded = 1
|
||||
else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
|
||||
eye_blurry = max(eye_blurry-3, 0)
|
||||
blinded = 1
|
||||
|
||||
//blurry sight
|
||||
if(vision.is_bruised()) // Vision organs impaired? Permablurry.
|
||||
eye_blurry = 1
|
||||
if(eye_blurry) // Blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
|
||||
//Ears
|
||||
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
@@ -1569,7 +1582,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
/mob/living/carbon/human/proc/handle_decay()
|
||||
var/decaytime = world.time - timeofdeath
|
||||
|
||||
if(species.flags & IS_SYNTHETIC)
|
||||
if(isSynthetic())
|
||||
return
|
||||
|
||||
if(reagents.has_reagent("formaldehyde")) //embalming fluid stops decay
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/species/wryn
|
||||
name = "Wryn"
|
||||
name_plural = "Wryn"
|
||||
icobase = 'icons/mob/human_races/r_wryn.dmi'
|
||||
deform = 'icons/mob/human_races/r_wryn.dmi'
|
||||
language = "Wryn Hivemind"
|
||||
@@ -76,6 +77,7 @@
|
||||
|
||||
/datum/species/nucleation
|
||||
name = "Nucleation"
|
||||
name_plural = "Nucleations"
|
||||
icobase = 'icons/mob/human_races/r_nucleation.dmi'
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
blurb = "A sub-race of unforunates who have been exposed to too much supermatter radiation. As a result, \
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/species/golem
|
||||
name = "Golem"
|
||||
name_plural = "Golems"
|
||||
|
||||
icobase = 'icons/mob/human_races/r_golem.dmi'
|
||||
deform = 'icons/mob/human_races/r_golem.dmi'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/species/monkey
|
||||
name = "Monkey"
|
||||
name_plural = "Monkeys"
|
||||
blurb = "Ook."
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi'
|
||||
@@ -52,7 +53,8 @@ datum/species/monkey/get_random_name(var/gender)
|
||||
|
||||
/datum/species/monkey/tajaran
|
||||
name = "Farwa"
|
||||
|
||||
name_plural = "Farwa"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
|
||||
@@ -66,6 +68,7 @@ datum/species/monkey/get_random_name(var/gender)
|
||||
|
||||
/datum/species/monkey/vulpkanin
|
||||
name = "Wolpin"
|
||||
name_plural = "Wolpin"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_wolpin.dmi'
|
||||
@@ -80,6 +83,7 @@ datum/species/monkey/get_random_name(var/gender)
|
||||
|
||||
/datum/species/monkey/skrell
|
||||
name = "Neara"
|
||||
name_plural = "Neara"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
|
||||
@@ -96,6 +100,7 @@ datum/species/monkey/get_random_name(var/gender)
|
||||
|
||||
/datum/species/monkey/unathi
|
||||
name = "Stok"
|
||||
name_plural = "Stok"
|
||||
|
||||
icobase = 'icons/mob/human_races/monkeys/r_stok.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/species/plasmaman // /vg/
|
||||
name = "Plasmaman"
|
||||
name_plural = "Plasmamen"
|
||||
icobase = 'icons/mob/human_races/r_plasmaman_sb.dmi'
|
||||
deform = 'icons/mob/human_races/r_plasmaman_pb.dmi' // TODO: Need deform.
|
||||
//language = "Clatter"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/species/shadow
|
||||
name = "Shadow"
|
||||
|
||||
name_plural = "Shadows"
|
||||
|
||||
icobase = 'icons/mob/human_races/r_shadow.dmi'
|
||||
deform = 'icons/mob/human_races/r_shadow.dmi'
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
/datum/species
|
||||
var/name // Species name.
|
||||
var/name_plural // Pluralized name (since "[name]s" is not always valid)
|
||||
var/path // Species path
|
||||
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
||||
var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
|
||||
@@ -37,7 +38,7 @@
|
||||
var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature
|
||||
|
||||
var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second
|
||||
var/passive_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second
|
||||
var/reagent_tag //Used for metabolizing reagents.
|
||||
|
||||
var/darksight = 2
|
||||
@@ -78,6 +79,7 @@
|
||||
var/icon/icon_template
|
||||
var/is_small
|
||||
var/show_ssd = 1
|
||||
var/virus_immune
|
||||
|
||||
// Language/culture vars.
|
||||
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
|
||||
@@ -95,8 +97,8 @@
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"appendix" = /obj/item/organ/appendix,
|
||||
"eyes" = /obj/item/organ/eyes
|
||||
)
|
||||
|
||||
)
|
||||
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
|
||||
var/list/has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin),
|
||||
@@ -112,6 +114,10 @@
|
||||
)
|
||||
|
||||
/datum/species/New()
|
||||
//If the species has eyes, they are the default vision organ
|
||||
if(!vision_organ && has_organ["eyes"])
|
||||
vision_organ = "eyes"
|
||||
|
||||
unarmed = new unarmed_type()
|
||||
|
||||
/datum/species/proc/get_random_name(var/gender)
|
||||
@@ -150,14 +156,6 @@
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
O.owner = H
|
||||
|
||||
if(flags & IS_SYNTHETIC)
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
|
||||
E.robotize()
|
||||
for(var/obj/item/organ/I in H.internal_organs)
|
||||
I.robotize()
|
||||
|
||||
|
||||
/datum/species/proc/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H)
|
||||
var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
|
||||
//var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
name_plural = "Humans"
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_human.dmi'
|
||||
primitive_form = "Monkey"
|
||||
@@ -19,6 +20,7 @@
|
||||
|
||||
/datum/species/unathi
|
||||
name = "Unathi"
|
||||
name_plural = "Unathi"
|
||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_lizard.dmi'
|
||||
path = /mob/living/carbon/human/unathi
|
||||
@@ -59,6 +61,7 @@
|
||||
|
||||
/datum/species/tajaran
|
||||
name = "Tajaran"
|
||||
name_plural = "Tajaran"
|
||||
icobase = 'icons/mob/human_races/r_tajaran.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
|
||||
path = /mob/living/carbon/human/tajaran
|
||||
@@ -99,6 +102,7 @@
|
||||
|
||||
/datum/species/vulpkanin
|
||||
name = "Vulpkanin"
|
||||
name_plural = "Vulpakanin"
|
||||
icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
deform = 'icons/mob/human_races/r_vulpkanin.dmi'
|
||||
path = /mob/living/carbon/human/vulpkanin
|
||||
@@ -129,6 +133,7 @@
|
||||
|
||||
/datum/species/skrell
|
||||
name = "Skrell"
|
||||
name_plural = "Skrell"
|
||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||
path = /mob/living/carbon/human/skrell
|
||||
@@ -153,6 +158,7 @@
|
||||
|
||||
/datum/species/vox
|
||||
name = "Vox"
|
||||
name_plural = "Vox"
|
||||
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_vox.dmi'
|
||||
path = /mob/living/carbon/human/vox
|
||||
@@ -213,6 +219,7 @@
|
||||
|
||||
/datum/species/vox/armalis
|
||||
name = "Vox Armalis"
|
||||
name_plural = "Vox Armalis"
|
||||
icobase = 'icons/mob/human_races/r_armalis.dmi'
|
||||
deform = 'icons/mob/human_races/r_armalis.dmi'
|
||||
path = /mob/living/carbon/human/voxarmalis
|
||||
@@ -260,6 +267,7 @@
|
||||
|
||||
/datum/species/kidan
|
||||
name = "Kidan"
|
||||
name_plural = "Kidan"
|
||||
icobase = 'icons/mob/human_races/r_kidan.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_kidan.dmi'
|
||||
path = /mob/living/carbon/human/kidan
|
||||
@@ -278,6 +286,7 @@
|
||||
|
||||
/datum/species/slime
|
||||
name = "Slime People"
|
||||
name_plural = "Slime People"
|
||||
default_language = "Galactic Common"
|
||||
language = "Bubblish"
|
||||
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||
@@ -299,6 +308,7 @@
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
name_plural = "Greys"
|
||||
icobase = 'icons/mob/human_races/r_grey.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_grey.dmi'
|
||||
default_language = "Galactic Common"
|
||||
@@ -332,6 +342,7 @@
|
||||
|
||||
/datum/species/diona
|
||||
name = "Diona"
|
||||
name_plural = "Dionaea"
|
||||
icobase = 'icons/mob/human_races/r_diona.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_plant.dmi'
|
||||
path = /mob/living/carbon/human/diona
|
||||
@@ -421,17 +432,25 @@
|
||||
else
|
||||
del(D)
|
||||
|
||||
H.visible_message("\red[H] splits apart with a wet slithering noise!") */
|
||||
H.visible_message("<span class='danger">[H] splits apart with a wet slithering noise!"</span>) */
|
||||
|
||||
/datum/species/machine
|
||||
name = "Machine"
|
||||
name_plural = "Machines"
|
||||
|
||||
blurb = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
|
||||
robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
|
||||
to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \
|
||||
generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \
|
||||
inhuman in outlook and perspective."
|
||||
|
||||
icobase = 'icons/mob/human_races/r_machine.dmi'
|
||||
deform = 'icons/mob/human_races/r_machine.dmi'
|
||||
path = /mob/living/carbon/human/machine
|
||||
default_language = "Galactic Common"
|
||||
language = "Trinary"
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
|
||||
eyes = "blank_eyes"
|
||||
brute_mod = 1.5
|
||||
burn_mod = 1.5
|
||||
@@ -445,24 +464,38 @@
|
||||
heat_level_3 = 600
|
||||
heat_level_3_breathe = 600
|
||||
|
||||
synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
passive_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
|
||||
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA_RAD
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#AAAAAA"
|
||||
virus_immune = 1
|
||||
reagent_tag = PROCESS_SYN
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/mmi_holder/posibrain,
|
||||
"cell" = /obj/item/organ/cell,
|
||||
"optics" = /obj/item/organ/optical_sensor
|
||||
)
|
||||
|
||||
vision_organ = "optics"
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/ipc),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/ipc),
|
||||
"head" = list("path" = /obj/item/organ/external/head/ipc),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
|
||||
)
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.emote("deathgasp")
|
||||
for(var/organ_name in H.organs_by_name)
|
||||
if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
|
||||
continue
|
||||
var/obj/item/organ/external/O = H.organs_by_name[organ_name]
|
||||
if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them!
|
||||
O.droplimb(1)
|
||||
var/obj/item/organ/external/O = H.organs_by_name["head"]
|
||||
if(O) O.droplimb(1)
|
||||
H.h_style = ""
|
||||
spawn(100)
|
||||
if(H) H.update_hair()
|
||||
|
||||
|
||||
@@ -369,7 +369,7 @@ var/global/list/damage_icon_parts = list()
|
||||
else
|
||||
//warning("Invalid f_style for [species.name]: [f_style]")
|
||||
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(species.flags & IS_SYNTHETIC)))
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic())))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style && hair_style.species_allowed)
|
||||
if(src.species.name in hair_style.species_allowed)
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
|
||||
if((species.flags & IS_SYNTHETIC) && (effecttype == IRRADIATE))
|
||||
if((species.flags & NO_DNA_RAD) && (effecttype == IRRADIATE))
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -184,74 +184,74 @@
|
||||
|
||||
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
|
||||
user << text("\red You try to analyze the floor's vitals!")
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
|
||||
user.show_message(text("\blue Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1)
|
||||
user.show_message(text("\blue \t Damage Specifics: [0]-[0]-[0]-[0]"), 1)
|
||||
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
|
||||
user.show_message("\blue Body Temperature: ???", 1)
|
||||
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>", "<span class='warning'>You try to analyze the floor's vitals!</span>")
|
||||
user << "<span class='notice'>Analyzing Results for The floor:\n\t Overall Status: Healthy</span>"
|
||||
user << "<span class='notice'>\t Damage Specifics: [0]-[0]-[0]-[0]</span>"
|
||||
user << "<span class='notice'>Key: Suffocation/Toxin/Burns/Brute</span>"
|
||||
user << "<span class='notice'>Body Temperature: ???</span>"
|
||||
return
|
||||
if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
return
|
||||
if(!istype(M, /mob/living/silicon/robot) && !(ishuman(M) && (M:species.flags & IS_SYNTHETIC)))
|
||||
user << "\red You can't analyze non-robotic things!"
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'> [user] has analyzed [M]'s components.","<span class='notice'> You have analyzed [M]'s components.")
|
||||
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
|
||||
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
|
||||
var/TX = M.getToxLoss() > 50 ? "<b>[M.getToxLoss()]</b>" : M.getToxLoss()
|
||||
|
||||
user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]")
|
||||
if (ishuman(M) && (M:species.flags & IS_SYNTHETIC))
|
||||
user.show_message("\t Key: <font color='#FFA500'>Electronics</font>/<font color='red'>Brute</font>/<font color='green'>Residue</font>", 1)
|
||||
user.show_message("\t Damage Specifics: <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font> - <font color='green'>[TX]</font>")
|
||||
|
||||
var/scan_type
|
||||
if(istype(M, /mob/living/silicon/robot))
|
||||
scan_type = "robot"
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
scan_type = "prosthetics"
|
||||
else
|
||||
user.show_message("\t Key: <font color='#FFA500'>Electronics</font>/<font color='red'>Brute</font>", 1)
|
||||
user.show_message("\t Damage Specifics: <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font>")
|
||||
if(M.tod && M.stat == DEAD)
|
||||
user.show_message("\blue Time of Disable: [M.tod]")
|
||||
user << "<span class='warning'>You can't analyze non-robotic things!</span>"
|
||||
return
|
||||
|
||||
if (istype(M, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/H = M
|
||||
var/list/damaged = H.get_damaged_components(1,1,1)
|
||||
user.show_message("\blue Localized Damage:",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/datum/robot_component/org in damaged)
|
||||
user.show_message(text("\blue \t []: [][] - [] - [] - []", \
|
||||
capitalize(org.name), \
|
||||
(org.installed == -1) ? "<font color='red'><b>DESTROYED</b></font> " :"",\
|
||||
(org.electronics_damage > 0) ? "<font color='#FFA500'>[org.electronics_damage]</font>" :0, \
|
||||
(org.brute_damage > 0) ? "<font color='red'>[org.brute_damage]</font>" :0, \
|
||||
(org.toggled) ? "Toggled ON" : "<font color='red'>Toggled OFF</font>",\
|
||||
(org.powered) ? "Power ON" : "<font color='red'>Power OFF</font>"),1)
|
||||
else
|
||||
user.show_message("\blue \t Components are OK.",1)
|
||||
if(H.emagged && prob(5))
|
||||
user.show_message("\red \t ERROR: INTERNAL SYSTEMS COMPROMISED",1)
|
||||
user.visible_message("<span class='notice'>[user] has analyzed [M]'s components.</span>","<span class='notice'>You have analyzed [M]'s components.</span>")
|
||||
switch(scan_type)
|
||||
if("robot")
|
||||
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
|
||||
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
|
||||
user << "<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]</span>"
|
||||
user << "\t Key: <font color='#FFA500'>Electronics</font>/<font color='red'>Brute</font>"
|
||||
user << "\t Damage Specifics: <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font>"
|
||||
if(M.tod && M.stat == DEAD)
|
||||
user << "<span class='notice'>Time of Disable: [M.tod]</span>"
|
||||
var/mob/living/silicon/robot/H = M
|
||||
var/list/damaged = H.get_damaged_components(1,1,1)
|
||||
user << "<span class='notice'>Localized Damage:</span>"
|
||||
if(length(damaged)>0)
|
||||
for(var/datum/robot_component/org in damaged)
|
||||
user.show_message(text("<span class='notice'>\t []: [][] - [] - [] - []</span>", \
|
||||
capitalize(org.name), \
|
||||
(org.installed == -1) ? "<font color='red'><b>DESTROYED</b></font> " :"",\
|
||||
(org.electronics_damage > 0) ? "<font color='#FFA500'>[org.electronics_damage]</font>" :0, \
|
||||
(org.brute_damage > 0) ? "<font color='red'>[org.brute_damage]</font>" :0, \
|
||||
(org.toggled) ? "Toggled ON" : "<font color='red'>Toggled OFF</font>",\
|
||||
(org.powered) ? "Power ON" : "<font color='red'>Power OFF</font>"),1)
|
||||
else
|
||||
user << "<span class='notice'>\t Components are OK.</span>"
|
||||
if(H.emagged && prob(5))
|
||||
user << "<span class='warning'>\t ERROR: INTERNAL SYSTEMS COMPROMISED</span>"
|
||||
|
||||
if (ishuman(M) && (M:species.flags & IS_SYNTHETIC))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
user.show_message("\blue Localized Damage, Brute/Electronics:",1)
|
||||
if(length(damaged)>0)
|
||||
for(var/obj/item/organ/external/org in damaged)
|
||||
user.show_message(text("\blue \t []: [] - []", \
|
||||
capitalize(org.name), \
|
||||
(org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \
|
||||
(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" :0),1)
|
||||
else
|
||||
user.show_message("\blue \t Components are OK.",1)
|
||||
if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
|
||||
user.show_message("\red Subject posibrain is unresponsive. System shutdown imminent.")
|
||||
else if (M.getBrainLoss() >= 60)
|
||||
user.show_message("\red Severe posibrain damage detected. Heavy corrosion present.")
|
||||
else if (M.getBrainLoss() >= 10)
|
||||
user.show_message("\red Significant posibrain damage detected. Moderate corrosion present.")
|
||||
|
||||
user.show_message("\blue Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
|
||||
if("prosthetics")
|
||||
var/mob/living/carbon/human/H = M
|
||||
user << "<span class='notice'>Analyzing Results for \the [H]:</span>"
|
||||
user << "Key: <font color='#FFA500'>Electronics</font>/<font color='red'>Brute</font>"
|
||||
|
||||
user << "<span class='notice'>External prosthetics:</span>"
|
||||
var/organ_found
|
||||
if(H.internal_organs.len)
|
||||
for(var/obj/item/organ/external/E in H.organs)
|
||||
if(!(E.status & ORGAN_ROBOT))
|
||||
continue
|
||||
organ_found = 1
|
||||
user << "[E.name]: <font color='red'>[round(E.brute_dam)]</font> <font color='#FFA500'>[round(E.burn_dam)]</font>"
|
||||
if(!organ_found)
|
||||
user << "<span class='warning'>No prosthetics located.</span>"
|
||||
user << "<hr>"
|
||||
user << "<span class='notice'>Internal prosthetics:</span>"
|
||||
organ_found = null
|
||||
if(H.internal_organs.len)
|
||||
for(var/obj/item/organ/O in H.internal_organs)
|
||||
if(!(O.status & ORGAN_ROBOT))
|
||||
continue
|
||||
organ_found = 1
|
||||
user << "[capitalize(O.name)]: <font color='red'>[O.damage]</font>"
|
||||
if(!organ_found)
|
||||
user << "<span class='warning'>No prosthetics located.</span>"
|
||||
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -542,13 +542,6 @@ var/list/robot_verbs_default = list(
|
||||
return
|
||||
now_pushing = 0
|
||||
..()
|
||||
if (istype(AM, /obj/machinery/recharge_station))
|
||||
var/obj/machinery/recharge_station/F = AM
|
||||
if(F.panel_open)
|
||||
usr << "\blue <b>Close the maintenance panel first.</b>"
|
||||
return
|
||||
else
|
||||
F.move_inside()
|
||||
if (!istype(AM, /atom/movable))
|
||||
return
|
||||
if (!now_pushing)
|
||||
@@ -587,34 +580,35 @@ var/list/robot_verbs_default = list(
|
||||
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
if(W == module_active) return
|
||||
if (istype(W, /obj/item/weapon/weldingtool) && user.a_intent == "help")
|
||||
if(W == module_active)
|
||||
return
|
||||
if (!getBruteLoss())
|
||||
user << "Nothing to fix here!"
|
||||
user << "<span class='notice'>Nothing to fix!</span>"
|
||||
return
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (WT.remove_fuel(0))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
adjustBruteLoss(-30)
|
||||
updatehealth()
|
||||
add_fingerprint(user)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red [user] has fixed some of the dents on [src]!"), 1)
|
||||
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [src] with \the [WT].</span>")
|
||||
else
|
||||
user << "Need more welding fuel!"
|
||||
user << "<span class='warning'>Need more welding fuel!</span>"
|
||||
return
|
||||
|
||||
|
||||
else if(istype(W, /obj/item/stack/cable_coil) && (wiresexposed || istype(src,/mob/living/silicon/robot/drone)))
|
||||
else if(istype(W, /obj/item/stack/cable_coil) && user.a_intent == "help" && (wiresexposed || istype(src,/mob/living/silicon/robot/drone)))
|
||||
if (!getFireLoss())
|
||||
user << "Nothing to fix here!"
|
||||
user << "<span class='notice'>Nothing to fix!</span>"
|
||||
return
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
adjustFireLoss(-30)
|
||||
updatehealth()
|
||||
add_fingerprint(user)
|
||||
coil.use(1)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red [user] has fixed some of the burnt wires on [src]!"), 1)
|
||||
user.visible_message("<span class='alert'>\The [user] fixes some of the burnt wires on \the [src] with \the [coil].</span>")
|
||||
|
||||
else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover
|
||||
if(opened)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
if(prob(5))
|
||||
host.adjustBrainLoss(rand(1,2))
|
||||
|
||||
if(prob(host.brainloss/20))
|
||||
if(prob(host.getBrainLoss()/20))
|
||||
host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]")
|
||||
|
||||
/mob/living/simple_animal/borer/New(var/by_gamemode=0)
|
||||
@@ -148,7 +148,7 @@
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/carbon/C in view(3,src))
|
||||
if(C.stat != 2)
|
||||
if(C.stat != DEAD)
|
||||
choices += C
|
||||
|
||||
if(world.time - used_dominate < 300)
|
||||
@@ -188,7 +188,7 @@
|
||||
|
||||
src << "You begin delicately adjusting your connection to the host brain..."
|
||||
|
||||
spawn(300+(host.brainloss*5))
|
||||
spawn(300+(host.getBrainLoss()*5))
|
||||
|
||||
if(!host || !src || controlling)
|
||||
return
|
||||
@@ -387,11 +387,14 @@ mob/living/simple_animal/borer/proc/detatch()
|
||||
return
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/carbon/C in view(1,src))
|
||||
if(C.stat != 2 && src.Adjacent(C))
|
||||
choices += C
|
||||
for(var/mob/living/carbon/human/H in view(1,src))
|
||||
var/obj/item/organ/external/head/head = H.get_organ("head")
|
||||
if(head.status & ORGAN_ROBOT)
|
||||
continue
|
||||
if(H.stat != DEAD && src.Adjacent(H) && !H.has_brain_worms())
|
||||
choices += H
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices
|
||||
var/mob/living/carbon/human/M = input(src,"Who do you wish to infest?") in null|choices
|
||||
|
||||
if(!M || !src) return
|
||||
|
||||
@@ -400,13 +403,6 @@ mob/living/simple_animal/borer/proc/detatch()
|
||||
if(M.has_brain_worms())
|
||||
src << "You cannot infest someone who is already infested!"
|
||||
return
|
||||
/*
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.check_head_coverage())
|
||||
src << "You cannot get through that host's protective gear."
|
||||
return
|
||||
*/
|
||||
|
||||
src << "You slither up [M] and begin probing at their ear canal..."
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
icon_dead = "Syndicat_dead"
|
||||
icon_resting = "Syndicat_rest"
|
||||
gender = FEMALE
|
||||
flags = IS_SYNTHETIC|NO_BREATHE
|
||||
flags = NO_BREATHE
|
||||
faction = list("syndicate")
|
||||
var/turns_since_scan = 0
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
@@ -31,5 +31,5 @@
|
||||
icon_living = "Syndifox"
|
||||
icon_dead = "Syndifox_dead"
|
||||
icon_resting = "Syndifox_rest"
|
||||
flags = IS_SYNTHETIC|NO_BREATHE
|
||||
flags = NO_BREATHE
|
||||
faction = list("syndicate")
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
if(Environment)
|
||||
|
||||
if( abs(Environment.temperature - bodytemperature) > 40 && !(flags & IS_SYNTHETIC))
|
||||
if( abs(Environment.temperature - bodytemperature) > 40 && !(flags & NO_BREATHE))
|
||||
bodytemperature += ((Environment.temperature - bodytemperature) / 5)
|
||||
|
||||
if(min_oxy)
|
||||
@@ -213,7 +213,7 @@
|
||||
if(max_co2)
|
||||
if(Environment.carbon_dioxide > max_co2)
|
||||
atmos_suitable = 0
|
||||
if(flags & NO_BREATHE || flags & IS_SYNTHETIC)
|
||||
if(flags & NO_BREATHE)
|
||||
atmos_suitable = 1
|
||||
|
||||
//Atmos effect
|
||||
|
||||
@@ -96,6 +96,16 @@ proc/isembryo(A)
|
||||
if(istype(A, /mob/living/silicon/ai))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/proc/isSynthetic()
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/isSynthetic()
|
||||
// If they are 100% robotic, they count as synthetic.
|
||||
for(var/obj/item/organ/external/E in organs)
|
||||
if(!(E.status & ORGAN_ROBOT))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/proc/isAIEye(A)
|
||||
if(istype(A, /mob/aiEye))
|
||||
|
||||
Reference in New Issue
Block a user