| Commit message (Collapse) | Author | Age |
|
|
|
|
|
| |
* Use Environment interface instead of ClientEnvironemnt
* Don't create slippery variable and then re-affect it
* itemgroup_get return a int, properly test != 0 to be clearer
|
| |
|
|
|
|
| |
Document behaviour for older clients.
|
| |
|
| |
|
|
|
|
| |
To make it sound less confusing to players
|
|
|
|
|
|
| |
With the cloud API, the cloud_height setting has become obsolete
and replaceable by a mod. It, and supporting code, can be
removed.
|
|
|
|
| |
error log
|
| |
|
|
|
|
|
|
| |
Use various ranged-based for loops in ServerEnvironment::step
Also set ServerObject::getBasePosition const to be compliant
ServerEnvironment::deleteParticleSpawner: use a const iterator
|
| |
|
|
|
|
|
| |
Add settable player step height using the existing object property.
Breaks compatibility with old clients, add to protocol version 35.
|
|
|
|
|
|
|
|
| |
The arrow symbolizing the player in the square minimap looks almost like a
triangle, making it a bit hard to see which direction it is currently
pointing in when in a hurry.
Redraw it leaner, pointier. Colors unchanged.
|
| |
|
|
|
|
|
|
|
|
| |
When minetest is launched, if there was no nameprovided in
configuration or parameters, the game would not show any error in
console. if the --go parameter was also prowided, the game would
exit without an error. This is undesired behavior, so this merged
commit add the missing function that displays the missing error
message in console.
|
| |
|
|
|
|
| |
Fixes #6201. @t0ny2 pointed to the right place. Thanks!
|
|
|
|
|
|
|
|
|
|
| |
Gives starting singleplayer games this subtle "dawn of a new world" feel.
I would have set it even earlier (up to 4:45am), but I was worried that in
some pre-existing games the player could be overwhelmed by hostile
mobs right at the start, seriously changing gameplay.
It's just the default, individual games should be able to override it, and
for public servers it's irrelevant anyway, because only the first player to
set foot in the world will notice, and that's usually the server admin.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Another small general problem: the player is always standing exactly on the
bondary between 2 nodes e.g. Y=1.5 is exactly between nodes Y=1 and Y=2.
floatToInt() and myround() will round +/-n.5 always 'outwards' to +/-(n+1),
which means they behave differently depending on where you are: they round
upwards above sea level and downwards when underground. This inconsistency
comes from the way the coordinates are calculated, independent of the
specific C++ code.
The result is a tiny bit of lost performance when moving underground,
because 1 node level more than necessary is checked for collisions. This can
be amended by adding a tiny offset to minpos_f.Y, like @paramat suggested.
This is not an elegant solution, but still better than wasting CPU.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To determine the area (nodes) where a player movement took place
collisionMoveSimple() first took the old/new player coordinates and rounded
them to integers, then added the player character's collision box and
implicitely rounded the result. This has 2 problems:
Rounding the position and the box seperately, then adding the resulting
integers means you get twice the rounding error. And implicit rounding
always rounds towards 0.0, unlike floatToInt(), which rounds towards the
closest integer.
Previous (simplified) behavior: round(pos)+(int)box, for example player at
Y=0.9, body is 1.75m high: round(0.9)+(int)1.75 = 1+1 = 2.
==> A character's height of 1.75m always got rounded down to 1m, its width
of +/-0.3 even became 0.
Fixed by adding the floats first, then rounding properly: round(pos+box) =
round(0.9+1.75) = round(2.65) = 3.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Construct dungeons from the node defined as biome 'node_stone' if
'mapgen_stone', 'mapgen_desert_stone' and 'mapgen_sandstone' are not
detected.
Feature long-intended by kwolekr/hmmmm and present in code as a TODO.
|
|
|
|
|
|
| |
Move point at which light is sampled up to 0.5 nodes above foot level,
to avoid that point sometimes passing into the node below causing the
model to go dark.
|
|
|
|
|
|
|
|
|
| |
The getBackgroundBrightness() function detects darkness in the view direction
to decide when to make the skybox dark. The volume checked was too narrow and
missed the left and right edges of the view, too easily causing a dark skybox.
Widen the checked volume to match a FOV of 72 degrees and a 16:9 aspect ratio
game window.
|
| |
|
|
|
| |
read the actual height of the collisionbox
|
| |
|
|
|
|
| |
This reverts commit bc1654feedc90caa8c26328ca6f0fc59fbe5b76c.
|
| |
|
|
|
|
|
|
| |
Add LuaEntity on_death callback
This fixes #5474
|
| |
|
|
|
|
| |
don't check isLightDayNightEq if checked on previous node
|
|
|
|
|
|
|
|
| |
Remove usage of the SharedBuffer in zlib compression which has two problems:
* We copied the whole memory block to compress it (not good with mapblocks)
* We copied sometimes strings to SharedBuffer to SharedBuffer (2nd time)
Use this method in MapNode::serializeBulk + optimize serialization but merging 3 identical loops in a single loop
|
|
|
|
|
|
| |
correctBlockNodeIds does 2 lookups for each loaded node, one to translate DB ID to name and a second to translate name to real ID. Name to real ID is very consumming if done on every node. As mapblocks are in most cases composed of many identical adjacent nodes, cache previous source and destination id and use them on the next node to prevent any lookup on those maps.
This reduce the function load from 15% of my CPU usage to ~0.7%, on the test, calls was reduced from 2.5M lookups to 42k lookups, it's a huge performance gain
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* TileLayer: use shared_ptr for vector framespec
This reduce memory copy of TileLayer from (4 to 16) * FrameSpec where FrameSpec = (sizeof(int) + 3 * sizeof(ptr)) to int + sizeof(ptr)
Callgrind difference
Before: https://lut.im/RGkiJqQb8T/LeQIEXpAuRzfl7gd.png
After: https://lut.im/bcqmwee1xu/cTwtptY5tRuS9lp0.png
* Fix one push_back to use vector::emplace_back & optimize inclusions
|
|
|
|
|
|
|
|
|
|
| |
* VoxelManip cleanups (const ref, const move) permitting to improve a little bit performance
* VoxelArea: precalculate extent (performance enhancement)
This permits to reduce extend high cost to zero and drop many v3s16 object creation/removal to calculate extent
It rebalance the client thread update to updateFastFaceRow instead of MapBlockMesh generation
This will also benefits to mapgen
|
|
|
|
| |
The probability list has to also encode per-node force-place.
|
|
|
|
|
|
|
|
| |
Allows setting of the mountain 'zero level' (y where density gradient is zero).
It is easy to vertically shift smooth terrain by editing noise parameter 'offset',
but vertically shifting mountain terrain was complex and imprecise, involving
making a calculation based on an average of the mountain height parameter.
|
|
|
|
| |
It's only used in emerge threads and it's a local object, don't expose it to the whole Minetest
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Breaks compatibility with old clients.
|
|
|
|
|
|
|
| |
Ensure in-cloud fog is always stronger than outside-of-cloud-fog even when
using a small view range.
Also limit in-cloud fog range to a maximum of 32 nodes to keep it fairly
strong when using a large view range.
|