- 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
+20 -22
View File
@@ -358,8 +358,9 @@ Alien plants should do something if theres a lot of poison
*/
/var/const //for the status var
BURST = 0
GROWING = 1
GROWN = 2
BURSTING = 1
GROWING = 2
GROWN = 3
MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger
MAX_GROWTH_TIME = 3000
@@ -394,8 +395,7 @@ Alien plants should do something if theres a lot of poison
return
if(GROWN)
user << "\red You retrieve the child."
loc.contents += GetFacehugger()//need to write the code for giving it to the alien later
Burst()
Burst(0)
return
else
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
var/obj/item/clothing/mask/facehugger/child = GetFacehugger()
if(kill && istype(child))
loc.contents += child
child.Die()
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
@@ -465,19 +473,9 @@ Alien plants should do something if theres a lot of poison
if(status == GROWN)
if(!CanHug(AM))
return
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
status = BURST
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)
Burst(0)
@@ -33,6 +33,36 @@
icon_state = "sheet-lizard"
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
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
@@ -87,6 +87,45 @@
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))))
return ..()
@@ -184,6 +223,42 @@
M.take_organ_damage(15)
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))))
return ..()
@@ -513,6 +588,33 @@
M.updatehealth()
M:eye_op_stage = 1.0
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
return ..()
/* wat
@@ -657,6 +759,32 @@
..()
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
return ..()
/*
+62 -44
View File
@@ -240,73 +240,59 @@
return
/obj/structure/table/attack_paw(mob/user as mob)
if ((HULK in usr.mutations))
usr << "\blue You destroy the table."
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
visible_message("\red [user] smashes the table apart!")
/obj/structure/table/attack_paw(mob/user)
if(HULK in user.mutations)
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
visible_message("<span class='danger'>[user] smashes the table apart!</span>")
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))
new/obj/item/weapon/table_parts/wood( src.loc )
new/obj/item/weapon/table_parts/wood(loc)
else
new /obj/item/weapon/table_parts( src.loc )
src.density = 0
new /obj/item/weapon/table_parts(loc)
density = 0
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
usr << "\green You destroy the table."
visible_message("\red [user] slices the table apart!")
/obj/structure/table/attack_alien(mob/user)
visible_message("<span class='danger'>[user] slices [src] apart!</span>")
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))
new/obj/item/weapon/table_parts/wood( src.loc )
new/obj/item/weapon/table_parts/wood(loc)
else
new /obj/item/weapon/table_parts( src.loc )
src.density = 0
new /obj/item/weapon/table_parts(loc)
density = 0
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)
usr << "\red You destroy the table."
visible_message("\red [user] smashes the table apart!")
visible_message("<span class='danger'>[user] smashes [src] apart!</span>")
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))
new/obj/item/weapon/table_parts/wood( src.loc )
new/obj/item/weapon/table_parts/wood(loc)
else
new /obj/item/weapon/table_parts( src.loc )
src.density = 0
new /obj/item/weapon/table_parts(loc)
density = 0
del(src)
return
/obj/structure/table/attack_hand(mob/user as mob)
if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << "\blue You destroy the table."
visible_message("\red [user] smashes the table apart!")
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
/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!" ))
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))
new/obj/item/weapon/table_parts/wood( src.loc )
new/obj/item/weapon/table_parts/wood(loc)
else
new /obj/item/weapon/table_parts( src.loc )
src.density = 0
new /obj/item/weapon/table_parts(loc)
density = 0
del(src)
return
/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))
new /obj/item/weapon/rack_parts( src.loc )
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
//SN src = null
del(src)
return
if(isrobot(user))
@@ -564,4 +549,37 @@
return
/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)