Our spawn pos is already .5 above the ground. We want only
to correct players that fall through the floow. At -0.95 they
can still walk normal, but instead we correct them at -0.45
which almost always hits them.
I actually broke most insertions into frames. This is much more
careful, and it now tells the player that something just can not
be put in a frame. Tested with breakable nodes, tools, and torch.
The frames autolock on things like flowers. Attempting to unlock
a frame yields a message explaining why some can not be unlocked.
Until now, it was possible for the player to obtain any item if
the frame was left unlocked. The items that are not obtainable
have significant placement liberties that can break many boxes and
potentially allow players to brick their box.
To secure this, we lock all frames automatically and do not allow
them to become unlocked unless they contain obtainable items.
These can be accessed using enter teleporters where is_series==2.
At that point, the `box` meta value determines the category, not
the box id. Then the next box that is unplayed in that category
is offered for play.
For now, the player is sent a message if there are no more
unplayed boxes in a category.
Overly cautiously list all files explicitly that need covering,
so that it's clear that textures were overwritten with Isabella-II
textures everywhere except a few rare cases (screwdriver etc).
Everything made by me is either listed as derivative of the
origin or CC-BY-SA-4.0 by me.
Some of these are copies from the respective origins from mtg,
to make sure we have headers everywhere listing the proper code.
I've relicensed spectator_mode from WT*PL to LGPL-2.1. No other
licenses were changed.
We also need to set the current box meta in memory to 0 num_items,
because otherwise it retains the old (non-0) value, and re-saves that
value when the box is saved.
This works without needing to depend on `signs` here since
we call the embedded on_destruct. We leave other on_destruct
calls alone for now since we may want to retain the current
behavior where no triggers happen if you use this method of
replacing nodes in a puzzle, which is needed for several
puzzles I've made so far.
I'm seeing some players idle forever on the server, and this just
consumes resources that cost money, so, remove them.
This also combines 2 globalstep registrations into one, and reduces
player loops from 2 to 1 as well. The added cost is an extra array
and os.time() call and some basic math.