mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
* c++ monstermos
fuck
Fixes the server hemorrhaging memory due to extools not decrementing ref counts
Increases defauilt tank pressure
make space cold or some shit
floor tile rips
Fixes code assuming that the heat capacity is nonzero
🤦
Fixes crash
fixes some bugs
fuck *facepalm*
the fastening
removes Del() in favor of an internal c++ hook
Fixes vent-pump math
* Fix the invisible gases bug
* Linux support
* fix the deploy.sh
* Uses newer BYOND 513 because older one is probably missing an important pattern (it segfaulted on pattern search)
* Updates windows dll to match linux version and cleans up unused BYOND code
254 lines
7.9 KiB
Plaintext
254 lines
7.9 KiB
Plaintext
/obj/item/tank/jetpack
|
|
name = "jetpack (empty)"
|
|
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
|
|
icon_state = "jetpack"
|
|
item_state = "jetpack"
|
|
lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi'
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
distribute_pressure = ONE_ATMOSPHERE * O2STANDARD
|
|
actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
|
|
var/gas_type = /datum/gas/oxygen
|
|
var/on = FALSE
|
|
var/stabilizers = FALSE
|
|
var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not
|
|
var/datum/effect_system/trail_follow/ion/ion_trail
|
|
|
|
/obj/item/tank/jetpack/Initialize()
|
|
. = ..()
|
|
ion_trail = new
|
|
ion_trail.set_up(src)
|
|
|
|
/obj/item/tank/jetpack/populate_gas()
|
|
if(gas_type)
|
|
air_contents.set_moles(gas_type, ((6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C)))
|
|
|
|
/obj/item/tank/jetpack/ui_action_click(mob/user, action)
|
|
if(istype(action, /datum/action/item_action/toggle_jetpack))
|
|
cycle(user)
|
|
else if(istype(action, /datum/action/item_action/jetpack_stabilization))
|
|
if(on)
|
|
stabilizers = !stabilizers
|
|
to_chat(user, "<span class='notice'>You turn the jetpack stabilization [stabilizers ? "on" : "off"].</span>")
|
|
else
|
|
toggle_internals(user)
|
|
|
|
|
|
/obj/item/tank/jetpack/proc/cycle(mob/user)
|
|
if(user.incapacitated())
|
|
return
|
|
|
|
if(!on)
|
|
turn_on(user)
|
|
to_chat(user, "<span class='notice'>You turn the jetpack on.</span>")
|
|
else
|
|
turn_off(user)
|
|
to_chat(user, "<span class='notice'>You turn the jetpack off.</span>")
|
|
for(var/X in actions)
|
|
var/datum/action/A = X
|
|
A.UpdateButtonIcon()
|
|
|
|
|
|
/obj/item/tank/jetpack/proc/turn_on(mob/user)
|
|
on = TRUE
|
|
icon_state = "[initial(icon_state)]-on"
|
|
ion_trail.start()
|
|
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/move_react)
|
|
if(full_speed)
|
|
user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
|
|
|
|
/obj/item/tank/jetpack/proc/turn_off(mob/user)
|
|
on = FALSE
|
|
stabilizers = FALSE
|
|
icon_state = initial(icon_state)
|
|
ion_trail.stop()
|
|
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
|
|
user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK)
|
|
|
|
/obj/item/tank/jetpack/proc/move_react(mob/user)
|
|
allow_thrust(0.01, user)
|
|
|
|
/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user)
|
|
if(!on)
|
|
return
|
|
if((num < 0.005 || air_contents.total_moles() < num))
|
|
turn_off(user)
|
|
return
|
|
|
|
var/datum/gas_mixture/removed = air_contents.remove(num)
|
|
if(removed.total_moles() < 0.005)
|
|
turn_off(user)
|
|
return
|
|
|
|
var/turf/T = get_turf(user)
|
|
T.assume_air(removed)
|
|
|
|
return TRUE
|
|
|
|
/obj/item/tank/jetpack/suicide_act(mob/user)
|
|
if (istype(user, /mob/living/carbon/human/))
|
|
var/mob/living/carbon/human/H = user
|
|
H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?")
|
|
H.visible_message("<span class='suicide'>[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!</span>")
|
|
return (OXYLOSS)
|
|
else
|
|
..()
|
|
|
|
/obj/item/tank/jetpack/improvised
|
|
name = "improvised jetpack"
|
|
desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much."
|
|
icon_state = "jetpack-improvised"
|
|
item_state = "jetpack-sec"
|
|
volume = 20 //normal jetpacks have 70 volume
|
|
gas_type = null //it starts empty
|
|
full_speed = FALSE //moves at hardsuit jetpack speeds
|
|
|
|
/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user)
|
|
if(!on)
|
|
return
|
|
if((num < 0.005 || air_contents.total_moles() < num))
|
|
turn_off(user)
|
|
return
|
|
if(rand(0,250) == 0)
|
|
to_chat(user, "<span class='notice'>You feel your jetpack's engines cut out.</span>")
|
|
turn_off(user)
|
|
return
|
|
|
|
var/datum/gas_mixture/removed = air_contents.remove(num)
|
|
if(removed.total_moles() < 0.005)
|
|
turn_off(user)
|
|
return
|
|
|
|
var/turf/T = get_turf(user)
|
|
T.assume_air(removed)
|
|
|
|
return TRUE
|
|
|
|
/obj/item/tank/jetpack/void
|
|
name = "void jetpack (oxygen)"
|
|
desc = "It works well in a void."
|
|
icon_state = "jetpack-void"
|
|
item_state = "jetpack-void"
|
|
|
|
/obj/item/tank/jetpack/oxygen
|
|
name = "jetpack (oxygen)"
|
|
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
|
|
icon_state = "jetpack"
|
|
item_state = "jetpack"
|
|
|
|
/obj/item/tank/jetpack/oxygen/harness
|
|
name = "jet harness (oxygen)"
|
|
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
|
|
icon_state = "jetpack-mini"
|
|
item_state = "jetpack-mini"
|
|
volume = 40
|
|
throw_range = 7
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
|
|
/obj/item/tank/jetpack/oxygen/captain
|
|
name = "\improper Captain's jetpack"
|
|
desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen."
|
|
icon_state = "jetpack-captain"
|
|
item_state = "jetpack-captain"
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
volume = 90
|
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy.
|
|
|
|
/obj/item/tank/jetpack/oxygen/security
|
|
name = "security jetpack (oxygen)"
|
|
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces."
|
|
icon_state = "jetpack-sec"
|
|
item_state = "jetpack-sec"
|
|
|
|
|
|
|
|
/obj/item/tank/jetpack/carbondioxide
|
|
name = "jetpack (carbon dioxide)"
|
|
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
|
|
icon_state = "jetpack-black"
|
|
item_state = "jetpack-black"
|
|
distribute_pressure = 0
|
|
gas_type = /datum/gas/carbon_dioxide
|
|
|
|
|
|
/obj/item/tank/jetpack/suit
|
|
name = "hardsuit jetpack upgrade"
|
|
desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment."
|
|
icon_state = "jetpack-mining"
|
|
item_state = "jetpack-black"
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization)
|
|
volume = 1
|
|
slot_flags = null
|
|
gas_type = null
|
|
full_speed = FALSE
|
|
var/datum/gas_mixture/temp_air_contents
|
|
var/obj/item/tank/internals/tank = null
|
|
var/mob/living/carbon/human/cur_user
|
|
|
|
/obj/item/tank/jetpack/suit/Initialize()
|
|
. = ..()
|
|
STOP_PROCESSING(SSobj, src)
|
|
temp_air_contents = air_contents
|
|
|
|
/obj/item/tank/jetpack/suit/attack_self()
|
|
return
|
|
|
|
/obj/item/tank/jetpack/suit/cycle(mob/user)
|
|
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit))
|
|
to_chat(user, "<span class='warning'>\The [src] must be connected to a hardsuit!</span>")
|
|
return
|
|
|
|
var/mob/living/carbon/human/H = user
|
|
if(!istype(H.s_store, /obj/item/tank/internals))
|
|
to_chat(user, "<span class='warning'>You need a tank in your suit storage!</span>")
|
|
return
|
|
..()
|
|
|
|
/obj/item/tank/jetpack/suit/turn_on(mob/user)
|
|
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc) || loc.loc != user)
|
|
return
|
|
var/mob/living/carbon/human/H = user
|
|
tank = H.s_store
|
|
air_contents = tank.air_contents
|
|
START_PROCESSING(SSobj, src)
|
|
cur_user = user
|
|
..()
|
|
|
|
/obj/item/tank/jetpack/suit/turn_off(mob/user)
|
|
tank = null
|
|
air_contents = temp_air_contents
|
|
STOP_PROCESSING(SSobj, src)
|
|
cur_user = null
|
|
..()
|
|
|
|
/obj/item/tank/jetpack/suit/process()
|
|
if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc))
|
|
turn_off(cur_user)
|
|
return
|
|
var/mob/living/carbon/human/H = loc.loc
|
|
if(!tank || tank != H.s_store)
|
|
turn_off(cur_user)
|
|
return
|
|
..()
|
|
|
|
|
|
//Return a jetpack that the mob can use
|
|
//Back worn jetpacks, hardsuit internal packs, and so on.
|
|
//Used in Process_Spacemove() and wherever you want to check for/get a jetpack
|
|
|
|
/mob/proc/get_jetpack()
|
|
return
|
|
|
|
/mob/living/carbon/get_jetpack()
|
|
var/obj/item/tank/jetpack/J = back
|
|
if(istype(J))
|
|
return J
|
|
|
|
/mob/living/carbon/human/get_jetpack()
|
|
var/obj/item/tank/jetpack/J = ..()
|
|
if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit))
|
|
var/obj/item/clothing/suit/space/hardsuit/C = wear_suit
|
|
J = C.jetpack
|
|
return J
|