diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index afe74de6a0..6f9010eb95 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -415,7 +415,7 @@
name = "Death Commando Officer"
head = /obj/item/clothing/head/helmet/space/beret
-/datum/outfit/chrono_agent
+/* /datum/outfit/chrono_agent //Begone skyrat change on sandstorm
name = "Timeline Eradication Agent"
uniform = /obj/item/clothing/under/color/white
suit = /obj/item/clothing/suit/space/chronos
@@ -423,7 +423,7 @@
head = /obj/item/clothing/head/helmet/space/chronos
mask = /obj/item/clothing/mask/breath
suit_store = /obj/item/tank/internals/oxygen
-
+*/
/datum/outfit/debug //Debug objs plus hardsuit
name = "Debug outfit"
uniform = /obj/item/clothing/under/misc/patriotsuit
diff --git a/sandcode/code/game/objects/items/chrono_eraser.dm b/sandcode/code/game/objects/items/chrono_eraser.dm
new file mode 100644
index 0000000000..198db22d78
--- /dev/null
+++ b/sandcode/code/game/objects/items/chrono_eraser.dm
@@ -0,0 +1,284 @@
+#define CHRONO_BEAM_RANGE 5
+#define CHRONO_FRAME_COUNT 22
+/obj/item/chrono_eraser //Gandalf was here!
+ name = "Timestream Eradication Device"
+ desc = "The result of outlawed time-bluespace research, this device is capable of wiping a being from the timestream. They never are, they never were, they never will be."
+ icon = 'icons/obj/chronos.dmi'
+ icon_state = "chronobackpack"
+ item_state = "backpack"
+ lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
+ w_class = WEIGHT_CLASS_BULKY
+ slot_flags = ITEM_SLOT_BACK
+ slowdown = 0
+ actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
+ var/obj/item/gun/energy/chrono_gun/PA = null
+ var/list/erased_minds = list() //a collection of minds from the dead
+
+/obj/item/chrono_eraser/proc/pass_mind(datum/mind/M)
+ erased_minds += M
+
+/obj/item/chrono_eraser/dropped()
+ ..()
+ if(PA)
+ qdel(PA)
+
+/obj/item/chrono_eraser/Destroy()
+ dropped()
+ return ..()
+
+/obj/item/chrono_eraser/ui_action_click(mob/user)
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ if(C.back == src)
+ if(PA)
+ qdel(PA)
+ else
+ PA = new(src)
+ user.put_in_hands(PA)
+
+/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user, datum/action/A)
+ if(slot == SLOT_BACK)
+ return 1
+
+/obj/item/gun/energy/chrono_gun
+ name = "T.E.D. Projection Apparatus"
+ desc = "It's as if they never existed in the first place."
+ icon = 'icons/obj/chronos.dmi'
+ icon_state = "chronogun"
+ item_state = "chronogun"
+ w_class = WEIGHT_CLASS_NORMAL
+ item_flags = DROPDEL
+ ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
+ can_charge = FALSE
+ fire_delay = 50
+ var/obj/item/chrono_eraser/TED = null
+ var/obj/structure/chrono_field/field = null
+ var/turf/startpos = null
+
+/obj/item/gun/energy/chrono_gun/Initialize()
+ . = ..()
+ ADD_TRAIT(src, TRAIT_NODROP, CHRONO_GUN_TRAIT)
+ if(istype(loc, /obj/item/chrono_eraser))
+ TED = loc
+ else //admin must have spawned it
+ TED = new(src.loc)
+ return INITIALIZE_HINT_QDEL
+
+/obj/item/gun/energy/chrono_gun/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_blocker)
+
+/obj/item/gun/energy/chrono_gun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, stam_cost = 0)
+ if(field)
+ field_disconnect(field)
+ ..()
+
+/obj/item/gun/energy/chrono_gun/Destroy()
+ if(TED)
+ TED.PA = null
+ TED = null
+ if(field)
+ field_disconnect(field)
+ return ..()
+
+/obj/item/gun/energy/chrono_gun/proc/field_connect(obj/structure/chrono_field/F)
+ var/mob/living/user = loc
+ if(F.gun)
+ if(isliving(user) && F.captured)
+ to_chat(user, "FAIL: [F.captured] already has an existing connection.")
+ field_disconnect(F)
+ else
+ startpos = get_turf(src)
+ field = F
+ F.gun = src
+ if(isliving(user) && F.captured)
+ playsound(user,'sound/effects/clock_tick.ogg' , 50, 1)
+ to_chat(user, "Connection established with target: [F.captured]")
+
+
+/obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/structure/chrono_field/F)
+ if(F && field == F)
+ var/mob/living/user = loc
+ if(F.gun == src)
+ F.gun = null
+ if(isliving(user) && F.captured)
+ F.captured.adjustOrganLoss(ORGAN_SLOT_BRAIN, 199, 199) //not so fast!
+ to_chat(user, "Disconnected from target: [F.captured]")
+ field = null
+ startpos = null
+
+/obj/item/gun/energy/chrono_gun/proc/field_check(obj/structure/chrono_field/F)
+ if(F)
+ if(field == F)
+ var/turf/currentpos = get_turf(src)
+ var/mob/living/user = loc
+ if((currentpos == startpos) && (field in view(CHRONO_BEAM_RANGE, currentpos)) && (user.mobility_flags & MOBILITY_STAND) && (user.stat == CONSCIOUS))
+ return 1
+ field_disconnect(F)
+ return 0
+
+/obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M)
+ if(TED)
+ TED.pass_mind(M)
+
+
+/obj/item/projectile/energy/chrono_beam
+ name = "eradication beam"
+ icon_state = "chronobolt"
+ range = CHRONO_BEAM_RANGE
+ nodamage = TRUE
+ var/obj/item/gun/energy/chrono_gun/gun = null
+
+/obj/item/projectile/energy/chrono_beam/Initialize()
+ . = ..()
+ var/obj/item/ammo_casing/energy/chrono_beam/C = loc
+ if(istype(C))
+ gun = C.gun
+
+/obj/item/projectile/energy/chrono_beam/on_hit(atom/target)
+ if(target && gun && isliving(target))
+ var/obj/structure/chrono_field/F = new(target.loc, target, gun)
+ gun.field_connect(F)
+
+
+/obj/item/ammo_casing/energy/chrono_beam
+ name = "eradication beam"
+ projectile_type = /obj/item/projectile/energy/chrono_beam
+ icon_state = "chronobolt"
+ e_cost = 0
+ var/obj/item/gun/energy/chrono_gun/gun
+
+/obj/item/ammo_casing/energy/chrono_beam/Initialize()
+ if(istype(loc))
+ gun = loc
+ . = ..()
+
+
+
+
+
+/obj/structure/chrono_field
+ name = "eradication field"
+ desc = "An aura of time-bluespace energy."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "chronofield"
+ density = FALSE
+ anchored = TRUE
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF
+ move_resist = INFINITY
+ interaction_flags_atom = NONE
+ var/mob/living/captured = null
+ var/obj/item/gun/energy/chrono_gun/gun = null
+ var/tickstokill = 4 //Just enough time for people to witness the monstrosity
+ var/mutable_appearance/mob_underlay
+ var/preloaded = 0
+ var/RPpos = null
+ var/attached = TRUE //if the gun arg isn't included initially, then the chronofield will work without one
+
+/obj/structure/chrono_field/Initialize(mapload, mob/living/target, obj/item/gun/energy/chrono_gun/G)
+ if(target && isliving(target))
+ if(!G)
+ attached = FALSE
+ target.forceMove(src)
+ captured = target
+ var/icon/mob_snapshot = getFlatIcon(target)
+ var/icon/cached_icon = new()
+
+ for(var/i=1, i<=CHRONO_FRAME_COUNT, i++)
+ var/icon/removing_frame = icon('icons/obj/chronos.dmi', "erasing", SOUTH, i)
+ var/icon/mob_icon = icon(mob_snapshot)
+ mob_icon.Blend(removing_frame, ICON_MULTIPLY)
+ cached_icon.Insert(mob_icon, "frame[i]")
+
+ mob_underlay = mutable_appearance(cached_icon, "frame1")
+ update_icon()
+
+ desc = initial(desc) + "
It appears to contain [target.name]."
+ START_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/structure/chrono_field/Destroy()
+ if(gun && gun.field_check(src))
+ gun.field_disconnect(src)
+ return ..()
+
+/obj/structure/chrono_field/update_icon()
+ var/ttk_frame = 1 - (tickstokill / initial(tickstokill))
+ ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT)
+ if(ttk_frame != RPpos)
+ RPpos = ttk_frame
+ mob_underlay.icon_state = "frame[RPpos]"
+ underlays = list() //hack: BYOND refuses to update the underlay to match the icon_state otherwise
+ underlays += mob_underlay
+
+/obj/structure/chrono_field/process()
+ if(captured)
+ if(tickstokill > initial(tickstokill))
+ for(var/atom/movable/AM in contents)
+ AM.forceMove(drop_location())
+ qdel(src)
+ else if(tickstokill <= 0)
+ to_chat(captured, "As the last essence of your being is erased from time, you are taken back to your most enjoyable memory. You feel happy...")
+ playsound(captured,'sound/effects/lingreadapt.ogg' , 50, 1)
+ captured.visible_message("[captured] dematerialises out of the timestream!")
+ var/mob/dead/observer/ghost = captured.ghostize(1)
+ if(captured.mind)
+ if(ghost)
+ ghost.mind = null
+ if(gun)
+ gun.pass_mind(captured.mind)
+ qdel(captured)
+ qdel(src)
+ else
+ captured.Unconscious(80)
+ if(captured.loc != src)
+ captured.forceMove(src)
+ update_icon()
+ if(gun)
+ if(gun.field_check(src))
+ tickstokill--
+ else
+ gun = null
+ return .()
+ else if(!attached)
+ tickstokill--
+ else
+ tickstokill++
+ else
+ qdel(src)
+
+/obj/structure/chrono_field/bullet_act(obj/item/projectile/P)
+ if(istype(P, /obj/item/projectile/energy/chrono_beam))
+ var/obj/item/projectile/energy/chrono_beam/beam = P
+ var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun
+ if(Pgun && istype(Pgun))
+ Pgun.field_connect(src)
+ else
+ return BULLET_ACT_HIT
+
+/obj/structure/chrono_field/assume_air()
+ return 0
+
+/obj/structure/chrono_field/return_air() //we always have nominal air and temperature
+ var/datum/gas_mixture/GM = new
+ GM.set_moles(/datum/gas/oxygen, MOLES_O2STANDARD)
+ GM.set_moles(/datum/gas/nitrogen, MOLES_N2STANDARD)
+ GM.set_temperature(T20C)
+ return GM
+
+/obj/structure/chrono_field/singularity_act()
+ return
+
+/obj/structure/chrono_field/singularity_pull()
+ return
+
+/obj/structure/chrono_field/ex_act()
+ return
+
+/obj/structure/chrono_field/blob_act(obj/structure/blob/B)
+ return
+
+
+#undef CHRONO_BEAM_RANGE
+#undef CHRONO_FRAME_COUNT
diff --git a/sandcode/code/modules/clothing/outfits/standard.dm b/sandcode/code/modules/clothing/outfits/standard.dm
index 4a01943f87..9e7b25fb7f 100644
--- a/sandcode/code/modules/clothing/outfits/standard.dm
+++ b/sandcode/code/modules/clothing/outfits/standard.dm
@@ -78,3 +78,27 @@
/obj/item/gun/energy/pulse=1,\
/obj/item/gun/energy/taser/debug,\
)
+
+/datum/outfit/chrono_agent
+ name = "Timeline Eradication Agent"
+ uniform = /obj/item/clothing/under/rank/rnd/scientist
+ suit = /obj/item/clothing/suit/space/chronos
+ back = /obj/item/chrono_eraser
+ head = /obj/item/clothing/head/helmet/space/chronos
+ mask = /obj/item/clothing/mask/breath
+ belt = /obj/item/storage/belt/military/abductor/full
+ gloves = /obj/item/clothing/gloves/tackler/combat/insulated
+ glasses = /obj/item/clothing/glasses/night
+ shoes = /obj/item/clothing/shoes/combat
+ id = /obj/item/card/id
+ suit_store = /obj/item/tank/internals/oxygen
+ ears = /obj/item/radio/headset/headset_cent/alt
+
+/datum/outfit/chrono_agent/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source)
+ var/obj/item/card/id/W = H.wear_id
+ W.icon_state = "centcom"
+ W.access = get_all_accesses()//They get full station access.
+ W.access += get_centcom_access("TED Agent")//Let's add their alloted CentCom access.
+ W.assignment = "Timeline Eradication Agent"
+ W.registered_name = H.real_name
+ W.update_label(W.registered_name, W.assignment)
diff --git a/sandcode/code/modules/clothing/spacesuits/chronosuit.dm b/sandcode/code/modules/clothing/spacesuits/chronosuit.dm
new file mode 100644
index 0000000000..81aa30554f
--- /dev/null
+++ b/sandcode/code/modules/clothing/spacesuits/chronosuit.dm
@@ -0,0 +1,324 @@
+/obj/item/clothing/head/helmet/space/chronos //Gandalf was here!
+ name = "Chronosuit Helmet"
+ desc = "A white helmet with an opaque blue visor."
+ mob_overlay_icon = 'sandcode/icons/mob/clothing/head.dmi'
+ anthro_mob_worn_overlay = 'sandcode/icons/mob/clothing/head_muzzled.dmi'
+ icon_state = "chronohelmet"
+ item_state = "chronohelmet"
+ slowdown = 0
+ armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ var/obj/item/clothing/suit/space/chronos/suit = null
+
+/obj/item/clothing/head/helmet/space/chronos/dropped(mob/user)
+ if(suit)
+ suit.deactivate(1, 1)
+ ..()
+
+/obj/item/clothing/suit/space/chronos
+ name = "Chronosuit"
+ desc = "An advanced spacesuit equipped with time-bluespace teleportation and anti-compression technology."
+ mob_overlay_icon = 'sandcode/icons/mob/clothing/suit.dmi'
+ anthro_mob_worn_overlay = 'sandcode/icons/mob/clothing/suit_digi.dmi'
+ icon_state = "chronosuit"
+ item_state = "chronosuit"
+ actions_types = list(/datum/action/item_action/toggle)
+ armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 1000)
+ resistance_flags = FIRE_PROOF | ACID_PROOF
+ mutantrace_variation = STYLE_DIGITIGRADE
+ slowdown = 0
+ var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun)
+ var/obj/item/clothing/head/helmet/space/chronos/helmet = null
+ var/obj/effect/chronos_cam/camera = null
+ var/datum/action/innate/chrono_teleport/teleport_now = new
+ var/activating = 0
+ var/activated = 0
+ var/cooldowntime = 50 //deciseconds
+ var/teleporting = 0
+ var/phase_timer_id
+
+/obj/item/clothing/suit/space/chronos/New()
+ ..()
+ teleport_now.chronosuit = src
+ teleport_now.target = src
+
+/obj/item/clothing/suit/space/chronos/proc/new_camera(mob/user)
+ if(camera)
+ qdel(camera)
+ camera = new /obj/effect/chronos_cam(user)
+ camera.holder = user
+ camera.chronosuit = src
+ user.remote_control = camera
+
+/obj/item/clothing/suit/space/chronos/ui_action_click()
+ if((cooldown <= world.time) && !teleporting && !activating)
+ if(!activated)
+ activate()
+ else
+ deactivate()
+
+/obj/item/clothing/suit/space/chronos/dropped(mob/user)
+ if(activated)
+ deactivate()
+ ..()
+
+/obj/item/clothing/suit/space/chronos/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ var/mob/living/carbon/human/user = src.loc
+ switch(severity)
+ if(1)
+ if(activated && user && ishuman(user) && (user.wear_suit == src))
+ to_chat(user, "E:FATAL:RAM_READ_FAIL\nE:FATAL:STACK_EMPTY\nE:FATAL:READ_NULL_POINT\nE:FATAL:PWR_BUS_OVERLOAD")
+ to_chat(user, "An electromagnetic pulse disrupts your [name] and violently tears you out of time-bluespace!")
+ user.emote("scream")
+ deactivate(1, 1)
+
+/obj/item/clothing/suit/space/chronos/proc/finish_chronowalk(mob/living/carbon/human/user, turf/to_turf)
+ if(!user)
+ user = src.loc
+ if(phase_timer_id)
+ deltimer(phase_timer_id)
+ phase_timer_id = 0
+ if(istype(user))
+ if(to_turf)
+ user.forceMove(to_turf)
+ user.SetStun(0)
+ user.next_move = 1
+ user.alpha = 255
+ user.update_atom_colour()
+ user.animate_movement = FORWARD_STEPS
+ user.mob_transforming = 0
+ user.anchored = FALSE
+ teleporting = 0
+ for(var/obj/item/I in user.held_items)
+ REMOVE_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ if(camera)
+ camera.remove_target_ui()
+ camera.forceMove(user)
+ teleport_now.UpdateButtonIcon()
+
+/obj/item/clothing/suit/space/chronos/proc/chronowalk(atom/location)
+ var/mob/living/carbon/human/user = src.loc
+ if(activated && !teleporting && user && istype(user) && location && user.loc && location.loc && user.wear_suit == src && user.stat == CONSCIOUS)
+ teleporting = 1
+ var/turf/from_turf = get_turf(user)
+ var/turf/to_turf = get_turf(location)
+ var/distance = cheap_hypotenuse(from_turf.x, from_turf.y, to_turf.x, to_turf.y)
+ var/phase_in_ds = distance*2
+
+ if(camera)
+ camera.remove_target_ui()
+
+ teleport_now.UpdateButtonIcon()
+
+ user.ExtinguishMob()
+
+ for(var/obj/item/I in user.held_items)
+ ADD_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ user.animate_movement = NO_STEPS
+ user.changeNext_move(8 + phase_in_ds)
+ user.mob_transforming = 1
+ user.anchored = TRUE
+ user.Stun(INFINITY)
+
+ animate(user, color = "#00ccee", time = 3)
+ phase_timer_id = addtimer(CALLBACK(src, .proc/phase_2, user, to_turf, phase_in_ds), 3, TIMER_STOPPABLE)
+
+/obj/item/clothing/suit/space/chronos/proc/phase_2(mob/living/carbon/human/user, turf/to_turf, phase_in_ds)
+ if(teleporting && activated && user)
+ animate(user, alpha = 0, time = 2)
+ phase_timer_id = addtimer(CALLBACK(src, .proc/phase_3, user, to_turf, phase_in_ds), 2, TIMER_STOPPABLE)
+ else
+ finish_chronowalk(user, to_turf)
+
+/obj/item/clothing/suit/space/chronos/proc/phase_3(mob/living/carbon/human/user, turf/to_turf, phase_in_ds)
+ if(teleporting && activated && user)
+ user.forceMove(to_turf)
+ animate(user, alpha = 255, time = phase_in_ds)
+ phase_timer_id = addtimer(CALLBACK(src, .proc/phase_4, user, to_turf), phase_in_ds, TIMER_STOPPABLE)
+ else
+ finish_chronowalk(user, to_turf)
+
+/obj/item/clothing/suit/space/chronos/proc/phase_4(mob/living/carbon/human/user, turf/to_turf)
+ if(teleporting && activated && user)
+ animate(user, color = "#ffffff", time = 3)
+ phase_timer_id = addtimer(CALLBACK(src, .proc/finish_chronowalk, user, to_turf), 3, TIMER_STOPPABLE)
+ else
+ finish_chronowalk(user, to_turf)
+
+/obj/item/clothing/suit/space/chronos/process()
+ if(activated)
+ var/mob/living/carbon/human/user = src.loc
+ if(user && ishuman(user) && (user.wear_suit == src))
+ if(camera && (user.remote_control == camera))
+ if(!teleporting)
+ if(camera.loc != user && ((camera.x != user.x) || (camera.y != user.y) || (camera.z != user.z)))
+ if(camera.phase_time <= world.time)
+ chronowalk(camera)
+ else
+ camera.remove_target_ui()
+ else
+ new_camera(user)
+ else
+ STOP_PROCESSING(SSobj, src)
+
+/obj/item/clothing/suit/space/chronos/proc/activate()
+ if(!activating && !activated && !teleporting)
+ activating = 1
+ var/mob/living/carbon/human/user = src.loc
+ if(user && ishuman(user) && user.wear_suit == src)
+ to_chat(user, "\nChronosuitMK4 login: root")
+ to_chat(user, "Password:\n")
+ to_chat(user, "root@ChronosuitMK4# chronowalk4 --start\n")
+ if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos))
+ to_chat(user, "\[ ok \] Mounting /dev/helm")
+ helmet = user.head
+ ADD_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ helmet.suit = src
+ ADD_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ to_chat(user, "\[ ok \] Starting brainwave scanner")
+ to_chat(user, "\[ ok \] Starting ui display driver")
+ to_chat(user, "\[ ok \] Initializing chronowalk4-view")
+ new_camera(user)
+ START_PROCESSING(SSobj, src)
+ activated = 1
+ else
+ to_chat(user, "\[ fail \] Mounting /dev/helm")
+ to_chat(user, "FATAL: Unable to locate /dev/helm. Aborting...")
+ teleport_now.Grant(user)
+ cooldown = world.time + cooldowntime
+ activating = 0
+
+/obj/item/clothing/suit/space/chronos/proc/deactivate(force = 0, silent = FALSE)
+ if(activated && (!teleporting || force))
+ activating = 1
+ var/mob/living/carbon/human/user = src.loc
+ var/hard_landing = teleporting && force
+ REMOVE_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ cooldown = world.time + cooldowntime * 1.5
+ activated = 0
+ activating = 0
+ finish_chronowalk()
+ if(user && ishuman(user))
+ teleport_now.Remove(user)
+ if(user.wear_suit == src)
+ if(hard_landing)
+ user.electrocute_act(35, src, flags = SHOCK_NOGLOVES)
+ user.DefaultCombatKnockdown(200)
+ if(!silent)
+ to_chat(user, "\nroot@ChronosuitMK4# chronowalk4 --stop\n")
+ if(camera)
+ to_chat(user, "\[ ok \] Sending TERM signal to chronowalk4-view")
+ if(helmet)
+ to_chat(user, "\[ ok \] Stopping ui display driver")
+ to_chat(user, "\[ ok \] Stopping brainwave scanner")
+ to_chat(user, "\[ ok \] Unmounting /dev/helmet")
+ to_chat(user, "logout")
+ if(helmet)
+ REMOVE_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT)
+ helmet.suit = null
+ helmet = null
+ if(camera)
+ qdel(camera)
+
+/obj/effect/chronos_cam
+ name = "Chronosuit View"
+ density = FALSE
+ anchored = TRUE
+ invisibility = INVISIBILITY_ABSTRACT
+ opacity = 0
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ var/mob/holder = null
+ var/phase_time = 0
+ var/phase_time_length = 3
+ var/obj/screen/chronos_target/target_ui = null
+ var/obj/item/clothing/suit/space/chronos/chronosuit
+
+/obj/effect/chronos_cam/singularity_act()
+ return
+
+/obj/effect/chronos_cam/singularity_pull()
+ return
+
+/obj/effect/chronos_cam/proc/create_target_ui()
+ if(holder && holder.client && chronosuit)
+ if(target_ui)
+ remove_target_ui()
+ target_ui = new(null, holder)
+ holder.client.screen += target_ui
+
+/obj/effect/chronos_cam/proc/remove_target_ui()
+ if(target_ui)
+ qdel(target_ui)
+ target_ui = null
+
+/obj/effect/chronos_cam/relaymove(var/mob/user, direction)
+ if(!holder)
+ qdel(src)
+ return
+ if(user == holder)
+ if(loc == user)
+ forceMove(get_turf(user))
+ if(user.client && user.client.eye != src)
+ src.forceMove(user.drop_location())
+ user.reset_perspective(src)
+ user.set_machine(src)
+ var/atom/step = get_step(src, direction)
+ if(step)
+ if((step.x <= TRANSITIONEDGE) || (step.x >= (world.maxx - TRANSITIONEDGE - 1)) || (step.y <= TRANSITIONEDGE) || (step.y >= (world.maxy - TRANSITIONEDGE - 1)))
+ if(!src.Move(step))
+ src.forceMove(step)
+ else
+ src.forceMove(step)
+ if((x == holder.x) && (y == holder.y) && (z == holder.z))
+ remove_target_ui()
+ forceMove(user)
+ else if(!target_ui)
+ create_target_ui()
+ phase_time = world.time + phase_time_length
+
+/obj/effect/chronos_cam/check_eye(mob/user)
+ if(user != holder)
+ user.unset_machine()
+
+/obj/effect/chronos_cam/on_unset_machine(mob/user)
+ user.reset_perspective(null)
+
+/obj/effect/chronos_cam/Destroy()
+ if(holder)
+ if(holder.remote_control == src)
+ holder.remote_control = null
+ if(holder.client && (holder.client.eye == src))
+ holder.unset_machine()
+ return ..()
+
+/obj/screen/chronos_target
+ name = "target display"
+ screen_loc = "CENTER,CENTER"
+ color = "#ff3311"
+ blend_mode = BLEND_SUBTRACT
+
+/obj/screen/chronos_target/New(loc, var/mob/living/carbon/human/user)
+ if(user)
+ var/icon/user_icon = getFlatIcon(user)
+ icon = user_icon
+ transform = user.transform
+ else
+ qdel(src)
+
+/datum/action/innate/chrono_teleport
+ name = "Teleport Now"
+ icon_icon = 'icons/mob/actions/actions_minor_antag.dmi'
+ button_icon_state = "chrono_phase"
+ check_flags = AB_CHECK_CONSCIOUS //|AB_CHECK_INSIDE
+ var/obj/item/clothing/suit/space/chronos/chronosuit = null
+
+/datum/action/innate/chrono_teleport/IsAvailable(silent = FALSE)
+ return (chronosuit && chronosuit.activated && chronosuit.camera && !chronosuit.teleporting)
+
+/datum/action/innate/chrono_teleport/Activate()
+ if(IsAvailable())
+ if(chronosuit.camera)
+ chronosuit.chronowalk(chronosuit.camera)
diff --git a/sandcode/icons/mob/clothing/head.dmi b/sandcode/icons/mob/clothing/head.dmi
index 9620b406bf..75e48a9407 100644
Binary files a/sandcode/icons/mob/clothing/head.dmi and b/sandcode/icons/mob/clothing/head.dmi differ
diff --git a/sandcode/icons/mob/clothing/head_muzzled.dmi b/sandcode/icons/mob/clothing/head_muzzled.dmi
index b80a598977..7052a8c342 100644
Binary files a/sandcode/icons/mob/clothing/head_muzzled.dmi and b/sandcode/icons/mob/clothing/head_muzzled.dmi differ
diff --git a/sandcode/icons/mob/clothing/suit.dmi b/sandcode/icons/mob/clothing/suit.dmi
index ef8c670a59..0dd5e31ef1 100644
Binary files a/sandcode/icons/mob/clothing/suit.dmi and b/sandcode/icons/mob/clothing/suit.dmi differ
diff --git a/sandcode/icons/mob/clothing/suit_digi.dmi b/sandcode/icons/mob/clothing/suit_digi.dmi
index ae6ed70f7e..8e9f2fb065 100644
Binary files a/sandcode/icons/mob/clothing/suit_digi.dmi and b/sandcode/icons/mob/clothing/suit_digi.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index d3079a2f39..93b2ce0611 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -966,7 +966,6 @@
#include "code\game\objects\items\chainsaw.dm"
#include "code\game\objects\items\charter.dm"
#include "code\game\objects\items\chromosome.dm"
-#include "code\game\objects\items\chrono_eraser.dm"
#include "code\game\objects\items\cigs_lighters.dm"
#include "code\game\objects\items\clown_items.dm"
#include "code\game\objects\items\control_wand.dm"
@@ -1860,7 +1859,6 @@
#include "code\modules\clothing\shoes\miscellaneous.dm"
#include "code\modules\clothing\shoes\taeclowndo.dm"
#include "code\modules\clothing\spacesuits\_spacesuits.dm"
-#include "code\modules\clothing\spacesuits\chronosuit.dm"
#include "code\modules\clothing\spacesuits\hardsuit.dm"
#include "code\modules\clothing\spacesuits\miscellaneous.dm"
#include "code\modules\clothing\spacesuits\plasmamen.dm"
@@ -3518,6 +3516,7 @@
#include "sandcode\code\game\objects\items\airlock_painter.dm"
#include "sandcode\code\game\objects\items\BSRPD.dm"
#include "sandcode\code\game\objects\items\cards_ids.dm"
+#include "sandcode\code\game\objects\items\chrono_eraser.dm"
#include "sandcode\code\game\objects\items\computermath.dm"
#include "sandcode\code\game\objects\items\circuitboards\computer_circuitboards.dm"
#include "sandcode\code\game\objects\items\circuitboards\machine_circuitboards.dm"
@@ -3541,6 +3540,7 @@
#include "sandcode\code\modules\clothing\refactor.dm"
#include "sandcode\code\modules\clothing\masks\miscellaneous.dm"
#include "sandcode\code\modules\clothing\outfits\standard.dm"
+#include "sandcode\code\modules\clothing\spacesuits\chronosuit.dm"
#include "sandcode\code\modules\clothing\spacesuits\hardsuit.dm"
#include "sandcode\code\modules\crafting\recipes\recipes_misc.dm"
#include "sandcode\code\modules\hydroponics\grown\misc.dm"