diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index e1d1e96ee6f..76bf8a97fe2 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -35,7 +35,9 @@ var/gas_type = "o2" var/on = 0 var/stabilization_on = 0 + var/datum/effect_system/trail_follow/ion/ion_trail + var/datum/action/item_action/jetpack/cycle/cycle_action var/cycle_action_type = /datum/action/item_action/jetpack/cycle diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 1f79d8c98d9..2eb9fbb2904 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -1,3 +1,30 @@ +/datum/action/item_action/tank/internals + name = "Set Internals" + +/datum/action/item_action/tank/internals/Trigger() + if(!Checks()) + return + + var/mob/living/carbon/human/C = owner + if(!istype(C)) + return + + if(C.internal == target) + C.internal = null + C << "You close \the [target] valve." + C.update_internals_hud_icon(0) + else if(C.wear_mask && (C.wear_mask.flags & MASKINTERNALS)) + C.internal = target + C << "You open \the [target] valve." + C.update_internals_hud_icon(1) + return 1 + +/datum/action/item_action/tank/internals/IsAvailable() + var/mob/living/carbon/C = owner + if(!C.wear_mask || !(C.wear_mask.flags & MASKINTERNALS)) + return + return ..() + /obj/item/weapon/tank name = "tank" icon = 'icons/obj/tank.dmi' @@ -5,7 +32,7 @@ slot_flags = SLOT_BACK hitsound = 'sound/weapons/smash.ogg' - pressure_resistance = ONE_ATMOSPHERE*5 + pressure_resistance = ONE_ATMOSPHERE * 5 force = 5 throwforce = 10 @@ -17,48 +44,39 @@ var/integrity = 3 var/volume = 70 -/obj/item/weapon/tank/suicide_act(mob/user) - var/mob/living/carbon/human/H = user - user.visible_message("[user] is putting the [src]'s valve to their lips! I don't think they're gonna stop!") - playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) - if (H && !qdeleted(H)) - for(var/obj/item/W in H) - H.unEquip(W) - if(prob(50)) - step(W, pick(alldirs)) - H.hair_style = "Bald" - H.update_hair() - H.blood_max = 5 - gibs(H.loc, H.viruses, H.dna) - H.adjustBruteLoss(1000) //to make the body super-bloody - - return (BRUTELOSS) + var/datum/action/item_action/tank/internals/internals_action /obj/item/weapon/tank/New() ..() - src.air_contents = new /datum/gas_mixture() - src.air_contents.volume = volume //liters - src.air_contents.temperature = T20C + air_contents = new(volume) //liters + air_contents.temperature = T20C + + internals_action = new(src) SSobj.processing |= src - return - /obj/item/weapon/tank/Destroy() if(air_contents) qdel(air_contents) - SSobj.processing.Remove(src) - + SSobj.processing -= src return ..() +/obj/item/weapon/tank/pickup(mob/user) + ..() + internals_action.Grant(user) + +/obj/item/weapon/tank/dropped(mob/user) + ..() + internals_action.Remove(user) + /obj/item/weapon/tank/examine(mob/user) var/obj/icon = src ..() if (istype(src.loc, /obj/item/assembly)) icon = src.loc - if (!in_range(src, user)) + if(!in_range(src, user)) if (icon == src) user << "If you want any more information you'll need to get closer." return @@ -93,14 +111,31 @@ qdel(src) +/obj/item/weapon/tank/suicide_act(mob/user) + var/mob/living/carbon/human/H = user + user.visible_message("[user] is putting the [src]'s valve to their lips! I don't think they're gonna stop!") + playsound(loc, 'sound/effects/spray.ogg', 10, 1, -3) + if (H && !qdeleted(H)) + for(var/obj/item/W in H) + H.unEquip(W) + if(prob(50)) + step(W, pick(alldirs)) + H.hair_style = "Bald" + H.update_hair() + H.blood_max = 5 + gibs(H.loc, H.viruses, H.dna) + H.adjustBruteLoss(1000) //to make the body super-bloody + + return (BRUTELOSS) + /obj/item/weapon/tank/attackby(obj/item/weapon/W, mob/user, params) ..() add_fingerprint(user) - if (istype(src.loc, /obj/item/assembly)) + if(istype(src.loc, /obj/item/assembly)) icon = src.loc - if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) + if((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) atmosanalyzer_scan(air_contents, user) if(istype(W, /obj/item/device/assembly_holder)) @@ -113,7 +148,7 @@ ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state) ui.open() -/obj/item/weapon/tank/ui_data() +/obj/item/weapon/tank/ui_data(mob/user) var/list/data = list() data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) @@ -121,21 +156,14 @@ data["minReleasePressure"] = round(TANK_MIN_RELEASE_PRESSURE) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - var/mob/living/carbon/user = null - if(istype(loc, /mob/living/carbon)) - user = loc - else if(istype(loc.loc, /mob/living/carbon)) - user = loc.loc - - data["valveOpen"] = FALSE - data["maskConnected"] = FALSE - if(!istype(user)) + var/mob/living/carbon/C = user + if(!istype(C)) + C = loc.loc + if(!istype(C)) return data - if(user.internal == src) - data["valveOpen"] = TRUE - if(user.wear_mask && (user.wear_mask.flags & MASKINTERNALS) && user.internal == src) - data["maskConnected"] = TRUE + if(C.internal == src) + data["connected"] = TRUE return data @@ -163,24 +191,6 @@ . = TRUE if(.) distribute_pressure = Clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) - if("valve") - var/mob/living/carbon/user = loc - if(!istype(user)) - return - if(user.internal == src) - user.internal = null - user << "You close the tank release valve." - user.update_internals_hud_icon(0) - . = TRUE - else - if(user.wear_mask && (user.wear_mask.flags & MASKINTERNALS)) - user.internal = src - user << "You open \the [src] valve." - user.update_internals_hud_icon(1) - . = TRUE - else - user << "You need something to connect to [src]!" - /obj/item/weapon/tank/remove_air(amount) return air_contents.remove(amount) diff --git a/tgui/src/interfaces/tanks.ract b/tgui/src/interfaces/tanks.ract index 334ebf9a206..e4d08c8441b 100644 --- a/tgui/src/interfaces/tanks.ract +++ b/tgui/src/interfaces/tanks.ract @@ -12,7 +12,7 @@ - The regulator {{data.maskConnected ? "is" : "is not"}} connected to a mask. + The regulator {{data.connected? "is" : "is not"}} connected to a mask. @@ -32,8 +32,4 @@ Max - - {{data.valveOpen ? "Open" : "Closed"}} -