The problem is that the server does not notify the client about changes to a room yet. So Player 1 and 2 can be in the same room, both pick up book A and place it in another room. This would lead to two "book A" entities in two different rooms.
After the persistence refactor I've added a networked implementation. In principal this already allows for a multiplayer server. However changes to the world state are only synced on entering a new room. This would most likely lead to inconsistent state, e.g. a book being placed in two rooms.
I've refactored the persistence system of my game entirely. Before the refactor I saved an intermediate representation, which was created by the level generation. When a room was loaded the representation was transformed into entities to be added to the world state. As I also had to track the positions of books and scrolls, I had to pollute the structure further and further. This made adding new mechanics difficult as I had to somehow fit it into this awkward structure.
My new approach is to simply save all entities (I use fat structs to represent everything) belonging to a room in a single file. Whenever something changes in a room, I can just serialize all entities and be done.
I've implemented a simple rectangle packing algorithm, which I want to use for the font texture.
The algorithm is only 40 lines long. It keeps track how far each row is already filled and greedily inserts rectangle at the place where they are "most to the left", starting with the tallest rectangles.