- Xenos suit and helm (completely obscuring, and almost indistinguishable from drones) (admin spawned only for now). 
- Facehuggers now have different icon states for being thrown and after impregnation. 
- New death, unconscious and sleeping icons for aliens. 
- New icon (and projectile type) for neuroxotin. 
- New infection overlay images for telling aliens about pregnant humans (3 icons, showing the progression of the infestation). 
- New system for handling alien impregnation (alien embryos are an object inside the mob, instead of a disease). 
- Players can be operated surgically to remove the alien embryos (targetting the chest: scalpel, surgical saw, hemostat, retractors. If the embryo is nearly fully developed, it might come out alive though. 
- Corgis can now get impregnated. 
- There is a short animated overlay of a chestburster when it comes time to burst chests. 
- Alien larva now have three different icon sets, depending on their growth (25% they are bloody and pale, 25% - 75% they are pale, 75% onwards they are deep red).


Fixed up table smashing, and added rack smashing in the same way.
Added new north/south facing for the large alien queen.
Updated the changelog.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5493 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
petethegoat@gmail.com
2013-01-08 16:30:45 +00:00
parent 6ae1348790
commit ef8369409e
37 changed files with 567 additions and 121 deletions

View File

@@ -174,8 +174,8 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
if(resistance && !(type in affected_mob.resistances)) if(resistance && !(type in affected_mob.resistances))
var/saved_type = "[type]" var/saved_type = "[type]"
affected_mob.resistances += text2path(saved_type) affected_mob.resistances += text2path(saved_type)
if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo. /*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo.
affected_mob.status_flags &= ~(XENO_HOST) affected_mob.status_flags &= ~(XENO_HOST)*/
affected_mob.viruses -= src //remove the datum from the list affected_mob.viruses -= src //remove the datum from the list
del(src) //delete the datum to stop it processing del(src) //delete the datum to stop it processing
return return

View File

@@ -1,5 +1,7 @@
//affected_mob.contract_disease(new /datum/disease/alien_embryo) //affected_mob.contract_disease(new /datum/disease/alien_embryo)
//cael - retained this file for legacy reference, see code\modules\mob\living\carbon\alien\special\alien_embryo.dm for replacement
//Our own special process so that dead hosts still chestburst //Our own special process so that dead hosts still chestburst
/datum/disease/alien_embryo/process() /datum/disease/alien_embryo/process()
if(!holder) return if(!holder) return
@@ -97,6 +99,9 @@
gibbed = 1 gibbed = 1
return return
/datum/disease/alien_embryo/stage_change(var/old_stage)
RefreshInfectionImage()
/*---------------------------------------- /*----------------------------------------
Proc: RefreshInfectionImage() Proc: RefreshInfectionImage()
Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens. Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens.
@@ -106,7 +111,7 @@ Des: Removes all infection images from aliens and places an infection image on a
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client) if (alien.client)
for(var/image/I in alien.client.images) for(var/image/I in alien.client.images)
if(I.icon_state == "infected") if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) del(I)
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
@@ -114,7 +119,7 @@ Des: Removes all infection images from aliens and places an infection image on a
for (var/mob/living/carbon/C in mob_list) for (var/mob/living/carbon/C in mob_list)
if(C) if(C)
if (C.status_flags & XENO_HOST) if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I alien.client.images += I
return return
@@ -127,7 +132,7 @@ Des: Checks if the passed mob (C) is infected with the alien egg, then gives eac
for (var/mob/living/carbon/alien/alien in player_list) for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client) if (alien.client)
if (C.status_flags & XENO_HOST) if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I alien.client.images += I
return return
@@ -142,6 +147,6 @@ Des: Removes the alien infection image from all aliens in the world located in p
if (alien.client) if (alien.client)
for(var/image/I in alien.client.images) for(var/image/I in alien.client.images)
if(I.loc == C) if(I.loc == C)
if(I.icon_state == "infected") if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) del(I)
return return

View File

@@ -358,8 +358,9 @@ Alien plants should do something if theres a lot of poison
*/ */
/var/const //for the status var /var/const //for the status var
BURST = 0 BURST = 0
GROWING = 1 BURSTING = 1
GROWN = 2 GROWING = 2
GROWN = 3
MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger
MAX_GROWTH_TIME = 3000 MAX_GROWTH_TIME = 3000
@@ -394,8 +395,7 @@ Alien plants should do something if theres a lot of poison
return return
if(GROWN) if(GROWN)
user << "\red You retrieve the child." user << "\red You retrieve the child."
loc.contents += GetFacehugger()//need to write the code for giving it to the alien later Burst(0)
Burst()
return return
else else
return attack_hand(user) return attack_hand(user)
@@ -416,12 +416,20 @@ Alien plants should do something if theres a lot of poison
proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining
var/obj/item/clothing/mask/facehugger/child = GetFacehugger() var/obj/item/clothing/mask/facehugger/child = GetFacehugger()
if(kill && istype(child))
loc.contents += child
child.Die()
icon_state = "egg_hatched" icon_state = "egg_hatched"
status = BURST flick("egg_opening", src)
status = BURSTING
spawn(15)
status = BURST
loc.contents += child//need to write the code for giving it to the alien later
if(kill && istype(child))
child.Die()
else
for(var/mob/M in range(1,src))
if(CanHug(M))
child.Attach(M)
break
return return
@@ -465,19 +473,9 @@ Alien plants should do something if theres a lot of poison
if(status == GROWN) if(status == GROWN)
if(!CanHug(AM)) if(!CanHug(AM))
return return
var/mob/living/carbon/C = AM var/mob/living/carbon/C = AM
if(C.stat == CONSCIOUS && C.has_disease(new /datum/disease/alien_embryo(0))) if(C.stat == CONSCIOUS && C.status_flags & XENO_HOST)
return return
status = BURST Burst(0)
flick("egg_opening", src) //Play animation
var/turf/pos = get_turf(src)
spawn(18) // Wait until the animation finishes
Burst(0)
var/obj/item/clothing/mask/facehugger/child = GetFacehugger()
child.loc = pos
if(!CanHug(AM))
return
if(AM && in_range(AM, pos))
child.Attach(AM)

View File

@@ -33,6 +33,36 @@
icon_state = "sheet-lizard" icon_state = "sheet-lizard"
origin_tech = "" origin_tech = ""
/obj/item/stack/sheet/animalhide/xeno
name = "alien hide"
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
origin_tech = ""
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/sheet/xenochitin
name = "alien chitin"
desc = "A piece of the hide of a terrible creature."
singular_name = "alien hide piece"
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
origin_tech = ""
/obj/item/xenos_claw
name = "alien claw"
desc = "The claw of a terrible creature."
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
origin_tech = ""
/obj/item/weed_extract
name = "weed extract"
desc = "A piece of slimy, purplish weed."
icon = 'icons/mob/alien.dmi'
icon_state = "weed_extract"
origin_tech = ""
/obj/item/stack/sheet/hairlesshide /obj/item/stack/sheet/hairlesshide
name = "hairless hide" name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning." desc = "This hide was stripped of it's hair, but still needs tanning."

View File

@@ -87,6 +87,45 @@
M:eye_op_stage = 2.0 M:eye_op_stage = 2.0
else if(user.zone_sel.selecting == "chest")
switch(M:alien_op_stage)
if(3.0)
var/mob/living/carbon/human/H = M
if(!istype(H))
return ..()
if(H.wear_suit || H.w_uniform)
user << "\red You're going to need to remove that suit/jumpsuit first."
return
var/obj/item/alien_embryo/A = locate() in M.contents
if(!A)
return ..()
user.visible_message("\red [user] begins to pull something out of [M]'s chest.", "\red You begin to pull the alien organism out of [M]'s chest.")
spawn(20 + rand(0,50))
if(!A || A.loc != M)
return
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
M.take_organ_damage(30)
if(A.stage > 3)
var/chance = 15 + max(0, A.stage - 3) * 10
if(prob(chance))
A.AttemptGrow(0)
M:alien_op_stage = 4.0
if(M)
user.visible_message("\red [user] pulls an alien organism out of [M]'s chest.", "\red You pull the alien organism out of [M]'s chest.")
A.loc = M.loc //alien embryo handles cleanup
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..() return ..()
@@ -184,6 +223,42 @@
M.take_organ_damage(15) M.take_organ_damage(15)
M:eye_op_stage = 3.0 M:eye_op_stage = 3.0
else if(user.zone_sel.selecting == "chest")
if(M:alien_op_stage == 2.0 || M:alien_op_stage == 3.0)
var/mob/living/carbon/human/H = M
if(!istype(H))
return ..()
if(H.wear_suit || H.w_uniform)
user << "\red You're going to need to remove that suit/jumpsuit first."
return
user.visible_message("\red [user] begins to dig around in [M]'s chest.", "\red You begin to dig around in [M]'s chest.")
spawn(20 + (M:alien_op_stage == 3 ? 0 : rand(0,50)))
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(30))
M:UpdateDamageIcon()
else
M.take_organ_damage(30)
var/obj/item/alien_embryo/A = locate() in M.contents
if(A)
var/dat = "\blue You found an unknown alien organism in [M]'s chest!"
if(A.stage < 4)
dat += " It's small and weak, barely the size of a foetus."
if(A.stage > 3)
dat += " It's grown quite large, and writhes slightly as you look at it."
if(prob(10))
A.AttemptGrow()
user << dat
M:alien_op_stage = 3.0
else
user << "\blue You find nothing of interest."
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..() return ..()
@@ -513,6 +588,33 @@
M.updatehealth() M.updatehealth()
M:eye_op_stage = 1.0 M:eye_op_stage = 1.0
user << "\blue So far so good after." user << "\blue So far so good after."
else if(user.zone_sel.selecting == "chest")
switch(M:alien_op_stage)
if(0.0)
var/mob/living/carbon/human/H = M
if(!istype(H))
return ..()
if(H.wear_suit || H.w_uniform)
user << "\red You're going to need to remove that suit/jumpsuit first."
return
user.visible_message("\red [user] begins to slice open [M]'s chest.", "\red You begin to slice open [M]'s chest.")
spawn(rand(20,50))
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
M.take_organ_damage(15)
M:alien_op_stage = 1.0
user << "\blue So far so good."
else else
return ..() return ..()
/* wat /* wat
@@ -657,6 +759,32 @@
..() ..()
return return
else if(user.zone_sel.selecting == "chest")
switch(M:alien_op_stage)
if(1.0)
var/mob/living/carbon/human/H = M
if(!istype(H))
return ..()
if(H.wear_suit || H.w_uniform)
user << "\red You're going to need to remove that suit/jumpsuit first."
return
user.visible_message("\red [user] begins to slice through the bone of [M]'s chest.", "\red You begin to slice through the bone of [M]'s chest.")
spawn(20 + rand(0,50))
if(M == user && prob(25))
user << "\red You mess up!"
if(istype(M, /mob/living/carbon/human))
var/datum/organ/external/affecting = M:get_organ("chest")
if(affecting.take_damage(15))
M:UpdateDamageIcon()
else
M.take_organ_damage(15)
M:alien_op_stage = 2.0
user << "\blue So far so good."
else else
return ..() return ..()
/* /*

View File

@@ -240,73 +240,59 @@
return return
/obj/structure/table/attack_paw(mob/user as mob) /obj/structure/table/attack_paw(mob/user)
if ((HULK in usr.mutations)) if(HULK in user.mutations)
usr << "\blue You destroy the table." user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) visible_message("<span class='danger'>[user] smashes the table apart!</span>")
visible_message("\red [user] smashes the table apart!")
if(istype(src, /obj/structure/table/reinforced)) if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc ) new /obj/item/weapon/table_parts/reinforced(loc)
else if(istype(src, /obj/structure/table/woodentable)) else if(istype(src, /obj/structure/table/woodentable))
new/obj/item/weapon/table_parts/wood( src.loc ) new/obj/item/weapon/table_parts/wood(loc)
else else
new /obj/item/weapon/table_parts( src.loc ) new /obj/item/weapon/table_parts(loc)
src.density = 0 density = 0
del(src) del(src)
if (!( locate(/obj/structure/table, user.loc) ))
step(user, get_dir(user, src))
if (user.loc == src.loc)
user.layer = TURF_LAYER
visible_message("[user] hides under the table!")
//Foreach goto(69)
return
/obj/structure/table/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N /obj/structure/table/attack_alien(mob/user)
usr << "\green You destroy the table." visible_message("<span class='danger'>[user] slices [src] apart!</span>")
visible_message("\red [user] slices the table apart!")
if(istype(src, /obj/structure/table/reinforced)) if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc ) new /obj/item/weapon/table_parts/reinforced(loc)
else if(istype(src, /obj/structure/table/woodentable)) else if(istype(src, /obj/structure/table/woodentable))
new/obj/item/weapon/table_parts/wood( src.loc ) new/obj/item/weapon/table_parts/wood(loc)
else else
new /obj/item/weapon/table_parts( src.loc ) new /obj/item/weapon/table_parts(loc)
src.density = 0 density = 0
del(src) del(src)
return
/obj/structure/table/attack_animal(mob/living/simple_animal/user as mob) /obj/structure/table/attack_animal(mob/living/simple_animal/user)
if(user.wall_smash) if(user.wall_smash)
usr << "\red You destroy the table." visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
visible_message("\red [user] smashes the table apart!")
if(istype(src, /obj/structure/table/reinforced)) if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc ) new /obj/item/weapon/table_parts/reinforced(loc)
else if(istype(src, /obj/structure/table/woodentable)) else if(istype(src, /obj/structure/table/woodentable))
new/obj/item/weapon/table_parts/wood( src.loc ) new/obj/item/weapon/table_parts/wood(loc)
else else
new /obj/item/weapon/table_parts( src.loc ) new /obj/item/weapon/table_parts(loc)
src.density = 0 density = 0
del(src) del(src)
return
/obj/structure/table/attack_hand(mob/user as mob) /obj/structure/table/attack_hand(mob/user)
if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations)) if(HULK in user.mutations || SUPRSTR in user.augmentations)
usr << "\blue You destroy the table." visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
visible_message("\red [user] smashes the table apart!") user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
if(istype(src, /obj/structure/table/reinforced)) if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc ) new /obj/item/weapon/table_parts/reinforced(loc)
else if(istype(src, /obj/structure/table/woodentable)) else if(istype(src, /obj/structure/table/woodentable))
new/obj/item/weapon/table_parts/wood( src.loc ) new/obj/item/weapon/table_parts/wood(loc)
else else
new /obj/item/weapon/table_parts( src.loc ) new /obj/item/weapon/table_parts(loc)
src.density = 0 density = 0
del(src) del(src)
return
/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -554,7 +540,6 @@
if (istype(W, /obj/item/weapon/wrench)) if (istype(W, /obj/item/weapon/wrench))
new /obj/item/weapon/rack_parts( src.loc ) new /obj/item/weapon/rack_parts( src.loc )
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
//SN src = null
del(src) del(src)
return return
if(isrobot(user)) if(isrobot(user))
@@ -564,4 +549,37 @@
return return
/obj/structure/rack/meteorhit(obj/O as obj) /obj/structure/rack/meteorhit(obj/O as obj)
del(src) del(src)
/obj/structure/table/attack_hand(mob/user)
if(HULK in user.mutations || SUPRSTR in user.augmentations)
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
new /obj/item/weapon/rack_parts(loc)
density = 0
del(src)
/obj/structure/rack/attack_paw(mob/user)
if(HULK in user.mutations)
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
new /obj/item/weapon/rack_parts(loc)
density = 0
del(src)
/obj/structure/rack/attack_alien(mob/user)
visible_message("<span class='danger'>[user] slices [src] apart!</span>")
new /obj/item/weapon/rack_parts(loc)
density = 0
del(src)
/obj/structure/rack/attack_animal(mob/living/simple_animal/user)
if(user.wall_smash)
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
new /obj/item/weapon/rack_parts(loc)
density = 0
del(src)

View File

@@ -171,3 +171,11 @@
icon_state = "bearpelt" icon_state = "bearpelt"
item_state = "bearpelt" item_state = "bearpelt"
flags = FPRINT | TABLEPASS | BLOCKHAIR flags = FPRINT | TABLEPASS | BLOCKHAIR
/obj/item/clothing/head/xenos
name = "xenos helmet"
icon_state = "xenos"
item_state = "xenos_helm"
desc = "A helmet made out of chitinous alien hide."
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE

View File

@@ -211,4 +211,12 @@
else else
usr << "You button-up some imaginary buttons on your [src]." usr << "You button-up some imaginary buttons on your [src]."
return return
usr.update_inv_wear_suit() usr.update_inv_wear_suit()
/obj/item/clothing/suit/xenos
name = "xenos suit"
desc = "A suit made out of chitinous alien hide."
icon_state = "xenos"
item_state = "xenos_helm"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT

View File

@@ -185,9 +185,10 @@ Des: Gives the client of the alien an image on each infected mob.
----------------------------------------*/ ----------------------------------------*/
/mob/living/carbon/alien/proc/AddInfectionImages() /mob/living/carbon/alien/proc/AddInfectionImages()
if (client) if (client)
for (var/mob/living/carbon/C in mob_list) for (var/mob/living/C in mob_list)
if(C.status_flags & XENO_HOST) if(C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") 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 client.images += I
return return
@@ -199,11 +200,10 @@ Des: Removes all infected images from the alien.
/mob/living/carbon/alien/proc/RemoveInfectionImages() /mob/living/carbon/alien/proc/RemoveInfectionImages()
if (client) if (client)
for(var/image/I in client.images) for(var/image/I in client.images)
if(I.icon_state == "infected") if(dd_hasprefix_case(I.icon_state, "infected"))
del(I) del(I)
return return
#undef HEAT_DAMAGE_LEVEL_1 #undef HEAT_DAMAGE_LEVEL_1
#undef HEAT_DAMAGE_LEVEL_2 #undef HEAT_DAMAGE_LEVEL_2
#undef HEAT_DAMAGE_LEVEL_3 #undef HEAT_DAMAGE_LEVEL_3

View File

@@ -142,7 +142,7 @@ Doesn't work on other aliens/AI.*/
if(!istype(U, /turf)) if(!istype(U, /turf))
return return
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc) var/obj/item/projectile/energy/neurotoxin/A = new /obj/item/projectile/energy/neurotoxin(usr.loc)
A.current = U A.current = U
A.yo = U.y - T.y A.yo = U.y - T.y

