Previously, compiling on Ubuntu 20.04 would fail with the system-provided JsonCPP
version (1.7.4). Which would satisfy the documented requirement of "1.0.0+".
Since this is fixed overhead for every entity, this is important to optimize.
This optimizes one very common case.
before:
push_collision_move_result [us] _____________ 64512x 3.562
after:
push_collision_move_result [us] _____________ 72636x 0.831
This works through a new field "touch_interaction" in item definitions.
The two most important use cases are:
- Punching players/entities with short tap instead of long tap (enabled by default)
- Making items usable that require holding the place button (e.g. bows and shields in MC-like games)
The placement prediction value 0 was accidentally ignored
and made the clients fall back to automatic rotation based
on the node paramtype2 value.
This now changes the internal representation to properly
indicate the disabled state (e.g. 'nil' in Lua).
4dir is like facedir, but only for 4 horizontal directions: NESW. It is identical in behavior to facedir otherwise. The reason why game makers would want to use this over facedir is 1) simplicity and 2) you get 6 free bits.
It can be used for things like chests and furnaces and you don't need or want them to "flip them on the side" (like you could with facedir).
color4dir is like colorfacedir, but you get 64 colors instead of only 8.
Dropped ServerSoundParams -> moved to ServerPlayingSound. This gets rid of the duplicated
'fade' and 'pitch' values on server-side where only one was used anyway.
SimpleSoundSpec is the basic sound without positional information, hence 'loop' is included.
Recursively added PROTOCOL_VERSION to most functions to reduce the versioning mess in the
future. Per-type version numbers are kept for now as a safety rope in a special case.
On my system this is a reduction from 4664 to 3704 bytes.
This is not for the sake of saving RAM but ensuring
commonly used structures fit into caches better.