ID:2568616
 
(See the best response by Kaiochao.)
mob
proc
LOGIN()
//src.overlays.Cut()
var/listy=list()
for(var/obj/pickup/O in src.contents)
if(O.is_equipped)
listy+=O
O.Unequip(src)

for(var/obj/pickup/O in listy)
O.Equip(src)
listy-=O

loadme()
if(!src)return
if(fexists("players/[src.key]"))
var/savefile/load
load = new ("players/[src.key]")
load["mob"] >> src
load["x"] >> src.x
load["y"] >> src.y
load["z"] >> src.z

src.LOGIN()

saveme()
var/savefile/save
save = new ("players/[src.key]")
save["mob"] << src
//save["overlays"] << null
save["x"] << src.x
save["y"] << src.y
save["z"] << src.z
client
Del()
if(!src.mob)
return ..()
else
//src.mob.overlays.Cut()
src.mob.saveme()
del(mob)
return ..()



ISSUE:
Overlays are blended onto icon.

Only way to stop overlays from blending into icon is to remove upon client/Del()?

I tried plugging 'save["overlays"] << null' into saveme(). Does not work.
Is this due to 'save["mob"] << src'? If so, how do I workaround(without hardcoding every single var)?

If I add 'src.overlays.Cut()' to the beginning of LOGIN(), before var/listy, then no overlays are added back
onto icon when for() procs run.


EDIT:

Equip(mob/M)/Unequip(mob/M) uses M.overlays+=image(...) and is given layer=MOB_LAYER+1
Best response
If you want to clear what's saved to the mob, you'll have to do it in mob/Write(). In there, the savefile's cd is in the mob itself, so you can modify the savefile's saved entries directly.
mob
Write(savefile/s)
..()
// In Write(), s.cd is set to where the mob's vars are saved by ..().
// s.dir is a list of all saved variables in the cd, so you can remove "overlays" here.
s.dir -= "overlays"
In response to Kaiochao
Perfect!

Thank you.