View File

@@ -9,6 +9,7 @@
O.show_message("<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw...", 1) O.show_message("<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw...", 1)
update_canmove() update_canmove()
if(client) blind.layer = 0 if(client) blind.layer = 0
update_icons()
tod = worldtime2text() //weasellos time of death patch tod = worldtime2text() //weasellos time of death patch
if(mind) mind.store_memory("Time of death: [tod]", 0) if(mind) mind.store_memory("Time of death: [tod]", 0)

View File

@@ -359,6 +359,8 @@
//Other //Other
if(stunned) if(stunned)
AdjustStunned(-1) AdjustStunned(-1)
if(!stunned)
update_icons()
if(weakened) if(weakened)
weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times

View File

@@ -14,9 +14,21 @@
lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again
update_hud() //TODO: remove the need for this to be here update_hud() //TODO: remove the need for this to be here
overlays.Cut() overlays.Cut()
if(lying) if(stat == DEAD)
if(resting) icon_state = "alien[caste]_sleep" //If we mostly took damage from fire
else icon_state = "alien[caste]_l" if(fireloss > 125)
icon_state = "alien[caste]_husked"
else
icon_state = "alien[caste]_dead"
for(var/image/I in overlays_lying)
overlays += I
else if(lying)
if(resting)
icon_state = "alien[caste]_sleep"
else if(stat == UNCONSCIOUS)
icon_state = "alien[caste]_unconscious"
else
icon_state = "alien[caste]_l"
for(var/image/I in overlays_lying) for(var/image/I in overlays_lying)
overlays += I overlays += I
else else

