diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm
index a29cbee046..fd79d83dc5 100644
--- a/code/ZAS/Phoron.dm
+++ b/code/ZAS/Phoron.dm
@@ -40,18 +40,28 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi')
obj/var/contaminated = 0
+obj/var/phoronproof = 0
+
/obj/item/proc/can_contaminate()
//Clothing and backpacks can be contaminated.
- if(flags & PHORONGUARD) return 0
- else if(istype(src,/obj/item/weapon/storage/backpack)) return 0 //Cannot be washed :(
- else if(istype(src,/obj/item/clothing)) return 1
+ if(flags & PHORONGUARD)
+ return 0
+ else if(phoronproof == 1)
+ return 0
+ else if(istype(src,/obj/item/weapon/storage/backpack))
+ return 0 //Cannot be washed :(
+ else if(istype(src,/obj/item/clothing))
+ return 1
/obj/item/proc/contaminate()
//Do a contamination overlay? Temporary measure to keep contamination less deadly than it was.
- if(!contaminated)
- contaminated = 1
- overlays += contamination_overlay
+ if(!can_contaminate())
+ return
+ else
+ if(!contaminated)
+ contaminated = 1
+ overlays += contamination_overlay
/obj/item/proc/decontaminate()
contaminated = 0
@@ -114,6 +124,15 @@ obj/var/contaminated = 0
src << "High levels of toxins cause you to spontaneously mutate!"
domutcheck(src,null)
+/mob/living/carbon/human/vox/pl_effects()
+ //Handles all the bad things phoron can do to Vox.
+
+ //Contamination
+ if(vsc.plc.CLOTH_CONTAMINATION) contaminate()
+
+ //Anything else requires them to not be dead.
+ if(stat >= 2)
+ return
/mob/living/carbon/human/proc/burn_eyes()
var/obj/item/organ/internal/eyes/E = internal_organs_by_name[O_EYES]
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 522db6e1c4..d899f62049 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -300,6 +300,13 @@
else
contents.Add(0)
+ // And here's for the Vox
+ if ("phoron")
+ if(t.air_contents.gas["phoron"] && !t.air_contents.gas["oxygen"])
+ contents.Add(t.air_contents.gas["phoron"])
+ else
+ contents.Add(0)
+
else
//no tank so we set contents to 0
diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm
index fdbb4cafc3..4d097c4370 100644
--- a/code/datums/supplypacks/atmospherics.dm
+++ b/code/datums/supplypacks/atmospherics.dm
@@ -98,7 +98,7 @@
/obj/item/weapon/storage/toolbox/emergency = 2,
/obj/item/clothing/suit/storage/hazardvest = 2,
/obj/item/clothing/suit/storage/vest = 2,
- /obj/item/weapon/tank/emergency_oxygen/engi = 4,
+ /obj/item/weapon/tank/emergency/oxygen/engi = 4,
/obj/item/clothing/suit/space/emergency = 4,
/obj/item/clothing/head/helmet/space/emergency = 4,
/obj/item/clothing/mask/gas = 4
diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm
index 7bfa22ad43..d149012c75 100644
--- a/code/game/antagonist/outsider/raider.dm
+++ b/code/game/antagonist/outsider/raider.dm
@@ -204,23 +204,26 @@ var/datum/antagonist/raider/raiders
if(!..())
return 0
- var/new_shoes = pick(raider_shoes)
- var/new_uniform = pick(raider_uniforms)
- var/new_glasses = pick(raider_glasses)
- var/new_helmet = pick(raider_helmets)
- var/new_suit = pick(raider_suits)
+ if(player.species && player.species.get_bodytype() == "Vox")
+ equip_vox(player)
+ else
+ var/new_shoes = pick(raider_shoes)
+ var/new_uniform = pick(raider_uniforms)
+ var/new_glasses = pick(raider_glasses)
+ var/new_helmet = pick(raider_helmets)
+ var/new_suit = pick(raider_suits)
- player.equip_to_slot_or_del(new new_shoes(player),slot_shoes)
- if(!player.shoes)
- //If equipping shoes failed, fall back to equipping sandals
- var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/toeless)
- player.equip_to_slot_or_del(new fallback_type(player), slot_shoes)
+ player.equip_to_slot_or_del(new new_shoes(player),slot_shoes)
+ if(!player.shoes)
+ //If equipping shoes failed, fall back to equipping sandals
+ var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/toeless)
+ player.equip_to_slot_or_del(new fallback_type(player), slot_shoes)
- player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform)
- player.equip_to_slot_or_del(new new_glasses(player),slot_glasses)
- player.equip_to_slot_or_del(new new_helmet(player),slot_head)
- player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit)
- equip_weapons(player)
+ player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform)
+ player.equip_to_slot_or_del(new new_glasses(player),slot_glasses)
+ player.equip_to_slot_or_del(new new_helmet(player),slot_head)
+ player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit)
+ equip_weapons(player)
var/obj/item/weapon/card/id/id = create_id("Visitor", player, equip = 0)
id.name = "[player.real_name]'s Passport"
@@ -296,3 +299,20 @@ var/datum/antagonist/raider/raiders
var/grenade_type = pick(grenades)
new grenade_type(ammobox)
player.put_in_any_hand_if_possible(ammobox)
+
+/datum/antagonist/raider/proc/equip_vox(var/mob/living/carbon/human/player)
+
+ var/uniform_type = pick(list(/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_casual))
+
+ player.equip_to_slot_or_del(new uniform_type(player), slot_w_uniform)
+ player.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(player), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES.
+ player.equip_to_slot_or_del(new /obj/item/clothing/gloves/vox(player), slot_gloves) // AS ABOVE.
+ player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat/vox(player), slot_wear_mask)
+ player.equip_to_slot_or_del(new /obj/item/weapon/tank/phoron/vox(player), slot_back)
+ player.equip_to_slot_or_del(new /obj/item/device/flashlight(player), slot_r_store)
+
+ player.internal = locate(/obj/item/weapon/tank) in player.contents
+ if(istype(player.internal,/obj/item/weapon/tank) && player.internals)
+ player.internals.icon_state = "internal1"
+
+ return 1
diff --git a/code/game/gamemodes/changeling/powers/armor.dm b/code/game/gamemodes/changeling/powers/armor.dm
index ac98f15c40..357639fde6 100644
--- a/code/game/gamemodes/changeling/powers/armor.dm
+++ b/code/game/gamemodes/changeling/powers/armor.dm
@@ -37,7 +37,7 @@
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
flags = STOPPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it,
//it still ends up in your blood. (also balance but muh fluff)
- allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/tank/oxygen)
+ allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/tank/oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //No armor at all.
canremove = 0
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index f463c9bd0f..5868bf4b59 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -106,7 +106,7 @@
icon_state = "cult_armour"
desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy."
w_class = ITEMSIZE_NORMAL
- allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
+ allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 6c86b7ebf4..a2310cda92 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -132,7 +132,7 @@
var/obj/item/weapon/tank/tank = null
/obj/structure/closet/body_bag/cryobag/New()
- tank = new /obj/item/weapon/tank/emergency_oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
+ tank = new /obj/item/weapon/tank/emergency/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
..()
/obj/structure/closet/body_bag/cryobag/Destroy()
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 5c3d090d71..242c367956 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -55,12 +55,17 @@
/obj/item/weapon/storage/box/survival/New()
..()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/emergency/oxygen(src)
+
+/obj/item/weapon/storage/box/vox/New()
+ ..()
+ new /obj/item/clothing/mask/breath(src)
+ new /obj/item/weapon/tank/emergency/phoron(src)
/obj/item/weapon/storage/box/engineer/New()
..()
new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
/obj/item/weapon/storage/box/gloves
name = "box of latex gloves"
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index f45e766610..573325e079 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -22,7 +22,7 @@
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/weapon/tank/emergency_oxygen/double(src)
+ new /obj/item/weapon/tank/emergency/oxygen/double(src)
return
if("guns")
@@ -59,7 +59,7 @@
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/weapon/tank/emergency_oxygen/double(src)
+ new /obj/item/weapon/tank/emergency/oxygen/double(src)
new /obj/item/weapon/card/emag(src)
return
@@ -121,7 +121,7 @@
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
- new /obj/item/weapon/tank/emergency_oxygen/double(src)
+ new /obj/item/weapon/tank/emergency/oxygen/double(src)
return
/obj/item/weapon/storage/box/syndie_kit/chameleon
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 83372ffa58..6d91733c7b 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -16,15 +16,15 @@
icon_state = "oxygen"
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
- New()
+/obj/item/weapon/tank/oxygen/New()
..()
air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
- examine(mob/user)
- if(..(user, 0) && air_contents.gas["oxygen"] < 10)
- user << text("The meter on \the [src] indicates you are almost out of oxygen!")
- //playsound(usr, 'sound/effects/alert.ogg', 50, 1)
+/obj/item/weapon/tank/oxygen/examine(mob/user)
+ if(..(user, 0) && air_contents.gas["oxygen"] < 10)
+ user << text("The meter on \the [src] indicates you are almost out of oxygen!")
+ //playsound(usr, 'sound/effects/alert.ogg', 50, 1)
/obj/item/weapon/tank/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
@@ -59,10 +59,10 @@
desc = "Mixed anyone?"
icon_state = "oxygen"
- examine(mob/user)
- if(..(user, 0) && air_contents.gas["oxygen"] < 1 && loc==user)
- user << "The meter on the [src.name] indicates you are almost out of air!"
- user << sound('sound/effects/alert.ogg')
+/obj/item/weapon/tank/air/examine(mob/user)
+ if(..(user, 0) && air_contents.gas["oxygen"] < 1 && loc==user)
+ user << "The meter on the [src.name] indicates you are almost out of air!"
+ user << sound('sound/effects/alert.ogg')
/obj/item/weapon/tank/air/New()
..()
@@ -100,44 +100,90 @@
src.loc = F
return
+/obj/item/weapon/tank/phoron/vox
+ name = "phoron tank"
+ desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable."
+ icon_state = "oxygen_fr"
+ gauge_icon = null
+ flags = CONDUCT
+ slot_flags = SLOT_BACK //these ones have straps!
+
/*
* Emergency Oxygen
*/
-/obj/item/weapon/tank/emergency_oxygen
- name = "emergency oxygen tank"
- desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
+
+/obj/item/weapon/tank/emergency
+ name = "emergency tank"
icon_state = "emergency"
gauge_icon = "indicator_emergency"
gauge_cap = 4
flags = CONDUCT
slot_flags = SLOT_BELT
w_class = ITEMSIZE_SMALL
- force = 4.0
+ force = 4
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
- New()
+/obj/item/weapon/tank/emergency/oxygen
+ name = "emergency oxygen tank"
+ desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
+ icon_state = "emergency"
+ gauge_icon = "indicator_emergency"
+
+/obj/item/weapon/tank/emergency/oxygen/New()
..()
src.air_contents.adjust_gas("oxygen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
return
- examine(mob/user)
- if(..(user, 0) && air_contents.gas["oxygen"] < 0.2 && loc==user)
- user << text("The meter on the [src.name] indicates you are almost out of air!")
- user << sound('sound/effects/alert.ogg')
+/obj/item/weapon/tank/emergency/oxygen/examine(mob/user)
+ if(..(user, 0) && air_contents.gas["oxygen"] < 0.2 && loc==user)
+ user << text("The meter on the [src.name] indicates you are almost out of air!")
+ user << sound('sound/effects/alert.ogg')
-/obj/item/weapon/tank/emergency_oxygen/engi
+/obj/item/weapon/tank/emergency/oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
volume = 6
-/obj/item/weapon/tank/emergency_oxygen/double
+/obj/item/weapon/tank/emergency/oxygen/double
name = "double emergency oxygen tank"
icon_state = "emergency_double"
gauge_icon = "indicator_emergency_double"
volume = 10
+/obj/item/weapon/tank/emergency/nitrogen
+ name = "emergency nitrogen tank"
+ desc = "An emergency air tank hastily painted red."
+ icon_state = "emergency_nitro"
+ gauge_icon = "indicator_emergency"
+
+/obj/item/weapon/tank/emergency/nitrogen/New()
+ ..()
+ src.air_contents.adjust_gas("nitrogen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+
+/obj/item/weapon/tank/emergency/nitrogen/double
+ name = "double emergency nitrogen tank"
+ icon_state = "emergency_double_nitrogen"
+ gauge_icon = "indicator_emergency_double"
+ volume = 10
+
+/obj/item/weapon/tank/emergency/phoron
+ name = "emergency phoron tank"
+ desc = "An emergency air tank hastily painted red."
+ icon_state = "emergency_nitro"
+ gauge_icon = "indicator_emergency"
+
+/obj/item/weapon/tank/emergency/phoron/New()
+ ..()
+ src.air_contents.adjust_gas("phoron", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
+
+/obj/item/weapon/tank/emergency/phoron/double
+ name = "double emergency nitrogen tank"
+ icon_state = "emergency_double_nitrogen"
+ gauge_icon = "indicator_emergency_double"
+ volume = 10
+
/*
* Nitrogen
*/
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index bea64ddce9..cd12ad5a0c 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -462,9 +462,9 @@
prob(4);/obj/item/weapon/tank/oxygen/yellow,
prob(4);/obj/item/weapon/tank/oxygen/red,
prob(3);/obj/item/weapon/tank/air,
- prob(4);/obj/item/weapon/tank/emergency_oxygen,
- prob(3);/obj/item/weapon/tank/emergency_oxygen/engi,
- prob(2);/obj/item/weapon/tank/emergency_oxygen/double,
+ prob(4);/obj/item/weapon/tank/emergency/oxygen,
+ prob(3);/obj/item/weapon/tank/emergency/oxygen/engi,
+ prob(2);/obj/item/weapon/tank/emergency/oxygen/double,
prob(1);/obj/item/device/suit_cooling_unit)
/obj/random/cigarettes
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 1b4b27b196..c00875e522 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -53,8 +53,8 @@
new /obj/item/clothing/head/bio_hood/janitor(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/mask/gas(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
/obj/structure/closet/l3closet/scientist
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index c7095514cc..6417f93ab7 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -57,7 +57,7 @@
new /obj/item/clothing/gloves/black(src)
// new /obj/item/weapon/cartridge/quartermaster(src)
new /obj/item/clothing/suit/fire/firefighter(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/emergency/oxygen(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/head/soft(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 3ead9d15aa..f79203c3ba 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -36,7 +36,7 @@
new /obj/item/device/flash(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
return
@@ -127,7 +127,7 @@
new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
return
@@ -162,5 +162,5 @@
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/taperoll/atmos(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index d886236c1b..09aeac362f 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -143,7 +143,7 @@
new /obj/item/device/radio/headset/headset_med/alt(src)
new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/flashlight(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
new /obj/item/clothing/glasses/hud/health(src)
new /obj/item/device/healthanalyzer(src)
new /obj/item/device/radio/off(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 714be281b8..5c8aa2b2e0 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -24,27 +24,27 @@
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
if ("small")
- new /obj/item/weapon/tank/emergency_oxygen(src)
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/emergency/oxygen(src)
+ new /obj/item/weapon/tank/emergency/oxygen(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/clothing/suit/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
if ("aid")
- new /obj/item/weapon/tank/emergency_oxygen(src)
+ new /obj/item/weapon/tank/emergency/oxygen(src)
new /obj/item/weapon/storage/toolbox/emergency(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/weapon/storage/firstaid/o2(src)
new /obj/item/clothing/suit/space/emergency(src)
new /obj/item/clothing/head/helmet/space/emergency(src)
if ("tank")
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
new /obj/item/clothing/mask/breath(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
new /obj/item/clothing/mask/breath(src)
if ("both")
new /obj/item/weapon/storage/toolbox/emergency(src)
- new /obj/item/weapon/tank/emergency_oxygen/engi(src)
+ new /obj/item/weapon/tank/emergency/oxygen/engi(src)
new /obj/item/clothing/mask/breath(src)
new /obj/item/weapon/storage/firstaid/o2(src)
new /obj/item/clothing/suit/space/emergency(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
index 1fadf10eec..39204e3491 100644
--- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm
+++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
@@ -16,7 +16,7 @@
/obj/structure/closet/walllocker/emerglocker
name = "emergency locker"
desc = "A wall mounted locker with emergency supplies."
- var/list/spawnitems = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar/red)
+ var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar/red)
var/amount = 2 // spawns each items X times.
icon_state = "emerg"
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index a8747e07ec..cd0ab5ec9c 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -113,3 +113,31 @@
else
user.visible_message("[user] hits [src] and bounces off!")
return 1
+
+// The following mirror is ~special~.
+/obj/structure/mirror/raider
+ 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/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.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)
+ if(user.mind)
+ user.mind.transfer_to(vox)
+ spawn(1)
+ var/newname = sanitizeSafe(input(vox,"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[vox.species.default_language]
+ newname = L.get_random_name()
+ vox.real_name = newname
+ vox.name = vox.real_name
+ raiders.update_access(vox)
+ qdel(user)
+ ..()
\ No newline at end of file
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 09fd236be0..4c061c71d2 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -112,7 +112,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
corpseback = /obj/item/weapon/tank/jetpack/oxygen
- corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
+ corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 68dc3c25ce..df3b7944a3 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -114,7 +114,8 @@
w_class = ITEMSIZE_TINY
throwforce = 2
slot_flags = SLOT_EARS
- sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ears.dmi')
+ sprite_sheets = list(
+ "Teshari" = 'icons/mob/species/seromi/ears.dmi')
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return
@@ -186,9 +187,9 @@
body_parts_covered = HANDS
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
- species_restricted = null
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
+ "Vox" = 'icons/mob/species/vox/gloves.dmi'
)
/obj/item/clothing/gloves/update_clothing_icon()
@@ -245,7 +246,8 @@
var/on = 0
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/head.dmi'
+ "Teshari" = 'icons/mob/species/seromi/head.dmi',
+ "Vox" = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/attack_self(mob/user)
@@ -348,6 +350,7 @@
body_parts_covered = FACE|EYES
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/masks.dmi',
+ "Vox" = 'icons/mob/species/vox/masks.dmi'
)
var/voicechange = 0
@@ -386,9 +389,10 @@
slowdown = SHOES_SLOWDOWN
force = 2
var/overshoes = 0
- species_restricted = list("exclude","Teshari")
+ species_restricted = list("exclude","Teshari", "Vox")
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
+ "Vox" = 'icons/mob/species/vox/shoes.dmi'
)
/obj/item/clothing/shoes/proc/draw_knife()
@@ -471,7 +475,7 @@
name = "suit"
var/fire_resist = T0C+100
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
- allowed = list(/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING
var/blood_overlay_type = "suit"
@@ -479,7 +483,8 @@
w_class = ITEMSIZE_NORMAL
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/suit.dmi'
+ "Teshari" = 'icons/mob/species/seromi/suit.dmi',
+ "Vox" = 'icons/mob/species/vox/suit.dmi'
)
valid_accessory_slots = list("over", "armband")
@@ -517,7 +522,8 @@
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/uniform.dmi'
+ "Teshari" = 'icons/mob/species/seromi/uniform.dmi',
+ "Vox" = 'icons/mob/species/vox/uniform.dmi'
)
//convenience var for defining the icon state for the overlay used when the clothing is worn.
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 04770b5668..c8acd67d22 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -27,7 +27,8 @@ BLIND // can't see anything
var/obj/screen/overlay = null
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/eyes.dmi'
+ "Teshari" = 'icons/mob/species/seromi/eyes.dmi',
+ "Vox" = 'icons/mob/species/vox/eyes.dmi'
)
/obj/item/clothing/glasses/update_clothing_icon()
@@ -92,6 +93,11 @@ BLIND // can't see anything
see_invisible = SEE_INVISIBLE_NOLIGHTING
off_state = "denight"
+/obj/item/clothing/glasses/night/vox
+ name = "Alien Optics"
+ species_restricted = ("Vox")
+ phoronproof = 1
+
/obj/item/clothing/glasses/night/New()
..()
overlay = global_hud.nvg
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 27e6ad0369..09a1909392 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -82,3 +82,14 @@
siemens_coefficient = 0.50
permeability_coefficient = 0.05
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
+
+/obj/item/clothing/gloves/vox
+ desc = "These bizarre gauntlets seem to be fitted for... bird claws?"
+ name = "insulated gauntlets"
+ icon_state = "gloves-vox"
+ item_state = "gloves-vox"
+ item_flags = PHORONGUARD
+ siemens_coefficient = 0
+ phoronproof = 1
+ permeability_coefficient = 0.05
+ species_restricted = list("Vox")
\ No newline at end of file
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index ca7ca8aedd..cd5a927892 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -10,7 +10,8 @@
desc = "an ultra rare hat. It commands a certain respect."
icon_state = "petehat"
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/head.dmi'
+ "Teshari" = 'icons/mob/species/seromi/head.dmi',
+ "Vox" = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/collectable/slime
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 0b9723d47b..b7df12fa0a 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -52,6 +52,15 @@
siemens_coefficient = 0.7
body_parts_covered = FACE|EYES
+/obj/item/clothing/mask/gas/swat/vox
+ name = "\improper alien mask"
+ desc = "Clearly not designed for a human face."
+ body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask.
+ item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD
+ phoronproof = 1
+ species_restricted = list("Vox")
+ filtered_gases = list("oxygen", "sleeping_agent")
+
/obj/item/clothing/mask/gas/syndicate
name = "tactical mask"
desc = "A close-fitting tactical mask that can be connected to an air supply."
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 19eda1a1dd..57a50b4c09 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -74,4 +74,52 @@
var/state = "disabled"
if(item_flags & NOSLIP)
state = "enabled"
- user << "Its mag-pulse traction system appears to be [state]."
\ No newline at end of file
+ user << "Its mag-pulse traction system appears to be [state]."
+
+/obj/item/clothing/shoes/magboots/vox
+
+ desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor."
+ name = "vox magclaws"
+ item_state = "boots-vox"
+ icon_state = "boots-vox"
+ item_flags = PHORONGUARD
+ phoronproof = 1
+ species_restricted = list("Vox")
+
+ action_button_name = "Toggle the magclaws"
+
+/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user)
+ if(src.magpulse)
+ item_flags &= ~NOSLIP
+ magpulse = 0
+ canremove = 1
+ to_chat(user, "You relax your deathgrip on the flooring.")
+ else
+ //make sure these can only be used when equipped.
+ if(!ishuman(user))
+ return
+ var/mob/living/carbon/human/H = user
+ if (H.shoes != src)
+ to_chat(user, "You will have to put on the [src] before you can do that.")
+ return
+
+ item_flags |= NOSLIP
+ magpulse = 1
+ canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly.
+ to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.")
+ to_chat(user, "It would be hard to take off the [src] without relaxing your grip first.")
+ user.update_action_buttons()
+
+//In case they somehow come off while enabled.
+/obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob)
+ ..()
+ if(src.magpulse)
+ user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.")
+ item_flags &= ~NOSLIP
+ magpulse = 0
+ canremove = 1
+
+/obj/item/clothing/shoes/magboots/vox/examine(mob/user)
+ ..(user)
+ if (magpulse)
+ to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped.
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm
index 9d940c9e30..7f28b34a9d 100644
--- a/code/modules/clothing/spacesuits/alien.dm
+++ b/code/modules/clothing/spacesuits/alien.dm
@@ -25,4 +25,66 @@
icon_state = "skrell_suit_white"
/obj/item/clothing/suit/space/skrell/black
- icon_state = "skrell_suit_black"
\ No newline at end of file
+ icon_state = "skrell_suit_black"
+
+// Vox space gear (vaccuum suit, low pressure armour)
+// Can't be equipped by any other species due to bone structure and vox cybernetics.
+/obj/item/clothing/suit/space/vox
+ w_class = ITEMSIZE_NORMAL
+ item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | PHORONGUARD
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank)
+ slowdown = 1
+ phoronproof = 1
+ armor = list(melee = 60, bullet = 50, laser = 40,energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.6
+ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
+ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ species_restricted = list("Vox")
+
+/obj/item/clothing/head/helmet/space/vox
+ armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 30, rad = 30)
+ siemens_coefficient = 0.6
+ item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD
+ flags_inv = 0
+ phoronproof = 1
+ species_restricted = list("Vox")
+
+/obj/item/clothing/head/helmet/space/vox/pressure
+ name = "alien helmet"
+ icon_state = "vox-pressure"
+ desc = "Hey, wasn't this a prop in \'The Abyss\'?"
+
+/obj/item/clothing/suit/space/vox/pressure
+ name = "alien pressure suit"
+ icon_state = "vox-pressure"
+ desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions."
+
+/obj/item/clothing/head/helmet/space/vox/carapace
+ name = "alien visor"
+ icon_state = "vox-carapace"
+ desc = "A glowing visor, perhaps stolen from a depressed Cylon."
+
+/obj/item/clothing/suit/space/vox/carapace
+ name = "alien carapace armour"
+ icon_state = "vox-carapace"
+ desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down."
+
+/obj/item/clothing/head/helmet/space/vox/stealth
+ name = "alien stealth helmet"
+ icon_state = "vox-stealth"
+ desc = "A smoothly contoured, matte-black alien helmet."
+
+/obj/item/clothing/suit/space/vox/stealth
+ name = "alien stealth suit"
+ icon_state = "vox-stealth"
+ desc = "A sleek black suit. It seems to have a tail, and is very heavy."
+
+/obj/item/clothing/head/helmet/space/vox/medic
+ name = "alien goggled helmet"
+ icon_state = "vox-medic"
+ desc = "An alien helmet with enormous goggled lenses."
+
+/obj/item/clothing/suit/space/vox/medic
+ name = "alien armour"
+ icon_state = "vox-medic"
+ desc = "An almost organic looking nonhuman pressure suit."
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index f4b7101b82..c66ff3440c 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -18,7 +18,7 @@
permeability_coefficient = 0.02
item_flags = STOPPRESSUREDAMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
armor = list(melee = 65, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
@@ -81,7 +81,7 @@
desc = "Yarr."
icon_state = "pirate"
w_class = ITEMSIZE_NORMAL
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen)
slowdown = 0
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.9
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index dd7c473215..373ca946d3 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -13,7 +13,8 @@
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
- "Unathi" = 'icons/mob/species/unathi/helmet.dmi'
+ "Unathi" = 'icons/mob/species/unathi/helmet.dmi',
+ "Vox" = 'icons/mob/species/vox/head.dmi'
)
species_restricted = null
@@ -50,7 +51,8 @@
can_breach = 1
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
- "Unathi" = 'icons/mob/species/unathi/suit.dmi'
+ "Unathi" = 'icons/mob/species/unathi/suit.dmi',
+ "Vox" = 'icons/mob/species/vox/suit.dmi'
)
supporting_limbs = list()
var/obj/item/weapon/material/hatchet/tacknife
diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm
index 5662e8b181..61fec573c1 100644
--- a/code/modules/clothing/spacesuits/rig/suits/alien.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm
@@ -1,3 +1,7 @@
+/*
+ * UNATHI
+ */
+
/obj/item/weapon/rig/breacher
name = "\improper NT breacher chassis control module"
desc = "A cheap NT knock-off of an Unathi battle-rig. Looks like a fish, moves like a fish, steers like a cow."
@@ -30,4 +34,61 @@
species_restricted = list("Unathi")
/obj/item/clothing/shoes/magboots/rig/breacher
- species_restricted = list("Unathi")
\ No newline at end of file
+ species_restricted = list("Unathi")
+
+/*
+ * VOX
+ */
+
+/obj/item/weapon/rig/vox //Just to get the flags set up
+ name = "alien control module"
+ desc = "This metal box writhes and squirms as if it were alive..."
+ suit_type = "alien"
+ icon_state = "vox_rig"
+ armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 30, rad = 30)
+ item_flags = THICKMATERIAL
+ phoronproof = 1
+
+ air_type = /obj/item/weapon/tank/phoron/vox
+
+ helm_type = /obj/item/clothing/head/helmet/space/rig/vox
+ boot_type = /obj/item/clothing/shoes/magboots/rig/vox
+ chest_type = /obj/item/clothing/suit/space/rig/vox
+ glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox
+
+/obj/item/clothing/head/helmet/space/rig/vox
+ species_restricted = list("Vox")
+ phoronproof = 1
+
+/obj/item/clothing/shoes/magboots/rig/vox
+ species_restricted = list("Vox")
+ phoronproof = 1
+
+/obj/item/clothing/suit/space/rig/vox
+ species_restricted = list("Vox")
+ phoronproof = 1
+
+/obj/item/clothing/gloves/gauntlets/rig/vox
+ name = "talons"
+ siemens_coefficient = 0
+ species_restricted = list("Vox")
+ phoronproof = 1
+
+/obj/item/weapon/rig/vox/stealth
+ name = "sinister alien control module"
+ suit_type = "sinister alien"
+ armor = list(melee = 40, bullet = 30, laser = 30, energy = 15, bomb = 30, bio = 100, rad = 100)
+ emp_protection = 40 //change this to 30 if too high.
+ slowdown = 0
+ phoronproof = 1
+
+ req_access = list(access_syndicate)
+
+ cell_type = /obj/item/weapon/cell/hyper
+
+ initial_modules = list(
+ /obj/item/rig_module/stealth_field,
+ /obj/item/rig_module/vision,
+ /obj/item/rig_module/power_sink,
+ /obj/item/rig_module/self_destruct
+ )
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index e931cb14a4..07f8160b48 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -51,7 +51,7 @@
permeability_coefficient = 0.02
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 3
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index 7c8cfdaba2..9de95f3d6c 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -11,7 +11,7 @@
icon_state = "syndicate"
desc = "A crimson spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious."
w_class = ITEMSIZE_NORMAL
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen)
slowdown = 1
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0.6
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 32962252bf..d08726371a 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -126,7 +126,7 @@
permeability_coefficient = 0.01
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
- allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/helmet)
+ allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/helmet)
slowdown = 1
w_class = ITEMSIZE_HUGE
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100)
@@ -417,7 +417,7 @@
item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
w_class = ITEMSIZE_LARGE//bulky item
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/helmet)
+ allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/helmet)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index d2dcbc9a02..c6eb2ac459 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -18,7 +18,7 @@
permeability_coefficient = 0.01
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
siemens_coefficient = 0.9
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 68b647c73c..46d99f5a87 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -99,7 +99,7 @@
blood_overlay_type = "coat"
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
/obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter,
/obj/item/device/taperecorder, /obj/item/device/uv_light)
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
@@ -116,7 +116,7 @@
desc = "A forensics technician jacket."
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight, /obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine,
/obj/item/ammo_casing, /obj/item/weapon/melee/baton, /obj/item/weapon/handcuffs, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/flame/lighter,
/obj/item/device/taperecorder, /obj/item/device/uv_light)
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
@@ -150,7 +150,7 @@
icon_state = "hazard"
blood_overlay_type = "armor"
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner,
- /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency_oxygen,
+ /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/weapon/tank/emergency/oxygen,
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering)
body_parts_covered = UPPER_TORSO
@@ -211,7 +211,7 @@
icon_closed = "fr_jacket"
blood_overlay_type = "armor"
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe,
- /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
+ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen)
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/toggle/fr_jacket/ems
@@ -229,7 +229,7 @@
blood_overlay_type = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
- /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat, \
+ /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat, \
/obj/item/weapon/cautery,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein)
//Mime
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 5f7c9e3875..4d7243438f 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -92,7 +92,7 @@
icon_state = "vest"
item_state_slots = list(slot_r_hand_str = "wcoat", slot_l_hand_str = "wcoat")
blood_overlay_type = "armor"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
/obj/item/clothing/suit/wcoat/red
@@ -131,7 +131,7 @@
icon_state = "syndicate"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = ITEMSIZE_NORMAL
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -272,7 +272,7 @@
name = "leather coat"
desc = "A long, thick black leather coat."
icon_state = "leathercoat_alt"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
flags_inv = HIDEHOLSTER
@@ -287,7 +287,7 @@
name = "brown leather coat"
desc = "A long, brown leather coat."
icon_state = "browncoat"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket")
flags_inv = HIDEHOLSTER
@@ -295,7 +295,7 @@
name = "black coat"
desc = "A flowing, black coat."
icon_state = "neocoat"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
item_state_slots = list(slot_r_hand_str = "leather_jacket", slot_l_hand_str = "leather_jacket")
flags_inv = HIDEHOLSTER
@@ -318,7 +318,7 @@
desc = "A rugged canvas trenchcoat, designed and created by TX Fabrication Corp. The coat appears to have its kevlar lining removed."
icon_state = "detective"
blood_overlay_type = "coat"
- allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light)
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/trench/grey
@@ -393,7 +393,7 @@
item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket")
icon_open = "bomber_open"
icon_closed = "bomber"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|ARMS
@@ -416,7 +416,7 @@
desc = "A black leather coat."
icon_state = "leather_jacket"
icon_open = "leather_jacket_open"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
@@ -460,7 +460,7 @@
item_state_slots = list(slot_r_hand_str = "brown_jacket", slot_l_hand_str = "brown_jacket")
icon_open = "brown_jacket_open"
icon_closed = "brown_jacket"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
@@ -496,7 +496,7 @@
item_state_slots = list(slot_r_hand_str = "denim_jacket", slot_l_hand_str = "denim_jacket")
icon_open = "denim_jacket_open"
icon_closed = "denim_jacket"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
@@ -681,7 +681,7 @@
hooded = 1
action_button_name = "Toggle Winter Hood"
hoodtype = /obj/item/clothing/head/winterhood
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
/obj/item/clothing/head/winterhood
name = "winter hood"
@@ -747,7 +747,7 @@
name = "black varsity jacket"
desc = "A favorite of jocks everywhere from Sol to Nyx."
icon_state = "varsity"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
flags_inv = HIDETIE|HIDEHOLSTER
@@ -781,7 +781,7 @@
item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat")
icon_open = "trackjacket_open"
icon_closed = "trackjacket"
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
/obj/item/clothing/suit/storage/toggle/track/blue
name = "blue track jacket"
@@ -818,7 +818,7 @@
desc = "A comfy, grey flannel shirt. Unleash your inner hipster."
icon_state = "flannel"
item_state_slots = list(slot_r_hand_str = "black_labcoat", slot_l_hand_str = "black_labcoat")
- allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
flags_inv = HIDEHOLSTER
var/rolled = 0
var/tucked = 0
diff --git a/code/modules/clothing/suits/solgov.dm b/code/modules/clothing/suits/solgov.dm
index 90b561ba3e..04621f5b60 100644
--- a/code/modules/clothing/suits/solgov.dm
+++ b/code/modules/clothing/suits/solgov.dm
@@ -10,7 +10,7 @@
body_parts_covered = UPPER_TORSO|ARMS
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/flashlight,/obj/item/weapon/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/analyzer,/obj/item/device/radio,/obj/item/taperoll)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/weapon/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/analyzer,/obj/item/device/radio,/obj/item/taperoll)
/obj/item/clothing/suit/storage/service/expeditionary
name = "expeditionary jacket"
@@ -112,7 +112,7 @@
body_parts_covered = UPPER_TORSO|ARMS
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
- allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/flashlight,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/device/radio,/obj/item/weapon/pen)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/device/radio,/obj/item/weapon/pen)
/obj/item/clothing/suit/dress/expedition
name = "expeditionary dress jacket"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index e11f71510f..9629a53283 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -17,7 +17,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
item_flags = STOPPRESSUREDAMAGE
@@ -90,7 +90,7 @@
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.50
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas)
slowdown = 1.5
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm
index 98855ead83..045e03fc93 100644
--- a/code/modules/clothing/under/accessories/clothing.dm
+++ b/code/modules/clothing/under/accessories/clothing.dm
@@ -49,7 +49,7 @@
item_state = "classicponcho"
icon_override = 'icons/mob/ties.dmi'
var/fire_resist = T0C+100
- allowed = list(/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/tank/emergency/oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING | SLOT_TIE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
@@ -138,7 +138,7 @@
item_state = "vest"
icon_override = 'icons/mob/ties.dmi'
item_state_slots = list(slot_r_hand_str = "wcoat", slot_l_hand_str = "wcoat")
- allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
+ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
slot_flags = SLOT_OCLOTHING | SLOT_TIE
body_parts_covered = UPPER_TORSO|LOWER_TORSO
diff --git a/code/modules/clothing/under/xenos/vox.dm b/code/modules/clothing/under/xenos/vox.dm
new file mode 100644
index 0000000000..9c1f3ce6b0
--- /dev/null
+++ b/code/modules/clothing/under/xenos/vox.dm
@@ -0,0 +1,17 @@
+/obj/item/clothing/under/vox
+ has_sensor = 0
+ species_restricted = list("Vox")
+ phoronproof = 1
+
+/obj/item/clothing/under/vox/vox_casual
+ name = "alien clothing"
+ desc = "This doesn't look very comfortable."
+ icon_state = "vox-casual-1"
+ item_state = "vox-casual-1"
+ body_parts_covered = LEGS
+
+/obj/item/clothing/under/vox/vox_robes
+ name = "alien robes"
+ desc = "Weird and flowing!"
+ icon_state = "vox-casual-2"
+ item_state = "vox-casual-2"
\ No newline at end of file
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 51f291fa74..1998e7fe65 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -9,7 +9,8 @@ var/list/holder_mob_icon_cache = list()
show_messages = 1
sprite_sheets = list(
- "Teshari" = 'icons/mob/species/seromi/head.dmi'
+ "Teshari" = 'icons/mob/species/seromi/head.dmi',
+ "Vox" = 'icons/mob/species/vox/head.dmi'
)
origin_tech = null
diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm
index f8634f8f54..7545e8bd34 100644
--- a/code/modules/mob/language/outsider.dm
+++ b/code/modules/mob/language/outsider.dm
@@ -37,6 +37,22 @@
speaker_mask = B.truename
..(speaker,message,speaker_mask)
+/datum/language/vox
+ name = "Vox-pidgin"
+ desc = "The common tongue of the various Vox ships making up the Shoal. It sounds like chaotic shrieking to everyone else."
+ speech_verb = "shrieks"
+ ask_verb = "creels"
+ exclaim_verb = "SHRIEKS"
+ colour = "vox"
+ key = "5"
+ flags = WHITELISTED
+ syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \
+ "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
+ machine_understands = 0
+
+/datum/language/vox/get_random_name()
+ return ..(FEMALE,1,6)
+
/datum/language/cultcommon
name = LANGUAGE_CULT
desc = "The chants of the occult, the incomprehensible."
diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm
index ea1afb157f..fa7460b19e 100644
--- a/code/modules/mob/living/carbon/human/human_species.dm
+++ b/code/modules/mob/living/carbon/human/human_species.dm
@@ -21,6 +21,10 @@
h_style = "Unathi Horns"
..(new_loc, "Unathi")
+/mob/living/carbon/human/vox/New(var/new_loc)
+ h_style = "Short Vox Quills"
+ ..(new_loc, "Vox")
+
/mob/living/carbon/human/diona/New(var/new_loc)
..(new_loc, "Diona")
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index b4a2b2bbeb..6fabb39264 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -808,7 +808,8 @@
var/total_phoronloss = 0
for(var/obj/item/I in src)
if(I.contaminated)
- total_phoronloss += vsc.plc.CONTAMINATION_LOSS
+ if(src.species && src.species.get_bodytype() != "Vox")
+ total_phoronloss += vsc.plc.CONTAMINATION_LOSS
if(!(status_flags & GODMODE)) adjustToxLoss(total_phoronloss)
if(status_flags & GODMODE) return 0 //godmode
diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
new file mode 100644
index 0000000000..c0e52f658a
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
@@ -0,0 +1,87 @@
+/datum/species/vox
+ name = "Vox"
+ name_plural = "Vox"
+ icobase = 'icons/mob/human_races/r_vox.dmi'
+ deform = 'icons/mob/human_races/r_def_vox.dmi'
+ default_language = "Vox-pidgin"
+ language = "Galactic Common"
+ 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)
+ 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 \
+ refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
+ smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
+ dealing with their traders and merchants; those that do rarely enjoy the experience."
+
+// taste_sensitivity = TASTE_DULL
+
+ speech_sounds = list('sound/voice/shriek1.ogg')
+ speech_chance = 20
+
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = 0
+
+ gluttonous = 1
+
+ breath_type = "phoron"
+ poison_type = "oxygen"
+ siemens_coefficient = 0.2
+
+ flags = NO_SCAN
+ spawn_flags = SPECIES_IS_WHITELISTED
+ appearance_flags = HAS_EYE_COLOR | HAS_HAIR_COLOR
+
+ blood_color = "#2299FC"
+ flesh_color = "#808D11"
+
+ reagent_tag = IS_VOX
+
+ has_limbs = list(
+ BP_TORSO = list("path" = /obj/item/organ/external/chest),
+ BP_GROIN = list("path" = /obj/item/organ/external/groin),
+ BP_HEAD = list("path" = /obj/item/organ/external/head/vox),
+ BP_L_ARM = list("path" = /obj/item/organ/external/arm),
+ BP_R_ARM = list("path" = /obj/item/organ/external/arm/right),
+ BP_L_LEG = list("path" = /obj/item/organ/external/leg),
+ BP_R_LEG = list("path" = /obj/item/organ/external/leg/right),
+ BP_L_HAND = list("path" = /obj/item/organ/external/hand),
+ BP_R_HAND = list("path" = /obj/item/organ/external/hand/right),
+ BP_L_FOOT = list("path" = /obj/item/organ/external/foot),
+ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
+ )
+
+
+ has_organ = list(
+ O_HEART = /obj/item/organ/internal/heart/vox,
+ O_LUNGS = /obj/item/organ/internal/lungs/vox,
+ O_LIVER = /obj/item/organ/internal/liver/vox,
+ O_KIDNEYS = /obj/item/organ/internal/kidneys/vox,
+ O_BRAIN = /obj/item/organ/internal/brain/vox,
+ O_EYES = /obj/item/organ/internal/eyes,
+ )
+
+ genders = list(NEUTER)
+
+/datum/species/vox/get_random_name(var/gender)
+ var/datum/language/species_language = all_languages[default_language]
+ return species_language.get_random_name(gender)
+
+/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/tank/phoron/vox(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H), slot_r_hand)
+ H.internal = H.back
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/tank/phoron/vox(H), slot_r_hand)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack)
+ H.internal = H.r_hand
+ H.internal = locate(/obj/item/weapon/tank) in H.contents
+ if(istype(H.internal,/obj/item/weapon/tank) && H.internals)
+ H.internals.icon_state = "internal1"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index 93b79423ce..00b2d114c8 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -110,7 +110,7 @@
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/void/merc
corpseback = /obj/item/weapon/tank/jetpack/oxygen
- corpsepocket1 = /obj/item/weapon/tank/emergency_oxygen
+ corpsepocket1 = /obj/item/weapon/tank/emergency/oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index f590317aea..4845dfb0e7 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -540,7 +540,7 @@
name = "Shaved"
icon_state = "bald"
gender = NEUTER
- species_allowed = list("Human","Unathi","Tajara","Skrell", "Machine","Teshari")
+ species_allowed = list("Human","Unathi","Tajara","Skrell", "Machine","Teshari", "Vox")
teshari_beard
name = "Teshari Beard"
@@ -806,6 +806,21 @@
icon_state = "hair_fingerwave"
species_allowed = list("Tajara")
+ vox_quills_short
+ name = "Short Vox Quills"
+ icon_state = "vox_shortquills"
+ species_allowed = list("Vox")
+
+ vox_quills_kingly
+ name = "Kingly Vox Quills"
+ icon_state = "vox_kingly"
+ species_allowed = list("Vox")
+
+ vox_quills_mohawk
+ name = "Quill Mohawk"
+ icon_state = "vox_mohawk"
+ species_allowed = list("Vox")
+
/datum/sprite_accessory/facial_hair
taj_sideburns
diff --git a/code/modules/organs/misc.dm b/code/modules/organs/misc.dm
index 7da4dd1106..862c96a96f 100644
--- a/code/modules/organs/misc.dm
+++ b/code/modules/organs/misc.dm
@@ -56,3 +56,7 @@
if(owner && owner.stat != DEAD && !is_broken())
backup_time = world.time
if(owner.mind) backup = owner.mind
+
+/obj/item/organ/internal/stack/vox/stack
+ name = "vox cortical stack"
+ icon_state = "cortical_stack"
\ No newline at end of file
diff --git a/code/modules/organs/subtypes/vox.dm b/code/modules/organs/subtypes/vox.dm
new file mode 100644
index 0000000000..c8872892d3
--- /dev/null
+++ b/code/modules/organs/subtypes/vox.dm
@@ -0,0 +1,30 @@
+/obj/item/organ/external/head/vox
+ eye_icon = "vox_eyes_s"
+
+//vox got different organs within. This will also help with regular surgeons knowing the organs within an alien as alien as vox.
+/obj/item/organ/internal/brain/vox
+ icon_state = "brain_prosthetic"
+ dead_icon = null
+
+/obj/item/organ/internal/heart/vox
+ icon_state = "vox_heart"
+ dead_icon = null
+ parent_organ = BP_GROIN
+
+/obj/item/organ/internal/lungs/vox
+ name = "air capillary sack" //Like birds, Vox absorb gas via air capillaries.
+ icon_state = "vox_lung"
+
+/obj/item/organ/internal/kidneys/vox
+ name = "filtration bladder"
+ icon_state = "lungs" //wow are vox kidneys fat.
+ color = "#99ccff"
+ parent_organ = BP_TORSO
+
+/obj/item/organ/internal/liver/vox
+ name = "waste tract"
+ parent_organ = BP_TORSO
+ color = "#0033cc"
+
+/obj/item/organ/external/groin/vox //vox have an extended ribcage for extra protection.
+ encased = "lower ribcage"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index 617fb31e58..f67fffe651 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -203,10 +203,6 @@
reagent_state = GAS
color = "#808080"
-/datum/reagent/nitrogen/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(alien == IS_VOX)
- M.adjustOxyLoss(-removed * 3)
-
/datum/reagent/oxygen
name = "Oxygen"
id = "oxygen"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 6122f474da..273589e493 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -55,10 +55,18 @@
/datum/reagent/toxin/phoron/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
..()
M.adjust_fire_stacks(removed / 5)
+ if(alien == IS_VOX)
+ return
M.take_organ_damage(0, removed * 0.1) //being splashed directly with phoron causes minor chemical burns
if(prob(50))
M.pl_effects()
+/datum/reagent/toxin/phoron/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_VOX)
+ M.adjustOxyLoss(-removed * 9)
+ return
+ ..()
+
/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T)
if(!istype(T))
return
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index c7b7300113..d42ac80b7c 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -89,6 +89,7 @@ h1.alert, h2.alert {color: #000000;}
.soghun {color: #228B22;}
.solcom {color: #22228B;}
.changeling {color: #800080;}
+.vox {color: #AA00AA;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
diff --git a/html/changelogs/Anewbe - UnboxTheVox.yml b/html/changelogs/Anewbe - UnboxTheVox.yml
new file mode 100644
index 0000000000..5f6de34cea
--- /dev/null
+++ b/html/changelogs/Anewbe - UnboxTheVox.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Readded the Vox for admin/antag use and testing. They breathe Phoron now, rather than Nitrogen."
\ No newline at end of file
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 0530d0ca29..6cec55a8fc 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi
new file mode 100644
index 0000000000..f212822aaf
Binary files /dev/null and b/icons/mob/human_races/r_vox.dmi differ
diff --git a/icons/mob/rig_back.dmi b/icons/mob/rig_back.dmi
index 96108539d1..aee3eedc77 100644
Binary files a/icons/mob/rig_back.dmi and b/icons/mob/rig_back.dmi differ
diff --git a/icons/mob/species/vox/eyes.dmi b/icons/mob/species/vox/eyes.dmi
new file mode 100644
index 0000000000..6e15b3e58c
Binary files /dev/null and b/icons/mob/species/vox/eyes.dmi differ
diff --git a/icons/mob/species/vox/gloves.dmi b/icons/mob/species/vox/gloves.dmi
new file mode 100644
index 0000000000..e069f8e36f
Binary files /dev/null and b/icons/mob/species/vox/gloves.dmi differ
diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi
new file mode 100644
index 0000000000..969834ae0a
Binary files /dev/null and b/icons/mob/species/vox/head.dmi differ
diff --git a/icons/mob/species/vox/masks.dmi b/icons/mob/species/vox/masks.dmi
new file mode 100644
index 0000000000..58bb8f7f20
Binary files /dev/null and b/icons/mob/species/vox/masks.dmi differ
diff --git a/icons/mob/species/vox/shoes.dmi b/icons/mob/species/vox/shoes.dmi
new file mode 100644
index 0000000000..661e90562a
Binary files /dev/null and b/icons/mob/species/vox/shoes.dmi differ
diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi
new file mode 100644
index 0000000000..41b2cf9eab
Binary files /dev/null and b/icons/mob/species/vox/suit.dmi differ
diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi
new file mode 100644
index 0000000000..515595633f
Binary files /dev/null and b/icons/mob/species/vox/uniform.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 1278a3e34a..07719dce61 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index ae2c3ee288..08892b83ad 100644
Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 1fdc351f6b..0e96c916ee 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 2db6cc7814..e414cdcd9a 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/species/vox/hats.dmi b/icons/obj/clothing/species/vox/hats.dmi
new file mode 100644
index 0000000000..aae8da6a66
Binary files /dev/null and b/icons/obj/clothing/species/vox/hats.dmi differ
diff --git a/icons/obj/clothing/species/vox/suits.dmi b/icons/obj/clothing/species/vox/suits.dmi
new file mode 100644
index 0000000000..933e0be817
Binary files /dev/null and b/icons/obj/clothing/species/vox/suits.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 5f562d64da..17b46fbd36 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi
index 6ce7962fb7..11f3beb561 100644
Binary files a/icons/obj/rig_modules.dmi and b/icons/obj/rig_modules.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 202ec39bc8..8bdd72ef1f 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm
index 75cce3b058..0f7388e211 100644
--- a/maps/polaris-1.dmm
+++ b/maps/polaris-1.dmm
@@ -2150,7 +2150,7 @@
"aPr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/pool)
"aPs" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/structure/bed/chair{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/security/lobby)
"aPt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool)
-"aPu" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/decal/cleanable/cobweb2,/obj/effect/landmark{name = "blobstart"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/pool)
+"aPu" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/effect/decal/cleanable/cobweb2,/obj/effect/landmark{name = "blobstart"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/pool)
"aPv" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"aPw" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Ammo"},/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full{dir = 4},/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/turf/simulated/floor/tiled/dark,/area/security/armoury)
"aPx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range)
@@ -8281,7 +8281,7 @@
"ddm" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/maintenance/engineering)
"ddn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_eva)
"ddo" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D4)
-"ddp" = (/obj/structure/table/steel,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/construction)
+"ddp" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research)
"ddq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/bar)
"ddr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"dds" = (/turf/simulated/wall,/area/hallway/secondary/entry/D4)
@@ -8942,7 +8942,7 @@
"dpX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/engineering{c_tag = "ENG - Hallway Starboard"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/aft_hallway)
"dpY" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway)
"dpZ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/effect/floor_decal/industrial/warning,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = 30; pixel_y = -25; req_one_access = list(13,11,24)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/aft_hallway)
-"dqa" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research)
+"dqa" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/cargo)
"dqb" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research)
"dqc" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/obj/random/maintenance/research,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/research)
"dqd" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/obj/random/medical,/obj/random/medical,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
@@ -9360,7 +9360,7 @@
"dxZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"dya" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
"dyb" = (/turf/simulated/floor,/area/shuttle/constructionsite/station)
-"dyc" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"dyc" = (/obj/structure/table/steel,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/construction)
"dyd" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 4; tag_south = 2; tag_west = 0; use_power = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
"dye" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room)
"dyf" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 4; tag_south = 2; tag_west = 1; use_power = 0},/turf/simulated/floor/plating,/area/engineering/engine_room)
@@ -10064,7 +10064,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbCVdiNbAZbDabCZbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahbtHbEUbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbObbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfaZGbEjbEjbEjbEjbEjbEjbbUaZGbbVbbXbbWaZGbEgbEgbEgbEgbEgbbYbEkbiDbjYaZdbElaUvbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySdBabEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaabkfbBabBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahbtHbEUbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbPNbFqbRGbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvdoyaZdbFxbFybFxaZdbFzbFAbFBdoCaZdaahaahaZdaZdaZGaZHaZGbEjbEjbcabbZbcHbcGbEjbcIbFQbEjbEgbEgbEgbEgbIQbIQbcJbEgbcKbFDbEgaZdaZdaTobcLbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySdoSbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGydpKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahbtHbEUbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibGSbGUbGTbGWbGVbIsbGXbGYbFnbRMbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbyObHfbHgbFubFubFubFuawzbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEjbEjbcMbcNbKBbcPbcObdybcQbdzbEjcSPbdDbdEbEgbdGbdFbdUbdIbeybegbEgaahaahaTobHCblDbHCaToaToahybxcbTobHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWdBkbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbdpMaZmaahaahaahaahaahaahbgmbHebIedGPbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHdqabIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahbtHbEUbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibItbIAbIybIubIubIwbIubJXbJWbIzbJYbKcahyahybIBbecbRQbecbICbHcbIDbFObIFbIFbIGbIHbIIbIJbFuaxjaxibIMbHjbINbIObIPbHjaahaahaahaahaZdaZGbfobfkbgjbcNbJabJabJabJabJabhbbiVbiablubkEblYbEgbmzblZbvEbupbHobvJbEgaahahybJeaUvbRSaUvbpPahyahybuobFrbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHddpbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahbtHbEUbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibItbIAbIybIubIubIwbIubJXbJWbIzbJYbKcahyahybIBbecbRQbecbICbHcbIDbFObIFbIFbIGbIHbIIbIJbFuaxjaxibIMbHjbINbIObIPbHjaahaahaahaahaZdaZGbfobfkbgjbcNbJabJabJabJabJabhbbiVbiablubkEblYbEgbmzblZbvEbupbHobvJbEgaahahybJeaUvbRSaUvbpPahyahybuobFrbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHdqbbIibtHaahaahaahaahaahaahaahaahaahaahaahaahbtHbtHbEUbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbIdbJUbJVbFibGYbKabJZbIubIubIubIubKbbIubIubLzboTahyahybKdbecbcnbecbKebHcbIEbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqbYpbEjbAhbKBbJabJabJabJabJabCebCgbCfbFJbChaylbEgbEgbEgbEgbCibEgbEgbEgahyahybrGbCjbynbKFbrGahyahybvObVabKHbKHbKIbWHbXTbWNbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahbtHdqcbEUbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbLCbLBbIvbIubIubIubKbbIvbIubLEboTahyahybKdbLGbhqbecbKebHcbKubLIbKhbLJbLKbLMbZjbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdbYpbEjbCkbKBbKBbMhbEibEhbEhbFpbMibJdbFEbChbFJbFFbFHbFGbFNbFMbFPaLTbFRahyahybvNccdbgJaUvbvNahyahybMkbMlbMmbYmbOcbMkbMkbMkbMkdqdbMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHdqebIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHcapbEUbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbPkbNsbRfbPnaxraxUbRibRfbRkbRjbLFahyahybKdbecbDMbDNbKebYvbFubNubKhbNvbNwcaqbPsbNybFubNzbNAaGUbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdbYpbEjbHpbHnbHtbHrbHvbHubHwbNNbHxbKDbHzbHybHBbHAbISbIRbIVbITbFJbIWbIXahyahyaTobIYbetbYwaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbModqPbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10083,7 +10083,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbZUceXceYceXceZcfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfncfobZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcfpcfqcfrcfscftcfuceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybbocfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfFcfFcfFcfGcfHcfFcfFcfFcfIcfJcfDcfKcfLcfMcfNceBcfPceCcevceEceDceFcsYceGcsYcsYcvuctbcFdcFdcFdciycQGdDwcQGdDvcQGceJceIcQGahyahyaTocfYbetcfOaVlcgacgbcgbcgbcgccgbcgbcgbcgbcgbcgbcgbcgecgfcggbZMdGYcgndsdbZMbZMbZMbZMbZMbZMcgjcgkcglcgmbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMdsgbZNbZMaahaahcbccgocgpcgTcgrcgscgtcgucgvcqbcgxceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUcgycgzcgAccwcgBccwccwcgCccwcgDbZUcgEcgFcgEcgGcgHcgIcgJbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcgKcgLceicgMcgNcgOceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZycgPcgQcgRcgSchucgUcbOcgVcgWcgXcgYcgZchacgWcgWchbcgWchcchdchechfcgWchgcbOcgUchuchhcfScfUcfTcevcfVcfZcizchjciAcizciBciIciDcFdcFdciXcQGdDAcQGdDzcQGchncQGcQGahyahybJechwchxbbQbbRchychzchzchzchAchzaoBchBchzchzchzchzchCchDchEchFchGchHchGchGchGchGchGchGchGchGchGchIchJchJchJchJchJchJchJchJchJchJchJchJchJchKbZMaahaahcbccgocgpciscgucgucgucgucgucgucguchMchNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidaoCcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOclXcmYcipcnbcnacnQcitcoucoccoTcozcpQcpbciGcpScqAcbOcbOcbOcbOchocfQchpciFcrQcrQcsLcrScrSchqcrUcrQcsLcrScrSchqcQGcQGcQGcQGcQGcQGcQGahyahyahybrGciJciKciLciKciMciNciNciOciNciNaoEciPciNciNciNciOciQciRciSbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVdsRbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAdtjciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXdxLdxdcjvaoGcjvdycapdbZXbZXbZXbZXbZXbZXbZXbZXbZXdyxcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhchrchtchsciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMapuapAapvceMceMceNcaNcaNcaNcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXdxLdxdcjvaoGcjvdqaapdbZXbZXbZXbZXbZXbZXbZXbZXbZXdyxcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhchrchtchsciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMapuapAapvceMceMceNcaNcaNcaNcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYapCcjTchYcjUchYcjVcjWcjXcjqaahaahamYamYamYamYapFamYamYamYamYaahaahaahaahaahaahaahbZXbZXcjudyQbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyapGapAapGahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxapHckzchYckAchYckBckCckDcjqaahaahamYaqwapIdfCapQapSanCaqwamYaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbocFUcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRcJfciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahOahOahOapXahOahOahOaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahamYdfDaoDaoDaqlaqnaqmaucamYaahaahaahaahaahaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclCclCclEclFcfRcfRcfRcKgclGcKhclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclIclQclIclIclIclIclIclRclIclSclIclTclIclQclIclKclIclUclUclVclWcrJcmpahyahOaqoaieaqsaqpaqtahOaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10103,7 +10103,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcWQcBgcBgcBgaZRdalcURcQIcXdcUScZwcZhdazcZMcJLcJzcsNabTdcadbYacuacuacuacuacwabTaahaahcAiaGxaHMaGxcAicBmcDydHfcAiczpcBpcAocDDcDCcBscAoaJaaHOaJacAoaKbaJIaKbcAscBtcDMdHgcAscBwcBvcAycFkcBycBzcAyaKnaKpaKncAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacymcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWdCZcBgcBgahyahycBgdgZddqdhfddqdiadhSdlCdkBdmtdlJdBQdnjdbhaZRcJLcJzdBUcsXacudBVacuacuacuacuacwabTaahaahcAiaKqaKFaHMcAicAicFlcAicAicCdcvAcAocFmcCecAocAoaHOaKGaKHcAoaLuaLtaJIcAscAscFncAscAscvHcFycAycAycCncAycAyaKpaLxaLvcAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcFBcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcBQcCEcCDcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcLucCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcBScBgcDjcDkcDlcDmcBgcBgcBgcBgcHqdCsdCsdCsaZRdbAddedcNdqVdgsdCtdBRdCuaZRdDlcJzctccwzdDmdBVacudDnatTadKabTabTaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcBQcCEcCDcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtdDOddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQedDpdDocGxdDoaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRdDqcJzciHaflaflafmaflaflaflaflabTaahaahaahcAicFfdEScyycFicFjcIjcIJcAicyccydcAocIPcIKcFocFpcFhdEUcFscAocFtdEVcFqcFwcFxcILcIRcAscyscAxcKacJRcIQcFCcFDcFvdEWcFGcAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcBQcCEcCDcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtdDOdyccEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQedDpdDocGxdDoaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRdDqcJzciHaflaflafmaflaflaflaflabTaahaahaahcAicFfdEScyycFicFjcIjcIJcAicyccydcAocIPcIKcFocFpcFhdEUcFscAocFtdEVcFqcFwcFxcILcIRcAscyscAxcKacJRcIQcFCcFDcFvdEWcFGcAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcMscMocMPcxraahaahcBIcCFcCEcCDcBIcFWcGpcFYcFZcwdcGacGbcGccCKdDScGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcHqdDocGxcGxdDsdDrdDrdCxdCPdCJdDBdDgdDFdDCcJLcJzdDCafldDGafBaueafDdDIaflaahaahaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcIdcIecxrcxraahaahcBIcFgcGPcFFcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcBgcOTdDadDXdDJdDJdDJdEGdEDdDBdEHdEMdEIdETdERcsNaflauddFcdFdaflaflaflaahaahaahaahaahaahaahaahcHycHzcKTazzcHycHCcHDcHEazAcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgazBcHIcHMcLhcHOazCcHQcJtcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahcJecJecJgcNHcJgcJgaahaahaahcBIcBQcIfcGOcBIcIhcIicKkcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcBgcBgdDsdFfdDJdDJdFhdFgdFjdFidFldFkdFvdFpdFwaflauddFxaggaghdFyaflaahaahaahaahcHycHycHycHycHycIIcMpdHhcHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrdHicHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm
index 39e0f57dab..5e136191bd 100644
--- a/maps/polaris-2.dmm
+++ b/maps/polaris-2.dmm
@@ -1053,7 +1053,7 @@
"aum" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aun" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"auo" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"aup" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"aup" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"auq" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aur" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"aus" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
@@ -1326,7 +1326,7 @@
"azz" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"azA" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"azB" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"azC" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"azC" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"azD" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (WEST)"; icon_state = "propulsion_r"; dir = 8},/turf/space,/area/shuttle/administration/centcom)
"azE" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
"azF" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm
index 0dd5ec0d48..fb40e22545 100644
--- a/maps/polaris-3.dmm
+++ b/maps/polaris-3.dmm
@@ -82,7 +82,7 @@
"bD" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bE" = (/obj/structure/cable,/obj/structure/frame/computer,/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bF" = (/obj/structure/cable,/obj/structure/frame/computer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
-"bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
+"bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/tank/emergency/oxygen,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bH" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bJ" = (/obj/machinery/power/apc{dir = 8; name = "west bump-derelict"; operating = 0; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
diff --git a/polaris.dme b/polaris.dme
index db14ac1bd1..e820a81230 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1263,6 +1263,7 @@
#include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm"
#include "code\modules\clothing\under\xenos\seromi.dm"
+#include "code\modules\clothing\under\xenos\vox.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\detectivework\footprints.dm"
#include "code\modules\detectivework\forensics.dm"
@@ -1569,6 +1570,7 @@
#include "code\modules\mob\living\carbon\human\species\species_hud.dm"
#include "code\modules\mob\living\carbon\human\species\species_shapeshift.dm"
#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm"
#include "code\modules\mob\living\carbon\human\species\station\golem.dm"
#include "code\modules\mob\living\carbon\human\species\station\monkey.dm"
#include "code\modules\mob\living\carbon\human\species\station\prometheans.dm"
@@ -1741,6 +1743,7 @@
#include "code\modules\organs\subtypes\seromi.dm"
#include "code\modules\organs\subtypes\standard.dm"
#include "code\modules\organs\subtypes\unbreakable.dm"
+#include "code\modules\organs\subtypes\vox.dm"
#include "code\modules\overmap\_defines.dm"
#include "code\modules\overmap\sectors.dm"
#include "code\modules\overmap\ships\ship.dm"