diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index 78b81163147..3727965160f 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -1,3 +1,21 @@
+/mob/dead/observer/DblClickOn(atom/A, params)
+ if(client.buildmode)
+ build_click(src, client.buildmode, params, A)
+ return
+ if(can_reenter_corpse && mind && mind.current)
+ if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it
+ reenter_corpse() // (cloning scanner, body bag, closet, mech, etc)
+ return
+
+ // Things you might plausibly want to follow
+ if(ismovableatom(A))
+ ManualFollow(A)
+
+ // Otherwise jump
+ else if(A.loc)
+ forceMove(get_turf(A))
+// update_parallax_contents()
+
/client/var/inquisitive_ghost = 1
/mob/observer/dead/verb/toggle_inquisition() // warning: unexpected inquisition
set name = "Toggle Inquisitiveness"
@@ -10,23 +28,6 @@
else
to_chat(src, "You will no longer examine things you click on.")
-/mob/observer/dead/DblClickOn(var/atom/A, var/params)
- if(client.buildmode)
- build_click(src, client.buildmode, params, A)
- return
- if(can_reenter_corpse && mind && mind.current)
- if(A == mind.current || (mind.current in A)) // double click your corpse or whatever holds it
- reenter_corpse() // (cloning scanner, body bag, closet, mech, etc)
- return
-
- // Things you might plausibly want to follow
- if(istype(A,/atom/movable))
- ManualFollow(A)
- // Otherwise jump
- else
- following = null
- forceMove(get_turf(A))
-
/mob/observer/dead/ClickOn(var/atom/A, var/params)
if(client.buildmode)
build_click(src, client.buildmode, params, A)
diff --git a/code/controllers/subsystems/orbits.dm b/code/controllers/subsystems/orbits.dm
deleted file mode 100644
index 5cda1ce9dc4..00000000000
--- a/code/controllers/subsystems/orbits.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-SUBSYSTEM_DEF(orbit)
- name = "Orbits"
- priority = FIRE_PRIORITY_ORBIT
- wait = 2
- flags = SS_NO_INIT|SS_TICKER
-
- var/list/currentrun = list()
- var/list/processing = list()
-
-/datum/controller/subsystem/orbit/stat_entry()
- ..("P:[processing.len]")
-
-
-/datum/controller/subsystem/orbit/fire(resumed = 0)
- if (!resumed)
- src.currentrun = processing.Copy()
-
- //cache for sanic speed (lists are references anyways)
- var/list/currentrun = src.currentrun
-
- while (currentrun.len)
- var/datum/orbit/O = currentrun[currentrun.len]
- currentrun.len--
- if (!O)
- processing -= O
- if (MC_TICK_CHECK)
- return
- continue
- if (!O.orbiter)
- qdel(O)
- if (MC_TICK_CHECK)
- return
- continue
- if (O.lastprocess >= world.time) //we already checked recently
- if (MC_TICK_CHECK)
- return
- continue
- var/targetloc = get_turf(O.orbiting)
- if (targetloc != O.lastloc || O.orbiter.loc != targetloc)
- O.Check(targetloc)
- if (MC_TICK_CHECK)
- return
-
-
diff --git a/code/controllers/subsystems/spacedrift.dm b/code/controllers/subsystems/spacedrift.dm
index 630ffc7e8c4..6c5d096bf23 100644
--- a/code/controllers/subsystems/spacedrift.dm
+++ b/code/controllers/subsystems/spacedrift.dm
@@ -33,7 +33,7 @@ SUBSYSTEM_DEF(spacedrift)
return
continue
- if (!AM.loc || AM.loc != AM.inertia_last_loc || AM.Process_Spacemove(0))
+ if (!AM.loc || AM.loc != AM.inertia_last_loc || AM.Process_Spacemove(NONE))
AM.inertia_dir = 0
if (!AM.inertia_dir)
diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm
index efa0fd14d55..33293dc8788 100644
--- a/code/datums/components/orbiter.dm
+++ b/code/datums/components/orbiter.dm
@@ -8,7 +8,7 @@
//rotation_speed: how fast to rotate (how many ds should it take for a rotation to complete)
//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
-/datum/component/orbiter/Initialize(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
+/datum/component/orbiter/Initialize(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation, actually_orbit = TRUE)
if(!istype(orbiter) || !isatom(parent) || isarea(parent))
return COMPONENT_INCOMPATIBLE
@@ -17,7 +17,7 @@
var/atom/master = parent
master.orbiters = src
- begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
+ begin_orbit(orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation, actually_orbit)
/datum/component/orbiter/RegisterWithParent()
var/atom/target = parent
@@ -51,7 +51,7 @@
return COMPONENT_INCOMPATIBLE
move_react()
-/datum/component/orbiter/proc/begin_orbit(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
+/datum/component/orbiter/proc/begin_orbit(atom/movable/orbiter, radius, clockwise, rotation_speed, rotation_segments, pre_rotation, actually_orbit = TRUE)
if(orbiter.orbiting)
if(orbiter.orbiting == src)
orbiter.orbiting.end_orbit(orbiter, TRUE)
@@ -59,26 +59,28 @@
orbiter.orbiting.end_orbit(orbiter)
orbiters[orbiter] = TRUE
orbiter.orbiting = src
+ orbiter.start_orbit(src)
RegisterSignal(orbiter, COMSIG_MOVABLE_MOVED, .proc/orbiter_move_react)
- var/matrix/initial_transform = matrix(orbiter.transform)
+ if(actually_orbit)
+ var/matrix/initial_transform = matrix(orbiter.transform)
- // Head first!
- if(pre_rotation)
- var/matrix/M = matrix(orbiter.transform)
- var/pre_rot = 90
- if(!clockwise)
- pre_rot = -90
- M.Turn(pre_rot)
- orbiter.transform = M
+ // Head first!
+ if(pre_rotation)
+ var/matrix/M = matrix(orbiter.transform)
+ var/pre_rot = 90
+ if(!clockwise)
+ pre_rot = -90
+ M.Turn(pre_rot)
+ orbiter.transform = M
- var/matrix/shift = matrix(orbiter.transform)
- shift.Translate(0, radius)
- orbiter.transform = shift
+ var/matrix/shift = matrix(orbiter.transform)
+ shift.Translate(0, radius)
+ orbiter.transform = shift
- orbiter.SpinAnimation(rotation_speed, -1, clockwise, rotation_segments, parallel = FALSE)
+ orbiter.SpinAnimation(rotation_speed, -1, clockwise, rotation_segments, parallel = FALSE)
- //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
- orbiter.transform = initial_transform
+ //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
+ orbiter.transform = initial_transform
orbiter.forceMove(get_turf(parent))
to_chat(orbiter, "Now orbiting [parent].")
@@ -128,22 +130,29 @@
// We moved again during the checktick, cancel current operation
break
-
/datum/component/orbiter/proc/orbiter_move_react(atom/movable/orbiter, atom/oldloc, direction)
if(orbiter.loc == get_turf(parent))
return
end_orbit(orbiter)
/////////////////////
+/atom
+ /// The orbiter component of the thing we're orbiting.
+ var/datum/component/orbiter/orbiting
+ /// The orbiter comopnent if we're being orbited.
+ var/datum/component/orbiter/orbiters
-/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE)
+/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, actually_orbit = TRUE)
if(!istype(A) || !get_turf(A) || A == src)
return
- return A.AddComponent(/datum/component/orbiter, src, radius, clockwise, rotation_speed, rotation_segments, pre_rotation)
+ return A.AddComponent(/datum/component/orbiter, src, radius, clockwise, rotation_speed, rotation_segments, pre_rotation, actually_orbit)
+
+/atom/movable/proc/start_orbit(datum/component/orbiter/orbits)
+ return
/atom/movable/proc/stop_orbit(datum/component/orbiter/orbits)
- return // We're just a simple hook
+ return
/atom/proc/transfer_observers_to(atom/target)
if(!orbiters || !istype(target) || !get_turf(target) || target == src)
diff --git a/code/datums/orbit.dm b/code/datums/orbit.dm
deleted file mode 100644
index 5d457ff4ac5..00000000000
--- a/code/datums/orbit.dm
+++ /dev/null
@@ -1,132 +0,0 @@
-/datum/orbit
- var/atom/movable/orbiter
- var/atom/orbiting
- var/lock = TRUE
- var/turf/lastloc
- var/lastprocess
-
-/datum/orbit/New(_orbiter, _orbiting, _lock)
- orbiter = _orbiter
- orbiting = _orbiting
- SSorbit.processing += src
- if (!orbiting.orbiters)
- orbiting.orbiters = list()
- orbiting.orbiters += src
-
- if (orbiter.orbiting)
- orbiter.stop_orbit()
- orbiter.orbiting = src
- Check()
- lock = _lock
-
-//do not qdel directly, use stop_orbit on the orbiter. (This way the orbiter can bind to the orbit stopping)
-/datum/orbit/Destroy(force = FALSE)
- SSorbit.processing -= src
- if (orbiter)
- orbiter.orbiting = null
- orbiter = null
- if (orbiting)
- if (orbiting.orbiters)
- orbiting.orbiters -= src
- if (!orbiting.orbiters.len)//we are the last orbit, delete the list
- orbiting.orbiters = null
- orbiting = null
- return ..()
-
-/datum/orbit/proc/Check(turf/targetloc, list/checked_already = list())
- //Avoid infinite loops for people who end up orbiting themself through another orbiter
- checked_already[src] = TRUE
- if (!orbiter)
- qdel(src)
- return
- if (!orbiting)
- orbiter.stop_orbit()
- return
- if (!orbiter.orbiting) //admin wants to stop the orbit.
- orbiter.orbiting = src //set it back to us first
- orbiter.stop_orbit()
- var/atom/movable/AM = orbiting
- if(istype(AM) && AM.orbiting && AM.orbiting.orbiting == orbiter)
- orbiter.stop_orbit()
- return
- lastprocess = world.time
- if (!targetloc)
- targetloc = get_turf(orbiting)
- if (!targetloc || (!lock && orbiter.loc != lastloc && orbiter.loc != targetloc))
- orbiter.stop_orbit()
- return
- orbiter.loc = targetloc
- //TODO-LESH-DEL orbiter.update_parallax_contents()
- orbiter.update_light()
- lastloc = orbiter.loc
- for(var/other_orbit in orbiter.orbiters)
- var/datum/orbit/OO = other_orbit
- //Skip if checked already
- if(checked_already[OO])
- continue
- OO.Check(targetloc, checked_already)
-
-/atom/movable/var/datum/orbit/orbiting = null
-/atom/var/list/orbiters = null
-
-//A: atom to orbit
-//radius: range to orbit at, radius of the circle formed by orbiting (in pixels)
-//clockwise: whether you orbit clockwise or anti clockwise
-//rotation_speed: how fast to rotate (how many ds should it take for a rotation to complete)
-//rotation_segments: the resolution of the orbit circle, less = a more block circle, this can be used to produce hexagons (6 segments) triangles (3 segments), and so on, 36 is the best default.
-//pre_rotation: Chooses to rotate src 90 degress towards the orbit dir (clockwise/anticlockwise), useful for things to go "head first" like ghosts
-//lockinorbit: Forces src to always be on A's turf, otherwise the orbit cancels when src gets too far away (eg: ghosts)
-
-/atom/movable/proc/orbit(atom/A, radius = 10, clockwise = FALSE, rotation_speed = 20, rotation_segments = 36, pre_rotation = TRUE, lockinorbit = FALSE)
- if (!istype(A))
- return
-
- new/datum/orbit(src, A, lockinorbit)
- if (!orbiting) //something failed, and our orbit datum deleted itself
- return
- var/matrix/initial_transform = matrix(transform)
-
- //Head first!
- if (pre_rotation)
- var/matrix/M = matrix(transform)
- var/pre_rot = 90
- if(!clockwise)
- pre_rot = -90
- M.Turn(pre_rot)
- transform = M
-
- var/matrix/shift = matrix(transform)
- shift.Translate(0,radius)
- transform = shift
-
- SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
-
- //we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
- transform = initial_transform
-
-/atom/movable/proc/stop_orbit()
- SpinAnimation(0,0)
- qdel(orbiting)
-
-/atom/Destroy(force = FALSE)
- . = ..()
- if (orbiters)
- for (var/thing in orbiters)
- var/datum/orbit/O = thing
- if (O.orbiter)
- O.orbiter.stop_orbit()
-
-/atom/movable/Destroy(force = FALSE)
- . = ..()
- if (orbiting)
- stop_orbit()
-
-/*
-/atom/movable/proc/transfer_observers_to(atom/movable/target)
- if(orbiters)
- for(var/thing in orbiters)
- var/datum/orbit/O = thing
- if(O.orbiter && isobserver(O.orbiter))
- var/mob/dead/observer/D = O.orbiter
- D.ManualFollow(target)
-*/
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index d7ffe8332cc..541da379c1d 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -81,7 +81,7 @@
body += "TP - "
body += "PM - "
body += "SM - "
- body += "JMP
"
+ body += "FLW
"
if(antagonist > 0)
body += "Antagonist";
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 2c7ea9d25d2..03e9a2ecf6a 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1268,9 +1268,11 @@
var/mob/M = locate(href_list["adminplayerobservejump"])
var/client/C = usr.client
- if(!isobserver(usr)) C.admin_ghost()
- sleep(2)
- C.jumptomob(M)
+ if(!isobserver(usr))
+ C.admin_ghost()
+ var/mob/observer/dead/O = C.mob
+ if(istype(O))
+ O.ManualFollow(M)
else if(href_list["check_antagonist"])
check_antagonists()
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index aaec744ece5..04cb60cb9ba 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -1,9 +1,3 @@
-/mob/proc/on_mob_jump()
- return
-
-/mob/observer/dead/on_mob_jump()
- following = null
-
/client/proc/Jump(var/area/A in return_sorted_areas())
set name = "Jump to Area"
set desc = "Area to jump to"
@@ -12,8 +6,7 @@
return
if(config_legacy.allow_admin_jump)
- usr.on_mob_jump()
- usr.loc = pick(get_area_turfs(A))
+ usr.forceMove(pick(get_area_turfs(A)))
log_admin("[key_name(usr)] jumped to [A]")
message_admins("[key_name_admin(usr)] jumped to [A]", 1)
@@ -49,8 +42,7 @@
var/turf/T = get_turf(M)
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- A.on_mob_jump()
- A.loc = T
+ A.forceMove(T)
else
to_chat(A, "This mob is not located in the game world.")
else
@@ -66,10 +58,7 @@
if (config_legacy.allow_admin_jump)
if(src.mob)
var/mob/A = src.mob
- A.on_mob_jump()
- A.x = tx
- A.y = ty
- A.z = tz
+ A.forceMove(locate(tx, ty, tz))
feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
@@ -94,8 +83,7 @@
var/mob/M = selection:mob
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
- usr.on_mob_jump()
- usr.loc = M.loc
+ usr.forceMove(M.loc)
feedback_add_details("admin_verb","JK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -111,8 +99,7 @@
var/msg = "[key_name_admin(usr)] jumped to [key_name_admin(M)]"
message_admins(msg)
admin_ticket_log(M, msg)
- M.on_mob_jump()
- M.loc = get_turf(usr)
+ M.forceMove(get_turf(usr))
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -141,8 +128,7 @@
message_admins(msg)
admin_ticket_log(M, msg)
if(M)
- M.on_mob_jump()
- M.loc = get_turf(usr)
+ M.forceMove(get_turf(usr))
feedback_add_details("admin_verb","GK") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
alert("Admin jumping disabled")
@@ -155,8 +141,7 @@
var/area/A = input(usr, "Pick an area.", "Pick an area") in return_sorted_areas()
if(A)
if(config_legacy.allow_admin_jump)
- M.on_mob_jump()
- M.loc = pick(get_area_turfs(A))
+ M.forceMove(pick(get_area_turfs(A)))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] teleported [key_name(M)]")
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 7638dd3d70b..f6378707751 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -28,12 +28,14 @@
var/medHUD = 0
var/antagHUD = 0
universal_speak = 1
- var/atom/movable/following = null
var/admin_ghosted = 0
var/anonsay = 0
var/ghostvision = 1 //is the ghost able to see things humans can't?
incorporeal_move = 1
+ /// Whether or not our mouse opacity is set to transparent while following.
+ var/mouse_opacity_yield_while_following = TRUE
+
var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
var/ghost_sprite = null
var/global/list/possible_ghost_sprites = list(
@@ -307,7 +309,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
usr.forceMove(pick(get_area_turfs(A)))
- usr.on_mob_jump()
/mob/observer/dead/verb/follow(input in getmobs())
set category = "Ghost"
@@ -320,77 +321,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
ManualFollow(target)
// This is the ghost's follow verb with an argument
-/mob/observer/dead/proc/ManualFollow(var/atom/movable/target)
- if(!target)
+/mob/observer/dead/proc/ManualFollow(atom/movable/target)
+ if (!istype(target))
return
- var/turf/targetloc = get_turf(target)
- if(check_holy(targetloc))
- to_chat(usr, "You cannot follow a mob standing on holy grounds!")
- return
- if(target != src)
- if(following && following == target)
- return
- following = target
- to_chat(src, "Now following [target]")
- if(ismob(target))
- forceMove(get_turf(target))
- var/mob/M = target
- M.following_mobs += src
- else
- spawn(0)
- while(target && following == target && client)
- var/turf/T = get_turf(target)
- if(!T)
- break
- // To stop the ghost flickering.
- if(loc != T)
- forceMove(T)
- sleep(15)
+ orbit(target, actually_orbit = FALSE)
-/mob/proc/update_following()
- . = get_turf(src)
- for(var/mob/observer/dead/M in following_mobs)
- if(M.following != src)
- following_mobs -= M
- else
- if(M.loc != .)
- M.forceMove(.)
-
-/mob
- var/list/following_mobs = list()
-
-/mob/Destroy()
- for(var/mob/observer/dead/M in following_mobs)
- M.following = null
- following_mobs = null
- return ..()
-
-/mob/observer/dead/Destroy()
- if(ismob(following))
- var/mob/M = following
- M.following_mobs -= src
- following = null
- return ..()
-
-/mob/Move()
+/mob/observer/dead/start_orbiting(datum/component/orbiter/orbits)
. = ..()
- if(.)
- update_following()
+ to_chat(src, "Now orbiting [orbits.parent].")
+ if(mouse_opacity_yield_while_following)
+ mouse_opacity = MOUSE_OPACITY_TRANSPRENT
-/mob/Life()
- // to catch teleports etc which directly set loc
- update_following()
- return ..()
-
-/mob/proc/check_holy(var/turf/T)
- return 0
-
-/mob/observer/dead/check_holy(var/turf/T)
- if(check_rights(R_ADMIN|R_FUN, 0, src))
- return 0
-
- return (T && T.holy) && (is_manifest || (mind in cult.current_antagonists))
+/mob/observer/dead/stop_orbiting(datum/component/orbiter/orbits)
+ . = ..()
+ if(mouse_opacity_yield_while_following)
+ mouse_opacity = initial(mouse_opacity)
/mob/observer/dead/verb/jumptomob(input in getmobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak
set category = "Ghost"
diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm
index 545ddc785a8..9623e7f33b1 100644
--- a/code/modules/mob/freelook/eye.dm
+++ b/code/modules/mob/freelook/eye.dm
@@ -13,6 +13,7 @@
var/cooldown = 0
var/acceleration = 1
var/owner_follows_eye = 0
+ var/slowdown = 1 //people said this was too fast. meh.
see_in_dark = 7
status_flags = GODMODE
@@ -84,6 +85,9 @@
if(!eyeobj)
return
+ if(eyeobj.slowdown)
+ applyMoveCooldown(eyeobj.slowdown)
+
return eyeobj.EyeMove(n, direct)
/mob/observer/eye/EyeMove(n, direct)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 5f283e655dd..5ddb0cef2c3 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -176,10 +176,7 @@
#undef HUMAN_LOWEST_SLOWDOWN
-/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
- //Can we act?
- if(restrained()) return 0
-
+/mob/living/carbon/human/Process_Spacemove(dir)
//Do we have a working jetpack?
var/obj/item/tank/jetpack/thrust
if(back)
@@ -191,18 +188,15 @@
thrust = module.jets
break
- if(thrust)
- if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.allow_thrust(0.01, src)))
- inertia_dir = 0
- return 1
- if(flying) //VOREStation Edit. If you're flying, you glide around!
- return 0 //VOREStation Edit.
-
- //If no working jetpack then use the other checks
- if(..())
- return 1
- return 0
+ if(thrust && !lying)
+ if(dir != NONE)
+ return thrust.allow_thrust(0.01, src)
+ else
+ return thrust.stabilization_on && thrust.allow_thrust(0.01, src)
+ if(flying)
+ return TRUE
+ return ..()
/mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5)
//If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such.
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index 18719db0a7b..99ed50b4a02 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -8,10 +8,8 @@
for(var/obj/item/tank/jetpack/J in module.modules)
if(istype(J, /obj/item/tank/jetpack))
if(J.allow_thrust(0.01))
- return 1
- if(..())
- return 1
- return 0
+ return TRUE
+ return ..()
/mob/living/silicon/robot/movement_delay()
. = ..()
diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm
index 6cd596bd580..9db8ad90170 100644
--- a/code/modules/multiz/zshadow.dm
+++ b/code/modules/multiz/zshadow.dm
@@ -61,7 +61,7 @@
if(shadow)
shadow.sync_icon(src)
-/mob/living/Move()
+/mob/living/Moved()
. = ..()
check_shadow()
@@ -69,14 +69,6 @@
. = ..()
check_shadow()
-/mob/living/on_mob_jump()
- // We're about to be admin-jumped.
- // Unfortuantely loc isn't set until after this proc is called. So we must spawn() so check_shadow executes with the new loc.
- . = ..()
- if(shadow)
- spawn(0)
- check_shadow()
-
/mob/living/proc/check_shadow()
var/mob/M = src
if(isturf(M.loc))
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index e287825bf3a..84bc87b4013 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -143,16 +143,16 @@
target.dissipate_strength = target.orbiting_balls.len
. = ..()
-/obj/singularity/energy_ball/stop_orbit()
- if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball))
- var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting
+
+/obj/singularity/energy_ball/stop_orbit(datum/component/orbiting/orbits)
+ if(istype(orbits?.parent, /obj/singularity/energy_ball))
+ var/obj/singularity/energy_ball/orbitingball = orbits.orbiting
orbitingball.orbiting_balls -= src
orbitingball.dissipate_strength = orbitingball.orbiting_balls.len
..()
if (!loc && !QDELETED(src))
qdel(src)
-
/obj/singularity/energy_ball/proc/dust_mobs(atom/A)
if(isliving(A))
var/mob/living/L = A
diff --git a/vorestation.dme b/vorestation.dme
index f06a6cdbf15..35fa2d09f38 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -242,7 +242,6 @@
#include "code\controllers\subsystems\mobs.dm"
#include "code\controllers\subsystems\nanoui.dm"
#include "code\controllers\subsystems\openspace.dm"
-#include "code\controllers\subsystems\orbits.dm"
#include "code\controllers\subsystems\overlays.dm"
#include "code\controllers\subsystems\persist_vr.dm"
#include "code\controllers\subsystems\ping.dm"
@@ -285,7 +284,6 @@
#include "code\datums\mixed.dm"
#include "code\datums\modules.dm"
#include "code\datums\mutable_appearance.dm"
-#include "code\datums\orbit.dm"
#include "code\datums\organs.dm"
#include "code\datums\position_point_vector.dm"
#include "code\datums\progressbar.dm"
@@ -316,6 +314,7 @@
#include "code\datums\browser\listpicker.dm"
#include "code\datums\browser\preflikepicker.dm"
#include "code\datums\components\_component.dm"
+#include "code\datums\components\orbiter.dm"
#include "code\datums\elements\_element.dm"
#include "code\datums\helper_datums\construction_datum.dm"
#include "code\datums\helper_datums\events.dm"