View File

@@ -2,7 +2,7 @@
if(stat == DEAD) return if(stat == DEAD) return
if(healths) healths.icon_state = "health6" if(healths) healths.icon_state = "health6"
stat = DEAD stat = DEAD
icon_state = "larva_l" icon_state = "larva_dead"
if(!gibbed) if(!gibbed)
update_canmove() update_canmove()

View File

@@ -88,6 +88,9 @@
if("jump") if("jump")
message = "<B>The [src.name]</B> jumps!" message = "<B>The [src.name]</B> jumps!"
m_type = 1 m_type = 1
if("hiss_")
message = "<B>The [src.name]</B> hisses softly."
m_type = 1
if("collapse") if("collapse")
Paralyse(2) Paralyse(2)
message = text("<B>[]</B> collapses!", src) message = text("<B>[]</B> collapses!", src)

View File

@@ -1,7 +1,7 @@
/mob/living/carbon/alien/larva /mob/living/carbon/alien/larva
name = "alien larva" name = "alien larva"
real_name = "alien larva" real_name = "alien larva"
icon_state = "larva" icon_state = "larva0"
pass_flags = PASSTABLE pass_flags = PASSTABLE
maxHealth = 25 maxHealth = 25
@@ -11,6 +11,7 @@
var/amount_grown = 0 var/amount_grown = 0
var/max_grown = 200 var/max_grown = 200
var/time_of_birth
//This is fine right now, if we're adding organ specific damage this needs to be updated //This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/larva/New() /mob/living/carbon/alien/larva/New()

