A lot of people have actually been de facto using NodeCore as an
educational tool. Apparently it gets parents excited to introduce
to their kids.
NC optics, in particular, reminds me of Rocky's Boots, which I
only ever got to play briefly in school in like 3rd grade or
something, though NC optics might be for kids a bit more
advanced. :-)
Apparently "rounding error" margin for the bounding box for feet
was too large for MT to detect player's feet on the ground.
Shrink it to a very small amount that should be large enough not
to be lost in rounding error but small enough to allow footstep
sounds.
Apparently an object having had automatic
rotate set in properties in the past will cause its
rotation to retain some unknowable offset,
presumably calculated client-side and not
matching the ent's yaw. Entity replacement
(i.e. backing out reuse) is the simplest fix and
the transient one-time flicker is better than
losing the stack fullness indicator from yaw.
Soaking recipe fails will result in a lot of clearing
of old soaking values out of node meta, which is
very slow in the common case of e.g. dirt that's
not near water and thus should not be soaking in
the first place.
Skip node meta writes if the node meta already
contains the correct data, by doing a cached read
and check before writing, instead of blindly
writing.
This speeds up performance of soaking API by
quite a lot, especially in the more or less
pathological case of soaking dirt to sand, which
involves clearing the metadata from thousands
of nodes each run. Knowing that the nodes
had already had their metadata cleared is
very helpful.
- This nudges the player upward a bit and gets the
feet of the model out of the ground.
- This also compensates for a rounding issue that
causes players to be detected as stuck in the
node below their feet instead of the space above
it. The old workaround worked for pushout but
didn't help with mods like ziprunes.
- This nudges the player upward a bit and gets the
feet of the model out of the ground.
- This also compensates for a rounding issue that
causes players to be detected as stuck in the
node below their feet instead of the space above
it. The old workaround worked for pushout but
didn't help with mods like ziprunes.
Apparently metarefs are cached somehow such that
values written to them are not returned from subsequent
reads. Must be an engine bug, but it's probably not
worth trying to fix it at this point. Some startup jank
is apparently inevitable anyway, and a 2 second cooldown
time is not easily exploitable by restarting the world.
Apparently metarefs are cached somehow such that
values written to them are not returned from subsequent
reads. Must be an engine bug, but it's probably not
worth trying to fix it at this point. Some startup jank
is apparently inevitable anyway, and a 2 second cooldown
time is not easily exploitable by restarting the world.
These cause some issues, like the ability to soak
dirt under water for a short time to initialize the
soaking metadata, then remove the water flow,
then add it in and have leaching complete instantly
because the neighbor check prevented the soaking
ABM from firing to detect that the water was
removed.
In the course of investigating why ABMs are so slow
to begin with, it was discovered that having neighbor
checks can slow an ABM down by a factor of something
like 7x, so clearly the assumption that the neigbor check
being done in C++ as "efficient" was false. This means
that we may be better off just always firing the ABM and
letting Lua check only a couple of relevant nodes (e.g.
for water flows in the space above) instead for
performance.
The main performance concern was dirt leaching, since
dirt generates naturally in the world in bulk, but if the
single check for water above may be faster than checking
all 26 neighbors in C++ anyway, we might as well let the
soaking API run for it so that it can detect the water having
been removed and reset the counters.
- Run all settings through a common API.
- Use modname prefix consistently for setting
keys instead of "nodecore".
- Add automatic dumping of settingtypes.txt
metadata for maintenance.
- Include initial settingtypes.txt for game for
main menu use.
- Remove per-recipe tuning for pummel recipes,
as there were way too many of those to be
possibly useful and it was clogging up the
settings menu. Use tool rate adjustments to
control it instead.
- Remove vestigial enable_damage setting.
The corresponding engine feature has been merged and will become
available in MT 5.5+, and the corresponding NodeCore code already
detects whether it's available or not and falls back gracefully
for existing releases.
https://github.com/minetest/minetest/pull/11405#event-5000287764
Items placed on top of a spinning horizontal door are
supposed to be flung outward preferentially and only
stay near the hub if held back by a wall. Rewriting the
door conveyance logic apparently switched this.
Try to make sure doors don't have to wait arbitrarily long
for a patrol ABM to fire if their DNT was lost and they're
part of a stable circuit. This seems to have caused some
sponge squeezers in particularly busy areas to stop for a
while when first loaded sometimes, which can interrupt
the water flow they provide, which can lead to a fire
hazard.
If an item was settling too far away from where the item ent
landed, e.g. if pushed out by other settling items at the same
place, then it was using entity position to get visinv data
instead of node position.
Inform visinv ents of their actual node position instead of relying
on the object being reasonably close and rounding. This fixes
multiple potential issues with visinv entity display and allows
these entities to be displaced arbitrarily far from their home
node and still function.
When a thrown item settles into a node space and
becomes a visinv node, reuse the existing entity instead
of deleting the old one and creating a new one, if
possible.