Getting straight to the point, since the last time a system for rooms to use other rooms as "prefabs" has been implemented, they can remove entities and resources they don't need, put new ones and override old ones. This has been used for a room that looks almost identical to the first one, except it has a door instead of a button, so many things can be copied over (like wall colliders and background).
While implementing this I noticed that colliders don't handle
Tranformable scaling well, so I made a simple thing
to adjust their position for this. Now, a door that has a mirrored texture has its collider put where it should be and
not on the right.
The interactable objects also now use collisions to detect the player interacting with them instead of just their sizes, this allows for invisible interactable objects, for example.
The asset system has been reworked: now all the asset names are in one place instead of in the objects that use them.
This make it easier to actually reuse things. Also, the asset table in lua now only stores the things that can actually
be shared (textures and sound buffers instead of sprites and sounds) and components create their own instances of classes
that use these shared assets. When the walking module is first loaded, it reads the assets file and puts everything
in it into the
known_assets table, which, through the
__index metamethod on the
assets table, is looked up
when the asset cannot be found for a path to the asset. It is then loaded and put into the
assets table for later usage.
A very simple and basic guessing "puzzle" was implemented for the ending of the first day. It is in the second room and involves three buttons interacting with each other. Along with that, I fixed a bug that was caused by not resetting the physics world when changing rooms (but resetting the ECS world).
Then, I separated the "can this thing be interacted with" and "what does it do" into two different fields in the interactable component. This will probably be used in the future to show a popup when something can be interacted with. It was added to all the objects that can have some condition where the object becomes non-interactable.
A small timeout has been added to object interactions in attempt to prevent interacting with multiple objects at once.
Getting back to the terminal text part, I implemented switching to different rooms from the terminal. In the process, I fixed
YAML cutting off newlines (because I used
> instead of
|). This was a problem in some cases where lua requies newlines,
but in some cases it wasn't noticable at all, so I didn't even discover it at first until a certain point in the script.
And that's it for now.. Thank you for reading my blog post!