View File

@@ -55,6 +55,9 @@
for(var/obj/item/weapon/grab/G in src) for(var/obj/item/weapon/grab/G in src)
G.process() G.process()
//some kind of bug in canmove() isn't properly calling update_icons, so this is here as a placeholder
update_icons()
if(client) if(client)
handle_regular_hud_updates() handle_regular_hud_updates()
@@ -226,7 +229,7 @@
return 1 return 1
//UNCONSCIOUS. NO-ONE IS HOME //UNCONSCIOUS. NO-ONE IS HOME
if( (getOxyLoss() > 50) || (0 > health) ) if( (getOxyLoss() > 25) || (0 > health) )
//if( health <= 20 && prob(1) ) //if( health <= 20 && prob(1) )
// spawn(0) // spawn(0)
// emote("gasp") // emote("gasp")
@@ -244,7 +247,7 @@
stat = UNCONSCIOUS stat = UNCONSCIOUS
if( prob(10) && health ) if( prob(10) && health )
spawn(0) spawn(0)
emote("hiss") emote("hiss_")
//CONSCIOUS //CONSCIOUS
else else
stat = CONSCIOUS stat = CONSCIOUS

View File

@@ -28,12 +28,16 @@
if(stat != CONSCIOUS) if(stat != CONSCIOUS)
return return
if(handcuffed || legcuffed)
src << "\red You cannot evolve when you are cuffed."
if(amount_grown >= max_grown) //TODO ~Carn if(amount_grown >= max_grown) //TODO ~Carn
src << "\green You are growing into a beautiful alien! It is time to choose a caste." //green is impossible to read, so i made these blue and changed the formatting slightly
src << "\green There are three to choose from:" src << "\blue <b>You are growing into a beautiful alien! It is time to choose a caste.</b>"
src << "\green <B>Hunters</B> are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." src << "\blue There are three to choose from:"
src << "\green <B>Sentinels</B> are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." src << "<B>Hunters</B> \blue are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves."
src << "\green <B>Drones</B> are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." src << "<B>Sentinels</B> \blue are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters."
src << "<B>Drones</B> \blue are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen."
var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone")
var/mob/living/carbon/alien/humanoid/new_xeno var/mob/living/carbon/alien/humanoid/new_xeno

