mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 07:48:55 +00:00
160 lines
4.9 KiB
Plaintext
160 lines
4.9 KiB
Plaintext
/obj/machinery/portable_atmospherics
|
|
name = "portable_atmospherics"
|
|
icon = 'icons/obj/atmos.dmi'
|
|
use_power = NO_POWER_USE
|
|
max_integrity = 250
|
|
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30)
|
|
anchored = FALSE
|
|
|
|
var/datum/gas_mixture/air_contents
|
|
var/obj/machinery/atmospherics/components/unary/portables_connector/connected_port
|
|
var/obj/item/tank/holding
|
|
|
|
var/volume = 0
|
|
|
|
var/maximum_pressure = 90 * ONE_ATMOSPHERE
|
|
|
|
/obj/machinery/portable_atmospherics/New()
|
|
..()
|
|
SSair.start_processing_machine(src)
|
|
|
|
air_contents = new(volume)
|
|
air_contents.set_temperature(T20C)
|
|
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/Destroy()
|
|
SSair.stop_processing_machine(src)
|
|
disconnect()
|
|
qdel(air_contents)
|
|
air_contents = null
|
|
|
|
return ..()
|
|
|
|
/obj/machinery/portable_atmospherics/process_atmos()
|
|
if(!connected_port) // Pipe network handles reactions if connected.
|
|
air_contents.react(src)
|
|
else
|
|
update_icon()
|
|
|
|
/obj/machinery/portable_atmospherics/return_air()
|
|
return air_contents
|
|
|
|
/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/components/unary/portables_connector/new_port)
|
|
//Make sure not already connected to something else
|
|
if(connected_port || !new_port || new_port.connected_device)
|
|
return FALSE
|
|
|
|
//Make sure are close enough for a valid connection
|
|
if(new_port.loc != get_turf(src))
|
|
return FALSE
|
|
|
|
//Perform the connection
|
|
connected_port = new_port
|
|
connected_port.connected_device = src
|
|
var/datum/pipeline/connected_port_parent = connected_port.parents[1]
|
|
connected_port_parent.reconcile_air()
|
|
|
|
anchored = TRUE //Prevent movement
|
|
pixel_x = new_port.pixel_x
|
|
pixel_y = new_port.pixel_y
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/Move()
|
|
. = ..()
|
|
if(.)
|
|
disconnect()
|
|
|
|
/obj/machinery/portable_atmospherics/proc/disconnect()
|
|
if(!connected_port)
|
|
return FALSE
|
|
anchored = FALSE
|
|
connected_port.connected_device = null
|
|
connected_port = null
|
|
pixel_x = 0
|
|
pixel_y = 0
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/portableConnectorReturnAir()
|
|
return air_contents
|
|
|
|
/obj/machinery/portable_atmospherics/AltClick(mob/living/user)
|
|
. = ..()
|
|
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, !ismonkey(user)))
|
|
return
|
|
if(holding)
|
|
to_chat(user, "<span class='notice'>You remove [holding] from [src].</span>")
|
|
replace_tank(user, TRUE)
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/examine(mob/user)
|
|
. = ..()
|
|
if(holding)
|
|
. += "<span class='notice'>\The [src] contains [holding]. Alt-click [src] to remove it.</span>"
|
|
. += "<span class='notice'>Click [src] with another gas tank to hot swap [holding].</span>"
|
|
|
|
/obj/machinery/portable_atmospherics/proc/replace_tank(mob/living/user, close_valve, obj/item/tank/new_tank)
|
|
if(holding)
|
|
holding.forceMove(drop_location())
|
|
if(Adjacent(user) && !issilicon(user))
|
|
user.put_in_hands(holding)
|
|
if(new_tank)
|
|
holding = new_tank
|
|
else
|
|
holding = null
|
|
update_icon()
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/attackby(obj/item/W, mob/user, params)
|
|
if(istype(W, /obj/item/tank))
|
|
if(!(stat & BROKEN))
|
|
var/obj/item/tank/T = W
|
|
if(!user.transferItemToLoc(T, src))
|
|
return
|
|
to_chat(user, "<span class='notice'>[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [T]" : "You insert [T] into [src]"].</span>")
|
|
replace_tank(user, FALSE, T)
|
|
update_icon()
|
|
else if(W.tool_behaviour == TOOL_WRENCH)
|
|
if(!(stat & BROKEN))
|
|
if(connected_port)
|
|
disconnect()
|
|
W.play_tool_sound(src)
|
|
user.visible_message( \
|
|
"[user] disconnects [src].", \
|
|
"<span class='notice'>You unfasten [src] from the port.</span>", \
|
|
"<span class='italics'>You hear a ratchet.</span>")
|
|
update_icon()
|
|
return
|
|
else
|
|
var/obj/machinery/atmospherics/components/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/components/unary/portables_connector) in loc
|
|
if(!possible_port)
|
|
to_chat(user, "<span class='notice'>Nothing happens.</span>")
|
|
return
|
|
if(!connect(possible_port))
|
|
to_chat(user, "<span class='notice'>[name] failed to connect to the port.</span>")
|
|
return
|
|
W.play_tool_sound(src)
|
|
user.visible_message( \
|
|
"[user] connects [src].", \
|
|
"<span class='notice'>You fasten [src] to the port.</span>", \
|
|
"<span class='italics'>You hear a ratchet.</span>")
|
|
update_icon()
|
|
else
|
|
return ..()
|
|
|
|
/obj/machinery/portable_atmospherics/analyzer_act(mob/living/user, obj/item/I)
|
|
atmosanalyzer_scan(air_contents, user, src)
|
|
return TRUE
|
|
|
|
/obj/machinery/portable_atmospherics/attacked_by(obj/item/I, mob/user, attackchain_flags = NONE, damage_multiplier = 1)
|
|
if(I.force < 10 && !(stat & BROKEN))
|
|
take_damage(0)
|
|
else
|
|
investigate_log("was smacked with \a [I] by [key_name(user)].", INVESTIGATE_ATMOS)
|
|
add_fingerprint(user)
|
|
..()
|
|
|
|
/obj/machinery/portable_atmospherics/attack_ghost(mob/dead/observer/O)
|
|
. = ..()
|
|
atmosanalyzer_scan(air_contents, O, src, FALSE)
|