From 442ad835bc073ad9c1bfc092487174eb2d6b7ca0 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Fri, 3 Apr 2026 09:06:38 -0500 Subject: [PATCH] Reverts inertia based space movement (#95536) ## About The Pull Request Reverts space movement being affected by inertia What is kept: - Items have a varying force on your drift speed, ie heavier items will move you faster through space, and smaller items, slower. - Jetpacks can have varying force of impulse - the effect is applied directly to the mob's `inertia_move_multiplier` - Tethers are unreverted - they still stop you from drifting too far from the tether point, however you can no longer 'swing' with them. What is removed: - Multiple impulses in the same angle/direction no longer speeds you up. Only the fastest impulse in 1 direction is accounted for. - An impulse in a different angle/direction will completely override any existing impulses, even if they are faster. - Jetpack stabilizers are once again perfectly capable of immediately stopping any active impulses. TL;DR If you point yourself in a direction you will now go that direction ## Why It's Good For The Game The concept was fun and had potential but the fight between impulses vs tiles was very, very clunky and janky. Multiple fixes were attempted to reduce the jank but it ultimately nograv still acts very cumbersome and jetpacks are still very unappealing to use. Smartkar gave the go-ahead to revert this a while back so, o7. ## Changelog :cl: Melbert del: Zero-gravity drifting is no longer affected by inertia, ie it has been reverted to what it once was. /:cl: --- .../signals/signals_mob/signals_mob_main.dm | 2 - code/__DEFINES/movement.dm | 4 - code/datums/components/jetpack.dm | 146 +++++++----------- code/datums/components/tether.dm | 7 - code/datums/drift_handler.dm | 103 ++++-------- code/game/atoms_movable.dm | 11 +- code/game/objects/items/tanks/jetpack.dm | 5 - .../basic/lavaland/raptor/raptor_color.dm | 3 - code/modules/mob/mob_movement.dm | 4 - code/modules/mod/modules/modules_general.dm | 4 - .../organs/external/wings/functional_wings.dm | 4 - .../organs/external/wings/moth_wings.dm | 2 - .../internal/cyberimp/augments_chest.dm | 1 - 13 files changed, 91 insertions(+), 205 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 33b09d02b64..c26c80a652f 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -51,8 +51,6 @@ #define MOVE_ARG_NEW_LOC 1 /// The argument of move_args which dictates our movement direction #define MOVE_ARG_DIRECTION 2 -/// From base of /client/Move(): (new_loc, direction) -#define COMSIG_MOB_CLIENT_MOVE_NOGRAV "mob_client_move_nograv" /// From base of /client/Move(): (direction, old_dir) #define COMSIG_MOB_CLIENT_MOVED "mob_client_moved" /// From base of /client/proc/change_view() (mob/source, new_size) diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm index 57b7825bcc9..8004bf2b692 100644 --- a/code/__DEFINES/movement.dm +++ b/code/__DEFINES/movement.dm @@ -157,9 +157,5 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0) #define DEFAULT_INERTIA_SPEED 5 /// Maximum inertia that an object can hold. Used to prevent objects from getting to stupid speeds. #define INERTIA_FORCE_CAP 25 NEWTONS -/// How much inertia is deducted when a mob has newtonian spacemove capabilities and is not moving in the same direction -#define INERTIA_FORCE_SPACEMOVE_REDUCTION 0.75 NEWTONS -/// How much inertia we must have to not be able to instantly stop after having something to grab -#define INERTIA_FORCE_SPACEMOVE_GRAB 1.5 NEWTONS // Results in maximum speed of 1 tile per tick, capped at about 2/3rds of maximum force #define INERTIA_SPEED_COEF 0.375 diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm index 65b3a9e1376..c49c7d12154 100644 --- a/code/datums/components/jetpack.dm +++ b/code/datums/components/jetpack.dm @@ -21,27 +21,29 @@ var/effect_type /// Drift force applied each movement tick var/drift_force - /// Force that applied when stabiliziation is active and the player isn't moving in the same direction as the jetpack - var/stabilization_force - /// Our current user - var/mob/user - /// Last tick on which we triggered, to prevent double-dipping - var/last_force_tick - /// Last tick on which we stabilized - var/last_stabilization_tick + + VAR_PRIVATE/active = FALSE /** * Arguments: * * stabilize - If we should drift when we finish moving, or sit stable in space] - * * drift_force - How much force is applied whenever the user tries to move - * * stabilization_force - How much force is applied per tick when we try to stabilize the user + * * drift_force - How much force is applied whenever the user tries to move, applied as a multiplier to the user's inertia_move_multiplier. * * activation_signal - Signal we activate on * * deactivation_signal - Signal we deactivate on * * return_flag - Flag to return if activation fails * * check_on_move - Callback we call each time we attempt a move, we expect it to retun true if the move is ok, false otherwise. It expects an arg, TRUE if fuel should be consumed, FALSE othewise * * effect_type - Type of trail_follow to spawn */ -/datum/component/jetpack/Initialize(stabilize, drift_force = 1 NEWTONS, stabilization_force = 1 NEWTONS, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/callback/check_on_activation, datum/effect_system/trail_follow/effect_type) +/datum/component/jetpack/Initialize( + stabilize = FALSE, + drift_force = 1 NEWTONS, + activation_signal, + deactivation_signal, + return_flag, + datum/callback/check_on_move, + datum/callback/check_on_activation, + datum/effect_system/trail_follow/effect_type, +) . = ..() if(!isatom(parent)) return COMPONENT_INCOMPATIBLE @@ -60,9 +62,8 @@ src.return_flag = return_flag src.effect_type = effect_type src.drift_force = drift_force - src.stabilization_force = stabilization_force -/datum/component/jetpack/InheritComponent(datum/component/component, original, stabilize, drift_force = 1 NEWTONS, stabilization_force = 1 NEWTONS, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/callback/check_on_activation, datum/effect_system/trail_follow/effect_type) +/datum/component/jetpack/InheritComponent(datum/component/component, original, stabilize, drift_force = 1 NEWTONS, activation_signal, deactivation_signal, return_flag, datum/callback/check_on_move, datum/callback/check_on_activation, datum/effect_system/trail_follow/effect_type) UnregisterSignal(parent, src.activation_signal) if(src.deactivation_signal) UnregisterSignal(parent, src.deactivation_signal) @@ -78,22 +79,18 @@ src.return_flag = return_flag src.effect_type = effect_type src.drift_force = drift_force - src.stabilization_force = stabilization_force if(trail && trail.effect_type != effect_type) setup_trail(trail.holder) /datum/component/jetpack/Destroy(force) - if(trail) - QDEL_NULL(trail) - user = null + QDEL_NULL(trail) check_on_move = null check_on_activation = null return ..() /datum/component/jetpack/proc/setup_trail(mob/user) - if(trail) - QDEL_NULL(trail) + QDEL_NULL(trail) trail = new effect_type(user) trail.auto_process = FALSE trail.start() @@ -104,34 +101,50 @@ if(!isnull(check_on_activation) && !check_on_activation.Invoke()) return return_flag - user = new_user - RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) - RegisterSignal(user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_react)) - RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE_NOGRAV, PROC_REF(on_client_move)) - RegisterSignal(user, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff)) - RegisterSignal(user, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT, PROC_REF(on_input_block)) - last_stabilization_tick = world.time - START_PROCESSING(SSnewtonian_movement, src) + active = TRUE + RegisterSignal(new_user, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) + RegisterSignal(new_user, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_react)) + RegisterSignal(new_user, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, PROC_REF(on_pushoff)) + RegisterSignal(new_user, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT, PROC_REF(on_input_block)) + RegisterSignal(new_user, COMSIG_MOVABLE_SPACEMOVE, PROC_REF(stabilize)) if (effect_type) - setup_trail(user) + setup_trail(new_user) + new_user.inertia_move_multiplier /= drift_force // lower multiplier = faster drifting /datum/component/jetpack/proc/deactivate(datum/source, mob/old_user) SIGNAL_HANDLER - UnregisterSignal(old_user, list(COMSIG_MOVABLE_PRE_MOVE, COMSIG_MOVABLE_MOVED, COMSIG_MOB_CLIENT_MOVE_NOGRAV, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT)) - STOP_PROCESSING(SSnewtonian_movement, src) - user = null + if(!active) + return - if(trail) - QDEL_NULL(trail) + active = FALSE + UnregisterSignal(old_user, list( + COMSIG_MOVABLE_PRE_MOVE, + COMSIG_MOVABLE_MOVED, + COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, + COMSIG_MOVABLE_DRIFT_BLOCK_INPUT, + COMSIG_MOVABLE_SPACEMOVE, + )) + QDEL_NULL(trail) + old_user.inertia_move_multiplier *= drift_force /datum/component/jetpack/proc/move_react(mob/source) SIGNAL_HANDLER if (!should_trigger(source)) return - if(source.client.intended_direction && check_on_move.Invoke(FALSE) && trail) //You use jet when press keys. yes. - trail.generate_effect() + if(source.client.intended_direction && check_on_move.Invoke(TRUE)) //You use jet when press keys. yes. + trail?.generate_effect() + +/datum/component/jetpack/proc/stabilize(mob/source, movement_dir, continuous_move, backup) + SIGNAL_HANDLER + if(!continuous_move && movement_dir) + return COMSIG_MOVABLE_STOP_SPACEMOVE + // Check if we have the fuel to stop this. Do NOT consume any fuel, just check + // This is done because things other then us can use our fuel + if(stabilize && check_on_move.Invoke(FALSE)) + return COMSIG_MOVABLE_STOP_SPACEMOVE + return NONE /datum/component/jetpack/proc/should_trigger(mob/source) if(!source || !source.client)//Don't allow jet self using @@ -148,81 +161,32 @@ /datum/component/jetpack/proc/pre_move_react(mob/source) SIGNAL_HANDLER - if(!trail) - return FALSE - trail.oldposition = get_turf(source) - -/datum/component/jetpack/process(seconds_per_tick) - if (last_stabilization_tick == world.time) - return - - last_stabilization_tick = world.time - - if (!should_trigger(user) || !stabilize || !check_on_move.Invoke(FALSE) || isnull(user.drift_handler)) - return - - var/max_drift_force = MOVE_DELAY_TO_DRIFT(user.cached_multiplicative_slowdown) - user.drift_handler.stabilize_drift(user.client.intended_direction ? dir2angle(user.client.intended_direction) : null, user.client.intended_direction ? max_drift_force : 0, stabilization_force * (seconds_per_tick * 1 SECONDS)) + trail?.oldposition = get_turf(source) /datum/component/jetpack/proc/on_input_block(mob/source) SIGNAL_HANDLER if (!should_trigger(source)) - return + return NONE if (!check_on_move.Invoke(TRUE)) - return + return NONE return DRIFT_ALLOW_INPUT -/datum/component/jetpack/proc/on_client_move(mob/source, list/move_args) - SIGNAL_HANDLER - - if (!should_trigger(source)) - return - - if (last_force_tick == world.time) - return - - if (!check_on_move.Invoke(TRUE)) - return - - var/max_drift_force = MOVE_DELAY_TO_DRIFT(source.cached_multiplicative_slowdown) - var/applied_force = drift_force - var/move_dir = source.client.intended_direction - // Try to see if we can simulate pushing off a wall - var/atom/movable/backup = source.get_spacemove_backup(move_dir, FALSE, include_floors = TRUE) - if (backup && !(backup.dir & move_dir)) - applied_force = max_drift_force - - // We don't want to force the loop to fire before stabilizing if we're going to, otherwise its effects will be delayed until the next tick which is jank - var/force_stabilize = FALSE - if (last_stabilization_tick < world.time) - force_stabilize = TRUE - - source.newtonian_move(dir2angle(move_dir), instant = TRUE, drift_force = applied_force, controlled_cap = max_drift_force, force_loop = !force_stabilize) - source.setDir(move_dir) - last_force_tick = world.time - - if (force_stabilize) - // Newphys is an SS_TICKER subsystem and under ideal circumstances should be firing every tick, thus a period of world.tick_lag - // However, since our servers are jank, even SSinput can end up overtiming - which is also an SS_TICKER subsystem that just so - // happens to be what is calling this proc - so we can be assured that this is not above world.tick_lag, or at least should not be - process(world.tick_lag) - /datum/component/jetpack/proc/on_pushoff(mob/source, movement_dir, continuous_move, atom/backup) SIGNAL_HANDLER if (get_dir(source, backup) == movement_dir || source.loc == backup.loc) - return + return NONE if (!source.client?.intended_direction || source.client.intended_direction == get_dir(source, backup)) - return + return NONE if (isnull(source.drift_handler)) - return + return NONE if (!should_trigger(source) || !check_on_move.Invoke(FALSE)) - return + return NONE return COMPONENT_PREVENT_SPACEMOVE_HALT diff --git a/code/datums/components/tether.dm b/code/datums/components/tether.dm index e156640682f..bc0c273b5ed 100644 --- a/code/datums/components/tether.dm +++ b/code/datums/components/tether.dm @@ -124,13 +124,6 @@ to_chat(source, span_warning("[tether_name] catches on [blocker] and prevents you from moving!")) return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - if (get_dist(anchor, new_loc) != cur_dist || !ismovable(source) || force_moving_target) - return - - var/datum/drift_handler/handler = movable_source.drift_handler - if (handler) - handler.remove_angle_force(get_angle(anchor, source)) - /// Try adjust the anchor's position to move closer to the target or regain LOS /// true_source is an optional argument in case we're looking for a LOS/closer turf to a new location rather than the actual owner, and need to ignore them /datum/component/tether/proc/try_adjust_position(atom/movable/anchor, atom/target, atom/true_source) diff --git a/code/datums/drift_handler.dm b/code/datums/drift_handler.dm index 0508123c138..9eef89f7ee5 100644 --- a/code/datums/drift_handler.dm +++ b/code/datums/drift_handler.dm @@ -3,7 +3,6 @@ ///Alongside dealing with the post movement input blocking required to make things look nice /datum/drift_handler var/atom/movable/parent - var/atom/inertia_last_loc var/old_dir var/datum/move_loop/smooth_move/drifting_loop ///Should we ignore the next glide rate input we get? @@ -25,7 +24,14 @@ if(instant) flags |= MOVEMENT_LOOP_START_INSTANT src.drift_force = drift_force - drifting_loop = GLOB.move_manager.smooth_move(moving = parent, angle = inertia_angle, delay = get_loop_delay(parent), subsystem = SSnewtonian_movement, priority = MOVEMENT_SPACE_PRIORITY, flags = flags) + drifting_loop = GLOB.move_manager.smooth_move( + moving = parent, + angle = inertia_angle, + delay = get_loop_delay(parent), + subsystem = SSnewtonian_movement, + priority = MOVEMENT_SPACE_PRIORITY, + flags = flags, + ) if(!drifting_loop) qdel(src) @@ -53,7 +59,6 @@ SSnewtonian_movement.fire_moveloop(drifting_loop) /datum/drift_handler/Destroy() - inertia_last_loc = null if(!QDELETED(drifting_loop)) qdel(drifting_loop) drifting_loop = null @@ -78,25 +83,36 @@ //It's ok if it's not, it's just important if it is. mob_parent.client?.visual_delay = MOVEMENT_ADJUSTED_GLIDE_SIZE(visual_delay, SSnewtonian_movement.visual_delay) -/datum/drift_handler/proc/newtonian_impulse(inertia_angle, start_delay, additional_force, controlled_cap, force_loop = TRUE) - SIGNAL_HANDLER - inertia_last_loc = parent.loc +/** + * An impulse is being applied to this existing drift, react accordingly + * + * * inertia_angle - angle of the new impulse + * * start_delay - if the new impulse has a delay before it starts, this is it + * * additional_force - how much force the new impulse has + * force is not added onto additional force, it will either override it entirely (if larger or a different direction) or be ignored (if smaller and same direction) + * controlled_cap - the maximum amount of force this impulse can apply, regardless of input + * force_loop - should we force the loop to fire immediately to react to this change, or wait for the next visual tick? + * Generally, if the new impulse has a start delay, you should wait, otherwise it'll look really jank + * + * Return FALSE if the loop becomes invalid and should be replaced + * Return TRUE if the loop is still valid and should be kept + */ +/datum/drift_handler/proc/newtonian_impulse(inertia_angle, start_delay, additional_force, controlled_cap = INERTIA_FORCE_CAP, force_loop = TRUE) // We've been told to move in the middle of deletion process, tell parent to create a new handler instead if(!drifting_loop) qdel(src) return FALSE - var/applied_force = additional_force + var/new_force = clamp(additional_force / parent.inertia_force_weight, 0, controlled_cap) + if(new_force < drift_force && drifting_loop.angle == inertia_angle) // If we're already moving faster in this direction, don't change anything + return TRUE - var/force_x = sin(drifting_loop.angle) * drift_force + sin(inertia_angle) * applied_force / parent.inertia_force_weight - var/force_y = cos(drifting_loop.angle) * drift_force + cos(inertia_angle) * applied_force / parent.inertia_force_weight - - drift_force = clamp(sqrt(force_x * force_x + force_y * force_y), 0, !isnull(controlled_cap) ? controlled_cap : INERTIA_FORCE_CAP) + drift_force = new_force if(drift_force < 0.1) // Rounding issues qdel(src) return TRUE - drifting_loop.set_angle(delta_to_angle(force_x, force_y)) + drifting_loop.set_angle(inertia_angle) drifting_loop.set_delay(get_loop_delay(parent)) // We have to forcefully fire it here to avoid stuttering in case of server lag if (drifting_loop.timer <= world.time && force_loop) @@ -105,7 +121,6 @@ /datum/drift_handler/proc/drifting_start() SIGNAL_HANDLER - inertia_last_loc = parent.loc RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(handle_move)) // We will use glide size to intuit how long to delay our loop's next move for // This way you can't ride two movements at once while drifting, since that'd be dumb as fuck @@ -137,7 +152,6 @@ glide_to_halt(visual_delay) return - inertia_last_loc = parent.loc ignore_next_glide = TRUE /datum/drift_handler/proc/loop_death(datum/source) @@ -203,63 +217,10 @@ SIGNAL_HANDLER // Some things want to allow movement out of spacedrift, we should let them if(SEND_SIGNAL(parent, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT) & DRIFT_ALLOW_INPUT) - return - if(world.time < block_inputs_until) - return COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE - -/datum/drift_handler/proc/attempt_halt(movement_dir, continuous_move, atom/backup) - if ((backup.density || !backup.CanPass(parent, get_dir(backup, parent))) && (get_dir(parent, backup) == movement_dir || parent.loc == backup.loc)) - return FALSE - - if (drift_force < INERTIA_FORCE_SPACEMOVE_GRAB || isnull(drifting_loop)) - return FALSE - - if (ismob(parent)) - var/mob/source_user = parent - if (!isnull(source_user.client) && source_user.client.intended_direction) - if ((source_user.client.intended_direction & movement_dir) && !(get_dir(source_user, backup) & movement_dir)) - return FALSE - - if (drift_force <= INERTIA_FORCE_SPACEMOVE_REDUCTION / parent.inertia_force_weight) - glide_to_halt(get_loop_delay(parent)) - return TRUE - - drift_force -= INERTIA_FORCE_SPACEMOVE_REDUCTION / parent.inertia_force_weight - drifting_loop.set_delay(get_loop_delay(parent)) - return TRUE + return NONE + if(world.time >= block_inputs_until) + return NONE + return COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE /datum/drift_handler/proc/get_loop_delay(atom/movable/movable) return (DEFAULT_INERTIA_SPEED / ((1 - INERTIA_SPEED_COEF) + drift_force * INERTIA_SPEED_COEF)) * movable.inertia_move_multiplier - -/datum/drift_handler/proc/stabilize_drift(target_angle, target_force, stabilization_force) - /// We aren't drifting - if (isnull(drifting_loop)) - return - - /// Lack of angle means that we are trying to halt movement - if (isnull(target_angle)) - // Going through newtonian_move ensures that all Process_Spacemove code runs properly, instead of directly adjusting forces - parent.newtonian_move(REVERSE_ANGLE(drifting_loop.angle), drift_force = min(drift_force, stabilization_force)) - return - - // Force required to be applied in order to get to the desired movement vector, with projection of current movement onto desired vector to ensure that we only compensate for excess - var/drift_projection = max(0, cos(target_angle - drifting_loop.angle)) * drift_force - var/force_x = sin(target_angle) * target_force - sin(drifting_loop.angle) * drift_force - var/force_y = cos(target_angle) * target_force - cos(drifting_loop.angle) * drift_force - var/force_angle = delta_to_angle(force_x, force_y) - var/applied_force = sqrt(force_x * force_x + force_y * force_y) - var/force_projection = max(0, cos(target_angle - force_angle)) * applied_force - force_x -= min(force_projection, drift_projection) * sin(target_angle) - force_x -= min(force_projection, drift_projection) * cos(target_angle) - applied_force = min(sqrt(force_x * force_x + force_y * force_y), stabilization_force) - parent.newtonian_move(force_angle, instant = TRUE, drift_force = applied_force) - -/// Removes all force in a certain direction -/datum/drift_handler/proc/remove_angle_force(target_angle) - /// We aren't drifting - if (isnull(drifting_loop)) - return - - var/projected_force = max(0, cos(target_angle - drifting_loop.angle)) * drift_force - if (projected_force > 0) - parent.newtonian_move(REVERSE_ANGLE(target_angle), projected_force) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 509cbfa2d31..874575bb765 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1290,15 +1290,12 @@ if(!isturf(loc) || Process_Spacemove(angle2dir(inertia_angle), continuous_move = TRUE)) return FALSE - if (!isnull(drift_handler)) - if (drift_handler.newtonian_impulse(inertia_angle, start_delay, drift_force, controlled_cap, force_loop)) - return TRUE + if (drift_handler?.newtonian_impulse(inertia_angle, start_delay, drift_force, controlled_cap, force_loop)) + return TRUE new /datum/drift_handler(src, inertia_angle, instant, start_delay, drift_force) - // Something went wrong and it failed to create itself, most likely we have a higher priority loop already - if (QDELETED(drift_handler)) - return FALSE - return TRUE + // Qdeleted = failed to create itself = most likely we have a higher priority loop already + return !QDELETED(drift_handler) /atom/movable/set_explosion_block(explosion_block) var/old_block = src.explosion_block diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index ad6c52709ba..3a665d903a6 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -22,8 +22,6 @@ var/thrust_callback /// How much force out jetpack can output per tick var/drift_force = 1.5 NEWTONS - /// How much force this jetpack can output per tick to stabilize the user - var/stabilizer_force = 1.2 NEWTONS /obj/item/tank/jetpack/Initialize(mapload) . = ..() @@ -48,7 +46,6 @@ /datum/component/jetpack, \ src.stabilize, \ drift_force, \ - stabilizer_force, \ COMSIG_JETPACK_ACTIVATED, \ COMSIG_JETPACK_DEACTIVATED, \ JETPACK_ACTIVATION_FAILED, \ @@ -188,7 +185,6 @@ gas_type = null //it starts empty full_speed = FALSE drift_force = 1 NEWTONS - stabilizer_force = 0.5 NEWTONS custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 4.4, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3) /obj/item/tank/jetpack/improvised/allow_thrust(num) @@ -227,7 +223,6 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy. slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_SUITSTORE drift_force = 2 NEWTONS - stabilizer_force = 2 NEWTONS /obj/item/tank/jetpack/security name = "security jetpack (oxygen)" diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm index c010da01b90..bc6782895c2 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_color.dm @@ -165,8 +165,6 @@ GLOBAL_LIST_INIT(raptor_colors, init_raptor_colors()) var/mutable_appearance/wings_underlay = null /// Our drift force var/drift_force = 2 NEWTONS - /// Our stabilizing force - var/stabilizer_force = 4.5 NEWTONS /obj/item/mob_holder/purple_raptor/Initialize(mapload, mob/living/held_mob, worn_state, head_icon, lh_icon, rh_icon, worn_slot_flags) . = ..() @@ -193,7 +191,6 @@ GLOBAL_LIST_INIT(raptor_colors, init_raptor_colors()) /datum/component/jetpack, \ TRUE, \ drift_force, \ - stabilizer_force, \ COMSIG_RAPTOR_WINGS_OPENED, \ COMSIG_RAPTOR_WINGS_CLOSED, \ null, \ diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f0e07051a14..d916c581f59 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -93,7 +93,6 @@ return loc_atom.relaymove(mob, direct) if(!mob.Process_Spacemove(direct)) - SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_MOVE_NOGRAV, args) return FALSE if(SEND_SIGNAL(mob, COMSIG_MOB_CLIENT_PRE_MOVE, args) & COMSIG_MOB_CLIENT_BLOCK_PRE_MOVE) @@ -283,9 +282,6 @@ if (SEND_SIGNAL(src, COMSIG_MOB_ATTEMPT_HALT_SPACEMOVE, movement_dir, continuous_move, backup) & COMPONENT_PREVENT_SPACEMOVE_HALT) return FALSE - if (drift_handler?.attempt_halt(movement_dir, continuous_move, backup)) - return FALSE - if(continuous_move || !istype(backup) || !movement_dir || backup.anchored) return TRUE diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 6196fd56888..cf88eeffb1f 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -104,8 +104,6 @@ var/thrust_callback /// How much force this module can apply per tick var/drift_force = 1.5 NEWTONS - /// How much force this module's stabilizier can put out - var/stabilizer_force = 1.2 NEWTONS /obj/item/mod/module/jetpack/Initialize(mapload) . = ..() @@ -129,7 +127,6 @@ /datum/component/jetpack, \ src.stabilize, \ drift_force, \ - stabilizer_force, \ COMSIG_MODULE_TRIGGERED, \ COMSIG_MODULE_DEACTIVATED, \ MOD_ABORT_USE, \ @@ -177,7 +174,6 @@ overlay_state_inactive = "module_jetpackadv" overlay_state_active = "module_jetpackadv_on" drift_force = 2 NEWTONS - stabilizer_force = 2 NEWTONS /// Cooldown to use if we didn't actually launch a jump jet #define FAILED_ACTIVATION_COOLDOWN 3 SECONDS diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 6fa0d258e9f..f2dcdf6851a 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -1,5 +1,4 @@ #define FUNCTIONAL_WING_FORCE 2.25 NEWTONS -#define FUNCTIONAL_WING_STABILIZATION 4.5 NEWTONS ///hud action for starting and stopping flight /datum/action/innate/flight @@ -29,7 +28,6 @@ food_reagents = list(/datum/reagent/flightpotion = 5) var/drift_force = FUNCTIONAL_WING_FORCE - var/stabilizer_force = FUNCTIONAL_WING_STABILIZATION /obj/item/organ/wings/functional/Initialize(mapload) . = ..() @@ -37,7 +35,6 @@ /datum/component/jetpack, \ TRUE, \ drift_force, \ - stabilizer_force, \ COMSIG_WINGS_OPENED, \ COMSIG_WINGS_CLOSED, \ null, \ @@ -245,4 +242,3 @@ sprite_accessory_override = /datum/sprite_accessory/wings/slime #undef FUNCTIONAL_WING_FORCE -#undef FUNCTIONAL_WING_STABILIZATION diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index f39c40144e3..4acc944a608 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -16,7 +16,6 @@ var/original_sprite_datum var/drift_force = MOTH_WING_FORCE - var/stabilizer_force = MOTH_WING_FORCE /obj/item/organ/wings/moth/Initialize(mapload) . = ..() @@ -24,7 +23,6 @@ /datum/component/jetpack, \ TRUE, \ drift_force, \ - stabilizer_force, \ COMSIG_ORGAN_IMPLANTED, \ COMSIG_ORGAN_REMOVED, \ null, \ diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm index 910c39c076f..318e89a3a84 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_chest.dm @@ -180,7 +180,6 @@ /datum/component/jetpack, \ FALSE, \ 1.5 NEWTONS, \ - 1.2 NEWTONS, \ COMSIG_THRUSTER_ACTIVATED, \ COMSIG_THRUSTER_DEACTIVATED, \ THRUSTER_ACTIVATION_FAILED, \