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