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