diff --git a/code/_helpers/turfs.dm b/code/_helpers/turfs.dm
index 690e4f18331..ddfcec7421e 100644
--- a/code/_helpers/turfs.dm
+++ b/code/_helpers/turfs.dm
@@ -131,7 +131,7 @@
var/old_icon1 = T.icon
var/old_decals = T.decals ? T.decals.Copy() : null
- B.Destroy()
+ //B.Destroy()
X = B.ChangeTurf(T.type)
X.set_dir(old_dir1)
X.icon_state = old_icon_state1
diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm
index 1d299a81dbd..554666cbca8 100644
--- a/code/datums/outfits/jobs/civilian.dm
+++ b/code/datums/outfits/jobs/civilian.dm
@@ -31,8 +31,9 @@
/decl/hierarchy/outfit/job/service/bartender/post_equip(mob/living/carbon/human/H)
..()
- for(var/obj/item/clothing/accessory/permit/gun/bar/permit in H.back.contents)
- permit.set_name(H.real_name)
+ if(H.back)
+ for(var/obj/item/clothing/accessory/permit/gun/bar/permit in H.back.contents)
+ permit.set_name(H.real_name)
/decl/hierarchy/outfit/job/service/bartender/barista
name = OUTFIT_JOB_NAME("Barista")
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 4a800e9292a..f3f8b5c982c 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -227,11 +227,12 @@
. = ..()
if(!on)
return
- var/datum/component/overlay_lighting/OL = GetComponent(/datum/component/overlay_lighting)
- if(!OL)
- return
- var/turf/T = get_turf(target)
- OL.place_directional_light(T)
+ if(light_system == MOVABLE_LIGHT_DIRECTIONAL)
+ var/datum/component/overlay_lighting/OL = GetComponent(/datum/component/overlay_lighting)
+ if(!OL)
+ return
+ var/turf/T = get_turf(target)
+ OL.place_directional_light(T)
/obj/item/device/flashlight/pen
name = "penlight"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 128ad94629d..106bd0aef25 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -124,8 +124,13 @@
var/mob/living/carbon/human/H = body
add_overlay(H.overlays_standing)
- if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
- forceMove(T)
+ if(!T)
+ T = pick(latejoin) //Safety in case we cannot find the body's position
+ if(T)
+ forceMove(T)
+ else
+ moveToNullspace()
+ to_chat(src, "Could not locate an observer spawn point. Use the Teleport verb to jump to the station map.")
if(!name) //To prevent nameless ghosts
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
@@ -161,10 +166,10 @@
I = getFlatIcon(src, defdir = SOUTH, no_anim = TRUE)
set_cached_examine_icon(src, I, 200 SECONDS)
return I
-
+
/mob/observer/dead/examine(mob/user)
. = ..()
-
+
if(is_admin(user))
. += "\t>[ADMIN_FULLMONTY(src)]"
@@ -337,7 +342,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/list/areas = return_sorted_areas()
if(client?.holder)
return areas
-
+
for(var/key in areas)
var/area/A = areas[key]
if(A.z in using_map?.secret_levels)
@@ -371,7 +376,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
var/area/A
-
+
if(!areaname)
var/list/areas = jumpable_areas()
var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas)
@@ -413,29 +418,29 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
ManualFollow(M || jumpable_mobs()[mobname])
-
+
/mob/observer/dead/forceMove(atom/destination)
if(client?.holder)
return ..()
-
+
if(get_z(destination) in using_map?.secret_levels)
to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
if(following)
stop_following()
return
-
+
return ..()
/mob/observer/dead/Move(atom/newloc, direct = 0, movetime)
if(client?.holder)
return ..()
-
+
if(get_z(newloc) in using_map?.secret_levels)
to_chat(src,SPAN_WARNING("Sorry, that z-level does not allow ghosts."))
if(following)
stop_following()
return
-
+
return ..()
// This is the ghost's follow verb with an argument
@@ -514,7 +519,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/mob/observer/dead/M in following_mobs)
if(!.)
M.stop_following()
-
+
if(M.following != src)
following_mobs -= M
else
@@ -867,7 +872,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Toggle Darkness"
set desc = "Toggles your ability to see lighting overlays, and the darkness they create."
set category = "Ghost"
-
+
var/static/list/darkness_names = list("normal darkness levels", "30% darkness removed", "70% darkness removed", "no darkness")
var/static/list/darkness_levels = list(255, 178, 76, 0)
@@ -876,7 +881,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
index = 1
else
index++
-
+
lighting_alpha = darkness_levels[index]
updateghostsight()
to_chat(src, "Your vision now has [darkness_names[index]].")
@@ -977,7 +982,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set category = "Ghost"
set name = "Blank pAI alert"
set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
-
+
if(jobban_isbanned(usr, "pAI"))
to_chat(usr,"You cannot alert pAI cards when you are banned from playing as a pAI.")
return
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index b2cd769b5ba..0cb4c587798 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -174,10 +174,10 @@ var/list/holder_mob_icon_cache = list()
/obj/item/weapon/holder/cat/runtime
-/obj/item/holder/fennec
+/obj/item/weapon/holder/fennec
origin_tech = list(TECH_BIO = 2)
-/obj/item/holder/cat/runtime
+/obj/item/weapon/holder/cat/runtime
origin_tech = list(TECH_BIO = 2, TECH_DATA = 4)
diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm
index 8f9a5c0f316..7a9279eaa08 100644
--- a/code/modules/mob/living/living_movement.dm
+++ b/code/modules/mob/living/living_movement.dm
@@ -291,9 +291,10 @@ default behaviour is:
var/mob/living/M = pulling
M.dragged(src, oldloc)
- pulling.Move(oldloc, 0, movetime) // the pullee tries to reach our previous position
- if(pulling && get_dist(src, pulling) > 1) // the pullee couldn't keep up
- stop_pulling()
+ if(pulling) // Check it AGAIN after previous steps just in case
+ pulling.Move(oldloc, 0, movetime) // the pullee tries to reach our previous position
+ if(get_dist(src, pulling) > 1) // the pullee couldn't keep up
+ stop_pulling()
if(!isturf(loc))
return
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm
index 0ea451246ff..0408c7ff27d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/fennec.dm
@@ -12,7 +12,7 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
- holder_type = /obj/item/holder/fennec
+ holder_type = /obj/item/weapon/holder/fennec
mob_size = MOB_SMALL
has_langs = list("Cat, Dog") //they're similar, why not.
diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm
index 7a39f2e55ef..0d1256329a0 100644
--- a/code/modules/tgui_input/alert.dm
+++ b/code/modules/tgui_input/alert.dm
@@ -64,7 +64,7 @@
/// The lifespan of the tgui_modal, after which the window will close and delete itself.
var/timeout
/// The bool that controls if this modal should grab window focus
- var/autofocus
+ var/autofocus
/// Boolean field describing if the tgui_modal was closed by the user.
var/closed
@@ -117,7 +117,7 @@
/datum/tgui_alert/tgui_data(mob/user)
var/list/data = list()
if(timeout)
- .["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
+ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS))
return data
/datum/tgui_alert/tgui_act(action, list/params)
diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm
index e16b00f6e4f..0a1d3173201 100644
--- a/code/modules/tgui_input/text.dm
+++ b/code/modules/tgui_input/text.dm
@@ -28,7 +28,7 @@
else
return
// Client does NOT have tgui_input on: Returns regular input
- if(!usr.client.prefs.tgui_input_mode)
+ if(!user.client.prefs.tgui_input_mode)
if(encode)
if(multiline)
return stripped_multiline_input(user, message, title, default, max_length)
diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm
index b4770851914..6ffdd0cca5c 100644
--- a/code/modules/vore/eating/belly_obj_vr.dm
+++ b/code/modules/vore/eating/belly_obj_vr.dm
@@ -567,7 +567,7 @@
// replacement strings and linebreaks as delimiters (two \n\n by default).
// They also sanitize the messages.
/obj/belly/proc/set_messages(raw_text, type, delim = "\n\n")
- ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
+ ASSERT(type == "smo" || type == "smi" || type == "asmo" || type == "asmi" || type == "dmo" || type == "dmp" || type == "amo" || type == "amp" || type == "uamo" || type == "uamp" || type == "em" || type == "ema" || type == "im_digest" || type == "im_hold" || type == "im_holdabsorbed" || type == "im_absorb" || type == "im_heal" || type == "im_drain" || type == "im_steal" || type == "im_egg" || type == "im_shrink" || type == "im_grow" || type == "im_unabsorb")
var/list/raw_list = splittext(html_encode(raw_text),delim)
if(raw_list.len > 10)
diff --git a/maps/groundbase/gb-centcomm.dmm b/maps/groundbase/gb-centcomm.dmm
index bf2655e628d..5e79cb7dc54 100644
--- a/maps/groundbase/gb-centcomm.dmm
+++ b/maps/groundbase/gb-centcomm.dmm
@@ -161,8 +161,8 @@
/area/centcom/control)
"aG" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled{
@@ -710,8 +710,8 @@
/area/centcom/terminal)
"cv" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled/dark,
diff --git a/maps/stellardelight/ship_centcom.dmm b/maps/stellardelight/ship_centcom.dmm
index 23be338ccd5..b0e1314f595 100644
--- a/maps/stellardelight/ship_centcom.dmm
+++ b/maps/stellardelight/ship_centcom.dmm
@@ -1139,8 +1139,8 @@
/area/centcom/specops)
"dv" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled/dark,
@@ -2276,8 +2276,8 @@
/area/centcom/control)
"hq" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled{
diff --git a/maps/submaps/admin_use_vr/dhael_centcom.dmm b/maps/submaps/admin_use_vr/dhael_centcom.dmm
index ebf1d392003..0e66e67a78d 100644
--- a/maps/submaps/admin_use_vr/dhael_centcom.dmm
+++ b/maps/submaps/admin_use_vr/dhael_centcom.dmm
@@ -307,8 +307,8 @@
/area/centcom/specops)
"aP" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/unsimulated/floor{
@@ -16126,8 +16126,8 @@
/area/centcom/evac)
"UO" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/unsimulated/floor{
diff --git a/maps/submaps/depreciated_vr/ert_base.dmm b/maps/submaps/depreciated_vr/ert_base.dmm
index 811010e5d0f..e16d4b09ed3 100644
--- a/maps/submaps/depreciated_vr/ert_base.dmm
+++ b/maps/submaps/depreciated_vr/ert_base.dmm
@@ -456,16 +456,16 @@
/obj/item/weapon/gun/energy/sniperrifle{
battery_lock = 0
},
-/obj/item/weapon/gun/energy/gun/martin{
+/obj/item/weapon/gun/energy/gun/compact{
battery_lock = 0
},
-/obj/item/weapon/gun/energy/gun/martin{
+/obj/item/weapon/gun/energy/gun/compact{
battery_lock = 0
},
-/obj/item/weapon/gun/energy/gun/martin{
+/obj/item/weapon/gun/energy/gun/compact{
battery_lock = 0
},
-/obj/item/weapon/gun/energy/gun/martin{
+/obj/item/weapon/gun/energy/gun/compact{
battery_lock = 0
},
/obj/item/weapon/cell/device/weapon,
diff --git a/maps/tether/submaps/tether_centcom.dmm b/maps/tether/submaps/tether_centcom.dmm
index bd6de68333b..74ff2fdf9e6 100644
--- a/maps/tether/submaps/tether_centcom.dmm
+++ b/maps/tether/submaps/tether_centcom.dmm
@@ -1124,8 +1124,8 @@
/area/centcom/specops)
"dv" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled/dark,
@@ -2258,8 +2258,8 @@
/area/centcom/control)
"hq" = (
/obj/structure/table/rack,
-/obj/item/weapon/gun/energy/gun/martin,
-/obj/item/weapon/gun/energy/gun/martin,
+/obj/item/weapon/gun/energy/gun/compact,
+/obj/item/weapon/gun/energy/gun/compact,
/obj/item/device/flash,
/obj/item/device/flash,
/turf/simulated/floor/tiled{