diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm
index e44b22581c8..765274c93f8 100644
--- a/code/game/objects/items/tanks/jetpack.dm
+++ b/code/game/objects/items/tanks/jetpack.dm
@@ -17,6 +17,7 @@
/obj/item/tank/jetpack/Initialize()
. = ..()
ion_trail = new
+ ion_trail.auto_process = FALSE
ion_trail.set_up(src)
/obj/item/tank/jetpack/populate_gas()
@@ -51,10 +52,13 @@
/obj/item/tank/jetpack/proc/turn_on(mob/user)
+ if(!allow_thrust(0.01, user))
+ return
on = TRUE
icon_state = "[initial(icon_state)]-on"
ion_trail.start()
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/move_react)
+ RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, .proc/pre_move_react)
if(full_speed)
user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=-0.5, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
@@ -64,14 +68,29 @@
icon_state = initial(icon_state)
ion_trail.stop()
UnregisterSignal(user, COMSIG_MOVABLE_MOVED)
+ UnregisterSignal(user, COMSIG_MOVABLE_PRE_MOVE)
user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK)
/obj/item/tank/jetpack/proc/move_react(mob/user)
- allow_thrust(0.01, user)
+ if(!on)//If jet dont work, it dont work
+ return
+ if(!user)//Don't allow jet self using
+ return
+ if(!isturf(user.loc))//You can't use jet in nowhere or from mecha/closet
+ return
+ if(!(user.is_flying() || user.is_floating()) || user.buckled)//You don't want use jet in gravity or while buckled.
+ return
+ if(user.pulledby)//You don't must use jet if someone pull you
+ return
+ if(user.throwing)//You don't must use jet if you thrown
+ return
+ if(length(user.client.keys_held & user.client.movement_keys))//You use jet when press keys. yes.
+ allow_thrust(0.01, user)
+
+/obj/item/tank/jetpack/proc/pre_move_react(mob/user)
+ ion_trail.oldposition = get_turf(src)
/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
@@ -83,6 +102,7 @@
var/turf/T = get_turf(user)
T.assume_air(removed)
+ ion_trail.generate_effect()
return TRUE
@@ -122,6 +142,7 @@
var/turf/T = get_turf(user)
T.assume_air(removed)
+ ion_trail.generate_effect()
return TRUE
diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm
index 8bba734b973..a7a683a764e 100644
--- a/code/modules/mob/living/carbon/carbon_movement.dm
+++ b/code/modules/mob/living/carbon/carbon_movement.dm
@@ -1,24 +1,25 @@
/mob/living/carbon/slip(knockdown_amount, obj/O, lube, paralyze, force_drop)
if(movement_type & FLYING)
- return 0
+ return FALSE
if(!(lube&SLIDE_ICE))
log_combat(src, (O ? O : get_turf(src)), "slipped on the", null, ((lube & SLIDE) ? "(LUBE)" : null))
return loc.handle_slip(src, knockdown_amount, O, lube, paralyze, force_drop)
/mob/living/carbon/Process_Spacemove(movement_dir = 0)
- if(..())
- return 1
if(!isturf(loc))
- return 0
+ return FALSE
// Do we have a jetpack implant (and is it on)?
var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot(ORGAN_SLOT_THRUSTERS)
- if(istype(T) && movement_dir && T.allow_thrust(0.01))
- return 1
+ if(istype(T) && movement_dir && T.on)
+ return TRUE
var/obj/item/tank/jetpack/J = get_jetpack()
- if(istype(J) && (movement_dir || J.stabilizers) && J.allow_thrust(0.01, src))
- return 1
+ if(istype(J) && (movement_dir || J.stabilizers) && J.on)
+ return TRUE
+
+ if(..())
+ return TRUE
/mob/living/carbon/Move(NewLoc, direct)
. = ..()
diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm
index 2519a72a2e1..0721824ec29 100644
--- a/code/modules/surgery/organs/augments_chest.dm
+++ b/code/modules/surgery/organs/augments_chest.dm
@@ -132,6 +132,7 @@
. = ..()
if(!ion_trail)
ion_trail = new
+ ion_trail.auto_process = FALSE
ion_trail.set_up(M)
/obj/item/organ/cyberimp/chest/thrusters/Remove(mob/living/carbon/M, special = 0)
@@ -148,16 +149,18 @@
if(!silent)
to_chat(owner, "Your thrusters set seems to be broken!")
return 0
- on = TRUE
if(allow_thrust(0.01))
+ on = TRUE
ion_trail.start()
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/move_react)
+ RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, .proc/pre_move_react)
owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-0.5, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
if(!silent)
to_chat(owner, "You turn your thrusters set on.")
else
ion_trail.stop()
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
+ UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE)
owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
if(!silent)
to_chat(owner, "You turn your thrusters set off.")
@@ -171,26 +174,44 @@
icon_state = "imp_jetpack"
/obj/item/organ/cyberimp/chest/thrusters/proc/move_react()
- allow_thrust(0.01)
+ if(!on)//If jet dont work, it dont work
+ return
+ if(!owner)//Don't allow jet self using
+ return
+ if(!isturf(owner.loc))//You can't use jet in nowhere or in mecha/closet
+ return
+ if(!(owner.is_flying() || owner.is_floating()) || owner.buckled)//You don't want use jet in gravity or while buckled.
+ return
+ if(owner.pulledby)//You don't must use jet if someone pull you
+ return
+ if(owner.throwing)//You don't must use jet if you thrown
+ return
+ if(length(owner.client.keys_held & owner.client.movement_keys))//You use jet when press keys. yes.
+ allow_thrust(0.01)
+
+/obj/item/organ/cyberimp/chest/thrusters/proc/pre_move_react()
+ ion_trail.oldposition = get_turf(owner)
/obj/item/organ/cyberimp/chest/thrusters/proc/allow_thrust(num)
- if(!on || !owner)
- return 0
+ if(!owner)
+ return FALSE
var/turf/T = get_turf(owner)
if(!T) // No more runtimes from being stuck in nullspace.
- return 0
+ return FALSE
// Priority 1: use air from environment.
var/datum/gas_mixture/environment = T.return_air()
if(environment && environment.return_pressure() > 30)
- return 1
+ ion_trail.generate_effect()
+ return TRUE
// Priority 2: use plasma from internal plasma storage.
// (just in case someone would ever use this implant system to make cyber-alien ops with jetpacks and taser arms)
if(owner.getPlasma() >= num*100)
owner.adjustPlasma(-num*100)
- return 1
+ ion_trail.generate_effect()
+ return TRUE
// Priority 3: use internals tank.
var/obj/item/tank/I = owner.internal
@@ -198,9 +219,11 @@
var/datum/gas_mixture/removed = I.air_contents.remove(num)
if(removed.total_moles() > 0.005)
T.assume_air(removed)
- return 1
+ ion_trail.generate_effect()
+ return TRUE
else
T.assume_air(removed)
+ ion_trail.generate_effect()
toggle(silent = TRUE)
- return 0
+ return FALSE