diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 99dd086df79..6a4bece7994 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -130,7 +130,7 @@ to null does not delete the object itself. Thank you. del(D) // if there are somehow two viruses of the same kind in the system, delete the other one if(holder == affected_mob) - if(affected_mob.stat < 2) //he's alive + if(affected_mob.stat != DEAD) //he's alive stage_act() else //he's dead. if(spread_type!=SPECIAL) diff --git a/code/datums/diseases/alien_embryo.dm b/code/datums/diseases/alien_embryo.dm index 4e5d0910485..d4008522eb7 100644 --- a/code/datums/diseases/alien_embryo.dm +++ b/code/datums/diseases/alien_embryo.dm @@ -1,5 +1,20 @@ //affected_mob.contract_disease(new /datum/disease/alien_embryo) +//Our own special process so that dead hosts still chestburst +/datum/disease/alien_embryo/process() + if(!holder) return + if(holder == affected_mob) + stage_act() + + if(affected_mob.stat == DEAD) + if(prob(50)) + if(--longevity<=0) + cure(0) + + if(!affected_mob) //the virus is in inanimate obj + cure(0) + return + /datum/disease/alien_embryo name = "Unidentified Foreign Body" @@ -60,29 +75,23 @@ if(G.client.be_alien) if(((G.client.inactivity/10)/60) <= 5) if(G.corpse) - if(G.corpse.stat==2) + if(G.corpse.stat==DEAD) candidates.Add(G) - if(!G.corpse) + else candidates.Add(G) + + var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc) if(candidates.len) var/mob/dead/observer/G = pick(candidates) - var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc) new_xeno.mind_initialize(G,"Larva") new_xeno.key = G.key del(G) else if(affected_mob.client) - affected_mob.client.mob = new/mob/living/carbon/alien/larva(affected_mob.loc) + affected_mob.client.mob = new_xeno + new_xeno << sound('hiss5.ogg',0,0,0,100) //To get the player's attention affected_mob.gib() src.cure(0) gibbed = 1 - - /* - if(affected_mob.client) - affected_mob.client.mob = new/mob/living/carbon/alien/larva(affected_mob.loc) - else - new/mob/living/carbon/alien/larva(affected_mob.loc) - affected_mob:gib() - */ return diff --git a/code/game/objects/alien/facehugger.dm b/code/game/objects/alien/facehugger.dm index 1f413f5e996..9cfebd2ede5 100644 --- a/code/game/objects/alien/facehugger.dm +++ b/code/game/objects/alien/facehugger.dm @@ -40,6 +40,7 @@ var/const/MAX_ACTIVE_TIME = 600 attack(mob/living/M as mob, mob/user as mob) ..() + user.drop_from_inventory(src) Attach(M) New() @@ -72,6 +73,8 @@ var/const/MAX_ACTIVE_TIME = 600 Die() return + equipped(mob/M) + Attach(M) HasEntered(atom/target) Attach(target) @@ -89,23 +92,18 @@ var/const/MAX_ACTIVE_TIME = 600 proc/Attach(M as mob) if(!isliving(M) || isalien(M)) return - if(attached) return else attached++ spawn(MAX_IMPREGNATION_TIME) - attached = 0 + attached = 0 var/mob/living/L = M //just so I don't need to use : - 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 - loc = L.loc - if(issilicon(L)) for(var/mob/O in viewers(src, null)) O.show_message("\red \b [src] smashes against [L]'s frame!", 1) @@ -126,31 +124,17 @@ var/const/MAX_ACTIVE_TIME = 600 return 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) - if(!W.canremove) - return - - target.u_equip(W) - if (target.client) - target.client.screen -= W - W.loc = target.loc - W.dropped(target) - W.layer = initial(W.layer) for(var/mob/O in viewers(target, null)) O.show_message("\red \b [src] tears [W] off of [target]'s face!", 1) - if(istype(loc,/mob/living/carbon/alien)) //just taking it off from the alien's UI - var/mob/living/carbon/alien/host = loc - host.u_equip(src) - if (host.client) - host.client.screen -= src - add_fingerprint(host) - loc = target layer = 20 target.wear_mask = src - target.update_inv_wear_mask() GoIdle() //so it doesn't jump the people that tear it off @@ -163,7 +147,7 @@ var/const/MAX_ACTIVE_TIME = 600 return proc/Impregnate(mob/living/carbon/target as mob) - if(!target || target.wear_mask != src) //was taken off or something + if(!target || target.wear_mask != src || target.stat == DEAD) //was taken off or something return if(!sterile) diff --git a/code/game/objects/alien/nest.dm b/code/game/objects/alien/nest.dm index a34a9e95ca1..82175162627 100644 --- a/code/game/objects/alien/nest.dm +++ b/code/game/objects/alien/nest.dm @@ -7,6 +7,7 @@ "[user.name] pulls [buckled_mob.name] free from the sticky nest!",\ "[user.name] pulls you free from the gelatinous resin.",\ "You hear squelching...") + buckled_mob.pixel_y = 0 unbuckle() else buckled_mob.visible_message(\ @@ -14,7 +15,9 @@ "You struggle to break free from the gelatinous resin...",\ "You hear squelching...") spawn(1200) - if(buckled_mob && user.buckled == src) unbuckle() + if(buckled_mob && user.buckled == src) + buckled_mob.pixel_y = 0 + unbuckle() src.add_fingerprint(user) return @@ -40,6 +43,7 @@ M.loc = src.loc M.dir = src.dir M.update_canmove() + M.pixel_y = 6 src.buckled_mob = M src.add_fingerprint(user) return diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index b71e2d8abba..811b4f98a66 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -6,10 +6,7 @@ if(name == "alien larva") name = text("alien larva ([rand(1, 1000)])") real_name = name - spawn (1) - regenerate_icons() - src << "\blue Your icons have been generated!" -// spawn(1200) grow() Grow after 120 seconds -- TLE Commented out because life.dm has better version -- Urist + regenerate_icons() ..() /mob/living/carbon/alien/larva/proc/mind_initialize(mob/G, alien_caste) diff --git a/html/changelog.html b/html/changelog.html index 1995074a4bd..a5187f42d2f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -46,6 +46,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +