diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm
index de6e0b62dc..8ac7530e92 100644
--- a/code/game/antagonist/outsider/raider.dm
+++ b/code/game/antagonist/outsider/raider.dm
@@ -193,7 +193,7 @@ var/datum/antagonist/raider/raiders
if(!..())
return 0
- if(player.species && player.species.name == "Vox")
+ if(player.species && player.species.get_bodytype() == "Vox")
equip_vox(player)
else
var/new_shoes = pick(raider_shoes)
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
index 34802577d6..78e42f71a8 100644
--- a/code/game/objects/items/paintkit.dm
+++ b/code/game/objects/items/paintkit.dm
@@ -43,7 +43,7 @@
user << "You set about modifying the helmet into [src]."
var/mob/living/carbon/human/H = user
if(istype(H))
- species_restricted = list(H.species.name)
+ species_restricted = list(H.species.get_bodytype())
kit.use(1,user)
return 1
return ..()
@@ -62,7 +62,7 @@
user << "You set about modifying the suit into [src]."
var/mob/living/carbon/human/H = user
if(istype(H))
- species_restricted = list(H.species.name)
+ species_restricted = list(H.species.get_bodytype())
kit.use(1,user)
return 1
return ..()
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index 4a4ea63276..db5af8d73e 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -75,13 +75,12 @@
/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user)
if(istype(get_area(src),/area/syndicate_mothership))
- if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species != "Vox" && is_alien_whitelisted(user, "Vox"))
- var/choice = input("Do you wish to become a Vox? This is not reversible.") as null|anything in list("No","Yes")
+ if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != "Vox" && is_alien_whitelisted(user, "Vox"))
+ var/choice = input("Do you wish to become a true Vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
if(choice && choice == "Yes")
var/mob/living/carbon/human/vox/vox = new(get_turf(src),"Vox")
vox.gender = user.gender
raiders.equip(vox)
- new /obj/item/organ/stack/vox(vox)
if(user.mind)
user.mind.transfer_to(vox)
spawn(1)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7898d97a19..af3ba242c5 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -620,7 +620,7 @@ var/list/admin_verbs_mentor = list(
if(istype(T,/mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if (H.species)
- D.affected_species = list(H.species.name)
+ D.affected_species = list(H.species.get_bodytype())
if(H.species.primitive_form)
D.affected_species |= H.species.primitive_form
if(H.species.greater_form)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 4fa4063554..94d9c5f1ff 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -32,10 +32,10 @@
if(H.species)
if(exclusive)
- if(!(H.species.name in species_restricted))
+ if(!(H.species.get_bodytype() in species_restricted))
wearable = 1
else
- if(H.species.name in species_restricted)
+ if(H.species.get_bodytype() in species_restricted)
wearable = 1
if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store)))
@@ -75,6 +75,7 @@
species_restricted = list("exclude","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen")
if("Human")
species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox", "Xenomorph", "Xenomorph Drone", "Xenomorph Hunter", "Xenomorph Sentinel", "Xenomorph Queen")
+
else
species_restricted = list(target_species)
@@ -408,8 +409,8 @@ BLIND // can't see anything
var/icon/under_icon
if(icon_override)
under_icon = icon_override
- else if(H && sprite_sheets && sprite_sheets[H.species.name])
- under_icon = sprite_sheets[H.species.name]
+ else if(H && sprite_sheets && sprite_sheets[H.species.get_bodytype()])
+ under_icon = sprite_sheets[H.species.get_bodytype()]
else if(item_icons && item_icons[slot_w_uniform_str])
under_icon = item_icons[slot_w_uniform_str]
else
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 60197daef7..b4ea760d0a 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -467,8 +467,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.species.name])
- species_icon = sprite_sheets[wearer.species.name]
+ if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype()])
+ species_icon = sprite_sheets[wearer.species.get_bodytype()]
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
if(installed_modules.len)
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 5c40906bfb..543c3d339f 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -15,6 +15,15 @@
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
+/obj/item/organ/pariah_brain
+ name = "brain remnants"
+ desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
+ organ_tag = "brain"
+ parent_organ = "head"
+ icon = 'icons/mob/alien.dmi'
+ icon_state = "chitin"
+ vital = 1
+
/obj/item/organ/brain/xeno
name = "thinkpan"
desc = "It looks kind of like an enormous wad of purple bubblegum."
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm
index 3b8e566964..04e431202a 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/appearance.dm
@@ -163,7 +163,7 @@
continue
if(check_gender && gender == FEMALE && S.gender == MALE)
continue
- if(!(species.name in S.species_allowed))
+ if(!(species.get_bodytype() in S.species_allowed))
continue
valid_hairstyles += hairstyle
@@ -178,7 +178,7 @@
continue
if(gender == FEMALE && S.gender == MALE)
continue
- if(!(species.name in S.species_allowed))
+ if(!(species.get_bodytype() in S.species_allowed))
continue
valid_facial_hairstyles += facialhairstyle
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 27a8f93753..50f46b4bb4 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -71,7 +71,7 @@
if(!T || !src || src.stat) return
- if(get_dist(get_turf(T), get_turf(src)) > 6) return
+ if(get_dist(get_turf(T), get_turf(src)) > 4) return
if(last_special > world.time)
return
@@ -83,8 +83,8 @@
last_special = world.time + 75
status_flags |= LEAPING
- src.visible_message("\The [src] leaps at [T]!")
- src.throw_at(get_step(get_turf(T),get_turf(src)), 5, 1, src)
+ src.visible_message("\The [src] leaps at [T]!")
+ src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src)
playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1)
sleep(5)
@@ -92,13 +92,13 @@
if(status_flags & LEAPING) status_flags &= ~LEAPING
if(!src.Adjacent(T))
- src << "\red You miss!"
+ src << "You miss!"
return
- T.Weaken(5)
+ T.Weaken(3)
- //Only official cool kids get the grab and no self-prone.
- if(!(src.mind && src.mind.special_role))
+ // Pariahs are not good at leaping. This is snowflakey, pls fix.
+ if(species.name == "Vox Pariah")
src.Weaken(5)
return
@@ -118,7 +118,7 @@
else
r_hand = G
- G.state = GRAB_AGGRESSIVE
+ G.state = GRAB_PASSIVE
G.icon_state = "grabbed1"
G.synch()
diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
index 926781abe1..2269c14a53 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
@@ -6,7 +6,7 @@
default_language = "Vox-pidgin"
language = "Galactic Common"
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong)
- rarity_value = 2
+ rarity_value = 4
blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
@@ -47,7 +47,8 @@
"liver" = /obj/item/organ/liver,
"kidneys" = /obj/item/organ/kidneys,
"brain" = /obj/item/organ/brain,
- "eyes" = /obj/item/organ/eyes
+ "eyes" = /obj/item/organ/eyes,
+ "stack" = /obj/item/organ/stack/vox
)
/datum/species/vox/get_random_name(var/gender)
@@ -67,7 +68,55 @@
H.internals.icon_state = "internal1"
-/datum/species/vox/can_shred(var/mob/living/carbon/human/H, var/ignore_intent)
- if(!H.mind || !H.mind.special_role) // Pariah check.
- return 0
- return ..()
\ No newline at end of file
+/datum/species/vox/get_station_variant()
+ return "Vox Pariah"
+
+// Joining as a station vox will give you this template, hence IS_RESTRICTED flag.
+/datum/species/vox/pariah
+ name = "Vox Pariah"
+ rarity_value = 0.1
+ speech_chance = 60 // No volume control.
+ siemens_coefficient = 0.5 // Ragged scaleless patches.
+
+ warning_low_pressure = (WARNING_LOW_PRESSURE-20)
+ hazard_low_pressure = (HAZARD_LOW_PRESSURE-10)
+ total_health = 80
+
+ cold_level_1 = 130
+ cold_level_2 = 100
+ cold_level_3 = 60
+
+ unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite)
+
+ // Pariahs have no stack.
+ has_organ = list(
+ "heart" = /obj/item/organ/heart,
+ "lungs" = /obj/item/organ/lungs,
+ "liver" = /obj/item/organ/liver,
+ "kidneys" = /obj/item/organ/kidneys,
+ "brain" = /obj/item/organ/pariah_brain,
+ "eyes" = /obj/item/organ/eyes
+ )
+ flags = IS_RESTRICTED | NO_SCAN | HAS_EYE_COLOR
+
+// No combat skills for you.
+/datum/species/vox/pariah/can_shred(var/mob/living/carbon/human/H, var/ignore_intent)
+ return 0
+
+// Pariahs are really gross.
+/datum/species/vox/pariah/handle_environment_special(var/mob/living/carbon/human/H)
+ if(prob(5))
+ var/stink_range = rand(3,5)
+ for(var/mob/living/M in range(H,stink_range))
+ if(M.stat || M == H)
+ continue
+ var/mob/living/carbon/human/target = M
+ if(istype(target))
+ if(target.head && (target.head.flags & HEADCOVERSMOUTH) && (target.head.flags & AIRTIGHT))
+ continue
+ if(target.wear_mask && (target.wear_mask.flags & MASKCOVERSMOUTH) && (target.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT))
+ continue
+ M << "A terrible stench emanates from \the [H]."
+
+/datum/species/vox/pariah/get_bodytype()
+ return "Vox"
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 394bf3906c..1d333dfe0d 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -152,6 +152,12 @@
for(var/u_type in unarmed_types)
unarmed_attacks += new u_type()
+/datum/species/proc/get_station_variant()
+ return name
+
+/datum/species/proc/get_bodytype()
+ return name
+
/datum/species/proc/get_environment_discomfort(var/mob/living/carbon/human/H, var/msg_type)
if(!prob(5))
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
index 52410c5fc6..f67e1030e2 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
@@ -61,6 +61,9 @@
var/weeds_heal_rate = 1 // Health regen on weeds.
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
+/datum/species/xenos/get_bodytype()
+ return "Xenomorph"
+
/datum/species/xenos/get_random_name()
return "alien [caste_name] ([alien_number])"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 3bb42237a8..96f447723a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -357,7 +357,7 @@ var/global/list/damage_icon_parts = list()
if(f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
- if(facial_hair_style && facial_hair_style.species_allowed && (src.species.name in facial_hair_style.species_allowed))
+ if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype() in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
@@ -366,7 +366,7 @@ var/global/list/damage_icon_parts = list()
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
- if(hair_style && src.species.name in hair_style.species_allowed)
+ if(hair_style && (src.species.get_bodytype() in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
@@ -475,8 +475,8 @@ var/global/list/damage_icon_parts = list()
var/icon/under_icon
if(w_uniform.icon_override)
under_icon = w_uniform.icon_override
- else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.name])
- under_icon = w_uniform.sprite_sheets[species.name]
+ else if(w_uniform.sprite_sheets && w_uniform.sprite_sheets[species.get_bodytype()])
+ under_icon = w_uniform.sprite_sheets[species.get_bodytype()]
else if(w_uniform.item_icons && w_uniform.item_icons[slot_w_uniform_str])
under_icon = w_uniform.item_icons[slot_w_uniform_str]
else
@@ -536,8 +536,8 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(gloves.icon_override)
standing = image("icon" = gloves.icon_override, "icon_state" = "[t_state]")
- else if(gloves.sprite_sheets && gloves.sprite_sheets[species.name])
- standing = image("icon" = gloves.sprite_sheets[species.name], "icon_state" = "[t_state]")
+ else if(gloves.sprite_sheets && gloves.sprite_sheets[species.get_bodytype()])
+ standing = image("icon" = gloves.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_state]")
else
standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]")
@@ -562,8 +562,8 @@ var/global/list/damage_icon_parts = list()
if(glasses.icon_override)
overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
- else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name])
- overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]")
+ else if(glasses.sprite_sheets && glasses.sprite_sheets[species.get_bodytype()])
+ overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.get_bodytype()], "icon_state" = "[glasses.icon_state]")
else
overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
@@ -584,9 +584,9 @@ var/global/list/damage_icon_parts = list()
if(l_ear.icon_override)
t_type = "[t_type]_l"
overlays_standing[EARS_LAYER] = image("icon" = l_ear.icon_override, "icon_state" = "[t_type]")
- else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.name])
+ else if(l_ear.sprite_sheets && l_ear.sprite_sheets[species.get_bodytype()])
t_type = "[t_type]_l"
- overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.name], "icon_state" = "[t_type]")
+ overlays_standing[EARS_LAYER] = image("icon" = l_ear.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_type]")
else
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
@@ -596,9 +596,9 @@ var/global/list/damage_icon_parts = list()
if(r_ear.icon_override)
t_type = "[t_type]_r"
overlays_standing[EARS_LAYER] = image("icon" = r_ear.icon_override, "icon_state" = "[t_type]")
- else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.name])
+ else if(r_ear.sprite_sheets && r_ear.sprite_sheets[species.get_bodytype()])
t_type = "[t_type]_r"
- overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.name], "icon_state" = "[t_type]")
+ overlays_standing[EARS_LAYER] = image("icon" = r_ear.sprite_sheets[species.get_bodytype()], "icon_state" = "[t_type]")
else
overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[t_type]")
@@ -612,8 +612,8 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(shoes.icon_override)
standing = image("icon" = shoes.icon_override, "icon_state" = "[shoes.icon_state]")
- else if(shoes.sprite_sheets && shoes.sprite_sheets[species.name])
- standing = image("icon" = shoes.sprite_sheets[species.name], "icon_state" = "[shoes.icon_state]")
+ else if(shoes.sprite_sheets && shoes.sprite_sheets[species.get_bodytype()])
+ standing = image("icon" = shoes.sprite_sheets[species.get_bodytype()], "icon_state" = "[shoes.icon_state]")
else
standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]")
@@ -650,8 +650,8 @@ var/global/list/damage_icon_parts = list()
var/t_icon
if(head.icon_override)
t_icon = head.icon_override
- else if(head.sprite_sheets && head.sprite_sheets[species.name])
- t_icon = head.sprite_sheets[species.name]
+ else if(head.sprite_sheets && head.sprite_sheets[species.get_bodytype()])
+ t_icon = head.sprite_sheets[species.get_bodytype()]
else if(head.item_icons && (slot_head_str in head.item_icons))
t_icon = head.item_icons[slot_head_str]
@@ -700,8 +700,8 @@ var/global/list/damage_icon_parts = list()
if(belt.icon_override)
standing.icon = belt.icon_override
- else if(belt.sprite_sheets && belt.sprite_sheets[species.name])
- standing.icon = belt.sprite_sheets[species.name]
+ else if(belt.sprite_sheets && belt.sprite_sheets[species.get_bodytype()])
+ standing.icon = belt.sprite_sheets[species.get_bodytype()]
else
standing.icon = 'icons/mob/belt.dmi'
@@ -727,7 +727,7 @@ var/global/list/damage_icon_parts = list()
var/t_icon = INV_SUIT_DEF_ICON
if(wear_suit.icon_override)
t_icon = wear_suit.icon_override
- else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name])
+ else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.get_bodytype()])
t_icon = wear_suit.sprite_sheets[species.name]
else if(wear_suit.item_icons && wear_suit.item_icons[slot_wear_suit_str])
t_icon = wear_suit.item_icons[slot_wear_suit_str]
@@ -770,8 +770,8 @@ var/global/list/damage_icon_parts = list()
var/image/standing
if(wear_mask.icon_override)
standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]")
- else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name])
- standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]")
+ else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.get_bodytype()])
+ standing = image("icon" = wear_mask.sprite_sheets[species.get_bodytype()], "icon_state" = "[wear_mask.icon_state]")
else
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
@@ -797,8 +797,8 @@ var/global/list/damage_icon_parts = list()
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
var/obj/item/weapon/rig/rig = back
overlay_icon = rig.mob_icon
- else if(back.sprite_sheets && back.sprite_sheets[species.name])
- overlay_icon = back.sprite_sheets[species.name]
+ else if(back.sprite_sheets && back.sprite_sheets[species.get_bodytype()])
+ overlay_icon = back.sprite_sheets[species.get_bodytype()]
else if(back.item_icons && (slot_back_str in back.item_icons))
overlay_icon = back.item_icons[slot_back_str]
else
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 12a4ddfea2..1f31e2018a 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -416,13 +416,16 @@
var/mob/living/carbon/human/new_character
+ var/use_species_name
var/datum/species/chosen_species
if(client.prefs.species)
chosen_species = all_species[client.prefs.species]
- if(chosen_species)
+ use_species_name = all_species[chosen_species.get_station_variant()] //Only used by pariahs atm.
+
+ if(chosen_species && use_species_name)
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
if(is_species_whitelisted(chosen_species) || has_admin_rights())
- new_character = new(loc, client.prefs.species)
+ new_character = new(loc, use_species_name)
if(!new_character)
new_character = new(loc)
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index bc9a47e25f..1f2384575b 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -67,7 +67,7 @@ var/global/list/limb_icon_cache = list()
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
- if(facial_hair_style && facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed))
+ if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype() in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
@@ -75,7 +75,7 @@ var/global/list/limb_icon_cache = list()
if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
- if(hair_style && (species.name in hair_style.species_allowed))
+ if(hair_style && (species.get_bodytype() in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD)
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index ff9edcabfc..2a9b44f926 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -40,7 +40,7 @@
/obj/item/weapon/gun/launcher/spikethrower/special_check(user)
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- if(H.species && H.species.name != "Vox")
+ if(H.species && H.species.get_bodytype() != "Vox")
user << "\The [src] does not respond to you!"
return 0
return ..()
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 2fdf26e04e..6e57a4f37b 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -32,12 +32,12 @@
if(allowed_species)
for(var/species in allowed_species)
- if(target.species.name == species)
+ if(target.species.get_bodytype() == species)
return 1
if(disallowed_species)
for(var/species in disallowed_species)
- if(target.species.name == species)
+ if(target.species.get_bodytype() == species)
return 0
return 1
diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm
index 62bfaff907..cbcb5ed2ba 100644
--- a/code/modules/virus2/admin.dm
+++ b/code/modules/virus2/admin.dm
@@ -132,7 +132,7 @@
else if(href_list["reset"])
species = list()
if(infectee)
- if(!infectee.species || !(infectee.species.name in species))
+ if(!infectee.species || !(infectee.species.get_bodytype() in species))
infectee = null
if("ichance")
var/I = input("Input infection chance", "Infection Chance", infectionchance) as null|num
@@ -160,16 +160,16 @@
var/list/candidates = list()
for(var/mob/living/carbon/G in living_mob_list)
if(G.stat != DEAD && G.species)
- if(G.species.name in species)
+ if(G.species.get_bodytype() in species)
candidates["[G.name][G.client ? "" : " (no client)"]"] = G
else
- candidates["[G.name] ([G.species.name])[G.client ? "" : " (no client)"]"] = G
+ candidates["[G.name] ([G.species.get_bodytype()])[G.client ? "" : " (no client)"]"] = G
if(!candidates.len) usr << "No possible candidates found!"
var/I = input("Choose initial infectee", "Infectee", infectee) as null|anything in candidates
if(!I || !candidates[I]) return
infectee = candidates[I]
- species |= infectee.species.name
+ species |= infectee.species.get_bodytype()
if("go")
if(!antigens.len)
var/a = alert("This disease has no antigens; it will be impossible to permanently immunise anyone without them.\
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 7dbd556679..1cd185a32b 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -87,9 +87,9 @@ proc/airborne_can_reach(turf/source, turf/target)
if(!disease.affected_species.len)
return
- if (!(M.species.name in disease.affected_species))
+ if (!(M.species.get_bodytype() in disease.affected_species))
if (forced)
- disease.affected_species[1] = M.species.name
+ disease.affected_species[1] = M.species.get_bodytype()
else
return //not compatible with this species
diff --git a/code/world.dm b/code/world.dm
index 2e8c3980ff..6b6d9fab8b 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -141,6 +141,7 @@ var/world_topic_spam_protect_time = world.timeofday
// This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here.
s["players"] = 0
s["stationtime"] = worldtime2text()
+ s["roundduration"] = round_duration()
if(input["status"] == "2")
var/list/players = list()
diff --git a/html/changelogs/zuhayr-pariahs.yml b/html/changelogs/zuhayr-pariahs.yml
new file mode 100644
index 0000000000..b35a440e85
--- /dev/null
+++ b/html/changelogs/zuhayr-pariahs.yml
@@ -0,0 +1,5 @@
+author: Zuhayr
+delete-after: True
+changes:
+ - rscadd: "Pariahs are now a subspecies of Vox with less atmos/cold protection, a useless brain, and lower health."
+ - rscadd: "Leap now only gives a passive grab and has a shorter range. It also stuns Pariahs longer than it does their target."
\ No newline at end of file