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