Chucking my powered armor onto the SVN

It could use a fair amount of refinement and/or additional features yet, but it is functional. It is currently adminbus only, until I get some non-placeholder sprites. Already have some on the way from a pretty decent spriter, but don't let that discourage you, more types of power armor are always welcome.

Current model is fueled by processed plasma ore from the mine. Each unit of plasma provides roughly 2 minutes of power, the tank holds 2 units worth of fuel at a time, and can be refilled while the suit is active. I'll probably include a powercell and self-sustaining version when I add in the code to make this sucker buildable via R&D

While unpowered, the suit slows you waaaaaay down, is not spaceworthy, and is inferior to regular armor. While powered, it is between regular and syndicate spacesuits in speed, can be worn in space, and has much better armor. Also, while powered it cannot be unequipped, much like an initialized ninja suit. The helmet is required for the suit to be able to power up, and if the suit powers down for any reason other than the user initiating the powerdown sequence, the suit does NOT unlock, so you're stuck in a crappy slow metal suit until you can get it powered up to properly power it down.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1658 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
n3ophyt3
2011-06-04 03:26:01 +00:00
parent 8a7e1e95eb
commit 02c951575d

View File

@@ -305,4 +305,184 @@ THERMAL GLASSES
M.disabilities |= 1
spawn(100)
M.disabilities &= ~1
..()
..()
/obj/item/clothing/suit/armor/powered
name = "Powered armor"
desc = "Not for rookies."
icon_state = "swat"
item_state = "swat"
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
heat_transfer_coefficient = 0.02
radiation_protection = 0.25
protective_temperature = 1000
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/weapon/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 9
var/fuel = 0
var/list/togglearmor = list(melee = 90, bullet = 30, laser = 60, taser = 40, bomb = 75, bio = 75, rad = 75)
var/active = 0
var/obj/item/clothing/head/helmet/powered/helm = null
New()
verbs += /obj/item/clothing/suit/armor/powered/proc/poweron
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 << "\red This suit was engineered for human use only."
return
if(user.wear_suit!=src)
user << "\red The suit functions best if you are inside of it."
return
if(!istype(user.head, /obj/item/clothing/head/helmet/powered))
user << "\red Helmet missing, unable to initiate power-on procedure."
return
if(active)
user << "\red The suit is already on, you can't turn it on twice."
return
if(fuel < 1)
user << "\red Insufficient fuel."
return
verbs -= /obj/item/clothing/suit/armor/powered/proc/poweron
user << "\blue Suit interlocks engaged."
helm = user.head
helm.canremove = 0
canremove = 0
sleep(20)
user << "\blue Atmospheric seals engaged."
flags |= SUITSPACE
helm.flags |= HEADSPACE
sleep(20)
user << "\blue Reactive armor systems engaged."
var/list/switchover = list()
for (var/armorvar in togglearmor)
switchover[armorvar] = "[togglearmor[armorvar]]"
togglearmor[armorvar] = "[armor[armorvar]]"
armor[armorvar] = "[switchover[armorvar]]"
helm.armor[armorvar] = armor[armorvar]
sleep(20)
user << "\blue Movement assist servos engaged."
slowdown = 2.5
sleep(20)
user << "\blue All systems online."
active = 1
powered()
verbs += /obj/item/clothing/suit/armor/powered/proc/poweroff
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
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/armor/powered/proc/poweroff
if(sudden)
user << "\red Your armor loses power!"
if(!sudden)
user << "\blue Movement assist servos disengaged."
slowdown = 9
sleep(delay)
if(!sudden)
user << "\blue Reactive armor systems disengaged."
var/list/switchover = list()
for (var/armorvar in armor)
switchover[armorvar] = "[togglearmor[armorvar]]"
togglearmor[armorvar] = "[armor[armorvar]]"
armor[armorvar] = "[switchover[armorvar]]"
helm.armor[armorvar] = armor[armorvar]
sleep(delay)
if(!sudden)
user << "\blue Atmospheric seals disengaged."
flags &= ~SUITSPACE
helm.flags &= ~HEADSPACE
sleep(delay)
if(!sudden)
user << "\blue Suit interlocks disengaged."
helm.canremove = 1
canremove = 1
helm = null
//Not a tabbing error, the thing only unlocks if you intentionally power-down the armor. --NEO
sleep(20)
if(!sudden)
user << "\blue All systems disengaged."
active = 0
verbs += /obj/item/clothing/suit/armor/powered/proc/poweron
proc/powered()
if (fuel > 0 && active)
fuel--
spawn(50)
powered()
return
else if (active)
powerdown(1)
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/stack/sheet/plasma))
if(fuel < 50)
user << "\blue You feed some plasma into the armor's generator."
fuel += 25
W:amount--
if (W:amount <= 0)
del(W)
return
else
user << "\red The generator already has plenty of plasma."
return
else
..()
/obj/item/clothing/head/helmet/powered
name = "Powered armor helmet"
icon_state = "swat"
desc = "Not for rookies."
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0
item_state = "swat"
permeability_coefficient = 0.01
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)