diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index b8cebfbf271..7daf7eeaf3c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -8,6 +8,14 @@ #define ishuman(A) (istype(A, /mob/living/carbon/human)) +// Human sub-species +#define isabductor(A) (is_species(A, /datum/species/abductor)) +#define isgolem(A) (is_species(A, /datum/species/golem)) +#define islizard(A) (is_species(A, /datum/species/lizard)) +#define isplasmaman(A) (is_species(A, /datum/species/plasmaman)) +#define ispodperson(A) (is_species(A, /datum/species/podperson)) +#define isflyperson(A) (is_species(A, /datum/species/fly)) + #define ismonkey(A) (istype(A, /mob/living/carbon/monkey)) #define isbrain(A) (istype(A, /mob/living/carbon/brain)) @@ -80,4 +88,4 @@ #define issignaler(O) (istype(O, /obj/item/device/assembly/signaler)) -#define istimer(O) (istype(O, /obj/item/device/assembly/timer)) \ No newline at end of file +#define istimer(O) (istype(O, /obj/item/device/assembly/timer)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 43f136615be..5fc6b1400d6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -319,9 +319,9 @@ Proc for attack log creation, because really why not if(progbar) qdel(progbar) -/proc/isabductor(A) +/proc/is_species(A, species_datum) . = FALSE if(ishuman(A)) var/mob/living/carbon/human/H = A - if(H.dna && istype(H.dna.species, /datum/species/abductor)) + if(H.dna && istype(H.dna.species, species_datum)) . = TRUE diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 5726f1f1880..47b291d5152 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -515,15 +515,31 @@ return FALSE return TRUE +/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user) + var/list/destinations = list() + + if(isgolem(user)) + for(var/obj/item/device/radio/beacon/B in world) + var/turf/T = get_turf(B) + if(istype(T.loc, /area/ruin/powered/golem_ship)) + destinations += B + + // In the event golem beacon is destroyed, send to station instead + if(destinations.len) + return destinations + + for(var/obj/item/device/radio/beacon/B in world) + var/turf/T = get_turf(B) + if(T.z == ZLEVEL_STATION) + destinations += B + + return destinations + /obj/item/device/wormhole_jaunter/proc/activate(mob/user) if(!turf_check(user)) return - var/list/L = list() - for(var/obj/item/device/radio/beacon/B in world) - var/turf/T = get_turf(B) - if(T.z == ZLEVEL_STATION) - L += B + var/list/L = get_destinations(user) if(!L.len) user << "The [src.name] found no beacons in the world to anchor a wormhole to." return