Commits on Mar 5, 2019
This sends the following header to a remote media server: Referer: minetest://<server_name>:port This was verified with CTF and the Minetest Public Remove Media server. If the servername was a plain IPv6 address it will contain `:` characters and will be encapsulated in `` to be a valid URI.
The getS16NoEx() handler will return true unless there is a `[num_emerge_threads]` line in the `minetest.conf` at which point the excption handler part is reached. Due to the fact that `defaultsettings.cpp` has a default value set for this setting, that never will happen. Because of this, the code will never check the number of threads on the system, and keep `nthreads = 0`. If that happens, the value is changed to `1` and only 1 emerge thread will be used. The default should be set to `1` instead, due to the potential unsafe consequences for the standard sqlite map files, but that should be a separate commit that also adds documentation for that setting. This commit focuses on removing this `hiding` bug instead.
Commits on Jan 3, 2019
The fallback code shouldn't be needed and is a remnant of the GET method that old media servers use. Clients using it are likely to just waste bandwidth and having to download the media again through the normal transfer from server method. The most reliable method is to get all missing textures therefore from the server directly and not spam the remote media server with 404s.
Commits on Dec 26, 2017
Commits on Nov 14, 2017
Falling nodes should make a sound. This can only be done here, so for simplicity we just call the sound_play() here with the node place sound. We ignore any gain value in the sound spec since a falling node should be loud, so the 1.0 default gain makes sense here.
Commits on Oct 20, 2017
Commits on Sep 11, 2017
Dig prediction allows clients to remove dug nodes without waiting for server acknowledgement. This patch allows mods to override dig prediction, it can either be turned off or a different "prediction node" can be selected.
Commits on May 9, 2017
Commits on Apr 29, 2017
Despite the split of TileSpec into TileDef and TileLayer, the TileLayer struct is still 66 bytes large, and doesn't fit in a single cacheline. I'm moving the color member to cacheline 2, in the hope that it is less used and the compiler loads all the hot members in a single cacheline instead. Only color sits now in cacheline 2, all the other members are in cacheline 1. Note: is_color is probably rarely set, most nodes will likely not use hardware coloring, but this may change in the future. Ideally, this class is shrunk to 64 bytes.
Commits on Apr 28, 2017
We introduce a new value for "waving" - 2: 0 - waving disabled 1 - wave like a plant 2 - wave like a leave Plantlike nodes will only allow waving = 1, but for leaves we will permit both 1 and 2 since current minetest_game sets it to 1 for all leaves. This makes it somewhat backwards compatible. For mesh and nodebox, values 1 and 2 are both valid, and the node can wave in both fashions as desired. I've tested this with the crops:corn plants, which are mesh nodes, and the results are really good. The code change is trivial as well, so I've opted to document the waving parameter in lua_api.txt because it was missing from there. Nodeboxes likely will not wave properly unless waving = 2. However it's possible that waving=1 may be desired by some mod developers for geometries I have not tried, so the code will not prohibit either value for mesh and nodebox drawtypes. Add lua_api.txt documentation for this feature and document both the existing functionality and the expansion to mesh and nodebox drawtypes.
Commits on Apr 22, 2017
This callback is called if a liquid definitely floods a non-air node on the map. The callback arguments are (pos, oldnode, newnode) and can return a `bool` value indicating whether flooding the node should be cancelled (`return true` will prevent the node from flooding). Documentation is added, the callback function was tested with a modified minetest_game. Note that `return true` will likely cause the node's `on_flood()` callback to be called every second until the node gets removed, so care must be taken to prevent many callbacks from using this return value. The current default liquid update interval is 1.0 seconds, which isn't unmanageable. The larger aim of this patch is to remove the lava cooling ABM, which is a significant cost to idle servers that have lava on their map. This callback will be much more efficient.
Commits on Apr 18, 2017
Apr 15, 2017
I play with the TAB key bound to the inventory. However, the code here assumes that TAB means "close formspec" in all contexts, including the main menu. This causes my game to exit when I attempt to TAB in between USERNAME and PASSWORD fields. We know when m_client != NULL that the game is a client game and not in the main menu, and then it's OK to use the INVENTORY bound key to exit the formspec, since it's not the main menu.
Commits on Apr 17, 2017
Commits on Apr 7, 2017
Commits on Apr 2, 2017
Using the `dtime` value entirely, this will stop the clock if the game is paused in singleplayer. Since most of the clocks were fixed a long time ago, this should again be safe to use.
Commits on Mar 15, 2017
Commits on Mar 12, 2017
Commits on Mar 5, 2017
If you happen to have a font_path setting that is incorrect, minetest will just attempt to start the gui without a valid font which leads to a segfault later on. We can attempt to load the fallback font path fairly easy, but if that fails we should give up with a proper error message and not a weird segfault later. This forces an abort() if the fallback fails as well, and prints a useful error message to the console.
Commits on Feb 17, 2017
This reverts the removal of Droid Sans as fallback font. The license for this font used to be GPL2. I've updated the font files to Liberation 2.00, which are SIL, and do not require us to ship source code. I've attempted to fix all the attribution and license strings, and used the strings as provided by redhat for attribution to make sure they're correct. Last, I've removed a bunch of executable bits on files that do not need them. Fixes #5231
Commits on Feb 14, 2017
It appears we were shipping font files without license text, and I had my doubts about the bitmap fonts being usable directly. This replaces existing TTF fonts with Apache-2.0 licensed fonts from chome core (Cousine, Arimo, Tinos). Include the full license file for all three fonts. The Lucida Sans font bitmap is removed entirely for non-freetype builds. There is therefore only mono fonts for non-freetype builds.
Commits on Feb 9, 2017
We want to reduce the chance that we get lots and lots of node timers all happening once a second, because we're better off doing small bits of work as they are available. Reducing this to 0.2 seconds will greatly reduce the total amount of nodetimers that elapse at the same instance, while not effecting total work load. This results in a far better chance of the server keeping up with work loads.
Commits on Feb 6, 2017
Feb 6, 2017
While experimenting with entities I ran into this unresolvable error where the server is sending some texture that the client crashes on. The crash prevents the client from ever reconnecting, resulting in a server that has to use clearobjects. We shouldn't crash but just ignore the object and move on. ``` 0x00000000004dc0de in TextureSource::generateImagePart (this=this@entry=0x7118eb0, part_of_name="[applyfiltersformesh", baseimg=@0x7fffffffbe98: 0x9f1b010) at /home/sofar/git/minetest/src/client/tile.cpp:1744 1744 u32 xscale = scaleto / dim.Width; (gdb) bt #0 0x00000000004dc0de in TextureSource::generateImagePart (this=this@entry=0x7118eb0, part_of_name="[applyfiltersformesh", baseimg=@0x7fffffffbe98: 0x9f1b010) at /home/sofar/git/minetest/src/client/tile.cpp:1744 ``` After reconnecting, the client now can connect without issues and displays an error message: ``` ERROR[Main]: generateImagePart(): Illegal 0 dimension for part_of_name="[applyfiltersformesh", cancelling. ERROR[Main]: generateImage(): Failed to generate "[applyfiltersformesh" ERROR[Main]: Irrlicht: Invalid size of image for OpenGL Texture. ```
Commits on Jan 23, 2017
Commits on Dec 28, 2016
Dec 9, 2016
Remake the light_decode_table. The table starts out without pre-filled in values since those are always discarded by the code apparently. We calculate a pseudo curve with gamma power function, and then apply a new adjustment table. The adjustment table is setup to make the default gamma of 2.2 look decent: not too dark at light level 3 or so, but too dark at 1 and below to be playable. The curve is much smoother than before and looks reasonable at the whole range, offering a pleasant decay of light levels away from lights. The `display_gamma` setting now actually does something logical: the game is darker at values below 2.2, and brighter at values above 2.2. At 3.0, the game is very bright, but still has a good light scale. At 1.1 or so, the bottom 5 light levels are virtually black, but you can still see enough detail at light levels 7-8, so the range and spread is adequate. I must add that my monitor is somewhat dark to begin with, since I have a `hc` screen that doesn't dynamic range colors or try to pull up `black` pixels for me (it is tuned for accurate color and light levels), so this should look even better on more dynamic display tunings.
Commits on Dec 16, 2016
Commits on Dec 8, 2016
Allow any int value, and properly range check it before casting.
Commits on Dec 7, 2016
Schematics can already be placed with a param2 value, but not simple 1-node plant decorations of the simple type. This adds a `param2` field to the simple deco type that is checked to be between 0 and 255, and put to the placed node at mapgen. This can be used to put a degrotate value in, or e.g. a fill value for leveltype nodes, or a place_param2 value at mapgen placement, or vary the shape of meshoptions plantlike drawtype.
Commits on Nov 18, 2016
If a tool wears out and is destroyed, it's itemstack count goes to 0, and we can optionally play a breaking sound. This patch implements playing a breaking sound when this occurs. Sounds need to be added to the tool itemdef registration as the sound name string in the .sound.breaks member.
Commits on Oct 31, 2016
Commits on Sep 12, 2016
Commits on Aug 26, 2016
Adds several new ways that the plantlike drawtype mesh can be changed. This requires paramtype2 = "meshoptions" to be set in the node definition. The drawtype for these nodes should be "plantlike". These modifications are all done using param2. This field is now a complex bitfield that allows some or more of the combinations to be chosen, and the mesh draw code will choose the options based as neeeded for each plantlike node. bit layout: bits 0, 1 and 2 (values 0x1 through 0x7) are for choosing the plant mesh shape: 0 - ordinary plantlike plant ("x" shaped) 1 - ordinary plant, but rotated 45 degrees ("+" shaped) 2 - a plant with 3 faces ("*" shaped) 3 - a plant with 4 faces ("#" shaped) 4 - a plant with 4 faces ("#" shaped, leaning outwards) 5 through 7 are unused and reserved for future mesh shapes. bit 3 (0x8) causes the plant to be randomly offset in the x,z plane. The plant should fall within the 1x1x1 nodebox if regularly sized. bit 4 (0x10) causes the plant mesh to grow by sqrt(2), and will cause the plant mesh to fill out 1x1x1, and appear slightly larger. Texture makers will want to make their plant texture 23x16 pixels to have the best visual fit in 1x1x1 size. bit 5 (0x20) causes each face of the plant to have a slight negative Y offset in position, descending up to 0.125 downwards into the node below. Because this is per face, this causes the plant model to be less symmetric. bit 6 (0x40) through bit 7 (0x80) are unused and reserved for future use. !(https://youtu.be/qWuI664krsI)
Commits on Jun 17, 2016
This allows a nodedef to specify a fixed value for param2 to be used for all normal placements. There are several uses for this: - nodes that require param2 to be set to a non-zero value for internal mod use. E.g. leafdecay could use this to detect that leaves are played by players. - force wallmounted or facedir value at placement at placement This overrides any player look direction or other on-the-fly param2 setting during placement.
Commits on May 28, 2016
Adds the particle option `collision_removal = bool` Some particles are hard to use right now since they either go through solid blocks (without collision detection), and with collision detection enabled they (e.g. raindrops) would just stop dead on the floor and sit there until they expire, or worse, scrape along a wall or ceiling. We can solve the problem by adding a boolean flag that tells the particle to be removed if it ever collides with something. This will make it easier to add rain that doesn't fall through your roof or stick on the top of it. Or clouds and smoke that don't go through trees. Particles that collide with this flag are marked expired unconditionally, causing them to be treated like normal expired particles and cleaned up normally. Documentation is adjusted accordingly. An added bonus of this patch is that particles can potentially collide many times with nodes, and this reduces the amount of collisions to 1 (max), which may end up reducing particle load on the client.