diff --git a/code/datums/diseases/alien_embryo.dm b/code/datums/diseases/alien_embryo.dm index 5a6f16fb5de..7928610439c 100644 --- a/code/datums/diseases/alien_embryo.dm +++ b/code/datums/diseases/alien_embryo.dm @@ -15,6 +15,18 @@ cure(0) return +/datum/disease/alien_embryo/New() + ..() + /* Special Hud for xenos */ + spawn(0) + if (affected_mob) + AddInfectionImages(affected_mob) + +/datum/disease/alien_embryo/cure(var/resistance=1) + ..() + spawn(0) + if (affected_mob) + RemoveInfectionImages(affected_mob) /datum/disease/alien_embryo name = "Unidentified Foreign Body" @@ -88,3 +100,51 @@ gibbed = 1 return +/*---------------------------------------- +Proc: RefreshInfectionImage() +Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens. +----------------------------------------*/ +/datum/disease/alien_embryo/proc/RefreshInfectionImage() + spawn(0) + for (var/mob/living/carbon/alien/alien in world) + if (alien.client) + for(var/image/I in alien.client.images) + if(I.icon_state == "infected") + del(I) + + for (var/mob/living/carbon/alien/alien in world) + if (alien.client) + for (var/mob/living/carbon/C in world) + if(C) + if (C.status_flags & XENO_HOST) + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") + 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. +----------------------------------------*/ +/datum/disease/alien_embryo/proc/AddInfectionImages(var/mob/living/carbon/C) + if (C) + for (var/mob/living/carbon/alien/alien in world) + if (alien.client) + if (C.status_flags & XENO_HOST) + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") + 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). +----------------------------------------*/ + +/datum/disease/alien_embryo/proc/RemoveInfectionImages(var/mob/living/carbon/C) + if (C) + for (var/mob/living/carbon/alien/alien in world) + if (alien.client) + for(var/image/I in alien.client.images) + if(I.loc == C) + if(I.icon_state == "infected") + del(I) + return diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 7e89ea5e08a..875bcc7178c 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -108,7 +108,7 @@ /obj/machinery/optable/process() check_victim() -/obj/machinery/optable/attackby(obj/item/weapon/W as obj, mob/user as mob) +/obj/machinery/optable/attackby(obj/item/weapon/W as obj, mob/living/carbon/user as mob) if (istype(W, /obj/item/weapon/grab)) if(ismob(W:affecting)) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index bcbd9397d7b..9c1d7cdc46f 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -50,4 +50,30 @@ else // add some movement delay move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10 - return \ No newline at end of file + return + + +/*---------------------------------------- +Proc: AddInfectionImages() +Des: Gives the client of the alien an image on each infected mob. +----------------------------------------*/ +/mob/living/carbon/alien/proc/AddInfectionImages() + if (client) + for (var/mob/living/carbon/C in world) + if(C.status_flags & XENO_HOST) + var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected") + client.images += I + return + + +/*---------------------------------------- +Proc: RemoveInfectionImages() +Des: Removes all infected images from the alien. +----------------------------------------*/ +/mob/living/carbon/alien/proc/RemoveInfectionImages() + if (client) + for(var/image/I in client.images) + if(I.icon_state == "infected") + del(I) + return + diff --git a/code/modules/mob/living/carbon/alien/login.dm b/code/modules/mob/living/carbon/alien/login.dm new file mode 100644 index 00000000000..9701338e4b2 --- /dev/null +++ b/code/modules/mob/living/carbon/alien/login.dm @@ -0,0 +1,4 @@ +/mob/living/carbon/alien/humanoid/Login() + ..() + AddInfectionImages() + return diff --git a/code/modules/mob/living/carbon/alien/logout.dm b/code/modules/mob/living/carbon/alien/logout.dm new file mode 100644 index 00000000000..c0734cd21fd --- /dev/null +++ b/code/modules/mob/living/carbon/alien/logout.dm @@ -0,0 +1,4 @@ +/mob/living/carbon/alien/humanoid/Logout() + ..() + RemoveInfectionImages() + return diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 7d332eb4414..e10dfa59369 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -14,6 +14,9 @@ /mob/living/silicon/proc/show_laws() return +/mob/living/silicon/drop_item() + return + /mob/living/silicon/emp_act(severity) switch(severity) if(1) diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index c0801885f43..502a40abad4 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