ID:1117970
 
Keywords: bug, continue, overlays, png
(See the best response by Jemai1.)
Problem description:


No code to copy/paste, I'm completely clueless.

Lately, players on my game have started turning into buttons. Namely the 'Continue' button they only encounter ONCE on character creation, and that's even as a different mob than they are! (You log in as /mob/Creation, then a /mob/Player gets made and you become a player).

They log in with the Continue button as an overlay. If I strip their overlays completely it's gone, but it's there again next login.

The button is simply:
obj/Login/Continue icon='Continue.png'


Mobs also use a seperate "Overlay" list so they don't ever get saved - overlays get blanked right before the saving starts, and filled in again on Load according to what's in Overlays.
I've already added a filter when adding from Overlays to block everything from istype(/obj/Login) yet the problem still persists.


Bear in mind, this is COMPLETELY. RANDOM. Some people see others as buttons, others don't. I've already deleted the .rsc files several times, and cleared out Cache. I have no solid reasoning as to why this might be happening.

Any help is tremendously appreciated.
After extensive testing, it seems that one hairstyle icon, upon being loaded, for some displayed the Continue button. After forcing those players to manually delete their Cache folders, their problem was fixed.

Now two things.

1) There should definitely be a feature available for developers to clear the player's cache.
2) How the hell did this happen?
In response to Emasym
Well, I've seen similar things occur when a developer updates the rsc without a clean compile, it'll 'corrupt' and mix up the resources. Clean compiling and using the new rsc always fixes issues like this for me.
Best response
Dream Tutor: The Pitfalls of Savefiles explains this issue.

Here's something you may not have known about BYOND vars: When you're just running a game, a var that's set to one of your icon files such as character_icon='elf.dmi' is going to hold a cache reference. Basically this means BYOND thinks of 'elf.dmi' as (for example) the 14th item in the .rsc file. (If you used the \ref macro to take a look at this var, you'd see a value of "[0xc00000d]".) But if the engine only saved that info and you added some files to the game later, so that 'elf.dmi' was now the 17th file in the resources, then you'd have some funny-looking icons when you loaded the character again. For all you know the 14th file could now be a sound file, or a wall icon. BYOND gets around this problem by saving the entire icon file. When you loaded the character, the engine would notice that the file it was loading was the same as cache file #17.

To have a complete refresh of resources, you might want to take advantage of the preload_rsc var.

If you want to force a complete refresh, simply change the name of the resource package. For example, you could put a version number in the name of the file: mygame_rsc_01.zip, mygame_rsc_02.zip, and so on.
nice job working on fixes and bugs man keep them check ok:)