diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm
index 3237cf5d35..e60b72073f 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm
@@ -278,6 +278,7 @@
animate(src, alpha = 255, time = 10, flags = ANIMATION_END_NOW) //we may have a previous animation going. finish it first, then do this one without delay.
sleep(10)
//as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality
+ var/consumed_vitality
while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src) && !L.buckled)
sigil_active = TRUE
if(animation_number >= 4)
@@ -286,7 +287,8 @@
animation_number++
if(!is_servant_of_ratvar(L))
var/vitality_drained = 0
- if(L.stat == DEAD)
+ if(L.stat == DEAD && !consumed_vitality)
+ consumed_vitality = TRUE //Prevent the target from being consumed multiple times
vitality_drained = L.maxHealth
var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src))
animate(V, alpha = 0, transform = matrix()*2, time = 8)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 43454f3bd4..97e3669dc0 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -514,6 +514,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
set category = "Mapping"
set name = "Test Areas"
+ var/list/dat = list()
var/list/areas_all = list()
var/list/areas_with_APC = list()
var/list/areas_with_multiple_APCs = list()
@@ -525,6 +526,9 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
var/list/areas_with_camera = list()
var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin))
+ if(on_station)
+ dat += "Only checking areas on station z-levels.
"
+
for(var/area/A in world)
if(on_station)
var/turf/picked = safepick(get_area_turfs(A.type))
@@ -536,6 +540,9 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
for(var/obj/machinery/power/apc/APC in GLOB.apcs_list)
var/area/A = APC.area
+ if(!A) //This is usually an indicator that the machines subsystem hasn't finished initializing.
+ dat += "Skipped over [APC] in invalid location, [APC.loc]. Game likely hasn't finished setting up yet.
"
+ continue
if(!(A.type in areas_with_APC))
areas_with_APC.Add(A.type)
else if(A.type in areas_all)
@@ -543,31 +550,49 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
for(var/obj/machinery/airalarm/AA in GLOB.machines)
var/area/A = get_area(AA)
+ if(!A) //Make sure the target isn't inside an object, which results in runtimes.
+ dat += "Skipped over [AA] in invalid location, [AA.loc].
"
+ continue
if(!(A.type in areas_with_air_alarm))
areas_with_air_alarm.Add(A.type)
for(var/obj/machinery/requests_console/RC in GLOB.machines)
var/area/A = get_area(RC)
+ if(!A)
+ dat += "Skipped over [RC] in invalid location, [RC.loc].
"
+ continue
if(!(A.type in areas_with_RC))
areas_with_RC.Add(A.type)
for(var/obj/machinery/light/L in GLOB.machines)
var/area/A = get_area(L)
+ if(!A)
+ dat += "Skipped over [L] in invalid location, [L.loc].
"
+ continue
if(!(A.type in areas_with_light))
areas_with_light.Add(A.type)
for(var/obj/machinery/light_switch/LS in GLOB.machines)
var/area/A = get_area(LS)
+ if(!A)
+ dat += "Skipped over [LS] in invalid location, [LS.loc].
"
+ continue
if(!(A.type in areas_with_LS))
areas_with_LS.Add(A.type)
for(var/obj/item/device/radio/intercom/I in GLOB.machines)
var/area/A = get_area(I)
+ if(!A)
+ dat += "Skipped over [I] in invalid location, [I.loc].
"
+ continue
if(!(A.type in areas_with_intercom))
areas_with_intercom.Add(A.type)
for(var/obj/machinery/camera/C in GLOB.machines)
var/area/A = get_area(C)
+ if(!A)
+ dat += "Skipped over [C] in invalid location, [C.loc].
"
+ continue
if(!(A.type in areas_with_camera))
areas_with_camera.Add(A.type)
@@ -580,47 +605,52 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
var/list/areas_without_camera = areas_all - areas_with_camera
if(areas_without_APC.len)
- to_chat(world, "AREAS WITHOUT AN APC:")
+ dat += "
AREAS WITHOUT AN APC:
"
for(var/areatype in areas_without_APC)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_with_multiple_APCs.len)
- to_chat(world, "AREAS WITH MULTIPLE APCS:")
+ dat += "AREAS WITH MULTIPLE APCS:
"
for(var/areatype in areas_with_multiple_APCs)
- to_chat(world,"* [areatype]")
+ dat += "[areatype]
"
if(areas_without_air_alarm.len)
- to_chat(world, "AREAS WITHOUT AN AIR ALARM:")
+ dat += "AREAS WITHOUT AN AIR ALARM:
"
for(var/areatype in areas_without_air_alarm)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_without_RC.len)
- to_chat(world, "AREAS WITHOUT A REQUEST CONSOLE:")
+ dat += "AREAS WITHOUT A REQUEST CONSOLE:
"
for(var/areatype in areas_without_RC)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_without_light.len)
- to_chat(world, "AREAS WITHOUT ANY LIGHTS:")
+ dat += "AREAS WITHOUT ANY LIGHTS:
"
for(var/areatype in areas_without_light)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_without_LS.len)
- to_chat(world, "AREAS WITHOUT A LIGHT SWITCH:")
+ dat += "AREAS WITHOUT A LIGHT SWITCH:
"
for(var/areatype in areas_without_LS)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_without_intercom.len)
- to_chat(world, "AREAS WITHOUT ANY INTERCOMS:")
+ dat += "AREAS WITHOUT ANY INTERCOMS:
"
for(var/areatype in areas_without_intercom)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(areas_without_camera.len)
- to_chat(world, "AREAS WITHOUT ANY CAMERAS:")
+ dat += "AREAS WITHOUT ANY CAMERAS:
"
for(var/areatype in areas_without_camera)
- to_chat(world, "* [areatype]")
+ dat += "[areatype]
"
if(!(areas_with_APC.len || areas_with_multiple_APCs.len || areas_with_air_alarm.len || areas_with_RC.len || areas_with_light.len || areas_with_LS.len || areas_with_intercom.len || areas_with_camera.len))
- to_chat(world, "No problem areas!")
+ dat += "No problem areas!"
+
+ var/datum/browser/popup = new(usr, "testareas", "Test Areas", 500, 750)
+ popup.set_content(dat.Join())
+ popup.open()
+
/client/proc/cmd_admin_areatest_station()
set category = "Mapping"
diff --git a/html/changelogs/AutoChangeLog-pr-4717.yml b/html/changelogs/AutoChangeLog-pr-4717.yml
new file mode 100644
index 0000000000..ec775d7260
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4717.yml
@@ -0,0 +1,4 @@
+author: "Xhuis"
+delete-after: True
+changes:
+ - bugfix: "Vitality matrices will no longer go off multiple times for one corpse."
diff --git a/html/changelogs/AutoChangeLog-pr-4718.yml b/html/changelogs/AutoChangeLog-pr-4718.yml
new file mode 100644
index 0000000000..637908aa12
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4718.yml
@@ -0,0 +1,4 @@
+author: "ShizCalev"
+delete-after: True
+changes:
+ - bugfix: "The test areas debug command now works again!"
diff --git a/sound/vore/Prey/death_01.ogg b/sound/vore/prey/death_01.ogg
similarity index 100%
rename from sound/vore/Prey/death_01.ogg
rename to sound/vore/prey/death_01.ogg
diff --git a/sound/vore/Prey/death_02.ogg b/sound/vore/prey/death_02.ogg
similarity index 100%
rename from sound/vore/Prey/death_02.ogg
rename to sound/vore/prey/death_02.ogg
diff --git a/sound/vore/Prey/death_03.ogg b/sound/vore/prey/death_03.ogg
similarity index 100%
rename from sound/vore/Prey/death_03.ogg
rename to sound/vore/prey/death_03.ogg
diff --git a/sound/vore/Prey/death_04.ogg b/sound/vore/prey/death_04.ogg
similarity index 100%
rename from sound/vore/Prey/death_04.ogg
rename to sound/vore/prey/death_04.ogg
diff --git a/sound/vore/Prey/death_05.ogg b/sound/vore/prey/death_05.ogg
similarity index 100%
rename from sound/vore/Prey/death_05.ogg
rename to sound/vore/prey/death_05.ogg
diff --git a/sound/vore/Prey/death_06.ogg b/sound/vore/prey/death_06.ogg
similarity index 100%
rename from sound/vore/Prey/death_06.ogg
rename to sound/vore/prey/death_06.ogg
diff --git a/sound/vore/Prey/death_07.ogg b/sound/vore/prey/death_07.ogg
similarity index 100%
rename from sound/vore/Prey/death_07.ogg
rename to sound/vore/prey/death_07.ogg
diff --git a/sound/vore/Prey/death_08.ogg b/sound/vore/prey/death_08.ogg
similarity index 100%
rename from sound/vore/Prey/death_08.ogg
rename to sound/vore/prey/death_08.ogg
diff --git a/sound/vore/Prey/death_09.ogg b/sound/vore/prey/death_09.ogg
similarity index 100%
rename from sound/vore/Prey/death_09.ogg
rename to sound/vore/prey/death_09.ogg
diff --git a/sound/vore/Prey/death_10.ogg b/sound/vore/prey/death_10.ogg
similarity index 100%
rename from sound/vore/Prey/death_10.ogg
rename to sound/vore/prey/death_10.ogg
diff --git a/sound/vore/Prey/death_11.ogg b/sound/vore/prey/death_11.ogg
similarity index 100%
rename from sound/vore/Prey/death_11.ogg
rename to sound/vore/prey/death_11.ogg
diff --git a/sound/vore/Prey/death_12.ogg b/sound/vore/prey/death_12.ogg
similarity index 100%
rename from sound/vore/Prey/death_12.ogg
rename to sound/vore/prey/death_12.ogg
diff --git a/sound/vore/Prey/death_13.ogg b/sound/vore/prey/death_13.ogg
similarity index 100%
rename from sound/vore/Prey/death_13.ogg
rename to sound/vore/prey/death_13.ogg
diff --git a/sound/vore/Prey/digest_01.ogg b/sound/vore/prey/digest_01.ogg
similarity index 100%
rename from sound/vore/Prey/digest_01.ogg
rename to sound/vore/prey/digest_01.ogg
diff --git a/sound/vore/Prey/digest_02.ogg b/sound/vore/prey/digest_02.ogg
similarity index 100%
rename from sound/vore/Prey/digest_02.ogg
rename to sound/vore/prey/digest_02.ogg
diff --git a/sound/vore/Prey/digest_03.ogg b/sound/vore/prey/digest_03.ogg
similarity index 100%
rename from sound/vore/Prey/digest_03.ogg
rename to sound/vore/prey/digest_03.ogg
diff --git a/sound/vore/Prey/digest_04.ogg b/sound/vore/prey/digest_04.ogg
similarity index 100%
rename from sound/vore/Prey/digest_04.ogg
rename to sound/vore/prey/digest_04.ogg
diff --git a/sound/vore/Prey/digest_05.ogg b/sound/vore/prey/digest_05.ogg
similarity index 100%
rename from sound/vore/Prey/digest_05.ogg
rename to sound/vore/prey/digest_05.ogg
diff --git a/sound/vore/Prey/digest_06.ogg b/sound/vore/prey/digest_06.ogg
similarity index 100%
rename from sound/vore/Prey/digest_06.ogg
rename to sound/vore/prey/digest_06.ogg
diff --git a/sound/vore/Prey/digest_07.ogg b/sound/vore/prey/digest_07.ogg
similarity index 100%
rename from sound/vore/Prey/digest_07.ogg
rename to sound/vore/prey/digest_07.ogg
diff --git a/sound/vore/Prey/digest_08.ogg b/sound/vore/prey/digest_08.ogg
similarity index 100%
rename from sound/vore/Prey/digest_08.ogg
rename to sound/vore/prey/digest_08.ogg
diff --git a/sound/vore/Prey/digest_09.ogg b/sound/vore/prey/digest_09.ogg
similarity index 100%
rename from sound/vore/Prey/digest_09.ogg
rename to sound/vore/prey/digest_09.ogg
diff --git a/sound/vore/Prey/digest_10.ogg b/sound/vore/prey/digest_10.ogg
similarity index 100%
rename from sound/vore/Prey/digest_10.ogg
rename to sound/vore/prey/digest_10.ogg
diff --git a/sound/vore/Prey/digest_11.ogg b/sound/vore/prey/digest_11.ogg
similarity index 100%
rename from sound/vore/Prey/digest_11.ogg
rename to sound/vore/prey/digest_11.ogg
diff --git a/sound/vore/Prey/digest_12.ogg b/sound/vore/prey/digest_12.ogg
similarity index 100%
rename from sound/vore/Prey/digest_12.ogg
rename to sound/vore/prey/digest_12.ogg
diff --git a/sound/vore/Prey/digest_13.ogg b/sound/vore/prey/digest_13.ogg
similarity index 100%
rename from sound/vore/Prey/digest_13.ogg
rename to sound/vore/prey/digest_13.ogg
diff --git a/sound/vore/Prey/digest_14.ogg b/sound/vore/prey/digest_14.ogg
similarity index 100%
rename from sound/vore/Prey/digest_14.ogg
rename to sound/vore/prey/digest_14.ogg
diff --git a/sound/vore/Prey/digest_15.ogg b/sound/vore/prey/digest_15.ogg
similarity index 100%
rename from sound/vore/Prey/digest_15.ogg
rename to sound/vore/prey/digest_15.ogg
diff --git a/sound/vore/Prey/digest_16.ogg b/sound/vore/prey/digest_16.ogg
similarity index 100%
rename from sound/vore/Prey/digest_16.ogg
rename to sound/vore/prey/digest_16.ogg
diff --git a/sound/vore/Prey/digest_17.ogg b/sound/vore/prey/digest_17.ogg
similarity index 100%
rename from sound/vore/Prey/digest_17.ogg
rename to sound/vore/prey/digest_17.ogg
diff --git a/sound/vore/Prey/digest_18.ogg b/sound/vore/prey/digest_18.ogg
similarity index 100%
rename from sound/vore/Prey/digest_18.ogg
rename to sound/vore/prey/digest_18.ogg
diff --git a/sound/vore/Prey/escape.ogg b/sound/vore/prey/escape.ogg
similarity index 100%
rename from sound/vore/Prey/escape.ogg
rename to sound/vore/prey/escape.ogg
diff --git a/sound/vore/Prey/insertion_01.ogg b/sound/vore/prey/insertion_01.ogg
similarity index 100%
rename from sound/vore/Prey/insertion_01.ogg
rename to sound/vore/prey/insertion_01.ogg
diff --git a/sound/vore/Prey/insertion_02.ogg b/sound/vore/prey/insertion_02.ogg
similarity index 100%
rename from sound/vore/Prey/insertion_02.ogg
rename to sound/vore/prey/insertion_02.ogg
diff --git a/sound/vore/Prey/loop.ogg b/sound/vore/prey/loop.ogg
similarity index 100%
rename from sound/vore/Prey/loop.ogg
rename to sound/vore/prey/loop.ogg
diff --git a/sound/vore/Prey/schlorp.ogg b/sound/vore/prey/schlorp.ogg
similarity index 100%
rename from sound/vore/Prey/schlorp.ogg
rename to sound/vore/prey/schlorp.ogg
diff --git a/sound/vore/Prey/squish_01.ogg b/sound/vore/prey/squish_01.ogg
similarity index 100%
rename from sound/vore/Prey/squish_01.ogg
rename to sound/vore/prey/squish_01.ogg
diff --git a/sound/vore/Prey/squish_02.ogg b/sound/vore/prey/squish_02.ogg
similarity index 100%
rename from sound/vore/Prey/squish_02.ogg
rename to sound/vore/prey/squish_02.ogg
diff --git a/sound/vore/Prey/squish_03.ogg b/sound/vore/prey/squish_03.ogg
similarity index 100%
rename from sound/vore/Prey/squish_03.ogg
rename to sound/vore/prey/squish_03.ogg
diff --git a/sound/vore/Prey/squish_04.ogg b/sound/vore/prey/squish_04.ogg
similarity index 100%
rename from sound/vore/Prey/squish_04.ogg
rename to sound/vore/prey/squish_04.ogg
diff --git a/sound/vore/Prey/struggle_01.ogg b/sound/vore/prey/struggle_01.ogg
similarity index 100%
rename from sound/vore/Prey/struggle_01.ogg
rename to sound/vore/prey/struggle_01.ogg
diff --git a/sound/vore/Prey/struggle_02.ogg b/sound/vore/prey/struggle_02.ogg
similarity index 100%
rename from sound/vore/Prey/struggle_02.ogg
rename to sound/vore/prey/struggle_02.ogg
diff --git a/sound/vore/Prey/struggle_03.ogg b/sound/vore/prey/struggle_03.ogg
similarity index 100%
rename from sound/vore/Prey/struggle_03.ogg
rename to sound/vore/prey/struggle_03.ogg
diff --git a/sound/vore/Prey/struggle_04.ogg b/sound/vore/prey/struggle_04.ogg
similarity index 100%
rename from sound/vore/Prey/struggle_04.ogg
rename to sound/vore/prey/struggle_04.ogg
diff --git a/sound/vore/Prey/struggle_05.ogg b/sound/vore/prey/struggle_05.ogg
similarity index 100%
rename from sound/vore/Prey/struggle_05.ogg
rename to sound/vore/prey/struggle_05.ogg
diff --git a/sound/vore/Prey/swallow_01.ogg b/sound/vore/prey/swallow_01.ogg
similarity index 100%
rename from sound/vore/Prey/swallow_01.ogg
rename to sound/vore/prey/swallow_01.ogg
diff --git a/sound/vore/Prey/swallow_02.ogg b/sound/vore/prey/swallow_02.ogg
similarity index 100%
rename from sound/vore/Prey/swallow_02.ogg
rename to sound/vore/prey/swallow_02.ogg
diff --git a/sound/vore/Prey/taurswallow.ogg b/sound/vore/prey/taurswallow.ogg
similarity index 100%
rename from sound/vore/Prey/taurswallow.ogg
rename to sound/vore/prey/taurswallow.ogg