Files
vgstation13/code/modules/mob/living/carbon/internals.dm
jknpj 28f30c8748 Rigsuits 3.1 : You can (not) UI (#26767)
* Rigsuits 3.1: No-Mapping Remix

* A corpse... should be left well alone.

* one. fucking. job.

* git

git

* Modkits don't need to mod the helmet, since making a new suit also makes a new helmet

* plasma seal now consumes power over time
2020-06-10 09:22:29 -05:00

85 lines
3.6 KiB
Plaintext

/mob/living/carbon/proc/has_breathing_mask()
return is_wearing_item(/obj/item/clothing/mask, slot_wear_mask)
/mob/living/carbon/proc/internals_candidates() //These are checked IN ORDER.
return get_all_slots() + held_items
/mob/living/carbon/human/internals_candidates() //Humans have a lot of slots, so let's give priority to some of them
var/list/priority = list(s_store, back, belt, l_store, r_store)
if(wear_suit && isrig(wear_suit)) //Don't forget the rigsuit!
var/obj/item/clothing/suit/space/rig/rig = wear_suit
if(rig.T)
priority += rig.T
return priority | get_all_slots() | held_items //| operator ensures there are no duplicates
/mob/living/carbon/proc/get_internals_tank()
for(var/obj/item/weapon/tank/T in internals_candidates())
//We found a tank!
if(istype(T, /obj/item/weapon/tank/jetpack)) //Oh... But it's a jetpack... We'll use it if we have to, but let's see if we find something better first
if(!.) //We already had another jetpack
. = T
continue
else //It's the real deal!
return T
// Set internals on or off.
/mob/living/carbon/proc/toggle_internals(var/mob/living/user, var/obj/item/weapon/tank/T)
if(user.incapacitated())
return
if(internal)
internal.add_fingerprint(user)
internal = null
if(internals) //This is the HUD icon, these variables have WAY too similar names
internals.icon_state = "internal0"
if(user != src)
if(!user.isGoodPickpocket())
visible_message("<span class='warning'>\The [user] shuts off \the [src]'s internals!</span>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has disabled [src.name]'s ([src.ckey]) internals.</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='red'>Internals disabled by [user.name] ([user.ckey]).</font>")
log_attack("[user.name] ([user.ckey]) has disabled [src.name]'s ([src.ckey]) internals.")
else
to_chat(user, "<span class='notice'>No longer running on internals.</span>")
return 1
else
if(!has_breathing_mask())
if(user != src)
to_chat(user, "<span class='warning'>\The [src] is not wearing a breathing mask.</span>")
else
to_chat(user, "<span class='warning'>You are not wearing a breathing mask.</span>")
return
if(!T || !T.Adjacent()) //We can be given a specific tank to connect to
T = get_internals_tank()
if(!T)
var/breathes = OXYGEN
if(ishuman(src))
var/mob/living/carbon/human/H = src
breathes = H.species.breath_type
if(user != src)
to_chat(user, "<span class='warning'>\The [src] does not have \an [breathes] tank.</span>")
else
to_chat(user, "<span class='warning'>You don't have \an [breathes] tank.</span>")
return
internal = T
T.add_fingerprint(user)
if(internals)
internals.icon_state = "internal1"
if(user != src)
var/gas_contents = T.air_contents.english_contents_list()
if(!user.isGoodPickpocket())
to_chat(user, "<span class='notice'>\The [user] has enabled [src]'s internals.</span>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Has enabled [src.name]'s ([src.ckey]) internals (Gas contents: [gas_contents]).</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='red'>Internals enabled by [user.name] ([user.ckey]) (Gas contents: [gas_contents]).</font>")
log_attack("[user.name] ([user.ckey]) has enabled [src.name]'s ([src.ckey]) internals (Gas contents: [gas_contents]).")
else
to_chat(src, "<span class='notice'>You are now running on internals from \the [T].</span>")
return 1
/mob/living/carbon/proc/update_internals()
var/new_icon_state
if(internal)
new_icon_state = "internal1"
else
new_icon_state = "internal0"
if(internals)
internals.icon_state = new_icon_state