Commit Graph

6885 Commits

Author SHA1 Message Date
SmallJoker
154b61ac5e Singleplayer: Pause game in the key change dialog
Fixes #6201. @t0ny2 pointed to the right place. Thanks!
2017-08-07 15:29:46 +02:00
JRottm
8325d7f482 Start off newly generated worlds early at sunrise, 5:15am (#6211)
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.
2017-08-05 21:08:21 +02:00
Jens Rottmann
248a1a8d65 Add tiny Y offset in collisionMoveSimple() to tweak performance
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.
2017-08-05 12:38:11 +02:00
Jens Rottmann
0c893ea123 Fix player coordinate rounding in collisionMoveSimple() (#6197)
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.
2017-08-05 12:38:11 +02:00
Thomas--S
e63df5ce80 Sort box corners correctly 2017-08-04 21:57:50 +02:00
Wuzzy
86c0b27c33 Update minetest.conf.example for keymap_slot* 2017-08-04 21:52:32 +02:00
Juozas Pocius
80ded73f68 Fix crash when using --go in command line 2017-08-03 14:03:15 +02:00
paramat
b20d01a3f1 Dungeons: Use biome 'node_stone' if normal stone types not detected
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.
2017-07-30 18:40:55 +01:00
paramat
238d752fa3 GenericCAO: Fix dark model below y = 0
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.
2017-07-30 18:40:45 +01:00
Lars Hofhansl
d1a130488e Darkness detection: Reduce chance of false positives darkening the skybox
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.
2017-07-30 18:28:16 +01:00
Wuzzy
640ba77276 Make direct item selection keys freely bindable 2017-07-30 18:24:45 +01:00
TeTpaAka
d504831ee2 Move the nametag back to the top of the player (#6179)
read the actual height of the collisionbox
2017-07-29 19:24:10 +02:00
SmallJoker
765fd9a0bc Noise: Prevent unittest crash caused by division by zero 2017-07-29 19:01:14 +02:00
Loïc Blot
e9d7005799 Revert "Noise::perlinMap2D,3D: replace a loop init with a single memset call"
This reverts commit bc1654feedc90caa8c26328ca6f0fc59fbe5b76c.
2017-07-27 17:12:18 +02:00
Loïc Blot
2015aaba96 Fix a warning introduced by 4eb59aeeb2f2b535f4eb2a1608189bb03098454e 2017-07-27 16:55:32 +02:00
Loïc Blot
550c0404a8 Add LuaEntity on_death callback (#6177)
Add LuaEntity on_death callback

This fixes #5474
2017-07-27 11:32:35 +02:00
Loic Blot
ba959ce27f Rename previous_was_found to previous_exists 2017-07-27 07:56:48 +02:00
Loic Blot
4eb59aeeb2 MapBlock::actuallyUpdateDayNightDiff(): little performance optimization
don't check isLightDayNightEq if checked on previous node
2017-07-27 07:56:48 +02:00
Loic Blot
c27504a322 compressZlib: don't use a SharedBuffer but a raw u8 * pointer
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
2017-07-27 07:56:48 +02:00
Loic Blot
61e4877190 Massive performance improvement on correctBlockNodeIds
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
2017-07-27 07:56:48 +02:00
Loic Blot
bc1654feed
Noise::perlinMap2D,3D: replace a loop init with a single memset call 2017-07-27 00:24:14 +02:00
Loic Blot
c8faee4eda
Remove one unused variable in Server::Receive function 2017-07-27 00:16:20 +02:00
Loic Blot
9d412dd075
Remove unused Map::getDayNightDiff + fix one undefined variable in mapblock.cpp 2017-07-26 23:11:46 +02:00
Loïc Blot
3e50850260 TileLayer: use shared_ptr for FrameSpec vector (#6171)
* 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
2017-07-26 20:12:48 +02:00
Loïc Blot
9a17b65f26 VoxelManip cleanups (const ref, const move) + function removal (#6169)
* 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
2017-07-26 07:35:09 +02:00
paramat
0c99da4255 Create_schematic documentation: Update for per-node force-place
The probability list has to also encode per-node force-place.
2017-07-26 02:41:41 +01:00
paramat
f61928d3fc Mgv7: Add 'mount_zero_level' parameter
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.
2017-07-26 02:41:30 +01:00
Loic Blot
31b84ce1f2
Move MapEditEventAreaIgnorer to emerge.cpp
It's only used in emerge threads and it's a local object, don't expose it to the whole Minetest
2017-07-25 08:47:52 +02:00
Paramat
4a4eba7a6c Network protocol: Document settable player collisionbox (#6168) 2017-07-25 07:32:44 +02:00
Ben Deutsch
c50a57c070 Clouds API: change speed from 'y' to 'z', ColorSpecs in Lua docs (#6164) 2017-07-24 18:04:00 +02:00
Loic Blot
befc3bba3d
LBM: use range based for and fixed a loop variable overloading in applyLBMs 2017-07-24 08:26:19 +02:00
paramat
dc9e4517a8 Mgv7: Add option to repeat surface biomes in floatlands 2017-07-22 00:56:55 +01:00
TeTpaAka
49920cfe8d Player collisionbox: Make settable
Breaks compatibility with old clients.
2017-07-21 02:03:22 +01:00
Lars Hofhansl
5045bdc6d8 In-cloud fog: Strengthen effect when small view range is used
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.
2017-07-18 22:16:41 +01:00
paramat
5f37efbec4 Window size: use 1024x600 to avoid a smaller UI
The change from 800x600 to 1024x576 (16:9) was a reduction in height which caused
user interface to become smaller.
Continue to use width 1024 as it is a common small screen width.
2017-07-18 22:11:34 +01:00
Loïc Blot
79f19b8369 [CSM] Add flavour limits controlled by server (#5930)
* [CSM] Add flavour limits controlled by server

Server send flavour limits to client permitting to disable or limit some Lua calls

* Add limits for reading nodedefs and itemdefs

* flavour: Add lookup node limits

* Merge get_node_or_nil into get_node.

Sending fake node doesn't make sense in CSM, just return nil if node is not available for any reason

* Add node range customization when noderange flavour is enabled (default 8 nodes)

* Limit nodes range & disable chat message sending by default

* Bump protocol version
2017-07-18 21:39:55 +02:00
adrido
7e3cdf7088 Copy lua51.dll (luajit) to bindir (#6148) 2017-07-18 21:29:23 +02:00
Loic Blot
a8c405b04e
LBM content mapping map doesn't need to be ordered, use std::unordered_map
Also rename helper to lbm_map instead of container_map
2017-07-18 08:23:37 +02:00
Loic Blot
14a1a712de
Very little performance fix on correctBlockNodeIds
+ C++11 codestyle
2017-07-18 08:18:13 +02:00
paramat
5117ce4c90 Mgfractal: Improve spawning behaviour
Spawn player 1 node higher to avoid spawning waist-deep in a possible
biome 'dust' node, such as tundra snowblock.
Tune default offset to spawn players in a more interesting location on the
mandelbrot sets, on a raised area that looks like a spawn platform.
Tune julia parameters to help avoid spawn search failing, especially for
fractal 6.
2017-07-17 20:19:43 +01:00
number Zero
20936e1c3e Mesh generation: Fix performance regression caused by 'plantlike_rooted' PR
Regression caused by ef285b2815962a7a01791059ed984cb12fdba4dd
2017-07-17 20:13:53 +01:00
Paramat
d3d3638f48 Chat: Move chat text down to not overlap 3rd line of debug text (#6145) 2017-07-17 13:53:14 +02:00
cx384
d60434c7b1 Add information about the button height 2017-07-16 13:10:34 +02:00
Paramat
d4cc49e9a7 F5 debug display: Reformat and remove some information (#6125)
For consistency return to 'FPS =', add comma before FPS.
Remove 'R' from 'range_all' as may be re-keymapped.
Remove inconsistent brackets from 'range_all'.
Change 'v_range' to 'view_range'.
Add 'pos = ' before co-ordinates.
Add spaces around '=' in yaw display.
Remove brackets from around 'yaw' and 'seed'.
Move 'pointing_at' to 3rd line.
Remove 'param1' (0 for all solid nodes and unreadable for light sources due to
light bank encoding).
Remove file name of pointed node top tile (this also removes the need to get
ContentFeatures for the node, slightly improving performance).
Replace quotes around node data with brackets, looks better and more consistent.

Add 'guitext3' for third line.
Use 'setVisible' for all 3 lines to control the setting of each text rectangle.
Improve logic of 3rd line to only run code it needs to depending on whether
pointing data is avaialble and whether node is not 'ignore' and not 'unknown'.
2017-07-16 12:33:09 +02:00
Loïc Blot
7ddf67aa14 Chat protocol rewrite (#5117)
* New TOCLIENT_CHAT_MESSAGE packet

* Rename old packet to TOCLIENT_CHAT_MESSAGE_OLD for compat
* Handle TOCLIENT_CHAT_MESSAGE new structure client side
* Client chat queue should use a specific object
* SendChatMessage: use the right packet depending on protocol version (not complete yet)
* Add chatmessage(type) objects and handle them client side (partially)
* Use ChatMessage instead of std::wstring server side

* Update with timestamp support
2017-07-16 10:47:31 +02:00
kilbith
ecbc972ea6 Camera: Fix wieldmesh glitch after teleporting (#6138) 2017-07-15 20:15:36 +02:00
Loic Blot
84aa845911
Revert "CSM: Revert "[CSM] Add send_chat_message and run_server_chatcommand""
This reverts commit bdac12761cd92960c3df83c932aa610f2322215f.
2017-07-15 09:28:10 +02:00
paramat
fafa51202c Default window size: Increase to 1024x576, aspect ratio 16:9 2017-07-15 01:36:37 +01:00
rubenwardy
bdac12761c CSM: Revert "[CSM] Add send_chat_message and run_server_chatcommand"
Original PR: #5747.
This reverts commit 39f4a2f607d44738d60db84eba4b30e3d7450204.
2017-07-15 01:35:18 +01:00
SmallJoker
a5c37717ff Sneak: Stripped down version
Fix taking damage caused by sneaking over a nodebox gap.
Fix strange behaviour on stair nodeboxes.
Enable jumping from node edges while sneaking.
Enable movement around corners while sneaking on a 1-node-high groove in a wall.
2017-07-15 01:27:37 +01:00