diff --git a/code/game/objects/structures/alien/egg.dm b/code/game/objects/structures/alien/egg.dm
index 4e8b00812fc..c16c1a182e8 100644
--- a/code/game/objects/structures/alien/egg.dm
+++ b/code/game/objects/structures/alien/egg.dm
@@ -16,17 +16,24 @@
processing_objects -= src
..()
+/obj/structure/alien/egg/CanUseTopic(var/mob/user)
+ return isobserver(user) ? STATUS_INTERACTIVE : STATUS_CLOSE
+
+/obj/structure/alien/egg/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if(href_list["spawn"])
+ attack_ghost(usr)
+
/obj/structure/alien/egg/process()
- if(progress < MAX_PROGRESS)
- progress++
- if(progress == MAX_PROGRESS)
- for(var/mob/M in dead_mob_list)
- if(istype(M,/mob/dead) && M.client && M.client.prefs && (M.client.prefs.be_special & BE_ALIEN))
- M << "An alien egg is ready to hatch!" // Todo add a JUMP link.
+ progress++
+ if(progress >= MAX_PROGRESS)
+ for(var/mob/M in dead_mob_list)
+ if(istype(M,/mob/dead) && M.client && M.client.prefs && (M.client.prefs.be_special & BE_ALIEN))
+ M << "An alien is ready to hatch! ([ghost_follow_link(src, M)]) (spawn)"
+ processing_objects -= src
update_icon()
- return
- // Max progress, cancel processing.
- processing_objects -= src
/obj/structure/alien/egg/update_icon()
if(progress == -1)
@@ -37,8 +44,6 @@
icon_state = "egg"
/obj/structure/alien/egg/attack_ghost(var/mob/dead/observer/user)
-
-
if(progress == -1) //Egg has been hatched.
return
@@ -88,4 +93,4 @@
desc += " This one has hatched."
update_icon()
-#undef MAX_PROGRESS
\ No newline at end of file
+#undef MAX_PROGRESS
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 5d3915c7fd8..8804ce77811 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -91,11 +91,14 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images
/mob/dead/observer/Topic(href, href_list)
if (href_list["track"])
- var/mob/target = locate(href_list["track"]) in mob_list
- if(target)
- ManualFollow(target)
-
-
+ if(istype(href_list["track"],/mob))
+ var/mob/target = locate(href_list["track"]) in mob_list
+ if(target)
+ ManualFollow(target)
+ else
+ var/atom/target = locate(href_list["track"])
+ if(istype(target))
+ ManualFollow(target)
/mob/dead/attackby(obj/item/W, mob/user)
if(istype(W,/obj/item/weapon/book/tome))
@@ -320,7 +323,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(following && following == target)
return
following = target
- src << "Now following [target]"
+ src << "Now following \the [target]"
if(ismob(target))
forceMove(get_turf(target))
var/mob/M = target
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index 814b5f07054..5ca32e24d0e 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -7,7 +7,7 @@
var/turf/T = get_turf(src)
var/obj/effect/plant/plant = locate() in T
- if(environment.gas["phoron"] > 0 || (plant && plant.seed && plant.seed.name == "xenophage"))
+ if(environment.gas["phoron"] > 0 || (plant && plant.seed.type == /datum/seed/xenomorph))
update_progression()
adjustBruteLoss(-1)
adjustFireLoss(-1)