diff --git a/baystation12.dme b/baystation12.dme
index 2ff92a6e54f..542f35d8aec 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1442,6 +1442,8 @@
#include "code\WorkInProgress\ZomgPonies\mobs\pony.dm"
#include "code\WorkInProgress\ZomgPonies\mobs\metroid\powers.dm"
#include "code\WorkInProgress\ZomgPonies\oldcode\turntable.dm"
+#include "code\WorkInProgress\ZomgPonies\powerarmor\powerarmor.dm"
+#include "code\WorkInProgress\ZomgPonies\powerarmor\powerarmorcomponents.dm"
#include "code\ZAS\Airflow.dm"
#include "code\ZAS\Connection.dm"
#include "code\ZAS\Debug.dm"
diff --git a/code/WorkInProgress/ZomgPonies/powerarmor/powerarmor.dm b/code/WorkInProgress/ZomgPonies/powerarmor/powerarmor.dm
new file mode 100644
index 00000000000..e0de3cfbe77
--- /dev/null
+++ b/code/WorkInProgress/ZomgPonies/powerarmor/powerarmor.dm
@@ -0,0 +1,283 @@
+/*
+ * File Updated to match /tg/station code standards on the 28/12/2013 (UK/GMT) by RobRichards
+ */
+
+/obj/item/clothing/suit/space/powered
+ name = "Powered armor"
+ desc = "Not for rookies."
+ icon_state = "swat"
+ item_state = "swat"
+ w_class = 4//bulky item
+
+
+ flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ body_parts_covered = UPPER_TORSO|LEGS|FEET|ARMS
+ armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
+ slowdown = 9
+ var/fuel = 0
+
+ var/list/togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
+ var/active = 0
+
+ var/helmrequired = 1
+ var/obj/item/clothing/head/space/powered/helm
+
+ var/glovesrequired = 0
+ var/obj/item/clothing/gloves/powered/gloves
+
+ var/shoesrequired = 0
+ var/obj/item/clothing/shoes/powered/shoes
+ //Adding gloves and shoes as possible armor components. --NEO
+
+ var/obj/item/powerarmor/servos/servos
+ var/obj/item/powerarmor/reactive/reactive
+ var/obj/item/powerarmor/atmoseal/atmoseal
+ var/obj/item/powerarmor/power/power
+
+/obj/item/clothing/suit/space/powered/New()
+ verbs += /obj/item/clothing/suit/space/powered/proc/poweron
+
+/obj/item/clothing/suit/space/powered/proc/poweron()
+ set category = "Object"
+ set name = "Activate armor systems"
+
+ var/mob/living/carbon/human/user = usr
+
+ if(user.stat)
+ return //if you're unconscious or dead, no dicking with your armor. --NEO
+
+ if(!istype(user))
+ user << "This suit was engineered for human use only."
+ return
+
+ if(user.wear_suit!=src)
+ user << "The suit functions best if you are inside of it."
+ return
+
+ if(helmrequired && !istype(user.head, /obj/item/clothing/head/space/powered))
+ user << "Helmet missing, unable to initiate power-on procedure."
+ return
+
+ if(glovesrequired && !istype(user.gloves, /obj/item/clothing/gloves/powered))
+ user << "Gloves missing, unable to initiate power-on procedure."
+ return
+
+ if(shoesrequired && !istype(user.shoes, /obj/item/clothing/shoes/powered))
+ user << "Shoes missing, unable to initiate power-on procedure."
+ return
+
+ if(active)
+ user << "The suit is already on, you can't turn it on twice."
+ return
+
+ if(!power || !power.checkpower())
+ user << "Powersource missing or depleted."
+ return
+
+ verbs -= /obj/item/clothing/suit/space/powered/proc/poweron
+
+ user << "Suit interlocks engaged."
+ if(helmrequired)
+ helm = user.head
+ helm.canremove = 0
+ if(glovesrequired)
+ gloves = user.gloves
+ gloves.canremove = 0
+ if(shoesrequired)
+ shoes = user.shoes
+ shoes.canremove = 0
+ canremove = 0
+ sleep(20)
+
+ if(atmoseal)
+ atmoseal.toggle()
+ sleep(20)
+
+ if(reactive)
+ reactive.toggle()
+ sleep(20)
+
+ if(servos)
+ servos.toggle()
+ sleep(20)
+
+ user << "All systems online."
+ active = 1
+ power.process()
+
+ verbs += /obj/item/clothing/suit/space/powered/proc/poweroff
+
+
+/obj/item/clothing/suit/space/powered/proc/poweroff()
+ set category = "Object"
+ set name = "Deactivate armor systems"
+ powerdown() //BYOND doesn't seem to like it if you try using a proc with vars in it as a verb, hence this. --NEO
+
+/obj/item/clothing/suit/space/powered/proc/powerdown(sudden = 0)
+
+ var/delay = sudden?0:20
+
+ var/mob/living/carbon/human/user = usr
+
+ if(user.stat && !sudden)
+ return //if you're unconscious or dead, no dicking with your armor. --NEO
+
+ if(!active)
+ return
+
+ verbs -= /obj/item/clothing/suit/space/powered/proc/poweroff
+
+ if(sudden)
+ user << "Your armor loses power!"
+
+ if(servos)
+ servos.toggle(sudden)
+ sleep(delay)
+
+ if(reactive)
+ reactive.toggle(sudden)
+ sleep(delay)
+
+ if(atmoseal)
+ if(istype(atmoseal, /obj/item/powerarmor/atmoseal/optional) && helm)
+ var/obj/item/powerarmor/atmoseal/optional/Atmo_seal = atmoseal
+ Atmo_seal.helmtoggle(sudden)
+ atmoseal.toggle(sudden)
+
+ sleep(delay)
+
+ if(!sudden)
+ usr << "Suit interlocks disengaged."
+ if(helm)
+ helm.canremove = 1
+ helm = null
+ if(gloves)
+ gloves.canremove = 1
+ gloves = null
+ if(shoes)
+ shoes.canremove = 1
+ gloves = null
+ canremove = 1
+ //Not a tabbing error, the thing only unlocks if you intentionally power-down the armor. --NEO
+ sleep(delay)
+
+ if(!sudden)
+ usr << "All systems disengaged."
+
+ active = 0
+ verbs += /obj/item/clothing/suit/space/powered/proc/poweron
+
+
+
+/obj/item/clothing/suit/space/powered/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(power && istype(power,/obj/item/powerarmor/power/plasma))
+ var/obj/item/powerarmor/power/plasma/Plasma_power = power
+ switch(W.type)
+ if(/obj/item/stack/sheet/mineral/plasma)
+ var/obj/item/stack/sheet/mineral/plasma/P = W
+ if(fuel < 50)
+ user << "You feed some refined plasma into the armor's generator."
+ Plasma_power.fuel += 25
+ P.amount--
+ if (P.amount <= 0)
+ del(P)
+ return
+ else
+ user << "The generator already has plenty of plasma."
+ return
+
+ if(/obj/item/weapon/ore/plasma) //raw plasma has impurities, so it doesn't provide as much fuel. --NEO
+ if(fuel < 50)
+ user << "You feed some plasma into the armor's generator."
+ Plasma_power.fuel += 15
+ del(W)
+ return
+ else
+ user << "The generator already has plenty of plasma."
+ return
+
+ ..()
+
+/obj/item/clothing/head/space/powered
+ name = "Powered armor"
+ icon_state = "swat"
+ desc = "Not for rookies."
+ flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | BLOCKHAIR
+ item_state = "swat"
+ armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
+ var/obj/item/clothing/suit/space/powered/parent
+
+/obj/item/clothing/head/space/powered/proc/atmotoggle()
+ set category = "Object"
+ set name = "Toggle helmet seals"
+
+ var/mob/living/carbon/human/user = usr
+
+ if(!istype(user))
+ user << "This helmet is engineered for human use."
+ return
+ if(user.head != src)
+ user << "Can't engage the seals without wearing the helmet."
+ return
+
+ if(!user.wear_suit || !istype(user.wear_suit,/obj/item/clothing/suit/space/powered))
+ user << "This helmet can only couple with powered armor."
+ return
+
+ var/obj/item/clothing/suit/space/powered/armor = user.wear_suit
+
+ if(!armor.atmoseal || !istype(armor.atmoseal, /obj/item/powerarmor/atmoseal/optional))
+ user << "This armor's atmospheric seals are missing or incompatible."
+ return
+
+ armor.atmoseal:helmtoggle(0,1)
+
+
+
+/obj/item/clothing/gloves/powered
+ name = "Powered armor"
+ icon_state = "swat"
+ desc = "Not for rookies."
+ flags = FPRINT | TABLEPASS
+ item_state = "swat"
+ armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
+
+/obj/item/clothing/shoes/powered
+ name = "Powered armor"
+ icon_state = "swat"
+ desc = "Not for rookies."
+ flags = FPRINT | TABLEPASS
+ item_state = "swat"
+ armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
+
+
+obj/item/clothing/suit/space/powered/spawnable/badmin/New()
+ servos = new /obj/item/powerarmor/servos(src)
+ servos.parent = src
+ reactive = new /obj/item/powerarmor/reactive(src)
+ reactive.parent = src
+ atmoseal = new /obj/item/powerarmor/atmoseal/optional/adminbus(src)
+ atmoseal.parent = src
+ power = new /obj/item/powerarmor/power(src)
+ power.parent = src
+
+ verbs += /obj/item/clothing/suit/space/powered/proc/poweron
+
+ var/obj/item/clothing/head/space/powered/helm = new /obj/item/clothing/head/space/powered(src.loc)
+ helm.verbs += /obj/item/clothing/head/space/powered/proc/atmotoggle
+
+obj/item/clothing/suit/space/powered/spawnable/regular/New()
+ servos = new /obj/item/powerarmor/servos(src)
+ servos.parent = src
+ reactive = new /obj/item/powerarmor/reactive/Centcom(src)
+ reactive.parent = src
+ atmoseal = new /obj/item/powerarmor/atmoseal/optional/adminbus(src)
+ atmoseal.parent = src
+ power = new /obj/item/powerarmor/power(src)
+ power.parent = src
+
+ verbs += /obj/item/clothing/suit/space/powered/proc/poweron
+
+ var/obj/item/clothing/head/space/powered/helm = new /obj/item/clothing/head/space/powered(src.loc)
+ helm.verbs += /obj/item/clothing/head/space/powered/proc/atmotoggle
diff --git a/code/WorkInProgress/ZomgPonies/powerarmor/powerarmorcomponents.dm b/code/WorkInProgress/ZomgPonies/powerarmor/powerarmorcomponents.dm
new file mode 100644
index 00000000000..132598feb19
--- /dev/null
+++ b/code/WorkInProgress/ZomgPonies/powerarmor/powerarmorcomponents.dm
@@ -0,0 +1,269 @@
+/*
+ * File Updated to match /tg/station code standards on the 28/12/2013 (UK/GMT) by RobRichards
+ */
+
+/obj/item/powerarmor
+ name = "Generic power armor component"
+ desc = "This is the base object, you should never see one."
+ var/obj/item/clothing/suit/space/powered/parent //so the component knows which armor it belongs to.
+ slowdown = 0 //how much the component slows down the wearer
+
+/obj/item/powerarmor/proc/toggle()
+ return
+ //The child objects will use this proc
+
+
+/obj/item/powerarmor/power
+ name = "Adminbus power armor power source"
+ desc = "Runs on the rare Badminium molecule."
+
+/obj/item/powerarmor/process()
+ return
+
+/obj/item/powerarmor/proc/checkpower()
+ return 1
+
+/obj/item/powerarmor/power/plasma
+ name = "Miniaturized plasma generator"
+ desc = "Runs on plasma."
+ slowdown = 1
+ var/fuel = 0
+
+/obj/item/powerarmor/power/plasma/process()
+ if (fuel > 0 && parent.active)
+ fuel--
+ spawn(50)
+ process()
+ return
+ else if (parent.active)
+ parent.powerdown(1)
+ return
+
+/obj/item/powerarmor/power/plasma/checkpower()
+ return fuel
+
+/obj/item/powerarmor/power/powercell
+ name = "Powercell interface"
+ desc = "Boring, but reliable."
+ var/obj/item/weapon/cell/cell
+ slowdown = 0.5
+
+/obj/item/powerarmor/power/powercell/process()
+ if (cell && cell.charge > 0 && parent.active)
+ cell.use(50)
+ spawn(50)
+ process()
+ return
+ else if (parent.active)
+ parent.powerdown(1)
+ return
+
+/obj/item/powerarmor/power/powercell/checkpower()
+ return max(cell.charge, 0)
+
+/obj/item/powerarmor/power/nuclear
+ name = "Miniaturized nuclear generator"
+ desc = "For all your radioactive needs."
+ slowdown = 1.5
+
+/obj/item/powerarmor/power/nuclear/process()
+ if(!crit_fail)
+ if(prob(src.reliability)) return 1 //No failure
+ if(prob(src.reliability))
+ for (var/mob/M in range(0,src.parent)) //Only a minor failure, enjoy your radiation.
+ if(src.parent in M.contents)
+ M << "Your armor feels pleasantly warm for a moment."
+ else
+ M << "You feel a warm sensation."
+ M.radiation += rand(1,40)
+ else
+ for (var/mob/M in range(rand(1,4),src.parent)) //Big failure, TIME FOR RADIATION BITCHES
+ if (src.parent in M.contents)
+ M << "Your armor's reactor overloads!"
+ M << "You feel a wave of heat wash over you."
+ M.radiation += 100
+ crit_fail = 1 //broken~
+ parent.powerdown(1)
+ spawn(50)
+ process()
+
+/obj/item/powerarmor/power/nuclear/checkpower()
+ return !crit_fail
+
+/obj/item/powerarmor/reactive
+ name = "Adminbus power armor reactive plating"
+ desc = "Made with the rare Badminium molecule."
+ var/list/togglearmor = list(melee = 250, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
+ //Good lord an active energy axe does 150 damage a swing? Anyway, barring var editing, this armor loadout should be impervious to anything. Enjoy, badmins~ --NEO
+
+/obj/item/powerarmor/reactive/toggle(sudden = 0)
+ switch(parent.active)
+ if(1)
+ if(!sudden)
+ usr << "Reactive armor systems disengaged."
+ if(0)
+ usr << "Reactive armor systems engaged."
+ var/list/switchover = list()
+ for (var/armorvar in parent.armor)
+ switchover[armorvar] = togglearmor[armorvar]
+ togglearmor[armorvar] = parent.armor[armorvar]
+ parent.armor[armorvar] = switchover[armorvar]
+ //Probably not the most elegant way to have the vars switch over, but it works. Also propagates the values to the other objects.
+ if(parent.helm)
+ parent.helm.armor[armorvar] = parent.armor[armorvar]
+ if(parent.gloves)
+ parent.gloves.armor[armorvar] = parent.armor[armorvar]
+ if(parent.shoes)
+ parent.shoes.armor[armorvar] = parent.armor[armorvar]
+
+/obj/item/powerarmor/reactive/Centcom
+ name = "Centcom power armor reactive plating"
+ desc = "Pretty effective against everything, not perfect though."
+ togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
+ slowdown = 2
+
+
+/obj/item/powerarmor/servos
+ name = "Adminbus power armor movement servos"
+ desc = "Made with the rare Badminium molecule."
+ var/toggleslowdown = 9
+
+/obj/item/powerarmor/servos/toggle(sudden = 0)
+ switch(parent.active)
+ if(1)
+ if(!sudden)
+ usr << "Movement assist servos disengaged."
+ parent.slowdown += toggleslowdown
+ if(0)
+ usr << "Movement assist servos engaged."
+ parent.slowdown -= toggleslowdown
+
+/obj/item/powerarmor/atmoseal
+ name = "Power armor atmospheric seals"
+ desc = "Keeps the bad stuff out."
+ slowdown = 1
+ var/sealed = 0
+
+/obj/item/powerarmor/atmoseal/toggle(sudden = 0)
+ switch(parent.active)
+ if(1)
+ if(!sudden)
+ usr << "Atmospheric seals disengaged."
+ parent.gas_transfer_coefficient = 1
+ parent.permeability_coefficient = 1
+ if(parent.helmrequired)
+ parent.helm.gas_transfer_coefficient = 1
+ parent.helm.permeability_coefficient = 1
+ parent.helm.cold_protection = initial(parent.helm.cold_protection)
+ parent.helm.min_cold_protection_temperature = initial(parent.helm.min_cold_protection_temperature)
+ parent.helm.heat_protection = initial(parent.helm.heat_protection)
+ parent.helm.max_heat_protection_temperature = initial(parent.helm.max_heat_protection_temperature)
+ if(parent.glovesrequired)
+ parent.gloves.gas_transfer_coefficient = 1
+ parent.gloves.permeability_coefficient = 1
+ parent.gloves.cold_protection = initial(parent.gloves.cold_protection)
+ parent.gloves.min_cold_protection_temperature = initial(parent.gloves.min_cold_protection_temperature)
+ parent.gloves.heat_protection = initial(parent.gloves.heat_protection)
+ parent.gloves.max_heat_protection_temperature = initial(parent.gloves.max_heat_protection_temperature)
+ if(parent.shoesrequired)
+ parent.shoes.gas_transfer_coefficient = 1
+ parent.shoes.permeability_coefficient = 1
+ parent.shoes.cold_protection = initial(parent.shoes.cold_protection)
+ parent.shoes.min_cold_protection_temperature = initial(parent.shoes.min_cold_protection_temperature)
+ parent.shoes.heat_protection = initial(parent.shoes.heat_protection)
+ parent.shoes.max_heat_protection_temperature = initial(parent.shoes.max_heat_protection_temperature)
+ sealed = 0
+
+ if(0)
+ usr << "Atmospheric seals engaged."
+ parent.gas_transfer_coefficient = 0.01
+ parent.permeability_coefficient = 0.02
+ if(parent.helmrequired)
+ parent.helm.gas_transfer_coefficient = 0.01
+ parent.helm.permeability_coefficient = 0.02
+ parent.helm.cold_protection = HEAD
+ parent.helm.min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
+ parent.helm.heat_protection = HEAD
+ parent.helm.max_heat_protection_temperature = SPACE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
+ if(parent.glovesrequired)
+ parent.gloves.gas_transfer_coefficient = 0.01
+ parent.gloves.permeability_coefficient = 0.02
+ parent.gloves.cold_protection = HANDS
+ parent.gloves.min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
+ parent.gloves.heat_protection = HANDS
+ parent.gloves.max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
+ if(parent.shoesrequired)
+ parent.shoes.gas_transfer_coefficient = 0.01
+ parent.shoes.permeability_coefficient = 0.02
+ parent.shoes.cold_protection = FEET
+ parent.shoes.min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE
+ parent.shoes.heat_protection = FEET
+ parent.shoes.max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
+ sealed = 1
+
+/obj/item/powerarmor/atmoseal/adminbus
+ name = "Adminbus power armor atmospheric seals"
+ desc = "Made with the rare Badminium molecule."
+ slowdown = 0
+
+/obj/item/powerarmor/atmoseal/optional
+ name = "Togglable power armor atmospheric seals"
+ desc = "Keeps the bad stuff out, but lets you remove your helmet without having to turn the whole suit off."
+
+
+/obj/item/powerarmor/atmoseal/optional/proc/helmtoggle(sudden = 0, manual = 0)
+ var/mob/living/carbon/human/user = usr
+ var/obj/item/clothing/head/space/powered/helm
+ if(user.head && istype(user.head,/obj/item/clothing/head/space/powered))
+ helm = user.head
+
+ if(!sealed)
+ user << "Unable to initialize helmet seal, armor seals not active."
+ return
+ if(!helm.parent)
+ user << "Helmet locked."
+ helm.canremove = 0
+ parent.helm = helm
+ helm.parent = parent
+ sleep(20)
+ parent.helm.gas_transfer_coefficient = 0.01
+ parent.helm.permeability_coefficient = 0.02
+ parent.helm.cold_protection = HEAD
+ parent.helm.min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE
+ parent.helm.heat_protection = HEAD
+ parent.helm.max_heat_protection_temperature = SPACE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE
+
+ user << "Helmet atmospheric seals engaged."
+ if(manual)
+ for (var/armorvar in helm.armor)
+ helm.armor[armorvar] = parent.armor[armorvar]
+ return
+ else
+ if(manual)
+ user << "Helmet atmospheric seals disengaged."
+ parent.helm.gas_transfer_coefficient = 1
+ parent.helm.permeability_coefficient = 1
+ parent.helm.cold_protection = initial(parent.helm.cold_protection)
+ parent.helm.min_cold_protection_temperature = initial(parent.helm.min_cold_protection_temperature)
+ parent.helm.heat_protection = initial(parent.helm.heat_protection)
+ parent.helm.max_heat_protection_temperature = initial(parent.helm.max_heat_protection_temperature)
+ if(manual)
+ for (var/armorvar in helm.armor)
+ helm.armor[armorvar] = parent.reactive.togglearmor[armorvar]
+ if(!sudden)
+ if(manual)
+ sleep(20)
+ user << "Helmet unlocked."
+ helm.canremove = 1
+ parent.helm = null
+ helm.parent = null
+
+
+
+/obj/item/powerarmor/atmoseal/optional/adminbus
+ name = "Adminbus togglable power armor atmospheric seals"
+ desc = "Made with the rare Badminium molecule."
+ slowdown = 0
+
+
+
diff --git a/code/setup.dm b/code/setup.dm
index 89f503e554f..c87479b48a9 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -45,6 +45,7 @@
#define BODYTEMP_COLD_DAMAGE_LIMIT 260.15 // The limit the human body can take before it starts taking damage from coldness.
#define SPACE_HELMET_MIN_COLD_PROTECITON_TEMPERATURE 2.0 //what min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0.
+#define SPACE_HELMET_MAX_HEAT_PROTECITON_TEMPERATURE 5000
#define SPACE_SUIT_MIN_COLD_PROTECITON_TEMPERATURE 2.0 //what min_cold_protection_temperature is set to for space-suit quality jumpsuits or suits. MUST NOT BE 0.
#define SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE 5000 //These need better heat protect
#define FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE 30000 //what max_heat_protection_temperature is set to for firesuit quality headwear. MUST NOT BE 0.