diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm
index aba6e6baea9..65b7f0f24d0 100644
--- a/code/__DEFINES/genetics.dm
+++ b/code/__DEFINES/genetics.dm
@@ -142,4 +142,5 @@
#define VIRUSIMMUNE 14
#define NOCRITDAMAGE 15
#define RESISTHOT 16
-#define RESISTCOLD 17
\ No newline at end of file
+#define RESISTCOLD 17
+#define NO_EXAMINE 18
\ No newline at end of file
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 023ebe426d9..74119ae23bf 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -130,7 +130,31 @@
#define EYE_SHINE_THRESHOLD 6 //dark_view threshold past which a humanoid's eyes will 'shine' in the dark.
//Human sub-species
-#define isabductor(A) (is_species(A, "Abductor"))
+#define isshadowling(A) (is_species(A, /datum/species/shadow/ling))
+#define isshadowlinglesser(A) (is_species(A, /datum/species/shadow/ling/lesser))
+#define isabductor(A) (is_species(A, /datum/species/abductor))
+#define isgolem(A) (is_species(A, /datum/species/golem))
+#define ismonkeybasic(A) (is_species(A, /datum/species/monkey))
+#define isfarwa(A) (is_species(A, /datum/species/monkey/tajaran))
+#define iswolpain(A) (is_species(A, /datum/species/monkey/vulpkanin))
+#define isneara(A) (is_species(A, /datum/species/monkey/skrell))
+#define isttok(A) (is_species(A, /datum/species/monkey/unathi))
+#define isplasmaman(A) (is_species(A, /datum/species/plasmaman))
+#define isshadowperson(A) (is_species(A, /datum/species/shadow))
+#define isskeleton(A) (is_species(A, /datum/species/skeleton))
+#define ishumanbasic(A) (is_species(A, /datum/species/human))
+#define isunathi(A) (is_species(A, /datum/species/unathi))
+#define istajaran(A) (is_species(A, /datum/species/tajaran))
+#define isvulpkanin(A) (is_species(A, /datum/species/vulpkanin))
+#define isskrell(A) (is_species(A, /datum/species/skrell))
+#define isvox(A) (is_species(A, /datum/species/vox))
+#define isvoxarmalis(A) (is_species(A, /datum/species/vox/armalis))
+#define iskidan(A) (is_species(A, /datum/species/kidan))
+#define isslimeperson(A) (is_species(A, /datum/species/slime))
+#define isgrey(A) (is_species(A, /datum/species/grey))
+#define isdiona(A) (is_species(A, /datum/species/diona))
+#define ismachine(A) (is_species(A, /datum/species/machine))
+#define isdrask(A) (is_species(A, /datum/species/drask))
#define isanimal(A) (istype((A), /mob/living/simple_animal))
#define iscorgi(A) (istype((A), /mob/living/simple_animal/pet/corgi))
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 8628e6957cf..3a6e8be62ac 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -373,11 +373,11 @@ This is always put in the attack log.
if(progress)
qdel(progbar)
-/proc/is_species(A, species_name)
+/proc/is_species(A, species_datum)
. = FALSE
if(ishuman(A))
var/mob/living/carbon/human/H = A
- if(H.get_species() == species_name)
+ if(H.dna && istype(H.dna.species, species_datum))
. = TRUE
/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE, list/extra_args)
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 71cb7bc9cc0..0299a7ec2fc 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -43,7 +43,7 @@
else
return 1
- if(isscrewdriver(src) && M.get_species() == "Machine")
+ if(isscrewdriver(src) && ismachine(M))
if(!attempt_initiate_surgery(src, M, user))
return 0
else
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index ebacefbcc49..4fc2522ce65 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -280,7 +280,7 @@ var/record_id_num = 1001
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["sex"] = capitalize(H.gender)
- G.fields["species"] = H.get_species()
+ G.fields["species"] = H.dna.species.name
G.fields["photo"] = get_id_photo(H)
G.fields["photo-south"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = SOUTH))]'"
G.fields["photo-west"] = "'data:image/png;base64,[icon2base64(icon(G.fields["photo"], dir = WEST))]'"
diff --git a/code/datums/diseases/kingstons.dm b/code/datums/diseases/kingstons.dm
index e65f5da3355..260f01e0301 100644
--- a/code/datums/diseases/kingstons.dm
+++ b/code/datums/diseases/kingstons.dm
@@ -16,26 +16,26 @@
switch(stage)
if(1)
if(prob(10))
- if(affected_mob.get_species() == "Tajaran")
+ if(istajaran(affected_mob))
to_chat(affected_mob, "You feel good.")
else
to_chat(affected_mob, "You feel like playing with string.")
if(2)
if(prob(10))
- if(affected_mob.get_species() == "Tajaran")
+ if(istajaran(affected_mob))
to_chat(affected_mob, "Something in your throat itches.")
else
to_chat(affected_mob, "You NEED to find a mouse.")
if(3)
if(prob(10))
- if(affected_mob.get_species() == "Tajaran")
+ if(istajaran(affected_mob))
to_chat(affected_mob, "You feel something in your throat!")
affected_mob.emote("cough")
else
affected_mob.say(pick(list("Mew", "Meow!", "Nya!~")))
if(4)
if(prob(5))
- if(affected_mob.get_species() == "Tajaran")
+ if(istajaran(affected_mob))
affected_mob.visible_message("[affected_mob] coughs up a hairball!", \
"You cough up a hairball!")
affected_mob.Stun(5)
@@ -59,7 +59,7 @@
severity = BIOHAZARD
var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin) //no karma races sorrys.
var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
- var/chosentype
+ var/datum/species/chosentype
var/chosensuff
/datum/disease/kingstons/advanced/New()
@@ -70,26 +70,27 @@
/datum/disease/kingstons/advanced/stage_act()
..()
- switch(stage)
- if(1)
- if(prob(10))
- to_chat(affected_mob, "You feel awkward.")
- if(2)
- if(prob(10))
- to_chat(affected_mob, "You itch.")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "Your skin starts to flake!")
+ if(ishuman(affected_mob))
+ var/mob/living/carbon/human/twisted = affected_mob
+ switch(stage)
+ if(1)
+ if(prob(10))
+ to_chat(twisted, "You feel awkward.")
+ if(2)
+ if(prob(10))
+ to_chat(twisted, "You itch.")
+ if(3)
+ if(prob(10))
+ to_chat(twisted, "Your skin starts to flake!")
- if(4)
- if(prob(5))
- if(affected_mob.get_species() != chosentype)
- affected_mob.visible_message("[affected_mob]'s skin splits and form contorts!", \
- "Your body mutates into a [chosentype]!")
- var/mob/living/carbon/human/twisted = affected_mob
- twisted.set_species(chosentype)
- else
- affected_mob.visible_message("[affected_mob] scratches at thier skin!", \
- "You scratch your skin to try not to itch!")
- affected_mob.adjustBruteLoss(-5)
- affected_mob.adjustStaminaLoss(5)
\ No newline at end of file
+ if(4)
+ if(prob(5))
+ if(!istype(twisted.dna.species, chosentype))
+ twisted.visible_message("[twisted]'s skin splits and form contorts!", \
+ "Your body mutates into a [initial(chosentype.name)]!")
+ twisted.set_species(chosentype)
+ else
+ twisted.visible_message("[twisted] scratches at thier skin!", \
+ "You scratch your skin to try not to itch!")
+ twisted.adjustBruteLoss(-5)
+ twisted.adjustStaminaLoss(5)
\ No newline at end of file
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
index 8ffbcba22c9..444b4838319 100644
--- a/code/datums/diseases/transformation.dm
+++ b/code/datums/diseases/transformation.dm
@@ -194,12 +194,12 @@
if(1)
if(ishuman(affected_mob))
var/mob/living/carbon/human/H = affected_mob
- if(H.dna.species.name == "Slime People")
+ if(isslimeperson(H))
stage = 5
if(3)
if(ishuman(affected_mob))
var/mob/living/carbon/human/human = affected_mob
- if(human.dna.species.name != "Slime People")
+ if(!isslimeperson(human))
human.set_species(/datum/species/slime)
/datum/disease/transformation/corgi
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index b31084aee9f..edb254203bf 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -371,7 +371,7 @@
)
/datum/outfit/admin/vox/equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(H.get_species() == "Vox Armalis")
+ if(isvoxarmalis(H))
. = ..()
else
H.equip_vox_raider()
diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm
index f7c36929432..131ebdf3428 100644
--- a/code/game/dna/dna2.dm
+++ b/code/game/dna/dna2.dm
@@ -435,8 +435,4 @@ var/global/list/bad_blocks[0]
UpdateSE()
species = new data["species"]
b_type = data["b_type"]
- real_name = data["real_name"]
-
-// a nice hook for if/when we refactor species on dna
-/datum/dna/proc/get_species_name()
- return species.name
\ No newline at end of file
+ real_name = data["real_name"]
\ No newline at end of file
diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm
index 8d858c6fade..70e78176463 100644
--- a/code/game/gamemodes/cult/talisman.dm
+++ b/code/game/gamemodes/cult/talisman.dm
@@ -279,7 +279,7 @@
var/mob/living/carbon/human/H = user
user.visible_message("Otherworldly armor suddenly appears on [user]!", \
"You speak the words of the talisman, arming yourself!")
- if(H.get_species() == "Plasmaman")
+ if(isplasmaman(H))
H.equip_to_slot(new /obj/item/clothing/suit/space/eva/plasmaman/cultist(H), slot_wear_suit)
H.equip_to_slot(new /obj/item/clothing/head/helmet/space/eva/plasmaman/cultist(H), slot_head)
else
diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm
index 50b749a62a2..ca868f4874e 100644
--- a/code/game/gamemodes/intercept_report.dm
+++ b/code/game/gamemodes/intercept_report.dm
@@ -116,7 +116,7 @@
if((man.mind.assigned_role in ticker.mode.protected_jobs) || (man.mind.assigned_role in ticker.mode.restricted_jobs))
return
//don't include suspects who can't possibly be the antag based on their species (no suspecting the machines of being sneaky changelings)
- if(man.get_species() in ticker.mode.protected_species)
+ if(man.dna.species.name in ticker.mode.protected_species)
return
dudes += man
for(var/i = 0, i < max(player_list.len/10,2), i++)
diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm
index d94ea557744..09e91869fd9 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction.dm
@@ -338,7 +338,7 @@
if(!owner.current || !ishuman(owner.current))
return 0
var/mob/living/carbon/human/H = owner.current
- if(H.get_species() != "Abductor")
+ if(!isabductor(H))
return 0
ab_team = H.mind.abductor.team
for(var/obj/machinery/abductor/experiment/E in abductor_equipment)
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index 99e93288645..73a910e54ef 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -248,7 +248,7 @@
name = "alien pistol"
desc = "A complicated gun that fires bursts of high-intensity radiation."
ammo_type = list(/obj/item/ammo_casing/energy/declone)
- restricted_species = list("Abductor")
+ restricted_species = list(/datum/species/abductor)
icon_state = "alienpistol"
item_state = "alienpistol"
origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3"
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm
index 3ecb33466c8..d4d791c5b19 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm
@@ -15,7 +15,7 @@
return FALSE
var/mob/living/carbon/human/H = user
// You must either: Be of the abductor species, or contain an abductor implant
- if((H.get_species() == "Abductor" || (locate(/obj/item/implant/abductor) in H)))
+ if((isabductor(H) || (locate(/obj/item/implant/abductor) in H)))
return TRUE
return FALSE
@@ -93,7 +93,7 @@
return FALSE
var/mob/living/carbon/human/H = user
// You must either: Be of the abductor species, or contain an abductor implant
- if((H.get_species() == "Abductor" || (locate(/obj/item/implant/abductor) in H)))
+ if((isabductor(H) || (locate(/obj/item/implant/abductor) in H)))
return TRUE
return FALSE
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 1d0bb3adf03..3c1f5d47ed8 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -209,7 +209,7 @@ Made by Xhuis
if(shadow.special_role == SPECIAL_ROLE_SHADOWLING && config.shadowling_max_age)
if(ishuman(shadow.current))
var/mob/living/carbon/human/H = shadow.current
- if(H.get_species() != "Shadow")
+ if(!isshadowling(H))
for(var/obj/effect/proc_holder/spell/targeted/shadowling_hatch/hatch_ability in shadow.spell_list)
hatch_ability.cycles_unused++
if(!H.stunned && prob(20) && hatch_ability.cycles_unused > config.shadowling_max_age)
@@ -317,7 +317,7 @@ Made by Xhuis
blood_color = "#555555"
flesh_color = "#222222"
- species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS) //Can't use guns due to muzzle flash
+ species_traits = list(NO_BLOOD, NO_BREATHE, RADIMMUNE, NOGUNS, NO_EXAMINE) //Can't use guns due to muzzle flash
burn_mod = 1.5 //1.5x burn damage, 2x is excessive
oxy_mod = 0
heatmod = 1.5
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index 3cb08739a7c..f8f55f0e126 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -2,8 +2,10 @@
/obj/effect/proc_holder/spell/proc/shadowling_check(var/mob/living/carbon/human/H)
if(!H || !istype(H)) return
- if(H.get_species() == "Shadowling" && is_shadow(H)) return 1
- if(H.get_species() == "Lesser Shadowling" && is_thrall(H)) return 1
+ if(isshadowling(H) && is_shadow(H))
+ return 1
+ if(isshadowlinglesser(H) && is_thrall(H))
+ return 1
if(!is_shadow_or_thrall(usr))
to_chat(usr, "You can't wrap your head around how to do this.")
else if(is_thrall(usr))
@@ -267,7 +269,7 @@
listclearnulls(ticker.mode.shadowling_thralls)
if(!(ling.mind in ticker.mode.shadows))
return
- if(ling.get_species() != "Shadowling")
+ if(!isshadowling(ling))
if(ticker.mode.shadowling_thralls.len >= 5)
charge_counter = charge_max
return
@@ -610,7 +612,7 @@
to_chat(user, "[thrallToRevive] must be conscious to become empowered.")
charge_counter = charge_max
return
- if(thrallToRevive.get_species() == "Lesser Shadowling")
+ if(isshadowlinglesser(thrallToRevive))
to_chat(user, "[thrallToRevive] is already empowered.")
charge_counter = charge_max
return
@@ -619,7 +621,7 @@
if(!ishuman(M.current))
return
var/mob/living/carbon/human/H = M.current
- if(H.get_species() == "Lesser Shadowling")
+ if(isshadowlinglesser(H))
empowered_thralls++
if(empowered_thralls >= EMPOWERED_THRALL_LIMIT)
to_chat(user, "You cannot spare this much energy. There are too many empowered thralls.")
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 801eb6cb33c..2ac4bc0b2f8 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -429,7 +429,7 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(sword, slot_r_hand) //Don't duplicate what's equipped to hands, or else duplicate swords could be generated...or weird cases of factionless swords.
else
- if(M.get_species() == "Tajaran" || M.get_species() == "Unathi")
+ if(istajaran(M) || isunathi(M))
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) //If they can't wear shoes, give them a pair of sandals.
var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator")
@@ -461,7 +461,7 @@ var/global/list/multiverse = list()
M.equip_to_slot_or_del(sword, slot_r_hand)
if("cyborg")
- if(M.get_species() != "Machine")
+ if(!ismachine(M))
for(var/obj/item/organ/O in M.bodyparts)
O.robotize(make_tough = 1)
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
@@ -584,9 +584,9 @@ var/global/list/multiverse = list()
W.SetOwnerInfo(M)
M.equip_to_slot_or_del(W, slot_wear_id)
- if(M.get_species() == "Vox")
- M.dna.species.after_equip_job(null, M) //Voxygen(tm)
- if(M.get_species() == "Plasmaman")
+ if(isvox(M))
+ M.dna.species.after_equip_job(null, M) //Nitrogen tanks
+ if(isplasmaman(M))
M.dna.species.after_equip_job(null, M) //No fireballs from other dimensions.
M.update_icons()
diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm
index eee87148118..18dda0fcbc4 100644
--- a/code/game/gamemodes/wizard/wizard.dm
+++ b/code/game/gamemodes/wizard/wizard.dm
@@ -141,7 +141,7 @@
wizard_mob.equip_to_slot_or_del(new /obj/item/radio/headset(wizard_mob), slot_l_ear)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes)
- if(wizard_mob.get_species() != "Plasmaman") //handled in the species file for plasmen on the afterjob equip proc for now
+ if(!isplasmaman(wizard_mob)) //handled in the species file for plasmen on the afterjob equip proc for now
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head)
wizard_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(wizard_mob), slot_back)
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 154a34750cd..5c4c559a8b0 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -244,7 +244,7 @@
if(visualsOnly)
return
- if(H.get_species() == "Machine")
+ if(ismachine(H))
var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant = new
implant.insert(H)
diff --git a/code/game/machinery/dye_generator.dm b/code/game/machinery/dye_generator.dm
index b141990fb6f..52b11da599b 100644
--- a/code/game/machinery/dye_generator.dm
+++ b/code/game/machinery/dye_generator.dm
@@ -98,7 +98,7 @@
var/mob/living/carbon/human/H = M
var/dye_list = list("hair", "alt. hair theme")
- if(H.gender == MALE || H.get_species() == "Vulpkanin")
+ if(H.gender == MALE || isvulpkanin(H))
dye_list += "facial hair"
dye_list += "alt. facial hair theme"
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index e846ba591e2..baa424cb209 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -562,7 +562,7 @@ Class Procs:
if(istype(perp.belt, /obj/item/gun) || istype(perp.belt, /obj/item/melee))
threatcount += 2
- if(perp.dna.species.name != "Human") //beepsky so racist.
+ if(!ishumanbasic(perp)) //beepsky so racist.
threatcount += 2
if(check_records || check_arrest)
diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm
index b134b53bd86..3d7f6a52e70 100644
--- a/code/game/machinery/poolcontroller.dm
+++ b/code/game/machinery/poolcontroller.dm
@@ -92,7 +92,7 @@
return //Has internals, no drowning
if((NO_BREATHE in drownee.dna.species.species_traits) || (BREATHLESS in drownee.mutations))
return //doesn't breathe, no drowning
- if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara")
+ if(isskrell(drownee) || isneara(drownee))
return //fish things don't drown
if(drownee.stat == DEAD) //Dead spacemen don't drown more
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index d9c7eb5ef83..c28fd68fc62 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -136,7 +136,7 @@
if(C.h_style == "Bald" || C.h_style == "Balding Hair" || C.h_style == "Skinhead")
to_chat(user, "There is not enough hair left to shave...")
return
- if(M.get_species() == "Skrell")
+ if(isskrell(M))
to_chat(user, "Your razor isn't going to cut through tentacles.")
return
if(H == user) //shaving yourself
diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm
index 0d5bc869e44..40ed4d3bfa3 100644
--- a/code/game/objects/items/weapons/implants/implant_abductor.dm
+++ b/code/game/objects/items/weapons/implants/implant_abductor.dm
@@ -28,7 +28,7 @@
var/obj/machinery/abductor/console/console
if(ishuman(source))
var/mob/living/carbon/human/H = source
- if(H.get_species() == "Abductor")
+ if(isabductor(H))
console = get_team_console(H.mind.abductor.team)
home = console.pad
diff --git a/code/game/objects/items/weapons/scissors.dm b/code/game/objects/items/weapons/scissors.dm
index 857e9a0af8c..2f53a1200a9 100644
--- a/code/game/objects/items/weapons/scissors.dm
+++ b/code/game/objects/items/weapons/scissors.dm
@@ -33,7 +33,7 @@
var/list/species_facial_hair = list()
var/obj/item/organ/external/head/C = H.get_organ("head")
var/datum/robolimb/robohead = all_robolimbs[C.model]
- if(H.gender == MALE || H.get_species() == "Vulpkanin")
+ if(H.gender == MALE || isvulpkanin(H))
if(C.dna.species)
for(var/i in facial_hair_styles_list)
var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i]
diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm
index a6046b575f7..742f5b3d0c0 100644
--- a/code/game/objects/items/weapons/soap.dm
+++ b/code/game/objects/items/weapons/soap.dm
@@ -26,7 +26,7 @@
to_chat(user, "You need to take that [target.name] off before cleaning it.")
else if(target == user && user.a_intent == INTENT_GRAB && ishuman(target))
var/mob/living/carbon/human/muncher = user
- if(muncher && muncher.get_species() == "Drask")
+ if(muncher && isdrask(muncher))
to_chat(user, "You take a bite of the [name]. Delicious!")
playsound(user.loc, 'sound/items/eatfood.ogg', 50, 0)
user.nutrition += 2
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index 816f7d24a67..bffaaa9bc9c 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -3,13 +3,13 @@
alert("The game hasn't started yet!")
return
- var/list/incompatible_species = list("Plasmaman", "Vox")
+ var/list/incompatible_species = list(/datum/species/plasmaman, /datum/species/vox)
for(var/mob/living/carbon/human/H in player_list)
if(H.stat == DEAD || !(H.client))
continue
if(is_special_character(H))
continue
- if(H.dna.species.name in incompatible_species)
+ if(is_type_in_list(H.dna.species, incompatible_species))
H.set_species(/datum/species/human)
var/datum/preferences/A = new() // Randomize appearance
A.copy_to(H)
diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm
index 16c06ab0424..715472128b8 100644
--- a/code/modules/admin/verbs/onlyoneteam.dm
+++ b/code/modules/admin/verbs/onlyoneteam.dm
@@ -3,14 +3,14 @@
alert("The game hasn't started yet!")
return
- var/list/incompatible_species = list("Plasmaman", "Vox")
+ var/list/incompatible_species = list(/datum/species/plasmaman, /datum/species/vox)
var/team_toggle = 0
for(var/mob/living/carbon/human/H in player_list)
if(H.stat == DEAD || !(H.client))
continue
if(is_special_character(H))
continue
- if(H.dna.species.name in incompatible_species)
+ if(is_type_in_list(H.dna.species, incompatible_species))
H.set_species(/datum/species/human)
var/datum/preferences/A = new() // Randomize appearance
A.copy_to(H)
diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm
index 9bfc00ca7c6..b26bdba7d92 100644
--- a/code/modules/awaymissions/mission_code/wildwest.dm
+++ b/code/modules/awaymissions/mission_code/wildwest.dm
@@ -82,7 +82,7 @@
user.mutations.Add(XRAY)
if(ishuman(user))
var/mob/living/carbon/human/human = user
- if(human.dna.species.name != "Shadow")
+ if(!isshadowperson(human))
to_chat(user, "Your flesh rapidly mutates!")
to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.")
to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.")
@@ -95,7 +95,7 @@
new /obj/structure/closet/syndicate/resources/everything(loc)
if(ishuman(user))
var/mob/living/carbon/human/human = user
- if(human.dna.species.name != "Shadow")
+ if(!isshadowperson(human))
to_chat(user, "Your flesh rapidly mutates!")
to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.")
to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.")
@@ -108,7 +108,7 @@
user.verbs += /mob/living/carbon/proc/immortality
if(ishuman(user))
var/mob/living/carbon/human/human = user
- if(human.dna.species.name != "Shadow")
+ if(!isshadowperson(human))
to_chat(user, "Your flesh rapidly mutates!")
to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.")
to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.")
@@ -130,7 +130,7 @@
obj_count++
if(ishuman(user))
var/mob/living/carbon/human/human = user
- if(human.dna.species.name != "Shadow")
+ if(!isshadowperson(human))
to_chat(user, "Your flesh rapidly mutates!")
to_chat(user, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.")
to_chat(user, "Your body reacts violently to light. However, it naturally heals in darkness.")
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index dd2861cc3a4..1e874772478 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot)
if(ishuman(user) && slot == slot_head)
- if(user.dna.species.name == "Vox")
+ if(isvox(user))
if(flags & BLOCKHAIR)
flags &= ~BLOCKHAIR
else
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index eab5aa0c5bb..c65ea335c4d 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -609,8 +609,8 @@
var/species_icon = 'icons/mob/rig_back.dmi'
// Since setting mob_icon will override the species checks in
// update_inv_wear_suit(), handle species checks here.
- if(wearer && sprite_sheets && sprite_sheets[wearer.get_species()])
- species_icon = sprite_sheets[wearer.get_species()]
+ if(wearer && sprite_sheets && sprite_sheets[wearer.dna.species.name])
+ species_icon = sprite_sheets[wearer.dna.species.name]
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
if(installed_modules.len)
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index ee27b827ff0..51b2cbccae6 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -268,7 +268,7 @@
return
var/mob/living/carbon/human/target = user
- if(!istype(target) || target.get_species() != "Tajaran") // Only catbeasts, kthnx.
+ if(!istype(target) || !istajaran(target)) // Only catbeasts, kthnx.
return
if(target.change_body_accessory("Jay Wingler Tail"))
@@ -1276,7 +1276,7 @@
/obj/item/fluff/zekemirror/attack_self(mob/user)
var/mob/living/carbon/human/target = user
- if(!istype(target) || target.get_species() != "Skrell") // It'd be strange to see other races with head tendrils.
+ if(!istype(target) || !isskrell(target)) // It'd be strange to see other races with head tendrils.
return
if(target.change_hair("Zekes Tentacles", 1))
diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
index a67b88f97d4..bf4d4309793 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm
@@ -255,7 +255,7 @@
if(occupant.reagents)
occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1))
- if(occupant.get_species() == "Human")
+ if(ishumanbasic(occupant))
new /obj/item/stack/sheet/animalhide/human(src)
new /obj/effect/decal/cleanable/blood/gibs(src)
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index 950b873af55..7acd3efc961 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -23,7 +23,7 @@
return 1
/mob/living/carbon/human/bee_friendly()
- if(get_species() == "Diona") //bees pollinate plants, duh.
+ if(isdiona(src)) //bees pollinate plants, duh.
return 1
if((wear_suit && (wear_suit.flags & THICKMATERIAL)) && (head && (head.flags & THICKMATERIAL)))
return 1
diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm
index 7ffa47586a4..a80c2ae6c18 100644
--- a/code/modules/mining/lavaland/loot/tendril_loot.dm
+++ b/code/modules/mining/lavaland/loot/tendril_loot.dm
@@ -105,7 +105,7 @@
to_chat(M, "This item is currently non-functional.")
/*if(ishuman(M) && M.stat != DEAD)
var/mob/living/carbon/human/H = M
- if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy
+ if(!ishumanbasic(H) || reac_volume < 5) // implying xenohumans are holy
if(method == INGEST && show_message)
to_chat(H, "You feel nothing but a terrible aftertaste.")
return ..()
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index 82e062246b6..c64318d804b 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -84,12 +84,12 @@ I'm using this for Stat to give it a more nifty interface to work with
if(container)
var/obj/item/mmi/M = container
if(istype(M) && M.held_brain)
- return M.held_brain.dna.get_species_name()
+ return M.held_brain.dna.species.name
else
return "Artificial Life"
if(istype(loc, /obj/item/organ/internal/brain))
var/obj/item/organ/internal/brain/B = loc
- return B.dna.get_species_name()
+ return B.dna.species.name
/mob/living/carbon/brain/Stat()
..()
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 9cb1a981999..2f2d559f046 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -29,29 +29,36 @@
switch(act)
//Cooldown-inducing emotes
if("ping", "pings", "buzz", "buzzes", "beep", "beeps", "yes", "no", "buzz2")
- if(dna.species.name == "Machine") //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
+ var/found_machine_head = FALSE
+ if(ismachine(src)) //Only Machines can beep, ping, and buzz, yes, no, and make a silly sad trombone noise.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
- else //Everyone else fails, skip the emote attempt
- return
+ else
+ var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises
+ if(H && H.is_robotic())
+ on_CD = handle_emote_CD()
+ found_machine_head = TRUE
+
+ if(!found_machine_head) //Everyone else fails, skip the emote attempt
+ return //Everyone else fails, skip the emote attempt
if("drone","drones","hum","hums","rumble","rumbles")
- if(get_species() == "Drask") //Only Drask can make whale noises
+ if(isdrask(src)) //Only Drask can make whale noises
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
else
return
if("howl", "howls")
- if(get_species() == "Vulpkanin") //Only Vulpkanin can howl
+ if(isvulpkanin(src)) //Only Vulpkanin can howl
on_CD = handle_emote_CD(100)
else
return
if("growl", "growls")
- if(get_species() == "Vulpkanin") //Only Vulpkanin can growl
+ if(isvulpkanin(src)) //Only Vulpkanin can growl
on_CD = handle_emote_CD()
else
return
if("squish", "squishes")
var/found_slime_bodypart = 0
- if(get_species() == "Slime People") //Only Slime People can squish
+ if(isslimeperson(src)) //Only Slime People can squish
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
found_slime_bodypart = 1
else
@@ -65,31 +72,31 @@
return
if("clack", "clacks")
- if(get_species() == "Kidan") //Only Kidan can clack and rightfully so.
+ if(iskidan(src)) //Only Kidan can clack and rightfully so.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("click", "clicks")
- if(get_species() == "Kidan") //Only Kidan can click and rightfully so.
+ if(iskidan(src)) //Only Kidan can click and rightfully so.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("creaks", "creak")
- if(get_species() == "Diona") //Only Dionas can Creaks.
+ if(isdiona(src)) //Only Dionas can Creaks.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("hiss", "hisses")
- if(get_species() == "Unathi") //Only Unathi can hiss.
+ if(isunathi(src)) //Only Unathi can hiss.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
if("quill", "quills")
- if(get_species() == "Vox") //Only Vox can rustle their quills.
+ if(isvox(src)) //Only Vox can rustle their quills.
on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm'
else //Everyone else fails, skip the emote attempt
return
@@ -891,8 +898,6 @@
+ " wag(s), wave(s), whimper(s), wink(s), yawn(s), quill(s)"
switch(dna.species.name)
- if("Machine")
- emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
if("Drask")
emotelist += "\nDrask specific emotes :- drone(s)-(none)/mob, hum(s)-(none)/mob, rumble(s)-(none)/mob"
if("Kidan")
@@ -906,7 +911,14 @@
if("Diona")
emotelist += "\nDiona specific emotes :- creak(s)"
- if (dna.species.name == "Slime People")
+ if(dna.species.name == "Machine")
+ emotelist += "\nMachine specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
+ else
+ var/obj/item/organ/external/head/H = get_organ("head") // If you have a robotic head, you can make beep-boop noises
+ if(H && H.is_robotic())
+ emotelist += "\nRobotic head specific emotes :- beep(s)-(none)/mob, buzz(es)-none/mob, no-(none)/mob, ping(s)-(none)/mob, yes-(none)/mob, buzz2-(none)/mob"
+
+ if(dna.species.name == "Slime People")
emotelist += "\nSlime people specific emotes :- squish(es)-(none)/mob"
else
for(var/obj/item/organ/external/L in bodyparts) // if your limbs are squishy you can squish too!
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index ce0930f229f..a39d2843501 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -29,14 +29,12 @@
msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
msg += "[name]"
- var/list/nospecies = list("Abductor", "Shadowling", "Neara", "Monkey", "Stok", "Farwa", "Wolpin") //species that won't show their race no matter what
-
- var/displayed_species = get_species()
+ var/displayed_species = dna.species.name
for(var/obj/item/clothing/C in src) //Disguise checks
if(C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back)
if(C.species_disguise)
displayed_species = C.species_disguise
- if(skipjumpsuit && skipface || (displayed_species in nospecies)) //either obscured or on the nospecies list
+ if(skipjumpsuit && skipface || (NO_EXAMINE in dna.species.species_traits)) //either obscured or on the nospecies list
msg += "!\n" //omit the species when examining
else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural
msg += ", a slime person!\n"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 2f6465289cf..5d2a4c22e7c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1035,10 +1035,6 @@
/mob/living/carbon/human/proc/check_dna()
dna.check_integrity(src)
- return
-
-/mob/living/carbon/human/get_species()
- return dna.species.name
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
@@ -1172,7 +1168,7 @@
surgeries.Cut() //End all surgeries.
update_revive()
- if(dna.species.name != "Skeleton" && (SKELETON in mutations))
+ if(!isskeleton(src) && (SKELETON in mutations))
mutations.Remove(SKELETON)
if(NOCLONE in mutations)
mutations.Remove(NOCLONE)
@@ -1821,14 +1817,14 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
/mob/living/carbon/human/forceFed(var/obj/item/reagent_containers/food/toEat, mob/user, fullness)
if(!check_has_mouth())
- if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (get_species() == "Machine"))))
+ if(!((istype(toEat, /obj/item/reagent_containers/food/drinks) && (ismachine(src)))))
to_chat(user, "Where do you intend to put \the [toEat]? \The [src] doesn't have a mouth!")
return 0
return ..()
/mob/living/carbon/human/selfDrink(var/obj/item/reagent_containers/food/drinks/toDrink)
if(!check_has_mouth())
- if(!get_species() == "Machine")
+ if(!ismachine(src))
to_chat(src, "Where do you intend to put \the [src]? You don't have a mouth!")
return 0
else
diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm
index 8aeb6f88a3d..ec2bb7514ed 100644
--- a/code/modules/mob/living/carbon/human/species/abductor.dm
+++ b/code/modules/mob/living/carbon/human/species/abductor.dm
@@ -16,7 +16,7 @@
"eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight.
)
- species_traits = list(NO_BLOOD, NO_BREATHE, VIRUSIMMUNE, NOGUNS)
+ species_traits = list(NO_BLOOD, NO_BREATHE, VIRUSIMMUNE, NOGUNS, NO_EXAMINE)
oxy_mod = 0
diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm
index d3ca4f68b3a..4dfbc362474 100644
--- a/code/modules/mob/living/carbon/human/species/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -11,6 +11,7 @@
path = /mob/living/carbon/human/monkey
language = null
default_language = "Chimpanzee"
+ species_traits = list(NO_EXAMINE)
greater_form = /datum/species/human
is_small = 1
has_fine_manipulation = 0
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index ae17fcb0367..8b264ad77b0 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -627,13 +627,13 @@
#undef SLIMEPERSON_ICON_UPDATE_PERIOD
#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
-/mob/living/carbon/human/proc/toggle_recolor(var/silent = 0)
- var/datum/species/slime/S = all_species[get_species()]
- if(!istype(S))
+/mob/living/carbon/human/proc/toggle_recolor(silent = FALSE)
+ if(!isslimeperson(src))
if(!silent)
to_chat(src, "You're not a slime person!")
return
+ var/datum/species/slime/S = dna.species
if(src in S.recolor_list)
S.recolor_list -= src
if(!silent)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 3729e9aa85e..af134052a66 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -448,7 +448,7 @@ var/global/list/damage_icon_parts = list()
if(head_organ.h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic())))
var/datum/sprite_accessory/hair/hair_style = hair_styles_full_list[head_organ.h_style]
- //if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN
+ //if(!src.get_int_organ(/obj/item/organ/internal/brain) && !ismachine(src))//make it obvious we have NO BRAIN
// hair_standing.Blend(debrained_s, ICON_OVERLAY)
if(hair_style && hair_style.species_allowed)
if((head_organ.dna.species.name in hair_style.species_allowed) || (head_organ.dna.species.bodyflags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm
index 2d68747a742..5b0ee885ce7 100644
--- a/code/modules/mob/living/carbon/slime/life.dm
+++ b/code/modules/mob/living/carbon/slime/life.dm
@@ -337,7 +337,7 @@
if(istype(L, /mob/living/carbon/human)) //Ignore slime(wo)men
var/mob/living/carbon/human/H = L
- if(H.dna.species.name == "Slime People")
+ if(isslimeperson(H))
continue
if(!L.canmove) // Only one slime can latch on at a time.
diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm
index 2396d08a1df..8dc6a46a584 100644
--- a/code/modules/mob/living/simple_animal/friendly/diona.dm
+++ b/code/modules/mob/living/simple_animal/friendly/diona.dm
@@ -54,7 +54,7 @@
/mob/living/simple_animal/diona/attack_hand(mob/living/carbon/human/M)
//Let people pick the little buggers up.
if(M.a_intent == INTENT_HELP)
- if(M.dna.species && M.dna.species.name == "Diona")
+ if(isdiona(M))
to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.")
to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.")
verbs += /mob/living/simple_animal/diona/proc/split
@@ -82,7 +82,7 @@
if(ishuman(C))
var/mob/living/carbon/human/D = C
- if(D.dna.species && D.dna.species.name == "Diona")
+ if(isdiona(D))
choices += C
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index beba84eaa3f..84f9503066a 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1080,9 +1080,6 @@ var/list/slot_equipment_priority = list( \
/mob/proc/activate_hand(selhand)
return
-/mob/proc/get_species()
- return ""
-
/mob/dead/observer/verb/respawn()
set name = "Respawn as NPC"
set category = "Ghost"
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 2f51ec9417b..d622c78f680 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -16,9 +16,9 @@
return 0
/mob/living/carbon/human/isSynthetic()
- if(get_species() == "Machine")
- return 1
- return 0
+ if(ismachine(src))
+ return TRUE
+ return FALSE
/mob/proc/get_screen_colour()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index d7e8a531867..fe3ad6b120d 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -591,19 +591,6 @@
if(!S) return 1
return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(IS_WHITELISTED in S.species_traits)
-/mob/new_player/get_species()
- var/datum/species/chosen_species
- if(client.prefs.species)
- chosen_species = all_species[client.prefs.species]
-
- if(!chosen_species)
- return "Human"
-
- if(is_species_whitelisted(chosen_species) || has_admin_rights())
- return chosen_species.name
-
- return "Human"
-
/mob/new_player/get_gender()
if(!client || !client.prefs) ..()
return client.prefs.gender
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 51bf515ca1e..165e75f1875 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -153,10 +153,10 @@
process_fire(target,user,1,params)
-/obj/item/gun/proc/can_trigger_gun(var/mob/living/user)
+/obj/item/gun/proc/can_trigger_gun(mob/living/user)
if(!user.can_use_guns(src))
return 0
- if(restricted_species && restricted_species.len && !(user.get_species() in restricted_species))
+ if(restricted_species && restricted_species.len && !is_type_in_list(user.dna.species, restricted_species))
to_chat(user, "[src] is incompatible with your biology!")
return 0
return 1
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 7093d587b3c..95e1a586469 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -11,7 +11,7 @@
can_suppress = 0
var/charge_tick = 0
var/charge_delay = 15
- restricted_species = list("Vox", "Vox Armalis")
+ restricted_species = list(/datum/species/vox)
/obj/item/gun/projectile/automatic/spikethrower/New()
..()
@@ -79,7 +79,7 @@
force = 10
ammo_type = list(/obj/item/ammo_casing/energy/sonic)
cell_type = /obj/item/stock_parts/cell/super
- restricted_species = list("Vox Armalis")
+ restricted_species = list(/datum/species/vox/armalis)
/obj/item/gun/energy/noisecannon/update_icon()
return
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index faf0ce94c6a..1df45dbe064 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -24,15 +24,15 @@
var/exp_flash = 3
var/exp_fire = 2
-/obj/item/projectile/magic/death/on_hit(var/mob/living/carbon/G)
+/obj/item/projectile/magic/death/on_hit(mob/living/carbon/C)
. = ..()
- if(isliving(G))
- if(G.get_species() == "Machine") //speshul snowfleks deserv speshul treetment
- G.adjustFireLoss(6969) //remember - slimes love fire
+ if(isliving(C))
+ if(ismachine(C)) //speshul snowfleks deserv speshul treetment
+ C.adjustFireLoss(6969) //remember - slimes love fire
else
- G.death()
+ C.death()
- visible_message("[G] topples backwards as the death bolt impacts [G.p_them()]!")
+ visible_message("[C] topples backwards as the death bolt impacts [C.p_them()]!")
/obj/item/projectile/magic/fireball/Range()
var/turf/T1 = get_step(src,turn(dir, -45))
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 3da4df4d558..a3fc113339e 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -61,7 +61,7 @@
/datum/reagent/slimetoxin/on_mob_life(mob/living/M)
if(ishuman(M))
var/mob/living/carbon/human/human = M
- if(human.dna.species.name != "Shadow")
+ if(!isshadowperson(human))
to_chat(M, "Your flesh rapidly mutates!")
to_chat(M, "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.")
to_chat(M, "Your body reacts violently to light. However, it naturally heals in darkness.")
@@ -217,7 +217,7 @@
if(method == TOUCH)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.get_species() == "Grey")
+ if(isgrey(H))
return
if(volume > 25)
@@ -246,7 +246,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.get_species() == "Grey")
+ if(isgrey(H))
return
if(volume >=10 && volume <=25)
@@ -995,7 +995,7 @@
C.adjustToxLoss(2)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.get_species() == "Kidan") //RIP
+ if(iskidan(H)) //RIP
H.adjustToxLoss(20)
/datum/reagent/capulettium
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index cd338cb048d..199edb72fb4 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -29,7 +29,7 @@
var/mob/living/carbon/human/H = M
- if(H.get_species() != "Grey") //God this is so gross I hate it.
+ if(!isgrey(H)) //God this is so gross I hate it.
return
if(volume > 25)
@@ -58,7 +58,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.get_species() != "Grey")
+ if(!isgrey(H))
return
if(volume < 10)
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index 979e80ddf29..42db2e97da1 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -32,7 +32,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(target.get_species() == "Machine")
+ if(ismachine(target))
// RIP bi-centennial man
return 0
if(!affected)
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 18a5e4ee04f..a0ca54c8e01 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -279,7 +279,8 @@ This function completely restores a damaged organ to perfect condition.
for(var/obj/item/organ/external/EO in contents)
EO.rejuvenate()
- owner.updatehealth()
+ if(owner)
+ owner.updatehealth()
update_icon()
if(!owner)
processing_objects |= src
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 467f1e64a00..bcb5151d359 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -303,7 +303,7 @@
..()
/datum/surgery_step/internal/dethrall/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
- if(target.get_species() == "Lesser Shadowling") //Empowered thralls cannot be deconverted
+ if(isshadowlinglesser(target)) //Empowered thralls cannot be deconverted
to_chat(target, "NOT LIKE THIS!")
user.visible_message("[target] suddenly slams upward and knocks down [user]!", \
"[target] suddenly bolts up and slams you with tremendous force!")
diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm
index a0e4c2a3976..9483818d153 100644
--- a/code/modules/surgery/plastic_surgery.dm
+++ b/code/modules/surgery/plastic_surgery.dm
@@ -24,7 +24,7 @@
/datum/surgery_step/reshape_face/end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/organ/external/head/head = target.get_organ(target_zone)
- var/species_names = target.get_species()
+ var/species_names = target.dna.species.name
if(head.disfigured)
head.disfigured = FALSE
user.visible_message("[user] successfully restores [target]'s appearance!", "You successfully restore [target]'s appearance.")
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index c64c53c8baa..72bf70c7e81 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -67,10 +67,6 @@
//How much blood this step can get on surgeon. 1 - hands, 2 - full body.
var/blood_level = 0
- var/list/allowed_mob = list()
- var/list/disallowed_mob = list()
-
-
/datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/success = 0
if(accept_hand)
@@ -146,19 +142,8 @@
// Checks if this step applies to the user mob at all
/datum/surgery_step/proc/is_valid_target(mob/living/carbon/human/target)
if(!hasorgans(target))
- return 0
-
- if(allowed_mob)//can i just remove this and/or change it?
- for(var/species in allowed_mob)
- if(target.get_species() == species)
- return 1
-
- if(disallowed_mob)
- for(var/species in disallowed_mob)
- if(target.get_species() == species)
- return 0
-
- return 1
+ return FALSE
+ return TRUE
// checks whether this step can be applied with the given user and target
/datum/surgery_step/proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)