diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index 410ca0a92be..cc90ccc5dbf 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -1124,7 +1124,7 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
var/list/partial = splittext(iconData, "{")
return replacetext(copytext_char(partial[2], 3, -5), "\n", "")
-/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE)
+/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE, sourceonly = FALSE)
if (!thing)
return
@@ -1149,6 +1149,8 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
SSassets.transport.register_asset(name, thing)
for (var/thing2 in targets)
SSassets.transport.send_assets(thing2, name)
+ if(sourceonly)
+ return SSassets.transport.get_asset_url(name)
return ""
var/atom/A = thing
if (isnull(dir))
@@ -1174,7 +1176,8 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
SSassets.transport.register_asset(key, I)
for (var/thing2 in targets)
SSassets.transport.send_assets(thing2, key)
-
+ if(sourceonly)
+ return SSassets.transport.get_asset_url(key)
return "
"
/proc/icon2base64html(thing)
@@ -1211,7 +1214,7 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
return "
"
//Costlier version of icon2html() that uses getFlatIcon() to account for overlays, underlays, etc. Use with extreme moderation, ESPECIALLY on mobs.
-/proc/costly_icon2html(thing, target)
+/proc/costly_icon2html(thing, target, sourceonly = FALSE)
if (!thing)
return
@@ -1219,7 +1222,7 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico
return icon2html(thing, target)
var/icon/I = getFlatIcon(thing)
- return icon2html(I, target)
+ return icon2html(I, target, sourceonly = sourceonly)
GLOBAL_LIST_EMPTY(transformation_animation_objects)
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 720b13dfcd4..f218111d0e3 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -94,10 +94,7 @@ SUBSYSTEM_DEF(statpanels)
if(!target_image.loc || target_image.loc.loc != target_mob.listed_turf || !target_image.override)
continue
overrides += target_image.loc
- if(!(REF(target_mob.listed_turf) in cached_images))
- target << browse_rsc(getFlatIcon(target_mob.listed_turf, no_anim = TRUE), "[REF(target_mob.listed_turf)].png")
- cached_images += REF(target_mob.listed_turf)
- turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), "[REF(target_mob.listed_turf)].png")
+ turfitems[++turfitems.len] = list("[target_mob.listed_turf]", REF(target_mob.listed_turf), costly_icon2html(target_mob.listed_turf, target, sourceonly=TRUE))
for(var/tc in target_mob.listed_turf)
var/atom/movable/turf_content = tc
if(turf_content.mouse_opacity == MOUSE_OPACITY_TRANSPARENT)
@@ -109,10 +106,7 @@ SUBSYSTEM_DEF(statpanels)
if(turf_content.IsObscured())
continue
if(length(turfitems) < 30) // only create images for the first 30 items on the turf, for performance reasons
- if(!(REF(turf_content) in cached_images))
- target << browse_rsc(getFlatIcon(turf_content, no_anim = TRUE), "[REF(turf_content)].png")
- cached_images += REF(turf_content)
- turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), "[REF(turf_content)].png")
+ turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content), costly_icon2html(turf_content, target, sourceonly=TRUE))
else
turfitems[++turfitems.len] = list("[turf_content.name]", REF(turf_content))
turfitems = url_encode(json_encode(turfitems))
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 01651974701..98ebe196792 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -1003,8 +1003,14 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
if(IsAdminAdvancedProcCall())
return
var/list/verblist = list()
+ var/list/verbstoprocess = verbs.Copy()
+ if(mob)
+ verbstoprocess += mob.verbs
+ for(var/AM in mob.contents)
+ var/atom/movable/thing = AM
+ verbstoprocess += thing.verbs
verb_tabs.Cut()
- for(var/thing in (verbs + mob?.verbs))
+ for(var/thing in verbstoprocess)
var/procpath/verb_to_init = thing
if(!verb_to_init)
continue
diff --git a/html/statbrowser.html b/html/statbrowser.html
index db582457869..97aa1aec006 100644
--- a/html/statbrowser.html
+++ b/html/statbrowser.html
@@ -4,6 +4,7 @@