diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index b826029649c..948ed00d564 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -329,6 +329,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
/// Versioning hack! Versioning hack! Versioning hack!
var/list/current_version = list()
+ var/fuzzy = FALSE //Fuzzy scaling
+
/datum/preferences/New(client/C)
parent = C
@@ -635,6 +637,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Sprite Size: [features["body_size"]*100]%
"
if (CONFIG_GET(number/body_width_min) != CONFIG_GET(number/body_width_max))
dat += "Sprite Width: [features["body_width"]*100]%
"
+ dat += "Scaled Appearance: [fuzzy ? "Fuzzy" : "Sharp"]
"
if(!(NOEYES in pref_species.species_traits))
dat += "
Eye Type
"
@@ -3343,6 +3346,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(dorfy != "No")
features["body_size"] = new_body_size
+ if("toggle_fuzzy")
+ fuzzy = !fuzzy
+
if("body_width")
var/min = CONFIG_GET(number/body_width_min)
var/max = CONFIG_GET(number/body_width_max)
@@ -3911,6 +3917,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.special_i = special_i
character.special_a = special_a
character.special_l = special_l
+ character.fuzzy = fuzzy
character.left_eye_color = left_eye_color
character.right_eye_color = right_eye_color
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 44962978c90..98f93238949 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -635,6 +635,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["body_model"] >> features["body_model"]
S["body_size"] >> features["body_size"]
S["body_width"] >> features["body_width"]
+
+ //Fuzzy scaling
+ S["feature_fuzzy"] >> fuzzy
+
S["age"] >> age
S["hair_color"] >> hair_color
S["facial_hair_color"] >> facial_hair_color
@@ -951,6 +955,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
width_max = CONFIG_GET(number/body_width_max)
features["body_width"] = sanitize_num_clamp(features["body_width"], width_min, width_max, RESIZE_DEFAULT_SIZE, 0.01)
+ fuzzy = sanitize_integer(fuzzy, 0, 1, initial(fuzzy))
+
var/static/list/B_sizes
if(!B_sizes)
var/list/L = CONFIG_GET(keyed_list/breasts_cups_prefs)
@@ -1119,6 +1125,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
"Mobility - Can not Run",
)
WRITE_FILE(S["all_quirks"], debug_oldies)
+
+ WRITE_FILE(S["feature_fuzzy"], fuzzy)
matchmaking_prefs = sanitize_matchmaking_prefs(matchmaking_prefs)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 502970a4c28..04599b08c9e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1561,3 +1561,10 @@
ghostize()
qdel(src)
//End Coyote Add
+
+/mob/living/verb/switch_scaling()
+ set name = "Switch scaling mode"
+ set category = "IC"
+ set desc = "Switch sharp/fuzzy scaling for current mob."
+ appearance_flags ^= PIXEL_SCALE
+ fuzzy = !fuzzy
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index c810302babf..90bce1f136d 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -162,3 +162,5 @@
//---End
var/disconnect_time //how long have we been dc'd for
+
+ var/fuzzy = FALSE
diff --git a/code/modules/mob/living/update_icons.dm b/code/modules/mob/living/update_icons.dm
index f3fa3d36ba4..7735254d47b 100644
--- a/code/modules/mob/living/update_icons.dm
+++ b/code/modules/mob/living/update_icons.dm
@@ -5,6 +5,8 @@
var/changed = 0
appearance_flags |= PIXEL_SCALE
+ if(fuzzy)
+ appearance_flags &= ~PIXEL_SCALE
if(lying != lying_prev && rotate_on_lying)
changed++
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 2c12fc356d1..2b7a2bbb6b7 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -394,6 +394,7 @@
if(R.mmi.brainmob)
R.mmi.brainmob.real_name = real_name //the name of the brain inside the cyborg is the robotized human's name.
R.mmi.brainmob.name = real_name
+ R.fuzzy = fuzzy //SPLURT ADD - FUZZY
R.job = "Cyborg"
R.notify_ai(NEW_BORG)