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"