View File

@@ -1 +1,22 @@
//No special icons processing
/mob/living/carbon/alien/larva/regenerate_icons()
overlays = list()
update_icons()
/mob/living/carbon/alien/larva/update_icons()
var/state = 0
if(amount_grown > 150)
state = 2
else if(amount_grown > 50)
state = 1
if(stat == DEAD)
icon_state = "larva[state]_dead"
else if (handcuffed || legcuffed)
icon_state = "larva[state]_cuff"
else if (stunned)
icon_state = "larva[state]_stun"
else if(lying || resting)
icon_state = "larva[state]_sleep"
else
icon_state = "larva[state]"

View File

@@ -0,0 +1,154 @@
// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability
// It functions almost identically (see code/datums/diseases/alien_embryo.dm)
/obj/item/alien_embryo
name = "alien embryo"
desc = "All slimy and yuck."
icon = 'icons/mob/alien.dmi'
icon_state = "larva0_dead"
var/mob/living/affected_mob
var/stage = 0
/obj/item/alien_embryo/New()
if(istype(loc, /mob/living))
affected_mob = loc
processing_objects.Add(src)
spawn(0)
AddInfectionImages(affected_mob)
else
del(src)
/obj/item/alien_embryo/Del()
if(affected_mob)
affected_mob.status_flags &= ~(XENO_HOST)
spawn(0)
RemoveInfectionImages(affected_mob)
..()
/obj/item/alien_embryo/process()
if(loc != affected_mob)
affected_mob.status_flags &= ~(XENO_HOST)
processing_objects.Remove(src)
affected_mob = null
spawn(0)
RemoveInfectionImages(affected_mob)
return
if(stage < 5 && prob(3))
stage++
spawn(0)
RefreshInfectionImage(affected_mob)
switch(stage)
if(2, 3)
if(prob(1))
affected_mob.emote("sneeze")
if(prob(1))
affected_mob.emote("cough")
if(prob(1))
affected_mob << "\red Your throat feels sore."
if(prob(1))
affected_mob << "\red Mucous runs down the back of your throat."
if(4)
if(prob(1))
affected_mob.emote("sneeze")
if(prob(1))
affected_mob.emote("cough")
if(prob(2))
affected_mob << "\red Your muscles ache."
if(prob(20))
affected_mob.take_organ_damage(1)
if(prob(2))
affected_mob << "\red Your stomach hurts."
if(prob(20))
affected_mob.adjustToxLoss(1)
affected_mob.updatehealth()
if(5)
affected_mob << "\red You feel something tearing its way out of your stomach..."
affected_mob.adjustToxLoss(10)
affected_mob.updatehealth()
if(prob(50))
AttemptGrow()
/obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1)
var/list/candidates = get_alien_candidates()
var/picked = null
// To stop clientless larva, we will check that our host has a client
// if we find no ghosts to become the alien. If the host has a client
// he will become the alien but if he doesn't then we will set the stage
// to 2, so we don't do a process heavy check everytime.
if(candidates.len)
picked = pick(candidates)
else if(affected_mob.client)
picked = affected_mob.key
else
stage = 4 // Let's try again later.
return
if(affected_mob.lying)
affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_lie")
else
affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_stand")
spawn(6)
var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc)
new_xeno.key = picked
new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention
if(gib_on_success)
affected_mob.gib()
del(src)
/*----------------------------------------
Proc: RefreshInfectionImage()
Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens.
----------------------------------------*/
/obj/item/alien_embryo/proc/RefreshInfectionImage()
spawn(0)
for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client)
for(var/image/I in alien.client.images)
if(dd_hasprefix_case(I.icon_state, "infected"))
del(I)
for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client)
for (var/mob/living/carbon/C in mob_list)
if(C)
if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I
for (var/mob/living/simple_animal/corgi/C in mob_list)
if(C)
if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I
return
/*----------------------------------------
Proc: AddInfectionImages(C)
Des: Checks if the passed mob (C) is infected with the alien egg, then gives each alien client an infected image at C.
----------------------------------------*/
/obj/item/alien_embryo/proc/AddInfectionImages(var/mob/living/C)
if (C)
for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client)
if (C.status_flags & XENO_HOST)
var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]")
alien.client.images += I
return
/*----------------------------------------
Proc: RemoveInfectionImage(C)
Des: Removes the alien infection image from all aliens in the world located in passed mob (C).
----------------------------------------*/
/obj/item/alien_embryo/proc/RemoveInfectionImages(var/mob/living/C)
if (C)
for (var/mob/living/carbon/alien/alien in player_list)
if (alien.client)
for(var/image/I in alien.client.images)
if(I.loc == C)
if(dd_hasprefix_case(I.icon_state, "infected"))
del(I)
return

