Instead of using limited-lifetime particles that need to be
refreshed, use sprite entities, which never need to be replaced
as long as they stay loaded.
There was a short "glitch" when replacing the particles where
they could appear twice, or be absent, for a frame or two. If
we're taking the screenshot at insanely high resolution/AA, which
the automation in this mod enables, we may have fractional FPS,
and the time window when the particles are in an invalid state
may expand to the point where it's impossible to capture a
screenshot with the correct smoke particles.
Making the smoke particles stable this way makes it possible to
reliably capture a screenshot with correct smoke particles at
insanely high quality / low framerate.
The documentation says that position is absolute unless you pass
in absolute = false. This is not correct, as passing in
absolute = true seems to be necessary to fix it. That's what was
necessary to get the behavior back in line with what the old
set_bone_position was.
Moving the head up 1/2 unit was apparently some workaround for an
issue that existed in some previous version, but no longer
applies to 5.9.0 at least.
This is apparently due to some lack of RTL support in MT itself
which is not easily resolved or worked around, so the affected
languages currently just can't be supported.
- Don't produce translated output for languages that are blocked.
- This also works around a package validation error in CDB due to
some unrecognized unicode in the current nc_api.ar.tr file.
- Also don't advertise translation completion for unsupported
languages, since users will not experience the translation.
For a high-resolution texture pack to properly support these, it
MUST use overrides, either to replace the texture with a pre-baked
one, or to correct the combine layer offsets. If a texture pack
does not do this, rescale the images down to 16x16 so that the
resultant image is at least properly aligned at some resolution.
There were severe performance issues when players place objects
like tools or amalgam to soak under a wide enough spread out flow
of flux, as it was recursively backtracing to the source for each
soaking object, which could involve inspecting a ton of nodes each
time.
Instead, try background scanning all flowing flux nodes, and
propagate distance information slowly forward from the source out
to each node. Checking each soaking object is now only a fixed
length validation and cache check. Propagation itself is a fixed
amount of work per node, and the ABM limiter limits the work
involved.
Propagation is a bit slower (possibly a lot slower on a
sufficiently loaded server) so there may be more delays in
soaking response, but it should limit the maximum lag caused by
this mechanic.
The actual distance calculation has changed, so charging rates
may have changed.
According to Rollerozxa, player:set_inventory_formspec has
updated an already-visible form since at least 5.6, so the extra
explicit show_formspec shouldn't have been necessary for a while.
This also resimplifies the form name hack back out, and further
simplifies the player guide code.
This allows us to remove a compatibility hack that risked creating
memory leaks on the server side. There may be other
simplifications possible that aren't known yet (e.g. with
formspec handling)
We are apparently no longer allowed to use show_formspec to replace
an already-open inventory form with another version of the same
form, we have to rename it, and then support 2 different names for
the same form.
This fixes tool infusion/boosting not working after engine
commit e7dd9737.
Before, minetest.after(0, func) was running in FIFO order, but
after it's in LIFO order. Unexpectedly, we were actually relying
on the old behavior unknowingly, as the after(0) to build the AISM
index was racing against the after(0) to register the AISMs for
infusion/boosting. When they were in FIFO order, the AISM index
was rebuilt last, so it included the infusion/boosting AISMs.
We never really intended AISMs to be registered "long" after load
time, but they were never intended not to work "immediately" after
load time. Using after(0) rather than on_mods_loaded callbacks
ensures that all engine item registration MUST be completed
already. However, we don't want to get into an arms race of
registering minetest.after(0.00001) to ensure the AISM index gets
rebuilt after all after(0) registrations. So it's actually cleaner
just to allow AISM registration at any time.
Whenever an AISM is registered, rebuild the index on the next tick
(it's deferred to debounce, since a bunch of AISMs could get
registered in a batch but we only want to rebuild the index once
if possible). This ensures that the AISM index is never out of
date for a non-trivial amount of time, and thus AISMs should
generally work reliably over time now, regardless of when they're
registered.
This may or may not actually work on servers. If it does, then
it may help cut down on log/chat noise from players trying to join
using outdated protocols.
If the player somehow gets beyond map_limit, allow push-out to
work, but continue to treat ignores inside map_limit as non-solid
until they can finish being loaded.
Items can be changed into other items by dropping. This can
replace just the item name, or it can run arbitrary logic and
replace the entire stack.
This is used now to drop shining lenses as normal inactive ones
instantly instead of relying on the AISM to deactivate them
after dropping. It smooths out gameplay logic and may prevent
things like accidentally activating lenses for a moment.
Holding lenses in hand while facing an optic beam causes the
lenses in your hand to shine, but shining lenses didn't stack with
non-shining lenses, so picking up lenses from the ground when in
this state would fail to stack. This fixes that.
builtin:item entities and nc_player_yctiwy apparently already use
the standard unified stack end property system.
This fixes wield items not displaying the correct metadata-driven
overrides (e.g. color or inventory/wield image) when held in
player hands. These features are not used in vanilla but are
probably used in mods.
For at least since cf4bd2d7 (26 months ago) it looks like the
recipe for quenching lode ore back into cobble has required zero
coolant instead of 1+, causing the quench recipe to happen
instantly in situations where the lode cobble should slowly
anneal over time, effectively preventing vanilla game access to
relocating lode ore per intended mechanics.
This fix should make the lode cobble quenching and annealing
recipes function as originally designed again.
Note that some old mods had relied on the inability to reform lode
ore once it's been dug (likely due to not knowing about the
advanced mechanic rather than explicitly relying on the bug) and
these have only been balanced by accident (assuming other mods
hadn't made lode ore diggable, e.g. by adding higher-tier tools).
This fix will fully cement breakage of those mods, though the
process of annealing lode cobble back into ore again will still
limit the rate that free resources can be duplicated.
Some mods (e.g. catrealm_core) set the sky with some values that
don't match the way minetest's get_sky now returns the sky table,
e.g. colors in "#xxxxxx" string vs {r,g,b,a} table format. When
we were comparing the new sky against the old one according to the
engine, this caused a mismatch on every step when this condition
was true, causing a sky change packet every step.
Instead of comparing against the engine's internal copy, just
do that for the first run, and then use the last sky definition we
requested after that, under the assumption that the engine did
correctly set it when we called set_sky last. This should prevent
mismatches when mods disagree with the engine about preferred
format, though only if the mods are themselves consistent.
CDB now used WebP for thumbnails, de facto requiring that users of
the site actually support the format, so since it's already
mandatory, take advantage of it. WebP compresses notably better
than JPEG for comparable quality, so we can make the NodeCore CDB
page and screenshots load faster.
Since cdbrelease fixes the game title now, for players who have
a dev repo installed alongside the official game, display a
distinctly "DEV" title in the title bar when the game is selected
on the game bar to make it distinguishable.
Send item metadata in item entities using the `wield_item` property,
replacing the deprecated since at least 5.1 `textures[1]` which does not
allow metadata in the itemstring. Only metadata fields known to affect
visuals are sent to the client, count and wear are reset.
This allows item entities to display color and (since 5.8) texture
overrides properly.
Instead of calculating tool position offset based on its
current position (incorrectly assuming its current pos
at the time of a tool action start is its "home" position),
just set and remember its home position at the time
we calculate the entity properties.
Allow nodes to be ignored from the "remove
unsupported falling nodes in mapgen" hack, and
register things that don't make sense to convert
to stone ever for this exemption.
Fix the "after N cycle(s)" message being 1 cycle too low, and
make it clearer that "behind" means the number of cycles we're
losing rather than a number of seconds slow we are.
These are causing the highest volume of "tech support"
workload, and they're not even an essential part of the
game. Players can discover them via social play, which
will also expose them to knowledge about how to make
them, or they can just skip them.
Ideas about making them appear much later in the
progression (i.e. after having unlocked N total hints
or something) are still valid, but this is at least a
stopgap for now.