Removes xenomorphs (#6686)

Xenomorphs are pretty much badly done and don't really fit at all. This pr fully removes the human type ones, alongside with the infection, eggs and facehuggers.
This commit is contained in:
Alberyk
2019-07-24 21:34:44 +03:00
committed by Erki
parent 74eff393ba
commit d0dff4c370
48 changed files with 34 additions and 1831 deletions
-96
View File
@@ -1,96 +0,0 @@
#define BURST 0
#define BURSTING 1
#define GROWING 2
#define GROWN 3
#define MAX_PROGRESS 100
/obj/structure/alien/egg
desc = "It looks like a weird egg."
name = "egg"
icon_state = "egg_growing"
density = 0
anchored = 1
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
var/progress = 0
/obj/structure/alien/egg/Initialize()
. = ..()
START_PROCESSING(SSprocessing, src)
/obj/structure/alien/egg/Destroy()
STOP_PROCESSING(SSprocessing, src)
return ..()
/obj/structure/alien/egg/process()
progress++
if(progress >= MAX_PROGRESS)
Grow()
STOP_PROCESSING(SSprocessing, src)
update_icon()
/obj/structure/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))
return
switch(status)
if(BURST)
to_chat(user, "<span class='warning'>You clear the hatched egg.</span>")
qdel(src)
return
if(GROWING)
to_chat(user, "<span class='warning'>The child is not developed yet.</span>")
return
if(GROWN)
to_chat(user, "<span class='warning'>You retrieve the child.</span>")
Burst(0)
return
/obj/structure/alien/egg/proc/GetFacehugger()
return locate(/obj/item/clothing/mask/facehugger) in contents
/obj/structure/alien/egg/proc/Grow()
icon_state = "egg"
status = GROWN
new /obj/item/clothing/mask/facehugger(src)
return
/obj/structure/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining
if(status == GROWN || status == GROWING)
icon_state = "egg_hatched"
flick("egg_opening", src)
status = BURSTING
addtimer(CALLBACK(src, .proc/givefacehugger, kill), 15)
/obj/structure/alien/egg/proc/givefacehugger(var/kill = 1)
var/obj/item/clothing/mask/facehugger/child = GetFacehugger()
status = BURST
child.forceMove(get_turf(src))
if(kill && istype(child))
child.Die()
else
for(var/mob/M in range(1,src))
if(CanHug(M))
child.Attach(M)
break
/obj/structure/alien/egg/HasProximity(atom/movable/AM as mob|obj)
if(status == GROWN)
if(!CanHug(AM))
return
var/mob/living/carbon/C = AM
if(C.stat == CONSCIOUS && C.status_flags & XENO_HOST)
return
Burst(0)
#undef BURST
#undef BURSTING
#undef GROWING
#undef GROWN
#undef MAX_PROGRESS
@@ -35,14 +35,6 @@
visible_message("<span class='danger'>\The [user] destroys \the [name]!</span>")
health = 0
else
// Aliens can get straight through these.
if(istype(user,/mob/living/carbon))
var/mob/living/carbon/M = user
if(locate(/obj/item/organ/xenos/hivenode) in M.internal_organs)
visible_message("<span class='alium'>\The [user] strokes \the [name] and it melts away!</span>")
health = 0
healthcheck()
return
visible_message("<span class='danger'>\The [user] claws at \the [src]!</span>")
// Todo check attack datums.
health -= rand(5,10)
@@ -1,83 +0,0 @@
/obj/structure/lamarr
name = "lab cage"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "labcage1"
desc = "A glass lab container for storing interesting creatures."
density = 1
anchored = 1
unacidable = 1//Dissolving the case would also delete Lamarr
var/health = 30
var/occupied = 1
var/destroyed = 0
/obj/structure/lamarr/ex_act(severity)
switch(severity)
if (1)
new /obj/item/weapon/material/shard( src.loc )
Break()
qdel(src)
if (2)
if (prob(50))
src.health -= 15
src.healthcheck()
if (3)
if (prob(50))
src.health -= 5
src.healthcheck()
/obj/structure/lamarr/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
src.healthcheck()
return
/obj/structure/lamarr/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
src.density = 0
src.destroyed = 1
new /obj/item/weapon/material/shard( src.loc )
playsound(src, "shatter", 70, 1)
Break()
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
return
/obj/structure/lamarr/update_icon()
if(src.destroyed)
src.icon_state = "labcageb[src.occupied]"
else
src.icon_state = "labcage[src.occupied]"
return
/obj/structure/lamarr/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
src.health -= W.force
src.healthcheck()
..()
return
/obj/structure/lamarr/attack_hand(mob/user as mob)
if (src.destroyed)
return
else
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
to_chat(user, "<span class='warning'>You kick the lab cage.</span>")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
to_chat(O, "<span class='warning'>[user] kicks the lab cage.</span>")
src.health -= 2
healthcheck()
return
/obj/structure/lamarr/proc/Break()
if(occupied)
new /obj/item/clothing/mask/facehugger/lamarr(src.loc)
occupied = 0
update_icon()
return
@@ -39,38 +39,6 @@
src.add_fingerprint(user)
return
/obj/structure/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob)
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) )
return
unbuckle_mob()
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)
return
if(istype(xenos) && !(locate(/obj/item/organ/xenos/hivenode) in xenos.internal_organs))
return
if(M == usr)
return
else
M.visible_message(\
"<span class='notice'>[user.name] secretes a thick vile goo, securing [M.name] into [src]!</span>",\
"<span class='warning'>[user.name] drenches you in a foul-smelling resin, trapping you in the [src]!</span>",\
"<span class='notice'>You hear squelching...</span>")
M.buckled = src
M.forceMove(src.loc)
M.set_dir(src.dir)
M.update_canmove()
M.pixel_y = 6
M.old_y = 6
src.buckled_mob = M
src.add_fingerprint(user)
return
/obj/structure/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob)
var/aforce = W.force
health = max(0, health - aforce)