View File

@@ -94,12 +94,22 @@ var/const/MAX_ACTIVE_TIME = 400
if(CanHug(AM)) if(CanHug(AM))
Attach(AM) Attach(AM)
/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed)
..()
if(stat == CONSCIOUS)
icon_state = "[initial(icon_state)]_thrown"
spawn(15)
if(icon_state == "[initial(icon_state)]_thrown")
icon_state = "[initial(icon_state)]"
/obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom) /obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom)
Attach(hit_atom) ..()
return if(stat == CONSCIOUS)
icon_state = "[initial(icon_state)]"
Attach(hit_atom)
/obj/item/clothing/mask/facehugger/proc/Attach(M as mob) /obj/item/clothing/mask/facehugger/proc/Attach(M as mob)
if(!iscarbon(M) || isalien(M)) if( (!iscorgi(M) && !iscarbon(M)) || isalien(M))
return return
if(attached) if(attached)
return return
@@ -114,49 +124,61 @@ var/const/MAX_ACTIVE_TIME = 400
if(stat != CONSCIOUS) return if(stat != CONSCIOUS) return
if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage
var/mob/living/carbon/target = L L.visible_message("\red \b [src] leaps at [L]'s face!")
target.visible_message("\red \b [src] leaps at [target]'s face!") if(ishuman(L))
var/mob/living/carbon/human/H = L
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(H.head && H.head.flags & HEADCOVERSMOUTH) if(H.head && H.head.flags & HEADCOVERSMOUTH)
H.visible_message("\red \b [src] smashes against [H]'s [H.head]!") H.visible_message("\red \b [src] smashes against [H]'s [H.head]!")
Die() Die()
return return
if(target.wear_mask) if(iscarbon(M))
if(prob(20)) return var/mob/living/carbon/target = L
var/obj/item/clothing/W = target.wear_mask
if(!W.canremove) return
target.drop_from_inventory(W)
target.visible_message("\red \b [src] tears [W] off of [target]'s face!") if(target.wear_mask)
if(prob(20)) return
var/obj/item/clothing/W = target.wear_mask
if(!W.canremove) return
target.drop_from_inventory(W)
target.equip_to_slot(src, slot_wear_mask) target.visible_message("\red \b [src] tears [W] off of [target]'s face!")
target.equip_to_slot(src, slot_wear_mask)
if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
else if (iscorgi(M))
var/mob/living/simple_animal/corgi/C = M
src.loc = C
C.facehugger = src
C.wear_mask = src
//C.regenerate_icons()
GoIdle() //so it doesn't jump the people that tear it off GoIdle() //so it doesn't jump the people that tear it off
if(!sterile) target.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME)) spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
Impregnate(target) Impregnate(L)
return return
/obj/item/clothing/mask/facehugger/proc/Impregnate(mob/living/carbon/target as mob) /obj/item/clothing/mask/facehugger/proc/Impregnate(mob/living/target as mob)
if(!target || target.wear_mask != src || target.stat == DEAD) //was taken off or something if(!target || target.wear_mask != src || target.stat == DEAD) //was taken off or something
return return
if(!sterile) if(!sterile)
target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance //target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance
for(var/datum/disease/alien_embryo/A in target.viruses) new /obj/item/alien_embryo(target)
target.status_flags |= XENO_HOST target.status_flags |= XENO_HOST
break
target.visible_message("\red \b [src] falls limp after violating [target]'s face!") target.visible_message("\red \b [src] falls limp after violating [target]'s face!")
Die() Die()
icon_state = "[initial(icon_state)]_impregnated"
if(iscorgi(target))
var/mob/living/simple_animal/corgi/C = target
src.loc = get_turf(C)
C.facehugger = null
else else
target.visible_message("\red \b [src] violates [target]'s face!") target.visible_message("\red \b [src] violates [target]'s face!")
return return
@@ -204,6 +226,9 @@ var/const/MAX_ACTIVE_TIME = 400
/proc/CanHug(var/mob/M) /proc/CanHug(var/mob/M)
if(iscorgi(M))
return 1
if(!iscarbon(M) || isalien(M)) if(!iscarbon(M) || isalien(M))
return 0 return 0
var/mob/living/carbon/C = M var/mob/living/carbon/C = M
@@ -211,4 +236,4 @@ var/const/MAX_ACTIVE_TIME = 400
var/mob/living/carbon/human/H = C var/mob/living/carbon/human/H = C
if(H.head && H.head.flags & HEADCOVERSMOUTH) if(H.head && H.head.flags & HEADCOVERSMOUTH)
return 0 return 0
return 1 return 1

