If you are holding air and the block you're picking exists in your hotbar, your selector moves there instead of the block being brought to the air spot.
If auto rotate is on, when you pick an autorotate block, if a block from the same group already existed in your hotbar, it goes to that spot and replaces the old rotation variant with the new one you picked
The circumstances that cause this to happen are quite rare, which is why I had great difficulty getting it to occur myself. Approximate steps to cause this error are:
1) Do something that causes the Direct3D9 context to be lost for a long period of time, like running a fullscreen Direct3D9 game
2) Get the texture pack changed in ClassiCube while it's still running in the background (e.g. someone summons you to another map)
3) Now come back to this game
4) Gfx_RecreateContext gets called, triggering each subscriber to the ContextRecreated event
5) One of the first subscribers is the TexturePack component, which reload the texture pack (because of step 2). Sometimes this causes default.png to be changed, which will then cause the Gui to call OnContextRecreated on all the current screens/menus
6) One of the last subscribers is the Gui component, which causes the Gui to call OnContextRecreated on all of the current screens/menus
The problem is that step 5) and 6) means OnContextRecreated is called twice in a row without an OnContextLost, causing some D3D9 resources allocated in step 5) to get leaked, and hence crashing the game later with D3DERR_INVALIDCALL. So the solution is to change Screen_CreateVb to always try deleting the existing vb first before replacing, so that way it doesn't leak
This function was dangerous for use by plugins, because it always assumed UNICODE was defined and so always encoded strings as utf16. However, a dll plugin might not have UNICODE defined and so would be expecting ascii instead of utf16 strings, which would complety fail
Note that this only works when the webpage is served over https, so it doesn't work in multiplayer at all. Additionally, at the time this commit was pushed, only chromium based browsers support the API. (Chrome / Modern Edge / Modern Opera)
This change is necessary because Safari scrolls the page when you press space and the default action is not prevented. However, we also can't just always prevent the default action, because then the key press event for ' ' would never get raised for text input. So this seems like a reasonable compromise.
The temp map file is now properly written to the in-memory filesystem instead of default filesystem, meaning an error is no longer printed to console about a missing file.