This seems to reduce steady-state bandwidth
usage when standing still significantly, at least
according to rudimentary tests.
Try to reuse the entity that is already physically
closest to the target position, so to maximize
the chance that nearby player(s) already have
the entity transferred and only need the new
pos data, in case MT is intelligent enough to send
only the needed changes.
During processing of the flammable ignition ABM,
nodes could ignite, causing the new ember nodes
created by this ignition to trigger fire propagation
instantly during the same tick by nodes still yet
to be processed for ABM checks during the same
scan. This often caused large areas of flammable
nodes, like wooden plank skyblocks, to be ignited
instantly in a specific direction from any source
ignition. This led to some "cheap shots" where
players were ruined by fire far more rapidly than
they should be.
Instead of processing flammability checks in
sync, delay them until the next tick, so that we
find all flammables to check before any new
igniters are created. This should tame fire
spreading back down to normal levels.
- Move the player head up to show neck again.
- Limit down-looking to not collide with bandolier.
- Slide head forward/back while rotating to keep it
centered atop the neck and appear connected.
- Pitch player head up/down based on look dir
- Set frame_blend to 0.15, causing 150ms of tweening
from one animation to another, so player bone
movement is smooth.
- Enabling frame_blend breaks some parts of the
anims, but oddly, enabling head pitch control actually
fixes these...
- Head pitch does not follow lookdir 100%, there is
some implied use of vertical eye movement balanced
in, so the player does not look like they're breaking
their neck at extreme angles.
- Support anims specifying a head pitch offset, e.g.
for the swimming anims which require the head to
pitch backward to face forward.
MT seems to have a problem with bones that are not animated
and have exactly 0 rotation, i.e. interpreting this as 180 degrees
(supposedly this is a workaround for some other quirk). Give
the chest and bandolier bones tiny non-zero rotation adjustments
to trick MT into putting them as close as possible to zero without
triggering this bug.
An engine bug can cause bandolier attachments to become
detached from the perspective of a player if they and another
player wander farther than the server's player transfer
distance from one another and then re-meet later.
Sometimes the attached entities appear to be floating at the
place where the player was reloaded from the other player's
perspective instead of attached.
Work around this for now by just periodically regenerating
the bandolier attachments for all players, so that at least if
it happens, it will self-correct in time and not be stuck
indefinitely broken.
This was avoided in the past due to an old engine bug that
caused attachments that were attached while a player was
in 3rd person mode not to be visible to that player until they
toggled view mode again ... but this seems to have been
fixed at least in recent versions.
As of now, other-player bandoliers in MP are probably more
important than own-bandoliers in 3rd person view for most
serious use-cases anyway.
Any time a pummel recipe is completed, release an extra
burst of particles. Useful for recipes that seem to be
taking forever to complete but only because they're
repeatedly completing but not giving any visible hint,
e.g. leaf-bud-tickling.
Everything in NodeCore should already be using
nodecore.gametime instead of minetest.get_gametime().
This API allows an offset to be adjusted between these,
allowing for skipping forward in time.
The idea is to offer an optional "realtime clock" feature via
a mod or config option to allow mobile SP players to advance
time forward for idle mechanics when the game is not
loaded and running, via the realtime clock, to make idle
mechanics more accessible to players on limited battery.
Apparently players and luaentities use the same metatable,
so the polyfill needs to check if it's a player or not before
choosing which get_velocity to call.
Sponge nodes die if exposed to air for >= 2 seconds. They
are still more fragile in item form. This allows reliably
swapping a node used to seal in a living sponge without
instantly killing it, which used to be possible but risky,
depending on racing with the ABM timer.
This can be useful for skyblock mods to ensure that a
"starting tree" has at least enough of certain items to
craft basic tools and start sustained tree farming.
There isn't always a surface below to catch items
that fall into a storebox, so we can't guarantee an
item that falls into a storebox won't just fall out
the bottom. Only allow falling in the top if falling
out the bottom is allowed too.
This fixes glass cases not catching items if the
case is floating in air with nothing solid below it.
There are still some cases it doesn't handle
correctly, like a bare stack node underneath a
form, wherein the item should be allowed to fall
out of the form and combine into the stack.
Allow use of true to indicate no custom options. The check
was originally put in place to allow custom options, but
some mods may use it more simply like the craft check,
where it's meant to be a simple pass/fail.