View File

@@ -5,6 +5,7 @@
var/brain_op_stage = 0.0 var/brain_op_stage = 0.0
var/eye_op_stage = 0.0 var/eye_op_stage = 0.0
var/appendix_op_stage = 0.0 var/appendix_op_stage = 0.0
var/alien_op_stage = 0.0
var/antibodies = 0 var/antibodies = 0

View File

@@ -20,6 +20,7 @@
see_in_dark = 5 see_in_dark = 5
var/obj/item/inventory_head var/obj/item/inventory_head
var/obj/item/inventory_back var/obj/item/inventory_back
var/facehugger
/mob/living/simple_animal/corgi/Life() /mob/living/simple_animal/corgi/Life()
..() ..()
@@ -375,7 +376,7 @@
if(health <= 0) if(health <= 0)
head_icon_state += "2" head_icon_state += "2"
var/icon/head_icon = icon('icons/mob/corgi_head.dmi',head_icon_state) var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
if(head_icon) if(head_icon)
overlays += head_icon overlays += head_icon
@@ -384,9 +385,16 @@
if(health <= 0) if(health <= 0)
back_icon_state += "2" back_icon_state += "2"
var/icon/back_icon = icon('icons/mob/corgi_back.dmi',back_icon_state) var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
if(back_icon) if(back_icon)
overlays += back_icon overlays += back_icon
if(facehugger)
if(istype(src, /mob/living/simple_animal/corgi/puppy))
overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy")
else
overlays += image('icons/mob/mask.dmi',"facehugger_corgi")
return return

