diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 71fe793c3cc..7f5a9263de6 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -2,13 +2,13 @@
## What Does This PR Do
-
+
## Why It's Good For The Game
-
+
## Images of changes
-
+
## Changelog
:cl:
@@ -27,3 +27,4 @@ experiment: Added an experimental thingy
+
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a413f2f4dfd..b6d5ddfed6d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,4 +2,4 @@
"workbench.editorAssociations": {
"*.dmi": "imagePreview.previewEditor"
}
-}
+}
\ No newline at end of file
diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm
index 0c53b2cc131..0d7a945ffde 100644
--- a/code/__HELPERS/_logging.dm
+++ b/code/__HELPERS/_logging.dm
@@ -144,6 +144,9 @@ GLOBAL_PROTECT(log_end)
rustg_log_write(GLOB.sql_log, "[text][GLOB.log_end]")
SEND_TEXT(world.log, text) // Redirect it to DD too
+/proc/log_chat_debug(text)
+ rustg_log_write(GLOB.chat_debug_log, "[text][GLOB.log_end]")
+
// A logging proc that only outputs after setup is done, to
// help devs test initialization stuff that happens a lot
/proc/log_after_setup(message)
diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm
index cb953a2a503..c111aff28cf 100644
--- a/code/_globalvars/logging.dm
+++ b/code/_globalvars/logging.dm
@@ -19,6 +19,8 @@ GLOBAL_VAR(http_log)
GLOBAL_PROTECT(http_log)
GLOBAL_VAR(sql_log)
GLOBAL_PROTECT(sql_log)
+GLOBAL_VAR(chat_debug_log)
+GLOBAL_PROTECT(chat_debug_log)
GLOBAL_VAR(round_id)
GLOBAL_PROTECT(round_id)
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index ffa434e7f2d..d0674e34049 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -225,5 +225,6 @@
log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!")
message_admins("[key_name_admin(usr)] emagged [key_name_admin(R)] using robotic console!")
R.emagged = TRUE
+ R.module.rebuild_modules()
to_chat(R, "Failsafe protocols overriden. New tools available.")
. = TRUE
diff --git a/code/game/world.dm b/code/game/world.dm
index e5bab32cf55..0e654fb6e01 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -251,6 +251,7 @@ GLOBAL_LIST_EMPTY(world_topic_handlers)
GLOB.tgui_log = "[GLOB.log_directory]/tgui.log"
GLOB.http_log = "[GLOB.log_directory]/http.log"
GLOB.sql_log = "[GLOB.log_directory]/sql.log"
+ GLOB.chat_debug_log = "[GLOB.log_directory]/chat_debug.log"
start_log(GLOB.world_game_log)
start_log(GLOB.world_href_log)
start_log(GLOB.world_runtime_log)
@@ -258,6 +259,7 @@ GLOBAL_LIST_EMPTY(world_topic_handlers)
start_log(GLOB.tgui_log)
start_log(GLOB.http_log)
start_log(GLOB.sql_log)
+ start_log(GLOB.chat_debug_log)
// This log follows a special format and this path should NOT be used for anything else
GLOB.runtime_summary_log = "data/logs/runtime_summary.log"
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index fe1799b5048..455d7a38aff 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -680,7 +680,7 @@
if(query_find_link.NextRow())
if(query_find_link.item[1])
if(!fromban)
- to_chat(src, "Your forum account is already set. (" + query_find_link.item[1] + ")")
+ to_chat(src, "Your forum account is already set. ([query_find_link.item[1]])")
qdel(query_find_link)
return
qdel(query_find_link)
diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm
index 7d4b6250ae3..0bf1d67bf71 100644
--- a/code/modules/mining/lavaland/loot/colossus_loot.dm
+++ b/code/modules/mining/lavaland/loot/colossus_loot.dm
@@ -232,9 +232,21 @@
/obj/machinery/anomalous_crystal/helpers/attack_ghost(mob/dead/observer/user)
..()
if(ready_to_deploy)
+ if(!istype(user)) // No revs allowed
+ return
+ if(cannotPossess(user))
+ to_chat(user, "Upon using the antagHUD you forfeited the ability to join the round.")
+ return
+ if(!user.can_reenter_corpse)
+ to_chat(user, "You have forfeited the right to respawn.")
+ return
var/be_helper = alert("Become a Lightgeist? (Warning, You can no longer be cloned!)",,"Yes","No")
if(be_helper == "No")
return
+ if(!loc || QDELETED(src) || QDELETED(user))
+ if(user)
+ to_chat(user, "[src] is no longer usable!")
+ return
var/mob/living/simple_animal/hostile/lightgeist/W = new /mob/living/simple_animal/hostile/lightgeist(get_turf(loc))
W.key = user.key
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index 94639805985..ddb43a387c6 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -96,7 +96,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
for(var/g in GLOB.GPS_list)
var/obj/item/gps/G = g
var/turf/GT = get_turf(G)
- if(!G.tracking || G == src)
+ if(isnull(GT) || !G.tracking || G == src)
continue
if((G.local || same_z) && (GT.z != T.z))
continue
diff --git a/goon/code/datums/browserOutput.dm b/goon/code/datums/browserOutput.dm
index 431aa3d90bd..786b09e2da2 100644
--- a/goon/code/datums/browserOutput.dm
+++ b/goon/code/datums/browserOutput.dm
@@ -20,7 +20,6 @@ var/list/chatResources = list(
#define MAX_COOKIE_LENGTH 5
/var/savefile/iconCache = new /savefile("data/iconCache.sav")
-/var/chatDebug = file("data/chatDebug.log")
/datum/chatOutput
var/client/owner = null
@@ -92,7 +91,10 @@ var/list/chatResources = list(
data = doneLoading(arglist(params))
if("debug")
- data = debug(arglist(params))
+ if(!length(params))
+ return
+ var/error = params[1]
+ log_chat_debug("Client: [owner.key || owner] triggered JS error: [error][GLOB.log_end]")
if("ping")
data = ping(arglist(params))
@@ -201,10 +203,6 @@ var/list/chatResources = list(
/datum/chatOutput/proc/ping()
return "pong"
-/datum/chatOutput/proc/debug(error)
- error = "\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client : [owner.key ? owner.key : owner] triggered JS error: [error]"
- chatDebug << error
-
/**
* Sends the lists of code phrases and responses to Goonchat for clientside highlighting
*
diff --git a/tools/mapmerge2/requirements.txt b/tools/mapmerge2/requirements.txt
index 7a6c3f1c94f..f46bdc31d5f 100644
--- a/tools/mapmerge2/requirements.txt
+++ b/tools/mapmerge2/requirements.txt
@@ -1,3 +1,3 @@
pygit2==1.0.1
bidict==0.13.1
-Pillow==8.1.1
+Pillow==8.2.0