diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index f7ca287452b..40d9a948e14 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -130,3 +130,29 @@ qdel(AC) ui_users.Cut() return ..() + + +//merchant mirror, turns you into a vox +/obj/structure/mirror/merchant + name = "cracked mirror" + desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." + icon_state = "mirror_broke" + shattered = 1 + +/obj/structure/mirror/merchant/attack_hand(var/mob/living/carbon/human/user) + if(istype(get_area(src),/area/merchant_station)) + if(istype(user) && user.mind && user.mind.assigned_role == "Merchant" && user.species.name != "Vox") + var/choice = input("Do you wish to become a Vox? This is not reversible.") as null|anything in list("No","Yes") + if(choice == "Yes") + user.set_species("Vox") + user.species.equip_survival_gear(user) + + var/newname = sanitizeSafe(input(user,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) + if(!newname || newname == "") + var/datum/language/L = all_languages[user.species.default_language] + newname = L.get_random_name() + user.real_name = newname + user.name = user.real_name + user.h_style = "Short Vox Quills" + user.f_style = "Shaved" + ..() \ No newline at end of file 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 e5df7a18d95..ae5e492a7f4 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -4,7 +4,7 @@ name_plural = "Vox" icobase = 'icons/mob/human_races/r_vox.dmi' deform = 'icons/mob/human_races/r_def_vox.dmi' - default_language = "Vox-pidgin" + default_language = LANGUAGE_VOX language = "Ceti Basic" num_alternate_languages = 1 unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) @@ -45,7 +45,7 @@ flags = NO_SCAN spawn_flags = IS_RESTRICTED - appearance_flags = HAS_EYE_COLOR + appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR blood_color = "#2299FC" flesh_color = "#808D11" @@ -57,10 +57,10 @@ ) has_organ = list( - "heart" = /obj/item/organ/heart, - "lungs" = /obj/item/organ/lungs, - "liver" = /obj/item/organ/liver, - "kidneys" = /obj/item/organ/kidneys, + "heart" = /obj/item/organ/heart/vox, + "lungs" = /obj/item/organ/lungs/vox, + "liver" = /obj/item/organ/liver/vox, + "kidneys" = /obj/item/organ/kidneys/vox, "brain" = /obj/item/organ/brain, "eyes" = /obj/item/organ/eyes, "stack" = /obj/item/organ/stack/vox @@ -81,7 +81,11 @@ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack) H.internal = H.r_hand H.internals.icon_state = "internal1" + H.gender = NEUTER +/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) + H.gender = NEUTER + return ..() /datum/species/vox/get_station_variant() return "Vox Pariah" @@ -93,29 +97,28 @@ 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 fall_mod = 0.8 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, + "heart" = /obj/item/organ/heart/vox, + "lungs" = /obj/item/organ/lungs/vox, + "liver" = /obj/item/organ/liver/vox, + "kidneys" = /obj/item/organ/kidneys/vox, "brain" = /obj/item/organ/pariah_brain, "eyes" = /obj/item/organ/eyes ) - flags = NO_SCAN | HAS_EYE_COLOR spawn_flags = IS_RESTRICTED + stamina = 60 + sprint_speed_factor = 2 + stamina_recovery = 0.5 + sprint_cost_factor = 0.5 + // No combat skills for you. /datum/species/vox/pariah/can_shred(var/mob/living/carbon/human/H, var/ignore_intent) return 0 @@ -123,18 +126,24 @@ // Pariahs are really gross. /datum/species/vox/pariah/handle_environment_special(var/mob/living/carbon/human/H) if(prob(5)) + var/datum/gas_mixture/vox = H.loc.return_air() var/stink_range = rand(3,5) for(var/mob/living/M in range(H,stink_range)) - if(M.stat || M == H) + if(M.stat || M == H || issilicon(M) || isbrain(M)) + continue + var/datum/gas_mixture/mob_air = M.loc.return_air() + if(!vox || !mob_air || vox != mob_air) continue var/mob/living/carbon/human/target = M if(istype(target)) - if(target.internals) + if(target.internal) continue if(target.head && (target.head.body_parts_covered & FACE) && (target.head.flags & AIRTIGHT)) continue if(target.wear_mask && (target.wear_mask.body_parts_covered & FACE) && (target.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)) continue + if(target.species.flags & NO_BREATHE) + continue M << "A terrible stench emanates from \the [H]." /datum/species/vox/pariah/get_bodytype() @@ -156,7 +165,6 @@ stamina_recovery = 1 sprint_cost_factor = 0.7 - cold_level_1 = 80 cold_level_2 = 50 cold_level_3 = 0 diff --git a/code/modules/organs/misc.dm b/code/modules/organs/misc.dm index d440495041b..ee22251f820 100644 --- a/code/modules/organs/misc.dm +++ b/code/modules/organs/misc.dm @@ -60,3 +60,15 @@ /obj/item/organ/stack/vox name = "vox cortical stack" + vital = 0 + +/obj/item/organ/stack/vox/removed(var/mob/living/user) + if(owner && ishuman(owner)) + if(!isvox(owner)) + return + if(prob(80)) + owner.death() + else + owner << " Your mind breaks apart when your cortical stack is removed! Your memories and personality are nothing but echoes lost in the numbness of your thoughts..." + owner.set_species("Vox Pariah") + ..() diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm index c4c9bf35625..dfe45c6a481 100644 --- a/code/modules/organs/subtypes/xenos.dm +++ b/code/modules/organs/subtypes/xenos.dm @@ -104,3 +104,24 @@ name = "skull" dislocated = -1 vital = 0 + +//vox organs + +/obj/item/organ/heart/vox + icon_state = "vox_heart" + dead_icon = "vox_heart" + +/obj/item/organ/lungs/vox + name = "air capillary sack" + icon_state = "vox_lung" + +/obj/item/organ/kidneys/vox + name = "filtration bladder" + icon_state = "lungs" + color = "#99ccff" + parent_organ = "chest" + +/obj/item/organ/liver/vox + name = "waste tract" + parent_organ = "chest" + color = "#0033cc" diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 404480428b5..c5027928c68 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