View File

@@ -46,6 +46,12 @@
damage = 20 damage = 20
/obj/item/projectile/energy/neurotoxin
name = "neuro"
icon_state = "neurotoxin"
damage = 5
damage_type = TOX
weaken = 5

View File

@@ -49,10 +49,20 @@ should be listed in the changelog upon commit tho. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here --> <!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">31 December 2012</h2> <h2 class="date">08 January 2013</h2>
<h3 class="author">Cael Aislinn & WJohnston updated:</h3>
<ul class="changes bgimages16">
<li class="imageadd">Many new icons for aliens (death, sleeping, unconscious, neurotox, thrown/impregnated facehugger etc)</li>
<li class="rscadd">Alien larva can now be removed by dangerous and unnecessary surgery (and actually chestburst if they aren't).</li>
<li class="imageadd">Alien larva now have sprites to represent their growth: bloody at 0%, pale at 25% and 75% the normal deep red.</li>
<li class="rscadd">New icon overlays for representing alien embryo progression.</li>
</ul>
<div class="commit sansserif">
<h2 class="date">07 January 2013</h2>
<h3 class="author">Kor updated:</h3> <h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">
<li class="add">Four new slime types with their own extract reactions have been added. Sprites this time were created by Reisyn, SuperElement, and LePinkyFace.</li> <li class="rscadd">Four new slime types with their own extract reactions have been added. Sprites this time were created by Reisyn, SuperElement, and LePinkyFace.</li>
</ul> </ul>
<div class="commit sansserif"> <div class="commit sansserif">
@@ -60,7 +70,7 @@ should be listed in the changelog upon commit tho. Thanks. -->
<h3 class="author">Kor updated:</h3> <h3 class="author">Kor updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">
<li class="add">Slime breeding! There are now 13 varities of slime, each with its own extract reaction (inject five units of plasma). Some of these reactions are reused from the old cores, some are new. As to breeding, each colour of slime has a series of other slimes it may mutate into when it reproduces.</li> <li class="rscadd">Slime breeding! There are now 13 varities of slime, each with its own extract reaction (inject five units of plasma). Some of these reactions are reused from the old cores, some are new. As to breeding, each colour of slime has a series of other slimes it may mutate into when it reproduces.</li>
</ul> </ul>
<h3 class="author">Giacom updated:</h3> <h3 class="author">Giacom updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -79,7 +79,6 @@
#include "code\datums\spell.dm" #include "code\datums\spell.dm"
#include "code\datums\sun.dm" #include "code\datums\sun.dm"
#include "code\datums\supplypacks.dm" #include "code\datums\supplypacks.dm"
#include "code\datums\diseases\alien_embryo.dm"
#include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\appendicitis.dm"
#include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\beesease.dm"
#include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\brainrot.dm"
@@ -801,6 +800,7 @@
#include "code\modules\mob\living\carbon\alien\larva\life.dm" #include "code\modules\mob\living\carbon\alien\larva\life.dm"
#include "code\modules\mob\living\carbon\alien\larva\powers.dm" #include "code\modules\mob\living\carbon\alien\larva\powers.dm"
#include "code\modules\mob\living\carbon\alien\larva\update_icons.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\alien\special\facehugger.dm"
#include "code\modules\mob\living\carbon\brain\brain.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\brain_item.dm"