diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 8cad35a743d..e1755317dce 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -44,11 +44,11 @@ STORAGE_TYPE = /obj/item/weapon/tank/jetpack/oxygen /obj/machinery/suit_storage_unit/engine - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine MASK_TYPE = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/ce - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/elite + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/elite MASK_TYPE = /obj/item/clothing/mask/breath STORAGE_TYPE= /obj/item/clothing/shoes/magboots/advance @@ -61,7 +61,7 @@ MASK_TYPE = /obj/item/clothing/mask/gas/sechailer /obj/machinery/suit_storage_unit/atmos - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/atmos + SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/atmos MASK_TYPE = /obj/item/clothing/mask/gas STORAGE_TYPE = /obj/item/weapon/watertank/atmos diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 6bb7562f847..65a043fa5de 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -106,4 +106,62 @@ ..() ion_trail = new /datum/effect/effect/system/ion_trail_follow() ion_trail.set_up(src) - air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) \ No newline at end of file + air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + + +/obj/item/weapon/tank/jetpack/suit + name = "suit inbuilt jetpack" + desc = "A device that will use your internals tank as a gas source for propulsion." + icon_state = "jetpack-void" + item_state = "jetpack-void" + var/obj/item/weapon/tank/internals/tank = null + +/obj/item/weapon/tank/jetpack/suit/New() + ..() + SSobj.processing -= src + air_contents = null + +/obj/item/weapon/tank/jetpack/suit/toggle() + set name = "Toggle Jetpack" + set category = "Object" + + if(istype(loc.loc,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = loc.loc + + if(!H.wear_suit) + H << "You must be wearing the suit to use the inbuilt jetpack." + return + if(!istype(H.s_store,/obj/item/weapon/tank/internals)) + H << "You must have a tank in your suit's storage to use the inbuilt jetpack." + return + if(usr.stat || !usr.canmove || usr.restrained()) + return + + on = !on + if(on) + ion_trail.start() + tank = H.s_store + air_contents = tank.air_contents + SSobj.processing |= src + icon_state = "[icon_state]-on" + else + turn_off() + H << "You toggle the inbuilt jetpack [on? "on":"off"]." + +/obj/item/weapon/tank/jetpack/suit/proc/turn_off() + on = 0 + SSobj.processing -= src + ion_trail.stop() + air_contents = null + tank = null + icon_state = initial(icon_state) + +/obj/item/weapon/tank/jetpack/suit/process() + if(!istype(loc.loc,/mob/living/carbon/human)) + turn_off() + return + var/mob/living/carbon/human/H = loc.loc + if(!tank || tank != H.s_store) + turn_off() + return + ..() \ No newline at end of file diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 59693e1ce0e..c52adc42c2c 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -196,7 +196,7 @@ corpseidaccess = "Station Engineer" /obj/effect/landmark/corpse/engineer/rig - corpsesuit = /obj/item/clothing/suit/space/hardsuit + corpsesuit = /obj/item/clothing/suit/space/hardsuit/engine corpsemask = /obj/item/clothing/mask/breath /obj/effect/landmark/corpse/clown diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 610f50c5642..ab22fb8e773 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -1,6 +1,6 @@ - //Regular (engineering) hardsuits + //Baseline hardsuits /obj/item/clothing/head/helmet/space/hardsuit - name = "engineering hardsuit helmet" + name = "hardsuit helmet" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" @@ -36,7 +36,7 @@ /obj/item/clothing/suit/space/hardsuit - name = "engineering hardsuit" + name = "hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" @@ -46,9 +46,42 @@ var/obj/item/clothing/head/helmet/space/hardsuit/helmet action_button_name = "Toggle Helmet" var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit + var/obj/item/weapon/tank/jetpack/suit/jetpack = null + +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack() + set name = "Toggle Inbuilt Jetpack" + set category = "Object" + jetpack.toggle() + +/obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets() + set name = "Toggle Inbuilt Jetpack Stabilization" + set category = "Object" + jetpack.toggle_rockets() + + //Engineering +/obj/item/clothing/head/helmet/space/hardsuit/engine + name = "engineering hardsuit helmet" + desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." + icon_state = "hardsuit0-engineering" + item_state = "eng_helm" + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) + item_color = "engineering" + +/obj/item/clothing/suit/space/hardsuit/engine + name = "engineering hardsuit" + desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." + icon_state = "hardsuit-engineering" + item_state = "eng_hardsuit" + armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine + + +/obj/item/clothing/suit/space/hardsuit/engine/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() //Atmospherics -/obj/item/clothing/head/helmet/space/hardsuit/atmos +/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos name = "atmospherics hardsuit helmet" desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has thermal shielding." icon_state = "hardsuit0-atmospherics" @@ -58,6 +91,7 @@ heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT +/obj/item/clothing/suit/space/hardsuit/engine/atmos /obj/item/clothing/suit/space/hardsuit/atmos name = "atmospherics hardsuit" @@ -67,11 +101,11 @@ armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 0) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/atmos + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos //Chief Engineer's hardsuit -/obj/item/clothing/head/helmet/space/hardsuit/elite +/obj/item/clothing/head/helmet/space/hardsuit/engine/elite name = "advanced hardsuit helmet" desc = "An advanced helmet designed for work in a hazardous, low pressure environment. Shines with a high polish." icon_state = "hardsuit0-white" @@ -82,7 +116,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT -/obj/item/clothing/suit/space/hardsuit/elite +/obj/item/clothing/suit/space/hardsuit/engine/elite icon_state = "hardsuit-white" name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." @@ -90,7 +124,7 @@ armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/elite + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite //Mining hardsuit @@ -202,6 +236,9 @@ ..() flags ^= NODROP +/obj/item/clothing/suit/space/hardsuit/syndi/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() //The Owl Hardsuit /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index c9567e9c4ed..380e0262597 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -80,6 +80,9 @@ /obj/item/clothing/suit/space/hardsuit/New() MakeHelmet() + if(!jetpack) + verbs -= /obj/item/clothing/suit/space/hardsuit/verb/Jetpack + verbs -= /obj/item/clothing/suit/space/hardsuit/verb/Jetpack_Rockets ..() /obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() @@ -136,4 +139,4 @@ else H << "You disengage the helmet on the hardsuit." playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) - RemoveHelmet() \ No newline at end of file + RemoveHelmet() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 01a14d53a6d..5e914e68242 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -15,6 +15,10 @@ var/obj/item/weapon/tank/jetpack/J = back if((movement_dir || J.stabilization_on) && J.allow_thrust(0.01, src)) return 1 + if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit/engine) && isturf(loc)) //Second check is so you can't use a jetpack in a mech + var/obj/item/clothing/suit/space/hardsuit/engine/C = wear_suit + if((movement_dir || C.jetpack.stabilization_on) && C.jetpack.allow_thrust(0.01, src)) + return 1 return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index c25f6048a27..7ac25373c31 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -660,6 +660,11 @@ var/obj/item/weapon/tank/jetpack/J = H.back if(J.allow_thrust(0.01, H)) hasjetpack = 1 + else if(istype(H.wear_suit,/obj/item/clothing/suit/space/hardsuit/engine)) //copypasta but faster implementation currently + var/obj/item/clothing/suit/space/hardsuit/engine/C = H.wear_suit + if(C.jetpack.allow_thrust(0.01, H)) + hasjetpack = 1 + var/grav = has_gravity(H) if(!grav && !hasjetpack)