From 5d28405cc4fb880aab6399bfb9cb9221694f3d09 Mon Sep 17 00:00:00 2001 From: SoundScopes Date: Fri, 13 Feb 2015 12:52:05 +0000 Subject: [PATCH] Xenos are back --- aurora.dme | 30 ++- code/modules/admin/admin.dm | 1 - code/modules/admin/topic.dm | 10 +- code/modules/mob/living/carbon/alien/alien.dm | 3 +- .../carbon/alien/humanoid/alien_powers.dm | 2 +- .../carbon/alien/humanoid/caste/drone.dm | 10 +- .../living/carbon/alien/humanoid/humanoid.dm | 202 ++++++++++++++++++ .../mob/living/carbon/alien/humanoid/life.dm | 8 +- .../mob/living/carbon/alien/humanoid/queen.dm | 4 +- .../mob/living/carbon/alien/larva/life.dm | 3 +- .../mob/living/carbon/alien/larva/powers.dm | 6 +- code/modules/mob/living/carbon/alien/say.dm | 25 ++- .../carbon/human/alien/alien_species.dm | 2 +- code/modules/mob/transform_procs.dm | 12 +- 14 files changed, 285 insertions(+), 33 deletions(-) diff --git a/aurora.dme b/aurora.dme index 46605a07..24162a49 100644 --- a/aurora.dme +++ b/aurora.dme @@ -896,6 +896,7 @@ #include "code\modules\clothing\suits\storage.dm" #include "code\modules\clothing\suits\utility.dm" #include "code\modules\clothing\suits\wiz_robe.dm" +#include "code\modules\clothing\under\armbands.dm" #include "code\modules\clothing\under\chameleon.dm" #include "code\modules\clothing\under\color.dm" #include "code\modules\clothing\under\miscellaneous.dm" @@ -1039,6 +1040,7 @@ #include "code\modules\mob\living\carbon\alien\alien_damage.dm" #include "code\modules\mob\living\carbon\alien\death.dm" #include "code\modules\mob\living\carbon\alien\emote.dm" +#include "code\modules\mob\living\carbon\alien\life.dm" #include "code\modules\mob\living\carbon\alien\progression.dm" #include "code\modules\mob\living\carbon\alien\say.dm" #include "code\modules\mob\living\carbon\alien\update_icons.dm" @@ -1048,6 +1050,29 @@ #include "code\modules\mob\living\carbon\alien\diona\progression.dm" #include "code\modules\mob\living\carbon\alien\diona\say_understands.dm" #include "code\modules\mob\living\carbon\alien\diona\update_icons.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\death.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\emote.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\humanoid.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\inventory.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\life.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\login.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\queen.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\update_icons.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\caste\drone.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\caste\hunter.dm" +#include "code\modules\mob\living\carbon\alien\humanoid\caste\sentinel.dm" +#include "code\modules\mob\living\carbon\alien\larva\death.dm" +#include "code\modules\mob\living\carbon\alien\larva\emote.dm" +#include "code\modules\mob\living\carbon\alien\larva\inventory.dm" +#include "code\modules\mob\living\carbon\alien\larva\larva.dm" +#include "code\modules\mob\living\carbon\alien\larva\life.dm" +#include "code\modules\mob\living\carbon\alien\larva\login.dm" +#include "code\modules\mob\living\carbon\alien\larva\powers.dm" +#include "code\modules\mob\living\carbon\alien\larva\progression.dm" +#include "code\modules\mob\living\carbon\alien\larva\update_icons.dm" +#include "code\modules\mob\living\carbon\alien\special\alien_embryo.dm" +#include "code\modules\mob\living\carbon\alien\special\facehugger.dm" #include "code\modules\mob\living\carbon\brain\brain.dm" #include "code\modules\mob\living\carbon\brain\brain_item.dm" #include "code\modules\mob\living\carbon\brain\death.dm" @@ -1077,11 +1102,6 @@ #include "code\modules\mob\living\carbon\human\species.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" #include "code\modules\mob\living\carbon\human\whisper.dm" -#include "code\modules\mob\living\carbon\human\alien\alien.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_embryo.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_facehugger.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_powers.dm" -#include "code\modules\mob\living\carbon\human\alien\alien_species.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index abf02269..09bb8085 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -197,7 +197,6 @@ var/global/floorIsLava = 0 Wraith | Shade
-
Note from sound, Aliens are broken (Disabled)
Alien: Drone | Hunter | Queen | diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5fb09e15..3d2df43c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -292,11 +292,11 @@ switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) -// if("drone") M.change_mob_type( /mob/living/carbon/alien/humanoid/drone , null, null, delmob ) -// if("hunter") M.change_mob_type( /mob/living/carbon/alien/humanoid/hunter , null, null, delmob ) -// if("queen") M.change_mob_type( /mob/living/carbon/alien/humanoid/queen , null, null, delmob ) -// if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob ) -// if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) + if("drone") M.change_mob_type( /mob/living/carbon/alien/humanoid/drone , null, null, delmob ) + if("hunter") M.change_mob_type( /mob/living/carbon/alien/humanoid/hunter , null, null, delmob ) + if("queen") M.change_mob_type( /mob/living/carbon/alien/humanoid/queen , null, null, delmob ) + if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob ) + if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob ) if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob ) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index b5fd51f3..3aad8659 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -47,7 +47,8 @@ /mob/living/carbon/alien/Stat() ..() - stat(null, "Progress: [amount_grown]/[max_grown]") + if(!istype(src, /mob/living/carbon/alien/humanoid)) + stat(null, "Progress: [amount_grown]/[max_grown]") /mob/living/carbon/alien/restrained() return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 68488167..56b27791 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -6,7 +6,7 @@ These are general powers. Specific powers are stored under the appropriate alien Doesn't work on other aliens/AI.*/ -/mob/living/carbon/alien/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null. +/mob/living/carbon/alien/humanoid/proc/powerc(X, Y)//Y is optional, checks for weed planting. X can be null. if(stat) src << "\green You must be conscious to do this." return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index cf05e394..80308bf8 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -18,16 +18,16 @@ //Drones use the same base as generic humanoids. //Drone verbs -/mob/living/carbon/alien/humanoid/drone/verb/evolve() // -- TLE - set name = "Evolve (500)" - set desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." - set category = "Alien" +/mob/living/carbon/alien/humanoid/drone/evolve() // -- TLE +// set name = "Evolve (500)" +// set desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." +// set category = "Alien" if(powerc(500)) // Queen check var/no_queen = 1 for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list) - if(!Q.key && Q.brain_op_stage != 4) + if(!Q.key && !Q.has_brain()) continue no_queen = 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index fe202c86..13a6b9cd 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -7,8 +7,27 @@ var/obj/item/weapon/r_store = null var/obj/item/weapon/l_store = null var/caste = "" + var/move_delay_add = 0 // movement delay to add + var/heal_rate = 1 + var/plasma_rate = 5 + var/storedPlasma = 250 + var/max_plasma = 500 + speak_emote = list("hisses") + gender = NEUTER + dna = null + status_flags = CANPARALYSE|CANPUSH + + var/oxygen_alert = 0 + var/toxins_alert = 0 + var/fire_alert = 0 + + var/heat_protection = 0.5 + update_icon = 1 + language = "Xenomorph" + + //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/humanoid/New() var/datum/reagents/R = new/datum/reagents(100) @@ -17,6 +36,9 @@ if(name == "alien") name = text("alien ([rand(1, 1000)])") real_name = name + add_language("Hivemind") + verbs -= /mob/living/carbon/alien/verb/evolve + internal_organs += new /datum/organ/internal/xenos/hivenode(src) ..() //This is fine, works the same as a human @@ -421,3 +443,183 @@ In all, this is a lot like the monkey code. /N return +/mob/living/carbon/alien/humanoid/proc/getPlasma() + return storedPlasma + +/mob/living/carbon/alien/humanoid/adjustToxLoss(amount) + storedPlasma = min(max(storedPlasma + amount,0),max_plasma) //upper limit of max_plasma, lower limit of 0 + return + +/mob/living/carbon/alien/humanoid/adjustFireLoss(amount) // Weak to Fire + if(amount > 0) + ..(amount * 2) + else + ..(amount) + return + +/mob/living/carbon/alien/humanoid/updatehealth() + if(status_flags & GODMODE) + health = maxHealth + stat = CONSCIOUS + else + //oxyloss is only used for suicide + //toxloss isn't used for aliens, its actually used as alien powers!! + health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() + +/mob/living/carbon/alien/humanoid/handle_mutations_and_radiation() + + if(getFireLoss()) + if((COLD_RESISTANCE in mutations) || prob(5)) + adjustFireLoss(-1) + + // Aliens love radiation nom nom nom + if (radiation) + if (radiation > 100) + radiation = 100 + + if (radiation < 0) + radiation = 0 + + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) + adjustToxLoss(1) + + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + +/mob/living/carbon/alien/humanoid/handle_fire()//Aliens on fire code + if(..()) + return + bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! + return + + +/mob/living/carbon/alien/humanoid/Process_Spaceslipping() + return 0 // Don't slip in space. + +/mob/living/carbon/alien/humanoid/Stat() + + statpanel("Status") + stat(null, "Intent: [a_intent]") + stat(null, "Move Mode: [m_intent]") + + ..() + + if (client.statpanel == "Status") + stat(null, "Plasma Stored: [getPlasma()]/[max_plasma]") + + if(emergency_shuttle) + var/eta_status = emergency_shuttle.get_status_panel_eta() + if(eta_status) + stat(null, eta_status) + +/mob/living/carbon/alien/humanoid/Stun(amount) + if(status_flags & CANSTUN) + stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun + else + // add some movement delay + move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10 + return + +/mob/living/carbon/alien/humanoid/getDNA() + return null + +/mob/living/carbon/alien/humanoid/setDNA() + return + +/*---------------------------------------- +Proc: AddInfectionImages() +Des: Gives the client of the alien an image on each infected mob. +----------------------------------------*/ +/mob/living/carbon/alien/humanoid/proc/AddInfectionImages() + if (client) + for (var/mob/living/C in mob_list) + if(C.status_flags & XENO_HOST) + var/obj/item/alien_embryo/A = locate() in C + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") + client.images += I + return + + +/*---------------------------------------- +Proc: RemoveInfectionImages() +Des: Removes all infected images from the alien. +----------------------------------------*/ +/mob/living/carbon/alien/humanoid/proc/RemoveInfectionImages() + if (client) + for(var/image/I in client.images) + if(dd_hasprefix_case(I.icon_state, "infected")) + del(I) + return + + +//I don't know why the defines, just needed to place the thing in a place +#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point +#define HEAT_DAMAGE_LEVEL_2 4 //Amount of damage applied when your body temperature passes the 400K point +#define HEAT_DAMAGE_LEVEL_3 8 //Amount of damage applied when your body temperature passes the 1000K point +/mob/living/carbon/alien/humanoid/handle_environment(var/datum/gas_mixture/environment) + + //If there are alien weeds on the ground then heal if needed or give some plasma + if(locate(/obj/effect/alien/weeds) in loc) + if(health >= maxHealth - getCloneLoss()) + adjustToxLoss(plasma_rate) + else + adjustBruteLoss(-heal_rate) + adjustFireLoss(-heal_rate) + adjustOxyLoss(-heal_rate) + + if(!environment) + return + var/loc_temp = T0C + if(istype(loc, /obj/mecha)) + var/obj/mecha/M = loc + loc_temp = M.return_temperature() + else if(istype(get_turf(src), /turf/space)) + var/turf/heat_turf = get_turf(src) + loc_temp = heat_turf.temperature + else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) + loc_temp = loc:air_contents.temperature + else + loc_temp = environment.temperature + + //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Fire protection: [heat_protection] - Location: [loc] - src: [src]" + + // Aliens are now weak to fire. + + //After then, it reacts to the surrounding atmosphere based on your thermal protection + if(loc_temp > bodytemperature) + //Place is hotter than we are + var/thermal_protection = heat_protection //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + bodytemperature += (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) + else + bodytemperature += 1 * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) + // bodytemperature -= max((loc_temp - bodytemperature / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) + + // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. + if(bodytemperature > 360.15) + //Body temperature is too hot. + fire_alert = max(fire_alert, 1) + switch(bodytemperature) + if(360 to 400) + apply_damage(HEAT_DAMAGE_LEVEL_1, BURN) + fire_alert = max(fire_alert, 2) + if(400 to 1000) + apply_damage(HEAT_DAMAGE_LEVEL_2, BURN) + fire_alert = max(fire_alert, 2) + if(1000 to INFINITY) + apply_damage(HEAT_DAMAGE_LEVEL_3, BURN) + fire_alert = max(fire_alert, 2) + return +#undef HEAT_DAMAGE_LEVEL_1 +#undef HEAT_DAMAGE_LEVEL_2 +#undef HEAT_DAMAGE_LEVEL_3 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index a009edc2..c056a863 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -260,7 +260,7 @@ return fire_prot */ - proc/handle_chemicals_in_body() + handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -299,14 +299,14 @@ return //TODO: DEFERRED - proc/handle_regular_status_updates() + handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 silent = 0 else //ALIVE. LIGHTS ARE ON - if(health < config.health_threshold_dead || brain_op_stage == 4.0) + if(health < config.health_threshold_dead || !has_brain()) death() blinded = 1 stat = DEAD @@ -363,7 +363,7 @@ return 1 - proc/handle_regular_hud_updates() + handle_regular_hud_updates() if (stat == 2 || (XRAY in mutations)) sight |= SEE_TURFS diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 5929bde4..dc8bbdea 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -7,7 +7,7 @@ status_flags = CANPARALYSE heal_rate = 5 plasma_rate = 20 - var/move_delay_add = 0 + move_delay_add = 0 /mob/living/carbon/alien/humanoid/queen/New() var/datum/reagents/R = new/datum/reagents(100) @@ -24,7 +24,7 @@ real_name = src.name verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin) - verbs -= /mob/living/carbon/alien/verb/ventcrawl + verbs -= /mob/living/proc/ventcrawl ..() diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 8d40ef9d..5fa7bdb4 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -9,4 +9,5 @@ adjustBruteLoss(-1) adjustFireLoss(-1) adjustToxLoss(-1) - adjustOxyLoss(-1) \ No newline at end of file + adjustOxyLoss(-1) + diff --git a/code/modules/mob/living/carbon/alien/larva/powers.dm b/code/modules/mob/living/carbon/alien/larva/powers.dm index 5bcd64d4..87e9ba6b 100644 --- a/code/modules/mob/living/carbon/alien/larva/powers.dm +++ b/code/modules/mob/living/carbon/alien/larva/powers.dm @@ -1,4 +1,4 @@ - +/* /mob/living/carbon/alien/larva/verb/hide() set name = "Hide" set desc = "Allows to hide beneath tables or certain items. Toggled on or off." @@ -19,8 +19,8 @@ for(var/mob/O in oviewers(src, null)) if ((O.client && !( O.blinded ))) O << text("[] slowly peaks up from the ground...", src) - -/mob/living/carbon/alien/larva/verb/evolve() +*/ +/mob/living/carbon/alien/larva/evolve() set name = "Evolve" set desc = "Evolve into a fully grown Alien." set category = "Alien" diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index e58e193a..777b59a5 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -15,8 +15,27 @@ if(copytext(message,1,2) == "*") return emote(copytext(message,2)) - var/datum/language/speaking = null + var/datum/language/speaking = parse_language(message) + if(speaking) + message = copytext(message,3) + else + speaking = all_languages[language] + var/ending = copytext(message, length(message)) + if (speaking) + // This is broadcast to all mobs with the language, + // irrespective of distance or anything else. + if(speaking.flags & HIVEMIND) + speaking.broadcast(src,trim(message)) + return + //If we've gotten this far, keep going! + verb = speaking.get_spoken_verb(ending) + else + if(ending=="!") + verb=pick("roars","screeches","growls") + if(ending=="?") + verb="asks" +/* if(length(message) >= 2) var/channel_prefix = copytext(message, 1 ,3) if(languages.len) @@ -28,8 +47,8 @@ if(speaking) message = trim(copytext(message,3)) - - message = capitalize(trim_left(message)) +*/ + message = capitalize(trim(message)) if(!message || stat) return diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index 79df1553..d72922d9 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -86,7 +86,7 @@ var/datum/gas_mixture/environment = T.return_air() if(!environment) return - if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T) + if(environment.gas["toxins"] > 0 || locate(/obj/effect/alien/weeds) in T) if(H.health >= H.maxHealth - H.getCloneLoss()) var/datum/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name["plasma vessel"] P.stored_plasma += weeds_plasma_rate diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 605d57d7..59d085f0 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -197,9 +197,19 @@ for(var/t in organs) del(t) + var/alien_caste = pick("Hunter","Sentinel","Drone") + var/mob/living/carbon/alien/humanoid/new_xeno + switch(alien_caste) + if("Hunter") + new_xeno = new /mob/living/carbon/alien/humanoid/hunter(loc) + if("Sentinel") + new_xeno = new /mob/living/carbon/alien/humanoid/sentinel(loc) + if("Drone") + new_xeno = new /mob/living/carbon/alien/humanoid/drone(loc) +/* var/alien_caste = pick("Hunter","Sentinel","Drone") var/mob/living/carbon/human/new_xeno = create_new_xenomorph(alien_caste,loc) - +*/ new_xeno.a_intent = "hurt" new_xeno.key = key