mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-07-20 19:42:34 +01:00
Tweaks to previous commits.
More tweaks to IPC fixes. Merge resolution/compile fixes. Further work on properly integrating, updating and fixing prosthetic options. Repathed internal organs to organ/internal. More work on full synthetics, changelings, overheating. Working on getting organs to qdel properly and spawn properly when robotized. Finalized some overheating values, added remaining prosthetic icons. Finalizing the testing version of the full prosthetic bodies branch. Added suit cyclers to the autolathe and map. Fixing runtime errors. Fixing errors. Changelog. Replacing limb and organ strings with constants. Prevented brainless species from becoming full cyborgs. Fixed issues with brain/MMIs renaming themselves inappropriately. Various fixes and oversights.
This commit is contained in:
@@ -81,7 +81,7 @@ obj/machinery/atmospherics/pipe/simple/heat_exchanging
|
||||
heat_limit = H.species.heat_level_3
|
||||
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest", used_weapon = "Excessive Heat")
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, BP_TORSO, used_weapon = "Excessive Heat")
|
||||
|
||||
//fancy radiation glowing
|
||||
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //start glowing at 500K
|
||||
|
||||
+6
-6
@@ -227,14 +227,14 @@ mob/living/carbon/human/airflow_hit(atom/A)
|
||||
bloody_body(src)
|
||||
var/b_loss = airflow_speed * vsc.airflow_damage
|
||||
|
||||
var/blocked = run_armor_check("head","melee")
|
||||
apply_damage(b_loss/3, BRUTE, "head", blocked, 0, "Airflow")
|
||||
var/blocked = run_armor_check(BP_HEAD,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_HEAD, blocked, 0, "Airflow")
|
||||
|
||||
blocked = run_armor_check("chest","melee")
|
||||
apply_damage(b_loss/3, BRUTE, "chest", blocked, 0, "Airflow")
|
||||
blocked = run_armor_check(BP_TORSO,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_TORSO, blocked, 0, "Airflow")
|
||||
|
||||
blocked = run_armor_check("groin","melee")
|
||||
apply_damage(b_loss/3, BRUTE, "groin", blocked, 0, "Airflow")
|
||||
blocked = run_armor_check(BP_GROIN,"melee")
|
||||
apply_damage(b_loss/3, BRUTE, BP_GROIN, blocked, 0, "Airflow")
|
||||
|
||||
if(airflow_speed > 10)
|
||||
Paralyse(round(airflow_speed * vsc.airflow_stun))
|
||||
|
||||
+22
-22
@@ -65,12 +65,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
/zone/proc/remove_liquidfuel(var/used_liquid_fuel, var/remove_fire=0)
|
||||
if(!fuel_objs.len)
|
||||
return
|
||||
|
||||
//As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel,
|
||||
|
||||
//As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel,
|
||||
//some have less, but whatever. It will mean that sometimes we will remove a tiny bit less fuel then we intended to.
|
||||
|
||||
|
||||
var/fuel_to_remove = used_liquid_fuel/(fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units
|
||||
|
||||
|
||||
for(var/O in fuel_objs)
|
||||
var/obj/effect/decal/cleanable/liquid_fuel/fuel = O
|
||||
if(!istype(fuel))
|
||||
@@ -188,7 +188,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
return
|
||||
|
||||
set_dir(pick(cardinal))
|
||||
|
||||
|
||||
var/datum/gas_mixture/air_contents = loc.return_air()
|
||||
color = fire_color(air_contents.temperature)
|
||||
set_light(3, 1, color)
|
||||
@@ -209,7 +209,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
var/turf/T = loc
|
||||
if (istype(T))
|
||||
set_light(0)
|
||||
|
||||
|
||||
T.fire = null
|
||||
loc = null
|
||||
air_master.active_hotspots.Remove(src)
|
||||
@@ -224,12 +224,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
/datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0)
|
||||
. = 0
|
||||
if((temperature > PHORON_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null)))
|
||||
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("***************** FIREDBG *****************")
|
||||
log_debug("Burning [zone? zone.name : "zoneless gas_mixture"]!")
|
||||
#endif
|
||||
|
||||
|
||||
var/gas_fuel = 0
|
||||
var/liquid_fuel = 0
|
||||
var/total_fuel = 0
|
||||
@@ -278,7 +278,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress
|
||||
var/used_fuel = min(total_reaction_progress, reaction_limit)
|
||||
var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT)
|
||||
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]")
|
||||
log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]")
|
||||
@@ -312,12 +312,12 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0)
|
||||
//calculate the energy produced by the reaction and then set the new temperature of the mix
|
||||
temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity()
|
||||
update_values()
|
||||
|
||||
|
||||
#ifdef FIREDBG
|
||||
log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]")
|
||||
log_debug("new temperature = [temperature]; new pressure = [return_pressure()]")
|
||||
#endif
|
||||
|
||||
|
||||
return firelevel
|
||||
|
||||
datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
|
||||
@@ -369,19 +369,19 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
|
||||
if(total_combustables > 0)
|
||||
//slows down the burning when the concentration of the reactants is low
|
||||
var/damping_multiplier = min(1, active_combustables / (total_moles/group_multiplier))
|
||||
|
||||
|
||||
//weight the damping mult so that it only really brings down the firelevel when the ratio is closer to 0
|
||||
damping_multiplier = 2*damping_multiplier - (damping_multiplier*damping_multiplier)
|
||||
|
||||
|
||||
//calculates how close the mixture of the reactants is to the optimum
|
||||
//fires burn better when there is more oxidizer -- too much fuel will choke the fire out a bit, reducing firelevel.
|
||||
var/mix_multiplier = 1 / (1 + (5 * ((total_fuel / total_combustables) ** 2)))
|
||||
|
||||
|
||||
#ifdef FIREDBG
|
||||
ASSERT(damping_multiplier <= 1)
|
||||
ASSERT(mix_multiplier <= 1)
|
||||
#endif
|
||||
|
||||
|
||||
//toss everything together -- should produce a value between 0 and fire_firelevel_multiplier
|
||||
firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier
|
||||
|
||||
@@ -425,10 +425,10 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs)
|
||||
|
||||
//Always check these damage procs first if fire damage isn't working. They're probably what's wrong.
|
||||
|
||||
apply_damage(2.5*mx*head_exposure, BURN, "head", 0, 0, "Fire")
|
||||
apply_damage(2.5*mx*chest_exposure, BURN, "chest", 0, 0, "Fire")
|
||||
apply_damage(2.0*mx*groin_exposure, BURN, "groin", 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, "l_leg", 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, "r_leg", 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, "l_arm", 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, "r_arm", 0, 0, "Fire")
|
||||
apply_damage(2.5*mx*head_exposure, BURN, BP_HEAD, 0, 0, "Fire")
|
||||
apply_damage(2.5*mx*chest_exposure, BURN, BP_TORSO, 0, 0, "Fire")
|
||||
apply_damage(2.0*mx*groin_exposure, BURN, BP_GROIN, 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_L_LEG, 0, 0, "Fire")
|
||||
apply_damage(0.6*mx*legs_exposure, BURN, BP_R_LEG, 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_L_ARM, 0, 0, "Fire")
|
||||
apply_damage(0.4*mx*arms_exposure, BURN, BP_R_ARM, 0, 0, "Fire")
|
||||
|
||||
+1
-1
@@ -116,7 +116,7 @@ obj/var/contaminated = 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/burn_eyes()
|
||||
var/obj/item/organ/eyes/E = internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = internal_organs_by_name[O_EYES]
|
||||
if(E)
|
||||
if(prob(20)) src << "<span class='danger'>Your eyes burn!</span>"
|
||||
E.damage += 2.5
|
||||
|
||||
@@ -29,27 +29,16 @@
|
||||
#define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215)
|
||||
#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
|
||||
|
||||
/*// Organ defines.
|
||||
#define ORGAN_CUT_AWAY 1<<0
|
||||
#define ORGAN_BLEEDING 1<<1
|
||||
#define ORGAN_BROKEN 1<<2
|
||||
#define ORGAN_DESTROYED 1<<3
|
||||
#define ORGAN_ROBOT 1<<4
|
||||
#define ORGAN_SPLINTED 1<<5
|
||||
#define ORGAN_DEAD 1<<6
|
||||
#define ORGAN_MUTATED 1<<7
|
||||
#define ORGAN_ASSISTED 1<<8*/
|
||||
|
||||
// Organ defines.
|
||||
#define ORGAN_CUT_AWAY 1
|
||||
#define ORGAN_BLEEDING 2
|
||||
#define ORGAN_BROKEN 4
|
||||
#define ORGAN_DESTROYED 8
|
||||
#define ORGAN_ROBOT 16
|
||||
#define ORGAN_SPLINTED 32
|
||||
#define ORGAN_DEAD 64
|
||||
#define ORGAN_MUTATED 128
|
||||
#define ORGAN_ASSISTED 256
|
||||
#define ORGAN_CUT_AWAY (1<<0)
|
||||
#define ORGAN_BLEEDING (1<<1)
|
||||
#define ORGAN_BROKEN (1<<2)
|
||||
#define ORGAN_DESTROYED (1<<3)
|
||||
#define ORGAN_ROBOT (1<<4)
|
||||
#define ORGAN_SPLINTED (1<<5)
|
||||
#define ORGAN_DEAD (1<<6)
|
||||
#define ORGAN_MUTATED (1<<7)
|
||||
#define ORGAN_ASSISTED (1<<8)
|
||||
|
||||
#define DROPLIMB_EDGE 0
|
||||
#define DROPLIMB_BLUNT 1
|
||||
|
||||
@@ -136,3 +136,39 @@
|
||||
|
||||
#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY)
|
||||
#define INCAPACITATION_ALL (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY)
|
||||
|
||||
// Bodyparts and organs.
|
||||
#define O_MOUTH "mouth"
|
||||
#define O_EYES "eyes"
|
||||
#define O_HEART "heart"
|
||||
#define O_LUNGS "lungs"
|
||||
#define O_BRAIN "brain"
|
||||
#define O_LIVER "liver"
|
||||
#define O_KIDNEYS "kidneys"
|
||||
#define O_PLASMA "plasma vessel"
|
||||
#define O_HIVE "hive node"
|
||||
#define O_NUTRIENT "nutrient vessel"
|
||||
#define O_STRATA "neural strata"
|
||||
#define O_RESPONSE "response node"
|
||||
#define O_GBLADDER "gas bladder"
|
||||
#define O_POLYP "polyp segment"
|
||||
#define O_ANCHOR "anchoring ligament"
|
||||
#define O_ACID "acid gland"
|
||||
#define O_EGG "egg sac"
|
||||
#define O_RESIN "resin spinner"
|
||||
|
||||
#define BP_L_FOOT "l_foot"
|
||||
#define BP_R_FOOT "r_foot"
|
||||
#define BP_L_LEG "l_leg"
|
||||
#define BP_R_LEG "r_leg"
|
||||
#define BP_L_HAND "l_hand"
|
||||
#define BP_R_HAND "r_hand"
|
||||
#define BP_L_ARM "l_arm"
|
||||
#define BP_R_ARM "r_arm"
|
||||
#define BP_HEAD "head"
|
||||
#define BP_TORSO "torso"
|
||||
#define BP_GROIN "groin"
|
||||
#define BP_ALL list(BP_GROIN, BP_TORSO, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)
|
||||
|
||||
#define SYNTH_BLOOD_COLOUR "#030303"
|
||||
#define SYNTH_FLESH_COLOUR "#575757"
|
||||
@@ -30,7 +30,7 @@ proc/random_hair_style(gender, species = "Human")
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
|
||||
if(gender != NEUTER)
|
||||
if(gender != NEUTER && gender != PLURAL)
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
@@ -52,7 +52,7 @@ proc/random_facial_hair_style(gender, species = "Human")
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
if(gender != NEUTER)
|
||||
if(gender != NEUTER && gender != PLURAL)
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
name = "damage zone"
|
||||
icon_state = "zone_sel"
|
||||
screen_loc = ui_zonesel
|
||||
var/selecting = "chest"
|
||||
var/selecting = BP_TORSO
|
||||
|
||||
/obj/screen/zone_sel/Click(location, control,params)
|
||||
var/list/PL = params2list(params)
|
||||
@@ -110,52 +110,52 @@
|
||||
if(1 to 3) //Feet
|
||||
switch(icon_x)
|
||||
if(10 to 15)
|
||||
selecting = "r_foot"
|
||||
selecting = BP_R_FOOT
|
||||
if(17 to 22)
|
||||
selecting = "l_foot"
|
||||
selecting = BP_L_FOOT
|
||||
else
|
||||
return 1
|
||||
if(4 to 9) //Legs
|
||||
switch(icon_x)
|
||||
if(10 to 15)
|
||||
selecting = "r_leg"
|
||||
selecting = BP_R_LEG
|
||||
if(17 to 22)
|
||||
selecting = "l_leg"
|
||||
selecting = BP_L_LEG
|
||||
else
|
||||
return 1
|
||||
if(10 to 13) //Hands and groin
|
||||
switch(icon_x)
|
||||
if(8 to 11)
|
||||
selecting = "r_hand"
|
||||
selecting = BP_R_HAND
|
||||
if(12 to 20)
|
||||
selecting = "groin"
|
||||
selecting = BP_GROIN
|
||||
if(21 to 24)
|
||||
selecting = "l_hand"
|
||||
selecting = BP_L_HAND
|
||||
else
|
||||
return 1
|
||||
if(14 to 22) //Chest and arms to shoulders
|
||||
switch(icon_x)
|
||||
if(8 to 11)
|
||||
selecting = "r_arm"
|
||||
selecting = BP_R_ARM
|
||||
if(12 to 20)
|
||||
selecting = "chest"
|
||||
selecting = BP_TORSO
|
||||
if(21 to 24)
|
||||
selecting = "l_arm"
|
||||
selecting = BP_L_ARM
|
||||
else
|
||||
return 1
|
||||
if(23 to 30) //Head, but we need to check for eye or mouth
|
||||
if(icon_x in 12 to 20)
|
||||
selecting = "head"
|
||||
selecting = BP_HEAD
|
||||
switch(icon_y)
|
||||
if(23 to 24)
|
||||
if(icon_x in 15 to 17)
|
||||
selecting = "mouth"
|
||||
selecting = O_MOUTH
|
||||
if(26) //Eyeline, eyes are on 15 and 17
|
||||
if(icon_x in 14 to 18)
|
||||
selecting = "eyes"
|
||||
selecting = O_EYES
|
||||
if(25 to 27)
|
||||
if(icon_x in 15 to 17)
|
||||
selecting = "eyes"
|
||||
selecting = O_EYES
|
||||
|
||||
if(old_selecting != selecting)
|
||||
update_icon()
|
||||
|
||||
@@ -260,7 +260,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H, var/assigned_role)
|
||||
preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
|
||||
|
||||
var/use_eye_icon = "eyes_s"
|
||||
var/obj/item/organ/external/head/temp_head = H.get_organ("head")
|
||||
var/obj/item/organ/external/head/temp_head = H.get_organ(BP_HEAD)
|
||||
if(temp_head) use_eye_icon = temp_head.eye_icon
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = use_eye_icon)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
H << "<span class='danger'>Your abdomen is a world of pain!</span>"
|
||||
H.Weaken(10)
|
||||
|
||||
var/obj/item/organ/external/groin = H.get_organ("groin")
|
||||
var/obj/item/organ/external/groin = H.get_organ(BP_GROIN)
|
||||
var/datum/wound/W = new /datum/wound/internal_bleeding(20)
|
||||
H.adjustToxLoss(25)
|
||||
groin.wounds += W
|
||||
|
||||
@@ -37,12 +37,12 @@ var/datum/antagonist/xenos/borer/borers
|
||||
var/mob/living/carbon/human/host
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.stat != DEAD && !H.has_brain_worms())
|
||||
var/obj/item/organ/external/head = H.get_organ("head")
|
||||
var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
|
||||
if(head && !(head.status & ORGAN_ROBOT))
|
||||
host = H
|
||||
break
|
||||
if(istype(host))
|
||||
var/obj/item/organ/external/head = host.get_organ("head")
|
||||
var/obj/item/organ/external/head = host.get_organ(BP_HEAD)
|
||||
borer.host = host
|
||||
head.implants += borer
|
||||
borer.forceMove(head)
|
||||
|
||||
@@ -54,3 +54,14 @@
|
||||
survive_objective.owner = changeling
|
||||
changeling.objectives += survive_objective
|
||||
return
|
||||
|
||||
/datum/antagonist/changeling/can_become_antag(var/datum/mind/player, var/ignore_role)
|
||||
if(..())
|
||||
if(player.current && ishuman(player.current))
|
||||
var/mob/living/carbon/human/H = player.current
|
||||
if(H.isSynthetic())
|
||||
return 0
|
||||
if(H.species.flags & NO_SCAN)
|
||||
return 0
|
||||
return 1
|
||||
return 0
|
||||
+2
-3
@@ -198,7 +198,7 @@ its easier to just keep the beam vertical.
|
||||
f_name = "some "
|
||||
else
|
||||
f_name = "a "
|
||||
if(blood_color != "#030303")
|
||||
if(blood_color != SYNTH_BLOOD_COLOUR)
|
||||
f_name += "<span class='danger'>blood-stained</span> [name][infix]!"
|
||||
else
|
||||
f_name += "oil-stained [name][infix]."
|
||||
@@ -399,8 +399,7 @@ its easier to just keep the beam vertical.
|
||||
M.dna = new /datum/dna(null)
|
||||
M.dna.real_name = M.real_name
|
||||
M.check_dna()
|
||||
if (M.species)
|
||||
blood_color = M.species.get_blood_colour(M)
|
||||
blood_color = M.species.get_blood_colour(M)
|
||||
. = 1
|
||||
return 1
|
||||
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
if(istype(held_item,/obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = held_item
|
||||
if(G.affecting)
|
||||
G.affecting.electrocute_act(5,src,1.0,"chest")
|
||||
G.affecting.electrocute_act(5,src,1.0,BP_TORSO)
|
||||
var/agony = 60 //The same as a stunbaton.
|
||||
var/stun = 0
|
||||
G.affecting.stun_effect_act(stun, agony, "chest", src)
|
||||
G.affecting.stun_effect_act(stun, agony, BP_TORSO, src)
|
||||
|
||||
msg_admin_attack("[key_name(src)] stunned [key_name(G.affecting)] with the [src].")
|
||||
|
||||
@@ -112,10 +112,10 @@
|
||||
src << "<span class='warning'>We require more chemicals to electrocute [C]!</span>"
|
||||
return 0
|
||||
|
||||
C.electrocute_act(5,src,1.0,"chest")
|
||||
C.electrocute_act(5,src,1.0,BP_TORSO)
|
||||
var/agony = 60 //The same as a stunbaton.
|
||||
var/stun = 0
|
||||
C.stun_effect_act(stun, agony, "chest", src)
|
||||
C.stun_effect_act(stun, agony, BP_TORSO, src)
|
||||
|
||||
msg_admin_attack("[key_name(user)] stunned [key_name(C)] with the [src].")
|
||||
|
||||
|
||||
@@ -18,7 +18,18 @@
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting)
|
||||
if(!T) return 0
|
||||
|
||||
if(!istype(T) || T.isSynthetic())
|
||||
src << "<span class='warning'>\The [T] is not compatible with our biology.</span>"
|
||||
return 0
|
||||
|
||||
if(T.species.flags & NO_SCAN)
|
||||
src << "<span class='warning'>We do not know how to parse this creature's DNA!</span>"
|
||||
return 0
|
||||
|
||||
if(HUSK in T.mutations)
|
||||
src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
|
||||
return 0
|
||||
|
||||
T.dna.real_name = T.real_name
|
||||
changeling.absorbed_dna |= T.dna
|
||||
|
||||
@@ -631,8 +631,8 @@ var/list/sacrificed = list()
|
||||
if(!(iscultist(V)))
|
||||
victims += V//Checks for cult status and mob type
|
||||
for(var/obj/item/I in src.loc)//Checks for MMIs/brains/Intellicards
|
||||
if(istype(I,/obj/item/organ/brain))
|
||||
var/obj/item/organ/brain/B = I
|
||||
if(istype(I,/obj/item/organ/internal/brain))
|
||||
var/obj/item/organ/internal/brain/B = I
|
||||
victims += B.brainmob
|
||||
else if(istype(I,/obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/B = I
|
||||
|
||||
@@ -406,7 +406,7 @@ datum/objective/harm
|
||||
if(!found)
|
||||
return 1
|
||||
|
||||
var/obj/item/organ/external/head/head = H.get_organ("head")
|
||||
var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD)
|
||||
if(head.disfigured)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -107,6 +107,11 @@
|
||||
path = /obj/item/device/radio/off
|
||||
category = "General"
|
||||
|
||||
/datum/autolathe/recipe/suit_cooler
|
||||
name = "suit cooling unit"
|
||||
path = /obj/item/device/suit_cooling_unit
|
||||
category = "General"
|
||||
|
||||
/datum/autolathe/recipe/weldermask
|
||||
name = "welding mask"
|
||||
path = /obj/item/clothing/head/welding
|
||||
|
||||
@@ -16,11 +16,11 @@
|
||||
var/stored_matter = 200
|
||||
var/loaded_dna //Blood sample for DNA hashing.
|
||||
var/list/products = list(
|
||||
"heart" = list(/obj/item/organ/heart, 50),
|
||||
"lungs" = list(/obj/item/organ/lungs, 40),
|
||||
"kidneys" = list(/obj/item/organ/kidneys,20),
|
||||
"eyes" = list(/obj/item/organ/eyes, 30),
|
||||
"liver" = list(/obj/item/organ/liver, 50)
|
||||
O_HEART = list(/obj/item/organ/internal/heart, 50),
|
||||
O_LUNGS = list(/obj/item/organ/internal/lungs, 40),
|
||||
O_KIDNEYS = list(/obj/item/organ/internal/kidneys,20),
|
||||
O_EYES = list(/obj/item/organ/internal/eyes, 30),
|
||||
O_LIVER = list(/obj/item/organ/internal/liver, 50)
|
||||
)
|
||||
|
||||
/obj/machinery/bioprinter/prosthetics
|
||||
|
||||
@@ -722,12 +722,12 @@
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/damage = rand(5,15)
|
||||
H.apply_damage(2*damage, BRUTE, "head")
|
||||
H.apply_damage(2*damage, BRUTE, "chest")
|
||||
H.apply_damage(0.5*damage, BRUTE, "l_leg")
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_leg")
|
||||
H.apply_damage(0.5*damage, BRUTE, "l_arm")
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||
H.apply_damage(2*damage, BRUTE, BP_HEAD)
|
||||
H.apply_damage(2*damage, BRUTE, BP_TORSO)
|
||||
H.apply_damage(0.5*damage, BRUTE, BP_L_LEG)
|
||||
H.apply_damage(0.5*damage, BRUTE, BP_R_LEG)
|
||||
H.apply_damage(0.5*damage, BRUTE, BP_L_ARM)
|
||||
H.apply_damage(0.5*damage, BRUTE, BP_R_ARM)
|
||||
|
||||
blood_splatter(src,H,1)
|
||||
bloodiness += 4
|
||||
|
||||
@@ -645,24 +645,6 @@ About the new airlock wires panel:
|
||||
if(src.shock(user, 100))
|
||||
return
|
||||
|
||||
// No. -- cib
|
||||
/**
|
||||
if(ishuman(user) && prob(40) && src.density)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.getBrainLoss() >= 60)
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
visible_message("<span class='warning'>[user] headbutts the airlock.</span>")
|
||||
var/obj/item/organ/external/affecting = H.get_organ("head")
|
||||
H.Stun(8)
|
||||
H.Weaken(5)
|
||||
if(affecting.take_damage(10, 0))
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
visible_message("<span class='warning'>[user] headbutts the airlock. Good thing they're wearing a helmet.</span>")
|
||||
return
|
||||
**/
|
||||
|
||||
if(src.p_open)
|
||||
user.set_machine(src)
|
||||
wires.Interact(user)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
if(!H.eyecheck() <= 0)
|
||||
continue
|
||||
flash_time *= H.species.flash_mod
|
||||
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
|
||||
if(!E)
|
||||
return
|
||||
if(E.is_bruised() && prob(E.damage + 50))
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
if(NOCLONE in T.mutations)
|
||||
return
|
||||
|
||||
if(!T.should_have_organ("heart"))
|
||||
if(!T.should_have_organ(O_HEART))
|
||||
return
|
||||
|
||||
// If the human is losing too much blood, beep.
|
||||
|
||||
@@ -172,8 +172,9 @@
|
||||
if(!src.occupant)
|
||||
visible_message("<span class='danger'>You hear a loud metallic grinding sound.</span>")
|
||||
return
|
||||
|
||||
use_power(1000)
|
||||
visible_message("<span class='danger'>You hear a loud squelchy grinding sound.</span>")
|
||||
visible_message("<span class='danger'>You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.</span>")
|
||||
src.operating = 1
|
||||
update_icon()
|
||||
|
||||
@@ -192,7 +193,7 @@
|
||||
else if(istype(src.occupant,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
slab_name = src.occupant.real_name
|
||||
slab_type = H.species.meat_type
|
||||
slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
|
||||
|
||||
// Small mobs don't give as much nutrition.
|
||||
if(issmall(src.occupant))
|
||||
@@ -200,12 +201,12 @@
|
||||
slab_nutrition /= slab_count
|
||||
|
||||
for(var/i=1 to slab_count)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src)
|
||||
new_meat.name = "[slab_name] [new_meat.name]"
|
||||
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
|
||||
|
||||
if(src.occupant.reagents)
|
||||
src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
|
||||
if(istype(new_meat))
|
||||
new_meat.name = "[slab_name] [new_meat.name]"
|
||||
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
|
||||
if(src.occupant.reagents)
|
||||
src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
|
||||
|
||||
src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by <b>[user]/[user.ckey]</b>" //One shall not simply gib a mob unnoticed!
|
||||
user.attack_log += "\[[time_stamp()]\] Gibbed <b>[src.occupant]/[src.occupant.ckey]</b>"
|
||||
|
||||
@@ -627,9 +627,9 @@ var/list/turret_icons
|
||||
var/def_zone
|
||||
var/obj/item/weapon/grab/G = locate() in target
|
||||
if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people.
|
||||
def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg")
|
||||
def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
|
||||
else
|
||||
def_zone = pick("chest", "groin")
|
||||
def_zone = pick(BP_TORSO, BP_GROIN)
|
||||
|
||||
//Shooting Code:
|
||||
A.launch(target, def_zone)
|
||||
|
||||
@@ -103,10 +103,21 @@
|
||||
R.adjustBruteLoss(-weld_rate)
|
||||
if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE))
|
||||
R.adjustFireLoss(-wire_rate)
|
||||
|
||||
else if(istype(occupant, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = occupant
|
||||
if(!isnull(H.internal_organs_by_name["cell"] && H.nutrition < 450))
|
||||
|
||||
// In case they somehow end up with positive values for otherwise unobtainable damage...
|
||||
if(H.getToxLoss()>0) H.adjustToxLoss(-(rand(1,3)))
|
||||
if(H.getOxyLoss()>0) H.adjustOxyLoss(-(rand(1,3)))
|
||||
if(H.getCloneLoss()>0) H.adjustCloneLoss(-(rand(1,3)))
|
||||
if(H.getBrainLoss()>0) H.adjustBrainLoss(-(rand(1,3)))
|
||||
|
||||
// Also recharge their internal battery.
|
||||
if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450)
|
||||
H.nutrition = min(H.nutrition+10, 450)
|
||||
cell.use(7000/450*10)
|
||||
|
||||
|
||||
/obj/machinery/recharge_station/examine(mob/user)
|
||||
@@ -206,14 +217,14 @@
|
||||
|
||||
/obj/machinery/recharge_station/proc/go_in(var/mob/living/silicon/robot/R)
|
||||
|
||||
if(occupant)
|
||||
return
|
||||
|
||||
if(istype(R, /mob/living/silicon/robot))
|
||||
if(!istype(R))
|
||||
return
|
||||
if(occupant)
|
||||
return
|
||||
|
||||
if(R.incapacitated())
|
||||
return
|
||||
|
||||
if(!R.cell)
|
||||
return
|
||||
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
sleep(50)
|
||||
if(src.OCCUPANT)
|
||||
OCCUPANT.apply_effect(50, IRRADIATE)
|
||||
var/obj/item/organ/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
|
||||
var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
|
||||
if (!rad_organ)
|
||||
if (OCCUPANT.can_feel_pain())
|
||||
OCCUPANT.emote("scream")
|
||||
|
||||
@@ -266,15 +266,15 @@
|
||||
else
|
||||
A = new /obj/item/projectile/energy/electrode( loc )
|
||||
use_power(200)
|
||||
|
||||
|
||||
//Turrets aim for the center of mass by default.
|
||||
//If the target is grabbing someone then the turret smartly aims for extremities
|
||||
var/obj/item/weapon/grab/G = locate() in target
|
||||
if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people.
|
||||
A.def_zone = pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg")
|
||||
A.def_zone = pick(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
|
||||
else
|
||||
A.def_zone = pick("chest", "groin")
|
||||
|
||||
A.def_zone = pick(BP_TORSO, BP_GROIN)
|
||||
|
||||
A.current = T
|
||||
A.starting = T
|
||||
A.yo = U.y - T.y
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
// if (M.health <= 0) return
|
||||
|
||||
var/obj/item/organ/external/temp = H.get_organ(pick("chest", "chest", "chest", "head"))
|
||||
var/obj/item/organ/external/temp = H.get_organ(pick(BP_TORSO, BP_TORSO, BP_TORSO, BP_HEAD))
|
||||
if(temp)
|
||||
var/update = 0
|
||||
switch(damtype)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
// Aliens can get straight through these.
|
||||
if(istype(usr,/mob/living/carbon))
|
||||
var/mob/living/carbon/M = usr
|
||||
if(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs)
|
||||
if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message("<span class='warning'>[usr] strokes the [name] and it melts away!</span>", 1)
|
||||
health = 0
|
||||
@@ -349,7 +349,7 @@ Alien plants should do something if theres a lot of poison
|
||||
/obj/effect/alien/egg/attack_hand(user as mob)
|
||||
|
||||
var/mob/living/carbon/M = user
|
||||
if(!istype(M) || !(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs))
|
||||
if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs))
|
||||
return attack_hand(user)
|
||||
|
||||
switch(status)
|
||||
|
||||
@@ -64,6 +64,12 @@ var/global/list/image/splatter_cache=list()
|
||||
/obj/effect/decal/cleanable/blood/update_icon()
|
||||
if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]"
|
||||
color = basecolor
|
||||
if(basecolor == SYNTH_BLOOD_COLOUR)
|
||||
name = "oil"
|
||||
desc = "It's black and greasy."
|
||||
else
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
if (!istype(perp))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "It's a useless heap of junk... <i>or is it?</i>"
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "gib1"
|
||||
basecolor="#030303"
|
||||
basecolor = SYNTH_BLOOD_COLOUR
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot/update_icon()
|
||||
@@ -38,9 +38,7 @@
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4
|
||||
|
||||
/obj/effect/decal/cleanable/blood/oil
|
||||
name = "motor oil"
|
||||
desc = "It's black and greasy. Looks like Beepsky made another mess."
|
||||
basecolor="#030303"
|
||||
basecolor = SYNTH_BLOOD_COLOUR
|
||||
|
||||
/obj/effect/decal/cleanable/blood/oil/dry()
|
||||
return
|
||||
|
||||
@@ -220,9 +220,9 @@
|
||||
src.loc = O.owner ? O.owner.loc : O.loc
|
||||
src.visible_message("<span class='warning'>\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!</span>")
|
||||
if(O.owner)
|
||||
O.owner.apply_damage(1, BRUTE, O.limb_name)
|
||||
O.owner.apply_damage(1, BRUTE, O.organ_tag)
|
||||
else if(prob(1))
|
||||
O.owner.apply_damage(1, TOX, O.limb_name)
|
||||
O.owner.apply_damage(1, TOX, O.organ_tag)
|
||||
if(world.time > last_itch + 30 SECONDS)
|
||||
last_itch = world.time
|
||||
O.owner << "<span class='notice'>Your [O.name] itches...</span>"
|
||||
|
||||
@@ -449,7 +449,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
|
||||
if(istype(H))
|
||||
|
||||
var/obj/item/organ/eyes/eyes = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = H.internal_organs_by_name[O_EYES]
|
||||
|
||||
if(H != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
@@ -477,7 +477,7 @@ var/list/global/slot_flags_enumeration = list(
|
||||
if (eyes.damage >= eyes.min_broken_damage)
|
||||
if(M.stat != 2)
|
||||
M << "<span class='warning'>You go blind!</span>"
|
||||
var/obj/item/organ/external/affecting = H.get_organ("head")
|
||||
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
|
||||
if(affecting.take_damage(7))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
add_fingerprint(user)
|
||||
if(on && user.zone_sel.selecting == "eyes")
|
||||
if(on && user.zone_sel.selecting == O_EYES)
|
||||
|
||||
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
|
||||
return ..() //just hit them in the head
|
||||
|
||||
@@ -12,21 +12,25 @@
|
||||
throwforce = 10.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
action_button_name = "Toggle Heatsink"
|
||||
|
||||
matter = list("steel" = 15000, "glass" = 3500)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2)
|
||||
|
||||
var/on = 0 //is it turned on?
|
||||
var/cover_open = 0 //is the cover open?
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/max_cooling = 12 //in degrees per second - probably don't need to mess with heat capacity here
|
||||
var/charge_consumption = 16.6 //charge per second at max_cooling
|
||||
var/max_cooling = 12 // in degrees per second - probably don't need to mess with heat capacity here
|
||||
var/charge_consumption = 3 // charge per second at max_cooling
|
||||
var/thermostat = T20C
|
||||
|
||||
//TODO: make it heat up the surroundings when not in space
|
||||
|
||||
/obj/item/device/suit_cooling_unit/ui_action_click()
|
||||
toggle(usr)
|
||||
|
||||
/obj/item/device/suit_cooling_unit/New()
|
||||
processing_objects |= src
|
||||
|
||||
cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
|
||||
cell.loc = src
|
||||
|
||||
@@ -56,7 +60,7 @@
|
||||
cell.use(charge_usage)
|
||||
|
||||
if(cell.charge <= 0)
|
||||
turn_off()
|
||||
turn_off(1)
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/get_environment_temperature()
|
||||
if (ishuman(loc))
|
||||
@@ -97,14 +101,12 @@
|
||||
on = 1
|
||||
updateicon()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/turn_off()
|
||||
if (ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.show_message("\The [src] clicks and whines as it powers down.", 2) //let them know in case it's run out of power.
|
||||
/obj/item/device/suit_cooling_unit/proc/turn_off(var/failed)
|
||||
if(failed) visible_message("\The [src] clicks and whines as it powers down.")
|
||||
on = 0
|
||||
updateicon()
|
||||
|
||||
/obj/item/device/suit_cooling_unit/attack_self(mob/user as mob)
|
||||
/obj/item/device/suit_cooling_unit/attack_self(var/mob/user)
|
||||
if(cover_open && cell)
|
||||
if(ishuman(user))
|
||||
user.put_in_hands(cell)
|
||||
@@ -114,18 +116,19 @@
|
||||
cell.add_fingerprint(user)
|
||||
cell.update_icon()
|
||||
|
||||
user << "You remove the [src.cell]."
|
||||
user << "You remove \the [src.cell]."
|
||||
src.cell = null
|
||||
updateicon()
|
||||
return
|
||||
|
||||
//TODO use a UI like the air tanks
|
||||
toggle(user)
|
||||
|
||||
/obj/item/device/suit_cooling_unit/proc/toggle(var/mob/user)
|
||||
if(on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if (on)
|
||||
user << "You switch on the [src]."
|
||||
user << "<span class='notice'>You switch \the [src] [on ? "on" : "off"].</span>"
|
||||
|
||||
/obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
|
||||
@@ -30,35 +30,35 @@
|
||||
name = "left arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_arm"
|
||||
part = list("l_arm","l_hand")
|
||||
part = list(BP_L_ARM, BP_L_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_arm
|
||||
name = "right arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_arm"
|
||||
part = list("r_arm","r_hand")
|
||||
part = list(BP_R_ARM, BP_R_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/l_leg
|
||||
name = "left leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_leg"
|
||||
part = list("l_leg","l_foot")
|
||||
part = list(BP_L_LEG, BP_L_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_leg
|
||||
name = "right leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_leg"
|
||||
part = list("r_leg","r_foot")
|
||||
part = list(BP_R_LEG, BP_R_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/chest
|
||||
name = "torso"
|
||||
name = "chest"
|
||||
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
|
||||
icon_state = "chest"
|
||||
part = list("groin","chest")
|
||||
part = list(BP_GROIN,BP_TORSO)
|
||||
var/wires = 0.0
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
name = "head"
|
||||
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
|
||||
icon_state = "head"
|
||||
part = list("head")
|
||||
part = list(BP_HEAD)
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.name == "head")
|
||||
if(affecting.organ_tag == BP_HEAD)
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.head]!</span>"
|
||||
return 1
|
||||
@@ -217,7 +217,7 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
var/limb = affecting.name
|
||||
if(!(affecting.limb_name in list("l_arm","r_arm","l_leg","r_leg")))
|
||||
if(!(affecting.organ_tag in list("l_arm","r_arm","l_leg","r_leg")))
|
||||
user << "<span class='danger'>You can't apply a splint there!</span>"
|
||||
return
|
||||
if(affecting.status & ORGAN_SPLINTED)
|
||||
@@ -226,7 +226,7 @@
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
if((!user.hand && affecting.limb_name == "r_arm") || (user.hand && affecting.limb_name == "l_arm"))
|
||||
if((!user.hand && affecting.organ_tag == "r_arm") || (user.hand && affecting.organ_tag == "l_arm"))
|
||||
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
|
||||
@@ -478,7 +478,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
return
|
||||
M.IgniteMob()
|
||||
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == "mouth" && lit)
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/soap/attack(mob/target as mob, mob/user as mob)
|
||||
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == "mouth" )
|
||||
if(target && user && ishuman(target) && ishuman(user) && !target.stat && !user.stat && user.zone_sel &&user.zone_sel.selecting == O_MOUTH)
|
||||
user.visible_message("<span class='danger'>\The [user] washes \the [target]'s mouth out with soap!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
//This really should be in mob not every check
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
|
||||
if (E && E.damage >= E.min_bruised_damage)
|
||||
M << "<span class='danger'>Your eyes start to burn badly!</span>"
|
||||
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
|
||||
|
||||
@@ -94,11 +94,11 @@ var/last_chew = 0
|
||||
var/mob/living/carbon/human/H = A
|
||||
if (!H.handcuffed) return
|
||||
if (H.a_intent != I_HURT) return
|
||||
if (H.zone_sel.selecting != "mouth") return
|
||||
if (H.zone_sel.selecting != O_MOUTH) return
|
||||
if (H.wear_mask) return
|
||||
if (istype(H.wear_suit, /obj/item/clothing/suit/straight_jacket)) return
|
||||
|
||||
var/obj/item/organ/external/O = H.organs_by_name[H.hand?"l_hand":"r_hand"]
|
||||
var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)]
|
||||
if (!O) return
|
||||
|
||||
var/s = "<span class='warning'>[H.name] chews on \his [O.name]!</span>"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
return ..()
|
||||
|
||||
if(user.a_intent != I_HELP)
|
||||
if(user.zone_sel.selecting == "head" || user.zone_sel.selecting == "eyes")
|
||||
if(user.zone_sel.selecting == BP_HEAD || user.zone_sel.selecting == O_EYES)
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
if(!istype(M, /mob))
|
||||
return
|
||||
|
||||
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
|
||||
if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user)
|
||||
reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
|
||||
user.equip_to_slot_if_possible(W, slot_wear_mask)
|
||||
@@ -252,7 +252,7 @@
|
||||
if(!istype(M, /mob))
|
||||
return
|
||||
|
||||
if(M == user && user.zone_sel.selecting == "mouth" && contents.len > 0 && !user.wear_mask)
|
||||
if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user)
|
||||
reagents.trans_to_obj(W, (reagents.total_volume/contents.len))
|
||||
user.equip_to_slot_if_possible(W, slot_wear_mask)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
H.apply_damage(2*force, BRUTE, BP_HEAD)
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
return
|
||||
@@ -123,7 +123,7 @@
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
H.apply_damage(2*force, BRUTE, BP_HEAD)
|
||||
else
|
||||
user.take_organ_damage(2*force)
|
||||
return
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
/obj/item/weapon/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user)
|
||||
if(istype(H))
|
||||
if(user.zone_sel.selecting == "eyes")
|
||||
if(user.zone_sel.selecting == O_EYES)
|
||||
|
||||
if(!H.organs_by_name["head"])
|
||||
if(!H.organs_by_name[BP_HEAD])
|
||||
user << "<span class='warning'>\The [H] doesn't have a head.</span>"
|
||||
return
|
||||
if(!H.has_eyes())
|
||||
@@ -27,14 +27,14 @@
|
||||
return
|
||||
|
||||
// Repeat failure checks.
|
||||
if(!H || !src || !H.organs_by_name["head"] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s eyes!</span>")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
|
||||
|
||||
else if(user.zone_sel.selecting == "mouth" || user.zone_sel.selecting == "head")
|
||||
if(!H.organs_by_name["head"])
|
||||
else if(user.zone_sel.selecting == O_MOUTH || user.zone_sel.selecting == BP_HEAD)
|
||||
if(!H.organs_by_name[BP_HEAD])
|
||||
user << "<span class='warning'>\The [H] doesn't have a head.</span>"
|
||||
return
|
||||
if(!H.check_has_mouth())
|
||||
@@ -52,7 +52,7 @@
|
||||
return
|
||||
|
||||
// Repeat failure checks.
|
||||
if(!H || !src || !H.organs_by_name["head"] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
/obj/item/weapon/screwdriver/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M) || user.a_intent == "help")
|
||||
return ..()
|
||||
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
|
||||
if(user.zone_sel.selecting != O_EYES && user.zone_sel.selecting != BP_HEAD)
|
||||
return ..()
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
M = user
|
||||
@@ -333,7 +333,7 @@
|
||||
var/safety = user:eyecheck()
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
|
||||
if(!E)
|
||||
return
|
||||
switch(safety)
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later.
|
||||
|
||||
|
||||
if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes
|
||||
if(!(user.zone_sel.selecting == (O_EYES || BP_HEAD))) //////////////hitting anything else other than the eyes
|
||||
if(prob(33))
|
||||
src.add_blood(H)
|
||||
var/turf/location = H.loc
|
||||
@@ -79,7 +79,7 @@
|
||||
if(istype(protection) && (protection.body_parts_covered & FACE))
|
||||
protected = 1
|
||||
break
|
||||
|
||||
|
||||
if(protected)
|
||||
M << "<span class='warning'>You get slammed in the face with the tray, against your mask!</span>"
|
||||
if(prob(33))
|
||||
|
||||
@@ -140,15 +140,15 @@
|
||||
|
||||
switch(pick(list("ankle","wrist","head","knee","elbow")))
|
||||
if("ankle")
|
||||
affecting = H.get_organ(pick("l_foot", "r_foot"))
|
||||
affecting = H.get_organ(pick(BP_L_FOOT, BP_R_FOOT))
|
||||
if("knee")
|
||||
affecting = H.get_organ(pick("l_leg", "r_leg"))
|
||||
affecting = H.get_organ(pick(BP_L_LEG, BP_R_LEG))
|
||||
if("wrist")
|
||||
affecting = H.get_organ(pick("l_hand", "r_hand"))
|
||||
affecting = H.get_organ(pick(BP_L_HAND, BP_R_HAND))
|
||||
if("elbow")
|
||||
affecting = H.get_organ(pick("l_arm", "r_arm"))
|
||||
affecting = H.get_organ(pick(BP_L_ARM, BP_R_ARM))
|
||||
if("head")
|
||||
affecting = H.get_organ("head")
|
||||
affecting = H.get_organ(BP_HEAD)
|
||||
|
||||
if(affecting)
|
||||
M << "<span class='danger'>You land heavily on your [affecting.name]!</span>"
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
var/mob/living/carbon/xenos = user
|
||||
var/mob/living/carbon/victim = M
|
||||
|
||||
if(istype(victim) && locate(/obj/item/organ/xenos/hivenode) in victim.internal_organs)
|
||||
if(istype(victim) && locate(/obj/item/organ/internal/xenos/hivenode) in victim.internal_organs)
|
||||
return
|
||||
|
||||
if(istype(xenos) && !(locate(/obj/item/organ/xenos/hivenode) in xenos.internal_organs))
|
||||
if(istype(xenos) && !(locate(/obj/item/organ/internal/xenos/hivenode) in xenos.internal_organs))
|
||||
return
|
||||
|
||||
if(M == usr)
|
||||
|
||||
@@ -97,33 +97,33 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/organ_name = null
|
||||
switch(name)
|
||||
|
||||
if("torso")
|
||||
if(BP_TORSO)
|
||||
organ_name = "torso"
|
||||
if("groin")
|
||||
if(BP_GROIN)
|
||||
organ_name = "groin"
|
||||
if("head")
|
||||
if(BP_HEAD)
|
||||
organ_name = "head"
|
||||
if("l_arm")
|
||||
if(BP_L_ARM)
|
||||
organ_name = "left arm"
|
||||
if("r_arm")
|
||||
if(BP_R_ARM)
|
||||
organ_name = "right arm"
|
||||
if("l_leg")
|
||||
if(BP_L_LEG)
|
||||
organ_name = "left leg"
|
||||
if("r_leg")
|
||||
if(BP_R_LEG)
|
||||
organ_name = "right leg"
|
||||
if("l_foot")
|
||||
if(BP_L_FOOT)
|
||||
organ_name = "left foot"
|
||||
if("r_foot")
|
||||
if(BP_R_FOOT)
|
||||
organ_name = "right foot"
|
||||
if("l_hand")
|
||||
if(BP_L_HAND)
|
||||
organ_name = "left hand"
|
||||
if("r_hand")
|
||||
if(BP_R_HAND)
|
||||
organ_name = "right hand"
|
||||
if("heart")
|
||||
if(O_HEART)
|
||||
organ_name = "heart"
|
||||
if("eyes")
|
||||
if(O_EYES)
|
||||
organ_name = "eyes"
|
||||
if("brain")
|
||||
if(O_BRAIN)
|
||||
organ_name = "brain"
|
||||
|
||||
if(status == "cyborg")
|
||||
@@ -351,56 +351,73 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["limbs"])
|
||||
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body")
|
||||
if(!limb_name && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
var/list/limb_selection_list = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand","Full Body")
|
||||
|
||||
// Full prosthetic bodies without a brain are borderline unkillable so make sure they have a brain to remove/destroy.
|
||||
var/datum/species/current_species = all_species[pref.species]
|
||||
if(!current_species.has_organ["brain"])
|
||||
limb_selection_list -= "Full Body"
|
||||
|
||||
var/organ_tag = input(user, "Which limb do you want to change?") as null|anything in limb_selection_list
|
||||
|
||||
if(!organ_tag && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
var/limb = null
|
||||
var/second_limb = null // if you try to change the arm, the hand should also change
|
||||
var/third_limb = null // if you try to unchange the hand, the arm should also change
|
||||
switch(limb_name)
|
||||
|
||||
// Do not let them amputate their entire body, ty.
|
||||
var/list/choice_options = list("Normal","Amputated","Prothesis")
|
||||
switch(organ_tag)
|
||||
if("Left Leg")
|
||||
limb = "l_leg"
|
||||
second_limb = "l_foot"
|
||||
limb = BP_L_LEG
|
||||
second_limb = BP_L_FOOT
|
||||
if("Right Leg")
|
||||
limb = "r_leg"
|
||||
second_limb = "r_foot"
|
||||
limb = BP_R_LEG
|
||||
second_limb = BP_R_FOOT
|
||||
if("Left Arm")
|
||||
limb = "l_arm"
|
||||
second_limb = "l_hand"
|
||||
limb = BP_L_ARM
|
||||
second_limb = BP_L_HAND
|
||||
if("Right Arm")
|
||||
limb = "r_arm"
|
||||
second_limb = "r_hand"
|
||||
limb = BP_R_ARM
|
||||
second_limb = BP_R_HAND
|
||||
if("Left Foot")
|
||||
limb = "l_foot"
|
||||
third_limb = "l_leg"
|
||||
limb = BP_L_FOOT
|
||||
third_limb = BP_L_LEG
|
||||
if("Right Foot")
|
||||
limb = "r_foot"
|
||||
third_limb = "r_leg"
|
||||
limb = BP_R_FOOT
|
||||
third_limb = BP_R_LEG
|
||||
if("Left Hand")
|
||||
limb = "l_hand"
|
||||
third_limb = "l_arm"
|
||||
limb = BP_L_HAND
|
||||
third_limb = BP_L_ARM
|
||||
if("Right Hand")
|
||||
limb = "r_hand"
|
||||
third_limb = "r_arm"
|
||||
limb = BP_R_HAND
|
||||
third_limb = BP_R_ARM
|
||||
if("Full Body")
|
||||
limb = "torso"
|
||||
limb = BP_TORSO
|
||||
third_limb = BP_GROIN
|
||||
choice_options = list("Normal","Prothesis")
|
||||
|
||||
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis")
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options
|
||||
if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
|
||||
if(limb == BP_TORSO)
|
||||
for(var/other_limb in BP_ALL - BP_TORSO)
|
||||
pref.organ_data[other_limb] = null
|
||||
pref.rlimb_data[other_limb] = null
|
||||
pref.organ_data[limb] = null
|
||||
pref.rlimb_data[limb] = null
|
||||
if(third_limb)
|
||||
pref.organ_data[third_limb] = null
|
||||
pref.rlimb_data[third_limb] = null
|
||||
|
||||
if("Amputated")
|
||||
|
||||
if(limb == "torso")
|
||||
if(limb == BP_TORSO)
|
||||
return
|
||||
|
||||
pref.organ_data[limb] = "amputated"
|
||||
pref.rlimb_data[limb] = null
|
||||
if(second_limb)
|
||||
@@ -430,43 +447,45 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
if(third_limb && pref.organ_data[third_limb] == "amputated")
|
||||
pref.organ_data[third_limb] = null
|
||||
|
||||
if(limb == "torso")
|
||||
for(var/other_limb in list("l_foot","r_foot","l_hand","r_hand","l_leg","r_leg","l_arm","r_arm","groin","head"))
|
||||
if(limb == BP_TORSO)
|
||||
for(var/other_limb in BP_ALL - BP_TORSO)
|
||||
if(pref.organ_data[other_limb])
|
||||
continue
|
||||
pref.organ_data[other_limb] = "cyborg"
|
||||
pref.rlimb_data[other_limb] = choice
|
||||
if(!pref.organ_data["brain"])
|
||||
pref.organ_data["brain"] = "assisted"
|
||||
for(var/internal_organ in list("heart","eyes"))
|
||||
if(!pref.organ_data[O_BRAIN])
|
||||
pref.organ_data[O_BRAIN] = "assisted"
|
||||
for(var/internal_organ in list(O_HEART,O_EYES))
|
||||
pref.organ_data[internal_organ] = "mechanical"
|
||||
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["organs"])
|
||||
|
||||
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes", "Brain")
|
||||
if(!organ_name) return
|
||||
|
||||
var/organ = null
|
||||
switch(organ_name)
|
||||
if("Heart")
|
||||
organ = "heart"
|
||||
organ = O_HEART
|
||||
if("Eyes")
|
||||
organ = "eyes"
|
||||
organ = O_EYES
|
||||
if("Brain")
|
||||
if(pref.organ_data["head"] != "cyborg")
|
||||
if(pref.organ_data[BP_HEAD] != "cyborg")
|
||||
user << "<span class='warning'>You may only select an assisted or synthetic brain if you have a full prosthetic body.</span>"
|
||||
return
|
||||
organ = "brain"
|
||||
|
||||
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal","Assisted","Mechanical")
|
||||
var/list/organ_choices = list("Normal","Assisted","Mechanical")
|
||||
if(pref.organ_data[BP_TORSO] == "cyborg")
|
||||
organ_choices -= "Normal"
|
||||
|
||||
var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in organ_choices
|
||||
if(!new_state) return
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
if(pref.organ_data["torso"] == "cyborg")
|
||||
user << "<span class='warning'>A character with a synthetic body may only use synthetic organs.</span>"
|
||||
return
|
||||
pref.organ_data[organ] = null
|
||||
if("Assisted")
|
||||
pref.organ_data[organ] = "assisted"
|
||||
@@ -512,9 +531,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
dat += "</br><b>Often present on human stations.</b>"
|
||||
if(current_species.spawn_flags & IS_WHITELISTED)
|
||||
dat += "</br><b>Whitelist restricted.</b>"
|
||||
if(!current_species.has_organ["heart"])
|
||||
if(!current_species.has_organ[O_HEART])
|
||||
dat += "</br><b>Does not have a circulatory system.</b>"
|
||||
if(!current_species.has_organ["lungs"])
|
||||
if(!current_species.has_organ[O_LUNGS])
|
||||
dat += "</br><b>Does not have a respiratory system.</b>"
|
||||
if(current_species.flags & NO_SCAN)
|
||||
dat += "</br><b>Does not have DNA.</b>"
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/pai/content(var/mob/user)
|
||||
. += "<b>pAI:</b><br>"
|
||||
if(!candidate)
|
||||
log_debug("[user] pAI prefs have a null candidate var.")
|
||||
return .
|
||||
. += "Name: <a href='?src=\ref[src];option=name'>[candidate.name ? candidate.name : "None Set"]</a><br>"
|
||||
. += "Description: <a href='?src=\ref[src];option=desc'>[candidate.description ? TextPreview(candidate.description, 40) : "None Set"]</a><br>"
|
||||
. += "Role: <a href='?src=\ref[src];option=role'>[candidate.role ? TextPreview(candidate.role, 40) : "None Set"]</a><br>"
|
||||
|
||||
@@ -304,36 +304,29 @@ datum/preferences
|
||||
character.skills = skills
|
||||
character.used_skillpoints = used_skillpoints
|
||||
|
||||
// Destroy/cyborgize organs
|
||||
|
||||
for(var/name in organ_data)
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
for(var/name in BP_ALL)
|
||||
var/status = organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(name == "torso" && !O)
|
||||
O = character.organs_by_name["chest"]
|
||||
if(O)
|
||||
O.status = 0
|
||||
if(status == "amputated")
|
||||
character.organs_by_name[O.limb_name] = null
|
||||
character.organs -= O
|
||||
if(O.children) // This might need to become recursive.
|
||||
for(var/obj/item/organ/external/child in O.children)
|
||||
character.organs_by_name[child.limb_name] = null
|
||||
character.organs -= child
|
||||
|
||||
O.remove_rejuv()
|
||||
else if(status == "cyborg")
|
||||
if(rlimb_data[name])
|
||||
O.robotize(rlimb_data[name])
|
||||
else
|
||||
O.robotize()
|
||||
else
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
|
||||
for(var/name in list(O_HEART,O_EYES,O_BRAIN))
|
||||
var/status = organ_data[name]
|
||||
if(!status)
|
||||
continue
|
||||
var/obj/item/organ/I = character.internal_organs_by_name[name]
|
||||
if(I)
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
else if(status == "mechanical")
|
||||
I.robotize()
|
||||
|
||||
character.underwear = underwear
|
||||
character.undershirt = undershirt
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
var/obj/item/projectile/P = damage_source
|
||||
|
||||
var/reflectchance = 40 - round(damage/3)
|
||||
if(!(def_zone in list("chest", "groin")))
|
||||
if(!(def_zone in list(BP_TORSO, BP_GROIN)))
|
||||
reflectchance /= 2
|
||||
if(P.starting && prob(reflectchance))
|
||||
visible_message("<span class='danger'>\The [user]'s [src.name] reflects [attack_text]!</span>")
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
var/sound = "heartbeat"
|
||||
var/sound_strength = "cannot hear"
|
||||
var/heartbeat = 0
|
||||
var/obj/item/organ/heart/heart = M.internal_organs_by_name["heart"]
|
||||
var/obj/item/organ/internal/heart/heart = M.internal_organs_by_name[O_HEART]
|
||||
if(heart && !(heart.status & ORGAN_ROBOT))
|
||||
heartbeat = 1
|
||||
if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
|
||||
@@ -107,7 +107,7 @@
|
||||
sound = "anything"
|
||||
else
|
||||
switch(body_part)
|
||||
if("chest")
|
||||
if(BP_TORSO)
|
||||
sound_strength = "hear"
|
||||
sound = "no heartbeat"
|
||||
if(heartbeat)
|
||||
@@ -116,14 +116,14 @@
|
||||
else
|
||||
sound = "healthy heartbeat"
|
||||
|
||||
var/obj/item/organ/heart/L = M.internal_organs_by_name["lungs"]
|
||||
var/obj/item/organ/internal/heart/L = M.internal_organs_by_name[O_LUNGS]
|
||||
if(!L || M.losebreath)
|
||||
sound += " and no respiration"
|
||||
else if(M.is_lung_ruptured() || M.getOxyLoss() > 50)
|
||||
sound += " and [pick("wheezing","gurgling")] sounds"
|
||||
else
|
||||
sound += " and healthy respiration"
|
||||
if("eyes","mouth")
|
||||
if(O_EYES,O_MOUTH)
|
||||
sound_strength = "cannot hear"
|
||||
sound = "anything"
|
||||
else
|
||||
|
||||
@@ -600,4 +600,11 @@
|
||||
desc = "A red shirt that has had the top cut low."
|
||||
icon_state = "cuttop_red"
|
||||
item_state = "r_suit"
|
||||
worn_state = "cuttop_red"
|
||||
worn_state = "cuttop_red"
|
||||
|
||||
/obj/item/clothing/under/harness
|
||||
name = "gear harness"
|
||||
desc = "How... minimalist."
|
||||
icon_state = "gear_harness"
|
||||
worn_state = "gear_harness"
|
||||
body_parts_covered = 0
|
||||
@@ -111,7 +111,7 @@
|
||||
user.do_attack_animation(src)
|
||||
M.IgniteMob()
|
||||
else if(reagents.total_volume)
|
||||
if(user.zone_sel.selecting == "mouth")
|
||||
if(user.zone_sel.selecting == O_MOUTH)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message(
|
||||
"<span class='danger'>\The [user] smothers [target] with [src]!</span>",
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
user.visible_message("<span class='danger'>\The [user] tries to take a swab sample from \the [H], but they move away.</span>")
|
||||
return
|
||||
|
||||
if(user.zone_sel.selecting == "mouth")
|
||||
if(!H.organs_by_name["head"])
|
||||
if(user.zone_sel.selecting == O_MOUTH)
|
||||
if(!H.organs_by_name[BP_HEAD])
|
||||
user << "<span class='warning'>They don't have a head.</span>"
|
||||
return
|
||||
if(!H.check_has_mouth())
|
||||
@@ -43,13 +43,13 @@
|
||||
dna = list(H.dna.unique_enzymes)
|
||||
sample_type = "DNA"
|
||||
|
||||
else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand")
|
||||
else if(user.zone_sel.selecting == BP_R_HAND || user.zone_sel.selecting == BP_L_HAND)
|
||||
var/has_hand
|
||||
var/obj/item/organ/external/O = H.organs_by_name["r_hand"]
|
||||
var/obj/item/organ/external/O = H.organs_by_name[BP_R_HAND]
|
||||
if(istype(O) && !O.is_stump())
|
||||
has_hand = 1
|
||||
else
|
||||
O = H.organs_by_name["l_hand"]
|
||||
O = H.organs_by_name[BP_L_HAND]
|
||||
if(istype(O) && !O.is_stump())
|
||||
has_hand = 1
|
||||
if(!has_hand)
|
||||
|
||||
@@ -91,7 +91,7 @@ I said no!
|
||||
/datum/recipe/brainburger
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bun,
|
||||
/obj/item/organ/brain
|
||||
/obj/item/organ/internal/brain
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/brainburger
|
||||
|
||||
@@ -1020,5 +1020,5 @@ I said no!
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
|
||||
|
||||
/datum/recipe/cake/brain
|
||||
items = list(/obj/item/organ/brain)
|
||||
items = list(/obj/item/organ/internal/brain)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
finish(mob/living/carbon/human/H)
|
||||
if(!H.reagents.has_reagent("dexalin"))
|
||||
for(var/organ_name in list("chest","l_arm","r_arm","r_leg","l_leg","head","groin"))
|
||||
for(var/organ_name in BP_ALL)
|
||||
var/obj/item/organ/external/E = H.get_organ(organ_name)
|
||||
E.take_damage(0, 5, 0)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
finish(mob/living/carbon/human/H)
|
||||
if(!H.reagents.has_reagent("bicaridine"))
|
||||
var/organ_name = pick("chest","l_arm","r_arm","r_leg","l_leg","head","groin")
|
||||
var/organ_name = pick(BP_ALL)
|
||||
var/obj/item/organ/external/E = H.get_organ(organ_name)
|
||||
E.take_damage(20, 0, 0)
|
||||
E.fracture()
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
return
|
||||
|
||||
|
||||
if(!target_limb) target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")
|
||||
if(!target_limb) target_limb = pick(BP_ALL)
|
||||
var/obj/item/organ/external/affecting = target.get_organ(target_limb)
|
||||
var/damage = 0
|
||||
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/book/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(user.zone_sel.selecting == "eyes")
|
||||
if(user.zone_sel.selecting == O_EYES)
|
||||
user.visible_message("<span class='notice'>You open up the book and show it to [M]. </span>", \
|
||||
"<span class='notice'> [user] opens up a book and shows it to [M]. </span>")
|
||||
M << browse("<TT><I>Penned by [author].</I></TT> <BR>" + "[dat]", "window=book")
|
||||
|
||||
@@ -651,7 +651,7 @@ var/list/name_to_material
|
||||
|
||||
/material/resin/can_open_material_door(var/mob/living/user)
|
||||
var/mob/living/carbon/M = user
|
||||
if(istype(M) && locate(/obj/item/organ/xenos/hivenode) in M.internal_organs)
|
||||
if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -104,9 +104,9 @@
|
||||
if(88)
|
||||
new/obj/item/xenos_claw(src)
|
||||
if(89)
|
||||
new/obj/item/organ/xenos/plasmavessel(src)
|
||||
new/obj/item/organ/internal/xenos/plasmavessel(src)
|
||||
if(90)
|
||||
new/obj/item/organ/heart(src)
|
||||
new/obj/item/organ/internal/heart(src)
|
||||
if(91)
|
||||
new/obj/item/device/soulstone(src)
|
||||
if(92)
|
||||
@@ -168,8 +168,8 @@
|
||||
var/turf/T = get_turf(src.loc)
|
||||
explosion(T, 0, 0, 1, 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (locked)
|
||||
user << "<span class='notice'>The crate unlocks!</span>"
|
||||
locked = 0
|
||||
@@ -177,7 +177,7 @@
|
||||
/obj/structure/closet/crate/secure/loot/proc/check_input(var/input)
|
||||
if(length(input) != codelen)
|
||||
return 0
|
||||
|
||||
|
||||
. = 1
|
||||
lastattempt.Cut()
|
||||
for(var/i in 1 to codelen)
|
||||
@@ -197,7 +197,7 @@
|
||||
if(lastattempt.len)
|
||||
var/bulls = 0
|
||||
var/cows = 0
|
||||
|
||||
|
||||
var/list/code_contents = code.Copy()
|
||||
for(var/i in 1 to codelen)
|
||||
if(lastattempt[i] == code[i])
|
||||
|
||||
@@ -131,6 +131,9 @@
|
||||
return ask_verb
|
||||
return speech_verb
|
||||
|
||||
/datum/language/proc/can_speak_special(var/mob/speaker)
|
||||
return 1
|
||||
|
||||
// Language handling.
|
||||
/mob/proc/add_language(var/language)
|
||||
|
||||
@@ -155,7 +158,7 @@
|
||||
|
||||
// Can we speak this language, as opposed to just understanding it?
|
||||
/mob/proc/can_speak(datum/language/speaking)
|
||||
return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages)
|
||||
return (speaking.can_speak_special(src) && (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages))
|
||||
|
||||
/mob/proc/get_language_prefix()
|
||||
if(client && client.prefs.language_prefixes && client.prefs.language_prefixes.len)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/mob/living/carbon/M = other
|
||||
if(!istype(M))
|
||||
return 1
|
||||
if(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs)
|
||||
if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
@@ -106,13 +106,14 @@
|
||||
syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz")
|
||||
space_chance = 10
|
||||
|
||||
/datum/language/machine/can_speak_special(var/mob/speaker)
|
||||
return speaker.isSynthetic()
|
||||
|
||||
/datum/language/machine/get_random_name()
|
||||
var/new_name
|
||||
if(prob(70))
|
||||
new_name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
return "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
|
||||
else
|
||||
new_name = pick(ai_names)
|
||||
return new_name
|
||||
return pick(ai_names)
|
||||
|
||||
//Syllable Lists
|
||||
/*
|
||||
|
||||
@@ -11,4 +11,4 @@
|
||||
/mob/living/carbon/alien/larva/New()
|
||||
..()
|
||||
add_language("Xenomorph") //Bonus language.
|
||||
internal_organs |= new /obj/item/organ/xenos/hivenode(src)
|
||||
internal_organs |= new /obj/item/organ/internal/xenos/hivenode(src)
|
||||
@@ -31,25 +31,24 @@
|
||||
|
||||
var/locked = 0
|
||||
var/mob/living/carbon/brain/brainmob = null//The current occupant.
|
||||
var/obj/item/organ/brain/brainobj = null //The current brain organ.
|
||||
var/obj/item/organ/internal/brain/brainobj = null //The current brain organ.
|
||||
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO
|
||||
if(istype(O,/obj/item/organ/internal/brain) && !brainmob) //Time to stick a brain in it --NEO
|
||||
|
||||
var/obj/item/organ/brain/B = O
|
||||
var/obj/item/organ/internal/brain/B = O
|
||||
if(B.health <= 0)
|
||||
user << "\red That brain is well and truly dead."
|
||||
user << "<span class='warning'>That brain is well and truly dead.</span>"
|
||||
return
|
||||
else if(!B.brainmob)
|
||||
user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
|
||||
user << "<span class='warning'>You aren't sure where this brain came from, but you're pretty sure it's useless.</span>"
|
||||
return
|
||||
|
||||
for(var/mob/V in viewers(src, null))
|
||||
V.show_message(text("\blue [user] sticks \a [O] into \the [src]."))
|
||||
user.visible_message("<span class='notice'>\The [user] sticks \a [O] into \the [src].</span>")
|
||||
|
||||
brainmob = O:brainmob
|
||||
O:brainmob = null
|
||||
brainmob = B.brainmob
|
||||
B.brainmob = null
|
||||
brainmob.loc = src
|
||||
brainmob.container = src
|
||||
brainmob.stat = 0
|
||||
@@ -72,9 +71,9 @@
|
||||
if((istype(O,/obj/item/weapon/card/id)||istype(O,/obj/item/device/pda)) && brainmob)
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
user << "\blue You [locked ? "lock" : "unlock"] the brain holder."
|
||||
user << "<span class='notice'>You [locked ? "lock" : "unlock"] the brain holder.</span>"
|
||||
else
|
||||
user << "\red Access denied."
|
||||
user << "<span class='warning'>Access denied.</span>"
|
||||
return
|
||||
if(brainmob)
|
||||
O.attack(brainmob, user)//Oh noooeeeee
|
||||
@@ -84,12 +83,12 @@
|
||||
//TODO: ORGAN REMOVAL UPDATE. Make the brain remain in the MMI so it doesn't lose organ data.
|
||||
attack_self(mob/user as mob)
|
||||
if(!brainmob)
|
||||
user << "\red You upend the MMI, but there's nothing in it."
|
||||
user << "<span class='warning'>You upend the MMI, but there's nothing in it.</span>"
|
||||
else if(locked)
|
||||
user << "\red You upend the MMI, but the brain is clamped into place."
|
||||
user << "<span class='warning'>You upend the MMI, but the brain is clamped into place.</span>"
|
||||
else
|
||||
user << "\blue You upend the MMI, spilling the brain onto the floor."
|
||||
var/obj/item/organ/brain/brain
|
||||
user << "<span class='notice'>You upend the MMI, spilling the brain onto the floor.</span>"
|
||||
var/obj/item/organ/internal/brain/brain
|
||||
if (brainobj) //Pull brain organ out of MMI.
|
||||
brainobj.loc = user.loc
|
||||
brain = brainobj
|
||||
@@ -158,7 +157,7 @@
|
||||
brainmob << "Can't do that while incapacitated or dead."
|
||||
|
||||
radio.broadcasting = radio.broadcasting==1 ? 0 : 1
|
||||
brainmob << "\blue Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting."
|
||||
brainmob << "<span class='notice'>Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting.</span>"
|
||||
|
||||
Toggle_Listening()
|
||||
set name = "Toggle Listening"
|
||||
@@ -171,7 +170,7 @@
|
||||
brainmob << "Can't do that while incapacitated or dead."
|
||||
|
||||
radio.listening = radio.listening==1 ? 0 : 1
|
||||
brainmob << "\blue Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast."
|
||||
brainmob << "<span class='notice'>Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.</span>"
|
||||
|
||||
/obj/item/device/mmi/emp_act(severity)
|
||||
if(!brainmob)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/obj/item/organ/brain
|
||||
/obj/item/organ/internal/brain
|
||||
name = "brain"
|
||||
health = 400 //They need to live awhile longer than other organs. Is this even used by organ code anymore?
|
||||
desc = "A piece of juicy meat found in a person's head."
|
||||
organ_tag = "brain"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
icon_state = "brain2"
|
||||
force = 1.0
|
||||
@@ -15,89 +15,86 @@
|
||||
attack_verb = list("attacked", "slapped", "whacked")
|
||||
var/mob/living/carbon/brain/brainmob = null
|
||||
|
||||
/obj/item/organ/internal/brain/robotize()
|
||||
replace_self_with(/obj/item/organ/internal/mmi_holder/posibrain)
|
||||
|
||||
/obj/item/organ/brain/robotize()
|
||||
replace_self_with(/obj/item/organ/mmi_holder/posibrain)
|
||||
/obj/item/organ/internal/brain/mechassist()
|
||||
replace_self_with(/obj/item/organ/internal/mmi_holder)
|
||||
|
||||
/obj/item/organ/brain/mechassist()
|
||||
replace_self_with(/obj/item/organ/mmi_holder)
|
||||
/obj/item/organ/internal/brain/proc/replace_self_with(replace_path)
|
||||
var/mob/living/carbon/human/tmp_owner = owner
|
||||
qdel(src)
|
||||
if(tmp_owner)
|
||||
tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1)
|
||||
tmp_owner = null
|
||||
|
||||
/obj/item/organ/brain/proc/replace_self_with(replace_path)
|
||||
if(!owner)
|
||||
new replace_path(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
owner.internal_organs_by_name[organ_tag] = new replace_path(owner, 1)
|
||||
owner.internal_organs -= src
|
||||
while(null in owner.internal_organs_by_name)
|
||||
owner.internal_organs_by_name -= null
|
||||
while(null in owner.internal_organs)
|
||||
owner.internal_organs -= null
|
||||
|
||||
/obj/item/organ/pariah_brain
|
||||
/obj/item/organ/internal/pariah_brain
|
||||
name = "brain remnants"
|
||||
desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
|
||||
organ_tag = "brain"
|
||||
parent_organ = "head"
|
||||
parent_organ = BP_HEAD
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
vital = 1
|
||||
|
||||
/obj/item/organ/brain/xeno
|
||||
/obj/item/organ/internal/brain/xeno
|
||||
name = "thinkpan"
|
||||
desc = "It looks kind of like an enormous wad of purple bubblegum."
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
|
||||
/obj/item/organ/brain/New()
|
||||
/obj/item/organ/internal/brain/New()
|
||||
..()
|
||||
health = config.default_brain_health
|
||||
spawn(5)
|
||||
if(brainmob && brainmob.client)
|
||||
brainmob.client.screen.len = null //clear the hud
|
||||
|
||||
/obj/item/organ/brain/Destroy()
|
||||
/obj/item/organ/internal/brain/Destroy()
|
||||
if(brainmob)
|
||||
qdel(brainmob)
|
||||
brainmob = null
|
||||
..()
|
||||
|
||||
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
|
||||
name = "\the [H]'s [initial(src.name)]"
|
||||
brainmob = new(src)
|
||||
brainmob.name = H.real_name
|
||||
brainmob.real_name = H.real_name
|
||||
brainmob.dna = H.dna.Clone()
|
||||
brainmob.timeofhostdeath = H.timeofdeath
|
||||
/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H)
|
||||
|
||||
if(!brainmob)
|
||||
brainmob = new(src)
|
||||
brainmob.name = H.real_name
|
||||
brainmob.real_name = H.real_name
|
||||
brainmob.dna = H.dna.Clone()
|
||||
brainmob.timeofhostdeath = H.timeofdeath
|
||||
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(brainmob)
|
||||
|
||||
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just a [initial(src.name)].</span>"
|
||||
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].</span>"
|
||||
callHook("debrain", list(brainmob))
|
||||
|
||||
/obj/item/organ/brain/examine(mob/user) // -- TLE
|
||||
/obj/item/organ/internal/brain/examine(mob/user) // -- TLE
|
||||
..(user)
|
||||
if(brainmob && brainmob.client)//if thar be a brain inside... the brain.
|
||||
user << "You can feel the small spark of life still left in this one."
|
||||
else
|
||||
user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.."
|
||||
|
||||
/obj/item/organ/brain/removed(var/mob/living/user)
|
||||
/obj/item/organ/internal/brain/removed(var/mob/living/user)
|
||||
|
||||
name = "[owner.real_name]'s brain"
|
||||
if(name == initial(name))
|
||||
name = "\the [owner.real_name]'s [initial(name)]"
|
||||
|
||||
var/mob/living/simple_animal/borer/borer = owner.has_brain_worms()
|
||||
|
||||
if(borer)
|
||||
borer.detatch() //Should remove borer if the brain is removed - RR
|
||||
|
||||
var/obj/item/organ/brain/B = src
|
||||
var/obj/item/organ/internal/brain/B = src
|
||||
if(istype(B) && istype(owner))
|
||||
B.transfer_identity(owner)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/organ/brain/replaced(var/mob/living/target)
|
||||
/obj/item/organ/internal/brain/replaced(var/mob/living/target)
|
||||
|
||||
if(target.key)
|
||||
target.ghostize()
|
||||
@@ -109,13 +106,13 @@
|
||||
target.key = brainmob.key
|
||||
..()
|
||||
|
||||
/obj/item/organ/brain/slime
|
||||
/obj/item/organ/internal/brain/slime
|
||||
name = "slime core"
|
||||
desc = "A complex, organic knot of jelly and crystalline particles."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "green slime extract"
|
||||
|
||||
/obj/item/organ/brain/golem
|
||||
/obj/item/organ/internal/brain/golem
|
||||
name = "chem"
|
||||
desc = "A tightly furled roll of paper, covered with indecipherable runes."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
|
||||
@@ -9,6 +9,6 @@
|
||||
if(istype(container, /obj/item/device/mmi))
|
||||
qdel(container)//Gets rid of the MMI if there is one
|
||||
if(loc)
|
||||
if(istype(loc,/obj/item/organ/brain))
|
||||
if(istype(loc,/obj/item/organ/internal/brain))
|
||||
qdel(loc)//Gets rid of the brain item
|
||||
..(null,1)
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/mob/living/carbon/proc/breathe()
|
||||
//if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return
|
||||
if(!should_have_organ("lungs") || does_not_breathe) return
|
||||
if(!should_have_organ(O_LUNGS) || does_not_breathe) return
|
||||
|
||||
var/datum/gas_mixture/breath = null
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
var/d = rand(round(I.force / 4), I.force)
|
||||
if(istype(src, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/obj/item/organ/external/organ = H.get_organ("chest")
|
||||
var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
|
||||
if (istype(organ))
|
||||
if(organ.take_damage(d, 0))
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
/mob/living/carbon/human/proc/generate_valid_hairstyles(var/check_gender = 1)
|
||||
|
||||
var/use_species = species.get_bodytype()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/obj/item/organ/external/head/H = get_organ(BP_HEAD)
|
||||
if(H) use_species = H.species.get_bodytype()
|
||||
|
||||
var/list/valid_hairstyles = new()
|
||||
@@ -181,7 +181,7 @@
|
||||
/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
|
||||
|
||||
var/use_species = species.get_bodytype()
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/obj/item/organ/external/head/H = get_organ(BP_HEAD)
|
||||
if(H) use_species = H.species.get_bodytype()
|
||||
|
||||
var/list/valid_facial_hairstyles = new()
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
animate_tail_stop()
|
||||
|
||||
//Handle brain slugs.
|
||||
var/obj/item/organ/external/head = get_organ("head")
|
||||
var/obj/item/organ/external/head = get_organ(BP_HEAD)
|
||||
var/mob/living/simple_animal/borer/B
|
||||
|
||||
for(var/I in head.implants)
|
||||
|
||||
@@ -19,11 +19,43 @@
|
||||
if(src.stat == 2.0 && (act != "deathgasp"))
|
||||
return
|
||||
switch(act)
|
||||
|
||||
if ("airguitar")
|
||||
if (!src.restrained())
|
||||
message = "is strumming the air and headbanging like a safari chimp."
|
||||
m_type = 1
|
||||
|
||||
if("ping", "beep", "buzz")
|
||||
|
||||
if(!isSynthetic())
|
||||
src << "<span class='warning'>You are not a synthetic.</span>"
|
||||
return
|
||||
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
var/display_msg = "beeps"
|
||||
var/use_sound = 'sound/machines/twobeep.ogg'
|
||||
if(act == "buzz")
|
||||
display_msg = "buzzes"
|
||||
use_sound = 'sound/machines/buzz-sigh.ogg'
|
||||
else if(act == "ping")
|
||||
display_msg = "pings"
|
||||
use_sound = 'sound/machines/ping.ogg'
|
||||
|
||||
if (param)
|
||||
message = "[display_msg] at [param]."
|
||||
else
|
||||
message = "[display_msg]."
|
||||
playsound(src.loc, use_sound, 50, 0)
|
||||
m_type = 1
|
||||
|
||||
if ("blink")
|
||||
message = "blinks."
|
||||
m_type = 1
|
||||
|
||||
@@ -39,19 +39,19 @@
|
||||
|
||||
msg += "<EM>[src.name]</EM>"
|
||||
|
||||
|
||||
var/is_synth = isSynthetic()
|
||||
if(is_synth)
|
||||
var/use_gender = "a synthetic"
|
||||
if(gender == MALE)
|
||||
use_gender = "an android"
|
||||
else if(gender == FEMALE)
|
||||
use_gender = "a gynoid"
|
||||
if(!(skipjumpsuit && skipface))
|
||||
if(is_synth)
|
||||
var/use_gender = "a synthetic"
|
||||
if(gender == MALE)
|
||||
use_gender = "an android"
|
||||
else if(gender == FEMALE)
|
||||
use_gender = "a gynoid"
|
||||
|
||||
msg += ", <font color='#555555'>[use_gender]!</font></b>"
|
||||
msg += ", <font color='#555555'>[use_gender]!</font></b>"
|
||||
|
||||
else if(species.name != "Human")
|
||||
msg += ", <b><font color='[species.get_flesh_colour(src)]'>\a [species.name]!</font></b>"
|
||||
else if(species.name != "Human")
|
||||
msg += ", <b><font color='[species.get_flesh_colour(src)]'>\a [species.name]!</font></b>"
|
||||
msg += "<br>"
|
||||
|
||||
//uniform
|
||||
@@ -64,60 +64,60 @@
|
||||
tie_msg += ". Attached to it is [lowertext(english_list(U.accessories))]"
|
||||
|
||||
if(w_uniform.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != "#030303") ? "blood" : "oil"]-stained [w_uniform.name][tie_msg]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name][tie_msg]!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n"
|
||||
|
||||
//head
|
||||
if(head)
|
||||
if(head.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [(head.blood_color != "#030303") ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[head] \a [head] on [T.his] head.\n"
|
||||
|
||||
//suit/armour
|
||||
if(wear_suit)
|
||||
if(wear_suit.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_suit.name]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name]!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_suit] \a [wear_suit].\n"
|
||||
|
||||
//suit/armour storage
|
||||
if(s_store && !skipsuitstorage)
|
||||
if(s_store.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != "#030303") ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] carrying \icon[s_store] \a [s_store] on [T.his] [wear_suit.name].\n"
|
||||
|
||||
//back
|
||||
if(back)
|
||||
if(back.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back] [back.gender==PLURAL?"some":"a"] [(back.blood_color != "#030303") ? "blood" : "oil"]-stained [back] on [T.his] back.</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[back] \a [back] on [T.his] back.\n"
|
||||
|
||||
//left hand
|
||||
if(l_hand)
|
||||
if(l_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[l_hand] \a [l_hand] in [T.his] left hand.\n"
|
||||
|
||||
//right hand
|
||||
if(r_hand)
|
||||
if(r_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != "#030303") ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[r_hand] \a [r_hand] in [T.his] right hand.\n"
|
||||
|
||||
//gloves
|
||||
if(gloves && !skipgloves)
|
||||
if(gloves.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != "#030303") ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[gloves] \a [gloves] on [T.his] hands.\n"
|
||||
else if(blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != "#030303") ? "blood" : "oil"]-stained hands!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span>\n"
|
||||
|
||||
//handcuffed?
|
||||
|
||||
@@ -135,30 +135,30 @@
|
||||
//belt
|
||||
if(belt)
|
||||
if(belt.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != "#030303") ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[belt] \a [belt] about [T.his] waist.\n"
|
||||
|
||||
//shoes
|
||||
if(shoes && !skipshoes)
|
||||
if(shoes.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != "#030303") ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] wearing \icon[shoes] \a [shoes] on [T.his] feet.\n"
|
||||
else if(feet_blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != "#030303") ? "blood" : "oil"]-stained feet!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span>\n"
|
||||
|
||||
//mask
|
||||
if(wear_mask && !skipmask)
|
||||
if(wear_mask.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != "#030303") ? "blood" : "oil"]-stained [wear_mask.name] on [T.his] face!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] on [T.his] face!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[wear_mask] \a [wear_mask] on [T.his] face.\n"
|
||||
|
||||
//eyes
|
||||
if(glasses && !skipeyes)
|
||||
if(glasses.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != "#030303") ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span>\n"
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[glasses] \a [glasses] covering [T.his] eyes.\n"
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
msg += "<span class='warning'>[T.He] [T.is] twitching ever so slightly.</span>\n"
|
||||
|
||||
//splints
|
||||
for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
|
||||
for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM))
|
||||
var/obj/item/organ/external/o = get_organ(organ)
|
||||
if(o && o.status & ORGAN_SPLINTED)
|
||||
msg += "<span class='warning'>[T.He] [T.has] a splint on [T.his] [o.name]!</span>\n"
|
||||
@@ -295,79 +295,6 @@
|
||||
if(((temp.status & ORGAN_BROKEN) && temp.brute_dam > temp.min_broken_damage) || (temp.status & ORGAN_MUTATED))
|
||||
wound_flavor_text["[temp.name]"] += "<span class='warning'>[T.His] [temp.name] is dented and swollen!</span><br>"
|
||||
|
||||
//Handles the text strings being added to the actual description.
|
||||
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext.
|
||||
|
||||
// ***********************************************************************************
|
||||
// THIS NEEDS TO BE ENTIRELY REWRITTEN. Commenting out for now, BADLY NEEDS REWRITING.
|
||||
// ***********************************************************************************
|
||||
|
||||
/*
|
||||
var/display_chest = 0
|
||||
var/display_shoes = 0
|
||||
var/display_gloves = 0
|
||||
|
||||
if(wound_flavor_text["head"] && (is_destroyed["head"] || (!skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))))
|
||||
msg += wound_flavor_text["head"]
|
||||
else if(is_bleeding["head"])
|
||||
msg += "<span class='warning'>[src] [T.has] blood running down [T.his] face!</span>\n"
|
||||
|
||||
if(wound_flavor_text["upper body"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
|
||||
msg += wound_flavor_text["upper body"]
|
||||
else if(is_bleeding["upper body"])
|
||||
display_chest = 1
|
||||
|
||||
if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit)))
|
||||
msg += wound_flavor_text["left arm"]
|
||||
else if(is_bleeding["left arm"])
|
||||
display_chest = 1
|
||||
|
||||
if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
|
||||
msg += wound_flavor_text["left hand"]
|
||||
else if(is_bleeding["left hand"])
|
||||
display_gloves = 1
|
||||
|
||||
if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit)))
|
||||
msg += wound_flavor_text["right arm"]
|
||||
else if(is_bleeding["right arm"])
|
||||
display_chest = 1
|
||||
|
||||
if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
|
||||
msg += wound_flavor_text["right hand"]
|
||||
else if(is_bleeding["right hand"])
|
||||
display_gloves = 1
|
||||
|
||||
if(wound_flavor_text["lower body"] && (is_destroyed["lower body"] || (!w_uniform && !skipjumpsuit)))
|
||||
msg += wound_flavor_text["lower body"]
|
||||
else if(is_bleeding["lower body"])
|
||||
display_chest = 1
|
||||
|
||||
if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit)))
|
||||
msg += wound_flavor_text["left leg"]
|
||||
else if(is_bleeding["left leg"])
|
||||
display_chest = 1
|
||||
|
||||
if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
|
||||
msg += wound_flavor_text["left foot"]
|
||||
else if(is_bleeding["left foot"])
|
||||
display_shoes = 1
|
||||
if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit)))
|
||||
msg += wound_flavor_text["right leg"]
|
||||
else if(is_bleeding["right leg"])
|
||||
display_chest = 1
|
||||
if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes)))
|
||||
msg += wound_flavor_text["right foot"]
|
||||
else if(is_bleeding["right foot"])
|
||||
display_shoes = 1
|
||||
|
||||
if(display_chest)
|
||||
msg += "<span class='danger'>[src] [T.has] blood soaking through from under [T.his] clothing!</span>\n"
|
||||
if(display_shoes)
|
||||
msg += "<span class='danger'>[src] [T.has] blood running from [T.his] shoes!</span>\n"
|
||||
if(display_gloves)
|
||||
msg += "<span class='danger'>[src] [T.has] blood running from under [T.his] gloves!</span>\n"
|
||||
*/
|
||||
|
||||
for(var/limb in wound_flavor_text)
|
||||
msg += wound_flavor_text[limb]
|
||||
is_bleeding[limb] = null
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
stat("Tank Pressure", internal.air_contents.return_pressure())
|
||||
stat("Distribution Pressure", internal.distribute_pressure)
|
||||
|
||||
var/obj/item/organ/xenos/plasmavessel/P = internal_organs_by_name["plasma vessel"]
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA]
|
||||
if(P)
|
||||
stat(null, "Phoron Stored: [P.stored_plasma]/[P.max_plasma]")
|
||||
|
||||
@@ -145,26 +145,12 @@
|
||||
var/weapon_message = "Explosive Blast"
|
||||
|
||||
for(var/obj/item/organ/external/temp in organs)
|
||||
switch(temp.name)
|
||||
if("head")
|
||||
switch(temp.organ_tag)
|
||||
if(BP_HEAD)
|
||||
update |= temp.take_damage(b_loss * 0.2, f_loss * 0.2, used_weapon = weapon_message)
|
||||
if("chest")
|
||||
if(BP_TORSO)
|
||||
update |= temp.take_damage(b_loss * 0.4, f_loss * 0.4, used_weapon = weapon_message)
|
||||
if("l_arm")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("r_arm")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("l_leg")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("r_leg")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("r_foot")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("l_foot")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("r_arm")
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if("l_arm")
|
||||
else
|
||||
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
|
||||
if(update) UpdateDamageIcon()
|
||||
|
||||
@@ -174,7 +160,7 @@
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)
|
||||
L.imp_in = M
|
||||
L.implanted = 1
|
||||
var/obj/item/organ/external/affected = M.organs_by_name["head"]
|
||||
var/obj/item/organ/external/affected = M.organs_by_name[BP_HEAD]
|
||||
affected.implants += L
|
||||
L.part = affected
|
||||
L.implanted(src)
|
||||
@@ -318,7 +304,7 @@
|
||||
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name()
|
||||
var/obj/item/organ/external/head = get_organ("head")
|
||||
var/obj/item/organ/external/head = get_organ(BP_HEAD)
|
||||
if(!head || head.disfigured || (head.status & ORGAN_DESTROYED) || !real_name || (HUSK in mutations) ) //disfigured. use id-name if possible
|
||||
return "Unknown"
|
||||
return real_name
|
||||
@@ -655,7 +641,7 @@
|
||||
///Returns a number between -1 to 2
|
||||
/mob/living/carbon/human/eyecheck()
|
||||
|
||||
var/obj/item/organ/I = internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/I = internal_organs_by_name[O_EYES]
|
||||
if(!I || I.status & (ORGAN_CUT_AWAY|ORGAN_DESTROYED))
|
||||
return 2
|
||||
|
||||
@@ -742,7 +728,7 @@
|
||||
|
||||
/mob/living/carbon/human/check_has_mouth()
|
||||
// Todo, check stomach organ when implemented.
|
||||
var/obj/item/organ/external/head/H = get_organ("head")
|
||||
var/obj/item/organ/external/head/H = get_organ(BP_HEAD)
|
||||
if(!H || !H.can_intake_reagents)
|
||||
return 0
|
||||
return 1
|
||||
@@ -908,7 +894,7 @@
|
||||
|
||||
/mob/living/carbon/human/revive()
|
||||
|
||||
if(should_have_organ("heart"))
|
||||
if(should_have_organ(O_HEART))
|
||||
vessel.add_reagent("blood",560-vessel.total_volume)
|
||||
fixblood()
|
||||
|
||||
@@ -916,7 +902,7 @@
|
||||
restore_all_organs() // Reapply robotics/amputated status from preferences.
|
||||
|
||||
if(!client || !key) //Don't boot out anyone already in the mob.
|
||||
for (var/obj/item/organ/brain/H in world)
|
||||
for (var/obj/item/organ/internal/brain/H in world)
|
||||
if(H.brainmob)
|
||||
if(H.brainmob.real_name == src.real_name)
|
||||
if(H.brainmob.mind)
|
||||
@@ -935,11 +921,11 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/proc/is_lung_ruptured()
|
||||
var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"]
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
return L && L.is_bruised()
|
||||
|
||||
/mob/living/carbon/human/proc/rupture_lung()
|
||||
var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"]
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
|
||||
if(L && !L.is_bruised())
|
||||
src.custom_pain("You feel a stabbing pain in your chest!", 1)
|
||||
@@ -1028,7 +1014,7 @@
|
||||
for(var/obj/item/O in organ.implants)
|
||||
if(!istype(O,/obj/item/weapon/implant) && prob(5)) //Moving with things stuck in you could be bad.
|
||||
// All kinds of embedded objects cause bleeding.
|
||||
if(!can_feel_pain(organ.limb_name))
|
||||
if(!can_feel_pain(organ.organ_tag))
|
||||
src << "<span class='warning'>You feel [O] moving inside your [organ.name].</span>"
|
||||
else
|
||||
var/msg = pick( \
|
||||
@@ -1038,7 +1024,7 @@
|
||||
src << msg
|
||||
|
||||
organ.take_damage(rand(1,3), 0, 0)
|
||||
if(!(organ.status & ORGAN_ROBOT) && !should_have_organ("heart")) //There is no blood in protheses.
|
||||
if(!(organ.status & ORGAN_ROBOT) && !should_have_organ(O_HEART)) //There is no blood in protheses.
|
||||
organ.status |= ORGAN_BLEEDING
|
||||
src.adjustToxLoss(rand(1,3))
|
||||
|
||||
@@ -1140,6 +1126,8 @@
|
||||
qdel(hud_used)
|
||||
hud_used = new /datum/hud(src)
|
||||
|
||||
full_prosthetic = null
|
||||
|
||||
if(species)
|
||||
return 1
|
||||
else
|
||||
@@ -1205,7 +1193,7 @@
|
||||
|
||||
if(!target_zone)
|
||||
if(!user)
|
||||
target_zone = pick("chest","chest","chest","left leg","right leg","left arm", "right arm", "head")
|
||||
target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
|
||||
else
|
||||
target_zone = user.zone_sel.selecting
|
||||
|
||||
@@ -1219,7 +1207,7 @@
|
||||
fail_msg = "That limb is robotic."
|
||||
else
|
||||
switch(target_zone)
|
||||
if("head")
|
||||
if(BP_HEAD)
|
||||
if(head && head.item_flags & THICKMATERIAL)
|
||||
. = 0
|
||||
else
|
||||
@@ -1227,7 +1215,7 @@
|
||||
. = 0
|
||||
if(!. && error_msg && user)
|
||||
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."
|
||||
fail_msg = "There is no exposed flesh or thin material [target_zone == BP_HEAD ? "on their head" : "on their body"] to inject into."
|
||||
user << "<span class='alert'>[fail_msg]</span>"
|
||||
|
||||
/mob/living/carbon/human/print_flavor_text(var/shrink = 1)
|
||||
@@ -1285,15 +1273,15 @@
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/has_brain()
|
||||
if(internal_organs_by_name["brain"])
|
||||
var/obj/item/organ/brain = internal_organs_by_name["brain"]
|
||||
if(internal_organs_by_name[O_BRAIN])
|
||||
var/obj/item/organ/brain = internal_organs_by_name[O_BRAIN]
|
||||
if(brain && istype(brain))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/has_eyes()
|
||||
if(internal_organs_by_name["eyes"])
|
||||
var/obj/item/organ/eyes = internal_organs_by_name["eyes"]
|
||||
if(internal_organs_by_name[O_EYES])
|
||||
var/obj/item/organ/eyes = internal_organs_by_name[O_EYES]
|
||||
if(eyes && istype(eyes) && !(eyes.status & ORGAN_CUT_AWAY))
|
||||
return 1
|
||||
return 0
|
||||
@@ -1402,10 +1390,10 @@
|
||||
/mob/living/carbon/human/should_have_organ(var/organ_check)
|
||||
|
||||
var/obj/item/organ/external/affecting
|
||||
if(organ_check in list("heart","lungs"))
|
||||
affecting = organs_by_name["chest"]
|
||||
else if(organ_check in list("liver","kidneys"))
|
||||
affecting = organs_by_name["groin"]
|
||||
if(organ_check in list(O_HEART, O_LUNGS))
|
||||
affecting = organs_by_name[BP_TORSO]
|
||||
else if(organ_check in list(O_LIVER, O_KIDNEYS))
|
||||
affecting = organs_by_name[BP_GROIN]
|
||||
|
||||
if(affecting && (affecting.status & ORGAN_ROBOT))
|
||||
return 0
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
*/
|
||||
if(prob(80))
|
||||
hit_zone = ran_zone(hit_zone)
|
||||
if(prob(15) && hit_zone != "chest") // Missed!
|
||||
if(prob(15) && hit_zone != BP_TORSO) // Missed!
|
||||
if(!src.lying)
|
||||
attack_message = "[H] attempted to strike [src], but missed!"
|
||||
else
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(should_have_organ("brain"))
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
sponge.take_damage(amount)
|
||||
brainloss = sponge.damage
|
||||
@@ -43,7 +43,7 @@
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(should_have_organ("brain"))
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
sponge.damage = min(max(amount, 0),(maxHealth*2))
|
||||
brainloss = sponge.damage
|
||||
@@ -57,7 +57,7 @@
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
if(should_have_organ("brain"))
|
||||
var/obj/item/organ/brain/sponge = internal_organs_by_name["brain"]
|
||||
var/obj/item/organ/internal/brain/sponge = internal_organs_by_name["brain"]
|
||||
if(sponge)
|
||||
brainloss = min(sponge.damage,maxHealth*2)
|
||||
else
|
||||
@@ -189,19 +189,19 @@
|
||||
|
||||
// Defined here solely to take species flags into account without having to recast at mob/living level.
|
||||
/mob/living/carbon/human/getOxyLoss()
|
||||
if(!should_have_organ("lungs"))
|
||||
if(!should_have_organ(O_LUNGS))
|
||||
oxyloss = 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/adjustOxyLoss(var/amount)
|
||||
if(!should_have_organ("lungs"))
|
||||
if(!should_have_organ(O_LUNGS))
|
||||
oxyloss = 0
|
||||
else
|
||||
amount = amount*species.oxy_mod
|
||||
..(amount)
|
||||
|
||||
/mob/living/carbon/human/setOxyLoss(var/amount)
|
||||
if(!should_have_organ("lungs"))
|
||||
if(!should_have_organ(O_LUNGS))
|
||||
oxyloss = 0
|
||||
else
|
||||
..()
|
||||
@@ -321,7 +321,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
|
||||
This function restores the subjects blood to max.
|
||||
*/
|
||||
/mob/living/carbon/human/proc/restore_blood()
|
||||
if(should_have_organ("heart"))
|
||||
if(should_have_organ(O_HEART))
|
||||
var/blood_volume = vessel.get_reagent_amount("blood")
|
||||
vessel.add_reagent("blood",560.0-blood_volume)
|
||||
|
||||
@@ -345,9 +345,10 @@ This function restores all organs.
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_organ(var/zone)
|
||||
if(!zone) zone = "chest"
|
||||
if (zone in list( "eyes", "mouth" ))
|
||||
zone = "head"
|
||||
if(!zone)
|
||||
zone = BP_TORSO
|
||||
else if (zone in list( O_EYES, O_MOUTH ))
|
||||
zone = BP_HEAD
|
||||
return organs_by_name[zone]
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null)
|
||||
|
||||
@@ -44,11 +44,11 @@ emp_act
|
||||
agony_amount *= siemens_coeff
|
||||
|
||||
switch (def_zone)
|
||||
if("head")
|
||||
if(BP_HEAD)
|
||||
agony_amount *= 1.50
|
||||
if("l_hand", "r_hand")
|
||||
if(BP_L_HAND, BP_R_HAND)
|
||||
var/c_hand
|
||||
if (def_zone == "l_hand")
|
||||
if (def_zone == BP_L_HAND)
|
||||
c_hand = l_hand
|
||||
else
|
||||
c_hand = r_hand
|
||||
@@ -233,7 +233,7 @@ emp_act
|
||||
//Apply blood
|
||||
if(bloody)
|
||||
switch(hit_area)
|
||||
if("head")
|
||||
if(BP_HEAD)
|
||||
if(wear_mask)
|
||||
wear_mask.add_blood(src)
|
||||
update_inv_wear_mask(0)
|
||||
@@ -243,7 +243,7 @@ emp_act
|
||||
if(glasses && prob(33))
|
||||
glasses.add_blood(src)
|
||||
update_inv_glasses(0)
|
||||
if("chest")
|
||||
if(BP_TORSO)
|
||||
bloody_body(src)
|
||||
|
||||
if(Iforce > 10 || Iforce >= 5 && prob(33))
|
||||
@@ -285,7 +285,7 @@ emp_act
|
||||
var/mob/living/L = O.thrower
|
||||
zone = check_zone(L.zone_sel.selecting)
|
||||
else
|
||||
zone = ran_zone("chest",75) //Hits a random part of the body, geared towards the chest
|
||||
zone = ran_zone(BP_TORSO,75) //Hits a random part of the body, geared towards the chest
|
||||
|
||||
//check if we hit
|
||||
var/miss_chance = 15
|
||||
|
||||
@@ -82,8 +82,9 @@
|
||||
|
||||
var/list/flavor_texts = list()
|
||||
var/gunshot_residue
|
||||
var/pulling_punches // Are you trying not to hurt your opponent?
|
||||
var/full_prosthetic // We are a robutt.
|
||||
var/pulling_punches // Are you trying not to hurt your opponent?
|
||||
var/full_prosthetic // We are a robutt.
|
||||
var/robolimb_count = 0 // Number of robot limbs.
|
||||
|
||||
mob_bump_flag = HUMAN
|
||||
mob_push_flags = ~HEAVY
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
tally += wear_suit.slowdown
|
||||
|
||||
if(istype(buckled, /obj/structure/bed/chair/wheelchair))
|
||||
for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm"))
|
||||
for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
tally += 4
|
||||
@@ -38,7 +38,7 @@
|
||||
if(shoes)
|
||||
tally += shoes.slowdown
|
||||
|
||||
for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg"))
|
||||
for(var/organ_name in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/E = get_organ(organ_name)
|
||||
if(!E || (E.status & ORGAN_DESTROYED))
|
||||
tally += 4
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/carbon/human/proc/update_eyes()
|
||||
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = internal_organs_by_name[O_EYES]
|
||||
if(eyes)
|
||||
eyes.update_colour()
|
||||
regenerate_icons()
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
// You should not be able to pick anything up, but stranger things have happened.
|
||||
if(l_hand)
|
||||
for(var/limb_tag in list("l_hand","l_arm"))
|
||||
for(var/limb_tag in list(BP_L_HAND, BP_L_ARM))
|
||||
var/obj/item/organ/external/E = get_organ(limb_tag)
|
||||
if(!E)
|
||||
visible_message("<span class='danger'>Lacking a functioning left hand, \the [src] drops \the [l_hand].</span>")
|
||||
@@ -121,7 +121,7 @@
|
||||
break
|
||||
|
||||
if(r_hand)
|
||||
for(var/limb_tag in list("r_hand","r_arm"))
|
||||
for(var/limb_tag in list(BP_R_HAND, BP_R_ARM))
|
||||
var/obj/item/organ/external/E = get_organ(limb_tag)
|
||||
if(!E)
|
||||
visible_message("<span class='danger'>Lacking a functioning right hand, \the [src] drops \the [r_hand].</span>")
|
||||
|
||||
@@ -45,44 +45,44 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
/mob/living/carbon/human/proc/has_organ_for_slot(slot)
|
||||
switch(slot)
|
||||
if(slot_back)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_wear_mask)
|
||||
return has_organ("head")
|
||||
return has_organ(BP_HEAD)
|
||||
if(slot_handcuffed)
|
||||
return has_organ("l_hand") && has_organ("r_hand")
|
||||
return has_organ(BP_L_HAND) && has_organ(BP_R_HAND)
|
||||
if(slot_legcuffed)
|
||||
return has_organ("l_leg") && has_organ("r_leg")
|
||||
return has_organ(BP_L_FOOT) && has_organ(BP_R_FOOT)
|
||||
if(slot_l_hand)
|
||||
return has_organ("l_hand")
|
||||
return has_organ(BP_L_HAND)
|
||||
if(slot_r_hand)
|
||||
return has_organ("r_hand")
|
||||
return has_organ(BP_R_HAND)
|
||||
if(slot_belt)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_wear_id)
|
||||
// the only relevant check for this is the uniform check
|
||||
return 1
|
||||
if(slot_l_ear)
|
||||
return has_organ("head")
|
||||
return has_organ(BP_HEAD)
|
||||
if(slot_r_ear)
|
||||
return has_organ("head")
|
||||
return has_organ(BP_HEAD)
|
||||
if(slot_glasses)
|
||||
return has_organ("head")
|
||||
return has_organ(BP_HEAD)
|
||||
if(slot_gloves)
|
||||
return has_organ("l_hand") || has_organ("r_hand")
|
||||
return has_organ(BP_L_HAND) || has_organ(BP_R_HAND)
|
||||
if(slot_head)
|
||||
return has_organ("head")
|
||||
return has_organ(BP_HEAD)
|
||||
if(slot_shoes)
|
||||
return has_organ("r_foot") || has_organ("l_foot")
|
||||
return has_organ(BP_L_FOOT) || has_organ(BP_R_FOOT)
|
||||
if(slot_wear_suit)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_w_uniform)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_l_store)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_r_store)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_s_store)
|
||||
return has_organ("chest")
|
||||
return has_organ(BP_TORSO)
|
||||
if(slot_in_backpack)
|
||||
return 1
|
||||
if(slot_tie)
|
||||
|
||||
@@ -255,12 +255,7 @@
|
||||
|
||||
if (radiation)
|
||||
|
||||
// TODO.
|
||||
if(isSynthetic())
|
||||
radiation = 0
|
||||
return
|
||||
|
||||
var/obj/item/organ/diona/nutrients/rad_organ = locate() in internal_organs
|
||||
var/obj/item/organ/internal/diona/nutrients/rad_organ = locate() in internal_organs
|
||||
if(rad_organ && !rad_organ.is_broken())
|
||||
var/rads = radiation/25
|
||||
radiation -= rads
|
||||
@@ -280,34 +275,36 @@
|
||||
if (radiation > 50)
|
||||
damage = 1
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
radiation -= 5 * RADIATION_SPEED_COEFFICIENT
|
||||
src << "<span class='warning'>You feel weak.</span>"
|
||||
Weaken(3)
|
||||
if(!lying)
|
||||
emote("collapse")
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == "Human") //apes go bald
|
||||
if((h_style != "Bald" || f_style != "Shaved" ))
|
||||
src << "<span class='warning'>Your hair falls out.</span>"
|
||||
h_style = "Bald"
|
||||
f_style = "Shaved"
|
||||
update_hair()
|
||||
if(!isSynthetic())
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
radiation -= 5 * RADIATION_SPEED_COEFFICIENT
|
||||
src << "<span class='warning'>You feel weak.</span>"
|
||||
Weaken(3)
|
||||
if(!lying)
|
||||
emote("collapse")
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == "Human") //apes go bald
|
||||
if((h_style != "Bald" || f_style != "Shaved" ))
|
||||
src << "<span class='warning'>Your hair falls out.</span>"
|
||||
h_style = "Bald"
|
||||
f_style = "Shaved"
|
||||
update_hair()
|
||||
|
||||
if (radiation > 75)
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
damage = 3
|
||||
if(prob(5))
|
||||
take_overall_damage(0, 5 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns")
|
||||
if(prob(1))
|
||||
src << "<span class='warning'>You feel strange!</span>"
|
||||
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
|
||||
emote("gasp")
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
if(!isSynthetic())
|
||||
if(prob(5))
|
||||
take_overall_damage(0, 5 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns")
|
||||
if(prob(1))
|
||||
src << "<span class='warning'>You feel strange!</span>"
|
||||
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
|
||||
emote("gasp")
|
||||
|
||||
if(damage)
|
||||
damage *= species.radiation_mod
|
||||
damage *= isSynthetic() ? 0.5 : species.radiation_mod
|
||||
adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT)
|
||||
updatehealth()
|
||||
if(organs.len)
|
||||
if(!isSynthetic() && organs.len)
|
||||
var/obj/item/organ/external/O = pick(organs)
|
||||
if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage)
|
||||
|
||||
@@ -371,8 +368,8 @@
|
||||
var/safe_pressure_min = 16 // Minimum safe partial pressure of breathable gas in kPa
|
||||
|
||||
// Lung damage increases the minimum safe pressure.
|
||||
if(should_have_organ("lungs"))
|
||||
var/obj/item/organ/lungs/L = internal_organs_by_name["lungs"]
|
||||
if(should_have_organ(O_LUNGS))
|
||||
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
|
||||
if(isnull(L))
|
||||
safe_pressure_min = INFINITY //No lungs, how are you breathing?
|
||||
else if(L.is_broken())
|
||||
@@ -525,24 +522,24 @@
|
||||
|
||||
if(breath.temperature >= species.heat_level_1)
|
||||
if(breath.temperature < species.heat_level_2)
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
else if(breath.temperature < species.heat_level_3)
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
else
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
|
||||
apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Heat")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
|
||||
else if(breath.temperature <= species.cold_level_1)
|
||||
if(breath.temperature > species.cold_level_2)
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
else if(breath.temperature > species.cold_level_3)
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
else
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
|
||||
apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, BP_HEAD, used_weapon = "Excessive Cold")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
|
||||
|
||||
@@ -691,13 +688,19 @@
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human/proc/stabilize_body_temperature()
|
||||
if (species.passive_temp_gain) // We produce heat naturally.
|
||||
// We produce heat naturally.
|
||||
if (species.passive_temp_gain)
|
||||
bodytemperature += species.passive_temp_gain
|
||||
|
||||
// Robolimbs cause overheating too.
|
||||
if(robolimb_count)
|
||||
bodytemperature += round(robolimb_count/2)
|
||||
|
||||
var/body_temperature_difference = species.body_temperature - bodytemperature
|
||||
|
||||
if (abs(body_temperature_difference) < 0.5)
|
||||
return //fuck this precision
|
||||
|
||||
if (on_fire)
|
||||
return //too busy for pesky convection
|
||||
|
||||
@@ -862,7 +865,7 @@
|
||||
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
var/obj/item/organ/diona/node/light_organ = locate() in internal_organs
|
||||
var/obj/item/organ/internal/diona/node/light_organ = locate() in internal_organs
|
||||
|
||||
if(!isSynthetic())
|
||||
if(light_organ && !light_organ.is_broken())
|
||||
@@ -1548,7 +1551,7 @@
|
||||
/mob/living/carbon/human/proc/handle_pulse()
|
||||
if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load)
|
||||
|
||||
if(!internal_organs_by_name["heart"])
|
||||
if(!internal_organs_by_name[O_HEART])
|
||||
return PULSE_NONE //No blood, no pulse.
|
||||
|
||||
if(stat == DEAD)
|
||||
@@ -1582,7 +1585,7 @@
|
||||
if(pulse == PULSE_NONE)
|
||||
return
|
||||
|
||||
var/obj/item/organ/heart/H = internal_organs_by_name["heart"]
|
||||
var/obj/item/organ/internal/heart/H = internal_organs_by_name[O_HEART]
|
||||
|
||||
if(!H || (H.status & ORGAN_ROBOT))
|
||||
return
|
||||
|
||||
@@ -45,28 +45,28 @@
|
||||
)
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/head/vox),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/vox),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes,
|
||||
"stack" = /obj/item/organ/stack/vox
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
O_EYES = /obj/item/organ/internal/eyes,
|
||||
"stack" = /obj/item/organ/internal/stack/vox
|
||||
)
|
||||
|
||||
/datum/species/vox/get_random_name(var/gender)
|
||||
@@ -108,12 +108,12 @@
|
||||
|
||||
// Pariahs have no stack.
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/pariah_brain,
|
||||
"eyes" = /obj/item/organ/eyes
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/pariah_brain,
|
||||
O_EYES = /obj/item/organ/internal/eyes
|
||||
)
|
||||
flags = IS_RESTRICTED | NO_SCAN | HAS_EYE_COLOR
|
||||
|
||||
|
||||
@@ -58,8 +58,6 @@
|
||||
|
||||
// Death vars.
|
||||
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
|
||||
var/gibber_type = /obj/effect/gibspawner/human
|
||||
var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
var/remains_type = /obj/effect/decal/remains/xeno
|
||||
var/gibbed_anim = "gibbed-h"
|
||||
var/dusted_anim = "dust-h"
|
||||
@@ -120,28 +118,28 @@
|
||||
var/rarity_value = 1 // Relative rarity/collector value for this species.
|
||||
// Determines the organs that the species spawns with and
|
||||
var/list/has_organ = list( // which required-organ checks are conducted.
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"appendix" = /obj/item/organ/appendix,
|
||||
"eyes" = /obj/item/organ/eyes
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
O_APPENDIX = /obj/item/organ/internal/appendix,
|
||||
O_EYES = /obj/item/organ/internal/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),
|
||||
"head" = list("path" = /obj/item/organ/external/head),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
// Bump vars
|
||||
@@ -158,8 +156,8 @@
|
||||
hud = new()
|
||||
|
||||
//If the species has eyes, they are the default vision organ
|
||||
if(!vision_organ && has_organ["eyes"])
|
||||
vision_organ = "eyes"
|
||||
if(!vision_organ && has_organ[O_EYES])
|
||||
vision_organ = O_EYES
|
||||
|
||||
unarmed_attacks = list()
|
||||
for(var/u_type in unarmed_types)
|
||||
@@ -186,13 +184,13 @@
|
||||
return ((H && H.isSynthetic()) ? "flashing a 'system offline' glyph on their monitor" : show_ssd)
|
||||
|
||||
/datum/species/proc/get_blood_colour(var/mob/living/carbon/human/H)
|
||||
return ((H && H.isSynthetic()) ? "#1F181F" : blood_color)
|
||||
return ((H && H.isSynthetic()) ? SYNTH_BLOOD_COLOUR : blood_color)
|
||||
|
||||
/datum/species/proc/get_virus_immune(var/mob/living/carbon/human/H)
|
||||
return ((H && H.isSynthetic()) ? 1 : virus_immune)
|
||||
|
||||
/datum/species/proc/get_flesh_colour(var/mob/living/carbon/human/H)
|
||||
return ((H && H.isSynthetic()) ? "#575757" : flesh_color)
|
||||
return ((H && H.isSynthetic()) ? SYNTH_FLESH_COLOUR : flesh_color)
|
||||
|
||||
/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type)
|
||||
|
||||
@@ -269,7 +267,10 @@
|
||||
for(var/name in H.organs_by_name)
|
||||
H.organs |= H.organs_by_name[name]
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
for(var/name in H.internal_organs_by_name)
|
||||
H.internal_organs |= H.internal_organs_by_name[name]
|
||||
|
||||
for(var/obj/item/organ/O in (H.organs|H.internal_organs))
|
||||
O.owner = H
|
||||
|
||||
/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
return 0
|
||||
|
||||
switch(zone)
|
||||
if("head", "mouth", "eyes")
|
||||
if(BP_HEAD, O_MOUTH, O_EYES)
|
||||
// ----- HEAD ----- //
|
||||
switch(attack_damage)
|
||||
if(1 to 2)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
flesh_color = "#137E8F"
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/golem
|
||||
"brain" = /obj/item/organ/internal/brain/golem
|
||||
)
|
||||
|
||||
death_message = "becomes completely motionless..."
|
||||
|
||||
@@ -38,12 +38,12 @@
|
||||
|
||||
toxins_mod = 1.1
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"lungs" = /obj/item/organ/lungs,
|
||||
"liver" = /obj/item/organ/liver,
|
||||
"kidneys" = /obj/item/organ/kidneys,
|
||||
"brain" = /obj/item/organ/brain,
|
||||
"eyes" = /obj/item/organ/eyes
|
||||
O_HEART = /obj/item/organ/heart,
|
||||
O_LUNGS = /obj/item/organ/lungs,
|
||||
O_LIVER = /obj/item/organ/liver,
|
||||
O_KIDNEYS = /obj/item/organ/kidneys,
|
||||
O_BRAIN = /obj/item/organ/brain,
|
||||
O_EYES = /obj/item/organ/eyes
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
@@ -39,17 +39,17 @@
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/head/no_eyes),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
death_message = "rapidly loses cohesion, splattering across the ground..."
|
||||
|
||||
has_organ = list(
|
||||
"brain" = /obj/item/organ/brain/slime
|
||||
"brain" = /obj/item/organ/internal/brain/slime
|
||||
)
|
||||
|
||||
breath_type = null
|
||||
@@ -31,17 +31,17 @@
|
||||
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/unbreakable),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/unbreakable),
|
||||
"head" = list("path" = /obj/item/organ/external/head/unbreakable),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/unbreakable),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/unbreakable),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/unbreakable),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/unbreakable),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/unbreakable),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/unbreakable),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/unbreakable),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/unbreakable)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/unbreakable),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm/unbreakable),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/unbreakable),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg/unbreakable),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/unbreakable),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand/unbreakable),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/unbreakable),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/unbreakable),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/unbreakable)
|
||||
)
|
||||
|
||||
/datum/species/slime/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -152,17 +152,17 @@
|
||||
reagent_tag = IS_SKRELL
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/head/skrell),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/skrell),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
/datum/species/diona
|
||||
@@ -190,26 +190,26 @@
|
||||
water and other radiation."
|
||||
|
||||
has_organ = list(
|
||||
"nutrient channel" = /obj/item/organ/diona/nutrients,
|
||||
"neural strata" = /obj/item/organ/diona/strata,
|
||||
"response node" = /obj/item/organ/diona/node,
|
||||
"gas bladder" = /obj/item/organ/diona/bladder,
|
||||
"polyp segment" = /obj/item/organ/diona/polyp,
|
||||
"anchoring ligament" = /obj/item/organ/diona/ligament
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
|
||||
O_STRATA = /obj/item/organ/internal/diona/strata,
|
||||
O_RESPONSE = /obj/item/organ/internal/diona/node,
|
||||
O_GBLADDER = /obj/item/organ/internal/diona/bladder,
|
||||
O_POLYP = /obj/item/organ/internal/diona/polyp,
|
||||
O_ANCHOR = /obj/item/organ/internal/diona/ligament
|
||||
)
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/diona/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/diona/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/head/no_eyes/diona),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/diona/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/diona/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/diona/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/diona/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/diona/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/diona/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes/diona),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/diona/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/diona/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/diona/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/diona/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/diona/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/diona/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/diona/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/diona/foot/right)
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
@@ -260,9 +260,13 @@
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(S)
|
||||
|
||||
if(H.isSynthetic())
|
||||
H.visible_message("<span class='danger'>\The [H] collapses into parts, revealing a solitary diona nymph at the core.</span>")
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/alien/diona/D in H.contents)
|
||||
if(D.client)
|
||||
D.loc = H.loc
|
||||
D.forceMove(get_turf(H))
|
||||
else
|
||||
qdel(D)
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ Des: Removes all infection images from aliens and places an infection image on a
|
||||
|
||||
for(var/mob/living/carbon/alien in player_list)
|
||||
|
||||
if(!locate(/obj/item/organ/xenos/hivenode) in alien.internal_organs)
|
||||
if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs)
|
||||
continue
|
||||
|
||||
if(alien.client)
|
||||
@@ -130,7 +130,7 @@ Des: Checks if the passed mob (C) is infected with the alien egg, then gives eac
|
||||
|
||||
for(var/mob/living/carbon/alien in player_list)
|
||||
|
||||
if(!locate(/obj/item/organ/xenos/hivenode) in alien.internal_organs)
|
||||
if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs)
|
||||
continue
|
||||
|
||||
if(alien.client)
|
||||
@@ -149,7 +149,7 @@ Des: Removes the alien infection image from all aliens in the world located in p
|
||||
|
||||
for(var/mob/living/carbon/alien in player_list)
|
||||
|
||||
if(!locate(/obj/item/organ/xenos/hivenode) in alien.internal_organs)
|
||||
if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs)
|
||||
continue
|
||||
|
||||
if(alien.client)
|
||||
|
||||
@@ -110,7 +110,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(istype(C) && locate(/obj/item/organ/xenos/hivenode) in C.internal_organs)
|
||||
if(istype(C) && locate(/obj/item/organ/internal/xenos/hivenode) in C.internal_organs)
|
||||
return
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(istype(C) && locate(/obj/item/organ/xenos/hivenode) in C.internal_organs)
|
||||
if(istype(C) && locate(/obj/item/organ/internal/xenos/hivenode) in C.internal_organs)
|
||||
return 0
|
||||
|
||||
if(ishuman(C))
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
/mob/living/carbon/human/proc/gain_plasma(var/amount)
|
||||
|
||||
var/obj/item/organ/xenos/plasmavessel/I = internal_organs_by_name["plasma vessel"]
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/I = internal_organs_by_name[O_PLASMA]
|
||||
if(!istype(I)) return
|
||||
|
||||
if(amount)
|
||||
@@ -20,13 +20,13 @@
|
||||
|
||||
/mob/living/carbon/human/proc/check_alien_ability(var/cost,var/needs_foundation,var/needs_organ)
|
||||
|
||||
var/obj/item/organ/xenos/plasmavessel/P = internal_organs_by_name["plasma vessel"]
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA]
|
||||
if(!istype(P))
|
||||
src << "<span class='danger'>Your plasma vessel has been removed!</span>"
|
||||
return
|
||||
|
||||
if(needs_organ)
|
||||
var/obj/item/organ/I = internal_organs_by_name[needs_organ]
|
||||
var/obj/item/organ/internal/I = internal_organs_by_name[needs_organ]
|
||||
if(!I)
|
||||
src << "<span class='danger'>Your [needs_organ] has been removed!</span>"
|
||||
return
|
||||
@@ -62,7 +62,7 @@
|
||||
src << "<span class='alium'>You need to be closer.</span>"
|
||||
return
|
||||
|
||||
var/obj/item/organ/xenos/plasmavessel/I = M.internal_organs_by_name["plasma vessel"]
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name[O_PLASMA]
|
||||
if(!istype(I))
|
||||
src << "<span class='alium'>Their plasma vessel is missing.</span>"
|
||||
return
|
||||
@@ -70,7 +70,7 @@
|
||||
var/amount = input("Amount:", "Transfer Plasma to [M]") as num
|
||||
if (amount)
|
||||
amount = abs(round(amount))
|
||||
if(check_alien_ability(amount,0,"plasma vessel"))
|
||||
if(check_alien_ability(amount,0,O_PLASMA))
|
||||
M.gain_plasma(amount)
|
||||
M << "<span class='alium'>[src] has transfered [amount] plasma to you.</span>"
|
||||
src << "<span class='alium'>You have transferred [amount] plasma to [M].</span>"
|
||||
@@ -92,7 +92,7 @@
|
||||
src << "There's already an egg here."
|
||||
return
|
||||
|
||||
if(check_alien_ability(75,1,"egg sac"))
|
||||
if(check_alien_ability(75,1,O_EGG))
|
||||
visible_message("<span class='alium'><B>[src] has laid an egg!</B></span>")
|
||||
new /obj/effect/alien/egg(loc)
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
set desc = "Plants some alien weeds"
|
||||
set category = "Abilities"
|
||||
|
||||
if(check_alien_ability(50,1,"resin spinner"))
|
||||
if(check_alien_ability(50,1,O_RESIN))
|
||||
visible_message("<span class='alium'><B>[src] has planted some alien weeds!</B></span>")
|
||||
new /obj/effect/alien/weeds/node(loc)
|
||||
return
|
||||
@@ -153,7 +153,7 @@
|
||||
src << "<span class='alium'>You cannot dissolve this object.</span>"
|
||||
return
|
||||
|
||||
if(check_alien_ability(200,0,"acid gland"))
|
||||
if(check_alien_ability(200,0,O_ACID))
|
||||
new /obj/effect/alien/acid(get_turf(O), O)
|
||||
visible_message("<span class='alium'><B>[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!</B></span>")
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
set desc = "Spits neurotoxin at someone, paralyzing them for a short time if they are not wearing protective gear."
|
||||
set category = "Abilities"
|
||||
|
||||
if(!check_alien_ability(50,0,"acid gland"))
|
||||
if(!check_alien_ability(50,0,O_ACID))
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
@@ -206,7 +206,7 @@
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
if(!check_alien_ability(75,1,"resin spinner"))
|
||||
if(!check_alien_ability(75,1,O_RESIN))
|
||||
return
|
||||
|
||||
visible_message("<span class='warning'><B>[src] vomits up a thick purple substance and begins to shape it!</B></span>", "<span class='alium'>You shape a [choice].</span>")
|
||||
|
||||
@@ -44,11 +44,11 @@
|
||||
vision_flags = SEE_SELF|SEE_MOBS
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"brain" = /obj/item/organ/brain/xeno,
|
||||
"plasma vessel" = /obj/item/organ/xenos/plasmavessel,
|
||||
"hive node" = /obj/item/organ/xenos/hivenode,
|
||||
"nutrient vessel" = /obj/item/organ/diona/nutrients
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/xeno,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
|
||||
)
|
||||
|
||||
bump_flag = ALIEN
|
||||
@@ -61,17 +61,17 @@
|
||||
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin),
|
||||
"head" = list("path" = /obj/item/organ/external/head/no_eyes),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
BP_TORSO = list("path" = /obj/item/organ/external/chest),
|
||||
BP_GROIN = list("path" = /obj/item/organ/external/groin),
|
||||
BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes),
|
||||
BP_L_ARM = list("path" = /obj/item/organ/external/arm),
|
||||
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
|
||||
BP_L_LEG = list("path" = /obj/item/organ/external/leg),
|
||||
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
|
||||
BP_L_HAND = list("path" = /obj/item/organ/external/hand),
|
||||
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
|
||||
BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
/datum/species/xenos/get_bodytype()
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T)
|
||||
if(!regenerate(H))
|
||||
var/obj/item/organ/xenos/plasmavessel/P = H.internal_organs_by_name["plasma vessel"]
|
||||
var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA]
|
||||
P.stored_plasma += weeds_plasma_rate
|
||||
P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma)
|
||||
..()
|
||||
@@ -172,13 +172,13 @@
|
||||
deform = 'icons/mob/human_races/xenos/r_xenos_drone.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"brain" = /obj/item/organ/brain/xeno,
|
||||
"plasma vessel" = /obj/item/organ/xenos/plasmavessel/queen,
|
||||
"acid gland" = /obj/item/organ/xenos/acidgland,
|
||||
"hive node" = /obj/item/organ/xenos/hivenode,
|
||||
"resin spinner" = /obj/item/organ/xenos/resinspinner,
|
||||
"nutrient vessel" = /obj/item/organ/diona/nutrients
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/xeno,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/queen,
|
||||
O_ACID = /obj/item/organ/internal/xenos/acidgland,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
|
||||
O_RESIN = /obj/item/organ/internal/xenos/resinspinner,
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
@@ -211,11 +211,11 @@
|
||||
deform = 'icons/mob/human_races/xenos/r_xenos_hunter.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"brain" = /obj/item/organ/brain/xeno,
|
||||
"plasma vessel" = /obj/item/organ/xenos/plasmavessel/hunter,
|
||||
"hive node" = /obj/item/organ/xenos/hivenode,
|
||||
"nutrient vessel" = /obj/item/organ/diona/nutrients
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/xeno,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/hunter,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
@@ -239,12 +239,12 @@
|
||||
deform = 'icons/mob/human_races/xenos/r_xenos_sentinel.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"brain" = /obj/item/organ/brain/xeno,
|
||||
"plasma vessel" = /obj/item/organ/xenos/plasmavessel/sentinel,
|
||||
"acid gland" = /obj/item/organ/xenos/acidgland,
|
||||
"hive node" = /obj/item/organ/xenos/hivenode,
|
||||
"nutrient vessel" = /obj/item/organ/diona/nutrients
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/xeno,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/sentinel,
|
||||
O_ACID = /obj/item/organ/internal/xenos/acidgland,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
@@ -271,14 +271,14 @@
|
||||
deform = 'icons/mob/human_races/xenos/r_xenos_queen.dmi'
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /obj/item/organ/heart,
|
||||
"brain" = /obj/item/organ/brain/xeno,
|
||||
"egg sac" = /obj/item/organ/xenos/eggsac,
|
||||
"plasma vessel" = /obj/item/organ/xenos/plasmavessel/queen,
|
||||
"acid gland" = /obj/item/organ/xenos/acidgland,
|
||||
"hive node" = /obj/item/organ/xenos/hivenode,
|
||||
"resin spinner" = /obj/item/organ/xenos/resinspinner,
|
||||
"nutrient vessel" = /obj/item/organ/diona/nutrients
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/xeno,
|
||||
O_EGG = /obj/item/organ/internal/xenos/eggsac,
|
||||
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/queen,
|
||||
O_ACID = /obj/item/organ/internal/xenos/acidgland,
|
||||
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
|
||||
O_RESIN = /obj/item/organ/internal/xenos/resinspinner,
|
||||
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
|
||||
)
|
||||
|
||||
inherent_verbs = list(
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
if(can_reach_splints)
|
||||
var/removed_splint
|
||||
for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
|
||||
for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM))
|
||||
var/obj/item/organ/external/o = get_organ(organ)
|
||||
if (o && o.status & ORGAN_SPLINTED)
|
||||
var/obj/item/W = new /obj/item/stack/medical/splint(get_turf(src), 1)
|
||||
|
||||
@@ -47,22 +47,22 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance
|
||||
switch(zone) // strong punches can have effects depending on where they hit
|
||||
if("head", "mouth", "eyes")
|
||||
if(BP_HEAD, O_EYES, O_MOUTH)
|
||||
// Induce blurriness
|
||||
target.visible_message("<span class='danger'>[target] looks momentarily disoriented.</span>", "<span class='danger'>You see stars.</span>")
|
||||
target.apply_effect(attack_damage*2, EYE_BLUR, armour)
|
||||
if("l_arm", "l_hand")
|
||||
if(BP_L_ARM, BP_L_HAND)
|
||||
if (target.l_hand)
|
||||
// Disarm left hand
|
||||
//Urist McAssistant dropped the macguffin with a scream just sounds odd.
|
||||
target.visible_message("<span class='danger'>\The [target.l_hand] was knocked right out of [target]'s grasp!</span>")
|
||||
target.drop_l_hand()
|
||||
if("r_arm", "r_hand")
|
||||
if(BP_R_ARM, BP_R_HAND)
|
||||
if (target.r_hand)
|
||||
// Disarm right hand
|
||||
target.visible_message("<span class='danger'>\The [target.r_hand] was knocked right out of [target]'s grasp!</span>")
|
||||
target.drop_r_hand()
|
||||
if("chest")
|
||||
if(BP_TORSO)
|
||||
if(!target.lying)
|
||||
var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target)))
|
||||
if(!T.density)
|
||||
@@ -73,7 +73,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
if(prob(50))
|
||||
target.set_dir(reverse_dir[target.dir])
|
||||
target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
|
||||
if("groin")
|
||||
if(BP_GROIN)
|
||||
target.visible_message("<span class='warning'>[target] looks like \he is in pain!</span>", "<span class='warning'>[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]</span>")
|
||||
target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
|
||||
if("l_leg", "l_foot", "r_leg", "r_foot")
|
||||
@@ -93,7 +93,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
playsound(user.loc, attack_sound, 25, 1, -1)
|
||||
|
||||
/datum/unarmed_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target)
|
||||
var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
|
||||
var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name[O_EYES]
|
||||
if(eyes)
|
||||
eyes.take_damage(rand(3,4), 1)
|
||||
user.visible_message("<span class='danger'>[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!</span>")
|
||||
@@ -114,7 +114,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return 0
|
||||
if (user == target && (zone == "head" || zone == "eyes" || zone == "mouth"))
|
||||
if (user == target && (zone == BP_HEAD || zone == O_EYES || zone == O_MOUTH))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
@@ -137,7 +137,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
|
||||
if(!target.lying)
|
||||
switch(zone)
|
||||
if("head", "mouth", "eyes")
|
||||
if(BP_HEAD, O_MOUTH, O_EYES)
|
||||
// ----- HEAD ----- //
|
||||
switch(attack_damage)
|
||||
if(1 to 2)
|
||||
@@ -177,7 +177,7 @@ var/global/list/sparring_attack_cache = list()
|
||||
if (user.legcuffed)
|
||||
return 0
|
||||
|
||||
if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", "groin")))
|
||||
if(!(zone in list("l_leg", "r_leg", "l_foot", "r_foot", BP_GROIN)))
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/E = user.organs_by_name["l_foot"]
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user