Compare commits

..

5327 Commits

Author SHA1 Message Date
SmallJoker
ecbb9310de Bump version to 0.4.17 2018-06-03 17:35:20 +02:00
Loic Blot
aac35a6e7c Backport buildbot win32 scripts too 2018-06-03 17:32:00 +02:00
Loic Blot
04fe8cc0a2 Update macosx build from master 2018-06-03 17:32:00 +02:00
Loic Blot
24abdf45b9 Fix windows toolchain due to missing packages, upgrade to more recent toolchain 2018-06-03 17:32:00 +02:00
SmallJoker
263400b3d8 C++03 oldify in various source files 2018-06-03 17:32:00 +02:00
Loic Blot
695d02e6bd More C++03 fixes 2018-06-03 17:32:00 +02:00
rubenwardy
e2815d27f1 Fix luajit include not being found 2018-06-03 17:32:00 +02:00
Paramat
ebfdb21624 Dungeons: Mostly fix missing stair nodes 2018-06-03 17:32:00 +02:00
mazocomp
0088fa6db4 Fix i386 bit build at OpenBSD (#7259) 2018-06-03 17:32:00 +02:00
Loic Blot
e660b05523 Fix C++03 compiling due to C++11 initialization issues in backport 2018-06-03 17:32:00 +02:00
SmallJoker
14d20f5827 Builtin auth handler: Speed up file writing (#7252) 2018-06-03 17:32:00 +02:00
Paramat
0414322d23 Cavegen: Fix variable typo that broke mgvalleys large cave distribution (#7249)
Fix elusive 5 year old bug that caused mgvalleys large caves to be flat and
limited to mapchunk borders.
Error was fixed 2 years ago in 'CavesV6' but not in 'CavesRandomWalk'.
2018-06-03 17:32:00 +02:00
sfan5
a6cfe73cb0 Fix segfault caused by wrong wgettext() 2018-06-03 17:32:00 +02:00
minduser00
1d06a8ef6c Fix for translating empty strings
Fix for incorrect translation of empty strings

In the key change menu, when a button key not have name an empty string is passed to gettext.
The empty string is reserved for gettext to return de header of the .po file an this is shoved in the button
2018-06-03 17:32:00 +02:00
SmallJoker
875972ffa6 upright_sprite: Fix texture position for players Fixes #6471 2018-06-03 17:32:00 +02:00
Loïc Blot
396daf1be1 Huge LBM lookup performance improvement on mapblock loading (#7195)
* Huge LBM lookup performance improvement on mapblock loading
2018-06-03 17:32:00 +02:00
SmallJoker
fe41725e50 core.rotate_node: Do not trigger after_place_node (#6900) 2018-06-03 17:32:00 +02:00
D Tim Cummings
5624cf750f macOS: don't require X11 libraries during compilation (#7149)
The xxf86vm needs to be removed from Apple builds to avoid CMake Error XXF86VM_LIBRARY is NOTFOUND
2018-06-03 17:32:00 +02:00
paramat
1d7fbd035d Minetest ASCII art: Move from actionstream to rawstream 2018-06-03 17:32:00 +02:00
paramat
a6b9acb7af Generate Notifier: Clear events once after all 'on generated' functions 2018-06-03 17:32:00 +02:00
red-001
c40f535df8 Fix liquid post effect colour behaviour in third person view 2018-06-03 17:32:00 +02:00
paramat
79fde0dd52 CollisionMoveSimple: Collide with 'ignore' nodes 2018-06-03 17:32:00 +02:00
paramat
8aaf526730 SAO limits: Allow SAOs to exist outside the set 'mapgen limit' 2018-06-03 17:32:00 +02:00
paramat
c683e050d4 Find nodes in area (under air): Raise volume limit and document it 2018-06-03 17:32:00 +02:00
Muhammad Rifqi Priyo Susanto
c2e39b9363 Delete world dialog: Move buttons to avoid double click deletion
Move confirmation delete button to never overlap initial delete button,
to avoid world deletion by accidental double click.
2018-06-03 17:32:00 +02:00
dopik
f8cc92c190 /shutdown can't do countdown when using reconnect and/or shutdown message (#7055)
Delay was converted from the param string and not the delay value, thus never using the actual given delay value when used in combination with other string values in the param, in this case reconnect and the shutdown messsage.
2018-06-03 17:32:00 +02:00
sfan5
858c41b842 Check argument types inside MetaDataRef Lua API (#7045) 2018-06-03 17:32:00 +02:00
you
2a4fbbbff8 Fix "Ignoring CONTENT_IGNORE redefinition" warning (#4393)
minetest.override_item still passes to core
2018-06-03 17:32:00 +02:00
paramat
6d346a817b Item entity: Delete in 'ignore' nodes 2018-06-03 17:32:00 +02:00
paramat
529f00a240 Falling.lua: Delete falling node entities on contact with 'ignore'
Prevents falling node entities entering the ignore at a world edge and
resting on unloaded nodes 16 nodes below, unreachable, undiggable and
still being processed by 'on step' because they don't revert to nodes.
2018-06-03 17:32:00 +02:00
you
7725030067 Allow dumping userdata (#7012) 2018-06-03 17:32:00 +02:00
red-001
bb28afcfc3 Move setlocale from Lua to C++. 2018-06-03 17:32:00 +02:00
you
880a25c921 Add minetest.is_player (#7013)
* Add minetest.is_player

* First use for is_player
2018-06-03 17:32:00 +02:00
mazocomp
0268c9d7c9 "static constexpr v3s16 light_dirs[8]" fails to compile, sync it with master! (#7261) 2018-06-03 17:32:00 +02:00
mazocomp
f72490950a Fix C++11 feature detection for undefined _MSC_VER (#7255) 2018-06-03 17:32:00 +02:00
sfan5
9d3fa874be Refine movement anticheat again (#7004)
* Account for walking speed in vertical dir
* Avoid undefined behaviour due to division-by-zero
2018-06-03 17:32:00 +02:00
sfan5
842eccee19 Apply physics overrides correctly during anticheat calculations (#6970) 2018-06-03 17:32:00 +02:00
Pedro Gimeno
127b1fa6f8 Fix off-by-one in log output line length (#6896) 2018-06-03 17:32:00 +02:00
Pedro Gimeno
6b5e2618fb Fix buffer parameter not working in LuaPerlinNoiseMap::l_getMapSlice() 2018-06-03 17:32:00 +02:00
you
b2099d4277 Fix Wstringop-overflow warning from util/srp.cpp (#6855)
* Fix Wstringop-overflow warning from util/srp.cpp
2018-06-03 17:32:00 +02:00
rubenwardy
df0a8574dc Fix rounding error in g/set_node caused by truncation to float 2018-06-03 17:32:00 +02:00
number Zero
6698067256 Fix dancing text 2018-06-03 17:32:00 +02:00
nOOb3167
bb219e1059 Fix undefined behaviour on getting pointer to data in empty vector
`&vector[0]` is undefined if vector.empty(), causing build failure on MSVC
2018-06-03 17:32:00 +02:00
Vitaliy
b3167d4e57 Fix wrong scrolling (#6809) 2018-06-03 17:32:00 +02:00
SmallJoker
8a849e893a Builtin: Fix handle_node_drops crash with nil digger 2018-06-03 17:32:00 +02:00
SmallJoker
f9738c1909 Damage: Remove damage ignore timer 2018-06-03 17:32:00 +02:00
Luis Cáceres
6f80e302fd Ensure no item stack is being held before crafting (#4779) 2018-06-03 17:32:00 +02:00
raymoo
48ebbf0fc6 Shut down mapgen threads before other shutdown tasks (#6689)
Solves some issues with ModStorage functionality in mapgen threads
that occurred when mapgen threads continued to run after the main
server thread had stopped. Also shuts down mapgen threads before
shutdown callbacks are called.
2018-06-03 17:32:00 +02:00
sfan5
7d9dbbbf3c Update documentation regarding authentication handler and related functions
Properly document it instead of referencing the builtin handler as
authoritative "example" code.
Also adds definition of get_auth_handler() which was missing previously.
2018-06-03 17:32:00 +02:00
sfan5
7cc1a36b3c Hint at problematic code when logging deprecated calls 2018-06-03 17:32:00 +02:00
Ezhh
3f1094475f Improve documentation for player:set_attribute() 2018-06-03 17:32:00 +02:00
SmallJoker
f72ac42ca0 Inventory: Restrict access from too far away 2018-06-03 17:32:00 +02:00
SmallJoker
8fba3c93d5 core.rotate_node: Run callbacks like with any regular placed node (#6648) 2018-06-03 17:32:00 +02:00
paramat
a90c314c80 Biome dust node: Only place on 'walkable' cubic non-liquid drawtypes
No longer decide placement on 'buildable_to' parameter.
Dust nodes only look acceptable placed on cubic nodes.
Modders may not want to make their plantlike decorations 'buildable_to'.
2018-06-03 17:32:00 +02:00
ezhh
222fab3d20 Improve Settings tab button alignments 2018-06-03 17:32:00 +02:00
paramat
1cf32b22be Lua_api.txt: Add documentation of required mapgen aliases 2018-06-03 17:32:00 +02:00
Ezhh
6f803b9c89 Remove incorrect entry from settingtypes 2018-06-03 17:32:00 +02:00
sfan5
0fe3e7574d Make use of safe file writing in auth handler (fixes #6576) 2018-06-03 17:32:00 +02:00
sfan5
b816c63196 Add minetest.safe_write_file() to script API 2018-06-03 17:32:00 +02:00
Muhammad Rifqi Priyo Susanto
313ca53b36 Fix issue Minetest crash when custom font path is not exist
We try to use default fallback for both mono and main font when custom font path is not exist. This way, if Minetest is not corrupted, we could avoid crash.
2018-06-03 17:32:00 +02:00
Ezhh
a65a46b889 Fix Settings tab formspec alignment (#6585) 2018-06-03 17:32:00 +02:00
Lars Hofhansl
0cfe3a810a Do not scale texture unless necessary.
This avoids scaling textures to 'texture_min_size' unless it is actually
required (because either auto-scaling or bi/trilinear filtering is enabled)
2018-06-03 17:32:00 +02:00
sfan5
6808a3d144 httpfetch: Enable gzip support 2018-06-03 17:32:00 +02:00
Rob Blanckaert
4d9bf75d3a Add sha1 to lua utils. (#6563) 2018-06-03 17:32:00 +02:00
rubenwardy
416c4535c7 Fix day_night_ratio_do_override not being initialised server-side
Causes get_day_night_ratio() to return unpredictable results.
2018-06-03 17:32:00 +02:00
lhofhansl
73baeb82ef Avoid filtering low-res textures for animated meshes (incl. players) (#6562) 2018-06-03 17:32:00 +02:00
raymoo
7b8288d605 Fix default item callbacks to work with nil users (#5819)
* Fix default item callbacks to work with nil users

* item.lua: Handle node drops for invalid players

The if-condition for the dropping loop is the same as `inv`, which means that the 2nd possible definition of `give_item` is never used.
Remove redundant `local _, dropped_item`
2018-06-03 17:32:00 +02:00
Auke Kok
2f969196b8 Correct prot_vers in lua_api.txt.
We should avoid providing incorrect struct members in documentation
since people will be coding based on them.
2018-06-03 17:32:00 +02:00
Esteban I. RM
0041bcc73e Don't try to craft a non-existent item 2018-06-03 17:32:00 +02:00
rubenwardy
cc48c95ca7 Profiler: Fix var args not being passed to callback register function
Fixes #6517
2018-06-03 17:31:59 +02:00
Loïc Blot
0129c9a9dd Thread: fix a crash on Windows due to data race condition on Thread::m_start_finished_mutex (#6515) 2018-06-03 17:31:59 +02:00
Loic Blot
9dc1f2d638 NetworkPacket::putRawPacket: resize m_data to datasize + memcpy
In some cases NetworkPacket was created using default constructor and m_data is not properly sized.
This fixed out of bounds memory copy
Also use memcpy instead of std::vector affectation to enhance packet creation
2018-06-03 17:31:59 +02:00
adrido
d215198fe8 Replace deprecated WINAPI GetVersionInfoEx (#6496)
* Replace deprecated WINAPI GetVersionInfoEx
2018-06-03 17:31:59 +02:00
Rob Blanckaert
c56c3d8d6f Add setting for near plane distance. (#6395)
* Allow setting the near plane

* - Add near_plane limit of 0.5 to prevent x-ray.
- Add more details to near_plane setting.
2018-06-03 17:31:59 +02:00
SmallJoker
0034abb560 Unkown nodes: Provide position on interact (#6505)
* Unkown nodes: Provide position on interact
2018-06-03 17:31:59 +02:00
SmallJoker
200e9cc4a2 ParticleSpawner::step cleanup and rotation fix (#6486)
* Particles: Move spawner code to a separate fucntion
2018-06-03 17:31:59 +02:00
paramat
6b0fb94d60 CAO footstep sounds: Reduce gain to balance volume 2018-06-03 17:31:59 +02:00
raymoo
017815161b Fix attached particle spawners far from spawn (#6479)
* Fix attached particle spawners far from spawn

When far from spawn, attached particle spawners
did not spawn particles.
2018-06-03 17:31:59 +02:00
SmallJoker
ab72100a2c Localplayer: Fix disable_jump effect and getStandingNodePos()
Leave the old move code untouched.
2018-06-03 17:31:59 +02:00
raymoo
9927076b47 Document orientation parameter of set_attach (#6473) 2018-06-03 17:31:59 +02:00
Paramat
bd8d6f8f2f Fix recent commit: std::max -> std::fmax for floats (#6469)
Fixes commit a455297d29
<cmath> header was already present in commit.
2018-06-03 17:31:59 +02:00
paramat
3a9d500396 Positional sound: Limit volume when closer than 1 node
Change OpenAL distance model from AL_INVERSE_DISTANCE to
AL_INVERSE_DISTANCE_CLAMPED to avoid excessive volume when very close
to the sound location, for example MTG doors, and MTG fire sounds which
are combined at an average position and often located in air nodes.

Because AL_REFERENCE_DISTANCE has been reduced to 1 node (the distance
under which gain is clamped), multiply volume by the same factor to keep
sound gains the same as before, since the gain is calculated as:

gain = (AL_REFERENCE_DISTANCE / distance)
2018-06-03 17:31:59 +02:00
sfan5
01b9da870b Fix blocks written by vmanip not being marked as modified
This bug can be triggered by e.g. calling minetest.place_schematic()
and stopping the server immediately afterwards.
2018-06-03 17:31:59 +02:00
DTA7
e8286e8894 Set placer to nil instead of a non-functional one in item_OnPlace (#6449)
* Set placer to nil instead of a non-functional one

This requires nil checks in core.rotate_node and core.rotate_and_place.
2018-06-03 17:31:59 +02:00
paramat
b8f473be21 Leveled nodebox: Change levels from 1/63rds to 1/64ths
Add missing documentation of leveled nodebox to lua_api.txt, plus
a little cleaning up nearby.
2018-06-03 17:31:59 +02:00
tenplus1
b1fae4c7be Fix Rotate Node Placement (#6424)
This properly checks for creative mode or privilege when using fixed rotate_node() function.
2018-06-03 17:31:59 +02:00
sfan5
c2a0333901 ServerEnv: Clean up object lifecycle handling (#6414)
* ServerEnv: Clean up object lifecycle handling
2018-06-03 17:31:59 +02:00
sfan5
5b2461c713 Fix core.wrap_text and make its behaviour consistent with the docs
Code based on initial implementation by @dsohler.
2018-06-03 17:31:59 +02:00
rubenwardy
e9087d1be7 Fix empty legacy meta being persisted 2018-06-03 17:31:59 +02:00
Nathanaël Courant
bb4ef52954 Statbars: fix incorrect half-images in non-standard orientations (fixes #6198) 2018-06-03 17:31:59 +02:00
Paramat
888b99e1b6 Android stepheight: Only increase if 'touching ground' (#6313) 2018-06-03 17:31:59 +02:00
Dániel Juhász
2c450ed93f Fix Android node selection distance (#6187) 2018-06-03 17:31:59 +02:00
Loïc Blot
d9c7af109a serialize: use a temporary for SerializeException Exception must always use temporary instead of global copied exception instances, it's not recommended and should have undefined issues 2018-06-03 17:31:59 +02:00
Loic Blot
12562be393 Typo fix in compat code from commit 1d8d01074f 2018-06-03 17:31:59 +02:00
Loïc Blot
151c19a6be ClientInterface: add a function to verify (correctly) if user limit was reached (#6258)
* ClientInterface: add a function to verify (correctly) if user limit was reached

CS_HelloSent is a better indicator of active slots than CS_Created, which are session objects created after init packet reception

Switch existing checks to ClientInterface::isUserLimitReached()

Use range-based for loop for getClientIds() used function too

This will fix #6254 (not the memory overhead if init is flooded)
2018-06-03 17:31:59 +02:00
Dániel Juhász
9d40d89d27 Make dropped items colorable 2018-06-03 17:31:59 +02:00
SmallJoker
037b01eac7 Trigger on_rightclick regardless on the formspec meta field
Document behaviour for older clients.
2018-06-03 17:31:59 +02:00
Fixer
c789c532bb Full viewing range key message clarified
To make it sound less confusing to players
2018-06-03 17:31:59 +02:00
Jens Rottmann
b3ffe675c3 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.
2018-06-03 17:31:59 +02:00
Jens Rottmann
90a9e4e69f 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.
2018-06-03 17:31:59 +02:00
Juozas Pocius
e5311a4d56 Fix crash when using --go in command line 2018-06-03 17:31:59 +02:00
SmallJoker
4be7d8b43a Noise: Prevent unittest crash caused by division by zero 2018-06-03 17:31:59 +02:00
SmallJoker
070ab6654a 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.
2018-06-03 17:31:59 +02:00
stujones11
ebf9dda2e6 Include TILE_MATERIAL_OPAQUE in shaders header (#6086) 2018-06-03 17:31:59 +02:00
stujones11
c352ff71e8 Tile material: Add 'TILE_MATERIAL_OPAQUE', use for drawtype 'NDT_NORMAL'
Prevents normal drawtype nodes having transparency.
Avoids clients cheating by using 'x-ray' texture packs with transparent textures.
2018-06-03 17:31:59 +02:00
paramat
26d0753d87 Mgv7: Fix undefined 'float_mount_height'
Commit cad10ce3b7 altered the parameter
'float_mount_height' but was missing the necessary line in the constructor
to get the altered value from 'params'.

Fixes 3D floatland terrain generating everywhere.
2018-06-03 17:31:59 +02:00
Jesse McDonald
46ff2e2cef Fix for empty key/value when reading item string with wear but no metadata (#6058) 2018-06-03 17:31:59 +02:00
paramat
a08a93bc9c Mgv7: Clean up divide-by-zero fix 2018-06-03 17:31:59 +02:00
paramat
6e0557e20c Mgv7: Avoid divide-by-zero errors
Some settings of paramters can cause mgv7 variables to be -inf, nan or -nan.
This can cause massive vertical columns of water to appear above sea level.
2018-06-03 17:31:59 +02:00
Dániel Juhász
0c91c65a11 Fix render order of overlays (#6008)
* Fix render order of overlays

* Use C++11 loops

* Fix time_t
2018-06-03 17:31:59 +02:00
Ezhh
849fe19f8c Fix console resize issue when maximising game window (#6023) 2018-06-03 17:31:59 +02:00
Zeno-
cfa6216694 Fix console not being properly resized after window size changed (#6020) 2018-06-03 17:31:59 +02:00
Dániel Juhász
322e5aaf92 Automatic item and node colorization (#5640)
* Automatic item and node colorization

Now nodes with a palette yield colored item stacks, and colored items
place colored nodes by default. The client predicts the colorization.

* Backwards compatibility

* Use nil

* Style fixes

* Fix code style

* Document changes
2018-06-03 17:31:59 +02:00
SmallJoker
03bc584f57 find_nodes_in_area: Extend maximal count to U32_MAX (#5277)
Extend documentation, limit area volume
Remove u16 count limitation

* Prevent integer overflow, replace minp/maxp with pos1/pos2
2018-06-03 17:31:59 +02:00
Loïc Blot
5f796f7a04 Verify HudSetParams input when hotbar textures are set (#6013)
* Verify HudSetParams input when hotbar textures are set

This fix #6011
2018-06-03 17:31:59 +02:00
paramat
7aa52fe4e1 (Re)spawn players within 'mapgen_limit'
Previously, findSpawnPos() did not take the 'mapgen_limit' setting into account,
a small limit often resulted in a spawn out in the void.
Use the recently added 'calcMapgenEdges()' to get max spawn range through a new
mapgenParams function 'getSpawnRangeMax()'.

Previously, when a player respawned into a world, 'objectpos_over_limit()' was
used as a check, which was inaccurate.
Use the recently added 'saoPosOverLimit()' to get exact mapgen edges.

Also fix default value of 'm_sao_limit_min'.
2018-06-03 17:31:59 +02:00
red-001
0664b5f772 Add a server-sided way to remove color codes from incoming chat messages (#5948)
These code be generated by CSM, a modded client or just copy and pasted by the player.

Changes
- Update configuration example and setting translation file.
- Remove colour codes before logging chat.
- Add setting to remove colour codes before processing the chat.
2018-06-03 17:31:59 +02:00
DS
14b039f0b4 fix an example in lua_api (#5604) 2018-06-03 17:31:59 +02:00
red-001
c399f5a541 Fix sending color codes to clients that don't support them. (#5950)
Also remove `disable_escape_sequences` since it's not needed anymore.
2018-06-03 17:31:59 +02:00
DS
f736226c1a make ret variable in /builtin/mainmenu/tab_credits.lua local (#5942) 2018-06-03 17:31:59 +02:00
red-001
e665e75e77 Fix typos/mistakes in the documentation for colour related functions. (#5936) 2018-06-03 17:31:59 +02:00
ShadowNinja
cba783f7fa Fix segmentation fault with tool capabilities (#5899) 2018-06-03 17:31:59 +02:00
sfan5
87b9451820 Revert version scheme changes
This reverts commit 41b7823057.
This reverts commit 7968f1ddaa.
2017-11-20 19:28:58 +01:00
rubenwardy
41b7823057 Fix branch being labelled as 0.4.17 instead of 0.4.17-dev
You should use tags instead of this branch to track the latest release
2017-09-09 20:42:23 +01:00
Loïc Blot
7968f1ddaa New version scheme (#6292)
* Version changes: current dev version is now 0.4.17

* This change permit to have multi branches with various versions
* Dev version is 0.4.17-dev and next release will be 0.4.17
2017-08-20 17:25:07 +02:00
ShadowNinja
caecdb681c Merge 0.4.16 into stable-0.4 2017-06-03 14:55:10 -04:00
ShadowNinja
80dc961d24 Bump version to 0.4.16 2017-06-03 14:42:10 -04:00
ShadowNinja
e4d3639d40 Update remove_player documentation
This function only removes player meta data,
not player authentication data.
2017-06-03 14:39:49 -04:00
rubenwardy
fe046fab8a Update credits
The following algorithm was used when selecting contributors:

* Every non-trivial contributor from the current release,
  Non-trivial meaning more than X non-trivial commits, not counting documentation/translation changes
* The top Y contributors from the last 4 years.
* Previous contributor means no contributions since a few months before the last release.

In the future this should be automated
2017-06-03 14:28:36 -04:00
pandaro
1d4978b881 Translated using Weblate (Italian)
Currently translated at 77.6% (795 of 1024 strings)
2017-06-03 20:20:47 +02:00
Лазар Вукановић
b6eb315262 Translated using Weblate (Serbian (cyrillic))
Currently translated at 38.1% (391 of 1024 strings)
2017-06-03 20:20:41 +02:00
Mateusz Mendel
518dbec74c Translated using Weblate (Polish)
Currently translated at 61.3% (628 of 1024 strings)
2017-06-03 20:20:24 +02:00
praprot
2795a2a4db Added translation using Weblate (Slovenian) 2017-06-03 20:20:05 +02:00
BreadW
03c5dffabe Translated using Weblate (Japanese)
Currently translated at 48.2% (494 of 1024 strings)
2017-06-03 20:19:15 +02:00
Emiel van Rooijen
c77f0c1065 Translated using Weblate (Dutch)
Currently translated at 79.7% (817 of 1024 strings)
2017-06-03 20:18:58 +02:00
texmex
58c0e37501 Translated using Weblate (Swedish)
Currently translated at 12.1% (124 of 1024 strings)
2017-06-03 20:16:49 +02:00
metarmask
d74ebfbc67 Translated using Weblate (Swedish)
Currently translated at 11.0% (113 of 1024 strings)
2017-06-03 20:16:23 +02:00
texmex
c8b0502037 Translated using Weblate (Swedish)
Currently translated at 10.9% (112 of 1024 strings)
2017-06-03 20:15:47 +02:00
Muhammad Nur Hidayat Yasuyoshi
87c771e638 Translated using Weblate (Malay)
Currently translated at 90.2% (924 of 1024 strings)
2017-06-03 20:15:39 +02:00
Muhammad Rifqi Priyo Susanto
388930f3dd Translated using Weblate (Indonesian)
Currently translated at 94.5% (968 of 1024 strings)
2017-06-03 20:13:38 +02:00
Muhammad Rifqi Priyo Susanto
bc73df81d1 Translated using Weblate (Indonesian)
Currently translated at 84.2% (863 of 1024 strings)
2017-06-03 20:12:44 +02:00
Viktar Vauchkevich
b5d43d7b18 Translated using Weblate (Belarusian)
Currently translated at 100.0% (1024 of 1024 strings)
2017-06-03 20:11:56 +02:00
anonymous
c3775ceb49 Translated using Weblate (French)
Currently translated at 88.6% (908 of 1024 strings)
2017-06-03 20:11:34 +02:00
Hugo Locurcio
36bba5b8ca Translated using Weblate (French)
Currently translated at 88.5% (907 of 1024 strings)
2017-06-03 20:10:30 +02:00
Loïc Blot
98c13746ce Translated using Weblate (French)
Currently translated at 88.4% (906 of 1024 strings)
2017-06-03 20:10:22 +02:00
José
041553e658 Translated using Weblate (French)
Currently translated at 87.4% (895 of 1024 strings)
2017-06-03 20:10:15 +02:00
Loïc Blot
83b6a3bcdd Translated using Weblate (French)
Currently translated at 86.9% (890 of 1024 strings)
2017-06-03 20:10:01 +02:00
monolifed
0f55050038 Translated using Weblate (Turkish)
Currently translated at 100.0% (1024 of 1024 strings)
2017-06-03 20:09:58 +02:00
Wuzzy
8abca2cf0b Translated using Weblate (German)
Currently translated at 100.0% (1024 of 1024 strings)
2017-06-03 20:07:30 +02:00
LNJ
9295e95990 Translated using Weblate (German)
Currently translated at 99.8% (1022 of 1024 strings)
2017-06-03 20:06:43 +02:00
Wuzzy
956892c226 Translated using Weblate (German)
Currently translated at 99.8% (1022 of 1024 strings)
2017-06-03 20:06:25 +02:00
Fixer
f2e78f31ab Translated using Weblate (Ukrainian)
Currently translated at 40.0% (410 of 1024 strings)
2017-06-03 20:06:09 +02:00
Olexandr
c6afe083b3 Translated using Weblate (Ukrainian)
Currently translated at 37.6% (386 of 1024 strings)
2017-06-03 20:06:08 +02:00
Fixer
6f02ce1e99 Translated using Weblate (Ukrainian)
Currently translated at 37.6% (386 of 1024 strings)
2017-06-03 20:04:41 +02:00
weqqr
6e9ba56708 Translated using Weblate (Russian)
Currently translated at 96.3% (987 of 1024 strings)
2017-06-03 20:03:30 +02:00
Andrew Zyabin
0870b30f3b Translated using Weblate (Russian)
Currently translated at 96.2% (986 of 1024 strings)
2017-06-03 20:03:28 +02:00
Sergey
834d445795 Translated using Weblate (Russian)
Currently translated at 96.2% (986 of 1024 strings)
2017-06-03 20:02:48 +02:00
Andrew Zyabin
b5912d7407 Translated using Weblate (Russian)
Currently translated at 96.1% (985 of 1024 strings)
2017-06-03 20:02:42 +02:00
anonymous
d7e829f272 Translated using Weblate (Russian)
Currently translated at 96.0% (984 of 1024 strings)
2017-06-03 20:02:38 +02:00
weqqr
9d1a3ba668 Translated using Weblate (Russian)
Currently translated at 95.8% (982 of 1024 strings)
2017-06-03 20:02:27 +02:00
Alex “XShell” Schekoldin
db05c8fd45 Translated using Weblate (Russian)
Currently translated at 95.8% (981 of 1024 strings)
2017-06-03 20:02:20 +02:00
weqqr
983bff68e6 Translated using Weblate (Russian)
Currently translated at 95.8% (981 of 1024 strings)
2017-06-03 20:02:13 +02:00
Pavel Sokolov
509ed10328 Translated using Weblate (Russian)
Currently translated at 95.8% (981 of 1024 strings)
2017-06-03 20:02:09 +02:00
weqqr
37a3d49621 Translated using Weblate (Russian)
Currently translated at 95.8% (981 of 1024 strings)
2017-06-03 20:02:01 +02:00
Sergey
f15b61c146 Translated using Weblate (Russian)
Currently translated at 75.5% (774 of 1024 strings)
2017-06-03 20:01:54 +02:00
weqqr
7fffe6d0fa Translated using Weblate (Russian)
Currently translated at 75.3% (772 of 1024 strings)
2017-06-03 20:01:45 +02:00
Sergey
8396996ac3 Translated using Weblate (Russian)
Currently translated at 58.2% (596 of 1024 strings)
2017-06-03 20:01:31 +02:00
weqqr
b7eb64a4d4 Translated using Weblate (Russian)
Currently translated at 55.0% (564 of 1024 strings)
2017-06-03 20:01:20 +02:00
Loïc Blot
c6d5441105 Properly remove SAO when worldedges are overtaken (#5889)
* LuaEntitySAO: Remove beyond outermost mapchunk edges

Based on a commit by, and with help from, nerzhul.
Add 2 functions to class Mapgen:
A function to calculate actual mapgen edges, called from the Mapgen constructor.
A function called indirectly from content_sao.cpp per entity step to check SAO
position is within mapgen edges.

* Calculate borders from params not mapgen, which is not available everytime
2017-06-03 19:57:02 +02:00
Loic Blot
72eec0f6f5 Android: update build tools version + versionCode bump for release 2017-06-03 19:36:17 +02:00
red-001
994802a774 Remove unimplemented setting movement_speed_descend (#5892) 2017-06-03 14:44:04 +02:00
SmallJoker
7a2b9df970 Tooltips: Unify the tooltip[] and list[] description tooltip display functions (#5848)
* Tooltips: Unify the tooltip[] and list[] description tooltip display functions
2017-06-03 08:55:26 +02:00
Wuzzy
e91ffa0c91 Mention data type for get/set_attribute in docs (#5884) 2017-06-03 08:20:22 +02:00
Wuzzy
1b83b0acfd Lua_api.txt: Various edits and Markdown syntax improvements
Add minor bits of missing Lua API documentation.
Remove L-system lighting bug warning.
Clarify 2 lines in node timer documentation.
Fix many Markdown syntax errors in lua_api.txt.
2017-06-02 18:01:12 +01:00
Wuzzy
80fe516e4e Remove “inf” argument from shutdown command help (#5880) 2017-06-02 17:16:30 +02:00
Dániel Juhász
30c51a1115 Document hardware coloring and soft node overlays (#5876) 2017-06-02 15:57:59 +02:00
Dániel Juhász
001de6ffba Do not shade inventory items with textures (#5869)
This commit restores the old behavior: if an inventory item has an own
inventory texture, it will not be shaded.
2017-06-01 23:18:55 +02:00
Loïc Blot
1c69476d9f Show singlenode mapgen to menu (#5868)
Fix #5867
2017-06-01 23:18:24 +02:00
red-001
a7787bb9d2 Fix dropdown menu selection (#5847)
This fixes a bug that occurred when the selection list of a drop down menu was changed but the name was still the same.
2017-06-01 08:00:26 +02:00
red-001
ed8215042c Add more files and file types to .gitignore (#5859) 2017-05-31 20:08:13 +02:00
red-001
6444963fb1 Nametag: remove colour codes before calculating alignment. (#5862) 2017-05-31 20:07:33 +02:00
stujones11
1681a009bc Don't add damage flash while punch texture modifier is active (#5767) 2017-05-29 23:26:25 +02:00
Loïc Blot
ef152428ef guiVolumeChange: prevent wrong value position by using 1 label instead of 2 (#5839)
* Use only one label instead of two for the soundText, this permit to ensure both label & values are aligned
* Add '%' character too, to reflect it's a percentage volume
* Remove rect on regenerateGui (upper part) which shadows outer part and which is not needed outside of the DesiredRect affectation

Fix issue #5837
2017-05-28 15:23:30 +02:00
Nathan Salapat
c09e16ff5b Added missing levels to logging menu (#5836)
* Added missing levels to logging menu

Added none and error options to the debug_log_level in the advance settings.
2017-05-28 09:23:06 +02:00
paramat
210a339dce Mapgen files: Update and correct copyright credits 2017-05-26 20:46:03 +01:00
SmallJoker
d99b6fed55 Time: Change old u32 timestamps to 64-bit (#5818)
MacOSX build fix + cleanups
2017-05-26 14:03:36 +02:00
Loïc Blot
4d5ce8478c Enhance ABM performance a little bit by removing two std::set copy (#5815)
* Enhance ABM performance a little bit by removing two std::set copy

* ActiveBlockModifier::getTriggerContents now returns a const ref
* ActiveBlockModifier::getRequiredNeighbors now returns a const ref
* ActiveBlockModifier::getRequiredNeighbors is now purely virtual

* Little code style fix
2017-05-25 16:43:55 +02:00
Paramat
5b338638e0 Mgv6 mudflow: Remove decoration if 'dirt with grass' below flows away (#5798)
Mudflow of a neighbouring mapchunk extends into a mapchunk's edge, and could
remove 'dirt with grass' from under a decoration, creating unsupported
decorations.

Remove any decoration above if a 'dirt with grass' node is removed by mudflow.
2017-05-25 12:46:34 +02:00
red-001
2f291e6685 Close formspec on client shutdown. (#5811)
This ensures the shutting down progress bar is correctly rendered. This fixes #3050.
2017-05-25 12:46:24 +02:00
Loïc Blot
099624a513 Revert 1469424 and fix wrong char position when doing mouse selection on intlGUIEditBox (#5806)
* Revert 1469424075 and fix wrong char position when doing mouse selection on intlGUIEditBox

position should look at current line not the whole text and shift 1 character on the last line (due to \0 string delimiter)

* Finish the fix and prevent values under zero for getCursorPos which crash the program if found

* Forget to remove old comment

* fix zero to NULL

* Fix typo
2017-05-24 08:56:40 +02:00
rubenwardy
e8fb1f79bc Add formspec escaping to subgame list in create world dialog (#5808) 2017-05-24 07:45:23 +02:00
Paramat
649f641f28 Minimal: Add river water nodes (#5809)
Is a base terrain node needed by any core mapgen with sloping rivers.
2017-05-24 07:43:17 +02:00
Loic Blot
c445a3d958 Fix wrong return value in get_sky Lua call since ad9fcf859e
Fix #5803
2017-05-23 19:59:47 +02:00
Paramat
9ff5302c8b Client crashfix: load meta after digging (#5801)
Fixes a crash caused in MTGame by breaking and right-clicking a chest.

If loading meta, digging, node can disappear and we looked at meta, which is wrong because meta became NULL.

Pointer is invalidated and we read wrong memory area
2017-05-23 19:54:37 +02:00
Loic Blot
05309229b8 LINT fix & check all files with clang-format
Seems the diff mode doesn't work well, PR are detected as working whereas in master it's shown it's problematic (and really problematic). Use same check everywhere
2017-05-22 07:28:35 +02:00
Pierre-Adrien Langrognet
39f4a2f607 [CSM] Add send_chat_message and run_server_chatcommand API functions (#5747)
* [CSM] Add send_chat_message and run_server_chatcommand API functions

* Add client-side chat message rate limiting

* Limit out chat queue size

* [CSM] Add minetest.clear_out_chat_queue API function and .clear_chat_queue chatcommand

* Last fixes/cleanups before merge
2017-05-21 23:06:51 +02:00
Loic Blot
ec490abf58 Run updatepo.sh 2017-05-21 17:40:59 +02:00
Fixer
a58e00ecfc Translated using Weblate (Ukrainian)
Currently translated at 38.1% (350 of 918 strings)
2017-05-21 17:37:53 +02:00
weqqr
dc9286e2a1 Translated using Weblate (Russian)
Currently translated at 61.5% (565 of 918 strings)
2017-05-21 17:37:49 +02:00
Gaunthan Huang
c5dda0ae2f Translated using Weblate (Chinese (Simplified))
Currently translated at 74.2% (682 of 918 strings)
2017-05-21 17:37:44 +02:00
monolifed
b74075f2fe Translated using Weblate (Turkish)
Currently translated at 100.0% (918 of 918 strings)
2017-05-21 17:37:34 +02:00
Michael Higuera
a3376d4022 Translated using Weblate (Spanish)
Currently translated at 59.4% (546 of 918 strings)
2017-05-21 17:37:11 +02:00
Muhammad Nur Hidayat Yasuyoshi
2a61bfd249 Translated using Weblate (Malay)
Currently translated at 65.4% (601 of 918 strings)

Retranslate the correct word
2017-05-21 17:37:02 +02:00
yellowcrash10
1946442481 Translated using Weblate (Esperanto)
Currently translated at 31.8% (292 of 918 strings)
2017-05-21 17:36:17 +02:00
Unknown
b4916ad233 Added translation using Weblate (Dhivehi) 2017-05-21 17:36:08 +02:00
Erick Sanhueza
85be5a3e14 Translated using Weblate (Spanish)
Currently translated at 58.0% (533 of 918 strings)
2017-05-21 17:34:58 +02:00
Loic Blot
de840fe271 Fix LINT broken by dfa0c15ce0 2017-05-21 17:30:00 +02:00
bigfoot547
dfa0c15ce0 [CSM] Add function to get the definition of items (#5732)
Add node def and item def documentation.

Please be ready for merge!
2017-05-21 14:40:55 +02:00
red-001
ae483f1bd0 Prevent fall damage from overflowing when falling from a large height. (#5791) 2017-05-21 11:18:38 +02:00
Elijah Duffy
4dc97eb99f Menu: Merge singleplayer and server tabs (#5627)
Rename "Singleplayer" tab to "Play" and remove "Server" tab placing server functionality under a "Host Game" checkbox in "Play."
2017-05-21 10:07:05 +02:00
Loic Blot
50cb503d77 Add clientmods/mods.conf & client/mod_storage to gitignore 2017-05-21 10:06:13 +02:00
red-001
9d0f768cf6 [CSM] Allow enabling and disabling mods. (#5554) 2017-05-21 09:54:28 +02:00
Loïc Blot
90808a4f34 Real control fix (#5787)
* Allow enabling and disabling mods.

* Re-fix 605599b6f1

This breaks some chars like € in chat.

Instead verify is char is a non control char -> iswcntrl
2017-05-20 22:29:15 +02:00
you
358074b296 Fix instant digging (#5785)
Use runData.dig_time_complete instead of params.time to find out whether it's instant digging.
runData.dig_time_complete is set to something very big if the node can't be dug, whereas param.time is 0 when digging is impossible or it's instant digging. So not using param.time fixes #5728.
2017-05-20 20:43:13 +02:00
Loic Blot
a2bb776ea8 Fix wchar_t type on 605599b6f1
event.KeyInput.Char is a wchar_t, iswprint should be used
2017-05-20 20:13:29 +02:00
Paramat
60baf8120c Particle spawner: Do not spawn particles distant from player (#5766)
Previously, every particle was rendered by (even if not actually visible to)
the client regardless of distance. This significantly reduced client FPS.

Acts clientside, particle spawners are always sent to clients, but each
particle is checked for distance from the player.
As with 'add particle' the distance limit is set to 'max block send distance'
as this determines how far a client can see.
2017-05-20 16:46:35 +02:00
SmallJoker
af2f02552f [CSM] Correct the log destination of print() (#5784) 2017-05-20 16:46:12 +02:00
red-001
772944daf6 Fix CSM crash (#5779)
Caused by dc5bc6c and them made worse by 5ebf8f9
2017-05-20 16:45:49 +02:00
Loic Blot
7e185068c4 Typo fix in README.txt
Fix issue #4293
2017-05-20 16:04:44 +02:00
Elijah Duffy
dada983ff4 Add /clearinv chat command (#4994)
Allow players to clear their own inventory or that of another player with /clearinv command. server privilege is required to clear another player's inventory, no privileges are required to clear your own inventory.'
2017-05-20 12:56:17 +02:00
Loïc Blot
8797a0aa4b chat.cpp fix wchar_t isspace -> iswspace & wrong isspace on an index (#5783) 2017-05-20 12:56:02 +02:00
numberZero
7779bac3a5 Cleanup in content_mapblock (#5746)
NDT_LIQUID is being drawn by MapBlockMesh since a long time ago...
2017-05-20 12:29:54 +02:00
red-001
1ff5ee0b69 Improve password change menu (#5757)
- Fix the GUI getting messed up when resizing
- Save the input when resizing
2017-05-20 12:29:44 +02:00
Craig Davison
605599b6f1 Fix shift key producing space in console (#5777)
* Fix shift key producing space in console
2017-05-20 12:29:31 +02:00
red-001
00972d42d7 this might fix #5661, needs testing (#5775) 2017-05-20 10:48:44 +02:00
SmallJoker
673ac55a9d [CSM] Fix crash when the minimap is disabled. Caused by e25a38e 2017-05-20 10:26:09 +02:00
Loic Blot
1469424075 Fix input regression introduced by a4a377ecad
Fix #5776
2017-05-20 10:12:54 +02:00
Zeno-
d176dabeb4 Fix mem leak in mesh cache (#5781) 2017-05-20 08:16:16 +02:00
Loïc Blot
ce9802266e Various code cleanup & little performance improvement on HTTP download (#5772)
* Disable or remove unused enum members/functions
* Tiny code style fixes
* Make some functions const
* Replace ClientMediaDownloader std::unordered_map with std::map
2017-05-20 08:15:56 +02:00
you
35267406aa Do not create dummy normalmaps (#4180)
fixes #1811
2017-05-19 08:08:12 +02:00
you
a4a377ecad Fix textarea bug: clicking right of the end of a line caused the cursor to be in one of the next lines (#3474) 2017-05-19 07:57:21 +02:00
Dániel Juhász
75c393c915 Fix alpha for liquid nodes (#5494) 2017-05-19 07:46:10 +02:00
SmallJoker
674400523e Mainmenu: Fix issues while trying to enable all mods (#5770) 2017-05-19 07:45:47 +02:00
Loïc Blot
e25a38e3fb When minimap is disabled in configuration, really disable it (#5771)
* When minimap is disabled in configuration, really disable it
2017-05-19 07:25:27 +02:00
Loic Blot
1c6d2f596d Fix a warning pointed by GCC 7.1
lua_tonumber overflow in snprintf (12 bytes and only 10 can be written)
2017-05-18 20:55:27 +02:00
SmallJoker
9b5effffbb Builtin: Fix subgame mod selection (#5367) 2017-05-17 19:31:57 +02:00
Paramat
0443620c5e Particles: Do not send single particles to distant clients (#5760)
Previously, every individual particle on a server is sent to, and rendered by
(even if not actually visible), every client regardless of distance. This
significantly reduces client FPS and creates unnecessary network traffic.
Maximum distance is set by 'max block send distance' as this determines how far
a client is able to see.
2017-05-17 10:37:28 +02:00
bigfoot547
287605ca81 Append -debug to version string (#5765) 2017-05-17 09:41:41 +02:00
SmallJoker
0120fe16a7 CSM: Document forgotten functions 2017-05-16 21:57:26 +01:00
paramat
fd32005b0f Caverns: Remove unnecessary liquid excavation
Also disable CavesRandomWalk at a safer distance from caverns.

Excavating liquids in cavern code is unnecessary as in practice we are already
successfully disabling the generation of liquid caves that could intersect
with caverns and cause excessive amounts of spreading liquids in caverns.

However to be safer this commit now disables liquid caves at a larger distance
from caverns, to compensate for liquid caves being able to generate up to a
mapblock beyond a mapchunk border.

Not excavating liquids in cavern code also allows a feature i am working on in
experimental new core mapgens, but also allows for more flexibility in future.
2017-05-16 21:56:51 +01:00
Loic Blot
582ee15d8e Fix a memleak pointed by @Zeno- in MeshUpdateQueue
This leak was introduced when added cache to MeshUpdateQueue and only occurs when leaving world.
2017-05-16 08:27:18 +02:00
Zeno-
1bf9b25fb4 Fix uninitalised variable in event.cpp (#5764) 2017-05-15 20:10:29 +10:00
ezhh
018217f6b2 Add option to use neither node highlighting nor outlining 2017-05-15 19:51:40 +10:00
SmallJoker
febd07fc0d No cursor lock when window inactive (#5754) 2017-05-13 17:42:42 +02:00
Loïc Blot
0d4d35ab93 Android dependencies updates (#5755)
* irrlicht ogles 5122 -> 5145
* openssl 1.0.2j -> 1.0.2k
* curl 7.52 -> 7.54
* sqlite 3.15.2 -> 3.18.0
2017-05-13 13:32:59 +02:00
Loïc Blot
6673aff685 Limit properly the sound setting at updateSound runtime step (#5753)
* Limit properly the sound setting at updateSound runtime step

Fix #5026

* Add a comment
2017-05-13 12:03:11 +02:00
Loïc Blot
9b8ca3a746 Move KeyList & InputHandler from game.h to client/inputhandler.h (#5752)
* Move KeyList & InputHandler from game.h to client/inputhandler.h

We have a header for inputs, move inputhandler class & related keylist object to it

Also introduce a cpp file for MyEventReceiver::OnEvent function in inputhandler.h because a so huge function doesn't needs to be inlined

* Pass clang-format on inputhandler.{cpp,h} (compatible)
2017-05-13 11:05:16 +02:00
Loic Blot
5cb7f6a9b7 Android build fix 2017-05-13 09:10:43 +02:00
red-001
98327a59c4 Minor pause/escape menu improvements (#5751)
- Split movement keys into separate entries.
- Increase buffer size due to the above change.
- Change capitalisation.
- Remove code-style violating white spaces.
2017-05-13 08:50:19 +02:00
rubenwardy
f286c54908 Replace inconsistent mentions of core.* with minetest.* (#5749) 2017-05-12 11:27:58 +02:00
red-001
0e0c824ea7 Rework escape/pause menu (#5719)
* Rework escape/pause menu

- Remove build information
- Use current controls instead of default controls
- Add information about the current server in place of the build information
- Add text saying the game is paused to if in singleplayer mode.
rework pause/escape menu

* improve consistency + display server_name
2017-05-11 10:39:37 +02:00
red-001
441740e021 Menu: Fix starting a server if the server address is an empty string. (#5742)
Minetest uses an empty string internal to signal that a server should be started.
2017-05-10 23:25:45 +02:00
sfan5
071e114ffa Private nodemeta (#5702)
* Private node metadata that isn't sent to the client
2017-05-10 15:29:21 +02:00
SmallJoker
6945f807ab minetest.deserialize: Throw error when argument not string (#5738) 2017-05-09 23:11:20 +02:00
red-001
34c52d0ad7 Android: Fix crash while loading main menu (#5736)
Broken by 43d1f37
2017-05-09 18:30:34 +02:00
red-001
8729e7daec Add cancel button to password change menu. (#5720)
* Add cancel button to password change menu.
2017-05-09 11:04:45 +02:00
Auke Kok
a32a06e088 Move Pilzadam to previous developers. (#5735) 2017-05-09 08:56:57 +02:00
paramat
da88a18676 Revert custom player collision box and step height commits
These caused inability to pass through 2 node high spaces or step up onto slabs
or steps when a new client connected to an older server.
2017-05-09 03:52:28 +01:00
Loïc Blot
c07c642ab0 read_schematic_replacements: ensure fields are strings (#5726)
* read_schematic_replacements: ensure fields are strings

add a type check before reading strings on read_schematic_replacements deserializer

* throw LuaError instead of asserting the whole client
2017-05-08 20:43:03 +02:00
paramat
5e04f1a335 Custom step height: Fix implementation
Recent commit 45ab62d6a3 had a coding error that
made climbing out of water difficult due to an incorrect value of the step height
when not 'touching ground'.
It also incorrectly multiplied the custom stepheight by BS, resulting in being
able to step-up 2 nodes if set to the default of 0.6, or even 0.3.
Also the implementation was wrong because it customised the step height when
not 'touching ground', this step height is for a slight rise when catching the
edge of a node during a jump, and should always remain at 0.2 * BS.
2017-05-08 05:59:19 +01:00
paramat
3342dcc4bc Shaders: Remove unused water surface shader
Also remove hardcoded MTGame node.

The 'water surface shader' was duplicated shader code in preparation for
intended new water surface shaders. For development purposes the MTGame node
'default:water_source' had it's top tile assigned to 'water surface shader'.
Due to shader duplication this commit does not cause any change to shader
behaviour.
2017-05-08 05:58:59 +01:00
Loïc Blot
c1b3ed4180 Player attrs: permits to remove an attribute by setting value to nil (#5716)
* Player attrs: permits to remove an attribute by setting value to nil

When doing player:set_attribute("attr", nil) remove attribute

Also remove a useless check on C++ API part (already done by checkplayer)

Fix #5709
2017-05-07 12:13:15 +02:00
Loic Blot
0d7c37943b LINT fix since d067894816 2017-05-07 11:07:17 +02:00
paramat
2d5bd7f414 Player properties: Set correct default collisionbox
Recent commit b6f4a9c7e1 removed a hardcoded
player collisionbox which resulted on falling back to an incorrect default.
This stopped players walking through 2-node high spaces and made the player
slightly wider.

Improve docs for custom player collisionbox feature and reformat nearby lines.
2017-05-07 06:10:13 +01:00
T0ny2
d067894816 Replace occurrence of luaL_reg in l_camera.cpp
Related to commit 41c5483. Replace an occurrence of luaL_reg in
src/script/lua_api/l_camera.cpp (added by commit de028fc).
2017-05-07 06:09:30 +01:00
ShadowNinja
c6e96c645b Fix myfloor(0.0) 2017-05-06 16:10:03 -04:00
ShadowNinja
77597c4ff3 Clean up numeric.h and split FacePositionCache from it
I also optiized FacePositionCache a bit: I removed a map
lookup and vector copy from both branches of getFacePosition.
2017-05-06 16:09:45 -04:00
TeTpaAka
b6f4a9c7e1 Make the player collisionbox settable 2017-05-06 15:41:05 -04:00
ShadowNinja
43d1f375d1 Use a settings object for the main settings
This unifies the settings APIs.

This also unifies the sync and async registration APIs, since the async
registration API did not support adding non-functions to the API table.
2017-05-06 15:33:19 -04:00
Loic Blot
a024042bf5 Fix codestyle since CSM Camera API 2017-05-06 21:30:27 +02:00
Wuzzy
07c17db114 Add configurable key bindings for hotbar scrolling, and for changing volume. 2017-05-06 21:21:59 +02:00
Sapier
45ab62d6a3 Use stepheight from CAO instead of hardcoded value 2017-05-06 21:18:17 +02:00
red-001
5ebf8f9450 [CSM] add on_item_use (#5544) 2017-05-06 21:12:44 +02:00
TeTpaAka
6658ad3d94 Make players respect makes_footstep_sound in the object properties 2017-05-06 20:16:16 +02:00
bigfoot547
de028fc056 [CSM] Add camera API (#5609)
* [CSM] Add camera API
roper rebase & squash

* Address nerzhul's review
2017-05-05 22:07:36 +02:00
Paramat
e8b00fdf98 Clouds API: Fix yellow clouds at dawn and dusk (#5707) 2017-05-05 22:07:25 +02:00
Loic Blot
7c82f1e5dd Add missing server sending rule for bd921a7916 2017-05-05 20:21:04 +02:00
Wayward One
fe247f38f7 Fix Android build (#5706)
* Fix Android build
2017-05-05 17:27:50 +02:00
Loïc Blot
21e0a049f8 Save minetest screen width/height options when modified (#5683)
* Save minetest screen width/height options when modified

* Add autosave_screensize setting (default true)

* Fix @SmallJoker comments
2017-05-05 13:47:11 +02:00
red-001
d6cf5450a8 Add option to also check the center to find_node_near (#5255)
* Add option to also check the center to `find_node_near`
2017-05-04 22:52:58 +02:00
yellowcrash10
6fb27d3b2e Translated using Weblate (Esperanto)
Currently translated at 31.9% (293 of 918 strings)
2017-05-04 17:14:24 +02:00
Michele Mainardi
e2199874a4 Translated using Weblate (Italian)
Currently translated at 96.0% (882 of 918 strings)
2017-05-04 17:14:02 +02:00
Mário
b71ed1a957 Translated using Weblate (Portuguese)
Currently translated at 66.9% (615 of 918 strings)
2017-05-04 17:13:50 +02:00
Viktar Vauchkevich
87b6458abc Translated using Weblate (Belarusian)
Currently translated at 100.0% (918 of 918 strings)
2017-05-04 17:13:30 +02:00
David Capello
f441e0d76e Translated using Weblate (Spanish)
Currently translated at 58.0% (533 of 918 strings)
2017-05-04 17:11:37 +02:00
Laura Arjona Reina
4cf0bf8ff4 Translated using Weblate (Spanish)
Currently translated at 57.9% (532 of 918 strings)
2017-05-04 17:11:25 +02:00
metarmask
733b49b17f Added translation using Weblate (Swedish) 2017-05-04 17:09:47 +02:00
BreadW
41e9074c7d Translated using Weblate (Japanese)
Currently translated at 49.6% (456 of 918 strings)
2017-05-04 17:08:49 +02:00
monolifed
1b3ea47e99 Translated using Weblate (Japanese)
Currently translated at 49.4% (454 of 918 strings)
2017-05-04 17:08:32 +02:00
Andrey K
b8993ee5ac Translated using Weblate (Russian)
Currently translated at 60.1% (552 of 918 strings)
2017-05-04 17:07:57 +02:00
monolifed
194df438c2 Translated using Weblate (Turkish)
Currently translated at 93.6% (860 of 918 strings)
2017-05-04 17:07:36 +02:00
Muhammad Nur Hidayat Yasuyoshi
1a9cd99056 Translated using Weblate (Malay)
Currently translated at 54.9% (504 of 918 strings)
2017-05-04 17:07:36 +02:00
Vaughan Lapsley
c874bfa5c3 Remove CMAKE -ffast-math flag from OSX/FreeBSD
Fixes issue: #4274

I have tested on MacOS 10.12.4

Requires testing on:
FreeBSD, Windows and Linux which I do not have access to.
2017-05-04 13:24:36 +02:00
Loic Blot
9a9ae7d65c LINT fix since cloud API merge 2017-05-04 07:52:31 +02:00
paramat
dd591119a3 Directional coloured fog: Fix order of SColor components
'video::SColor pointcolor' was initialised with order RGBA instead of ARGB.
No change in behaviour as 'm_bgcolor' has alpha 255.
2017-05-04 04:26:06 +01:00
paramat
76ec6b8313 Clouds: Fix reddish clouds. Add missing alpha update
Fix accidental swap of red and blue components that caused reddish clouds
Add missing update of alpha in remoteplayer.cpp
2017-05-04 04:26:06 +01:00
red-001
ae0d8f74d7 Add function to get server info. 2017-05-04 04:25:45 +01:00
SmallJoker
468eeb618e Fading soungs: Fix client crash on older servers 2017-05-03 13:48:46 +02:00
paramat
ad9fcf859e Set sky API: Add bool for clouds in front of custom skybox
Default true.
Add 'm_clouds_enabled' bool to sky.h, set from new bool in 'set sky' API.
Make 'getCloudsVisible()' depend on 'm_clouds_enabled' instead of
'm_visible' (whether normal sky is visible).
2017-05-02 20:42:35 -07:00
SmallJoker
f9fdb48dc8 Sneak: Improve and fix various things
Remove useless `got_teleported`.
Fix jitter when walking against the sneak limits.
Fix damage evading on sneak ladders.
2017-05-03 03:16:20 +01:00
Brandon
bd921a7916 Sound API: Add fading sounds 2017-05-03 03:12:45 +01:00
Ben Deutsch
f1d7a26b7c Add clouds API 2017-04-30 00:06:13 +01:00
Loïc Blot
95409da87d Optimize updateFastFaceRow processing by removing some TileSpec copy (#5678)
* Optimize updateFastFaceRow processing by removing some TileSpec copy

It permit to decrease this function from 54% runtime to 45% and reduce copy from 14% runtime to 12.5%
getTileInfo also reduced from 27% to 23%

* makeFastFace should use a const ref too

this trigger a const pointer need in the underlying function

Also fix some code style and prevent calculating 4 times the same position at a point

* Reduce a comparison cost for lights in updateFastFaceRow
2017-04-29 20:36:09 +02:00
shivajiva101
c729543ec4 Fix visual slide issue with set_detach, fixes #5620 2017-04-29 18:18:46 +02:00
Loïc Blot
3251e44938 content_cao: fix getPlayerControl structure copy on each step (#5677)
Also fix some codestyle issues around it.
2017-04-29 18:16:58 +02:00
Loïc Blot
3db66b4531 Client & ClientEnvirnment: don't create fake events (#5676)
Instead of create fake events on the stack on each loop call (Game::run), verify is queue is empty or not and handle event directly if there is.

This prevents fake ClientEvent creation & memory allocations

Same fix is also applied on ClientEnvironment, & rename getClientEvent to getClientEnvEvent to match ClientEnvEvent object
2017-04-29 17:25:25 +02:00
SmallJoker
f727f54192 Fix Travis/unittest broken since b662a45 2017-04-29 16:40:56 +02:00
Loic Blot
9762650f97 Remove legacy unused define DIGGING_PARTICLES_AMOUNT 2017-04-29 12:18:58 +02:00
Vincent Glize
dc5bc6cac7 [CSM] Add event on_place_node API lua (#5548)
* [CSM] Add event on_place_node API lua
2017-04-29 12:08:16 +02:00
Loic Blot
ecf08255b0 Fix Lint broken by b662a4577d 2017-04-29 09:47:22 +02:00
Auke Kok
1ecc8756bc Reorder TileLayer. (#5638)
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.
2017-04-29 09:16:32 +02:00
Vincent Glize
19960e26c6 [CSM] add screenshot api lua (#5674)
* [CSM] add screenshot api lua
2017-04-29 09:16:06 +02:00
ShadowNinja
b662a4577d Clean up getTime helpers
This increases size of the getTime return values to 64 bits.
It also removes the TimeGetter classes since the getTime functions
are now very precise.
2017-04-28 14:43:18 -04:00
you
7f4cdbcbe9 Fix click-digging torches (#5652)
Torches are dug instantly again.
When the digging time is 0, a delay of 0.15 seconds is added between digging nodes. If the left mouse button is released, the delay is set to 0, thus click-digging.
2017-04-28 20:12:28 +02:00
Auke Kok
e21a1ab3bd Allow mesh and nodeboxes to wave like plants or leaves. (#3497)
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.
2017-04-28 20:11:43 +02:00
ShadowNinja
c761717f11 Fix Travis builds 2017-04-27 10:57:46 -04:00
Louis Pearson
04ba2d2721 Search user path for sounds (#5657) 2017-04-27 21:33:59 +10:00
Loïc Blot
b82e5ec880 Don't permit to copy Scripting classes (Client,Server,Mainmenu) 2017-04-27 11:52:44 +02:00
red-001
1ef9eee311 Allow scripts to get the client protocol version in non-debug builds. (#5649) 2017-04-27 11:49:44 +02:00
Bluebird
d130e1fdc0 Fix incorrect formspec-tooltip doc, add detail in 'floodable' & 'on_flood' docs (#5660)
* Fix incorrect formspec tooltip documentation

* Improve `floodable` and `on_flood` documentation.

The original documentation did not specify that liquids should not themselves be floodable. This is probably something that should be mentioned.
2017-04-27 11:49:07 +02:00
Loic Blot
1670bc7366 Fix Android build since 2818d3f224 2017-04-26 21:11:46 +02:00
red-001
ff1ef67dcc Fix #5655 (#5658)
Client: Don't send `TOSERVER_RECEIVED_MEDIA` since it's not used anymore
Server: Handle `TOSERVER_RECEIVED_MEDIA` using `Server::handleCommand_Deprecated`
2017-04-26 21:10:13 +02:00
Bluebird
70ceeb80a1 Tiny documentation fix. (#5659)
There are plenty of lines longer than 80 characters, and spliting the function declaration across two lines can be momentarily confusing.
2017-04-26 07:24:15 +02:00
ShadowNinja
2818d3f224 Rename Scripting API files for consistency 2017-04-25 13:41:36 -04:00
Louis Pearson
db17225a97 Footsteps without view bobbing (#5645)
* Remove redundant view_bobbing setting

Also fixes bug where disabling view_bobbing disables footstep sounds.

* Removes redundant view_bobbing setting

Setting view_bobbing amount to 0 is now the only way to
turn view_bobbing on and off. Also fixed a bug where footstep
sounds would not play when view_bobbing was disabled.
2017-04-25 21:11:51 +10:00
Loïc Blot
a7e131f53e Fix various points reported by cppcheck (#5656)
* Fix various performance issues reported by cppcheck + code style (CI)

* Make CI happy with code style on master
* guiFileSelectMenu: remove useless includes
* some performance fixes pointed by cppcheck
* remove some useless casts
* TextDest: remove unused setFormSpec function

* Fix various iterator post-increment reported by cppcheck
2017-04-25 10:21:42 +02:00
Loïc Blot
af96309621 Gitlab-CI: keep build workspace only 1 hour 2017-04-24 16:06:27 +02:00
Loic Blot
d7ddceac73 Fix lint since recent player to db merge 2017-04-23 16:22:53 +02:00
Loïc Blot
29ab20c272 Player data to Database (#5475)
* Player data to Database

Add player data into databases (SQLite3 & PG only)

PostgreSQL & SQLite: better POO Design for databases

Add --migrate-players argument to server + deprecation warning

* Remove players directory if empty
2017-04-23 14:35:08 +02:00
Loic Blot
dda171d292 LINT fix 2017-04-23 10:24:00 +02:00
Loic Blot
485bf21998 Revert "CONTRIBUTING: disallow signed git commits"
This reverts commit 7a6502a7a5.

Signed commits are supported by PPA and weblate now
2017-04-23 10:21:08 +02:00
Loïc Blot
91a9382c25 Pass clang-format on various cpp/header files (#5559) 2017-04-23 09:52:40 +02:00
red-001
0c34fe20a1 Network:Remove old opcodes and fix documentation. (#5573) 2017-04-22 13:59:02 +02:00
paramat
4c03190ce8 Mgflat, Mgv7: Fix noise crash on world exit.
Fix crash caused by destructor 'delete' on noise objects that are not
created due to mapgen options.
Crash was caused by commit 57eaf62c69
2017-04-22 05:37:33 +01:00
Dániel Juhász
f6d1b682d3 Add /fixlight chat command 2017-04-22 01:24:41 +01:00
paramat
57eaf62c69 Mgflat, Mgv7: Only create noise objects if needed 2017-04-22 01:24:03 +01:00
paramat
58c083f305 Sneak glitch: Set default to false
The 'sneak glitch' physics override now controls whether a player can
use the new move code replications of the old sneak side-effects:
sneak ladders and 2 node sneak jump. This completes our intention to
replicate the old sneak side-effects in new code and provide them as
an option that is disabled by default.
2017-04-22 01:23:57 +01:00
Auke Kok
cca58fe0fd Add on_flood() callback.
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.
2017-04-22 01:23:51 +01:00
Dániel Juhász
8464da7585 Fix a memory leak (#5636) 2017-04-22 00:55:07 +02:00
Loic Blot
3e71c8f482 Fixing warning pointed by @sfan5 and clang and cleanup guiFileSelectMenu
* Also pass clang-format on guiFileSelectMenu.h and remove it from whitelist
2017-04-22 00:51:56 +02:00
Loic Blot
4f4e2e3e83 Revert a const ref on update texture
if mod is a reference to a class member a variable swap breaks.
We should find a way to keep this const ref if possible.
Added a comment about this in header
2017-04-22 00:36:59 +02:00
Loïc Blot
113c85a66a lua: remove core.cause_error call (#5637)
it was used in minimal to trigger core crash, not very useful
2017-04-22 00:34:00 +02:00
Loïc Blot
dc0e9097d3 Fix various performance issues reported by cppcheck + code style (CI) (#5635)
* Make CI happy with code style on master
* guiFileSelectMenu: remove useless includes
* some performance fixes pointed by cppcheck
* remove some useless casts
* TextDest: remove unused setFormSpec function
2017-04-21 23:40:48 +02:00
orwell96
f151b23220 Fix #5617 - respect message and reconnect parameters when shutting down immediately (#5621) 2017-04-21 19:31:59 +02:00
Dániel Juhász
900b816162 Fix after soft node overlays
This removes a segmentation fault and makes node meshes well colorized.
2017-04-21 19:18:09 +02:00
Dániel Juhász
1ffb180868 Soft node overlay (#5186)
This commit adds node overlays, which are tiles that are drawn on top of
other tiles.
2017-04-21 23:34:59 +10:00
Loïc Blot
2ad74a9e8b Gitlab-CI enhancements (#5629) 2017-04-21 10:22:20 +02:00
Loïc Blot
370354cc87 Fix various performance issues reported by cppcheck (#5628)
* Also remove 1 non declared but defined functions
2017-04-21 10:06:08 +02:00
Ekdohibs
de5ecc9fa3 Run generate_from_settingtypes.lua 2017-04-20 06:06:15 +02:00
Dániel Juhász
57e5aa6628 Light update for map blocks
This is not really different from the light update of a voxel
manipulator. This update does not assume that the lighting was correct
before, therefore it is useful for correction.

Also expose this function to the Lua API for light correction, and
allow voxel manipulators not to update the light.
2017-04-20 05:39:14 +02:00
Dániel Juhász
6d1e6f8898 Split light update into two parts
The common part can be reused.
2017-04-20 05:31:50 +02:00
Loïc Blot
f98bbe193e Fix various copy instead of const ref reported by cppcheck (part 3) (#5616)
* Also remove 2 non declared but defined functions
* Make some functions around const ref changes const
2017-04-20 00:12:52 +02:00
Loïc Blot
f3fe62a0bf Fix various copy instead of const ref reported by cppcheck (#5615)
* Also remove InventoryList::peekItem unused function
* Fix some post increment to preincrement reported by cppcheck
2017-04-19 23:02:07 +02:00
paramat
cfe0291b13 Conf.example: Move some lines to minetest.conf.example.extra
Some information in conf.example cannot be generated from
settingtypes.txt, moving it to a new file makes generating
conf.example while preserving that information easier.

Regenerate conf.example from settingtypes.txt.
2017-04-19 02:02:11 +01:00
MarkuBu
efd509f796 Pointed thing to face pos: Fix crash if opening door with slab or stair
Avoids crash caused when 'pointed thing -under' and '-above' are not
face-neighbours, for example in the case of pointing to the top half
of a door.
2017-04-19 02:01:42 +01:00
Hybrid Dog
858c722974 Tools: Fix tool digging speed limit 2017-04-19 02:01:15 +01:00
Loïc Blot
cf37a55690 Fix various variables passed by copy instead of const ref (#5610)
Pointed by cppcheck
2017-04-19 00:36:30 +02:00
Loïc Blot
5f2af7c4e8 Fix broken lint since 04cc9de8f2 2017-04-18 17:13:50 +02:00
Auke Kok
93c1d511e3 Reorder TileSpec. (#5591)
Put accessed members that are needed by updateFastFaceRow()
all in the same cacheline.
2017-04-18 07:48:17 +02:00
Ekdohibs
eddf16eee9 Fix always using the xbox layout (reported by coverity). 2017-04-18 06:47:08 +02:00
Auke Kok
5433e9bd19 Don't make TAB exit game if bound to inventory.
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.
2017-04-17 21:45:40 -07:00
SmallJoker
6120251320 Fix MSVC build broken by 34d32ce
`round` -> `myround`
Remove superflous `floor` calls
2017-04-17 14:02:26 +02:00
Perttu Ahola
04cc9de8f2 MeshUpdateQueue: Add a MapBlock cache that minimizes the amount of MapBlock copying done in the main thread
Cache size is configurable by the meshgen_block_cache_size (default 20 MB).

New profiler stats:
- MeshUpdateQueue MapBlock cache hit %
- MeshUpdateQueue MapBlock cache size kB

Removes one type of stutter that was seen on the client when received MapBlocks
were being handled. (the "MeshMakeData::fill" stutter)

Kind of related to at least #5239

Originally preceded by these commits, now includes them:
- Move the mesh generator thread into src/mesh_generator_thread.{cpp,h}
- mesh_generator_thread.cpp: Update code style
- MeshUpdateThread: Modify interface to house a different implementation: Actual functionality will be changed by next commits.
- MeshMakeData: Add fillBlockData() interface (so that caller can fill in stuff from eg. a MapBlock cache)
2017-04-17 14:58:29 +03:00
Perttu Ahola
4323ad163f Include container.h in util/thread.h. util/thread.h doesn't compile without it 2017-04-17 14:58:29 +03:00
paramat
f6da7b3fda Sneak: Add option for old move code
Temporary option for the old move code for specific old sneak behaviour.
Enabled by setting the added 'new move' physics override to false.
By default 'new move' is true.
2017-04-17 10:13:05 +01:00
Loic Blot
907be0ab91 Remove an unused variable in Android Build 2017-04-17 09:37:12 +02:00
Auke Kok
97988a1044 Plug two minor Leaks (#5603)
* Resource leak: CHECK_FILE_ERR returns, without freeing chunk_name.

Found with static analysis.

* Resource leak: leaks `page` on error path.

Found with static analysis.
2017-04-17 09:04:58 +02:00
Loïc Blot
73de17afa8 Android progressbar fix (#5601)
* Fix progressbar for Android

Fixes #5599
Fixed #5403 

* draw_load_screen: use texturesource
  this permits to unify texture loading code
* scale progress bar

* Add gl version check for GL_OES_texture_npot. This fixed the texture on loading screen

* Remove two sanity checks pointed by @celeron55

* sfan5 comments + android ratio fixes
2017-04-16 14:44:15 +02:00
Nathanaël Courant
d17636484d Disable android leveldb by default (#5596)
1) Now leveldb is brick (thanks google)
2) By default, use SQLite3, this work perfectly and NOBODY not use LevelDB on Android :)
2017-04-16 09:48:48 +02:00
Loïc Blot
34d32ce55a Implement delayed server shutdown with cancelation (#4664) 2017-04-15 23:19:18 +02:00
SmallJoker
0f955bf7fa Minimap: Do a double-typecast to fix compiling with MSVC 2017-04-15 14:30:27 +02:00
Loïc Blot
a9aad4d061 Partial damage cheat fix: node damages server side (#4981)
* Damage cheat fix: server side

* Lava/Node damages overtime server side
* lava hurt interval is only for old protocol
2017-04-15 09:25:43 +02:00
Loic Blot
b1e6c2a9b8 NetworkPacket: don't copy push std::string and std::wstring 2017-04-14 18:26:24 +02:00
Loic Blot
093e621643 Fix wrong channel type in Client/Server CommandFactories
This is a u8 not a u16
2017-04-14 15:56:40 +02:00
Loïc Blot
b0be7ab61e ClientIface::sendToAll: honor packet configuration (#5590) 2017-04-14 15:34:01 +02:00
Loic Blot
98286a24bc Fix android build 2017-04-14 09:26:11 +02:00
bigfoot547
e80a83d1cb [CSM] Add function to set minimap shape (#5569)
* [CSM] Add function to set minimap shape

Also deprecates `toggle_shape`.

* Oh fish, I messed that one up!

* Fix Style

* Sorry, I missed something

I still had the `luamethod` call in there!

* Add getters

* Remove extra line

* Remove useless variable

Please review again @nerzhul . Thanks!

* Satisfy nerzhul
2017-04-14 09:04:41 +02:00
Dániel Juhász
6f641df8a5 Only use palette if param_type2 is correct 2017-04-13 09:52:48 -07:00
Dániel Juhász
021e667511 Add documentation for map block format 27 (#5576) 2017-04-13 10:19:46 +02:00
Vincent Glize
8bdf9a44c6 [CSM] Fix localplayer documentation (#5557) 2017-04-12 23:05:01 +02:00
numberZero
83508277ce Fix inability to change metadata using stack:to_table() (#5547) 2017-04-12 16:51:07 +02:00
Loic Blot
1399678ffd Fix fips_cipher_abort warning and other duplicate macros 2017-04-12 09:06:26 +02:00
red-001
4e2479e46a [CSM] Allow escaping chatcommands and add missing calls to gettext. (#5565) 2017-04-11 23:35:25 +02:00
t0ny2
a3e7372686 Replace occurrence of luaL_reg in l_localplayer (#5566)
Related to commit 41c5483. Replace a final occurrence of luaL_reg in
src/script/lua_api/l_localplayer.cpp
2017-04-11 19:29:24 +02:00
paramat
59911761ef Sneak glitch: Detect ledge for 2-node climb-up
Re-creates the old sneak-jump behaviour in new code.
Enabled by the 'sneak glitch' physics override.
When a ledge is detected the jump speed modifier is set to the larger
of 'physics override jump' and 1.3 to allow a 2-node climb-up.

An unexpected side-effect is the simple sneak ladder working smoothly.
2017-04-11 05:41:13 +01:00
red-001
eb587996e4 [CSM] Use more gettext (#5553) 2017-04-10 21:14:00 +02:00
red-001
e8d8723320 [CSM] Move .list_players and .disconnect to builtin. (#5550) 2017-04-10 21:13:20 +02:00
Loïc Blot
0bc306e337 Clang-format fix for Android 2017-04-10 09:40:06 +02:00
Loïc Blot
b4106ca58f Clang-format styles fixes since previous commit 2017-04-10 09:17:53 +02:00
Loic Blot
0419552c92 Clang format: fix LINT on old PR which doesn't have LINT enabled 2017-04-10 08:05:03 +02:00
number Zero
0a8834608d Hard-coded undersampling.
Adds uniform undersampling for the 3D rendered scene. GUI elements
are not undersampled, resulting in better playability for users
with low-performance platforms with readable fonts and formspecs.

The undersampling setting can be set to 0 (disabled), 2, 3, 4 pixels
which translates into a resolution reduction of x4, x9 or x16, and
is significant.
2017-04-09 17:30:19 -07:00
Vincent Glize
8ad3dad137 LocalPlayer api lua 2017-04-08 22:04:30 -07:00
Dániel Juhász
58d83a7bb2 Hardware coloring for itemstacks
Adds the possibility to colorize item stacks based on their metadata.

In the item/node definition you can specify palette (an image file)
and color (fallback color if the item has no palette or metadata).
Then you can add palette_index to the metadata.

Dropped itemstacks with different colors do not merge.
2017-04-08 18:39:15 -07:00
red-001
d4e9dd4643 Move chat command handling code from C++ to Lua (#5528) 2017-04-08 20:03:57 +02:00
raymoo
fb4c730708 Document that write_json will error on unserializable types. (#5539)
Previously it was erroneously documented that it would save them as null.
2017-04-08 10:42:59 +02:00
Loïc Blot
8c8333bf68 Prepare for Linux daily build packages (using Gitlab.com CI) (#5542)
* Prepare for Linux daily build packages (using Gitlab.com CI)
2017-04-08 10:19:07 +02:00
Loïc Blot
41c5483024 Replace luaL_reg with luaL_Reg as recent LuaJIT dropped the Lua 5.0 compat (#5541)
We are bundling Lua5.1 which has same macro
2017-04-08 09:28:37 +02:00
Loic Blot
01f9d05f23 code style fix on src/script/cpp_api/s_client.h 2017-04-08 08:45:58 +02:00
Vincent Glize
f73534640a [CSM] Add event on_connect player API lua (#5540)
* Add event on_connect player API lua
2017-04-08 08:20:30 +02:00
Loic Blot
ff4fef570e Fix cmake library default build problem since moving to lib/
Also make Lua library check a cmake module
2017-04-07 23:56:02 +02:00
Loic Blot
4af99b75cf Pass clang-format on 14 trivial header files fixes
Also remove them from whitelist
2017-04-07 23:22:00 +02:00
rubenwardy
271d7c31e6 Fix signed/unsigned conversion warning
There was no bug here (as I checked for negativeness),
however it's good to get rid of warnings.
2017-04-07 19:06:50 +01:00
SmallJoker
c28a843592 Cavegen: Fix non-constant array initializer error for MSVC 2017-04-07 17:59:27 +02:00
SmallJoker
71ffe699d0 Settings: Update documentation (#5534)
Now documented (sorted a-z):
enable_console
enable_particles
creative_mode
hud_scaling
inventory_image_hack
keymap_console
keymap_zoom
shader_path
view_bobbing
2017-04-07 17:10:26 +02:00
Loic Blot
f7088f69ab Clang-format: fix some header files and remove them from whitelist 2017-04-07 08:50:17 +02:00
YuGiOhJCJ
b751c59f43 Add the REQUIRE_LUAJIT option (#5526) 2017-04-07 07:29:43 +02:00
adrido
676951d90d Windows: Skip cmd for release builds (#5416) 2017-04-07 07:14:39 +02:00
Auke Kok
94358a709b Fix "error: ‘playerSAO’ was not declared"
Cause: 351cc2e79a

A rebase issue missed a rename from playerSAO to playersao.

Tested.
2017-04-06 22:05:31 -07:00
Ekdohibs
a5c9174bad Fix spacing 2017-04-06 21:27:29 -07:00
Ekdohibs
08b680d588 Fix problems when overriding the hand:
- If the hand can dig a node the item wielded can't, allow to dig it anyway.
- Fix the API callbacks from setting the hand instead of the wielded item.
2017-04-06 21:27:29 -07:00
rubenwardy
bce0d458d8 Add Joystick type detection and Xbox controller support
* Add joystick type detection (with joystick_type setting to override it)
* Fix multiple joysticks from interfering with each other by only reading from one (add joystick_id setting)
* Add support for Xbox controllers
2017-04-06 20:58:52 -07:00
presstabstart
351cc2e79a Fix multiple death messages (#5305)
Fix multiple death messages (#3565) and damage server logs after death.
2017-04-06 20:32:50 -07:00
orwell96
63e175dd70 Show media download progress in percent on progress screen (#5498) 2017-04-07 00:03:29 +02:00
Loïc Blot
3a90b78a03 LINT: Switch whitelist check from egrep to awk
Bonus: make CI happy with the last rules fix
2017-04-06 23:21:40 +02:00
red-001
88b9b9652a [CSM] Add function to get the server protocol version. (#5529) 2017-04-06 22:50:45 +02:00
Loïc Blot
be06636965 Clang-format continuation indent fixes + .gitignore additions
* Proper support for continuation indents in clang format
* make src/wieldmesh.h proper and remove it from whitelist
* Add CLion default build directories in .gitignore
2017-04-06 15:37:02 +02:00
Loïc Blot
00138a52d8 Clang format brace style fix 2017-04-06 15:27:47 +02:00
Loïc Blot
48ce9c9b30 Fix clang-format binary selection
Also fix spaces to tabs
2017-04-06 10:01:09 +02:00
Loic Blot
4b15f76ed1 Move LINT process in dedicated shell & fix
Move lint to dedicated shell permit to use it from your shell easily to check what is wrong
Also fix recent regressions in code style
2017-04-06 09:10:59 +02:00
Loic Blot
503e1d2b7c Clang format: only show errors on non whitelisted files 2017-04-06 08:42:52 +02:00
fdedraco
671d37adff Translated using Weblate (Indonesian)
Currently translated at 69.4% (638 of 918 strings)
2017-04-06 08:37:40 +02:00
Andrey K
619d4cf8ae Translated using Weblate (Russian)
Currently translated at 59.2% (544 of 918 strings)
2017-04-06 08:37:40 +02:00
i486DX2
49eaa0c5f7 Translated using Weblate (Italian)
Currently translated at 96.0% (882 of 918 strings)
2017-04-06 08:37:40 +02:00
Gabriel Carvalho
649fabcc3d Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.4% (913 of 918 strings)

Se isso se referir a Instrument builtin aa tradução é embutido
2017-04-06 08:37:39 +02:00
monolifed
aef1aeb3aa Translated using Weblate (Turkish)
Currently translated at 87.0% (799 of 918 strings)
2017-04-06 08:37:39 +02:00
Han So Ri
f8ba6ce94f Translated using Weblate (Korean)
Currently translated at 67.8% (623 of 918 strings)
2017-04-06 08:37:39 +02:00
Muhammad Nur Hidayat Yasuyoshi
80a5f52634 Translated using Weblate (Malay)
Currently translated at 37.0% (340 of 918 strings)
2017-04-06 08:37:38 +02:00
Han So Ri
d39828f17c Translated using Weblate (Korean)
Currently translated at 66.4% (610 of 918 strings)
2017-04-06 08:37:38 +02:00
黄冠恒
e6307b2a6c Translated using Weblate (Chinese (China))
Currently translated at 73.6% (676 of 918 strings)
2017-04-06 08:37:38 +02:00
Muhammad Nur Hidayat Yasuyoshi
ca94ce7d06 Translated using Weblate (Malay)
Currently translated at 24.8% (228 of 918 strings)
2017-04-06 08:37:37 +02:00
lisacvuk
7f0ce7a37b Translated using Weblate (Serbian (cyrillic))
Currently translated at 34.9% (321 of 918 strings)
2017-04-06 08:37:37 +02:00
susan
199872e33c Translated using Weblate (Chinese (China))
Currently translated at 73.0% (671 of 918 strings)
2017-04-06 08:37:37 +02:00
Jakub Mendel
1d405406d1 Translated using Weblate (Polish)
Currently translated at 70.2% (645 of 918 strings)
2017-04-06 08:37:36 +02:00
Muhammad Nur Hidayat Yasuyoshi
93c44550d2 Translated using Weblate (Malay)
Currently translated at 17.4% (160 of 918 strings)
2017-04-06 08:37:36 +02:00
zaoqi
43feb1fbab Translated using Weblate (Chinese (China))
Currently translated at 73.0% (671 of 918 strings)
2017-04-06 08:37:35 +02:00
Muhammad Nur Hidayat Yasuyoshi
8fd6de5c3b Added translation using Weblate (Malay) 2017-04-06 08:37:35 +02:00
Guo Yunhe
06bac07df0 Translated using Weblate (Chinese (China))
Currently translated at 72.9% (670 of 918 strings)
2017-04-06 08:37:35 +02:00
Viktar Vauchkevich
886789a23e Translated using Weblate (Belarusian)
Currently translated at 100.0% (918 of 918 strings)
2017-04-06 08:37:34 +02:00
Petter Reinholdtsen
ffb22a4f49 Translated using Weblate (Norwegian Bokmål)
Currently translated at 3.9% (36 of 918 strings)
2017-04-06 08:37:34 +02:00
Viktar Vauchkevich
2cfcd965c7 Translated using Weblate (Belarusian)
Currently translated at 100.0% (918 of 918 strings)
2017-04-06 08:37:33 +02:00
Viktar Vauchkevich
f397466272 Translated using Weblate (Belarusian)
Currently translated at 13.5% (124 of 918 strings)
2017-04-06 08:37:33 +02:00
Andrzej Redlarski
4ea63aa0ed Translated using Weblate (Polish)
Currently translated at 61.2% (562 of 918 strings)
2017-04-06 08:32:09 +02:00
Muhammad Rifqi Priyo Susanto
4ad1dd5938 Translated using Weblate (Indonesian)
Currently translated at 69.4% (638 of 918 strings)
2017-04-06 08:32:09 +02:00
ignaloidas
e0272635e9 Translated using Weblate (Lithuanian)
Currently translated at 27.1% (249 of 918 strings)
2017-04-06 08:32:09 +02:00
Cold Meson 06
8277e63454 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.3% (912 of 918 strings)
2017-04-06 08:32:09 +02:00
red-001
4ee6be856d [CSM] Add support for positional audio. (#5516)
Fixes parts of #5389.
2017-04-06 08:14:31 +02:00
Loic Blot
6da828c471 Expose vector helpers to CSM 2017-04-06 07:57:49 +02:00
Loïc Blot
54ffc4e915 Memleak fix: LocalPlayer object was not deleted
Delete LocalPlayer when ClientEnvironment (object owner) is destroyed
2017-04-05 12:30:52 +02:00
paramat
460e094a9f Mapgen documentation: Add descriptions to noise parameters
Shorten 'readable names'.
Add a new advanced settings menu section for Biome API noises.
Various minor edits and improvements.
2017-04-05 07:30:06 +01:00
paramat
1eca9ecf7d Mapgen: Remove '#include treegen.h' from non-mgv6 mapgens
Only mgv6 uses the tree functions from treegen.cpp.
2017-04-05 07:30:00 +01:00
Paramat
b8a4c95971 MapgenBasic: Add lava source as commonly used content (#5512)
Future mapgens are likely to use this for magma and volcanos.
Remove the getting of lava source content id in mgvalleys.
2017-04-04 07:51:58 +02:00
Loïc Blot
563199698d Client handlers: Remove useless stringstream usage in two handlers (#5510) 2017-04-04 07:47:04 +02:00
red-001
000ec26001 [CSM] Add local node meta reference. (#5508) 2017-04-04 07:41:37 +02:00
paramat
859141a0ce Cavegen/Mgv5/Mgv7: Add optional giant caverns
Add to MapgenBasic for use by multiple mapgens.
Add to mgv5 and mgv7, enabled by default.

Similar to mgvalleys caverns but half the scale.
Parameters for upper y limit, distance caverns taper to full size, and
noise threshold (full cavern size).
As with mgvalleys caverns are generated first and classic caves are
disabled in any mapchunk containing a cavern, to avoid excessive
spreading volumes of liquids.
This also avoids floating blobs of liquid where a large classic cave
has overgenerated out into a neighbouring previously-generated mapchunk.
2017-04-03 04:49:32 +01:00
Loïc Blot
86b1542181 Update embedded jsoncpp from unk version to 0.10.6 + move libs to lib/ instead of src/ (#5473)
* Update embedded jsoncpp from unk version to 0.10.6

0.10.6 is last release without c++11

* Make jsoncpp more compliant with its amalgamate

Jsoncpp cpp file should be upper, make the library like it does in amalgamate

* Reorganization: move minetest embedded libs outside of source tree to /lib

* Fix a dead grep in LINT
2017-04-02 10:51:50 +02:00
Auke Kok
75fb3e4730 minetest.after(): simplify further, pause in singleplayer (#5500)
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.
2017-04-02 10:51:16 +02:00
MarkuBu
26f4a5c2d1 First commit for fine pointed (#5485) 2017-04-01 16:50:53 +02:00
Uwe Koloska
ef56586ed3 Add missing source to android build (#5496) 2017-04-01 16:47:58 +02:00
Loïc Blot
987eb2b761 Clang-format: trivial fix on some headers (#5495)
Fix some headers style and remove them from whitelist
2017-04-01 14:48:16 +02:00
red-001
63ac62ec8a [CSM] Add function and chat command to disconnect from server. (#5487) 2017-04-01 13:40:56 +02:00
number Zero
813a9a36b2 Signlike, glasslike drawtypes: Fix inverted textures 2017-04-01 10:08:28 +01:00
SmallJoker
773efc19b1 mapgen: Fix segfault when selecting invalid mapgen (#5491) 2017-04-01 10:18:13 +02:00
Loic Blot
a4874270f7 Fix clang-format Columns Width
Also fix l_client.cpp/h and remove them from whitelist
2017-03-31 22:29:34 +02:00
kilbith
529ba8002d Wieldmesh: Natural orientation depending on pitch (#5490) 2017-03-31 22:00:05 +02:00
adrido
cc1ff26c3f Windows: Set window icon (#5486) 2017-03-30 20:28:37 +02:00
paramat
ea549bbae3 Paramtype2: Add missing type CPT2_GLASSLIKE_LIQUID_LEVEL
Add the missing paramtype2 for param2 controlling the liquid level
inside the glasslike_framed drawtype.
Add missing documentation of the feature to lua_api.txt.
Update and improve comments for drawtype enumerations in nodedef.h.
2017-03-30 04:52:54 +01:00
Loïc Blot
fbc1432fe8 l_minimap: don't show minimap if configuration doesn't allow it 2017-03-29 15:50:22 +02:00
Loïc Blot
b605b95749 Add CPP11 header to define nullptr & constexpr (#5471)
This header permit to use nullptr & constexpr keywords in portable code segments and benefit from nullptr & constexpr when using C++11 and greater
2017-03-29 13:34:57 +02:00
sfan5
5e806690fc Sneak: Fix sneaking on free-floating lower-half slabs 2017-03-29 10:19:49 +02:00
sfan5
b85301ce69 Sneak: Fix stair lower step bug and ladder in 1x1 hole bugs 2017-03-29 00:51:13 +01:00
Diego Martínez
81c3dc32a8 Add functions to strip color information. (#5472) 2017-03-28 21:55:39 +02:00
Loïc Blot
1b299b4039 Fix a type bug in colorize function
This bug was introduced by dd2f1d7551 and reported by @kilbith
2017-03-28 14:50:17 +02:00
red-001
7c85405d96 [CSM] Fix errors in and improve the CSM documentation. (#5467) 2017-03-28 08:26:54 +02:00
Loïc Blot
4b05feaceb clang-format: add a whitelist (#5459)
If file is in the whitelist, softfail, else hard failure

Some files are not in whitelist and marked as normal:
* src/content_mapnode.h
* src/cguittfont/xCGUITTFont.cpp
* src/gameparams.h
* src/profiler.cpp
2017-03-27 15:33:15 +02:00
Loïc Blot
a9878a0da5 PostgreSQL: fix delete block
Typo fix: we are doing select on delete block.

This fix issue #5426
2017-03-27 15:03:13 +02:00
paramat
ec0c4d33db Map generation limit: Make per-world
The setting limits map generation but affects nothing else.
Add 'mapgen_limit' to global mapgen parameters.
Move 'blockpos_over_mapgen_limit()' to the only place it is called
from: map.cpp.
Allow teleportation to any part of the world even if over the set
mapgen limit.
Simplify the reading of this limit in mgvalleys.
Remove the 'map_generation_limit' setting.
2017-03-27 03:18:09 +01:00
Diego Martínez
09f2cd0264 Pathfinder: Send errors to warningstream.
Avoids spamming the chat about several errors.
2017-03-27 03:17:37 +01:00
Loic Blot
53d1b3d924 Fix mismatch struct/class for GameUIFlags 2017-03-26 18:54:39 +02:00
Loïc Blot
72ce9d7a5d clang-format: fix counter increment & output (#5456)
clang-format: fix bash syntax on increment
2017-03-26 14:07:07 +02:00
Loïc Blot
aa5549ecc3 clang-format: limit diff to 50 files to prevent exceding the maximum travis output (4MB) (#5455) 2017-03-26 11:29:21 +02:00
sfan5
1139a18c3a Sneak: Replicate sneak ladder in new code, is optional
Enabled using the existing 'sneak_glitch' physics override.
2017-03-26 05:53:30 +01:00
red-001
e70e15134c Change command prefix to "." and add "help" command. 2017-03-26 05:51:14 +01:00
number Zero
4d5177ff70 Add mesh generation delay 2017-03-26 05:50:59 +01:00
Loïc Blot
22567d107f Add clang format & skip build if no source file modified (#5433)
* [BUILD] Add clang format + build skipping

* Add clang-format tool to check codestyle.
Warning: it check the whole modified file, not the diff part, it's why it's lazy. Please also look if rules are perfect, i take the Linux codestyle from LLVM site

Fix issue #5415

* Skip building project if no file is modified
* Fix a wrong brace to trigger LINT

* Make lint step outside of unix build scope

* Add AccessModifierOffset: -8

* Typo fix & needs compile fix

* Fix header priorities
2017-03-25 19:12:18 +01:00
SmallJoker
5a59ad2307 Tile.cpp: Fix MSVC build broken by 072bbba 2017-03-24 20:05:15 +01:00
Loïc Blot
329d654e37 Typo fix 2017-03-24 08:59:52 +01:00
red-001
dd2f1d7551 Add multiline support to colorize. (#5444) 2017-03-24 08:36:29 +01:00
Loïc Blot
072bbba69a Some performance optimizations (#5424)
* Some performance optimizations

This is globally removing some memory useless copy

* use a const ref return on std::string Settings::get to prevent data copy on getters which doesn't need to copy it
 * pass some stack created strings to static const as they are not modified anywhere
 * Camera: return nametags per const ref instead of a list pointer, we only need to read it
 * INodeDefManager: getAll should be a result ref writer instead of a return copy
 * INodeDefManager: getAlias should return a const std::string ref
 * Minimap: unroll a Scolor creation in blitMinimapPixersToImageRadar to prvent many variable construct/destruct which are unneeded (we rewrite the content in the loop)
 * CNodeDefManager::updateAliases: prevent a idef getall copy
 * Profiler: constness
 * rollback_interface: create real_name later, and use const ref
 * MapBlockMesh updateFastFaceRow: unroll TileSpec next_tile, which has a cost of 1.8% CPU due to variable allocation/destruction,
 * MapBlockMesh updateFastFaceRow: copy next_tile to tile only if it's a different tilespec
 * MapBlockMesh updateFastFaceRow: use memcpy to copy next_lights to lights to do it in a single cpu operation
2017-03-22 21:41:02 +01:00
bigfoot547
9efc5da0fb [CSM] Add function to get player names in range (#5435)
* [CSM] Add function to get currently connected player names
2017-03-22 21:13:03 +01:00
Paramat
c4b98deb61 Firelike drawtype: Add missing docs for visual_scale in lua_api.txt (#5434) 2017-03-20 22:22:16 +01:00
number Zero
d4e0c0f9b8 Content_mapblock.cpp: Refactor 2017-03-20 20:28:22 +00:00
Ben Deutsch
e7246d3f0d Refactored client event if-else cascade to switch statement 2017-03-20 18:35:33 +00:00
paramat
d3131aeae7 Map generation limit: Rewrite
The previous implementation applied the setting to blockpos_over_limit(),
objectpos_over_limit() and in createSector(), causing many bugs near the
world edge.

First revert the previous implementation.
Rename blockpos_over_limit() to blockpos_over_max_limit() for clarity.
Add a new function to mapblock.h called blockpos_over_mapgen_limit() that
checks against the map_generation_limit setting, and call this only from
the code that decides where mapgen stops.
Use MAX_MAP_GENERATION_LIMIT in objectpos_over_limit() to reduce the
chance of bugs, there is no need to use map_generation_limit here.
2017-03-20 18:34:18 +00:00
sfan5
525d2a0d51 Fix /shutdown or ^C no longer causing server exit
Broken since b8484ef24e
2017-03-19 18:21:18 +01:00
Loïc Blot
3c4ac70348 Refactor Game class (part 2) (#5422)
* showPauseMenu is now part of game
* remove many flags parameters passed to game functions, use the member.
* rename VolatileRunFlags to GameUIFlags (this will permit to share structure with client and CSM
* updatePointedThing: remove pointer ref, we already have the pointer in rundata
* move some attributes outside of VolatileRunFlags after renaming, to game class
* rename statustext to m_statustext
* make some const variables static
* All those changes permit to reduce a little bit function class cost and will permit to interface CSM with some interesting Game flags
* Expose GameUIFlags to client
* Client now have GameUIFlags parameter and setters for other classes
* Fix minimap show/hide in Lua because we now have access to the real flag
2017-03-19 13:18:52 +01:00
red-001
2e3778ec0c Block access to the io library 2017-03-19 12:34:33 +01:00
Loïc Blot
f8ad01ab7c Update server min protocol version to v24 (#5411)
* Update server min protocol version to v24

It's based on @sfan5 stats. See https://kitsunemimi.pw/tmp/serverlist_stats_2017-03-17.txt

v24 was bumped 25/08/14 and 0.4.11 was released 25/12/14

* Drop protocol v23 and lesser code
2017-03-19 08:44:29 +01:00
ShadowNinja
b8484ef24e Server list cleanup
This removes the hacky server_dedicated pseudo-setting.
2017-03-18 12:37:57 +01:00
Wuzzy
2cc518dcaf Show itemstring as tooltip if no item description 2017-03-18 12:36:28 +01:00
Loic Blot
9f4916a452 TOGGLE_CHAT keymap should togglechat not HUD
Fixes #5413
2017-03-18 10:00:04 +01:00
Loïc Blot
a7485e40ff Reduce memory & function cost of Game class functions (#5406)
GameRunData is passed on many game functions, or one of its attributes whereas it's a member of the class. Remove it from functions arguments and call object directly from concerned functions.
This will reduce a little bit the Game class loop usage & very little bit the memory usage (due to non creation of pointer/references)
2017-03-17 22:15:25 +01:00
zeuner
ba0a8dabef avoid crashing when accessing mapgen early (#5384) 2017-03-17 21:28:43 +01:00
red-001
d31750cb93 Give CSM access to use core.colorize() (#5113) 2017-03-17 19:20:13 +01:00
Loïc Blot
7b74f04a61 [CSM] Fix minimap problems (#5405)
This fixes issue #5404
2017-03-17 07:54:49 +01:00
Loïc Blot
0891975ad6 [CSM] Add core.get_timeofday & core.get_day_count env calls (#5401)
* [CSM] Add core.get_timeofday & core.get_day_count env calls

* [CSM] Add core.get_node_level, core.get_node_max_level, core.find_node_near
2017-03-17 07:48:29 +01:00
Loïc Blot
b52f3005c3 Fix indentation problem since merge resolution
Github merge conflict resolution is not the best with indent
2017-03-16 11:09:06 +01:00
Loïc Blot
40ce538aad [CSM] Add minimap API modifiers (#5399)
* Rename Mapper (too generic) to Minimap
* Add lua functions to get/set position, angle, mode for minimap
* Client: rename m_mapper to m_minimap
* Add minimap to core.ui namespace (core.ui.minimap)
* Add various functions to manage minimap (show, hide, toggle_shape)
* Cleanup trivial declaration in client
2017-03-16 10:34:54 +01:00
Loïc Blot
eb88e5dd4b Add ModStorageAPI to client side modding (#5396)
mod storage is located into user_path / client / mod_storage
2017-03-16 07:53:39 +01:00
paramat
46276414ed Get biome list: Downgrade missing biome message to infostream
It is harmless for a biome listed in an ore or decoration registration
to be missing.
Now that we are registering certain biomes or not based on options
(such as floatland biomes), the biome lists in ore and decoration
registrations trigger these error messages, avoiding these error
messages would need a large amount of duplication of ore and decoration
registrations.
2017-03-16 02:56:03 +00:00
sfan5
14aa990cdd Sneak: Fix various problems with sneaking
Sneaking won't actually hover you in the air, releasing shift guarantees not
falling down (same as in MC).
Sneak-jump no longer goes higher than a normal jump (^ was required for this).
Sneaking no longer avoids fall damage.
You can sneak on partial nodes (slabs, sideways slabs) correctly.
Sneaking doesn't "go out" as far anymore (0.29 instead of 0.4).
Can't jump when sneaking out as far as possible (breaks the sneak ladder).
2017-03-16 02:52:59 +00:00
SmallJoker
c05dfac9a3 lua_api: Document minetest.features (#5311) 2017-03-15 22:07:19 +01:00
Lars Hofhansl
454483f266 Use true distance for block priority. 2017-03-15 20:30:34 +01:00
Wayward One
39fa249f91 Fix undefined references (#5400) 2017-03-15 15:42:47 +01:00
Auke Kok
b539985ab8 Fix two nul deref if digging unknown nodes. (#5398)
Introduced by d785456b3f (#5162)
2017-03-15 08:04:53 +01:00
rubenwardy
84f4565e13 Add disclaimer to client_lua_api.txt (#5391) 2017-03-14 07:51:07 +01:00
red-001
88df9fb5b6 Add get_wielded_item 2017-03-13 23:56:05 +01:00
nerzhul
44ca9c9cb2 [CSM] Add enable_client_modding param (default: false) 2017-03-13 23:56:05 +01:00
red-001
0727bb3ddd [CSM] Add on_punchnode callback 2017-03-13 23:56:05 +01:00
red-001
37df9cb7d7 [CSM] Add get_node and get_node_or_nil 2017-03-13 23:56:05 +01:00
red-001
073f5cf03d [CSM] Add on_dignode callback (#5140) 2017-03-13 23:56:05 +01:00
Loic Blot
ba66fce833 [CSM] storage + fixes 2017-03-13 23:56:05 +01:00
red-001
a50d07d39a [CSM] Improve security for client-sided mods (#5100) 2017-03-13 23:56:05 +01:00
Loïc Blot
92b45b2a18 [CSM] implement client side mod loading (#5123)
* client side mods are located in clientmods/
* move builtin/preview.lua to clientmods/preview/init.lua as a preview mod
* refactor ModConfiguration class to work properly with client and server using child objects
* move some Server constructor mod load code to ModConfiguration to reduce code duplication between client and server
* remove mods.{cpp,h} unused functions
* use UNORDERED_SET instead of std::set in some modspec storages
2017-03-13 23:56:05 +01:00
red-001
c42c53fccf [CSM] Add local formspecs. (#5094) 2017-03-13 23:56:05 +01:00
Loïc Blot
2c19d51409 [CSM] sound_play & sound_stop support + client_lua_api doc (#5096)
* squashed: CSM: Implement register_globalstep
  * Re-use fatal error mechanism from server to disconnect client on CSM error
  * Little client functions cleanups

* squashed: CSM: add core.after function
  * core.after is shared code between client & server
  * ModApiUtil get_us_time feature enabled for client
2017-03-13 23:56:05 +01:00
red-001
d7bc346981 [CSM] Add client-sided chat commands (#5092) 2017-03-13 23:56:05 +01:00
Loïc Blot
9978f5af82 [CSM] Add on_death, on_hp_modification & oh_damage_taken callbacks (#5093)
* Add on_death callback
* Add on_hp_modification & on_damage_taken callbacks
* move preview code to preview.lua
2017-03-13 23:56:05 +01:00
red-001
cb3a61f8db [CSM] Add method that display chat to client-sided lua. (#5089) (#5091)
* squashed: [Client-sided scripting] Don't register functions that don't work. (#5091)
2017-03-13 23:56:05 +01:00
Loic Blot
2efae3ffd7 [CSM] Client side modding
* rename GameScripting to ServerScripting
* Make getBuiltinLuaPath static serverside
* Add on_shutdown callback
* Add on_receiving_chat_message & on_sending_chat_message callbacks
* ScriptApiBase: use IGameDef instead of Server
  This permits to share common attribute between client & server
* Enable mod security in client side modding without conditions
2017-03-13 23:56:05 +01:00
kilbith
c9492b4d37 GUI: Allow texture packs to customize the progress bar (#5368) 2017-03-13 08:07:14 +01:00
Vladislav Tsendrovskii
7a4878cd0b Save metainfo for falling nodes 2017-03-11 23:42:19 -08:00
Lars Hofhansl
ff80696947 Enable server side occlusion culling by default. 2017-03-11 18:11:19 -08:00
Lars Hofhansl
ba4b704ebf Allow server side occlusion culling. 2017-03-11 18:11:19 -08:00
Auke Kok
6738c7e9a3 Do not increase breath if at full breath.
Prevents the server from sending TOCLIENT_BREATH packets
every 0.5seconds, if there is no reason to.
2017-03-11 17:00:40 -08:00
sfan5
f83d8687a7 database-redis: Support password authentication 2017-03-11 21:39:32 +01:00
paramat
d34f149bdc Climb speed: Increase default setting from 2 to 3 2017-03-11 02:17:16 +00:00
number Zero
25a24c0cdf Minimap: Optimise 2017-03-11 02:15:21 +00:00
Dániel Juhász
ab371cc934 Light calculation: New bulk node lighting code
This commit introduces a new bulk node lighting algorithm to minimize
lighting bugs during l-system tree generation, schematic placement and
non-mapgen-object lua voxelmanip light calculation.

If the block above the changed area is not loaded, it gets loaded to avoid
lighting bugs.
Light is updated as soon as write_to_map is called on a voxel manipulator,
therefore update_map does nothing.
2017-03-11 02:06:18 +00:00
tenplus1
d785456b3f Optimize item.lua
Replace slow ItemStack get_definitions with registered_nodes one's and cached playername as it's used multiple times.  Also removed local item = itemstack:peek_item() as it is never used.
2017-03-10 11:24:10 -08:00
kilbith
2baa191a64 GUI: Convert loading screen's progress bar to image (#5362) 2017-03-10 13:26:24 +01:00
Loïc Blot
9878ce05e7 CI: Add memleak checking using valgrind (#5350)
Add a new step to check memleaks on our current unit tests suite
2017-03-06 20:34:02 +01:00
Juhani Numminen
0e27b4b978 Update .appdata and .desktop files 2017-03-05 20:56:20 +01:00
paramat
e10e5fd16c Dungeons: Use 'block' instead of 'brick' for nodebox stairs
Affects only sandstone dungeons. Nodebox stairs made from
'sandstone_block' look better because every step is undivided.
2017-03-05 09:47:03 +00:00
Auke Kok
f1ab42fdff Font: attempt fallback font, abort if no fonts found.
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.
2017-03-05 09:46:52 +00:00
Fixer
0a6e53bd31 README.txt: Clarify loading of minetest.conf 2017-03-05 09:45:16 +00:00
zaoqi
c9ac722ea9 Add minetest.spawn_falling_node(pos) (#5339)
* Add minetest.spawn_falling_node(pos)

* lua_api.txt: Add minetest.spawn_falling_node(pos)

* Update minetest.spawn_falling_node(pos)
2017-03-04 18:36:37 +01:00
adelcoding1
6de83a2756 FormSpec: Add position and anchor elements (#5284) 2017-03-04 10:46:55 +01:00
Bond-009
22df959343 Fixed spelling mistakes (#5312) 2017-02-27 13:22:49 +01:00
paramat
a901a56859 Dungeongen: Add and improve parameters
Add:
Bool for 'only_in_ground'.
Min and max corridor length.
Min and max room size with X, Y, Z components.
Min and max large room size with X, Y, Z components.

'only_in_ground = false' allows core mapgens to create structures
in air and water using dungeongen.
Corridor length parameters replace a fixed random range.
Room size parameters replace the former system where one parameter
'roomsize' was added to fixed random ranges.

All parameters are set for no change to current dungeon behaviour.

Remove some now-redundant and long-unused code.
2017-02-26 06:46:14 +00:00
red-001
4d634ef675 Fix crash that can be caused by the shutdown command. (#5292) 2017-02-25 09:28:25 +01:00
rubenwardy
2d1fca51e9 Fix wrong meta key in item meta on ItemStack construction 2017-02-22 10:14:12 -08:00
red-001
01b2d2c66c Fix the documentation for minetest.is_yes (#5276) 2017-02-20 02:11:53 +10:00
Dániel Juhász
00123ee04d Fixes for colorwallmounted and colorfacedir nodes
Correct node placement prediction for attached colorwallmounted nodes.
Correct placement direction for colorfacedir and colorwallmounted nodes.
Correct detatch mechanism for attached colorwallmounted nodes.
2017-02-18 22:47:24 +00:00
paramat
111e7e1cc8 Voxelmanip: Do not emerge or blit to blocks over map gen limit
Placing a structure that extends into mapblocks that extend past
map_gen_limit causes a crash. For example a sapling growing at the
world edge which adds leaves beyond the edge, or placing a structure
using the lua voxelmanip, or placing a schematic or l-system tree.

Do not run the 'load_if_inexistent' block of code if the mapblock
is over limit, this also marks the mapblock with the flag
VMANIP_BLOCK_DATA_INEXIST which later prevents blitting back those
mapblocks.

This fix therefore uses existing functionality by having the same
effect as the 'load_if_inexistent' bool being false.
2017-02-18 22:47:24 +00:00
kilbith
d0a6cacd51 Multiplayer menu: fix attempt to open nonexistant image
Since local servers and local favorites have no ping value (these
are only provided by the server) we shouldn't load a broken
image filename.

Fixes #5238
2017-02-18 22:46:45 +00:00
tenplus1
e9cd7187e8 Statbars.lua: Cache enable_damage setting 2017-02-18 22:46:06 +00:00
red-001
5db41d4d21 Fix not being able to damage players in minimal (#5266) 2017-02-18 15:36:29 +01:00
red-001
d988f9b769 Use the ARRLEN macro in more places and remove an unused macro. (#5260) 2017-02-18 15:24:49 +01:00
red-001
3d25914986 Add support for the new arguments of request_shutdown to the /shutdown chatcommand. (#5252) 2017-02-18 12:16:11 +01:00
Auke Kok
d0ce27edd8 Revert part of eb49009d02 (#5230)
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
2017-02-16 20:18:22 -08:00
paramat
9aabfd5188 Cavegen: Place correct biome surface in tunnel entrances
Previously in tunnel entrance floors only a single biome 'top' node was
placed and 'filler' nodes were missing.

Place 'top' and 'filler' nodes in tunnel entrance floors with depths
defined by the biome.
In tunnel entrances under rivers 'riverbed' nodes are placed to the
biome-defined depth.
2017-02-16 22:25:14 +00:00
paramat
3955f51253 Objectpos over limit: Avoid crash caused by sector over limit
Reduce the object limit by mapblock size, to avoid objects being
added just inside the map generation limit but in a block and sector
that extend beyond the map generation limit.

Change notification of 'objectpos over limit' from red in-chat ERROR
to in-terminal only WARNING, since this will happen often using mob
mods near the world's edge.
2017-02-16 22:25:07 +00:00
red-001
2dcbc01904 Fix a small regression caused by e2ad76f. 2017-02-16 12:59:19 +01:00
sfan5
a5e4273575 Fix >5 year old PlayerSAO deletion bug
force_delete=true is usually set at shutdown in order to
also remove PlayerSAOs, however when too many objects
per block are detected force_delete is also set to true.
This was intended only for the current loop iteration but
obviously persisted to the next iterations thereby
deleting all other remaining SAOs.
2017-02-15 17:36:47 +01:00
Auke Kok
eb49009d02 FreeType: address font license issues (#5230)
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.
2017-02-14 01:08:17 -08:00
Dániel Juhász
f17c9c45dc Lighting: Update lighting at block loading
This commit updates mapblocks' light if necessary when they are loaded.
This removes ghost lighting.
2017-02-13 00:05:49 +00:00
Hybrid Dog
2bd10022cb Mainmenu: Brighter text colours for readability 2017-02-12 01:53:18 +00:00
paramat
984e063374 Footsteps: Fix offset footstep and shallow water sound bugs
Fix footstep sounds coming from nodes to either side when walking on a
1 node wide row of nodebox slabs such as default:snow.
Fix sand footsteps when swimming in 1 node deep water.

Use a new function 'getFootstepNodePos()' instead of 'getStandingNodePos()'
to avoid using a horizontally-offset 'sneak node' for sounds.

Sound is selected from the node BS * 0.05 below the player's feet, so
that 1/16th slabs will play the slab sound but 1/32nd slabs will not.
If the player is not 'touching ground' the node detection position is
changed to BS * 0.5 below to preserve footstep sounds when landing after
a jump or fall.
2017-02-12 01:52:12 +00:00
paramat
1de08e1961 Plantlike: Fix visual_scale being applied squared
This re-applies 2 commits that were reverted.

Visual_scale was applied twice to plantlike by accident sometime between
2011 and 2013, squaring the requested scale value. Visual_scale is
correctly applied once in it's other uses in signlike and torchlike.

Two lines of code are removed, they also had no effect for the vast
majority of nodes with the default visual_scale of 1.0.
The texture continues to have it's base at ground level.

Send sqrt(visual_scale) to old clients.

Keep compatibility with protocol < 30 clients now that visual_scale
is no longer applied twice to plantlike drawtype and mods are being
updated to a new value.
2017-02-10 17:59:31 +00:00
rubenwardy
bb4db84bdb Use tree to list mods rather than textlist 2017-02-10 17:59:17 +00:00
Craig Robbins
7760948b7c Revert "Plantlike: Fix visual_scale being applied squared (#5115)"
This reverts commit 953cbb3b15.
2017-02-10 22:21:49 +10:00
Craig Robbins
7bd3e2bceb Revert "Plantlike visual scale: Send sqrt(visual_scale) to old clients"
This reverts commit cdc538e0a2.
2017-02-10 22:21:23 +10:00
Wuzzy
f5d4494a51 Add textures for air and ignore items (#5196) 2017-02-10 08:19:31 +01:00
rubenwardy
74b670a793 Correct lua_api.txt docs related to meta (#5198) 2017-02-10 07:59:38 +01:00
Auke Kok
5707b739f3 Change default nodetimer_interval to 0.2s. (#5193)
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.
2017-02-09 08:00:37 +01:00
Lars Hofhansl
3ad68c052b Perform mesh animation only once per frame. 2017-02-09 00:10:41 +00:00
paramat
a5ee7139a5 OpenAL sound: Use a simpler distance model
In createPlayingSoundAt(), AL_ROLLOFF_FACTOR is not set, so it has
the default value of 1.0, this makes the equation of the currently
used AL_EXPONENT_DISTANCE distance model identical to the equation
of the simpler AL_INVERSE_DISTANCE distance model.

Using AL_INVERSE_DISTANCE means an exponent is not processed,
exponents are quite intensive to process.
There is no change in sound attenuation behaviour.

The commented-out AL_ROLLOFF_FACTOR value is removed as it would
now have a different effect if used.
2017-02-09 00:10:35 +00:00
red-001
e2ad76f910 No longer auto-generate a 'guest####' player name when name is empty
You can't join most servers with a 'guest####' player name anyway so
it's only logical to remove them.
2017-02-09 00:05:19 +00:00
Loic Blot
607dab2b0d Fix android build
This fixes #5190
2017-02-08 07:47:56 +01:00
Loïc Blot
ef6feca501 Add ModMetadata API (#5131)
* mod can create a ModMetadata object where store its values and retrieve it.
* Modmetadata object can only be fetched at mod loading
* Save when modified using same time as map interval or at server stop
* add helper function to get mod storage path
* ModMetadata has exactly same calls than all every other Metadata
2017-02-08 00:15:55 +01:00
rubenwardy
0680c47d6c Fix incompatibility of ItemStack.to_table() introduced by stack meta 2017-02-07 21:18:17 +00:00
paramat
8bc6a303b4 Face shading: Add shade factor comments 2017-02-07 00:19:52 +00:00
Travis Burtrum
5da3ed19a3 Add support for unix socket connection to redis (#5179) 2017-02-06 19:10:03 +01:00
Auke Kok
3e30731c1a Prevent SIGFPE on entity tile loading issue. (#5178)
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.
```
2017-02-05 23:59:18 -08:00
numberZero
80c75272a6 Improve mesh shading (#5172) 2017-02-05 10:27:58 +01:00
rubenwardy
f2f9a92351 Add per-stack descriptions using ItemStack Metadata 2017-02-04 22:07:55 +00:00
rubenwardy
f2aa2c6a98 Add ItemStack key-value meta storage 2017-02-04 22:07:55 +00:00
rubenwardy
c2e7b1f579 Derive NodeMetaRef from MetaDataRef 2017-02-04 22:07:55 +00:00
rubenwardy
13f94ecad5 Make NodeMetaRef::getmeta a non-static member 2017-02-04 22:07:55 +00:00
rubenwardy
bbdd869d72 Derive NodeMetadata from Metadata 2017-02-04 22:07:55 +00:00
sfan5
de664b1c6d Fix PlayerSAO deletion warning (0eede97af2) 2017-02-04 13:31:21 +01:00
paramat
047168ca83 Mgv6: Add fallback node for gravel
Gravel now falls back to stone.
Gravel is not a particularly fundamental node, allowing it to fall back
to stone frees up subgames from having to include a gravel node.
Non-blob-ore gravel is only present in mgv6 as extremely rare 'gravel
biomes'.
2017-02-04 07:21:23 +00:00
paramat
8e4c11406e Mgv6: Add stairs to desert stone dungeons
As with the other mapgens, now that wide stairs in dungeons are
possible we can now finally add stairs to desert stone dungeons.
Re-order some lines.
2017-02-04 07:21:23 +00:00
paramat
2d03cfd24c MapgenBasic node resolver: Various fixes
Add a fallback node for stair_desert_stone to avoid ignore placed
in Minimal subgame desert dungeons.
Don't allow river_water_source to fallback to water_source as river
water needs to be non-renewable and have a short flow range.
Make stair_sandstonebrick fall back to sandstonebrick instead of
sandstone.

Re-order some lines.
Add a comment.
2017-02-04 07:21:16 +00:00
kilbith
03b34cb3dd Serverlist: Add ping indicators (#5164) 2017-02-03 23:53:43 +10:00
Duane Robertson
3b9ae409c7 Tell on_punch to expect a return value
The return value should be interpreted as a boolean saying whether
the lua on_punch function handled damage or the system needs to.
2017-02-01 22:13:49 +01:00
paramat
326cc5df74 Mgvalleys: Fix missing decorations and incorrect function order
Fix missing decorations at horizontal chunk borders by adding
'updateHeightmap()' after terrain generation.

Swap order of 'calculateNoise' and 'calcBiomeNoise' because
'calculateNoise' modifies the heat and humidity maps created in
'calcBiomeNoise'.

Remove confusing comment, code block is not just for mods and
seems essential for correct mapgen behaviour.
2017-02-01 15:05:35 +00:00
Ekdohibs
d873545ac7 Fix anticheat resetting client position after the client is teleported
Previously, m_move_pool could accomodate the client moving from the new
position to the old one, and the server accepted the client to go back
to its old position. However, it couldn't then accomodate the client
moving from its old to its new position, and therefore would reset position
to the old position. Thus, by emptying m_move_pool after a teleport, the
server no longer accepts the client to go back to its old position. A
drawback is however that a laggy client *will* trigger a few
"moved_too_fast" anticheats before being told about its new position.

Don't report player cheated if caused by lag.

Fixes #5118
2017-02-01 15:03:57 +00:00
Nathanaël Courant
3e355ab7d5 Make facedir_to_dir and wallmounted_to_dir work with coloured nodes as well. (#5153) 2017-01-31 15:02:30 -08:00
numberZero
74afe6fe6b Fix fog weirdness (#5146) 2017-01-31 08:42:39 +01:00
paramat
cdc538e0a2 Plantlike visual scale: Send sqrt(visual_scale) to old clients
Keep compatibility with protocol < 30 clients now that visual_scale
is no longer applied twice to plantlike drawtype and mods are being
updated to a new value.
2017-01-30 16:38:28 +00:00
sapier
e761b9f486 Add multiply texture modifier
Allows colorizing of textures using a color multiplication method.
2017-01-30 16:37:17 +00:00
Dániel Juhász
6642c8583a Use fabs() instead of abs() (#5141) 2017-01-30 08:18:18 +01:00
Dániel Juhász
f0e3abc64d Re-add halo highlight (#5130)
Due to a rebase mistake halo highlighting was disabled. This commit
re-adds that feature.
2017-01-30 11:47:36 +10:00
Ezhh
0c9189d109 Add console height setting (#5136) 2017-01-30 02:10:17 +10:00
Zeno-
707e27b5c2 Rename height to scale for openConsole() (#5139)
For Game::openConsole() and GUIChatConsole::openConsole() the
parameter name 'height' is misleading because it's actually a
percentage of the screen/window height.
2017-01-29 19:26:00 +10:00
ShadowNinja
3eecc6ff44 Fix AIX threading build 2017-01-28 18:52:07 -05:00
ShadowNinja
c93f7f5cea Fix synchronization issue at thread start
If a newly spawned thread called getThreadId or getThreadHandle before
the spawning thread finished saving the thread handle, then the
handle/id would be used uninitialized.  This would cause the threading
tests to fail since isCurrentThread would return false, and if Minetest
is built with C++11 support the std::thread object pointer would be
dereferenced while ininitialized, causing a segmentation fault.

This fixes the issue by using a mutex to force the spawned thread to
wait for the spawning thread to finish initializing the thread object.

An alternative way to handle this would be to also set the thread
handle/id in the started thread but this wouldn't work for C++11
builds because there's no way to get the partially constructed object.
2017-01-28 18:52:07 -05:00
SmallJoker
79d752ba4f from_table: Fix crash for missing inventory or field 2017-01-28 16:38:46 +01:00
sapier
814ee971f7 Make entity on_punch have same signature and behaviour as player on_punch 2017-01-28 15:57:54 +01:00
Paramat
953cbb3b15 Plantlike: Fix visual_scale being applied squared (#5115)
Visual_scale was applied twice to plantlike by accident sometime between
2011 and 2013, squaring the requested scale value. Visual_scale is
correctly applied once in it's other uses in signlike and torchlike.

Two lines of code are removed, they also had no effect for the vast
majority of nodes with the default visual_scale of 1.0.
The texture continues to have it's base at ground level.
2017-01-28 20:07:35 +10:00
Loïc Blot
b7a98e9850 Implement player attribute backend (#4155)
* This backend permit mods to store extra players attributes to a common interface.
* Add the obj:set_attribute(attr, value) Lua call
* Add the obj:get_attribute(attr) Lua call

Examples:
* player:set_attribute("home:home", "10,25,-78")
* player:get_attribute("default:mana")

Attributes are saved as a json in the player file in extended_attributes
key

They are saved only if a modification on the attributes occurs and loaded
when emergePlayer is called (they are attached to PlayerSAO).
2017-01-27 08:59:30 +01:00
paramat
2a89531071 Dungeongen: Fix selection of diagonal corridors
The do .. while loop is waiting for both dir.X and dir.Z to be non-zero,
so should continue to loop if either dir.X or dir.Z are zero. The brackets
present suggest this was intended to be OR not AND.
2017-01-26 20:19:05 +00:00
paramat
ae929ce2fd Dungeons: Add nodebox stairs to desert and sandstone dungeons
Desert and sandstone dungeons have 2 node wide corridors. Previously,
nodebox stairs were disabled because dungeon generation code did not
support nodebox stairs wider than 1 node, now it does.

Add 'stair desert stone' content id to MappgenBasic.

Requires 'mapgen stair desert stone' to be added to Minetest Game.
2017-01-26 20:18:54 +00:00
Dániel Juhász
c268db7b46 Fix after hardware node coloring (#5114) 2017-01-27 01:10:56 +10:00
paramat
9f108b56d3 Dungeongen: Fix out-of-voxelmanip access segfault
My recent dungeon commit allowed stairs to be placed across the full
width of corridors, but some of the new node positions accessed were
missing checks for being within the voxelmanip, causing occasional
segfaults near dungeons with corridors wider than 1 node.

Add 'vm->m_area.contains(pos)' checks just before stair position
voxelmanip access. This allows an earlier check to be removed as it
is now redundant.
2017-01-25 20:34:03 +01:00
rubenwardy
08911160aa Block spam messages before calling on_chatmessage callbacks (#4805)
Fixes #4799
2017-01-25 10:57:33 +01:00
number Zero
33e0eedbfb Add smooth lighting for all nodes
Note: Smooth lighting disables the mesh cache.
2017-01-24 13:59:40 -08:00
raymoo
87e9466caf Wrap to positive degree values (#5106) 2017-01-24 17:25:11 +01:00
sfan5
0cde270bf5 Initialize TileAnimationParams to prevent crashes/bugs for legacy invocations of add_particle{,spawner} (fixes #5108) 2017-01-24 15:19:29 +01:00
paramat
59fdf57134 Zoom FOV: Reduce minimum zoom FOV to 7 degrees
The default of 15 is unchanged.
7 degrees is x10 magnification which is common for binoculars.
Alter hardcoded limits in camera.cpp:
Minimum 7 degrees.
Maximum 160 degrees to match upper limits in advanced settings.
2017-01-23 07:39:58 +00:00
paramat
d413dfe87c Dungeons: Support nodebox stairs wider than 1 node
Previously, code did not support stair nodeboxes in corridors wider
than 1 node.
Make stair nodeboxes full width even in corridors with different
widths in X and Z directions.
2017-01-23 07:39:50 +00:00
Auke Kok
7fc6719968 core: Add dir_to_yaw and yaw_to_dir helpers
These are needed to go from things like entity yaw to a vector
and vice versa.
2017-01-23 07:38:39 +00:00
Auke Kok
2d7a6f2cc0 Vector: Add vector.sort(a, b): return box edges
This function returns the box corners of the smallest box
that includes the two given coordinates.
2017-01-23 07:38:39 +00:00
Dániel Juhász
d04d8aba70 Add hardware node coloring. Includes:
- Increase ContentFeatures serialization version
- Color property and palettes for nodes
- paramtype2 = "color", "colored facedir" or "colored wallmounted"
2017-01-23 07:27:12 +01:00
sfan5
43822de5c6 Fix potential crash in chat handling (since 2f56a00d9e) 2017-01-22 20:17:13 +01:00
Loïc Blot
39123fcce5 Remove os.exit from the Lua secure sandbox (#5090)
os.exit will exit not using proper resource liberation paths.

Mods should call the proper exit mod using our API
2017-01-21 22:05:54 +01:00
Loïc Blot
6d5a407133 Add show_statusline_on_connect setting (#5084)
Add show_statusline_on_connect setting
2017-01-21 19:30:42 +01:00
Loïc Blot
bc29e03b59 Revert "Detach the player from entities on death." (#5087) 2017-01-21 17:30:55 +01:00
sapier
b9c1a758a1 Fix unknown command message not providing number of cmd 2017-01-21 17:16:22 +01:00
sapier
c57b4ff9b5 Add Entity get_texture_mod() to Lua API
Send texture modifier to clients connecting later too
2017-01-21 17:01:02 +01:00
red-001
72535d3328 Detach the player from entities on death. (#5077) 2017-01-21 16:11:55 +01:00
Loïc Blot
0eede97af2 Warning fix for 2ea6015643 (#5082)
Neither flag as force delete nor show the warning when mapblock is full and object is a player
2017-01-21 20:29:18 +10:00
Loïc Blot
2ea6015643 Do not force deletion of players when mapblock is full (#5081)
This fixes #4067
2017-01-21 10:41:00 +01:00
red-001
0dada51a55 Remove mathconstants.h and use the correct way to get M_PI in MSVC. (#5072) 2017-01-20 23:19:41 +01:00
Elijah Duffy
efa54f9c46 Add chatcommand unregister and override API (#5076)
Introduces two functions to unregister and override chatcommands.
minetest.unregister_chatcommand("<name>") and
minetest.override_chatcommand("<name>", {<redifinition>})
2017-01-20 19:49:20 +01:00
SmallJoker
dd282e646c Fix MSVC build Build broken by 98e36d7 2017-01-19 20:19:53 +01:00
sfan5
7279f0b373 Add particle animation, glow
This is implemented by reusing and extending the
TileAnimation code for the methods used by particles.
2017-01-18 23:21:01 +01:00
rubenwardy
c5967f75f0 Add minetest.player_exists() (#5064) 2017-01-18 11:19:57 +01:00
rubenwardy
a378e32751 Add search to advanced settings (#4806)
* Add search to advanced settings

* Press enter again to go to next result

* Use keyword based search, auto select best option
2017-01-18 07:48:25 +01:00
sapier
51746ca910 Fix typo in alias for deprecated settexturemod 2017-01-17 19:41:52 +01:00
Ezhh
d218baa3ac Improve priv descriptions (#5047) 2017-01-17 15:41:25 +01:00
red-001
2f56a00d9e Remove client-side chat prediction. (#5055)
Network lag isn't really a big issue with chat and chat prediction makes writing mods harder.
2017-01-17 00:09:47 +01:00
rubenwardy
d2f5732f89 Adjust formspec spacing on the Client tab of the mainmenu 2017-01-16 18:56:04 +00:00
rubenwardy
63c892eedf Rename ObjectRef methods to be consistent and predictable 2017-01-16 15:34:44 +00:00
red-001
f3bd4c405d Add keyword based search to serverlist 2017-01-15 13:43:47 -08:00
sapier
f5070b4454 Added lua tracebacks to some errors where you have been blind to what… (#5043)
* Added lua tracebacks to some errors where you have been blind to what actually went wrong
2017-01-15 13:36:53 +01:00
paramat
e12019cfd9 Documentation: Correct biome heat / humidity noise parameters
When the new set of biomes was added in MTGame the 'spread' for heat
and humidity noise parameters was increased to 1000, i forgot to update
settingtypes.txt and minetest.conf.
2017-01-15 02:04:01 +00:00
sapier
d03b4fb627 Add color names from web page referenced in luaapi doc 2017-01-15 02:03:51 +00:00
lhofhansl
c41352a1c7 Only set material flag on rendered meshes (#5023) 2017-01-14 22:30:14 +01:00
sfan5
f0c6feca97 Fix build with freetype support disabled 2017-01-14 12:39:20 +01:00
Loic Blot
ee9b59a7fe Fix another missing const reported by clang & @sfan5
Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
2017-01-14 12:20:59 +01:00
Loic Blot
ee6d8c10ce Fix missing const in ServerActiveObject::getStaticData
This fixes #5033

Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
2017-01-14 12:03:50 +01:00
ShadowNinja
8002366097 Organize defaultsettings.cpp 2017-01-13 19:06:51 -05:00
ShadowNinja
bb154c2e1c Main menu tweaks 2017-01-13 18:13:43 -05:00
Loic Blot
ef0aa7d5b5 Optimize SAO getStaticData by using std::string pointer instead of return copy
Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
2017-01-13 21:56:24 +01:00
Rogier
e2dd96b432 Cleanup content_sao by factorizing similar code parts
Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
2017-01-13 21:56:24 +01:00
ShadowNinja
7ae7f1ea4c Enable mod security by default 2017-01-13 14:08:24 -05:00
paramat
25ba96fcac Meshes: Make object mesh face shading consistent
Previously, object meshes had their North and South faces darker than
East and West faces, the opposite of nodes and meshnodes. This commit
corrects this.
State constants as float-literals not double-literals.
Simplify code.
Add comment.
2017-01-13 02:42:18 +00:00
Rui
5d60a6c533 Make nametag removable with set_nametag_attributes (#5021) 2017-01-11 20:25:25 +01:00
Loic Blot
430d3b28e4 Cleanup some header inclusions to improve compilation times 2017-01-11 15:53:56 +01:00
Rogier
6647939403 Performance fix + SAO factorization
Original credits goes to @Rogier-5

* Merge common attributes between LuaEntitySAO & PlayerSAO to UnitSAO
* Make some functions const
* Improve some lists performance by returning const ref

Signed-off-by: Loic Blot <loic.blot@unix-experience.fr>
2017-01-11 15:53:56 +01:00
Rui
ec30d49e02 Add staticdata parameter to add_entity (#5009)
* Add staticdata parameter to add_entity
* Add add_entity_with_staticdata to core.features
2017-01-09 20:39:45 +01:00
Ner'zhul
8e7449e092 Environment & IGameDef code refactoring (#4985)
* Environment code refactoring
* Cleanup includes & class declarations in client & server environment to improve build speed
* ServerEnvironment::m_gamedef is now a pointer to Server instead of IGameDef, permitting to cleanup many casts.
* Cleanup IGameDef
  * Move ITextureSource* IGameDef::getTextureSource() to Client only.
  * Also move ITextureSource *IGameDef::tsrc() helper
  * drop getShaderSource, getSceneManager, getSoundManager & getCamera abstract call
  * drop unused emerge() call
  * cleanup server unused functions (mentionned before)
* Drop one unused parameter from ContentFeatures::updateTextures
* move checkLocalPrivilege to Client
* Remove some unnecessary casts
* create_formspec_menu: remove IWritableTextureSource pointer, as client already knows it
* Fix some comments
* Change required IGameDef to Server/Client pointers
* Previous change that game.cpp sometimes calls functions with Client + InventoryManager + IGameDef in same functions but it's the same objects
* Remove duplicate Client pointer in GUIFormSpecMenu::GUIFormSpecMenu
* drop ClientMap::sectorWasDrawn which is unused
2017-01-09 20:39:22 +01:00
zeuner
11df7e886a support older PostGreSQL versions (#4999)
* support older PostGreSQL versions
* documentation accuracy

* improve performance by affecting less rows in UPDATE queries
2017-01-09 17:03:13 +01:00
sfan5
73fdb63597 builtin/.../falling.lua: Avoid crash when hitting unknown nodes 2017-01-09 16:39:40 +01:00
paramat
8c1b4f298e Map generation limit: Cache as 'const' not 'const static' 2017-01-08 21:18:11 +00:00
paramat
ddcf8422a2 Map generation limit: Fix checks for block/sector over-limit
Fix the maths that check if any part of a mapblock or sector is over the
set map_generation_limit.
Therefore avoid the loading of any over-limit blocks that were previously
generated when map_generation_limit was larger. The set limit can vary
for a world because it is not yet a per-world mapgen parameter, even when
it is sometimes it will be changed deliberately.
Therefore avoid a player being returned to world centre if they re-enter
a world while being over-limit.

Fix the createSector() crash caused by a mob spawning over-limit in an
over-limit mapblock
2017-01-08 21:18:11 +00:00
Lars Hofhansl
1fee649f15 Minor: Fix indentation in serverenvironment.cpp 2017-01-08 19:22:33 +01:00
Loic Blot
98e36d7d68 Move ServerEnvironment to dedicated cpp/header files
* also cleanup some unneeded inclusions
2017-01-08 12:16:06 +01:00
Loic Blot
eb2c19bbed Move ClientEnvironment to dedicated cpp/header files 2017-01-08 12:16:06 +01:00
lhofhansl
b0746834cc Get neighbor from same map block if possible in ABMHandler (#4998) 2017-01-08 17:42:25 +10:00
Ezhh
8f9611bcb2 Make column alignment consistent in advanced settings (#5004) 2017-01-07 21:33:38 +10:00
sfan5
ce106a4113 Revert "Extend minetest.is_yes()"
This reverts commit c435eabf3f.
2017-01-07 11:05:05 +01:00
red-001
c435eabf3f Extend minetest.is_yes() 2017-01-07 09:54:51 +01:00
LNJ
b387f95ed3 README.txt: Update the License to 2010-2017 2017-01-05 22:58:37 +01:00
LNJ
545c37f613 lua_api.txt: Add registered_chatcommands to global tables 2017-01-05 21:38:43 +00:00
Wayward1
8f22272df5 Add raycast.cpp and tileanimation.cpp to Android.mk 2017-01-05 08:19:54 +01:00
rubenwardy
e8b7179ccd Expose and document chatcommands as minetest.registered_chatcommands 2017-01-04 20:56:07 +00:00
Lars Hofhansl
ca3629637c Fixes for using std:vector in ABMHander and further perf improvements 2017-01-04 21:37:29 +01:00
Rogier-5
ad10b8b762 Use std::vector instead of std::map in class ABMHandler 2017-01-04 21:37:29 +01:00
Dániel Juhász
3f8261830e Improve getPointedThing() (#4346)
* Improved getPointedThing()

The new algorithm checks every node exactly once.
Now the point and normal vector of the collision is also returned in the
PointedThing (currently they are not used outside of the function).
Now the CNodeDefManager keeps the union of all possible nodeboxes, so
the raycast won't miss any nodes. Also if there are only small
nodeboxes, getPointedThing() is exceptionally fast.
Also adds unit test for VoxelLineIterator.

* Cleanup, code move

This commit moves getPointedThing() and
Client::getSelectedActiveObject() to ClientEnvironment.
The map nodes now can decide which neighbors they are connecting to
(MapNode::getNeighbors()).
2017-01-04 19:18:40 +01:00
Loïc Blot
8aadc62856 Travis: Build server too for UNIX 2017-01-04 15:13:17 +01:00
Lars Hofhansl
7387b19021 Pull occlusion check out of loop, and minor code cleanups. 2017-01-03 08:14:58 +01:00
Thomas--S
6718a95103 Fix display gamma documentation
Overlooked in #4873
2017-01-02 21:42:50 +00:00
sfan5
a07b032245 Add 2D sheet animation for nodes 2017-01-02 15:28:06 +01:00
Luke Puchner-Hardman
7057c196c4 Added "[sheet" to the texture special commands.
"[sheet:WxH:X,Y" assumes the base image is a tilesheet with W*H tiles
on it and crops to the tile at position X,Y.  Basically it works
like "[verticalframe" but in 2D.

For testing, I combined the four default_chest images into one.
2017-01-02 15:28:06 +01:00
sfan5
523f0e8c5b Move TileAnimation code to seperate file 2017-01-02 15:28:06 +01:00
Loic Blot
e2e8da5ee4 Fix non reverted change on TOSERVER_BREATH compat 2017-01-01 23:57:37 +01:00
Loic Blot
52ba1f867e Breath cheat fix: server side
Breath is now handled server side. Changing this behaviour required some modifications to core:

* Ignore TOSERVER_BREATH package, marking it as obsolete
* Clients doesn't send the breath to server anymore
* Use PlayerSAO pointer instead of peer_id in Server::SendPlayerBreath to prevent a useless lookup (little perf gain)
* drop a useless static_cast in emergePlayer
2017-01-01 23:11:26 +01:00
Dorian Wouters
a1346c916e Fix /grant & /revoke not working with custom auth handler (#4974)
core.auth_table is not supposed to be accessed directly.
2016-12-31 18:12:26 +01:00
sfan5
dd3cda6bed Fix interact range check (thanks to @lhofhansl) 2016-12-29 19:35:22 +01:00
Rogier-5
abd68d3466 Use the outgoing split sequence number for every outgoing packet (#4864)
(instead of the last incoming sequence number...)

Fixes #4848
2016-12-29 13:44:47 +01:00
sfan5
e509ead680 Buildbot: Update Gettext version (#4971) 2016-12-29 13:17:24 +01:00
Auke Kok
094a5a73d3 Redo light.cpp.
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.
2016-12-28 14:16:39 -08:00
adrido
5a0a59ad46 Dont compare short with bool (#4963)
Fixes a compiler warning on MSVC
2016-12-28 21:22:01 +01:00
sfan5
084cdea686 Irrlicht 1.9 support 2016-12-26 22:36:22 +01:00
sfan5
b16252dcae Various anticheat improvements
* Calculate maximum interact distance from wielded tool
* New "interacted_while_dead" cheat_type for the Lua API
* Disallow dropping items while dead
* Move player to spawn before resurrecting them
2016-12-26 22:34:29 +01:00
Ner'zhul
b95f543da9 Add gradle wrapper (#4954)
Gradle wrapper permit to use multiple gradle versions across OS versions
2016-12-24 12:30:18 +01:00
rubenwardy
e3cbe521fc Update Android build tools to latest version (#4872) 2016-12-24 08:34:19 +01:00
Rogier
f4d718c538 Minimal game: Use field 'tiles' instead of 'tile_images' 2016-12-24 00:33:07 +00:00
Rogier
4d4b8bb8a4 Move PP() and PP2() macros to basic_macros.h
Instead of redefining them everywhere.
2016-12-24 00:32:50 +00:00
Lars Hofhansl
2f59a0c840 Process ABMs in a spherical volume instead of cubic
Increase active_block_range default to a 3 mapblock radius.
2016-12-24 00:28:39 +00:00
Lars Hofhansl
923a8f1983 Shaders: Remove unnecessary 'if' statements
Pull if GENERATE_NORMALMAPS == 1 into the template to avoid evaluating
it for each fragment.
Remove if (fogDistance != 0.0).
2016-12-24 00:22:16 +00:00
Rogier
a76e7698b2 Make minetest abort on lua panic
Currently, lua does a regular exit() after a lua panic, which can make
a problem hard to debug. Invoking FATAL_ERROR() instead will print
some useful information, and abort() minetest, so that a debugger can
be used to analyze the situation.
2016-12-24 00:18:45 +00:00
est31
81d56b9491 Merge 0.4.15 changes into stable-0.4
0.4.15 release!
2016-12-22 23:16:00 +01:00
sfan5
a95f983ea8 Continue with 0.4.15-dev 2016-12-22 23:14:17 +01:00
sfan5
231ac33d34 Bump version to 0.4.15 2016-12-22 23:14:17 +01:00
Craig Robbins
5114329ada Final update to credits before release 2016-12-22 23:14:17 +01:00
Nikolay
a17bcb1767 Translated using Weblate (Russian)
Currently translated at 59.2% (544 of 918 strings)
2016-12-22 23:14:16 +01:00
Cold Meson 06
3fa7c5a476 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.5% (914 of 918 strings)
2016-12-22 23:14:15 +01:00
Bruno Borges
ceba12e5aa Translated using Weblate (Portuguese (Brazil))
Currently translated at 94.8% (871 of 918 strings)
2016-12-22 23:14:14 +01:00
Cold Meson 06
34e69e5479 Translated using Weblate (Portuguese (Brazil))
Currently translated at 84.5% (776 of 918 strings)
2016-12-22 23:14:13 +01:00
Rogier
ab1d98bc8f Translated using Weblate (Dutch)
Currently translated at 85.2% (783 of 918 strings)
2016-12-22 23:14:12 +01:00
Wuzzy
2acd3ad663 Translated using Weblate (German)
Currently translated at 100.0% (918 of 918 strings)
2016-12-22 23:14:09 +01:00
sfan5
70579dc7c3 Android: Workarounds for Googles completely broken NDK 2016-12-22 22:17:54 +01:00
est31
1dd361f37c Android: update curl and libgmp 2016-12-21 14:36:14 +01:00
paramat
5e4d6468a3 Builtin/../falling.lua: Avoid crash when object pos over limit
If the object pos is over limit, 'add entity' will not add an entity,
causing 'obj' to be nil.
2016-12-21 13:30:10 +00:00
est31
ba52a34f94 Don't ship with broken languages (#4940) 2016-12-21 14:15:48 +01:00
sfan5
09f1a0c1ff Disable mod security by default (closes #4944) 2016-12-21 14:13:10 +01:00
sfan5
cc7c31a5bc Fix warning reported by clang (possible bug in Settings lua api) 2016-12-21 10:20:06 +01:00
sfan5
04f68a87ee Correct Swahili translations (#4939) 2016-12-21 06:37:25 +01:00
sfan5
bdf8f85493 Limit drawing rect of selected item to viewport size (fixes #4341) 2016-12-20 14:29:12 +01:00
ShadowNinja
0f0502109e Security: Fix resolving of some relative paths
Trying to resolve a path with RemoveRelativePathComponents that can't
be resolved without leaving leading parent components (e.g. "../worlds/foo"
or "bar/../../worlds/foo") will fail.  To work around this, we leave
the relative components and simply remove the trailing components one
at a time, and bail out when we find a parent component.  This will
still fail for paths like "worlds/foo/noexist/../auth.txt" (the path
before the last parent component must not exist), but this is fine
since you won't be able to open a file with a path like that anyways
(the O.S. will determine that the path doesn't exist.
Try `cat /a/../etc/passwd`).
2016-12-20 17:17:38 +10:00
ShadowNinja
f522e7351a Fix RemoveRelatvePathComponents
This used to return "/foo" for "../foo" when it should return the enpty
string (i.e., error removing all relative components).
2016-12-20 17:17:38 +10:00
ShadowNinja
59f84ca0a0 Mod security: Allow read-only access to all mod paths 2016-12-20 06:34:04 +00:00
lhofhansl
24edfb77af Fix occlusion culling, again (#4930) 2016-12-19 06:43:04 +01:00
lhofhansl
e4f7ce1985 Fix occlusing counting (#4922) 2016-12-18 22:25:42 +10:00
Dániel Juhász
6d4e7f223a Fix unnecessary block loading (#4847)
This commit makes the game load blocks only if they are not in the
memory.
2016-12-18 19:20:23 +10:00
Auke Kok
78bf7c46e5 Mapgen: Make mgv7 the default in UI
The actual menu default comes from defaultsettings.cpp.
2016-12-16 12:31:38 +00:00
est31
0614da3aff Fix build with gettext enabled 2016-12-14 19:52:33 +01:00
paramat
f8408398f5 Cavegen: Wider tunnels in mgflat, mgfractal, mgvalleys
As mgv7 is now the default mapgen i re-checked its tunnel width on request,
discovered they needed to be wider, and have made this change.
This commit widens the identical 3D noise tunnels in the other mapgens in
exactly the same way.
2016-12-14 06:28:45 +00:00
est31
c67f2b2965 Run updatepo.sh 2016-12-14 00:31:12 +01:00
est31
211d919b54 Update minetest.conf.example and settings_translation_file.cpp 2016-12-14 00:30:39 +01:00
Fixer
646159159f Translated using Weblate (Ukrainian)
Currently translated at 38.1% (350 of 918 strings)
2016-12-14 00:30:39 +01:00
Wuzzy
55cb5a1983 Translated using Weblate (German)
Currently translated at 98.9% (908 of 918 strings)
2016-12-14 00:30:39 +01:00
Jan Sbrz
1c4bc0d46c Translated using Weblate (German)
Currently translated at 94.7% (870 of 918 strings)
2016-12-14 00:30:39 +01:00
Zygi Mantus
b898ab6486 Translated using Weblate (Lithuanian)
Currently translated at 26.2% (241 of 918 strings)
2016-12-14 00:30:39 +01:00
Andrey
eac6323e80 Translated using Weblate (Russian)
Currently translated at 56.3% (517 of 918 strings)
2016-12-14 00:30:39 +01:00
Maksim Gamarnik
571ed96c8e Translated using Weblate (Russian)
Currently translated at 56.2% (516 of 918 strings)
2016-12-14 00:30:39 +01:00
Stas Kies
3a0ded274e Translated using Weblate (Russian)
Currently translated at 56.1% (515 of 918 strings)
2016-12-14 00:30:39 +01:00
Alvin Hikmawan
bb9fe6eb2b Translated using Weblate (Indonesian)
Currently translated at 69.4% (638 of 918 strings)
2016-12-14 00:30:39 +01:00
Muhammad Rifqi Priyo Susanto
728909284a Translated using Weblate (Indonesian)
Currently translated at 58.6% (538 of 918 strings)

This is a merger of 2 commits.
2016-12-14 00:30:39 +01:00
Alvin Hikmawan
47b1a118ef Translated using Weblate (Indonesian)
Currently translated at 58.6% (538 of 918 strings)
2016-12-14 00:30:39 +01:00
Yana Agun Siswanto
51210d317d Translated using Weblate (Indonesian)
Currently translated at 58.6% (538 of 918 strings)
2016-12-14 00:30:38 +01:00
Onyx Steinheim
f18cebdd07 Translated using Weblate (French)
Currently translated at 100.0% (918 of 918 strings)
2016-12-14 00:30:38 +01:00
AcidNinja
68d24fb74b Translated using Weblate (French)
Currently translated at 100.0% (918 of 918 strings)

This is a merger of 4 commits.
2016-12-14 00:30:38 +01:00
Onyx Steinheim
3aabb6587d Translated using Weblate (French)
Currently translated at 97.7% (897 of 918 strings)
2016-12-14 00:30:38 +01:00
Jakub Mendel
735581bad1 Translated using Weblate (Polish)
Currently translated at 59.5% (547 of 918 strings)

This is a merger of 2 commits.
2016-12-14 00:30:26 +01:00
red-001
e36ae4ec0a Translated using Weblate (Polish)
Currently translated at 41.6% (382 of 918 strings)
2016-12-14 00:30:26 +01:00
nedzadarek
66fe077d07 Translated using Weblate (Polish)
Currently translated at 41.2% (379 of 918 strings)
2016-12-14 00:30:26 +01:00
Han So Ri
eb1d7cdb3d Translated using Weblate (Korean)
Currently translated at 53.8% (494 of 918 strings)

This is a merger of 2 commits.
2016-12-14 00:30:14 +01:00
Dongjin Han
faea229da7 Translated using Weblate (Korean)
Currently translated at 5.6% (52 of 918 strings)
2016-12-14 00:27:19 +01:00
sorichan
8785827990 Translated using Weblate (Korean)
Currently translated at 5.6% (52 of 918 strings)
2016-12-14 00:27:19 +01:00
Dongjin Han
46ac92b1a1 Translated using Weblate (Korean)
Currently translated at 1.5% (14 of 918 strings)
2016-12-14 00:27:19 +01:00
sorichan
428cebc25d Translated using Weblate (Korean)
Currently translated at 1.5% (14 of 918 strings)
2016-12-14 00:27:19 +01:00
Petter Reinholdtsen
a5ec1ddcac Translated using Weblate (Norwegian Bokmål)
Currently translated at 3.3% (31 of 918 strings)
2016-12-14 00:27:19 +01:00
Christian Haug
18a7d3e754 Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.8% (26 of 918 strings)
2016-12-14 00:27:19 +01:00
Petter Reinholdtsen
64969ef41a Translated using Weblate (Norwegian Bokmål)
Currently translated at 2.7% (25 of 918 strings)
2016-12-14 00:27:19 +01:00
Christian Haug
9f476fd66d Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.7% (16 of 918 strings)
2016-12-14 00:27:19 +01:00
Petter Reinholdtsen
f8456dde51 Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.6% (15 of 918 strings)
2016-12-14 00:27:19 +01:00
Christian Haug
289cf93d4b Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.5% (14 of 918 strings)
2016-12-14 00:27:19 +01:00
Petter Reinholdtsen
ef4eb46b61 Translated using Weblate (Norwegian Bokmål)
Currently translated at 1.4% (13 of 918 strings)
2016-12-14 00:27:19 +01:00
Jakub Vaněk
a2c4467255 Translated using Weblate (Czech)
Currently translated at 51.0% (469 of 918 strings)
2016-12-14 00:27:19 +01:00
Tomáš Bělohlávek
ef68a506aa Translated using Weblate (Czech)
Currently translated at 58.0% (533 of 918 strings)

This is a merger of 2 commits.
2016-12-14 00:27:02 +01:00
Jeff Huang
715fba6f39 Translated using Weblate (Chinese (Taiwan))
Currently translated at 100.0% (918 of 918 strings)
2016-12-14 00:02:01 +01:00
Mingye Wang
593eaf3b88 Translated using Weblate (Chinese (Taiwan))
Currently translated at 97.0% (891 of 918 strings)
2016-12-14 00:02:01 +01:00
tonibm19
5f41ae2a16 Translated using Weblate (Catalan)
Currently translated at 46.0% (423 of 918 strings)
2016-12-14 00:02:01 +01:00
Roc Humet
ab8fbd970f Translated using Weblate (Catalan)
Currently translated at 43.6% (401 of 918 strings)
2016-12-14 00:02:01 +01:00
Alfonso R. Zepeda R
f8c87a4496 Translated using Weblate (Spanish)
Currently translated at 57.8% (531 of 918 strings)
2016-12-14 00:02:01 +01:00
Rui
ec7e23d780 Translated using Weblate (Japanese)
Currently translated at 49.4% (454 of 918 strings)

This is a merger of 2 commits.
2016-12-14 00:01:44 +01:00
Eidy
6752dda856 Translated using Weblate (Swahili)
Currently translated at 99.8% (917 of 918 strings)

This is a merger of 3 commits.
2016-12-14 00:01:44 +01:00
Eidy
7af9442ea3 Added translation using Weblate (Swahili) 2016-12-14 00:01:44 +01:00
João Rodrigues
22ad774ff4 Translated using Weblate (Portuguese)
Currently translated at 66.7% (613 of 918 strings)

There is no need to specify that a mod is an extra.
2016-12-14 00:01:44 +01:00
José Henrique Luckmann
1e6130d128 Translated using Weblate (Portuguese (Brazil))
Currently translated at 84.2% (773 of 918 strings)
2016-12-14 00:01:44 +01:00
Thomas Wagner Nielsen
7958bda9d8 Translated using Weblate (Danish)
Currently translated at 73.0% (671 of 918 strings)
2016-12-14 00:01:43 +01:00
Joe Hansen
1c8d43cab5 Translated using Weblate (Danish)
Currently translated at 73.0% (671 of 918 strings)

This is a merger of 3 commits.
2016-12-14 00:01:30 +01:00
Thomas Wagner Nielsen
05f6b274a5 Translated using Weblate (Danish)
Currently translated at 29.5% (271 of 918 strings)
2016-12-13 23:43:43 +01:00
sfan5
0d94bfabcc Mgv7: Change default cave width to 0.09 2016-12-13 03:32:51 +00:00
rubenwardy
540071002e Fix segfault on startup error on Android 2016-12-12 13:22:26 +00:00
rubenwardy
0fdf24d64a Fix camera jumping on Android when panning past 0/360 mark 2016-12-12 13:20:18 +00:00
Bernardo Sulzbach
d9675d3d92 Mod dependency lists: Should have platform-independent line breaking
This fixes a bug existing in modmgr.lua as reported by @Wuzzy2 which
caused the mod dependency list to glitch if input was using a line
terminator different than the OS default.

The C++ code does not need any changes as it already trims CR
occurrences on platforms on which the line termination sequence is LF.

Taken into account the size of the depends.txt files used, this should
not introduce a noticeable performance regression.

Fixes #4720
2016-12-12 07:22:47 +00:00
Rogier
c98ae2a91f Setting limits: Fix message text in advanced settings tab
It would complain that the value should be higher than the lower
bound, when it should be higher than or equal to the lower bound.

Similar issue for the upper bound.
2016-12-12 07:21:46 +00:00
Rogier
02112f84e2 View range: Set maximum to 4000 nodes
The network protocol does not support larger than 255 mapblocks.
2016-12-12 07:20:50 +00:00
paramat
38abc91802 Mapgen: Make mgv7 the default mapgen 2016-12-12 07:19:05 +00:00
Rogier-5
60772071e9 Fix computation of viewing range (in blocks) sent to server (#4882)
Fixes #4878

Also remove an artificial viewing range reduction that
(presumably) was added to compensate for miscomputed
viewing ranges, and that doesn't seem to be needed any
more (thanks to lhofhansl).
2016-12-11 19:49:49 +01:00
rubenwardy
2886f0ccb0 Fix sqlite databases being read-only on 64bit Android by patching sqlite (#4871)
Fixes #4121
2016-12-09 18:27:36 +01:00
sfan5
3f88d776dc Buildbot: Update LuaJIT version 2016-12-08 08:39:37 +00:00
Auke Kok
5a2431a9bd Simple decorations: Fix range check for deco->deco_param2
Allow any int value, and properly range check it before casting.
2016-12-08 08:38:10 +00:00
est31
24719c6908 Android: fix build and update deps 2016-12-07 21:27:07 +01:00
Zeno-
bbe8386a66 Update credits (#4827)
Update credits
2016-12-07 23:45:29 +10:00
Auke Kok
2e69711613 Simple deco: Allow setting param2 value on placement
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.
2016-12-07 04:17:17 +00:00
Lars Hofhansl
075833e393 Fog: Make fraction of visible distance at which fog starts configurable
Optimise the fetching of global settings 'camera_smoothing',
'cinematic' and 'cinematic_camera_smoothing'.
Cache 'cam_smoothing'.
2016-12-07 04:07:54 +00:00
MillersMan
9714cdcf4b Liquids: Update flow on block load
When loading a block add liquid-nodes that might flow away or spread to
neighbours to the transforming_liquid queue.
2016-12-07 04:06:00 +00:00
MillersMan
cc36f5e99a Liquids: Preserve flow state if 'ignore' is a neighbour
Prevent waterfalls from falling down or streams from flowing away when the
source node is in an unloaded block - Nodes near a CONTENT_IGNORE node will
be interpreted as if the ignored node is a liquid node that just supports
the current state of the nodes in question.
2016-12-07 03:54:32 +00:00
MillersMan
2829742ae8 Map::isValidPosition: Return false instead of throwing exception 2016-12-07 03:51:44 +00:00
Lars Hofhansl
8a7dc838a8 Optimize block sent: Fix rendering issue 2016-12-03 02:34:45 +00:00
paramat
e2cbfa82e8 Biomes: Increase heat and humidity noise spread to 1000
To avoid smaller biomes when extra biomes are added to MTGame.
The addition of bushes in MTGame grasslands makes wood resources easier
to find and less distant, so slightly larger biomes are now acceptable,
but also desirable to encourage travel and create more sense of adventure.
2016-12-03 02:34:35 +00:00
red-001
fb1406bdff Don't send a join message in singleplayer mode. 2016-12-03 00:13:02 +01:00
Amaz
8b63fbefba Fix incorrect docs about minetest.hud_replace_builtin (#4833)
Fixes https://github.com/minetest/minetest/issues/4832
2016-12-02 11:41:08 +01:00
Bluebird
144da5f522 Very small documentation fix. (#4830) 2016-12-02 20:20:55 +10:00
paramat
105676b952 Lua_api.txt: Clarify use of looping sounds 2016-12-01 05:09:01 +00:00
paramat
6c9f10e132 Mgv7 floatlands: Various improvements
Floatland base terrain underside was too thin, causing excessive water
leakage through tunnels under lakes, now make it thicker.
Floatland mountain terrain had a rim 1 node thick which made it bare
stone, now make it 2 nodes thick to merge with the floatland base
terrain rim and to have a layer of biome material.
Make mountain terrain more exponentially shaped by altering the
exponent.
Remove unnecessary and potentially ugly MYMAX() applied to
n_base_height.
2016-12-01 05:08:51 +00:00
lhofhansl
5dc6198878 Optimize/adjust blocks/ActiveObjects sent at the server based on client settings. (#4811)
Optimize/adjust blocks and active blocks sent at the server based on client settings.
2016-11-30 18:13:14 +10:00
sfan5
c38985825f Allow restricting detached inventories to one player
This combats the problem of sending the hundreds of
"creative" / "armor" or whatever detached invs that
exist on popular servers to each and every player
on join or on change of said invs.
2016-11-28 13:41:19 +01:00
juhdanad
2fe3bf5a18 Limit light_source in the engine (#4814)
Since light_source>15 causes crash, it must be limited.
2016-11-28 18:43:33 +10:00
sfan5
bb06d377a1 Fix filepath > RemoveRelativePathComponent unittest
(was broken by e4ee6548af)
2016-11-27 18:39:00 +01:00
TeTpaAka
785a9a6c1a Wieldhand: Allow overriding the hand 2016-11-26 03:49:30 +00:00
ShadowNinja
e4ee6548af Fix fs::RemoveRelativePathComponents for paths with a leading dot component
Previously, paths like ./worlds would be resolved to /worlds since the
leading dot was considered just as irrelevant as a dot in the middle of
the path.
2016-11-24 10:38:23 -05:00
ShadowNinja
3af5eef964 Fix secure io.lines
It used to drop all of the return values from the
insecure version of the function.
2016-11-24 10:10:20 -05:00
ShadowNinja
9e10f9f49a Fix secure io.open without mode 2016-11-24 09:58:21 -05:00
orwell96
0d1c9598a0 Make supplying empty formspec strings close the formspec (#4737)
This will only happen if the formname matches or if formname is "".
2016-11-23 02:15:22 +10:00
Zeno-
dbeb322f62 No functional changes. Credit gcu
This merge doesn't make any functional changes. It's a trivial style fix so that @gregorycu can be dual credited along with shadowninja for PR #4800
2016-11-23 01:23:34 +10:00
ShadowNinja
4bf4154cad Fix superflous shader setting updates (#4800)
This improves rendering performance by ~40%
2016-11-23 00:05:39 +10:00
paramat
c6ca7a81cc Tool break: Reduce gain of break sounds 2016-11-20 04:43:09 +00:00
orwell96
681d127ff1 Particles: Make attached particle spawners respect the parent's yaw
Position, velocity and acceleration vectors of particles are rotated
by the yaw of the parent object so that they are truly relative to it.
Clarify new attached particle spawner behavior in lua_api.txt.
2016-11-18 06:18:54 +00:00
Auke Kok
4a0a6723af Builtin/../item: Enable tool breaking sounds
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.
2016-11-18 06:15:08 +00:00
est31
afc48c802a Introduce builtin_shared and use it to fix #4778
Fixes #4778 which was about the error:

ServerError: Lua: Runtime error from mod '' in callback item_OnPlace():
/usr/local/share/minetest/builtin/game/item.lua:278: attempt to call global 'check_attached_node' (a nil value)

The issue was a regression of commit 649448a2a9

"Rename nodeupdate and nodeupdate_single and make them part of the official API"
2016-11-16 18:51:36 +01:00
Rogier-5
5f0dc8e78a Fix unexplained shader issue (glsl compiler bug??) (#4757) 2016-11-17 02:56:05 +10:00
Wuzzy
8e61c1dfd9 Lua_api.txt: Naming convention for custom item/entity fields
Custom (non-engine) field names of items and entities are allowed.
This is now documented in lua_api.txt. Field names beginning with
an underscore are now reserved for mod use, the engine must not
introduce any fields beginning with an underscore.
2016-11-15 23:08:34 +00:00
paramat
bc3980e1d6 Mgv7: Add optional floatlands, disabled by default 2016-11-15 23:07:06 +00:00
sfan5
5fd1ef9b58 Revert "Adding particle blend, glow and animation (#4705)"
This reverts commit 93e3555eae.
2016-11-14 15:28:06 +01:00
Foghrye4
93e3555eae Adding particle blend, glow and animation (#4705) 2016-11-15 00:09:59 +10:00
est31
649448a2a9 Rename nodeupdate and nodeupdate_single and make them part of the official API
Now, the renamed forms of nodeupdate and nodeupdate_single are part of the official API.

As nodeupdate has been used by Minetest Game and in mods despite of not
being part of the official API, we ease the transition by still supporting
it for the 0.4.15 release. After the release, the two functions can be removed.

The removal will not violate the stability promise, as that promise only
includes the official and documented API.

Also, make some formerly global functions local. They most likely haven't
been used by mods, therefore they won't get stubs with deprecation warnings,
hard erroring directly.
2016-11-14 13:08:22 +01:00
Yutao Yuan
6707d622bb Install texture_packs.txt to DOCDIR 2016-11-13 10:21:34 +01:00
Rogier
1980d9ea31 Fix crash when attached object no longer exists
Active objects that are attached to other objects are not safe
from deletion. As a result, the parent object may have a reference
to an id of a child's that no longer exists.

If at some point an attempt is made to manipulate the child,
enviromment->getActiveObject(child-id) returns NULL. Using the
NULL pointer causes the crash...
2016-11-13 10:10:28 +01:00
raymoo
e4031156f1 Add control information to player interacts (#4685) 2016-11-12 17:22:39 +10:00
paramat
67ec2fa92d Nodeupdate: Remove documentation in lua_api.txt
In preparation for nodeupdate being renamed and made official API
in future.
2016-11-12 06:45:09 +00:00
RealBadAngel
68f5b877c7 Halo: Highlight selected face
This is a slightly modified and cleaned up version of #3774 by RealBadAngel.
By sofar: Remove color change (just make it lighter) and some minor cleanups.
2016-11-12 06:41:04 +00:00
lisacvuk
8a1a9fdc24 Fixed tooltips not resizing with \n (#4766)
* Fixed tooltips not resizing with \n

* Fixed it for 1.8.4 too.

* Fixed not working with Freetype disabled.

* Modified it to use Zeno-'s solution.
2016-11-11 21:16:34 +10:00
Rogier-5
b98f98b367 Fix incorrect distance computation for visible blocks (#4765)
The client would not compute the distance from the camera to
to a mapblock correctly. The result was that blocks that were in
view (i.e. not beyond the fog limit) would not be rendered.

With the improved distance computation, a range adjustment that
existed in clientiface.cpp is no longer required.
2016-11-11 18:30:37 +10:00
Rogier-5
7e17eaedb2 Fix mob deserialization errors in the client (#4743)
The problem was seen while using the mobf mod package.

The problem happens when the server serializes entity attachments.
Sometimes, such attachments no longer exist. The serialization code
skips those. However, the total number of attachments was serialized
earlier.  Therefore the client expects more than it gets, and logs a
serialization error.
2016-11-10 13:42:49 +01:00
paramat
c05aac3766 Occlusion culling: Add comments, minor code improvements
Remove unnecessary code.
Use '/ 2.0f' because endoff is a float.
2016-11-09 00:09:35 +00:00
Lars Hofhansl
c79370023b Conf.example: Document block_send_optimize_distance
Add missing documentation.
2016-11-08 15:22:42 +00:00
Lars Hofhansl
739ef175aa Sky: Draw bottom of the sky box in 'cloudy fog color'
To be identical to the lower half of the skybox sides.
Now needed as the skybox base is often seen due to increasingly vertical
mapgens.
2016-11-08 15:20:01 +00:00
Lars Hofhansl
e7c62edec9 Retrieve mapblocks from the server in a sphere, not a cube
Use unused range argument in 'isBlockInSight()' to limit mapblock sends
to a sphere of radius 'max block send distance'.
2016-11-08 15:15:27 +00:00
Lars Hofhansl
2b21cac1d8 Occlusion culling: Fix 'end offset' distance, half this for centre point
'endoff', the maximum diagonal of a mapblock, was incorrectly calculated.
Half this value for the centre point of the mapblock.
2016-11-08 15:12:08 +00:00
Lars Hofhansl
45eab340b9 Don't use reduced vertical limits for mapblock send and generation 2016-11-07 21:55:17 +00:00
paramat
3c5da70d7c Builtin/../falling: Fix bugs caused by 'ignore' nodes
Original commit by t4im, rebased and developed by paramat.
Fix CONTENT_IGNORE being replaced by falling nodes or causing large
areas of sand to collapse into itself.
Format some conditional code for clarity.
Add and clarify some comments.
2016-11-07 21:55:17 +00:00
Wuzzy
e82bd3f067 Privileges: Only give singleplayer 4 basic privs
- interact
- shout
- privs
- basic_privs
2016-11-07 21:55:17 +00:00
adrido
295232667e Windows: Add manifest file and set "High DPI Aware" true
This resolves washy font and incorrect mouse handling on Windows if
a screen with high DPI is used.
2016-11-07 21:55:01 +00:00
SmallJoker
ad4bf2ccf9 MSVC: Generate debug information for release builds (#4674)
Replace parameters with the equivalent /Ox
2016-11-06 11:14:36 -05:00
Wuzzy
1c570cb390 Separate optional from required mod dependencies in main menu (#4721)
* Separate optional from require dep's in main menu

* Simplify modmgr mod dependency listing code
2016-11-05 18:42:14 +01:00
Ner'zhul
66bb295436 PlayerSAO saving fix (#4734)
PlayerSAO::disconnected() function was historical and remove the link between SAO and RemotePlayer session. With previous attributes linked to RemotePlayer saving was working. But now attributes are read from SAO not RemotePlayer and the current serialize function verify SAO exists to save the player attributes.

Because PlayerSAO::disconnected marks playersao for removal, only mark playerSAO for removal and let PlayerSAO::removingFromEnvironment do the correct saving behaviour and all the disconnection process instead of doing a partial removal and let the server loop doing the RemotePlayer cleanup and remove some saved attributes...
2016-11-05 10:25:30 +01:00
Zeno-
b5c84c34ce Fix memory leak in ::safeLoadFile (#4730) 2016-11-05 15:10:49 +10:00
lhofhansl
6bb4347208 Remove unused shader matrices. (#4723) 2016-11-04 18:12:45 +01:00
lhofhansl
dde66a82ed Cycle directly to nothing shown instead of showing the profiler graph again
Fix for previous commit.
2016-11-04 05:08:23 +01:00
lhofhansl
f8fd432dca Add debug priv, and allow player to display the scene as wire-frame. (#4709) 2016-11-04 03:14:32 +01:00
Brandon
bf315c05f1 Add minetest.get_server_uptime() function to Lua API (#4702)
Add minetest.get_server_uptime() function to Lua API
2016-11-02 09:36:58 -07:00
ShadowNinja
7607b0ac20 Add version API 2016-10-31 21:53:00 -07:00
paramat
70e2df4f86 Lua voxelmanip: Add optional buffer param for 'get param2 data'
Update lua_api.txt.
2016-10-31 10:59:38 +00:00
Auke Kok
380a4b6d60 Core.rotate_and_place: Remove unused call to get_look_pitch() 2016-10-31 10:55:36 +00:00
lhofhansl
e1842ed370 Optionally disable optimization that causes underwater and cave rendering glitches. (#4686) 2016-10-30 23:35:55 -04:00
Loic Blot
595932a860 Fix overloading problems mentioned by clang 2016-10-30 16:30:55 +01:00
Ner'zhul
9d25242c5c PlayerSAO/LocalPlayer refactor: (#4612)
* Create UnitSAO, a common part between PlayerSAO & LuaEntitySAO
* Move breath to PlayerSAO & LocalPlayer
* Migrate m_yaw from (Remote)Player & LuaEntitySAO to UnitSAO
* Migrate m_yaw from Player to LocalPlayer for client
* Move some functions outside of player class to PlayerSAO/RemotePlayer or LocalPlayer depending on which class needs it
* Move pitch to LocalPlayer & PlayerSAO
* Move m_position from Player to LocalPlayer
* Move camera_barely_in_ceiling to LocalPlayer as it's used only there
* use PlayerSAO::m_base_position for Server side positions
* remove a unused variable
* ServerActiveObject::setPos now uses const ref
* use ServerEnv::loadPlayer unconditionnaly as it creates RemotePlayer only if it's not already loaded
* Move hp from Player to LocalPlayer
* Move m_hp from LuaEntitySAO to UnitSAO
* Use m_hp from PlayerSAO/UnitSAO instead of RemotePlayer
2016-10-30 14:53:26 +01:00
Hugo Locurcio
d43326021a Rename testsounds/ directory to sounds/ (#1984) 2016-10-30 14:36:57 +10:00
sfan5
6d7b95d763 Add missing keyname_to_keycode function (needed on Android)
When rewriting keycode.cpp I overlooked this function, fixes #4683 completely
2016-10-28 15:50:23 +02:00
Ner'zhul
7252c803e0 Add missing remoteplayer.cpp to Android build
this should fix #4683
2016-10-28 15:37:19 +02:00
Ner'zhul
361e687f3a Add unittests to test player saving/loading (#4679) 2016-10-27 09:45:01 +02:00
Dániel Juhász
bcb06aeb85 Cleanup 2016-10-27 08:04:42 +02:00
Dániel Juhász
be39f61359 Use node lighting for liquid spreading
This commit modifies the liquid transforming procedure to light and
unlight nodes instead of whole map blocks.
2016-10-27 08:04:42 +02:00
Dániel Juhász
c071efaa43 Improved lighting
This commit rewrites the procedure that is responsible for light
updating.

this commit
-provides iterative solutions for unlighting and light spreading
-introduces a new priority queue-like container for the iteration
-creates per-node MapBlock caching to reduce retrieving MapBlocks from
the map
-calculates with map block positions and in-block relative node
coordinates
-skips light updating if it is not necessary since the node's new light
will be the same as its old light was
2016-10-27 08:04:42 +02:00
raymoo
1fd9a07497 Document item use callbacks (#4668) 2016-10-27 13:24:34 +10:00
lhofhansl
198ed60cab Shaders: Remove special handling for liquids. (#4670) 2016-10-26 16:24:45 +02:00
Foghrye4
6eb6e75fff Adding LuaError on attempt to assign vectors with values out of range 2016-10-25 21:10:51 +02:00
Gael-de-Sailly
3db2f08ff9 ParticleSpawner: fix offset being added twice 2016-10-25 20:39:39 +02:00
adrido
a1e1323d6e Windows: dont link to libraries that are already linked by cmake
This solves the problem whith building where build fails if the libaries have different names.
2016-10-25 13:54:24 +02:00
Lars Hofhansl
98176481c1 Shaders: Apply tone mapping before fog calculation. 2016-10-25 07:49:19 +02:00
Lars Hofhansl
779d2c5f64 Shaders: Harmonize Irrlicht and shader fog calculations 2016-10-24 07:41:00 +01:00
paramat
74eb7f50c9 Lua_api.txt: Clarify 'override_meta' bool in 'set mapgen setting' 2016-10-21 05:49:06 +01:00
paramat
0c76303186 Damage flash: Reduce maximum alpha. Avoid fade overload
Flash alpha maximum is reduced from 180 to 127 to avoid player blindness
in combat. Flash alpha minimum is unchanged.
The 'damage_flash' value is now limited to max alpha, to avoid multiple
hits creating a huge value that causes flash to stay at maximum alpha
for a long period. Now alpha always starts to fade immediately after
taking damage.
Both problems can be seen in Minetest let's play videos.
Simplify and optimise some code.
2016-10-21 05:48:53 +01:00
paramat
63a3bb229a Changes to static object storage limit and error message
Move static object storage force-delete message from errorstream to
warningstream.
Increase 'max objects per block' setting to 64.
Add missing spaces in warning code.
2016-10-20 03:40:47 +01:00
red-001
c7d569b863 Chat commands: Trim whitespaces from input of /privs command 2016-10-20 03:39:03 +01:00
Foghrye4
91250c1078 Fix crash on attaching player to entity
Rename "refresh" to "processInitData"
2016-10-19 08:40:43 +02:00
rubenwardy
0d740c5d82 Builtin: Add vector.floor helper function 2016-10-17 22:03:49 +02:00
Lars Hofhansl
a291cd6132 Revert changes to toggleNoClip and toggleFreeMove 2016-10-17 20:26:48 +02:00
Lars Hofhansl
3253b6bd22 Don't use day light sky unless noclip and free_move are enabled 2016-10-17 20:26:48 +02:00
ShadowNinja
2ff054d041 Enable mod security by default 2016-10-16 01:14:54 +01:00
red-001
c31e354342 Builtin/../chatcommands: Add /grantme command 2016-10-16 01:13:50 +01:00
Rogier
4b17105dc4 Emergeblocks: Fix occasional crash
Modification of the emergeblocks internal state was not protected
by a lock, causing a race condition.
This can be reproduced by repeatedly running emergeblocks for an
already-generated section of the map (with multiple emerge threads).
2016-10-16 01:13:16 +01:00
Tim
adad6e0a1c Travis: Only trigger a compile, when C/C++ related files were touched (#4284) 2016-10-15 17:59:23 +02:00
sfan5
9a3129da5e Make documentation about ItemStack:set_{name,count,wear} clearer
These methods do not actually fail but instead clear the item stack
	and return false if a value like e.g. "" is passed.
2016-10-15 12:42:59 +02:00
tenplus1
a468acce2c Builtin/../falling.lua: Code optimisation 2016-10-14 02:12:32 +01:00
Lars Hofhansl
0ad40fd484 Use range-based fog instead of z-plane based. 2016-10-13 23:30:15 +02:00
raymoo
c9e7a27eeb Attached particle spawners 2016-10-13 17:33:16 +02:00
sfan5
0b27a70b29 Don't use unordered maps for ProfilerGraph (fixes flickering) 2016-10-12 18:42:18 +02:00
red-001
4f684b589d Add a button for disabling all mods to world config. (#3900) 2016-10-12 03:11:38 +10:00
SmallJoker
b6569f1c69 Add missing languages to the settings 2016-10-11 07:32:47 +02:00
Rogier
a4a9ee94f3 Disable cmake message concerning WIN32 on non-windows systems 2016-10-11 07:29:04 +02:00
Loic Blot
1b450861f0 A little cleanup since previous commit 2016-10-09 16:31:43 +02:00
Loic Blot
70f104be07 Environment cleanup
* Move client list to ServerEnvironment and use RemotePlayer members instead of Player
* ClientEnvironment only use setLocalPlayer to specify the current player
* Remove ClientEnvironment dead code on player list (in fact other players are CAO not Player objects)
* Drop LocalPlayer::getPlayer(xxx) functions which aren't used.
* Improve a little bit performance by using const ref list for ClientEnvironment::getPlayerNames() & Client::getConnectedPlayerNames()
* Drop isLocal() function from (Local)Player which is not needed anymore because of previous changes

This change permits to cleanup shared client list which is very old code.
ClientEnvironment doesn't use player list anymore, it only contains the local player, as addPlayer is only called from Client constructor client side.
Clients are only CAO on client side, this cleanup permit to remove confusion about player list.
2016-10-09 15:17:10 +02:00
Rui
b3fc133442 Remove unused parameter of GUIVolumeChange 2016-10-09 10:35:51 +02:00
Loic Blot
569b89b36f Move RemotePlayer code to its own cpp/header 2016-10-08 22:27:44 +02:00
Loic Blot
7bbd716426 RemotePlayer/LocalPlayer Player base class proper separation (code cleanup) (patch 3 of X)
* remove IGameDef from Player class, only LocalPlayer has it now
* move many attributes/functions only used by LocalPlayer from Player to LocalPlayer
* move many attributes/functions only used by RemotePlayer from Player to RemotePlayer
* make some functions const
* hudGetHotbarSelectedImage now returns const ref
* RemotePlayer getHotbarSelectedImage now returns const ref
* various code style fixes
2016-10-08 22:27:44 +02:00
Loic Blot
edba6e50d9 Optimize ClientIface::getPlayerNames(): return const ref instead a copy of all names 2016-10-08 22:27:44 +02:00
Loic Blot
fd5a130b86 More code cleanup (UNORDERED + RemotePlayer/LocalPlayer)
* ClientEnvironment now uses UNORDERED MAP for active objects
* Use RemotePlayer and LocalPlayer everywhere it's possible
* Minor code style fixes
* Drop Client::getBreath() unused function
2016-10-08 22:27:44 +02:00
rubenwardy
067766eec2 Fix backwards compatibility issue introduced by close_on_enter 2016-10-08 18:58:28 +02:00
SmallJoker
0baea8c25c Ensure std::unordered_ be used on MSVC 2010 too (#4600) 2016-10-09 00:25:34 +10:00
Loic Blot
656faf7373 Player/LocalPlayer/RemotePlayer inheritance cleanup (part 2 on X)
* Server/Client Environments now have an helper to cast Player object in the right type to use it
* Server: use RemotePlayer everywhere and remove previous added casts
* Client: use LocalPlayer where needed
* Environment: remove unused functions (getPlayers(), getRandomConnectedPlayer(), getNearestConnectedPlayer())
2016-10-08 15:57:50 +02:00
gregorycu
9393e4a0a8 Speed up emerge thread by using unordered map in a few places. Looking at 25% speedup in Emerge thread on Just Test. 2016-10-08 15:57:36 +02:00
gregorycu
3de9ae4e60 Ensure std::unordered_ will be used on supported MSVC compilers 2016-10-08 15:05:36 +02:00
Foghrye4
ad163ee5c3 Prevent attached models from disappearing during parent reload (#4128) 2016-10-08 14:51:25 +02:00
HybridDog
9978d0796f VoxelArea: faster iter function (#4490) 2016-10-08 22:42:17 +10:00
Loic Blot
09cefc3dfd Remove some unused attributes/class functions in server.cpp/h 2016-10-08 11:36:28 +02:00
Loic Blot
8bcd10b872 Player/LocalPlayer/RemotePlayer inheritance cleanup (part 1 on X)
* LocalPlayer take ownership of maxHudId as it's the only caller
* RemotePlayer take ownership of day night ratio as it's the only user
* Pass getPlayerControl as const reference to prevent object copy on each call (perf improvement in ObjectRef::l_get_player_control call)
* getPlayerSAO is now only RemotePlayer call
* get/setHotbarItemCount is now RemotePlayer owned
* Server: Use RemotePlayer instead of Player object on concerned call to properly fix the object type
* PlayerSAO now uses RemotePlayer instead of Player because it's only server side
* ObjectRef::getplayer also returns RemotePlayer as it's linked with PlayerSAO
2016-10-08 11:36:28 +02:00
paramat
0264e38bff Lua_api.txt: Add biome and nodeupdate documentation
Add missing documentation for 'register_biome' and
'clear_registered_biomes'.
Add documentation for 'nodeupdate_single'. 'nodeupdate'
is not yet documented due to a bug it causes.
2016-10-08 00:09:01 +01:00
SmallJoker
d4a2e23793 Textures: Ignore unknown node in override.txt 2016-10-08 00:08:50 +01:00
sfan5
0a16e53b40 Fix C++11 Windows build of threading code
The initial problem was that mutex_auto_lock.h tries to use std::unique_lock<std::mutex>
	despite mutex.h not using C++11's std::mutex on Windows. The problem here is the mismatch
	between C++11 usage conditions of the two headers. This commit moves the decision logic
	to threads.h and makes sure mutex.h, mutex_auto_lock.h and event.h all use the same features.
2016-10-06 22:37:30 +02:00
Loic Blot
155288ee98 use unordered containers where possible (patch 4 on X)
Also remove some unused parameters/functions
2016-10-06 22:37:26 +02:00
SmallJoker
b66a5d2f88 Fix narrow string compiling issue on MSVC2010 2016-10-06 13:57:40 +02:00
Loic Blot
667975fe3a Use more unordered_maps to improve performance in c++11 builds 2016-10-06 12:33:35 +02:00
SmallJoker
997fc59c7e Use relative position for nametags 2016-10-06 12:13:37 +02:00
Loic Blot
009a9f1c6e Fix macosx build by disabling postgresql upgrade 2016-10-06 08:05:55 +02:00
est31
de83c29ba0 Fix crash regression when chatting in the ncurses console
Fixes #4579, a regression introduced by commit

d4c76258e3 "Chat: new settings to prevent spam"
2016-10-06 07:45:50 +02:00
Loic Blot
61d1751dff Travis: build matrix improvements + CPP11 build 2016-10-06 00:28:24 +02:00
Loic Blot
7fab86a49d Compilation fix 2016-10-05 20:58:05 +02:00
Loic Blot
613797a304 Replace various std::map with UNORDERED_MAP + various cleanups
This is part 2 for 5f084cd98d

Other improvements:

* Use the defined ItemGroupList when used
* make Client::checkPrivilege const
* inline some trivial functions
* Add ActiveObjectMap typedef
* Add SettingsEntries typedef
2016-10-05 10:53:19 +02:00
Loic Blot
5f084cd98d Make some maps unordered to improve performance
* This permit to improve performance on C++11 builds
* use some existing typedefs in tools maps
* minor code style changes
2016-10-05 07:30:32 +02:00
Loic Blot
d4c76258e3 Chat: new settings to prevent spam
Added the following chat coreside features
* Chat messages length limit
* Message rate limiting
* Message rate kicking

Note:
* handleChat now takes RemotePlayer pointer instead of u16 to remove useless
  lookups
2016-10-05 00:13:37 +02:00
paramat
1079aeaa13 Mapblock_mesh_generate_special: Improve performance
Remove uses of std::map.
Make sure we use ContentFeatures reference not value.
Original commit by gregorycu.
2016-10-04 00:06:28 +01:00
paramat
61e112b43b Textures: New 'smoke puff' texture from TNT mod 2016-10-04 00:04:38 +01:00
est31
fcfa418c4c Fix build/warning on non X11 platforms 2016-10-03 15:55:47 +02:00
paramat
89dbc0a25d Builtin/falling: Add fallback vector in case of nil 'wallmounted to dir'
The fallback vector is in case 'wallmounted to dir' is nil due
to voxelmanip placing a wallmounted node without resetting a
pre-existing param2 value that is out-of-range for wallmounted.
The fallback vector corresponds to param2 = 0.
2016-10-03 01:56:08 +01:00
raymoo
2516c516bc Forceloading: Transient forceloads
Adds a flag to forceload_block which lets you turn off persistence for
that forceload.
2016-10-03 01:54:36 +01:00
rubenwardy
077b6cfa21 Formspec: Add container[] and container_end[] elements 2016-10-03 01:53:13 +01:00
sfan5
eb0e9d5661 Allow nothing to be selected from formspec parameters 2016-10-02 15:49:18 +02:00
Rui
3a95054db5 Fix typo in core.after (#4560) 2016-10-01 16:16:50 +02:00
Wuzzy
c0e56c6011 Update default controls in README.txt 2016-09-30 18:57:40 +01:00
paramat
56ea77ea96 Mgv7: Avoid mid-air spawn on disabled mountain terrain, optimise function
'getSpawnLevelAtPoint()' did not account for disabled mountains, it
was possible to be spawned in mid-air where a mountain surface would
have been.

Avoid check for river area if rivers are disabled.
2016-09-30 18:56:39 +01:00
est31
33a606c034 Fix android build
Fixes #4493.
2016-09-30 15:27:36 +02:00
sfan5
45a9145a4b Only include keycode unittests in client build (fixes #4559) 2016-09-29 16:31:31 +02:00
sfan5
cc0b3c1cd1 Add keycode.cpp unittests 2016-09-25 17:26:38 +02:00
sfan5
c3e1ab859e Rewrite keycode.cpp (Keycode handling & names) 2016-09-25 17:26:38 +02:00
paramat
cd2c8ade2d Conf.example: Re-add deleted noise parameter documentation
Re-add documentation of noise parameter formats.
Re-add 'mgv5_np_ground' noise parameters in group format.
Both these were deleted through auto-generation of conf.example.
Add note to builtin/mainmenu/dlg_settings_advanced.lua that this
documentation must be preserved.
2016-09-23 19:01:31 +01:00
sfan5
9fa562f888 Update library versions in buildbot
The libraries updated in this commit were built with a set of scripts:
	https://gist.github.com/sfan5/780c24313c164d34634e18677683b9a3
Building new library versions or just using a different MinGW version
is now way easier. This means Windows builds no longer need to use
ancient library versions just because nobody knows how to build them.
2016-09-21 20:16:31 +02:00
sfan5
af4c2107e0 Don't use ZLIB_WINAPI if the required DLL is not provided to CMake
This allows you to use an stdcall zlib (zlib1.dll instead of zlibwapi.dll)
when building Minetest for win32.
2016-09-21 20:16:31 +02:00
sfan5
3a57e52500 Do not serialize empty NodeMetadata
This commit fixes #4516, though note that this will gradually fix MapBlocks
as they are used/modified and thus re-serialized.
2016-09-21 10:29:17 +02:00
paramat
5091cb5ecd Builtin: Change error to warning for light_source > 14 2016-09-21 08:04:11 +02:00
James Stevenson
679c8de63f Increase default font size by 1 2016-09-21 08:04:11 +02:00
est31
abb6fba24f Fix a typo and use proper deprecation notification system
Fix a typo pointed out by @thecow275.

Also, use the deprecated notification system which respects the
deprecated_lua_api_handling setting.
2016-09-19 12:14:06 +02:00
paramat
3aefa5d3ce Register.lua: Throw error if node 'light_source' > core.LIGHT_MAX
Add 'core.LIGHT_MAX = 14' to builtin/game/constants.lua with the intention
to replace misplaced 'default.LIGHT_MAX = 14' in Minetest Game.
Add comment in light.h requiring the constant be changed in both places.
Add lighting bug warning to note in lua_api.txt.
There are hundreds of mod uses of 15 which causes a lighting bug.
2016-09-17 09:33:25 +01:00
paramat
297546af3d Lua_api.txt: Add note of maximum value for node 'light_source'
Maximum is 14.
A value of 15 (reserved for direct sunlight) causes a lighting bug.
2016-09-15 05:25:38 +01:00
Thomas--S
1475c1b1c8 Add an [invert:<mode> texture modifier
Inverts the given channels of the base image.
Mode may contain the characters "r", "g", "b", "a".
Only the channels that are mentioned in the mode string will be inverted.
2016-09-15 05:25:38 +01:00
ShadowNinja
6e30dd05f4 Collision: Improve performance by combining 6 vectors into 1 using a struct 2016-09-15 05:25:12 +01:00
paramat
b88595050f Decorations: Generalise 'spawn by' to be used by all decoration types
In lua_api.txt, make clear that 'place on' and 'spawn by' can be lists.
2016-09-14 09:19:54 +01:00
sfan5
b77cee146b Allow escaping of texture names when passed as an argument to a modifier 2016-09-14 09:19:36 +01:00
Eric Mountain
9dd22aebc7 Fix "unknown CMake command "check_library_exists" (#4517)
Adds CMakeLists.txt include to fix this issue:

$ cmake . -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE \
   -DCMAKE_BUILD_TYPE=Release -DENABLE_CURL=TRUE -DENABLE_CURSES=FALSE \
   -DENABLE_FREETYPE=TRUE -DENABLE_GETTEXT=FALSE \
   -DENABLE_POSTGRESQL=FALSE -DENABLE_SOUND=FALSE -DENABLE_LUAJIT=TRUE \
   -DIRRLICHT_SOURCE_DIR=$HOME/irrlicht-1.8.4 -LH
...
CMake Error at src/CMakeLists.txt:339 (check_library_exists):
  Unknown CMake command "check_library_exists".
...
2016-09-13 23:05:21 -04:00
Auke Kok
d83bcf2c50 Plantlike meshoptions: fix degrotate. (#4512)
This snuck in with the meshoptions patch and accidentally kills
degrotate plants. Thanks to @hybriddog for finding this.
2016-09-12 16:04:13 -07:00
raymoo
af4b63ff21 fix missing parameters in some mentions of entity callbacks 2016-09-12 03:35:28 -04:00
James Stevenson
403dada85a Return nil on empty get_area() (#4508) 2016-09-10 01:47:13 +10:00
SmallJoker
c0cd7aa351 Anticheat: Use the physics_override modifiers aswell 2016-09-09 01:03:36 -04:00
SmallJoker
2de8c22a99 Make getStackMax return the correct maximal stack size 2016-09-08 03:37:03 -04:00
paly2
aa33166386 Add minetest.unregister_item and minetest.register_alias_force 2016-09-08 03:26:52 -04:00
est31
7eacdc7bb8 Run updatepo.sh 2016-08-30 06:18:37 +02:00
Rui
fe497573f6 Translated using Weblate (Danish)
Currently translated at 30.2% (271 of 895 strings)

Don't end with '\n'.
2016-08-30 06:17:24 +02:00
Rui
6cf0ab376c Translated using Weblate (Japanese)
Currently translated at 50.0% (448 of 895 strings)

This is a merger of two commits.
2016-08-30 05:54:09 +02:00
Thomas Wagner Nielsen
7f8703ef74 Translated using Weblate (Danish)
Currently translated at 27.3% (245 of 895 strings)
2016-08-30 05:53:54 +02:00
bse666
048ba0d22d Translated using Weblate (German)
Currently translated at 98.5% (882 of 895 strings)
2016-08-30 05:53:54 +02:00
Mateusz Mendel
03ba583264 Translated using Weblate (Polish)
Currently translated at 42.4% (380 of 895 strings)
2016-08-30 05:53:53 +02:00
Jakub Mendel
efa2635d56 Translated using Weblate (Polish)
Currently translated at 42.4% (380 of 895 strings)
2016-08-30 05:53:53 +02:00
Bruno Borges
45f8ae9e55 Translated using Weblate (Portuguese (Brazil))
Currently translated at 87.8% (786 of 895 strings)

Enhancements
2016-08-30 05:53:53 +02:00
Bruno Borges
bc1fcc4584 Translated using Weblate (Portuguese)
Currently translated at 64.9% (581 of 895 strings)
2016-08-30 05:53:53 +02:00
lisacvuk
9f326ea9c8 Translated using Weblate (Serbian (cyrillic))
Currently translated at 33.2% (298 of 895 strings)
2016-08-30 05:53:53 +02:00
Jean-Baptiste
6cd2ccb35b Translated using Weblate (French)
Currently translated at 99.5% (891 of 895 strings)
2016-08-30 05:53:53 +02:00
Onyx Steinheim
f9d5ea4322 Translated using Weblate (French)
Currently translated at 99.4% (890 of 895 strings)

This is a merger of two commits.
2016-08-30 05:53:39 +02:00
Jeff Huang
f3ee6b992b Translated using Weblate (Chinese (Taiwan))
Currently translated at 100.0% (895 of 895 strings)
2016-08-30 05:47:54 +02:00
Rui
3b0f7659c7 Document keymap_autorun in settingtypes.txt and minetest.conf.example (#4486) 2016-08-30 05:40:48 +02:00
est31
1f2ff860f5 Update minetest.conf.example and settings_translation_file.cpp 2016-08-30 04:40:54 +02:00
rubenwardy
78ff5c1936 Fix background formspec elements from interfering with each other
Fixes #4397
2016-08-29 01:15:31 +01:00
red-001
fbe4a9267f Settingtypes.txt: Clarify comments, correct spelling 2016-08-29 01:00:05 +01:00
SmallJoker
51e13ae588 Builtin: Disallow registering users with the same name
Prevents duplicate names: 'NickName', 'nickname', 'NICKNAME'.
Skips already registered users, so they can connect as usual.
2016-08-29 00:58:39 +01:00
rubenwardy
e10fee0001 Allow fields to choose whether they close on enter press 2016-08-27 13:05:01 +01:00
rubenwardy
4330c63ea4 Submit name of field on enter key press 2016-08-27 13:02:45 +01:00
paramat
fb20b45100 Camera: Higher frequency limit for view/hand bobbing and footsteps
Rebased and tuned version of Calinou's original pull request.

'm_view_bobbing_speed' controls the frequency of view bobbing,
hand bobbing and footsteps, it was limited to a maximum of 40 (walking
frequency) so did not increase if player speed was modified by a
'speed buff', a sprinting mod or modified in .conf or advanced
settngs.

This commit raises the limit to 70 which is suitable for sprinting.
2016-08-26 05:26:52 +01:00
Auke Kok
e58a55aa82 Make plantlike drawtype more fun
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)
2016-08-26 05:26:08 +01:00
est31
d767f025cb Client: disable pre v25 init sending by default
Disable the ability to connect to old servers by default to
improve password security.

If people still want to connect to old (0.4.12 and earlier)
servers, they can flip the send_pre_v25_init setting.

Add the ability to detect if we've tried to connect
to a server which only supports the pre v25 init protocol,
and show an apropriate error message. Most times the error
will already be catched at the serverlist level, the
detection mechanism only acts as last resort, because the
"Connection timed out" error message that would be shown
otherwise would be very confusing.

Automatic "fixing" of this condition is not desired,
as it would allow for downgrade attacks.

As already 161 of the 167 servers on the serverlist
support the new srp based auth protocol (> 96%),
the breakage should be minimal.

Follow up of commit

af30183124 "Add option to not send pre v25 init packet"

Also change the pessimistic assumption of masterlist
server versions to optimistic, in order to avoid buggy
behaviour (favourites not in the serverlist would be
denied to connect to, etc).
2016-08-22 20:23:28 +02:00
Xunto
0b0075e6ad Move on join and on leave messages to lua (#4460) 2016-08-22 20:21:48 +02:00
kahrl
cafa400fa5 gettext.h: include <locale> before defining the gettext macro (#4452)
Fixes #4446: a syntax error that happens if something else (such as
<iomanip> or <locale> in certain libstdc++ versions) includes
<libintl.h> later, which contains a function declaration for gettext
that gets mangled by the macro.

See the added comment in gettext.h and the discussion in #4446/#4452
for details.
2016-08-21 02:40:23 +02:00
est31
f092dac979 Also support X11 icon for minetest copies installed via make install (#4407)
Fixes #4323.
2016-08-20 21:26:44 +02:00
Tim
6590140260 Tidy up generate_from_settingtypes.lua a bit.
* Multiline strings
* Table-concat instead of String-concats
* string.rep instead of loop-concat
* string.format %q instead of manual quotation by gsub
* Assert writeable files
* Generate new settings_translation_file
2016-08-20 15:48:47 +02:00
Tim
ba50127309 Move generation from settingtypes out of dlg_settings_advanced
Avoids unreachable code linter warning by moving generation code
(of minetest.conf.example and settings_translation_file.cpp)
out of dlg_settings_advanced.

Due to passing the settings, also it avoids reading the settings file twice.

Instead of activating the code by changing the active if-clauses,
its activation is now done by uncommenting the loadfile() statement.
2016-08-20 15:48:47 +02:00
Rogier-5
a4962240bd Fix for failure to find jsoncpp in android build (#4456)
Commit 4503b5 did not update the android build script.
2016-08-19 20:23:30 +02:00
obneq
7f4c6f32da Mapblock mesh: Fix updateFastFaceRow tiling issue
Increase maximum length of tiled node rows from 2 to mapblock size.
2016-08-18 20:45:18 +01:00
SmallJoker
5c0e659516 Script API: Make the craft recipe field 'method' consistent 2016-08-18 20:43:49 +01:00
DonBatman
986d70ccec Lua_api.txt: Change 'maxwear' to 'uses' in 'tool_capabilities'
'maxwear' has been deprecated for over 3 years
Add spaces around '=' nearby
2016-08-14 16:41:06 +01:00
Thomas--S
f21dae6339 Add an [opacity:<r> texture modifier. Makes the base image transparent according to the given ratio. r must be between 0 and 255. 0 means totally transparent. 255 means totally opaque. Useful for texture overlaying. 2016-08-12 15:20:30 +02:00
sfan5
c4e77b406a Update AppData file with more URLs and keywords 2016-08-12 15:04:02 +02:00
Rogier-5
b11720af45 Use the standard to_string() functions for C++11 (#4279)
If compiling according to a C++ version before C++11, then define
std::to_string ourselves.

Add a to_wstring version as well

As std::to_string() for floating point types uses %.6f as floating
point format converter, instead of %G, it needs special care.

To preserve ftos() behavior (which is expected to use the %G format
converter), it no longer uses to_string().
2016-08-11 19:22:40 +02:00
Rogier-5
35f47e5461 Add infotext containing entity type (e.g. mobs:cow) to unknown entities (#4431)
If a mod is disabled, or upgraded without sufficient backward compatibility,
then entities it has put into the world become unknown, and continue moving
around, but are completely unrecognisable.

This change allows the player to see their type, and therefore which mod is
or was responsible.
2016-08-11 00:22:32 +02:00
David Carlier
48b3bb980d couple of memory leaks fixes. 2016-08-10 16:59:32 +02:00
DLaboratory
1be3894e6f Update the version of irrlicht to 1.8.3, add steps for Sqlite3
Also add note for 64-bit Windows users
2016-08-10 14:23:02 +02:00
Ben Deutsch
82494b8cc1 Zooming the camera requires the 'zoom' privilege 2016-08-10 12:18:25 +02:00
Ben Deutsch
d1df09841d Document zoom_fov in settingtypes.txt and minetest.conf.example 2016-08-10 12:18:25 +02:00
Esteban I. Ruiz Moreno
2c31b79235 Add zoom, tweakable with zoom_fov, default key: Z (like optifine) 2016-08-10 12:18:25 +02:00
Tomas
c013c73f33 Lua->C getintfield() use lua_tointeger (#4408)
previously function used tonumber which returned float
this caused errors in large numbers and resulted in
obj-def-handlers being invalid when retrived from lua tables in c
2016-08-10 12:17:48 +02:00
Rogier-5
4503b5097f Fixes for compiling with a newer (system) jsoncpp (#4429)
* Move included json code to jsoncpp subdirectory

This is needed to avoid having to specify the minetest src directory
as a system include when fixing the json includes.

* Fix json includes

They used "", so that the compiler searches the project's directory
first. The result was that when compiling with a system jsoncpp,
the project's own version of json.h was still included, instead of
the system version.

The includes now use <>, so a system location, or one specified with
'-Ilocation' is searched only.

* Fix for jsoncpp deprecated function warning

When compiling with a newer version of jsoncpp (and
ENABLE_SYSTEM_JSONCPP=true), jsoncpp emits a warning
about a deprecated function that minetest uses.
2016-08-10 12:10:00 +02:00
Ner'zhul
058a869b70 Permit usage of std::unordered_map & std::unorderered_set on c++11 compilers (#4430)
This fallback to std::map & std::set for older compilers

Use UNORDERED_SET as an example in decoration and ore biome sets

Use UNORDERED_MAP as an example in nameidmapping
2016-08-10 12:08:05 +02:00
Rémi Verschelde
8df89db30e Add simulation category 2016-08-10 08:51:36 +02:00
paramat
b6d845adb4 Decorations: Fix decoration height check errors
Fix height check comparison from '>=' to '>'.
Fix getHeight() for schematic decorations to account for
'deco place center y' flag and for how normal placement
sinks schematic 1 node into the ground.

Jungletrees were not being placed at y = 46, y = 47 despite
having an acceptable 16 nodes of height above ground surface.
2016-08-05 11:48:40 +01:00
paramat
ea12da939f Mapgen: Remove unused 'flat' and 'trees' flags from mg_flags
When the 'flat' and 'trees' flags were moved into mgv6_spflags they
were left in mg_flags in an attempt to support old mgv6 worlds. However
their appearence in mg_flags causes confusion, also, later, old-world
support was found to be broken for mgv6 worlds with 'notrees'.

This commit cleans up the mess and comes a month after a thread warning
of the change, and explaining the required action, was posted in the
news subforum. Only old mgv6 worlds with 'flat' or 'notrees' are
affected, a small minority of worlds, the required action being
correctly setting these flags in mgv6_spflags.

Disable a section of the 'map settings manager' unit test which is to
be changed as it is causing problems for pull requests.
2016-08-04 06:58:42 +01:00
Dorian Wouters
fca8e53842 Fix l_request_insecure_environment not ignoring all whitespace (#4395)
l_request_insecure_environment didn't ignore all whitespace in the
secure.trusted_mods config option.

Replaces std::remove with std::remove_if and the isspace function.
2016-08-04 00:41:54 +02:00
est31
4ec6671909 test_map_settings_manager: Fix Wunused-result warning 2016-08-04 00:29:06 +02:00
est31
9edc984b09 Porting: Fix endless loop if image format is not recognized 2016-08-03 23:33:04 +02:00
SmallJoker
e559f8714b texture_packs.txt: Document special textures 2016-07-30 03:10:04 +01:00
rubenwardy
927adf9bdd Documentation: Create texture_packs.txt
Combine texture_overrides.txt and sections of lua_api.txt
2016-07-30 03:08:56 +01:00
mtango688
573b50ab2c lua_api.txt: Document how to properly clear node metadata 2016-07-30 03:08:21 +01:00
Nathaniel Olsen
cc01c3cb4d Update README.txt (#4368)
* Update README.txt

As of Ubuntu 16.10, libpng12-dev is replaced with libpng12-0, since libpng12-0 is available in 16.04 repositories, I think that needed to be changed.

Also I changed 'git-core' to 'git' for fedora users, keep it consistent with the ubuntu/debian instructions.

* Update README.txt
2016-07-29 23:37:06 +02:00
Fernando Carmona Varo
6b74e196ae buildbot: retrieve short commit hash properly
Instead of trying to manually parse the output of 'git show' which can be different across different git configurations, properly use the 'git rev-parse' command that is intended for this purpose.
2016-07-29 00:20:54 +02:00
Ner'zhul
919d9d791c Increase android versionCode (#4350)
This little update is due to a packaging problem when uploading on play store. They don't permit to re upload an APK with same version code.
This case was a fail on openssl packaged version which was old and rejected by Google but they don't remove the APK then i should increase the version code to permit having it on play store
2016-07-28 13:13:25 +02:00
SmallJoker
8a98cbda84 Upright sprite objects: Horizontally flip the front image
For consistent horizontal sprite structure when seen from front and back
Fix code style
2016-07-27 22:21:41 +01:00
Wuzzy
2cb0f649f4 Main menu, lua_api.txt: Fix mod/texture pack screenshot size issues
Recommend mod screenshot size in lua_api.txt
Adjust displayed screenshot size of texture packs
Document texture pack files in lua_api.txt
2016-07-27 22:20:31 +01:00
Tim
c8b4bedaa8 Builtin: Add core.MAP_BLOCKSIZE constant 2016-07-26 04:17:07 +01:00
Tim
58eb5f39d4 Builtin: Fix check for a player object in core.check_player_privs
core.check_player_privs accepts as first argument a name or player object, but just tested for a string.
This caused crashes inside builtin, when being passed any unexpected types.

This provides a better (duck-typing like) test, better error reporting.
2016-07-26 04:15:06 +01:00
est31
f833159a68 Update minetest.conf.example and the settings translation file 2016-07-24 17:41:36 +02:00
paramat
2ba8ad1dfe Mgvalleys / cavegen: Place riverbed nodes under river water
When a CavesNoiseIntersection tunnel intersects a river place biome
'riverbed' nodes in tunnel entrance instead of biome 'top' nodes.
2016-07-21 05:01:18 +01:00
James Stevenson
97c763158c lua_api.txt: Remove tooltip checkbox[] element 2016-07-21 05:00:40 +01:00
est31
6621daee50 HTTP lua API docs: correct some function references 2016-07-12 22:47:14 +02:00
Tim
d7060c212f Builtin/profiler: Replace game profiler (#4245)
Use the setting "profiler.load" to enable profiling.
Other settings can be found in settingtypes.txt.

* /profiler print [filter] - report statistics to in-game console
* /profiler dump [filter] - report statistics to STDOUT and debug.txt
* /profiler save [format [filter]] - saves statistics to a file in your worldpath
	* txt (default) - same treetable format as used by the dump and print commands
	* csv - ready for spreadsheet import
	* json - useful for adhoc D3 visualizations
	* json_pretty - line wrapped and intended json for humans
	* lua - serialized lua table of the profile-data, for adhoc scripts
* /profiler reset - reset all gathered profile data.
	This can be helpful to discard of any startup measurements that often spike during loading or to get more useful min-values.

[filter] allows limiting the output of the data via substring/pattern matching against the modname.

Note: Serialized data structures might be subject to change with changed or added measurements.
	csv might be the most stable, due to flat structure.

Changes to the previous version include:

* Updated and extended API monitoring
* Correct calculation of average (mean) values (undistorted by idleness)
* Reduce instrumentation overhead.
* Fix crashes related to missing parameters for the future and occasional DIV/0's.
* Prevent issues caused by timetravel (overflow, timejump, NTP corrections)
* Prevent modname clashes with internal names.
* Measure each instrumentation individually and label based on registration order.
* Labeling of ABM's and LBM's for easier classification.
  Giving several ABM's or LBM's the same label will treat them as one.
  Missing labels will be autogenerated based on name or registration order.
* Configurable instrumentation and reporting. Skip e.g. builtin if you don't need it.
* Profile the profiler to measure instrumentation overhead.
2016-07-12 21:51:10 +02:00
Duane
d6865c4d8d Lua_api.txt: Fix description of node drop behaviour 2016-07-12 20:23:46 +01:00
paramat
91f68e7d11 Treegen: Improve use of signed vs. unsigned integers
To fix GCC 6.1.1 compilation warning:
'assuming signed overflow does not occur when assuming
that (X - c) > X is always false'
2016-07-12 20:22:26 +01:00
est31
7eeb735cab Run updatepo.sh 2016-07-12 20:50:20 +02:00
est31
24ca754bd5 Update minetest.conf.example, and settings_translation_file.cpp 2016-07-12 20:49:33 +02:00
Onyx Steinheim
e323ba4f27 Translated using Weblate (French)
Currently translated at 100.0% (887 of 887 strings)
2016-07-12 20:44:14 +02:00
ikmaak
23933dcb24 Translated using Weblate (Dutch)
Currently translated at 89.6% (795 of 887 strings)
2016-07-12 20:44:14 +02:00
Muhammad Rifqi Priyo Susanto
bda12ddd7d Translated using Weblate (Indonesian)
Currently translated at 55.8% (495 of 887 strings)
2016-07-12 20:44:14 +02:00
Roberto Mengíbar Fernández
8667566f78 Translated using Weblate (Spanish)
Currently translated at 59.0% (524 of 887 strings)
2016-07-12 20:44:14 +02:00
Guillaume Robert
18c2aed1c9 Translated using Weblate (French)
Currently translated at 91.2% (809 of 887 strings)
2016-07-12 20:44:14 +02:00
arsdragonfly
e07247f8da Translated using Weblate (Chinese (China))
Currently translated at 75.1% (667 of 887 strings)
2016-07-12 20:44:14 +02:00
Лазар Вукановић
c9c07ae754 Translated using Weblate (Serbian (cyrillic))
Currently translated at 31.5% (280 of 887 strings)
2016-07-12 20:44:13 +02:00
Лазар Вукановић
ac20a5182f Added translation using Weblate (Serbian (cyrillic)) 2016-07-12 20:44:13 +02:00
Tim
235d2ed246 Translated using Weblate (Esperanto)
Currently translated at 32.2% (286 of 887 strings)
2016-07-12 20:20:54 +02:00
susan
c7cd76f69a Translated using Weblate (Chinese (China))
Currently translated at 74.1% (658 of 887 strings)
2016-07-12 20:20:54 +02:00
Snipie
4c530dea1a Fix typos (#4298) 2016-07-10 00:00:14 +10:00
est31
27905f1a4a Ubuntu build HOWTO: Suggest to install git instead of git-core
The package docs for the git-core Ubuntu package in all supported
Ubuntu versions, including 12.04 say:

This is a transitional dummy package.  The 'git-core' package has been
renamed to 'git', which has been installed automatically.  This git-core
package is now obsolete, and can safely be removed from the system if no
other package depends on it.

Fixes #4109
2016-07-08 17:07:31 +02:00
est31
9db78dc4c4 Fix -Wterminate warnings in rollback.cpp as well
Fix #4137 for rollback.cpp as well.
2016-07-08 07:27:49 +02:00
est31
483cca78a1 Fix -Wterminate warning on GCC 6
Fixes #4137
2016-07-08 07:08:33 +02:00
Jay Arndt
795f1c75cb Fix warning in porting::setXorgWindowIcon when building without X11 (#4288) 2016-07-07 03:15:36 +02:00
Foghrye4
281e9f39fd Adding minetest.clear_craft
Modifications by est31: grammar fixes in doc + error messages and
a little style fix, no functional change.
2016-07-05 21:40:13 +02:00
sfan5
7a532056e2 Use mathematical function to determine yaw direction 2016-07-05 20:36:05 +02:00
Snipie
6014e7257e Fix for cropped text "Toggle Cinematic" 2016-07-05 20:29:41 +02:00
rubenwardy
538af97d8d Remove cinematic toggle on F8
Also update cinematic mode's description to include mouse
2016-07-05 19:50:30 +02:00
est31
5d4d3f8366 Finally set a window icon on X11
Since the creation of minetest, it had no window icon on X11.
Now we have one.

The misc/minetest-xorg-icon-128.png file is a rendering of the
misc/minetest.svg file with inkscape, created with something like:

inkscape -z -e misc/minetest-xorg-icon-128.png -w 128 -h 128 misc/minetest.svg
2016-07-05 17:02:06 +02:00
est31
c1bdb552bc Temporarily disable "testStartStopWait" Threading unit test on mac
The "testStartStopWait" unit test is unreliably failing on mac,
for some time already. See bug #3786.

Having the unittest fail unreliably doesn't help anybody but mostly
inhibits the main feature of travis builds: to test PRs for regressions.

Therefore, disable the specific unit test for until bug #3786
is fixed.
2016-07-04 22:46:52 +02:00
Rogier-5
1dfd977ec4 Fix & make linux conditionals uniform (#4278)
The source used a hodge-podge of different combinations of different
macros to check for linux: 'linux', '__linux', '__linux__'.

As '__linux__' is standard (Posix), and the others are not, the source
now uniformly uses __linux__. If either linux or __linux are defined,
it is made sure that __linux__ is defined as well.
2016-07-04 21:00:57 +02:00
est31
f649147080 Disable joysticks per default for now
It seems that various different devices register as
Joysticks on linux, and their presence has caused
lots of confusion amongst minetest users.

Therefore, disable the joystick feature.

Closes #4261
Closes #4221
2016-07-04 20:49:13 +02:00
est31
e1aa98fe07 Remove top left minetest watermark
Move version information into the window caption.

On popular player request.

Fixes #4209.
2016-07-03 21:49:33 +02:00
kwolekr
3c63c3044d Add MapSettingsManager and new mapgen setting script API functions
This commit refactors the majority of the Mapgen settings system.
- MapgenParams is now owned by MapSettingsManager, itself a part of ServerMap,
  instead of the EmergeManager.
- New Script API functions added:
    core.get_mapgen_setting
    core.get_mapgen_setting_noiseparams,
    core.set_mapgen_setting, and
    core.set_mapgen_setting_noiseparams.
- minetest.get/set_mapgen_params are deprecated by the above new functions.
- It is now possible to view and modify any arbitrary mapgen setting from a mod,
  rather than the base MapgenParams structure.
- MapgenSpecificParams has been removed.
2016-07-03 15:38:36 -04:00
kwolekr
92705306bf Mapgen: Refactor mapgen creation and management
- Move mapgen creation logic out of EmergeManager and into Mapgen
- Internally represent mapgen type as an enum value, instead of a string
- Remove the need for a MapgenFactory per mapgen
2016-07-03 14:04:11 -04:00
Pavel Puchkin
70e2c1c7d4 Remove old docs. We have VCS history anyways. (#4266) 2016-07-03 13:30:09 +02:00
David Carlier
b6eef1c0c2 openbsd's port fix for non Linux systems w/o libRT
X11 headers are not always in expected locations, add them to include list.

Modifications by est31: indentation fixes, commit message improved
2016-07-03 13:01:49 +02:00
HybridDog
80cebdc23c Only allow strings to be passed to minetest.global_exists (#4253)
Sometimes you accidentally forget the quotes when using global_exists, this makes minetest abort if you did so.

M  builtin/common/strict.lua
2016-06-28 06:34:22 +02:00
est31
ab7a5c4ff1 Also shut down when SIGTERM was received
Fixes #4251
2016-06-24 20:43:29 +02:00
paramat
9997e2030c Mgflat/fractal/v7/valleys: Denser 3D noise tunnels
Reduce spread from 96 to primes 61 and 67 (either side of 64)
Prime spreads help to keep 3D noise periodic features unaligned
'cave width' 0.2 to preserve tunnel width
Reduce octaves to 3 to improve network structure
2016-06-24 02:17:51 +01:00
raymoo
fa0bbbf96d Player: New get_look, set_look API
Deprecate get_look / set_look pitch / yaw
2016-06-24 02:13:09 +01:00
paramat
04fb10914c Dungeons: Generalise use, add capabilities, various modifications
- Generalise node names to c_wall and c_alt_wall
- Remove 'mossratio' and instead disable alt_wall loop if
  c_alt_wall == CONTENT_IGNORE
- Use one generalised 3D noise for alternative wall nodes and in
  mgv6 create moss distribution similar to the previous

- Rename rarity noise to density noise and enable the option of multiple
  dungeons per chunk determined by the value. Recreate previous distribution
- Add parameters for min and max rooms per dungeon
- Add dungeon y limits

- Integrate river water properly

Generalisation is needed now that we have sandstone and desert stone
dungeons by default and can choose any node for alternative structure.
The current code is based around cobble dungeons with mossycobble
alternative nodes, the 2 noises controlling the alternative nodes
are based on wetness.

Enabling multiple dungeons per chunk with definable number of rooms
allows the option of very dense and complex underground structures
that could interconnect to create megastructures.
Y limits are added to be consistent with other mapgen elements, and
enable locaton of dungeon or megastructure realms as part of our
'stacked realms' philosophy.
2016-06-17 04:42:42 +01:00
Auke Kok
39a9e9874e Builtin/game/item: Add place_param2 nodedef field
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.
2016-06-17 04:41:20 +01:00
Yutao Yuan
1b8dbf072a Move unknown node message when applying texture overrides to infostream (#4218)
Texture packs have no way to know what nodes are available, so this shouldn't be a error message.
2016-06-14 00:29:15 +02:00
paramat
a39d536282 Sky.cpp: Improve code style. Define sky colours as SColor 2016-06-11 23:35:38 +01:00
Ekdohibs
559dd99469 Make node timers more efficient 2016-06-11 23:35:17 +01:00
kwolekr
27aff22a9b Random misc. warning fixes and cleanups
- Fix unused c_sand member warning in Valleys Mapgen
 - Fix some code style
 - Make some std::string params const ref
2016-06-11 03:23:53 -04:00
kwolekr
33b874fea3 Settings: Clean up settings changed callback code 2016-06-11 00:11:37 -04:00
est31
817fea6330 Fix android build
Thanks to @Wayward1 for reporting the bug.

Fixes #4212.
2016-06-11 05:44:55 +02:00
Diego Martinez
dac40af6ee Server: Add reason for leave to on_leaveplayer callbacks 2016-06-11 04:17:04 +01:00
paramat
b24d21d1ae Sky: Darker, bluer sky and improved horizon haze at night
Add new colours 'skycolour_bright_night', 'bgcolour_bright_night'
and enable these between sunset end and sunrise start
Night sky has same hue as day sky but is darker and more saturated
Night horizon haze (bgcolour) is slightly less saturated and
slightly brighter than night sky, to be consistent with daytime
horizon haze
2016-06-09 01:50:52 +01:00
Paramat
3ef71edd81 Sky: Fix sunrisebg texture motion (#4199)
Top of texture no longer shows above horizon during night and day
2016-06-08 16:43:27 +10:00
paramat
c7297e552b Lua_api.txt: Split long lines. Capitalise 'Biome API'. Minor edits 2016-06-07 04:45:41 +01:00
kwolekr
d4457ef420 Mapgen: Optimize biomemap creation by combining with generateBiomes 2016-06-05 13:30:02 -04:00
paramat
d24f384174 Biome API: Add per-biome riverbed material and depth
Mgvalleys: Remove riverbed sand placement from base terrain generation
Riverbed material placement moved to MapgenBasic::generateBiomes()
Document fields and add note that the biome API is still unstable
2016-06-05 16:37:02 +01:00
MillersMan
7841f1c509 Mapgen: Performance improvement and fixes for updateLiquid (#4065)
- Adds only ~100 nodes per chunk to trans_liquid with similar processing time
- Adds liquid nodes themselves instead of potential solid nodes below them
- CONTENT_IGNORE nodes are interpreted as if they continue their neighborhood
- This allows liquid columns to span multiple chunks without being interrupted
- NOTE: Expects an one-node border in generation chunk without liquid changes
2016-06-04 19:32:54 -04:00
kwolekr
109c7e3349 Biomes: Define and use biome_t for biome IDs 2016-06-04 03:00:45 -04:00
kwolekr
8ed467d438 PcgRandom: Fix/improve documentation 2016-06-04 02:16:06 -04:00
kwolekr
dfbdb5bcd7 Change internal type for seeds to s32
This fixes value truncation (and therefore incompatibility) on platforms
with an LP32 data model, such as VAX or MS-DOS.
2016-06-04 01:51:44 -04:00
est31
2060fd9cbe Initial Gamepad support
Adds initial ingame gamepad support to minetest.

Full Formspec support is not implemented yet and
can be added by a later change.
2016-06-03 19:42:57 +02:00
est31
1e86c89f36 Input related generalisations
* Move key types into own file
* Use Generalized input methods in game.cpp
2016-06-03 19:42:57 +02:00
Robert Kiraly
7ea4a03c83 Sapier's fix for the RESEND RELIABLE problem (#4170) 2016-06-03 17:50:21 +10:00
paramat
569998011e Mgv7: Always carve river channels in mountain terrain
Previously, rivers were sometimes blocked by vertical walls
of mountain terrain due to river carving being disabled
when base terrain height was below water_level - 16
Remove now unused base terrain heightmap created in
generateTerrain()
2016-06-02 07:31:01 +01:00
Ekdohibs
14ef2b445a Add colored text (not only colored chat).
Add documentation, move files to a proper place and avoid memory leaks.
Make it work with most kind of texts, and allow backgrounds too.
2016-05-31 17:34:29 +02:00
TriBlade9
1d40385d4a Colored chat working as expected for both freetype and non-freetype builds. @nerzhul improvements * Add unit tests * Fix coding style * move guiChatConsole.hpp to client/ 2016-05-31 17:34:29 +02:00
yuval hreman
0e44af9f70 Translated using Weblate (Hebrew)
Currently translated at 7.8% (70 of 887 strings)
2016-05-30 16:41:20 +02:00
Andrey K
6792447dfa Translated using Weblate (Russian)
Currently translated at 57.2% (508 of 887 strings)
2016-05-30 16:41:20 +02:00
Emon Omen
5e9663d3d4 Translated using Weblate (Italian)
Currently translated at 100.0% (887 of 887 strings)
2016-05-30 16:41:20 +02:00
Fixer
30cd77a30b Translated using Weblate (Ukrainian)
Currently translated at 39.3% (349 of 887 strings)
2016-05-30 16:41:20 +02:00
Sergey
dc33ecad6d Translated using Weblate (Russian)
Currently translated at 57.0% (506 of 887 strings)

This is a merger of three commits.
2016-05-30 16:41:11 +02:00
Vasily Pavlov
526c978f96 Translated using Weblate (Russian)
Currently translated at 57.1% (507 of 887 strings)
2016-05-30 16:38:52 +02:00
Wuzzy
3842c3de65 Translated using Weblate (German)
Currently translated at 100.0% (887 of 887 strings)
2016-05-30 16:30:47 +02:00
est31
27db929252 Add minetest.check_password_entry callback
Gives a convenient way to check a player's password.

This entirely bypasses the SRP protocol, so should be used
with great care.

This function is not intended to be used
in-game, but solely by external protocols, where no
authentication of the minetest engine is provided, and
also only for protocols, in which the user already gives the
server the plaintext password.

Examples for good use are the classical http form, or irc,
an example for a bad use is a password change dialog inside
formspec.

Users should be aware that they lose the advantages of the SRP
protocol if they enter their passwords for servers outside the
normal entry box, like in in-game formspec menus,
or through irc /msg s,

This patch also fixes an auth.h mistake which has mixed up the
order of params inside the decode_srp_verifier_and_salt function.

Zeno-: Added errorstream message for invalid format when I committed
2016-05-30 23:28:08 +10:00
Sokomine
4134d8ad13 protection_bypass priv can now be revoked in singleplayer (#4169) 2016-05-30 22:40:32 +10:00
Zeno-
a9bc7dc405 Remove unused code in s_security.cpp (#4172)
Note that the macro CHECK_FILE_ERR implements the code removed
2016-05-30 22:37:40 +10:00
Auke Kok
d499ec4838 Particles: Add option to remove particles on collision
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.
2016-05-28 00:08:23 -04:00
red-001
62d15ac7c1 Add base64 encoding and decoding to the lua api. (#3919) 2016-05-27 23:37:28 -04:00
kwolekr
c4e083f7e1 Disallow external linkage for default Cavegen NoiseParams 2016-05-27 23:23:58 -04:00
kwolekr
c8fd232678 Dungeongen: Remove dependency on Mapgen 2016-05-27 23:23:58 -04:00
kwolekr
fd0efb21c3 Mapgen: Combine dungeon generation code 2016-05-27 23:23:58 -04:00
kwolekr
0810901766 Mapgen: Deduplicate common constructor code 2016-05-27 23:23:58 -04:00
kwolekr
0df5c01a8c Mapgen: Remove calculateNoise from most mapgens
This commit moves noise calculation to the functions where the noise is
actually required, increasing the separation of concerns and level of
interdependency for each mapgen method.  Valleys Mapgen is left unmodified.
2016-05-27 23:23:58 -04:00
kwolekr
c5968049bb Mapgen V7: Remove now-unused ridge heightmap 2016-05-27 23:23:58 -04:00
kwolekr
548d99bb45 Cavegen: Move V5-style caves to CavesNoiseIntersection 2016-05-27 23:23:58 -04:00
kwolekr
6151f7bc4b Cavegen: Minor misc. fixes
- Convert instances of numeric literal doubles to floats
- Move dswitchint to a local variable now that being a member is unnecessary
- Improve const correctness
- Indentation fixes
2016-05-27 23:23:58 -04:00
kwolekr
b1eb757e60 Fix undefined evaluation order when constructing random vectors
MSVC and GCC evaluate parameters in right-to-left order, whereas Clang
evaluates in left-to-right order, and of course, an optimization could
leave the order of evaluation completely indeterminate.

This commit fixes all instances of the error by explicitly assigning the
results of expressions that use PseudoRandom::next() or range() to their
respective vector components.

The right-to-left evaluation behavior is preserved since Clang is much less
commonly used to compile Minetest than GCC and MSVC combined, and would
therefore cause the least harm.
2016-05-27 23:23:58 -04:00
kwolekr
5b05f75a27 Cavegen: Re-add small caves to CavesRandomWalk 2016-05-27 23:23:58 -04:00
kwolekr
db1b4dc890 Cavegen: Remove CavesRandomWalk dependency on Mapgen 2016-05-27 23:23:58 -04:00
kwolekr
68b1cd8d1b Cavegen: Merge instances of repetitive surface level-finding code 2016-05-27 23:23:58 -04:00
kwolekr
a605d69092 Cavegen: Remove CavesV6 dependency on Mapgen 2016-05-27 23:23:58 -04:00
kwolekr
bf25837617 Cavegen: Rename CaveV6 to CavesV6
- Add comment explaining why it exists
- Remove unused 'flooded' variable
- Rename shadowed variable
- Fix some code style
2016-05-27 23:23:58 -04:00
kwolekr
1bb5eb1da2 Cavegen: Merge CaveV5 and CaveV7 into CavesRandomWalk 2016-05-27 23:23:58 -04:00
kwolekr
9b5c492be5 Fix MgStoneType and BiomeType enum names 2016-05-27 23:23:58 -04:00
kwolekr
87bc39dca7 Mapgen: Combine generateBiomes, dustTopNodes, and generateCaves
This commit condenses the above methods into a single implementation used by
V7, V5, Flat, Fractal, and Valleys mapgens and introduces MapgenBasic.
2016-05-27 23:23:58 -04:00
kwolekr
76f4856479 Move biome calculation to BiomeGen
BiomeGen defines an interface that, given a set of BiomeParams, computes biomes
for a given area using the algorithm implemented by that specific BiomeGen.
This abstracts away the old system where each mapgen supplied the noises
required for biome generation.
2016-05-27 23:23:58 -04:00
est31
fa6b21a15b Tell irrlicht if we handle a key or not.
We can remove the function in MtNativeActivity now
as it serves precisely that purpose: to tell irrlicht
that we handled the esc key.

TODO for later:
 * Perhaps try to find a more performant container than KeyList
2016-05-26 20:33:33 +02:00
ShadowNinja
ef100f12a1 Fix rollback.txt migration
Broken by b1965ac209.
This also prepares the begin and commit statements only once.
2016-05-23 11:48:30 -04:00
Craig Robbins
22f78ea38e Fix irrlicht version checking macro for tooltip_height calculation 2016-05-24 00:27:11 +10:00
Ekdohibs
725edc78b2 Move updateTextures and fillTileAttribs to ContentFeatures 2016-05-23 12:46:45 +02:00
est31
423d8c1b0d Tolerate packet reordering in the early init process
Fixes a bug where packet reordering made the server give the
client two peer ids instead of one. This in turn confused
reliable packet sending and made connecting to the server fail.

The client usually sends three packets at init: one "dummy"
packet consisting of two 0 bytes, and the init packet as well as
its legacy counterpart. The last one can be turned off since commit
af30183124, but this is of lower
relevance for the bug. The relevant part here is that network
packet reorder (which is a normal occurence) can make the packets
reach the server in different order.

If reorder puts the dummy packet further behind, the following
would happen before the patch:

1. The server will get one of the init packets on channel 1 and
   assign the client a peer id, as the packet will have zero as
   peer id.

2. The server sends a CONTROLTYPE_SET_PEER_ID packet to inform
   the client of the peer id.

3. The next packet from the client will contain the peer id set by
   the server.

4. The server sets the m_has_sent_with_id member for the client's
   peer structure to true.

5. Now the dummy packet arrives. It has a peer id of zero, therefore
   the server searches whether it already has a peer id for the
   address the packet was sent from. The search fails because
   m_has_sent_with_id was set to true and the server only searched
   for peers with m_has_sent_with_id set to false.

6. In a working setup, the server would assign the dummy packet to
   the correct peer id. However the server instead now assigns a
   second peer id and peer structure to the peer, and assign the
   packet to that new peer.

7. In order to inform the peer of its peer id, the server sends a
   CONTROLTYPE_SET_PEER_ID command packet, reliably, to the peer.
   This packet uses the new peer id.

8. The client sends an ack to that packet, not with the new peer id
   but with the peer id sent in 2.

9. This packet reaches the server, but it drops the ACK as the peer
   id does not map to any un-ACK-ed packets with that seqnum. The
   same time, the server still waits for an ACK with the new peer
   id, which of course won't come. This causes the server to
   periodically re-try sending that packet, and the client ACKing it
   each time.

Steps 7-9 cause annoyances and erroneous output, but don't cause
the connection failure itself.
The actual mistake that causes the connection failure happens in 6:
The server does not assign the dummy packet to the correct peer, but
to a newly created one.
Therefore, all further packets sent by the client on channel 0 are
now buffered by the server as it waits for the dummy packet to reach
the peer, which of course doesn't happen as the server assigned
that packet to the second peer it created for the client.
This makes the connection code indefinitely buffer the
TOSERVER_CLIENT_READY packet, not passing it to higher level code,
which stalls the continuation of the further init process
indefinitely and causes the actual bug.

Maybe this can be caused by reordered init packets as well, the only
studied case was where network has reliably reordered the dummy
packet to get sent after the init packets.

The patch fixes the bug by not ignoring peers where
m_has_sent_with_id has been set anymore. The other changes of the
patch are just cleanups of unused methods and fields and additional
explanatory comments.

One could think of alternate ways to fix the bug:

* The client could simply take the new peer id and continue
  communicating with that. This is however worse than the fix as
  it requires the peer id set command to be sent reliably (which
  currently happens, but it cant be changed anymore). Also, such a
  change would require both server and client to be patched in order
  for the bug to be fixed, as right now the client ignores peer id
  set commands after the peer id is different from
  PEER_ID_INEXISTENT and the server requires modification too to
  change the peer id internally.
  And, most importantly, right now we guarantee higher level server
  code that the peer id for a certain peer does not change. This
  guarantee would have to be broken, and it would require much
  larger changes to the server than this patch means.

* One could stop sending the dummy packet. One may be unsure whether
  this is a good idea, as the meaning of the dummy packet is not
  known (it might be there for something important), and as it is
  possible that the init packets may cause this problem as well
  (although it may be possible too that they can't cause this).

Thanks to @auouymous who had originally reported this bug and who
has helped patiently in finding its cause.
2016-05-22 15:56:54 +02:00
Loic Blot
f64a6259b2 Fix a m_camera not used warning fix pointed by clang 2016-05-22 13:31:41 +02:00
Loic Blot
ce42ff9cf7 Implement a PostgreSQL backend 2016-05-22 11:34:47 +02:00
HybridDog
0f184d77c8 Gitignore: ignore idea and ninja files 2016-05-22 08:22:37 +01:00
paramat
643ac9dd7a Item entities: Don't show description as infotext
Partially reverts #3547
Infotext remains optional for objects, empty by default
2016-05-22 08:21:44 +01:00
Craig Robbins
88acda0256 Fix tooltip height for versions of irrlicht < 1.8.2
Version 1.8.2 of irrlicht changed the way that IGUIStaticText::getTextHeight() works and since that release properly deals with newlines.

From irrlicht changes.txt for 1.8.2, "IGUIStaticText::getTextHeight returns now the correct height for texts with newlines even WordWrap is not set."
2016-05-21 00:26:04 +10:00
nerzhul
8ba6d9f227 Implement DatabaseException for databases 2016-05-17 14:36:51 +02:00
Wayward One
8b940c005f Add on_punchnode callback 2016-05-17 22:16:21 +10:00
Loic Blot
143401451c DB::loadBlock copy removal & DB backend cleanup
* Remove the copy from db::loadBlock by using a pointer to the destination
* cleanup db backend, the child backend doesn't have to set their functions as virtual
2016-05-17 06:52:16 +02:00
sfan5
decbd396df Really fix ncurses lookup on Arch Linux
Commit 27ee8d8943 forgot to add the paths
without ncursesw/ to the find_path() call
2016-05-16 12:43:50 +02:00
est31
7a828de1bc Android: enable parallelism for main target too
This adds to the changes that commit

98d16e0d9a "Android: Tell make about sub-makes to speed up build"

did, and enables parallel builds for minetest
itself as well.
2016-05-16 05:14:25 +01:00
paramat
01a784bd11 Documentation: Remove incorrect and excessive mapgen flags text 2016-05-16 05:14:15 +01:00
est31
8077612dcb Merge 0.4.14 changes into stable-0.4
0.4.14 release!
2016-05-15 15:20:25 +02:00
sfan5
fb31bd3806 Continue with 0.4.14-dev 2016-05-15 14:49:15 +02:00
sfan5
854d9e3745 Bump version to 0.4.14 2016-05-15 14:49:15 +02:00
est31
c65e7a9b3e Android: Re-add button to remove singleplayer world
Fixes #4120.
2016-05-14 22:25:58 +02:00
est31
b25554c8d7 Fix android build by fixing patch line endings 2016-05-14 16:46:46 +02:00
Maksim Gamarnik
b906ed4e59 Fix locked hardware buttons on Android
Fixes #2122
Fixes #1454

Addendum (est31)
According from its docs in android_native_app_glue.h (from the NDK), the
onInputEvent should "Return 1 if you have handled the event, 0 for any
default dispatching". Before, we always returned 1, meaning we blocked
all hardware keys to be given to the OS.
This broke the volume keys and has caused #2122 and #1454.

Although it bases on lots of guesswork, it can probably safely be said that
CGUIEnvironment::postEventFromUser returns true if the event was handled,
and false if not. Therefore, set the status variable depending on what
postEventFromUser returned.
2016-05-14 23:42:36 +10:00
est31
ec15e35ad7 Mainmenu: don't show change keys dialog on android
The change keys dialog can't be left. It doesn't make
much sense to show it on Android in the first place,
therefore disable it, just like commit

aed70cb0b6 'Disable sound and key binding settings in "pause" menu on android'

has disabled it for the esc menu.

Fixes #4115.
2016-05-13 17:30:53 +01:00
Rui
9d3d43f334 Fix #4111 ("Provided world path doesn't exist" if choosing singleplayer on first run")
Bug and whitespace error fixed (Zeno)
2016-05-13 01:41:16 +10:00
est31
997002703b Android: download deps using https
Its more secure, and some pages even redirect to the https version.
2016-05-12 05:03:15 +02:00
est31
a9b5c2662f Android: update openssl to 1.0.2h 2016-05-12 00:52:29 +02:00
Craig Robbins
8bb9e467d6 Fix typo in the info printed by --version 2016-05-11 23:20:20 +10:00
Craig Robbins
58b54cf9a9 Add platform name to --version information 2016-05-11 17:15:41 +10:00
kwolekr
ebe638c32d Mapgen V6: Synchronize spflags with defaultsettings
This fixes an issue where trees are omitted from Mapgen V6 maps on
configurations that explicitly defined the mgv6_spflags setting.
2016-05-10 22:44:18 -04:00
Johnny
5d9b6aaa03 README: Update Fedora dependencies list
Edited packages to reflect correct packages
2016-05-11 03:02:45 +01:00
Diego Martínez
759fbabaea Translated using Weblate (Spanish)
Currently translated at 56.8% (504 of 887 strings)

This is a merger of two commits.
2016-05-10 19:02:38 +02:00
Lucas Montenegro
c8705ca2aa Translated using Weblate (Spanish)
Currently translated at 51.5% (457 of 887 strings)

This is a merger of two commits.
2016-05-10 19:02:25 +02:00
ShadowNinja
29fc344d25 Translated using Weblate (Spanish)
Currently translated at 51.5% (457 of 887 strings)
2016-05-10 19:01:12 +02:00
Fixer
f102d36f62 Translated using Weblate (Ukrainian)
Currently translated at 38.4% (341 of 887 strings)

This is a merger of two commits.
2016-05-10 18:55:50 +02:00
senpi
fb1cfb43e2 Translated using Weblate (Lojban)
Currently translated at 10.5% (94 of 887 strings)
2016-05-10 18:55:50 +02:00
Emon Omen
d3304a7dc4 Translated using Weblate (Italian)
Currently translated at 100.0% (887 of 887 strings)

This is a merger of three commits.
2016-05-10 18:55:50 +02:00
BreadW
d23669a859 Translated using Weblate (Japanese)
Currently translated at 51.5% (457 of 887 strings)
2016-05-10 18:55:49 +02:00
Yvan YR
d01a8054b0 Translated using Weblate (French)
Currently translated at 90.7% (805 of 887 strings)
2016-05-10 18:55:49 +02:00
BreadW
4ac92079fb Translated using Weblate (Japanese)
Currently translated at 50.6% (449 of 887 strings)
2016-05-10 18:52:58 +02:00
Kisbenedek Márton
36c9c92ec1 Translated using Weblate (Hungarian)
Currently translated at 75.7% (672 of 887 strings)
2016-05-10 18:52:58 +02:00
Thomas Wagner Nielsen
487bd601eb Translated using Weblate (Danish)
Currently translated at 27.6% (245 of 887 strings)

This is a merger of two commits.
2016-05-10 18:52:58 +02:00
Claybiokiller
ecb9378e0f Translated using Weblate (Chinese (China))
Currently translated at 73.9% (656 of 887 strings)
2016-05-10 18:52:58 +02:00
Wuzzy
ea712b721b Translated using Weblate (German)
Currently translated at 100.0% (887 of 887 strings)

This is a merger of three commits.
2016-05-10 18:52:58 +02:00
Auke Kok
d9a9fae51d Translated using Weblate (Dutch)
Currently translated at 89.6% (795 of 887 strings)

This is a merger of three commits.
2016-05-10 18:52:45 +02:00
Tobyplowy
e289c9e648 Translated using Weblate (Dutch)
Currently translated at 85.6% (760 of 887 strings)
2016-05-10 18:51:14 +02:00
paramat
3f89bf4d7f Lua_api.txt: Fix documentation for facedir rotation 2016-05-10 02:21:53 +01:00
SmallJoker
53e9587861 Add [resize texture modifier Resizes the texture to the given dimensions. 2016-05-09 20:48:42 +02:00
est31
95446f4b6d Update credits tab 2016-05-09 20:41:27 +02:00
paramat
1db499dc6d Defaultsettings/Android: Increase 'max block generate distance' to 3 2016-05-08 22:08:29 +01:00
gregorycu
b8aed9dfc2 Fixes #4098 ce8a9ed didn't quite go far enough, and left this bug in 2016-05-08 19:03:09 +10:00
Kahrl
2cdd9b4ab6 Chat: Keep scroll position constant in ChatBuffer::deleteOldest() 2016-05-08 02:51:23 +01:00
Maksim Gamarnik
0f6e4a0913 Optimize default settings for Android build 2016-05-07 21:09:07 +10:00
Ekdohibs
4d9dbceb39 Run unescape_enriched *after* unescape_string.
Doing it the other way round was a mistake, since it breaks
minetest.formspec_escape with escape sequences that contain
special characters.
2016-05-07 08:33:21 +02:00
Ekdohibs
d5c3db9c41 Make dropdowns show the string that was their argument.
This makes it work even if it contains escape sequences,
which didn't work before.
2016-05-07 08:33:21 +02:00
Maksim Gamarnik
bb925479a5 Android: Increase player_stepheight for thicker snow nodebox 2016-05-06 00:32:35 +01:00
paramat
a279426d12 Lua_api.txt: Add warnings of l-system lighting bug 2016-05-06 00:29:16 +01:00
est31
ae02d1eb8f Run updatepo.sh 2016-05-05 16:14:09 +02:00
est31
063be8a126 Update settings translation file and minetest.conf.example 2016-05-05 16:12:58 +02:00
Craig Robbins
d864c13333 Fix holding down F10 (open console) causing GUI to freeze 2016-05-04 21:31:23 +10:00
paramat
b22de6470b Settings_translation_file: Update mapgen with cave width parameter 2016-05-03 00:44:34 +01:00
Craig Robbins
c92cff5d52 Fix Windows build
Fixes the issue introduced by c1a0ebb (Fix use of uninitialised variable
in class Event) causing Windows builds to fail
2016-05-02 15:01:17 +10:00
Kahrl
8fe753c3d9 FileSelectMenu: Fix formspec parsing broken by Irrlicht file-chooser 2016-05-01 16:32:12 +02:00
Auke Kok
aa8c88cf4a find_path: consider walkable instead of CONTENT_AIR
The path finding code works fairly well except that it considers
anythin not CONTENT_AIR to be "above the surface". This results in
paths that are unwalkable for entities since e.g. plants are not
walkable. The path would force them to jump on top of grass plants,
etc..

The obvious solution is not to use CONTENT_AIR as a criteria, but
instead distinguish between walkable and non-walkable nodes. This
results in paths that properly walk through grass nodes.

This was extensively tested by a flock of electric sheep.

Note that for underwater purposes this changes the behaviour from
"the surface is walkable" to "ignore water entirely" making the
path go across the water bottom, and pathing fail likely from the
water surface. This is intentional.
2016-05-01 15:32:03 +02:00
est31
9aec701a4c Pathfinder: improve GridNode storage
Before, the GridNodes were stored in vector<vector<vector<T>>>,
and initialized in advance. Putting three vectors inside each other
puts lots of unneccessary stress onto the allocator, costs more memory,
and has worse cache locality than a flat vector<T>.

For larger search distances, an the array getting initialized means
essentially O(distance^3) complexity in both time and memory,
which makes the current path search a joke. In order to really
profit from the dijkstra/A* algorithms, other data structures
need to be used for larger distances.

For shorter distances, a map based GridNode storage may be slow as
it requires lots of levels of indirection, which is bad for things like
cache locality, and an array based storage may be faster.

This commit does:

1. remove the vector<vector<vector<T>>> based GridNodes storage that
	is allocated and initialized in advance and for the whole
	possible area.

2. Add a vector<T> based GridNodes storage that is allocated and
	initialized in advance for the whole possible area.

3. Add a map<P,T> based GridNodes storage whose elements are
	allocated and initialized, when the path search code
	demands it.

4. Add code to decide between approach 2 and 3,
	based on the length of the path.

5. Remove the unused "surfaces" member of the PathGridnode class.
	Setting this isn't as easy anymore for the
	map based GridNodes storage.
2016-05-01 15:32:03 +02:00
est31
f0de237de7 Pathfinder: use core::aabbox3d instead of own type
There is no need to reinvent the wheel here, we have
great classes from irrlicht.
2016-05-01 15:32:03 +02:00
est31
ac8bb457aa Pathfinder: Fix style
* Fix naming style for methods and classes:
	Use camelCase for methods and PascalCase for classes as
	code style demands it. And use sneak_case for methods that
	are not member of a class.
* Replace "* " with " *" for Pointers
* Same for references
* Put function body opening braces on new line
* Other misc minor non functional style improvements
2016-05-01 15:32:02 +02:00
est31
46e5ef4e9a Move pathfinder classes to cpp file
There is no need to put them into the header, they are solely used
inside the pathfinder.

Another advantage of this change is that only the pathfinder.cpp has
to be compiled if PATHFINDER_DEBUG gets defined or undefined, not
all files including the .h.

This commit moves the pathfinder classes to the cpp file without
modifications.
Also, the PATHFINDER_DEBUG macro gets moved to the cpp file and
the PATHFINDER_CALC_TIME macro gets moved to a plce where it
actually does work.
2016-05-01 15:32:02 +02:00
Craig Robbins
c1a0ebb725 Fix use of uninitialised variable in class Event 2016-05-01 17:32:00 +10:00
gregorycu
c95734654c Use MoveFileEx to rename files on Windows (not rename) 2016-05-01 17:28:16 +10:00
Rui
29877dfb45 Mainmenu: Remove space under mod list 2016-05-01 14:16:37 +10:00
Rui
0d40bb83a7 Translated using Weblate (Japanese)
Currently translated at 51.7% (448 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:24 +02:00
Emon Omen
6667ffc0ab Translated using Weblate (Italian)
Currently translated at 100.0% (865 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:24 +02:00
Claybiokiller
3de452e0d2 Translated using Weblate (Chinese (China))
Currently translated at 75.4% (653 of 865 strings)
2016-05-01 01:13:23 +02:00
Joan Ciprià Moreno Teodoro
2a12ebd652 Translated using Weblate (Catalan)
Currently translated at 46.5% (403 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:23 +02:00
Thomas Wagner Nielsen
b2b8c49d04 Translated using Weblate (Danish)
Currently translated at 28.7% (249 of 865 strings)
2016-05-01 01:13:23 +02:00
Muhammad Rifqi Priyo Susanto
e9c3824d1b Translated using Weblate (Indonesian)
Currently translated at 57.4% (497 of 865 strings)

This is a merger of three commits.
2016-05-01 01:13:23 +02:00
Jan Harald
9fc4415f9d Translated using Weblate (Estonian)
Currently translated at 21.8% (189 of 865 strings)
2016-05-01 01:13:23 +02:00
Fernando Reis
cd9177964a Translated using Weblate (Portuguese)
Currently translated at 67.5% (584 of 865 strings)

This is a merger of 5 commits.
2016-05-01 01:13:23 +02:00
Wuzzy
01517e210c Translated using Weblate (German)
Currently translated at 100.0% (865 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:22 +02:00
YFdyh000
1e103d0850 Translated using Weblate (Chinese (China))
Currently translated at 75.3% (652 of 865 strings)

This is a merger of 3 commits.
2016-05-01 01:13:22 +02:00
Stas Kies
fe64f93170 Translated using Weblate (Russian)
Currently translated at 59.3% (513 of 865 strings)

This is a merger of 5 commits.
2016-05-01 01:13:22 +02:00
Pavel Sokolov
2b1ad6a4dc Translated using Weblate (Russian)
Currently translated at 58.9% (510 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:22 +02:00
Anton Tsyganenko
7a923f5b0b Translated using Weblate (Russian)
Currently translated at 58.9% (510 of 865 strings)
2016-05-01 01:13:22 +02:00
Alex “XShell” Schekoldin
ac38f4ec99 Translated using Weblate (Russian)
Currently translated at 58.9% (510 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:21 +02:00
Stas Kies
aec0979b27 Translated using Weblate (Russian)
Currently translated at 58.9% (510 of 865 strings)
2016-05-01 01:13:21 +02:00
Ever Medina
a760359391 Translated using Weblate (Spanish)
Currently translated at 46.2% (400 of 865 strings)
2016-05-01 01:13:21 +02:00
Ian Giestas Pauli
93fc5556ca Translated using Weblate (Portuguese (Brazil))
Currently translated at 71.3% (617 of 865 strings)

This is a merger of two commits.
2016-05-01 01:13:21 +02:00
Jean-Patrick G
6e6bd7e774 Translated using Weblate (French)
Currently translated at 94.1% (814 of 865 strings)

This is a merger of two commits.
2016-04-30 23:52:11 +02:00
ShadowNinja
a53357d291 Fix POSIX C++11 build
I broke this in 46fd114e9a.
2016-04-30 13:41:04 -04:00
Craig Robbins
ae75073944 Fix prepreprocessor error in thread.h (related to C++11 threads) 2016-04-30 12:29:52 +10:00
paramat
8b1f8e99cf Mapgen: Make 3D noise tunnels' width settable
Correct parameter names mg_valleys to mgvalleys
Remove biome NoiseParams from MapgenValleysParams
Improve format of parameter code
2016-04-28 23:36:19 -04:00
ShadowNinja
46fd114e9a Fix race on thread creation
This often broke the threading tests on OSX.
2016-04-28 13:21:46 -04:00
ShadowNinja
e41673820f Upgrade Android build to Gradle build system
The old Ant build system has been deprecated for a while and new development is focused on Gradle.
I also removed a hardcoded string that lint caught and moved the patch files to a subdirectory.
I left the JNI files in the root directory.
2016-04-28 12:28:42 -04:00
tenplus1
7baddd1735 Avoid teleporting player if /teleport coords are out-of-range 2016-04-29 00:00:35 +10:00
kilbith
dc35091aff Android menu: Unified serverlist 2016-04-28 07:19:31 +01:00
rubenwardy
17bfe2fe5b Builtin: Add basic_privs setting 2016-04-28 07:19:07 +01:00
SmallJoker
30083d1e00 Mainmenu: Standardize the menu button order and sizes 2016-04-28 07:16:58 +01:00
obneq
6278da296b Handle particle spawners in env and delete expired ids
Rebased by Zeno (2016-04-2016)
2016-04-28 02:09:36 +10:00
Maksim Gamarnik
26a9a85129 Android: Update dependencies, GMP was required as a dependency 2016-04-26 10:17:04 +01:00
Xunto
ae7fb9b5be Inventory: Make ItemStack with different metadata not stackable 2016-04-26 10:16:20 +01:00
SmallJoker
31c1fca6fd tile.cpp: Automatically upscale lower resolution texture 2016-04-25 06:39:32 +01:00
gregorycu
46da0e8b3b Make GUIEngine use pause_fps_max not fps_max 2016-04-24 17:40:16 +10:00
Ekdohibs
48939df9a5 Escape more strings: formspecs, item descriptions, infotexts...
Also, change the escape character to the more standard \x1b
Thus, it can be used in the future for translation or colored text,
for example.
2016-04-24 03:54:11 +10:00
Xunto
21079cc8eb Fix bug that was leading to oversized tooltips containing multiline text when it have multiple lines 2016-04-23 21:12:53 +10:00
Ekdohibs
2177f3090e Fix mainmenu code downloading the public serverlist twice.
Also, fix a nil error that can happen sometimes in
menu_handle_key_up_down
2016-04-22 23:39:54 +10:00
est31
7a6502a7a5 CONTRIBUTING: disallow signed git commits
They break bzr-git, and bzr-git breaks the Minetest PPAs.
2016-04-22 00:46:07 +02:00
Ekdohibs
c350cfb50b Make logging use a fixed-length buffer to avoid race conditions.
Previously, race conditions occurred inside logging, that caused
segfaults because a thread was trying to use an old pointer that
was freed when the string was reallocated. Using a fixed-length buffer
avoids this, at the cost of cutting too long messages over seveal lines.
2016-04-21 10:15:17 +01:00
paramat
5c32c5e945 Biomes: Make dust fallback 'ignore' to fix y = 63 lighting
The shadow bug at y = 63 was caused by dark air being placed as dust,
when the biome dust was unspecified it was falling back to 'air'
In dustTopNodes only dust == 'ignore' will disable dust placement
2016-04-21 10:15:12 +01:00
paramat
9b437088df Textures: Replace menu background fallback dirt_bg.png with empty sky texture 2016-04-21 10:15:05 +01:00
Auke Kok
a60aa8e226 Fix timer initialization.
This fixes the problem that the first timer tick is an
overrun and causes all timers to expire immediately.

replaces #4003
2016-04-21 10:14:59 +01:00
kilbith
8cf26bb0bb Mainmenu: Code cleaning 2016-04-20 21:31:40 +10:00
kilbith
65db88d24e Mainmenu: Unify favorite servers with main serverlist 2016-04-20 21:31:40 +10:00
paramat
fed5dd3b5d Mgv7: Combine mountain terrain generation with base terrain generation
Previous mountain terrain generation was by necessity placing
stone in air, this was removing air from any overgenerated
structures such as tunnels, dungeons and large caves
Moving it into the base terrain generation loop ensures that
only 'ignore' is replaced

generateRidgeTerrain: only return if node_max.Y < water_level - 16
Previously, if water level was set a few nodes above a mapchunk
border the river channel was only partially excavated
2016-04-20 06:51:20 +01:00
Auke Kok
855a305057 falling: walk 4 additional diagonally down directions.
This seems very little cost and matches the old behavior more
closely. This will cause some more falling nodes to get added
to falling clusters. With the efficiency of the algorithm, this
really doesn't do much damage.
2016-04-20 06:51:11 +01:00
est31
bc4dc80c01 Mainmenu: Still support favorites if send_pre_v25_init is disabled
@SmallJoker has noted a bug that servers from the (local) main menu
favorites list can't be opened.

This commit fixes the bug by disabling any main menu based protocol
checks for servers from the favorite list.

Also, it fixes a second bug that happens when a server from the
public serverlist doesn't send its supported protocol versions,
most likely because its running a minetest older than commit [1].
Then we have shown an error msg that the server has enforced
one specific protocol version. This was most likely not the case.

Of course, we can't do anything better than do an assumption on
the protocol versions if they are not known. That assumption
should however be closest to the most often occuring case as
possible.

Also, some little cleanups.

[1]: 5a0ed780f5 "Server: announce MIN/MAX protocol version supported to serverlist. Client: check serverlist"
2016-04-15 14:40:31 +02:00
SmallJoker
d82c5da0dc mainmenu: Tidy up logic in is_server_protocol_compat() (#3997)
Apply de morgan to simplify the logic.
2016-04-15 14:37:09 +02:00
TriBlade9
6530ed4dd8 Add option to disable entity selectionboxes. (#3992)
Setting only loaded once, default value is to enable them.
2016-04-14 11:20:11 +02:00
rubenwardy
b5f6d41eed Fix inventory hud scaling 2016-04-12 23:10:28 +10:00
paramat
4fdf66bbf4 Mgv7, mgflat, mgfractal: Tunnel generation code optimisation 2016-04-12 06:58:04 +01:00
paramat
e661d8b32c Mgv5: Optimise tunnels, add biome material in entrances
Place biome top node on tunnel entrance floor
Instead of doing nothing at node_max.Y + 1 use 1-down
overgeneration for tunnel generation and noisemaps
2016-04-12 04:16:15 +01:00
paramat
fe349d401d Mgvalleys: Don't let cavegen place biome nodes everywhere
Fix use of 'air_above' bool so that biome
nodes are only placed in tunnel floors
Minor code improvements
'Continue' when massive cave air is placed
2016-04-12 04:16:08 +01:00
PilzAdam
73d4538d94 Fix hotbar placement on displays with low screen density 2016-04-11 23:04:42 +02:00
Auke Kok
3b43e7e87c Minimap: revert change from RGBA to Indexed
@kilbith spotted correctly that I had accidentally removed the
"soft" edging on the minimap overlay by converting it from RGBA
to Indexed, which killed the transparent pixels on the edging.
2016-04-11 00:24:01 -04:00
Auke Kok
d7908ee494 Convert nodeupdate to non-recursive
This took me a while to figure out. We no longer visit all 9 block
around and with the touched node, but instead visit adjacent plus
self. We then walk -non- recursively through all neigbors and if
they cause a nodeupdate, we just keep walking until it ends. On
the way back we prune the tail.

I've tested this with 8000+ sand nodes. Video result is here:

  https://youtu.be/liKKgLefhFQ

Took ~ 10 seconds to process and return to normal.
2016-04-11 00:01:28 -04:00
kwolekr
2eeb62057a Hud: Cache hud_scaling, fix minor style issues 2016-04-10 23:54:34 -04:00
rubenwardy
eae33951ad Hud: Fix offset being ignored by inventory bar 2016-04-10 23:54:23 -04:00
est31
9a04dfd0f5 Update CSRP-GMP to commit deaa11a7c29a73008
Backports 10 commits, with 8 commits
actually affecting source code:

695822e45d...deaa11a7c2
2016-04-10 14:56:54 +02:00
raymoo
c566a8f2de Document hpchange callback ordering thing (#3981)
Document hpchange callback ordering thing

Callbacks registered by register_on_player_hpchange are ordered so that non-modifiers are called after modifiers are called. Credit to @TeTpaAka who mentioned this previously-undocumented feature in #3799.

See also commit

aa13baa30a "Add minetest.register_on_player_hpchange"
2016-04-10 13:52:18 +02:00
Auke Kok
af799d4bd2 Minimap: "North" indicator arrow for circle minimap
Related: #3730

This adds a simple, and small "North" indicator to the circular
minimap. The indicator is in a classical triangle-like arrow with a
little bit of shading to accentuate the shape and give it a little
bit depth. The indicator is stuck exactly at the edge as far outwards
as possible, and is not too intrusive but still easy enough to spot.
2016-04-08 21:48:58 +02:00
Rui914
92d4a73843 Mainmenu: Refactor tab UI code
- Use local variables for tabs in place of globals
 - Merge together if statements where possible
 - Replace manual table searching code with indexof where possible
2016-04-08 02:25:04 -04:00
David Knapp
27ee8d8943 Fix ncurses lookup on Arch Linux
Arch Linux doesn't put it's ncursesw includes inside an ncursesw
directory.  This script ends up setting USE_CURSES as true, but
doesn't pick up any of the headers.

https://bugs.archlinux.org/task/13994
2016-04-08 02:11:45 -04:00
paramat
465bb6f5d1 Mapgen: Optimise cave noises and tunnel excavation
Instead of doing nothing at node_max.Y + 1 use 1-down
overgeneration for tunnel generation and noisemaps
Move some old unused code in mgv7 to end of file
2016-04-08 03:14:36 +01:00
kwolekr
c3993f6604 Re-add and disable blit_with_interpolate_overlay 2016-04-07 04:01:43 -04:00
Samuel Sieb
ecdd5921a1 Clearer explanation of [colorize with alpha 2016-04-07 03:55:17 -04:00
Nathanaël Courant
15e1dcc020 Fix #3955 (player dying on login).
It was caused by player not moving because fall was prevented, but their
velocity still increasing, causing fatal fall damage when world was
finally loaded. This commit fixes it by setting player velocity to zero
when the world around them is not loaded.
2016-04-06 01:11:36 +02:00
Samuel Sieb
24b32ab09d Fix compiler warnings from "Add an option to colorize to respect the destination alpha"
Fix warnings added by commit 01ae43c480

Fixes #3952
2016-04-06 00:36:24 +02:00
Samuel Sieb
01ae43c480 Add an option to colorize to respect the destination alpha
Also, rework the colorizing code to be more efficient.
2016-04-03 04:24:28 -04:00
kinokoio
66af984e0e Dungeongen: Update disabled torch placement code 2016-04-03 04:12:07 -04:00
est31
b8ac7b80e6 Fix nametag hiding
Commit

c3b279750e "Move object nametags to camera"

has added a regression to still display
a shadow if their alpha got set to 0.
2016-04-02 02:02:19 +02:00
Rui914
c8ff11b417 Mainmenu: Move description.txt textbox down
Additionally, fix misc. code style issues
2016-03-31 04:15:41 -04:00
gregorycu
f9a90383e1 Remove expensive copy of ContentFeatures 2016-03-30 11:38:42 -04:00
Loic Blot
e082c7766a ParticleManager::handleParticleEvent: use switch
Use a proper switch with breaks.
2016-03-30 17:20:24 +02:00
est31
0aac1b7403 mg_schematic: fix leak in lua API, and small cleanup
* Fix leak like behaviour if you load multiple schematics in a loop.

* Cleanup check in for, fixing theoretical out of bounds read if
	Schematic::deserializeFromMts reduced the number of elements
	in m_nodenames. A != check may need an overflow of the counter
	before it hits, if origsize is larger than m_nodenames.size().

* Fix function name passed to errorstream: it was wrong. Also use
	__FUNCTION__ instead of manually using the method name at other
	places in the function.

* Don't shadow the name member in the loop.
2016-03-30 16:26:05 +02:00
kwolekr
0115da1d63 Mapgen: Don't spread light of nodes outside the desired area
This fixes #3935, a regression from 0338c2e.
An 'optimization' was performed where an index for the VoxelManip being
operated on was mistakenly used for bounds checking within the incorrect
VoxelArea, namely, the area wherein light should be spread.
2016-03-30 00:19:03 -04:00
paramat
597c1d73da Nodes shader: Decrease amplitude of waving leaves and plants
Fix initialisation of variable 'disp'
Fix a few minor code style issues
Add independent X motion combining 2 prime frequencies
2016-03-30 01:53:22 +01:00
paramat
630f453da4 Mgv7: Decrease cliff steepness 2016-03-30 01:53:14 +01:00
tenplus1
e72b8f25ee stop falling.lua error
2016-03-27 15:47:01: ERROR[Main]: ServerError: Lua: Runtime error from mod '*builtin*' in callback luaentity_Step(): Node name is not set or is not a string!
2016-03-27 15:47:01: ERROR[Main]: stack traceback:
2016-03-27 15:47:01: ERROR[Main]: 	[C]: in function 'add_node'
2016-03-27 15:47:01: ERROR[Main]: 	/usr/share/minetest/builtin/game/falling.lua:96: in function </usr/share/minetest/builtin/game/falling.lua:43>
2016-03-29 23:56:23 +02:00
kwolekr
0338c2eb91 Mapgen: Spread both night and day light banks in spreadLight 2016-03-29 16:32:30 -04:00
sfan5
8f43aaf6ae Fix small formatting issue in SRP debug output
Writing an u8 to verbosestream writes a char, not it's numeric value.
2016-03-29 19:59:14 +02:00
est31
b9068af27d Revert "Translated using Weblate (German)"
This reverts commit 25da0594eb.
2016-03-27 00:22:22 +01:00
Craig Davison
cedb2ffe14 Add CONTRIBUTING.md 2016-03-25 18:13:31 +02:00
est31
205e38f5b8 Replace CRLF with LF in shader files 2016-03-25 15:57:18 +01:00
Rui
c3f6cdcd54 Falling: Set acceleration on step again
Commit

65c09a96f4 "Set acceleration only once in falling node"

has made the acceleration being set only once.
But this has introduced a regression.

Fix #3884.
2016-03-25 15:19:39 +01:00
Jean-Patrick Guerrero
0fde86dd93 Update menu header image 2016-03-25 15:18:07 +01:00
Fernando Reis
5cacb815e1 Translated using Weblate (Portuguese)
Currently translated at 34.5% (299 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:49 +01:00
red-001
b534b94eb9 Translated using Weblate (Polish)
Currently translated at 33.7% (292 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:49 +01:00
Jean-Patrick G
b22d6bf8cf Translated using Weblate (French)
Currently translated at 93.0% (805 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:49 +01:00
Ian giestas pauli
93997f3c29 Translated using Weblate (Portuguese (Brazil))
Currently translated at 70.6% (611 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:48 +01:00
Jean-Baptiste
e79c2c7791 Translated using Weblate (French)
Currently translated at 92.4% (800 of 865 strings)

This is a merger of 3 commits.
2016-03-25 13:22:48 +01:00
akiyama akira
975020127b Translated using Weblate (Chinese (China))
Currently translated at 34.4% (298 of 865 strings)

This is a merger of 6 commits.
2016-03-25 13:22:48 +01:00
Thibault Noel
d9da543c5f Translated using Weblate (French)
Currently translated at 89.1% (771 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:48 +01:00
Joan Ciprià Moreno Teodoro
0e0906fdda Translated using Weblate (Catalan)
Currently translated at 36.6% (317 of 865 strings)

This is a merger of 2 commits.
2016-03-25 13:22:35 +01:00
Rui
fe042a02f1 Translated using Weblate (Japanese)
Currently translated at 51.2% (443 of 865 strings)

This is a merger of 2 commits.
2016-03-25 11:09:56 +01:00
Lucas Montenegro
fea6e37e0a Translated using Weblate (Spanish)
Currently translated at 46.1% (399 of 865 strings)

This is a merger of 3 commits.
2016-03-25 11:09:32 +01:00
Lordmusic Player
67d3775941 Translated using Weblate (Romanian)
Currently translated at 23.2% (201 of 865 strings)

This is a merger of 2 commits.
2016-03-25 11:04:48 +01:00
Elia Zammuto
478e0a0043 Translated using Weblate (Italian)
Currently translated at 47.9% (415 of 865 strings)
2016-03-25 11:04:48 +01:00
Muhammad Rifqi Priyo Susanto
57b5fe3c0a Translated using Weblate (Indonesian)
Currently translated at 47.9% (415 of 865 strings)
2016-03-25 11:04:48 +01:00
Jeff Huang
5f09574326 Translated using Weblate (Chinese (Taiwan))
Currently translated at 100.0% (865 of 865 strings)

This is a merger of 2 commits.
2016-03-25 11:04:48 +01:00
Kisbenedek Márton
485344ea80 Translated using Weblate (Hungarian)
Currently translated at 74.9% (648 of 865 strings)

This is a merger of 3 commits.
2016-03-25 11:04:28 +01:00
Jakub Vaněk
228abc52bd Translated using Weblate (Czech)
Currently translated at 54.1% (468 of 865 strings)
2016-03-25 10:54:33 +01:00
ShadowNinja
3a18c237bd Translated using Weblate (Spanish)
Currently translated at 45.3% (392 of 865 strings)
2016-03-25 10:54:33 +01:00
Wuzzy
25da0594eb Translated using Weblate (German)
Currently translated at 100.0% (865 of 865 strings)

This is a merger of 3 commits.
2016-03-25 10:54:14 +01:00
Rui
21c479688b Credits: Make that easy to add/remove 2016-03-24 16:56:23 +01:00
Auke Kok
2f640888d8 Make options local here.
Undoubtably this may cause problems later if unchecked.

```
2016-03-22 21:57:52: WARNING[Server]: Assignment to undeclared global "options" inside a function at .../sofar/git/minetest/bin/../builtin/game/chatcommands.lua:862.
```
2016-03-24 16:52:26 +01:00
Auke Kok
80cec4702d Fix connected nodes' selection boxes.
This allows the player to more easily target and punch connected
nodeboxes, especially if they have a fixed nodebox that is very
small, like technic cabling, or xpanes. Tried it on fences and
my xpane conversion, and happy with the result.
2016-03-21 17:42:20 +00:00
paramat
493a298c0c Mgv7/flat/fractal: Stop tunnel-floor biome nodes being placed everywhere
A bool for 'in or under tunnel' was missing
1-node-deep stone ledges were being
replaced with biome surface material
2016-03-21 17:42:13 +00:00
ShadowNinja
93887043d9 Clean up Strfnd
Changes:
  * Fix indentation.
  * Pass strings by const reference.
  * Merge Strfnd and WStrfnd into one class instead of copying them.
  * Remove trailing spaces.
  * Fix variable names.
  * Move to util.
  * Other miscellaneous style fixes.
2016-03-19 21:27:57 -04:00
ShadowNinja
eb7db21d50 Tweak travis script
Exit if cd fails and don't insert '\' in string.
2016-03-19 21:27:57 -04:00
paramat
2ce02c99b4 Builtin/game/falling: Re-add comma removed by recent commit 2016-03-19 18:46:08 +00:00
Rui914
65c09a96f4 Set acceleration only once in falling node 2016-03-19 17:56:46 +00:00
paramat
f1aea6b4ff Mgv7: Limit pseudorandom caves to surface mapchunk or below
To avoid bright caves at mapchunk borders when generating mapchunks upwards
2016-03-19 17:56:35 +00:00
Auke Kok
c5c727d627 Allow NodeTimer, ABM and block mgmt interval changes.
ABM's are hardcoded to run every 1.0s, NodeTimers are hard coded to
run at every 1.0s. Block mgmt is running every 2.0sec.

However, these timers can be better tuned for both higher and lower
values by server owners. Some server owners want to, and have the
resources to send more packets per second to clients, and so they
may wish to send smaller updates sooner. Right now all ABM's are
coalesced into 1.0 second intervals, resulting in large send queues
to all clients. By reducing the amount of possible timers, one can
get a far better response rate and lower the perception of lag.

On the other side of the camp, some servers may want to increase
these values, which again isn't easily doable.

The global settings abm_interval and nodetimer_interval are set to
current values by default. I've tested with 0.2/0.5 type values
and noticed a greatly improved response and better scattering of
nodetimers, as well as enjoying not faceplanting into doors with
pressure plates anymore.
2016-03-19 17:56:26 +00:00
est31
d915ca1124 lua_api.txt: improve vector documentation
Before it rendered very badly in HTML.
Also point out what vector.round does.
2016-03-19 15:34:51 +01:00
est31
3132bcb373 Set EXAMPLE_CONF_DIR to DOCDIR if DOCDIR gets customized
Before, customisation of DOCDIR did not lead to
changes of the EXAMPLE_CONF_DIR default value.
This was inconsistent with expected behaviour
if you didn't know of the existence of the
EXAMPLE_CONF_DIR variable. The confusion is
very strong, as (for not in place builds) both
DOCDIR and EXAMPLE_CONF_DIR share the same
default value, it is unexpected that setting
CUSTOM_DOCDIR changes the location of all
documentation files but one.

The best meaning of EXAMPLE_CONF_DIR is to
further allow customization of the mt.conf.example
storage place, but otherwise keep defaulting to
whatever DOCDIR is set to, at least for not in
place builds. This patch implements that
behaviour.

Fixes #3863.
2016-03-16 23:06:33 +01:00
Ekdohibs
095f623fa7 Remove chat escape sequences from chat messages, for future colored chat. 2016-03-15 17:33:15 +01:00
est31
af30183124 Add option to not send pre v25 init packet
The legacy init packet (pre v25) sends information about the client's
password that a server could use to log in to other servers if the
username and password are the same. All the other benefits of SRP of
protocol v25 are missed if the legacy init packet is still sent during
connection creation.

This patch adds an option to not send the v25 init packet. Not sending
the v25 packet means breaking compat with pre v25 servers, but as the
option is not enabled by default, no servers are affected unless the
user explicitly flips the switch. More than 90% of the servers on the
serverlist support post v25 protocols.

The patch also fixes a bug with greying out of non compliant servers
being done wrongly, the min and max params were mixed.
2016-03-15 17:20:09 +01:00
est31
2607b97b4f Fix two reconnect bugs
Fix two bugs related to the reconnect feature
introduced by commit

3b50b2766a "Optional reconnect functionality"

1. Set the password to the stored one

Before, we have done the reconnect attempt with a
cleared password, so using the feature would only
work if you had an empty password.
Thanks to @orwell96 for reporting the bug.

2. Reset the reconnect_requested flag after its use

the_game only writes to the reconect_requested flag
if it sets it to true. It never sets it to false.
If the flag is not reset after its use, all "reset"s
to the main menu will look like the server had
requested a reconnect.
2016-03-15 08:55:45 +01:00
est31
e0151d1054 Much better API for auth.{cpp, h}
* No function overloading
* Adhere coding style and with method names following
  lowercase_underscore_style
* Use std::string in external API, handling these is
  much more fun
2016-03-15 05:55:49 +01:00
paramat
bb2ee54d3b Mapgen: Fix light in tunnels at mapchunk borders
Don't excavate the overgenerated stone at node_max.Y + 1,
this creates a 'roof' over the tunnel, preventing light in
tunnels at mapchunk borders when generating mapchunks upwards.
2016-03-14 08:45:01 +00:00
HybridDog
c0b6986e38 Fix player teleportation bug whilst sneaking
Only set back position when sneaking if player wasn't teleported by adding and using a bool "got_teleported" to player
it fixes #2876
2016-03-14 08:44:28 +00:00
Auke Kok
5a40a7dad8 Connected nodes: fix 2 minor bugs
1. Copy-paste error: properly test for back-connection.

In the case of two different connected nodebox types, we want to
assure that if A connects to B, that B also connects to A. This test
was accidentally not implemented correctly.

2. Clear the connects_to_ids before deserializing.

With each new connected node, the deserialization code added more
and more targets to the map, since the map wasn't cleared in between
deserialization steps. This caused e.g. wall blocks to connect to
things in the fence connects_to map.
2016-03-14 05:05:04 +01:00
Jeija
089f9bbe81 Resend blocks when modified while sending to client 2016-03-12 23:59:44 +01:00
Diego Martinez
2c72f6da7b Add options for screenshot format and quality 2016-03-12 17:12:43 -05:00
Auke Kok
37b4f0d34c Allow nodes to specify which sides to connect to.
NDT_CONNECTED attempts to connect to any side of nodes that it can
connect to, which is troublesome for FACEDIR type nodes that generally
may only have one usable face, and can be rotated.

We introduce a node parameter `connect_sides` that is valid for
any node type. If specified, it lists faces of the node (in "top",
"bottom", "front", "left", "back", "right", form, as array) that
connecting nodeboxes can connect to. "front" corresponds to the south
facing side of a node with facedir = 0.

If the node is rotatable using *simple* FACEDIR, then the attached
face is properly rotated before checking. This allows e.g. a chest
to be attached to only from the rear side.
2016-03-12 12:08:17 -05:00
Auke Kok
e737b1c271 Nodebox: Allow nodeboxes to "connect"
We introduce a new nodebox type "connected", and allow these nodes to
have optional nodeboxes that connect it to other connecting nodeboxes.

This is all done at scenedraw time in the client. The client will
inspect the surrounding nodes and if they are to be connected to,
it will draw the appropriate connecting nodeboxes to make those
connections.

In the node_box definition, we have to specify separate nodeboxes for
each valid connection. This allows us to make nodes that connect only
horizontally (the common case) by providing optional nodeboxes for +x,
-x, +z, -z directions. Or this allows us to make wires that can connect
up and down, by providing nodeboxes that connect it up and down (+y,
-y) as well.

The optional nodeboxes can be arrays. They are named "connect_top,
"connect_bottom", "connect_front", "connect_left", "connect_back" and
"connect_right". Here, "front" means the south facing side of the node
that has facedir = 0.

Additionally, a "fixed" nodebox list present will always be drawn,
so one can make a central post, for instance. This "fixed" nodebox
can be omitted, or it can be an array of nodeboxes.

Collision boxes are also updated in exactly the same fashion, which
allows you to walk over the upper extremities of the individual
node boxes, or stand really close to them. You can also walk up
node noxes that are small in height, all as expected, and unlike the
NDT_FENCELIKE nodes.

I've posted a screenshot demonstrating the flexibility at
    http://i.imgur.com/zaJq8jo.png
In the screenshot, all connecting nodes are of this new subtype.

Transparent textures render incorrectly, Which I don't think is
related to this text, as other nodeboxes also have issues with this.

A protocol bump is performed in order to be able to send older clients
a nodeblock that is usable for them. In order to avoid abuse of users
we send older clients a "full-size" node, so that it's impossible for
them to try and walk through a fence or wall that's created in this
fashion. This was tested with a pre-bump client connected against a
server running the new protocol.

These nodes connect to other nodes, and you can select which ones
those are by specifying node names (or group names) in the
connects_to string array:
      connects_to = { "group:fence", "default:wood" }
By default, nodes do not connect to anything, allowing you to create
nodes that always have to be paired in order to connect. lua_api.txt
is updated to reflect the extension to the node_box API.

Example lua code needed to generate these nodes can be found here:
    https://gist.github.com/sofar/b381c8c192c8e53e6062
2016-03-12 12:08:17 -05:00
ShadowNinja
8c951cae5b Fix chat console not opening after formspec opened over it
The MainMenuManager set the console invisible when a
formspec opened over it, but didn't properly close it,
and the chat console never set itself visible again.
2016-03-12 12:01:40 -05:00
paramat
20312fda18 Documentation: Auto-update conf.example and settings_translation_file.cpp 2016-03-12 04:03:43 +00:00
orwell96
0d2df732e5 Fix ask_reconnect_on_crash option being ignored
Since commit

3b50b2766a "Optional reconnect functionality"

there is a config option named ask_reconnect_on_crash.
It asks the client to reconnect to the server if the server crashed.
It has been implemeted and works, but due to a function parameter not
being passed it never showed effect. This patch adds the parameter
and fixes the bug.

Also fixes the `reconnect` option of minetest.request_shutdown being ignored.
2016-03-11 23:43:37 +01:00
paramat
6f325070dd Documentation: Clarify global and mapgen-specific mapgen flags 2016-03-11 21:09:59 +00:00
Auke Kok
f627ef39e0 Introduce "protection_bypass" privilege.
This privilege allows map protection bypassing for server operators
and world moderators.

Initially I had thought that bypassing protection mods would have been
something that could entirely be done inside mods and minetest_game,
but the concept of protection is defined in core, in the code of
core.is_protected().

I don't feel that it would be logical to introduce a protection
concept in core, but not some way around that for server operators
to maintain map parts that need fixing, de-griefing or cleanup.

Others had noticed the same problems, and proposed a patch to
minetest_game. That patch is fine by itself, but it fails to add
protection bypass functionality for digging normal nodes and placing
nodes.

So, instead, we indroduce the new priv "protection_bypass" in core,
and modify 'on_place_node' and 'node_dig' to allow bypassing node
protections if the player holds this priv.

This priv was tested with protector redo by tenplus1.

A followup patch to Minetest Game will include allowing special checks
for doors, trapdoors, chests in Minetest Game.

Protection mods will likely want to mimic the changes in their relevant
code sections.
2016-03-11 21:09:53 +00:00
Auke Kok
dc8bf4e928 Avoid try/catch for settings.
We can just test for the presence of these settings nicely here,
no need to use a try / catch construct.
2016-03-09 01:45:23 +01:00
Auke Kok
4e59fcf5c1 Add consistent monotonic day counter - get_day_count()
I've written several experimental bits of code that revolve around the
need for a consistent calendar, but implementing one is extremely hard
in mods due to time changes and mods overriding core.get_timeofday(),
which will conflict.

The second part of the problem is that doing this from a mod requires
constant maintenance of a settings file.

An implementation in core is trivial, however, and solves all of
these problems at virtually no cost: No extra branches in server
steps, and a single branch when minetest.set_time_of_day(), which is
entirely reasonable.

We store the day_count value in env_meta.txt.

The use case is obvious: This change allows mods to create an actual
virtual calendar, or properly account for seasonal changes, etc..

We add a "/days" chatcommand that displays the current day count. No
permissions are needed. It can only retrieve the day count, not
modify it.
2016-03-09 01:45:23 +01:00
ShadowNinja
3ce6642a26 Add AreaStore custom ID API 2016-03-07 16:33:20 -05:00
ShadowNinja
821551a266 Implement AreaStore serialization 2016-03-07 16:33:20 -05:00
ShadowNinja
c4b7afed7e Fix SpatialAreaStore not freeing removed areas 2016-03-07 16:33:20 -05:00
ShadowNinja
8ae1e1f4d2 Add basic AreaStore method documentation 2016-03-07 16:33:20 -05:00
ShadowNinja
6e9d71342a Sort AreaStore header 2016-03-07 16:33:20 -05:00
ShadowNinja
5641da43d6 Clean up VectorAreaStore 2016-03-07 16:33:20 -05:00
ShadowNinja
2e74e9ee20 Move AreaStore container selection logic into getOptimalImplementation 2016-03-07 16:33:20 -05:00
ShadowNinja
0079887b64 Move AreaStore to util 2016-03-07 16:33:20 -05:00
ShadowNinja
f021db7243 Make AreaStore cache setting private 2016-03-07 16:33:20 -05:00
ShadowNinja
095db16990 Simplify AreaStore ID management 2016-03-07 16:33:20 -05:00
est31
725cb4eb07 s_env.{cpp, h} cleanups
* Replace string by-val passing with const reference
* Fix code style
* Remove redundant `int table` definition and indentation level
2016-03-07 19:54:26 +01:00
est31
d494733839 Add minetest.register_lbm() to run code on block load only 2016-03-07 19:54:26 +01:00
ShadowNinja
88fbe7ca1e Use LuaErrors in security check macros
Throwing a LuaError calls destructors as it propagates up the stack,
wheres lua_error just executes a longjmp.
2016-03-07 13:37:15 -05:00
Jean-Patrick Guerrero
04e311a36d Settings Tab: Regroup dropdown datas in tables 2016-03-06 23:42:21 +00:00
Rui914
24e8b0ac1e Faster insertion into table 2016-03-06 23:42:04 +00:00
Muhammad Rifqi Priyo Susanto
75db0543f3 Add forgotten valleys mapgen in mapgen name
Missing `valleys` in `settingtypes.txt` and `minetest.conf.example`.
2016-03-05 16:06:27 +01:00
Jean-Patrick Guerrero
335ad705e6 Update settings tab + some misc. clean-up 2016-03-05 10:41:51 +01:00
Maksim Gamarnik
096a01ffef Update Android dependencies, -O3 optimization, remove old ARMv5 config
* Update OpenSSL (thanks @sapier, i use his patch!), Curl and SQLite3.
* Remove old arm config. Almost all phones that use ARMv5 have 1 core and 256-512 RAM, it's about 2-5 FPS.
* Do -O3 optimization for libs and remove -fexpensive-optimizations for Minetest (-O3 includes this! Read gcc docs).
* OpenSSL fix - thanks @sapier, again.
2016-03-05 05:52:45 +01:00
Duane Robertson
af714c7ade Mgvalleys: Correct spawn problems
Increase maximum spawn altitude to reduce spawn issues.
2016-03-04 02:39:04 +00:00
paramat
48a718e715 Decoration API: Allow force_placement of simple decorations 2016-03-04 02:38:55 +00:00
Jeija
1100a5d614 Require minetest.request_http_api to be called from the mod's main scope
Fixes #3764
2016-03-03 22:42:00 +01:00
ShadowNinja
7bcbc0105b Fix main menu being unable to set secure settings 2016-03-03 00:57:19 -05:00
ShadowNinja
abd4a79acb Remove debug.getupvalue from the Lua sandbox whitelist
This function could be used to steal insecure environments from trusted mods.
2016-03-03 00:09:05 -05:00
ShadowNinja
8b006a154b Add support for non-ASCII characters to chat console
This still only supports 256 characters, but that's because
Irrlicht's clipboard handlers don't support wide characters.
2016-03-02 23:23:31 -05:00
ShadowNinja
9dd38cf968 Add Android chat form 2016-03-02 23:23:31 -05:00
ShadowNinja
430929e75a Add text selection and copying to console 2016-03-02 23:23:31 -05:00
ShadowNinja
3edb7575a1 Unlock cursor when opening console 2016-03-02 23:23:31 -05:00
Esteban I. Ruiz Moreno
effa24737d Use the console instead of a dedicated window when pressing keymap_chat/cmd
keymap_console opens a full window for chat history browsing.
2016-03-02 23:23:31 -05:00
Aleksey Vorona
da97969c9b Fix a mistake in the world format documentation
Fixed a minor mistake that made it appear as if the inventory
is serialized multiple times - once per each variable. In fact
it is serialized once per each node.
2016-03-03 01:25:35 +01:00
nerzhul
ee50341297 Revert "Fix jumping at node edge"
This reverts commit 60dc01dc25.

This fixes issue #3773
2016-03-01 11:15:14 +01:00
ShadowNinja
b114fd87a9 Resize object_marker_red.png to 16x16
Having a non-power-of-two image broke the Android app.
2016-02-28 14:28:27 -05:00
paramat
6359ff9a87 Nodedef: Restore smooth lighting to water 2016-02-27 21:27:42 +00:00
Duane Robertson
6969dd4224 Mgvalleys: Add Dry Riverbeds
Lower water table where base humidity is low.
Alter heat and humidity to compensate for river humidity and altitude
chill.
Correct misuse of surface_max_y in generateTerrain.
Remove sand trails in the water at river mouths.
Remove river water below water_level.
Correct heat/humidity calculations where noises are less than zero.
Correct heightmap errors as much as possible.
Make humidity calculations more readable.
2016-02-27 21:27:32 +00:00
est31
158bd76e87 Update po files, minetest.conf.example and settings_translation_file.cpp 2016-02-27 05:50:42 +01:00
est31
e81753b69c Don't generate trailing spaces in minetest.conf.example
If the default value of a setting was empty,
it previously generated a trailing space.
2016-02-27 05:49:22 +01:00
Dmitry Smirnov
e9cd01045a Translated using Weblate (Russian)
Currently translated at 61.3% (483 of 787 strings)

(Merger of five commits)
2016-02-27 03:57:48 +01:00
Vasily Pavlov
abcccffc21 Translated using Weblate (Russian)
Currently translated at 49.5% (390 of 787 strings)

(Merger of three commits)
2016-02-27 03:57:20 +01:00
Miguel Isaac
1528c9af60 Translated using Weblate (Spanish)
Currently translated at 47.0% (370 of 787 strings)

(Merger of two commits from the same author)
2016-02-27 03:42:35 +01:00
Joan Ciprià Moreno
40fa2e3b27 Translated using Weblate (Catalan)
Currently translated at 37.3% (294 of 787 strings)
2016-02-27 03:42:35 +01:00
Laura Arjona Reina
f63a7a8d8b Translated using Weblate (Spanish)
Currently translated at 46.6% (367 of 787 strings)
2016-02-27 03:42:35 +01:00
Bruno Borges
8dcc808b50 Translated using Weblate (Portuguese (Brazil))
Currently translated at 65.5% (516 of 787 strings)
2016-02-27 03:42:35 +01:00
Amadeo
8019562b0d Translated using Weblate (Polish)
Currently translated at 33.9% (267 of 787 strings)
2016-02-27 03:42:35 +01:00
Fixer
f9dd819ff9 Translated using Weblate (Ukrainian)
Currently translated at 30.4% (240 of 787 strings)
2016-02-27 03:42:34 +01:00
Diego Martínez
acf40f15cc Translated using Weblate (Spanish)
Currently translated at 45.9% (362 of 787 strings)
2016-02-27 03:42:34 +01:00
Paolo DGZ
7a8687b83c Translated using Weblate (Italian)
Currently translated at 52.7% (415 of 787 strings)
2016-02-27 03:42:34 +01:00
Muhammad Rifqi Priyo Susanto
e845ef0963 Translated using Weblate (Indonesian)
Currently translated at 42.4% (334 of 787 strings)
2016-02-27 03:42:34 +01:00
Kisbenedek Márton
af4cd48e41 Translated using Weblate (Hungarian)
Currently translated at 69.1% (544 of 787 strings)

(Merger of three commits)
2016-02-27 03:42:11 +01:00
Jeija
033a510cf3 Fix minetest.request_insecure_environment() always returning nil
Fixes #3765
2016-02-26 06:36:48 +01:00
RealBadAngel
f9d727764f Mapblock mesh: Allow to use VBO 2016-02-26 00:51:01 +00:00
RealBadAngel
8eb7ddb0a2 Remove new_style_water 2016-02-26 00:50:46 +00:00
rubenwardy
4efb7eb734 Cache some settings 2016-02-26 00:50:39 +00:00
Nathaniel Olsen
f77b35b35b Add dependencies for Fedora systems 2016-02-25 21:46:54 +01:00
RealBadAngel
e8a3d22cbe Shaders: fix fog not affecting opaque liquids 2016-02-23 23:51:41 +00:00
paramat
8591713405 Sheet Ore: Eliminate crash caused by PcgRandom range max < min
In the calculation of y_start,
when 'column height max' was large it caused
nmin.Y + max_height > nmax.Y - max_height
Now, in this situation y_start is set to the
midpoint between nmin.Y and nmax.Y

Limit y0 and y1 to between nmin.Y and nmax.Y,
otherwise index calculation, which has no checks for limits,
places them at unwanted locations in the voxelmanip
2016-02-23 23:51:29 +00:00
nerzhul
147425483a GOTBLOCKS & DELETEBLOCKS: test packet size only once 2016-02-23 14:24:21 +01:00
est31
f3f4af3fb9 Fix android build
Android had a linker error since commit:

31e0667a4a "Add Lua interface to HTTPFetchRequest"

Fixes #3766. Thanks to @MoNTE48 for reporting the bug.
2016-02-23 01:48:52 +01:00
orwell96
e17fbb31d6 Reset block send timer when invoking setBlock(s)NotSent()
As stated in this forum thread [1], I noticed that there is a
2 second interval in which inventory changes are shown on the
client. @yyt16384 found the source of these 2 seconds:
m_nothing_to_send_pause_timer is set to 2.0 every time there
are no changes to make, but this timer is not reset when
SetBlockNotSent or setBlocksNotSent are invoked. So in worst
case, the changed block will be sent over 2 seconds too late.

With this change, changed inventories are updated almost
immediately, but it causes additional connection load.
2016-02-22 19:59:56 +01:00
est31
a26970cdd4 Android: hardcode leveldb revision
Newest leveldb commit breaks build.
With no fix in sight, there is no other way
than to fall back to the last working leveldb
revision, and hardcode it.

Workaround for upstream bug

https://github.com/google/leveldb/issues/340
2016-02-22 17:46:16 +01:00
RealBadAngel
9961185550 Fix getting pointed node
Fixes #3719
Closes #3753
2016-02-22 15:54:32 +01:00
Jeija
31e0667a4a Add Lua interface to HTTPFetchRequest
This allows mods to perform both asynchronous and synchronous HTTP
requests. Mods are only granted access to HTTP APIs if either mod
security is disabled or if they are whitelisted in any of the
the secure.http_mods and secure.trusted_mods settings.

Adds httpfetch_caller_alloc_secure to generate random, non-predictable
caller IDs so that lua mods cannot spy on each others HTTP queries.
2016-02-22 15:39:41 +01:00
Jeija
a3892f5a66 Fix HTTPFetchRequest performing a GET request if post_data is supplied
Instead, perform a POST request with post_data.
2016-02-22 15:39:19 +01:00
RealBadAngel
b2aabdfe07 Camera: remove auto tune FPS, single view range setting 2016-02-21 18:18:13 +01:00
RealBadAngel
2f4cf0bcca Remove preload_item_visuals code
Closes #3748
2016-02-21 17:46:50 +01:00
RealBadAngel
354635f9fb Dont make fastface if tile is not seamless
Fixes #3378
Closes #3751
2016-02-21 17:30:16 +01:00
BlockMen
ecc8b70182 Restore simple settings tab and add advanced settings as dialog 2016-02-21 08:54:33 +00:00
Loic Blot
c6d7d2097c Little collision.cpp cleanups 2016-02-20 09:44:22 +01:00
gregorycu
60dc01dc25 Fix jumping at node edge 2016-02-19 20:05:58 -05:00
ShadowNinja
a44393e43a Don't print locale directory error message when GetText is disabled
Also, downgrade the error to a warning.
2016-02-19 19:56:34 -05:00
Jeija
1b9aef43c9 Ignore spaces in secure.trusted_mods setting 2016-02-19 18:50:42 -05:00
RealBadAngel
5f4ed94d90 Minimap: show player markers 2016-02-19 21:31:22 +01:00
RealBadAngel
5dbaa68967 Camera: Don't count camera offset twice for Nametagged CAOs 2016-02-19 14:52:19 +00:00
ShadowNinja
4827ee1258 Require request_insecure_environment to be called from the mod's main scope
Previously you could steal a secure environment from a trusted mod by wrapping
request_insecure_environment with some code like this:

local rie_cp = minetest.request_insecure_environment
local stolen_ie
function minetest.request_insecure_environment()
	local ie = rie_cp()
	stolen_ie = stolen_ie or ie
	return ie
end
2016-02-19 14:52:10 +00:00
paramat
997be666e3 Clientmap: Define p_nodes_min/max as v3s32 instead of v3s16
'cam_pos_nodes -/+ box_nodes_d' can exceed the range of v3s16
when a player is near the world edge using a large view range
This previously caused world to disappear
Create new function getBlocksInViewRange() called from
updateDrawList() and renderMap()
Correct code style throughout updateDrawList() and renderMap()
2016-02-19 14:51:41 +00:00
RealBadAngel
1ec1a605d6 HOTFIX: fix too agressive block culling 2016-02-18 18:07:28 +01:00
RealBadAngel
c3b279750e Move object nametags to camera 2016-02-18 16:43:29 +01:00
est31
4c654557ec Clientiface: remove "value is dummy" from docs
Commit

6a1670dbc3 "Migrate to STL containers/algorithms."

has replaced core::map<T, bool> with std::set<T>, but didn't update
the accompanying comment saying "value is dummy". This happened at
two places.
2016-02-16 23:58:30 +01:00
RealBadAngel
08517244f7 Mapblock mesh: Eliminate meshgen lags 2016-02-16 08:23:32 +00:00
RealBadAngel
7ea40e45b1 Use vertices with tangents only when its needed. 2016-02-15 06:05:39 +00:00
Loic Blot
3a74b84007 Player::accelerateHorizontal/Vertical should be member of LocalPlayer 2016-02-14 17:52:10 +01:00
RealBadAngel
cfc8e44759 Use proper variable types for uniform sampler layers 2016-02-14 10:01:30 +01:00
RealBadAngel
c17c40a0f5 Formspec: fix broken irrlicht 1.7 build
Fixes #3701.
2016-02-13 22:19:01 +01:00
RealBadAngel
5ca48a35a6 Formspec: recreate item_image_button pressed state for its image and label 2016-02-13 02:35:52 +01:00
est31
bd43933828 Remove unused 'm_selection_active' field
Thanks @ExcaliburZero for noticing. Fixes #3698.
2016-02-13 01:46:12 +01:00
nerzhul
fefa148d69 v2d & aabbox3d<f32> & sky cleanups
* Sky: rename Box => m_box and inline getBoundingBox
* Uniformize aabbox3d<f32> to aabb3f
2016-02-11 16:55:15 +01:00
Loic Blot
24b312cc08 Drop luaentity_common.h which is not included anywhere 2016-02-11 14:34:34 +01:00
RealBadAngel
9357294cfc Use single box for halo mesh 2016-02-11 13:11:25 +01:00
RealBadAngel
c1044b9a4a Set proper GLSL pixel shader version 2016-02-11 09:47:25 +01:00
RealBadAngel
f253ff9f1a Dump shader programs on compile errors 2016-02-11 07:13:07 +01:00
paramat
7e5eea9ad5 Documentation: Remove now unused 'vertical spawn range' 2016-02-11 04:23:26 +00:00
Diego Martinez
13dd7959db Initialize facedir and wallmounted tables only once.
This makes the functions a bit faster since they don't
have to recreate the tables every invocation, and makes
the code more readable.

Also, document `wallmounted_to_dir`.

The function was implemented but not documented in `lua_api.txt`.
2016-02-11 04:23:17 +00:00
Kahrl
0f03547b03 Log /clearobjects mode 2016-02-11 04:22:58 +00:00
Kahrl
b1428ab4bb Add '/clearobjects quick' 2016-02-11 04:22:58 +00:00
Auke Kok
47464c9344 Fix backface culling when connecting to new servers.
Introduce a new contentfeatures version (8). When clients
connect using v27 protocol version, they can assume that
the tiledef.backface_culling is trustable, but if clients
connect to servers providing contentfeatures version 7,
then the v27 clients know that backface culling settings
provided by the server in tiledefs are bogus for mesh,
plantlike, firelike or liquid drawtype nodes.

thanks to hmmmm, est31, nerzhul.

Tested on new client - new server, new client - old server
old client - new server.
2016-02-10 00:10:51 +01:00
Loic Blot
ba8fa9e889 Fix inverted conditions in shader.cpp 2016-02-09 23:50:37 +01:00
Loic Blot
4e3fe460e3 shader.cpp: don't test twice if shader programs are present
Also use string::empty method, it is better than comparing with empty strings.
2016-02-09 23:19:19 +01:00
RealBadAngel
baa7c8f8ad FormSpec: Add StaticTextSpec and superimpose over item image buttons 2016-02-09 03:03:55 -05:00
RealBadAngel
eb3840a3f8 Filmic HDR tone mapping 2016-02-09 02:55:59 -05:00
Kahrl
180893e79d Remove ClientMap::m_camera_mutex
All places that lock this mutex are only called by the main thread:
ClientMap::updateCamera(), ClientMap::updateDrawList(), ClientMap::renderMap(), ClientMap::renderPostFx().
2016-02-09 07:16:00 +00:00
paramat
4adbd69a37 FindSpawnPos: Let mapgens decide what spawn altitude is suitable
To avoid spawn search failing in new specialised mapgens
Increase spawn search range to 4000 nodes
Add getSpawnLevelAtPoint() functions to EmergeManager, class Mapgen
and all mapgens
Remove getGroundLevelAtPoint() functions from all mapgens except mgv6
(possibly to be re-added later in the correct form to return actual
ground level)
Make mgvalleys flag names consistent with other mapgens
Remove now unused 'vertical spawn range' setting
2016-02-09 07:14:45 +00:00
RealBadAngel
38e7122600 Use inventory_image in the first place for inventory item mesh 2016-02-08 23:13:19 +01:00
RealBadAngel
b44da4916a Cleanup selection mesh code, add shaders for halo and selection boxes 2016-02-08 03:57:42 -05:00
Diego Martinez
430195381d builtin: Fix print crashing on nil "holes".
The engine implementation of `print` packs the varargs into a
table and passes the table directly to `table.concat`. If you
pass any value not supported by `table.concat` (particularly
`nil`), the server crashes. This is unexpected behavior, as
`print` is supposed to be able to work with anything.

This patch changes the implementation so it first converts
all arguments using `tostring`, which fixes the issue and
makes the custom `print` function compatible with the stock
Lua behavior.
2016-02-08 01:55:02 +01:00
est31
16c7008771 small drawItemStack cleanup
-> Replace the three bool params with an enum
-> Add struct for the static content, leads to less repetition
-> cache enable_animations setting
2016-02-08 00:35:24 +01:00
RealBadAngel
6cd2b3b445 Use meshes to display inventory items 2016-02-07 19:51:55 +01:00
RealBadAngel
bf884e37a0 Use tangent space meshes only when shaders are enabled 2016-02-07 04:12:49 +00:00
Splizard
0e75eb4324 Add admin command which says who the administator is for the server. 2016-02-04 13:23:02 +01:00
Pavel Puchkin
c4e0d95c87 Implement OSX Travis builds 2016-02-04 13:22:32 +01:00
Duane Robertson
99c905c563 Mgvalleys: fix riverbeds below sea level
Stop riverbeds from forming plateaus under sea. Minor corrections to
random lava/water placement.
2016-02-02 06:37:22 +00:00
paramat
0a8af88147 Mgv5/v7/flat/fractal: Move tunnel noise calculation into generateCaves
Tunnel 3D noises are only calculated when solid terrain is present
in mapchunk, avoiding large amounts of unnecessary calculations
Change 'int' to 's16' in calculateNoise
Change 'i' to 'vi' for voxelmanip indexes for consistency
Keep 'u32 index3d' local to a smaller part of tunnel code
Mgv7: Don't call CaveV7 if no solid terrain in mapchunk
Give 'open' bool a more descriptive name
2016-02-02 06:37:01 +00:00
Duane Robertson
80c7612e76 Mgvalleys: use standard caves
Replace simple caves with V5 caves, adding unpredictable water and lava
settings and massive caves based on subterrain. Remove fast terrain mode
and accompanying settings. Remove superfluous temperature/humidity
settings. Remove lava/water height setting. Fix errors in humidity
handling and remove humidity_break_point setting. Move cave noises to
generateCaves. Fix minor formatting/naming issues and use
MYMAX/MYMIN/myround.
2016-01-31 22:31:25 +00:00
Pavel Puchkin
83583aa2d5 Fix OSX building issue caused by ad884f2 2016-01-29 10:54:50 -05:00
est31
4e93ba06a7 Don't pass non-const references to collision methods
Non const references cause a lot of confusion with behaviour of code,
and are disallowed by minetest style guide.
2016-01-29 15:53:54 +01:00
Auke Kok
ad884f23d4 New timer design.
I could honestly not make much sense of the timer implementation
that was here. Instead I've implemented the type of timer algorithm
that I've used before, and tested it instead.

The concept is extremely simple: all timers are put in an ordered
list. We check every server tick if any of the timers have
elapsed, and execute the function associated with this timer.

We know that many timers by themselves cause new timers to be
added to this list, so we iterate *backwards* over the timer
list. This means that new timers being added while timers are
being executed, can never be executed in the same function pass,
as they are always appended to the table *after* the end of
the table, which we will never reach in the current pass over
all the table elements.

We switch time keeping to minetest.get_us_time(). dtime is
likely unreliable and we have our own high-res timer that we
can fix if it is indeed broken. This removes the need to do
any sort of time keeping.
2016-01-29 01:04:51 -05:00
Auke Kok
4ac1e9bccb Clocksource: use a better clock if available.
clock_gettime() is a far better clock than gettimeofday().

Even better than clock_gettime() is that you can select either
CLOCK_MONOTONIC, or even CLOCK_MONOTONIC_RAW. These clocks offer
high precision time. And the _RAW variant will never roll back
due to NTP drift or daylight savings, or otherwise.

I've adjusted this code to select the right clock method auto-
matically based on what's available in the OS. This means that
if you're running a very old linux version, MacOS or other,
you will automatically get the best clocksource available.

I've tested all Linux clocksources by selectively compiling and
running a 10k+ timer test suite. In all cases I confirmed that
the 3 POSIX Linux clocksources worked properly, and were
selected properly.

I've modified the OS X compile path to use the high-res clock
source for all time functions, but I can't confirm it works or
that it compiles.

As for WIN32, I confirmed that the used clocksource is indeed
a Monotonic clocksource, so good news: that code section appears
to be exactly what it should be.
2016-01-29 00:58:08 -05:00
est31
860d70bd0e Don't print whole json data buffer to errorstream on error
`errorstream` must not be overly verbose as clientside it is directly printed
onto the ingame chat window. These days, the serverlist can contain > 200k bytes,
so better print it to warningstream if the data buffer is too long.
2016-01-28 23:53:58 +01:00
Paolo DGZ
e52ebda8b2 Translated using Weblate (Italian)
Currently translated at 52.0% (410 of 787 strings)
2016-01-25 05:53:09 +01:00
Kisbenedek Márton
0097e0308d Translated using Weblate (Hungarian)
Currently translated at 32.4% (255 of 787 strings)
2016-01-25 05:53:09 +01:00
Tobyplowy
c07a242d8b Translated using Weblate (Dutch)
Currently translated at 95.5% (752 of 787 strings)
2016-01-25 05:53:09 +01:00
Ian giestas pauli
d0d7122c00 Translated using Weblate (Portuguese (Brazil))
Currently translated at 41.6% (328 of 787 strings)
2016-01-25 05:53:09 +01:00
Ian giestas pauli
e24de58b4d Translated using Weblate (Portuguese (Brazil))
Currently translated at 26.6% (210 of 787 strings)
2016-01-25 05:53:09 +01:00
Ian giestas pauli
e3e75a43db Translated using Weblate (Portuguese)
Currently translated at 23.6% (186 of 787 strings)
2016-01-25 05:53:09 +01:00
Rui
42dc568f16 Translated using Weblate (Japanese)
Currently translated at 43.4% (342 of 787 strings)
2016-01-25 05:53:09 +01:00
Rui
d486ca064c Translated using Weblate (Japanese)
Currently translated at 42.0% (331 of 787 strings)
2016-01-25 05:53:09 +01:00
Peter Mikkelsen
1bd48e4298 Translated using Weblate (Danish)
Currently translated at 30.1% (237 of 787 strings)
2016-01-25 05:53:09 +01:00
Jun Zhang
73838a982f Translated using Weblate (Chinese (China))
Currently translated at 34.8% (274 of 787 strings)
2016-01-25 05:53:09 +01:00
Diego Martinez
a594963a7d Fix world config menu ignoring name in mod.conf. 2016-01-23 21:14:14 -05:00
Auke Kok
735e3b7059 Backface culling: Ignore setting in tiledef from old servers.
Outdated servers are always sending tiledefs with culling
enabled no matter what, as the value was previously entirely
ignored.

To compensate, we must (1) detect that we're running against
an old server with a new client, and (2) disable culling for
mesh, plantlike, firelike and liquid draw types no matter what
the server is telling us.

In order to achieve this, we need to bump the protocol version
since we cannot rely on the tiledef version, and test for it
being older. I've bumped the protocol version, although that
should have likely happened in the actual change that introduced
the new backface_culling PR #3578. Fortunately that's only 2
commits back at this point.

We also explicitly test for the drawtype to assure we are not
changing the culling value for other nodes, where it should
remain enabled.

This was tested against various pub servers, including 0.4.13 and
0.4.12.

Fixes #3598
2016-01-23 16:33:24 +01:00
est31
ef779b0ab6 Fix compilation warning if compiling for android with c++11 2016-01-23 06:26:58 +01:00
RealBadAngel
52eea79928 Fix texture tear issue 2016-01-23 06:01:57 +01:00
est31
e50c784e2c Fix C++11 compilability
Previous commits broke it... :(
2016-01-23 05:45:29 +01:00
paramat
0459eca8eb Liquid flow: Prevent water spreading on ignore 2016-01-20 00:37:00 +00:00
Auke Kok
882a89d65a Allow per-tiles culling.
Backface culling is enabled by default for all tiles, as this
is how the lua parser initializes each tiledef. We revert to
always using the value from the tiledef since it is always
read and serialized.

Mods that wish to enable culling for e.g. mesh nodes, now can
specify the following to enable backface culling:

    tiles = {{ name = "tex.png", backface_culling = true }},

Note the double '{' and use of 'name' key here! In the same
fashion, backface_culling can be disabled for any node now.

I've tested this against the new door models and this properly
allows me to disable culling per node. I've also tested this
against my crops mod which uses mesh nodes where culling needs
to be disabled, and tested also with plantlike drawtype nodes
where we want this to continue to be disabled.

No default setting has changed. The defaults are just migrated
from nodedef.cpp to c_content.cpp.
2016-01-20 00:36:48 +00:00
kwolekr
9f988e3b96 EmergeManager: Do not queue duplicate block requests 2016-01-19 04:18:06 -05:00
Kahrl
b67eab3b00 Fix Settings::remove() always returning true 2016-01-19 10:15:01 +01:00
RealBadAngel
87291ea44a Show infotext with description for item entities 2016-01-18 17:21:41 +00:00
Duane Robertson
eb6e2c11b1 Correct overflowing rivers in Valleys mapgen. 2016-01-18 17:21:13 +00:00
RealBadAngel
13e7589fec Fix wield item glitch 2016-01-18 17:20:53 +00:00
Pinky Snow
22bc66d3a7 corrected minetest.pos_to_string()
corrected this bit reflect the function properly.
2016-01-16 13:06:41 +00:00
Rogier
487ab593d0 Fix error message in settings tab overlapping 'save' button
The save button is now fully functional again when an error message
is shown.

After an invalid value is entered in the settings tab dialog, the GUI
label for the error message that is shown was partly overlapping the
'save' button, so that the top half of the button could not be clicked
on.
2016-01-16 13:05:46 +00:00
Duane Robertson
752d820206 Prevent spawning in rivers with valleys mapgen. Remove unecessary whitespace. 2016-01-16 13:05:03 +00:00
sfan5
a58c0f458d Make ItemStack:set_count(0) clear the item stack
fixes minetest/minetest_game#786
2016-01-15 13:44:45 +01:00
Kahrl
da686160c3 Make all mesh manipulators in mesh.cpp work with any vertex type
cloneMesh() has to use a switch in order to create a different
mesh buffer type depending on vertex type. (Credit: the new cloneMesh
was written by RealBadAngel.)

To avoid repetitive code, all other methods use getVertexPitchFromType()
to automatically adapt the indexing to the vertex type at runtime.
2016-01-15 04:18:32 +01:00
Duane Robertson
3c6b2ffb10 Add Valleys mapgen. 2016-01-14 05:04:29 +00:00
paramat
b4cbcaea26 Mgv7/flat/fractal: Place biome top node on tunnel entrance floor 2016-01-14 04:43:50 +00:00
paramat
8fc8cb819b Mapgen: Various fixes and improvements
Lua_api.txt: Document 'minetest.registered_biomes'
Minimal: Remove 'mapgen_air' alias
Cavegen: Add fallback node for 'mapgen_ice'
Dungeongen: Add fallback node for 'mapgen_river_water_source'
Mgv5: Remove unnecessary '#include util/directiontables.h'
Add missing 'this->'s in makeChunk()
Mgv6: Edit empty line formatting
Remove leading spaces in makeChunk()
Add missing spaces after 'for' and 'if'
Mgv7: Edit empty line formatting
2016-01-11 01:32:20 +00:00
paramat
3e0ea3c6ed Mgflat: Set blank default spflags. Unhide 2016-01-10 04:07:47 +00:00
Rogier
31ac53dfd0 Fix the checking of flags values in the settings tab
Changes:
- Accept setting an empty flags-type value in the settings tab
  if the variable specification permits it
- Don't accept substrings of flag values
  E.g. with values: 'one,two,three', 'hree', 'w', etc. used to
  be accepted. Not any more
- Don't accept flags with random pattern-matching special characters
  E.g. with values: 'one,two,three', 'on.', '(o)[n]e*' etc. used
  to be accepted. Not any more.
2016-01-10 01:03:06 +00:00
Rogier
58babf8b19 Improve parsing of setting types from settingtypes.txt for settings tab
- Accept numbers prefixed with '+'
- Accept multiple spaces instead of just a single one where spaces are expected
- Allow flags to have an empty default value
2016-01-10 01:03:06 +00:00
ASL97
106d4b7d05 Cache disable_anticheat and check it for "interacted_too_far" 2016-01-09 16:24:22 -05:00
ShadowNinja
711808343d Actually add Doxygen main page
I apparently forgot to add this file in my previous commit (bd40ee2b95).
2016-01-09 15:11:43 -05:00
Dalai Felinto
9943ae3f1a New 3D Mode: Pageflip
The pageflip mode requires a stereo quadbuffer, and a modern graphic
card. Patch tested with NVidia 3D Vision.

The mini-map is not drawn, but that's what is done for topbottom and
sidebyside modes as well.

Also most of the time the user would prefer the HUD to be off. That's
for the user to decide though, and toggle it manually.

Finally, the interocular distance (aka eye separation) is twice as much
as the "3d_paralax_strength" settings. I find this a strange design
decision. I didn't want to chance this though, since it's how the other
3d modes interpret this settings.
2016-01-09 16:52:29 +01:00
Pavel Puchkin
fe3f6be4d2 Simplify custom games packaging 2016-01-09 16:50:04 +01:00
sfan5
7510e0b551 Fix screenshot links in AppData file 2016-01-09 16:13:37 +01:00
Pinky Snow
2800ff0660 fixed spelling
Fixed spelling mistake!
2016-01-09 02:29:07 +00:00
gregorycu
9c77725653 Replace instance of readsome with read in decompressZlib Make decompressZlib more robust 2016-01-09 02:28:35 +00:00
Robert Zenz
386d190e09 Clarified what get_node does. 2016-01-09 01:07:03 +00:00
slemonide
95c1b66722 Update lua_api.txt
set_sky does work with on_joinplayer
2016-01-09 01:06:45 +00:00
est31
57a461930b Fix redis error reporting
Previously, we assumed that reply->str was NULL
terminated. However, this turned out to be not true,
as users reported crashes in strlen connected to
where reply->str was appended to an std::string.

Use the method recomended by the docs, to read the
length separately.
2016-01-08 15:37:11 +01:00
paramat
0bbbc6e13d Liquids: Flow into and destroy 'floodable' nodes
Add new node property 'floodable', default false
Define "air" as floodable = true in C++ and lua
2016-01-07 05:57:19 +00:00
ShadowNinja
bd40ee2b95 Improve Doxyfile
* Add main page.
* Organize into sections.
* Add threading sources.
* Include SpatialAreaStore, LevelDB/Redis, sound, FreeType, and cURL in output.
* Add logo.
* Fix project name hardcoding.
* Remove PAPER_TYPE (only used when GENERATE_LATEX is enabled).
* Have dot render graphs as SVG (smaller, and works even if dot's text drawing functionality is broken).
* Enable built-in STL support.
* Enable search bar.
* Switch from header-bar based navigation to treeview based navigation.
* Enable dynamic HTML (collapses graphs).
* Enable generation timestamp.
2016-01-04 11:32:03 -05:00
gregorycu
e7e9171f37 Fix for commit 87dcee6 It uses the wrong variable and only covers some use cases. This change covers all use cases. 2016-01-04 07:50:39 +01:00
gregorycu
09a6910dc7 Add MinSizeRel and RelWithDebInfo to MSVCBuildDir check 2016-01-03 15:38:20 +01:00
gregorycu
87dcee6ac2 Prevent technically unsafe access with empty vector 2016-01-03 15:37:49 +01:00
Robert Zenz
a7c50a3080 Made it more clear that "[combine" does accept a list of files. 2016-01-03 01:05:04 +01:00
Perttu Ahola
64c060e1f2 filesys: safeWriteToFile(): Remove the target file before rename only on Windows
Removing the target file on other platforms was enabled likely unintentionally
by commit 5f1f1151d3.

This may be the reason why there has been corruption of files on Linux on hard
shutdowns.

Previously I described the problem and this fix in issue #3084.
2016-01-01 18:21:18 +02:00
paramat
43c804a00b Minimal: Add mapgen alias for air 2015-12-30 23:56:14 +00:00
est31
a142e4f4b2 Fix client crashing when connecting to server
My commit

e2d54c9f92 "shutdown when requested from lua in singleplayer too"

broke minetest's feature to connect to servers. The client crashed
after the connection init was complete.

Thanks to @sofar for reporting the bug.

Fixes #3498.
2015-12-30 00:50:50 +01:00
ShadowNinja
9719aded54 Fix cache path with RUN_IN_PLACE
If an `XDG_CACHE_HOME` can't be found or `RUN_IN_PLACE` is enabled,
`path_cache` is left at its default of `$PATH_USER/cache`
(at a time when `PATH_USER` is `..`), rather than being reset to
`$PATH_USER/cache` after `PATH_USER` has been properly set.
2015-12-30 00:14:30 +01:00
Rogier
cb30facda0 Include custom error message in all SQLite3 exceptions.
And replace manual tests for error with SQLOK() where possible.
2015-12-30 00:09:02 +01:00
Rogier
c6bb6f99d1 Handle SQLITE_BUSY errors gracefully
This allows other applications (e.g. minetestmapper) to interrogate
the database while minetest is running, without causing an almost
certain minetest crash.
2015-12-30 00:08:56 +01:00
qiukeren
848b050a56 Add macos/freebsd missing endian.h include and add win endianness info 2015-12-29 23:03:30 +01:00
Sapier
1735c20549 Revert "Refactoring and code style fixes in preparation of adding mesh typed items"
This reverts commit f14e7bac54.

Reverted due to missinterpretation of agreement, obvious dislike and me not interested in doing fights for feature I don't actually need
2015-12-29 19:55:50 +01:00
Sapier
25d128da36 Revert "Add support for using arbitrary meshes as items"
This reverts commit 91bafceee6.

Reverted due to missinterpretation of agreement, obvious dislike and me not interested in doing fights for feature I don't actually need
2015-12-29 19:53:38 +01:00
Sapier
61cb4d52a6 Make collisionMoveSimple time overflow message written to log/show up at max once per step 2015-12-29 17:02:17 +01:00
Sapier
91bafceee6 Add support for using arbitrary meshes as items 2015-12-29 16:27:06 +01:00
Sapier
f14e7bac54 Refactoring and code style fixes in preparation of adding mesh typed items 2015-12-29 16:27:06 +01:00
est31
e2d54c9f92 shutdown when requested from lua in singleplayer too
Before, minetest.request_shutdown didn't shut down
singleplayer instances or server instances from the server tab.

This commit fixes this. Fixes #3489.
2015-12-29 00:40:22 +01:00
est31
8a46c5df1c Database backends: fix bug, and small speedup
-> Redis backend: break from switch to fix bug
-> Dummy and redis backends: reserve the count so that creating the list is faster
2015-12-29 00:39:42 +01:00
jeanpatrick.guerrero@gmail.com
382ab969d4 Alphabetical sorting of texture packs in menu (fixes #3487) 2015-12-26 21:53:12 +01:00
sfan5
e834e83ed8 Update URLs for buildbot & travis
The freehoster these files were hosted on is shutting down soon-ish, they're now hosted on my VPS.
2015-12-26 01:19:27 +01:00
Sapier
cdbb9ef228 Add missing documentation of automatic_face_movement_max_rotation_per_sec entity parameter 2015-12-25 14:11:39 +01:00
Sapier
9c9b02ca8a Android: shorten initial progress bar text way more simple 2015-12-23 21:01:35 +01:00
est31
98d16e0d9a Android: Tell make about sub-makes to speed up build
Before, sub-makes called by make were called without make knowing they
were sub-makes. This however led make's jobserver not do its tasks,
and the build process ended up with inefficient parralelisation. This
commit fixes this by applying the two ways the make manual tells
about: putting + to the start of the line (used when ndk-build is
invoked), and exchanging "make" with "$(MAKE)".

Before, make complained with messages like:

make[2]: warning: jobserver unavailable: using -j1.  Add `+' to parent make rule.

This complaint can now only been seen for openssl. openssl has issues
if make gets exchanged with $(MAKE): if exchanged, above error message
is multiplied for various subdirs of the openssl source tree.

On a 4 core box, "make -j 4" build time from "make clean_all" cleaned
source tree could be improved from 15:34 minutes to 10:45 minutes.
This means a speedup of 45%.
2015-12-23 06:17:42 +01:00
Gianluca Luparini
7eb3ed8b2a Translated using Weblate (Italian)
Currently translated at 43.8% (345 of 787 strings)
2015-12-22 17:45:38 +01:00
Rui
d1c0aa1ce7 Translated using Weblate (Japanese)
Currently translated at 40.0% (315 of 787 strings)
2015-12-21 02:43:07 +01:00
Rogier
e4215c1d17 Translated using Weblate (Dutch)
Currently translated at 95.1% (749 of 787 strings)

Squashed two translation commits to one
2015-12-21 02:42:47 +01:00
Anton Tsyganenko
b675d4984b Translated using Weblate (Russian)
Currently translated at 48.7% (384 of 787 strings)

Squashed two translation commits to one
2015-12-21 02:42:30 +01:00
Luca Argentieri
0f75141d69 Translated using Weblate (Italian)
Currently translated at 43.8% (345 of 787 strings)
2015-12-21 02:42:29 +01:00
Jakub Vaněk
8e36cfaece Translated using Weblate (Czech)
Currently translated at 56.6% (446 of 787 strings)

Squashed two translation commits to one
2015-12-21 02:42:01 +01:00
Jeff Huang
c97f7d35e3 Translated using Weblate (Chinese (Taiwan))
Currently translated at 59.7% (470 of 787 strings)
2015-12-21 02:42:01 +01:00
ChaosWormz
f5597c5f90 Translated using Weblate (Hebrew)
Currently translated at 3.1% (25 of 787 strings)
2015-12-21 02:42:01 +01:00
Rui
a8a4a66b83 Translated using Weblate (Japanese)
Currently translated at 39.8% (314 of 787 strings)
2015-12-21 02:42:01 +01:00
Jakub Vaněk
d3b0c6dcd5 Translated using Weblate (Czech)
Currently translated at 49.0% (386 of 787 strings)

Squashed two translation commits to one
2015-12-21 02:41:36 +01:00
senpi
0ae14a506f Translated using Weblate (Lojban)
Currently translated at 11.4% (90 of 787 strings)
2015-12-21 02:41:36 +01:00
Liudas Ališauskas
bf889997a8 Translated using Weblate (Lithuanian)
Currently translated at 30.7% (242 of 787 strings)

Squashed two translation commits to one
2015-12-21 02:40:57 +01:00
Kristjan Räts
1ba9ed7008 Translated using Weblate (Estonian)
Currently translated at 23.7% (187 of 787 strings)
2015-12-21 02:40:57 +01:00
Andrea Di Pietro Ulla
80edc7f78a Translated using Weblate (Italian)
Currently translated at 42.0% (331 of 787 strings)
2015-12-21 01:59:29 +01:00
Sapier
5de8e026a3 Fix lua object:get_properties() being broken 2015-12-21 00:27:13 +01:00
HybridDog
5755c9a439 Fix missing localization for obj 2015-12-20 16:25:33 +01:00
ShadowNinja
b4eb614d31 Android: Fix extra files being copied to the APK
dcb91cf0c0 hacked around the biggest issue
this caused, but wasted a lot of CPU time and disk space  It also still
included a lot of other unwanted files.  This removes all of `doc/` except
the license, and also removes the server list.
2015-12-20 12:48:55 +01:00
est31
f192a5bc43 Fix missing pop
Previous commit

70ea5d552e "Add support for limiting rotation of automatic face movement dir entitys"

by sapier has broken minetest's feature to open worlds. This was due to a
missing stack pop operation.

Thanks to @oleastre for reporting this bug and suggesting the fix.
2015-12-20 03:36:47 +01:00
Sapier
70ea5d552e Add support for limiting rotation of automatic face movement dir entitys 2015-12-19 17:00:36 +01:00
Sapier
06632205d8 Android: Implement Autohiding button bars to cleanup screen 2015-12-18 20:35:54 +01:00
Sapier
bde6194638 Android: Remove unused build target curl_binary 2015-12-17 23:00:51 +01:00
Sapier
dcb91cf0c0 Android: Don't put html docs to apk 2015-12-17 23:00:43 +01:00
Sapier
a3fd167dda Android: Remove non freetype fonts from apk 2015-12-17 23:00:31 +01:00
Sapier
6a7e1667f6 Android: Fix pressed buttons not beeing cleared on opening menu 2015-12-17 20:43:25 +01:00
BlockMen
9eee3c3f46 Add option to give every object a nametag
or change the nametag text of players
2015-12-15 23:32:19 +01:00
asl97
19f73e4efc Get movement setting instead of hard coded value 2015-12-15 23:20:15 +01:00
paramat
c26eb87aec Mgfractal: Add 3D and 4D fractals
3D Mandelbrot/Mandelbar
3D Christmas Tree
3D Mandelbulb
3D Cosine Mandelbulb
4D Mandelbulb
Plus corresponding julia set for each
Add credits for formulas
Rename parameter 'formula' to 'fractal'
Speed optimisations
2015-12-15 04:18:19 +00:00
BlockMen
aed10765f2 Fix events on Windows 2015-12-11 23:08:14 +01:00
est31
6133b2bc45 Fix android build
Fix android build since commit

696148e298 "Fix Event implementation"

by @ShadowNinja.

Fixes #3444. Thanks @kwolekr for pointing out the fix.
2015-12-11 11:24:26 +01:00
est31
8e3602f694 Fix some setting documentation
* Horizontal and vertical are used wrongly. Use height and width because
	horizontal/vertical describes different things. Thanks @kilbith for pointing out.
* Update minetest.conf.example and settings_translation_file.cpp
* Correct maximum/minimum copy paste mistake.
2015-12-10 19:08:03 +01:00
RealBadAngel
a64d78a37e Speed up and make more accurate relief mapping
using linear + binary search.
2015-12-10 18:24:11 +01:00
ShadowNinja
696148e298 Fix Event implementation
On non-windows platforms this just used a semaphore,
which meant that multiple calls to signal() would
result in wait() returning multiple times.
2015-12-07 13:53:56 -05:00
ShadowNinja
ea2964f5a1 Add seperate cache path
This is set to the XDG cache path where possible.
It's set to the app's cache path on Android.
2015-12-07 13:51:41 -05:00
est31
51e8c2b277 Fix threshold type
Fix the type of the threshold value for mapgen.
The commit

a78dd7f2b6 "Fix spelling of noise_threshold"

has changed it to be read as int, but it can have non-integral values too.

Thanks to @kwolekr for pointing this out.
2015-12-07 09:57:45 +01:00
est31
9a5a538e8d lua_api.txt: add blank lines before * lists
If rendered as markdown, lists need a blank line before them
so that they are recognized as such.
2015-12-07 07:27:51 +01:00
paramat
49073ba2c3 Mapgen: Add propagate_shadow bool to calcLighting
To terminate unwanted shadows from floatlands or realms above
Also add to LuaVoxelManip calc_lighting for use in mapgen mods
Remove the 2 argument calcLighting, mapgens now use the 5
argument form to specify the volumes for propagateSunlight and
spreadLight
In mgsinglenode replace calcLighting with setLighting and
clean-up use of tabs and spaces
2015-12-07 03:18:24 +00:00
Jun Zhang
a78dd7f2b6 Fix spelling of noise_threshold 2015-12-06 11:38:03 +01:00
Ferdinand Thiessen
70ece71ee4 Improve LuaJIT detection
On openSUSE luajit is not detected correctly.
This is because openSUSE is using a lua version suffix, like other Linux distributions do it also.
So the include directory is:
include/luajit-5_1-2.0
2015-12-05 23:31:09 +01:00
est31
5643b9b9ed Make travis work again
Now we do sudo apt-get update to download package sources.
This fixes travis build with the new GCE based infrastructure.

Closes #3427.
Closes #3426.
2015-12-05 18:01:01 +01:00
Ferdinand Thiessen
d8975eabf9 Fix build if BUILD_SHARED_LIBS defaults to "ON"
openSUSE sets that option to ON.

Fixes #3420.
2015-12-03 21:35:22 +01:00
est31
89168a7ec8 Document limitations of minetest.get_password_hash 2015-12-02 18:32:14 +01:00
paramat
e51ea66bd0 Mgv5/v7/flat/fractal: More large pseudorandom caves
Mgv7/flat/fractal: Reduce tunnel noise spreads to 96
2015-12-02 02:19:52 +00:00
Alex Ford
97908cc656 Add on_secondary_use when right clicking an item in the air 2015-12-02 02:18:44 +00:00
paramat
57b429574e Dungeongen: Fix rarely triggered segfault
A segfault exposed a missing 'vm->m_area.contains()'
check in makeCorridor that allowed the calculation
of vm index for a node outside the vm area. The huge
and invalid index number caused getContent to fail
2015-12-01 00:36:38 +00:00
Jay Arndt
6fead2818a Remove unused OpenALSoundManager::m_can_vorbis and EXT_vorbis check 2015-12-01 00:36:11 +00:00
paramat
5292ba7391 Lua_api.txt: Add documentation for biome definition 2015-11-29 21:55:58 +00:00
paramat
452c88308c Dungeongen: Also preserve river water nodes
For future river mapgens
Dungeons will not generate in river water, to
avoid dungeons filling and blocking river channels
2015-11-29 21:55:43 +00:00
Aaron Suen
900db31063 Re-enable texture pre-filters on wielditems, fixing #3178. 2015-11-24 03:22:31 +01:00
Robert Zenz
0cf15470fc Simplify regex used in check_modname_prefix and other improvements.
Simplified the regex used, added comments and changed the error message
to contain the correct mod name.
2015-11-24 01:49:59 +01:00
paramat
c24f3b0a65 Mgfractal: Move julia set selection into formula parameter
Improve default parameters
Update and improve documentation
Unhide mapgen, but is still unstable
2015-11-23 00:34:09 +00:00
est31
a4e3ed0136 Update HUD flags on server like on client
Fixes bug for which commit

6c37e89f08 "Fix old client showing duplicated health bar on new server"
by @sapier

laid the groundwork, where the server has
updated its copy of the hud flags without
respecting the mask.

Fixes #3395.
2015-11-22 16:49:20 +01:00
paramat
d7bbe81726 Mapgen: Add global 'decorations' flag
Flag is set by default in MapgenParams
The global 'trees' flag remains but is now
undocumented and unset by default in MapgenParams
Add mgv6_spflag 'trees' set by default in
defaultsettings.cpp to affect new worlds only
This is automatically backwards
compatible for existing worlds
2015-11-21 00:10:08 +00:00
Rui
4fd394b657 Log static_spawn error only once 2015-11-21 00:13:28 +01:00
est31
2f58e4d962 Android: hardcode irrlicht revision, update other dependencies
Recent irrlicht revisions break the build, hardcode the revision to a working one
until upstream publishes a working version. See issue #3366 for
a discussion about this.

Also update dependencies to current versions.
2015-11-16 17:33:01 +01:00
Amaz
e664abeb88 Add a status text for autorun 2015-11-15 13:42:31 +01:00
TeTpaAka
3f8eb5e0d0 Allow craft replacements to use groups 2015-11-15 13:41:38 +01:00
LelixSuperHD
c19b43d4f7 Translated using Weblate (Italian)
Currently translated at 42.0% (331 of 787 strings)
2015-11-15 13:40:14 +01:00
Joan Ciprià Moreno
fd1b837122 Translated using Weblate (Spanish)
Currently translated at 45.8% (361 of 787 strings)
2015-11-15 13:40:14 +01:00
Joan Ciprià Moreno
a8d2aa9c81 Translated using Weblate (Catalan)
Currently translated at 32.4% (255 of 787 strings)
2015-11-15 13:40:14 +01:00
ShadowNinja
132e06199d Translated using Weblate (Spanish)
Currently translated at 45.7% (360 of 787 strings)
2015-11-15 13:40:14 +01:00
Joan Ciprià Moreno
71fc4040a9 Translated using Weblate (Spanish)
Currently translated at 45.6% (359 of 787 strings)
2015-11-15 13:40:14 +01:00
Wuzzy
013e8e6adc Translated using Weblate (German)
Currently translated at 100.0% (787 of 787 strings)
2015-11-15 13:40:13 +01:00
Joan Ciprià Moreno
84b72b1120 Translated using Weblate (Catalan)
Currently translated at 26.3% (207 of 787 strings)

-
2015-11-15 13:40:13 +01:00
Joan Ciprià Moreno
ea1af74d31 Translated using Weblate (Catalan)
Currently translated at 11.8% (93 of 787 strings)
2015-11-15 13:40:13 +01:00
Joan Ciprià Moreno
b54f5ddfec Translated using Weblate (Spanish)
Currently translated at 31.6% (249 of 787 strings)
2015-11-15 13:40:13 +01:00
Maciej Kasatkin
c0e2bc30e5 Translated using Weblate (Polish)
Currently translated at 31.6% (249 of 787 strings)
2015-11-15 13:40:13 +01:00
nobb
1e8286467f Translated using Weblate (Japanese)
Currently translated at 41.4% (326 of 787 strings)
2015-11-15 13:40:13 +01:00
Wuzzy
fd84a388f8 Translated using Weblate (German)
Currently translated at 100.0% (787 of 787 strings)
2015-11-15 13:40:12 +01:00
Joan Ciprià Moreno
564ebf0499 Translated using Weblate (Catalan)
Currently translated at 9.2% (73 of 787 strings)
2015-11-15 13:40:12 +01:00
Wuzzy
28fd913058 Translated using Weblate (German)
Currently translated at 100.0% (787 of 787 strings)
2015-11-15 13:40:12 +01:00
Joan Ciprià Moreno
c990dbece4 Translated using Weblate (Catalan)
Currently translated at 100% (0 of 0 strings)

Created new translation.
2015-11-15 13:40:12 +01:00
Kristjan Räts
bba7fed23b Translated using Weblate (Estonian)
Currently translated at 21.4% (169 of 787 strings)
2015-11-15 13:40:12 +01:00
Rogier
ac99a2873d Translated using Weblate (Dutch)
Currently translated at 44.0% (347 of 787 strings)
2015-11-15 13:40:12 +01:00
Jarosław Maciejewski
ca322b487d Translated using Weblate (Polish)
Currently translated at 25.4% (200 of 787 strings)
2015-11-15 13:40:11 +01:00
Rui
59c16b3dab Translated using Weblate (Japanese)
Currently translated at 40.2% (317 of 787 strings)
2015-11-15 13:40:11 +01:00
Jean-Patrick G
5c2efab0e4 Translated using Weblate (French)
Currently translated at 100.0% (787 of 787 strings)
2015-11-15 13:40:11 +01:00
Jean-Patrick G
3bf332d9f5 Translated using Weblate (French)
Currently translated at 96.8% (762 of 787 strings)
2015-11-15 13:40:11 +01:00
paramat
cb7da90138 Mgfractal: Revert unnecessary duplication of parameters 2015-11-15 08:13:36 +00:00
est31
bdfb761dd0 sound_openal.cpp: remove unused header 2015-11-15 08:17:32 +01:00
est31
395ef21c86 Load sound from memory
* Remove trailing lines from src/sound_openal.cpp
* Don't do a horribly ugly copy of the file's path, allocating and deallocating a
	10 kb buffer in the process. This copy was needed for backwards compatibility
	with libvorbis 1.3.1 and earlier, as the removed comment explains.
	However, even Ubuntu precise has 1.3.2 already. Dropping support and sparing
	the ugly copy can therefore be considered safe.
* Actually load sounds from the memory, not caching them at the disk first,
	removing the old hack. This is the main motivation for the commit.
2015-11-14 18:17:32 +01:00
paramat
fc89f46700 Decoration API: Fix missing low density decorations
For a decoration count between 0 and 1 calculate a chance for 1
2015-11-14 07:54:03 +00:00
paramat
987d6a82f6 Mgfractal: Create a choice of 4 mandelbrot formulas 2015-11-14 04:25:47 +00:00
paramat
4434498367 Mgv6: Move global mapgen flag 'flat' into mgv6 spflags
Add mgv6 spflag 'flat'
Global flag is kept for backwards compatibility but is now undocumented
2015-11-13 04:25:08 +00:00
est31
657a16d90c Only allow players with shout to chat
Fix regression of commit

5e507c9829 "Add server side ncurses terminal"

which allowed all players, even those without a shout priv, to chat.

Fixes #3362.
2015-11-13 02:35:02 +01:00
BlockMen
36855522a5 Fix scrollbars 2015-11-12 17:38:15 +01:00
Robert Zenz
0876623aed Add the player name to dropped items
The player name is now added in the field "dropped_by" on the created
entity.
2015-11-12 00:47:11 +01:00
paramat
76c9abe4c8 Mapgen: Add flat mapgen in hidden form 2015-11-11 09:37:54 +00:00
kwolekr
f3ac2517ea Convert usages of PseudoRandom to PcgRandom for ore and deco placement
In addition to being a better random, this fixes #3228
2015-11-09 01:32:39 -05:00
paramat
c3e179f256 Cavegen: Make mgfractal use mgv5 cavegen
Remove CaveFractal
Add a lava depth constant to CaveV5 to make it universal
2015-11-09 05:29:42 +00:00
est31
63e7137e3b Put ChatEvent handler into own function
Comply with line limit.
2015-11-09 06:04:24 +01:00
kwolekr
889f893ff3 Abort compile when attempting to build client with Irrlicht 1.8.2 2015-11-08 23:13:47 -05:00
kwolekr
88a3977954 Add errno to socket creation failed exception 2015-11-08 18:16:02 -05:00
est31
4ae6e509ff Write new line character sequence at end of print()
Fix regression of commit

5e507c9829 "Add server side ncurses terminal"

where no line termination character was printed after a
lua print outside of terminal mode.

Fixes #3350.
2015-11-08 22:56:56 +01:00
kwolekr
6f95bb1ef3 Fix misc. MinGW and Valgrind warnings 2015-11-08 16:34:56 -05:00
est31
ad5ac39d8d Add LuaSecureRandom 2015-11-08 15:57:15 -05:00
est31
d506d56707 Run util/updatepo.sh 2015-11-08 21:26:42 +01:00
est31
78caafbd43 Update minetest.conf.example and src/settings_translation_file.cpp 2015-11-08 21:23:09 +01:00
est31
9a91f58e66 Settings tab: add v3f type
Add the v3f type, currently is just a nice placeholder for string.
Currently undocumented, on wish of @PilzAdam, to support future changes.
2015-11-08 21:19:21 +01:00
est31
d657dce61b Some german translation improvements 2015-11-08 20:42:38 +01:00
est31
aabdf80d1b Russian translation: remove weird char
Whatever that char is, it isn't a space.
2015-11-08 20:41:57 +01:00
Vasily Pavlov
cefa5b3710 Translated using Weblate (Russian)
Currently translated at 49.5% (373 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
aee0afa797 Translated using Weblate (Chinese (Taiwan))
Currently translated at 58.0% (437 of 753 strings)
2015-11-08 18:40:23 +01:00
Pavel Sokolov
2d493a215d Translated using Weblate (Russian)
Currently translated at 47.6% (359 of 753 strings)
2015-11-08 18:40:23 +01:00
Vasily Pavlov
87769c7747 Translated using Weblate (Russian)
Currently translated at 47.4% (357 of 753 strings)
2015-11-08 18:40:23 +01:00
Pavel Sokolov
bfb30362a2 Translated using Weblate (Russian)
Currently translated at 47.2% (356 of 753 strings)
2015-11-08 18:40:23 +01:00
Vasily Pavlov
7f3e4a4bf6 Translated using Weblate (Russian)
Currently translated at 47.0% (354 of 753 strings)
2015-11-08 18:40:23 +01:00
Jun Zhang
0dd4da19ed Translated using Weblate (Chinese (China))
Currently translated at 30.0% (226 of 753 strings)
2015-11-08 18:40:23 +01:00
Elia Argentieri
5d8e24d7be Translated using Weblate (Italian)
Currently translated at 43.0% (324 of 753 strings)
2015-11-08 18:40:23 +01:00
betacentury
6f468a0baf Translated using Weblate (Italian)
Currently translated at 35.1% (265 of 753 strings)
2015-11-08 18:40:23 +01:00
Elia Argentieri
a93b79d9bb Translated using Weblate (Italian)
Currently translated at 35.1% (265 of 753 strings)
2015-11-08 18:40:23 +01:00
Onee Chan
7a019c28b0 Translated using Weblate (Japanese)
Currently translated at 40.6% (306 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
2203e2889d Translated using Weblate (Chinese (Taiwan))
Currently translated at 56.3% (424 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
dbb46f4da4 Translated using Weblate (Chinese (Taiwan))
Currently translated at 48.0% (362 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
d048636576 Translated using Weblate (Chinese (Taiwan))
Currently translated at 46.7% (352 of 753 strings)
2015-11-08 18:40:23 +01:00
Maksim D. Gamarnik
2240b1d8b8 Translated using Weblate (Russian)
Currently translated at 39.7% (299 of 753 strings)
2015-11-08 18:40:23 +01:00
hybriddog
94da70a544 Translated using Weblate (German)
Currently translated at 99.3% (748 of 753 strings)
2015-11-08 18:40:23 +01:00
Pavel Sokolov
d89aa09b70 Translated using Weblate (Russian)
Currently translated at 32.6% (246 of 753 strings)
2015-11-08 18:40:23 +01:00
Maksim D. Gamarnik
80dd4086ee Translated using Weblate (Russian)
Currently translated at 32.2% (243 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
1b0883c754 Translated using Weblate (French)
Currently translated at 100.0% (753 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
23321beb45 Translated using Weblate (French)
Currently translated at 100.0% (753 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
d6a91b5172 Translated using Weblate (French)
Currently translated at 98.2% (740 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
f1d19e7358 Translated using Weblate (Turkish)
Currently translated at 33.0% (249 of 753 strings)
2015-11-08 18:40:23 +01:00
ShadowNinja
cf9351e07d Translated using Weblate (Spanish)
Currently translated at 32.9% (248 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
44ee97a1bb Translated using Weblate (Romanian)
Currently translated at 25.8% (195 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
78bf13663f Translated using Weblate (Portuguese (Brazil))
Currently translated at 26.4% (199 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
a7874a283c Translated using Weblate (Italian)
Currently translated at 28.2% (213 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
2797c6c450 Translated using Weblate (Indonesian)
Currently translated at 40.2% (303 of 753 strings)
2015-11-08 18:40:23 +01:00
Wuzzy
d7d280b407 Translated using Weblate (German)
Currently translated at 98.8% (744 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
b41032fa56 Translated using Weblate (French)
Currently translated at 98.2% (740 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
45b8b381f0 Translated using Weblate (Dutch)
Currently translated at 31.3% (236 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
54634fa8b3 Translated using Weblate (Chinese (Taiwan))
Currently translated at 43.8% (330 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
037221c84d Translated using Weblate (Spanish)
Currently translated at 32.5% (245 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
7167e86ab1 Translated using Weblate (French)
Currently translated at 96.4% (726 of 753 strings)
2015-11-08 18:40:23 +01:00
Mahmut Elmas
04c4f7a8d0 Translated using Weblate (Turkish)
Currently translated at 33.0% (249 of 753 strings)
2015-11-08 18:40:23 +01:00
Jan Zabel
4ebf720650 Translated using Weblate (German)
Currently translated at 98.6% (743 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
7e44515f67 Translated using Weblate (French)
Currently translated at 84.1% (634 of 753 strings)
2015-11-08 18:40:23 +01:00
ChaosWormz
6926a489a5 Translated using Weblate (Hebrew)
Currently translated at 3.3% (25 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
8d33f0887a Translated using Weblate (French)
Currently translated at 75.5% (569 of 753 strings)
2015-11-08 18:40:23 +01:00
Honza Borovička
1167d38e08 Translated using Weblate (Czech)
Currently translated at 40.5% (305 of 753 strings)
2015-11-08 18:40:23 +01:00
Pavel Sokolov
b48810ee0f Translated using Weblate (Russian)
Currently translated at 32.1% (242 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
62583ed4a6 Translated using Weblate (German)
Currently translated at 98.8% (744 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
7ebe1f9363 Translated using Weblate (French)
Currently translated at 56.3% (424 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
a8a2fe85b2 Translated using Weblate (Hebrew)
Currently translated at 100% (0 of 0 strings)

Created new translation.
2015-11-08 18:40:23 +01:00
pilino1234
e3c3eab101 Translated using Weblate (German)
Currently translated at 94.1% (709 of 753 strings)
2015-11-08 18:40:23 +01:00
Jordi Fornaguera
5124799303 Translated using Weblate (Spanish)
Currently translated at 32.5% (245 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
5d99018978 Translated using Weblate (German)
Currently translated at 94.0% (708 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
ad7c37b58b Translated using Weblate (German)
Currently translated at 98.1% (739 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
22ff2c34fb Translated using Weblate (German)
Currently translated at 98.1% (739 of 753 strings)
2015-11-08 18:40:23 +01:00
Wuzzy
1c03176078 Translated using Weblate (German)
Currently translated at 98.0% (738 of 753 strings)
2015-11-08 18:40:23 +01:00
Wuzzy
d1ab04146b Translated using Weblate (German)
Currently translated at 95.4% (719 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
81ff738ccd Translated using Weblate (Chinese (Taiwan))
Currently translated at 43.8% (330 of 753 strings)
2015-11-08 18:40:23 +01:00
Wuzzy
56162a647e Translated using Weblate (German)
Currently translated at 75.5% (569 of 753 strings)
2015-11-08 18:40:23 +01:00
Muhammad Rifqi Priyo Susanto
4f1f652d96 Translated using Weblate (Indonesian)
Currently translated at 40.2% (303 of 753 strings)
2015-11-08 18:40:23 +01:00
Jeff Huang
1e6f0e63f8 Translated using Weblate (Chinese (Taiwan))
Currently translated at 36.9% (278 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
6a15211bc2 Translated using Weblate (German)
Currently translated at 61.6% (464 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
b046023b78 Translated using Weblate (German)
Currently translated at 54.1% (408 of 753 strings)
2015-11-08 18:40:23 +01:00
PilzAdam
d0567e92f5 Translated using Weblate (German)
Currently translated at 52.3% (394 of 753 strings)
2015-11-08 18:40:23 +01:00
Jean-Patrick G
25526551bb Translated using Weblate (French)
Currently translated at 35.4% (267 of 753 strings)
2015-11-08 18:40:23 +01:00
pilzadam
330f94ed73 Translated using Weblate (German)
Currently translated at 36.2% (273 of 753 strings)
2015-11-08 18:40:23 +01:00
est31
337c02c0f0 Don't compile pcgrandom on Windows
There it isn't needed.
2015-11-08 18:26:20 +01:00
kwolekr
f9e394a466 Improve LuaVoxelManip documentation 2015-11-07 11:59:24 -05:00
BlockMen
2a12579fab Add support for audio feedback if placing node failed 2015-11-07 13:23:38 +01:00
Kahrl
578649bd15 Document ENABLE_CURSES in README.txt 2015-11-06 23:05:40 +01:00
paramat
2ec1eee090 Conf.example, settingtypes: Improve mgfractal documentation 2015-11-06 11:12:07 +00:00
est31
5e507c9829 Add server side ncurses terminal
This adds a chat console the server owner can use for administration
or to talk with players.
It runs in its own thread, which makes the user interface immune to
the server's lag, behaving just like a client, except timeout.
As it uses the same console code as the f10 console, things like nick
completion or a scroll buffer basically come for free.
The terminal itself is written in a general way so that adding a
client version later on is just about implementing an interface.

Fatal errors are printed after the console exists and the ncurses
terminal buffer gets cleaned up with endwin(), so that the error still
remains visible.

The server owner can chose their username their entered text will
have in chat and where players can send PMs to.
Once the username is secured with a password to prevent anybody to
take over the server, the owner can execute admin tasks over the
console.

This change includes a contribution by @kahrl who has improved ncurses
library detection.
2015-11-06 08:51:14 +01:00
kwolekr
1384108f8c Schematics: Add core.place_schematic_on_vmanip API
Fix memory leak in minetest.place_schematic
Slightly refactor Schematic code
2015-11-05 01:18:32 -05:00
paramat
732cabee19 Settingtypes: Correct documentation for mgfractal
Use type 'string' for v3fs and add comments
2015-11-05 00:53:39 +00:00
est31
c75ab52115 Fix time progressing too fast
Before, time progressed wrongly. This was due to a mistake in how m_time_of_day_f was calculated,
and a regression of the last two commits.
2015-11-04 07:12:02 +01:00
paramat
64049cf72a Mgfractal: Add documentation to conf.example and settingtypes 2015-11-04 05:22:55 +00:00
est31
8f03995604 Time: use locks again
The Atomic implementation was only partially correct, and was very complex.
Use locks for sake of simplicity, following KISS principle.
Only remaining atomic operation use is time of day speed, because that
really is only read + written.

Also fixes a bug with m_time_conversion_skew only being decremented, never
incremented (Regresion from previous commit).

atomic.h changes:
	* Add GenericAtomic<T> class for non-integral types like floats.

	* Remove some last remainders from atomic.h of the volatile use.
2015-11-04 03:44:09 +01:00
est31
f9b09368f0 Time: Remove serverside getter, and use atomic operations
It isn't possible to use atomic operations for floats, so don't use them there.

Having a lock is good out of other reasons too, because this way the float time
and the integer time both match, and can't get different values in a race,
e.g. when two setTimeofDay() get executed simultaneously.
2015-11-03 19:07:45 +01:00
est31
abc354a5d0 Atomic: cleanup and add more operations
Cleanup:
	* Remove volatile keyword, it is of no use at all. [1]
	* Remove the enable_if stuff. It had no use either.
	  The most likely explanation why the enable_if stuff was there is that it
	  was used as something like a STATIC_ASSERT to verify that sizeof(T) is not larger
	  than sizeof(void *). This check however is not just misplaced in a place where we
	  already use a lock, it isn't needed at all, as gcc will just generate a call to
	  to the runtime if it compiles for platforms that don't support atomic instructions.
	  The runtime will then most likely use locks.

Code style fixes:
	* Prefix name of the mutex
	* Line everything up nicely, where it makes things look nice
	* Filling \ continuations with spaces is code style rule

Added operations on the atomic var:
	* Compare and swap
	* Swap

The second point of the cleanup also fixes the Android build of the next commit.

[1]: http://stackoverflow.com/q/2484980
2015-11-03 19:07:39 +01:00
est31
1550ab3c5d Only go fast in autorun if fast move is enabled 2015-11-03 15:40:47 +01:00
kwolekr
6ba4f3775e Silence 'unused typedef' warning for STATIC_ASSERT() 2015-11-03 01:03:33 -05:00
kwolekr
c2b5da735e Add callback parameter for core.emerge_area() 2015-11-02 18:43:09 -05:00
gregorycu
5c3546e459 Speed up saving of profiling data by 27x
On Windows Release x64 bit build this changes:

ProfilerGraph::put
1.68% -> 0.061%

ProfilerGraph::draw
12% -> 17.%

So yes, there is a tradeoff between saving profiling data
(executed always) and drawing the profiler graph (executed very rarely).
But usually you don't have the profiler graph open.
2015-11-02 13:25:21 +01:00
est31
eabfe091b5 Rename and move basicmacros.h to util/basic_macros.h 2015-11-02 04:57:55 +01:00
Kahrl
8f49358153 Print --videomodes response to standard output, too 2015-11-02 02:46:36 +01:00
Perttu Ahola
3285bf73b9 Print direct command line responses to standard output instead of using the log system
Using logging for these just makes them bloated and hard to read and overally just not neat at all.
2015-11-02 00:11:20 +02:00
kwolekr
52e5b513ed Fix Lua scripting synchronization
For several years now, the lua script lock has been completely broken.
This commit fixes the main issue (creation of a temporary rather than
scoped object), and fixes a subsequent deadlock issue caused by
nested script API calls by adding support for recursive mutexes.
2015-11-01 11:32:05 -05:00
kwolekr
d198e420ec Fix Noise compiled under clang >= 3.7.x with -O2 or higher
When compiled with optimizations, the most recent versions of clang seem
to 'optimize' out a crucial "and %reg, 0x7FFFFFFF" instruction in noise2d(),
probably because it somehow assumed the variable n would never become greater
than that amount.
Indeed, signed integer underflow is undefined behavior in C and C++, so while
this optimization is "correct" in that sense, it breaks lots of existing code.
Solved by changing n to an unsigned type, making behavior well-defined.
2015-11-01 11:16:18 -05:00
ShadowNinja
9269a0ecc7 Fix server crashing on Lua errors
Previously, the server called FATAL_ERROR when a Lua error occured.
This caused a (mostly useless) core dump.
The server now simply throws an exception, which is caught and printed before
exiting with a non-zero return value.
This also fixes a number of instances where errors were logged multiple times.
2015-10-31 13:28:58 -04:00
ShadowNinja
b872df6ef6 Fix clang warning 2015-10-31 13:28:58 -04:00
kwolekr
fdede60034 Fix C++11 compatibility 2015-10-31 02:38:23 -04:00
Rui914
482c4d69b0 minetest. to core. 2015-10-31 02:28:06 +01:00
Duane Robertson
b6dfae0221 WoW-style Autorun
This allows the player to toggle continuous forward with a key (F by default),
so we don't have to hold down the forward key endlessly.
2015-10-29 21:48:57 +01:00
paramat
c0a7c670a4 findSpawnPos: Add setting for max height above water level
Increase default from 6 to 16 to help with mgv7 and mgfractal
Large-scale or alternative mapgens can result in a lowland spawn point not
being found, causing a spawn at (0, 0, 0) possibly buried underground
The max height is now settable to allow correct player spawn
in any mapgen or when using custom noise parameters
2015-10-29 20:03:15 +00:00
paramat
182b3fd283 Mgfractal: Add filler depth noise 2015-10-29 20:02:57 +00:00
kwolekr
688556a5d1 Add STATIC_ASSERT() macro and use it 2015-10-27 22:27:32 -04:00
kwolekr
c56d7fe0eb Add DISABLE_CLASS_COPY macro (and use it)
Use this macro to disallow copying of an object using the assignment
operator or copy constructor.  This catches otherwise silent-but-deadly
mistakes such as "ServerMap map = env->getMap();" at compile time.

If so desired, it is still possible to copy a class, but it now requires
an explicit call to memcpy or std::copy.
2015-10-27 22:05:08 -04:00
est31
ca8e56c15a Environment: Time of day fixes and add serverside getter
-> Put access to time variables under the time lock.
-> Merge both time locks, there is no point to have two locks.
-> Fix the lock being released too early in Environment::setTimeOfDay
-> Add serverside getter so that you don't have to get
	the environment if you only have the server
2015-10-27 23:19:17 +01:00
PilzAdam
c406438b95 Fix missing #include 2015-10-27 15:55:34 +01:00
kwolekr
27eed1389b Move basic, non-numeric macros from util/numeric.h to basicmacros.h 2015-10-27 01:53:45 -04:00
BlockMen
8a6e921cb8 Fix jittering sounds on entities (fixes #2974) 2015-10-26 19:40:26 +01:00
BlockMen
2c25107c31 Fix typo 2015-10-26 15:14:22 +01:00
kwolekr
bc0318d2fc SAPI: Fix seed parameter truncation for LuaPseudoRandom constructor
Also fix a potential seed truncation issue on platforms where the
range of ptrdiff_t (the underlying type of lua_Integer) is too small.
2015-10-26 04:04:52 -04:00
kwolekr
306b067091 SAPI: Move core.get_us_time() to Util module 2015-10-26 03:46:36 -04:00
est31
5f342aa015 Remove some abort() calls
abort() doesn't benefit from the high level abstractions from FATAL_ERROR.
2015-10-26 04:45:00 +01:00
kwolekr
d69ef6acd3 SAPI: Throw runtime error instead of if l_get_mapgen_object called in incorrect thread 2015-10-25 23:15:57 -04:00
kwolekr
54f1267c2c SAPI: Mark all Lua API functions requiring envlock 2015-10-25 23:06:48 -04:00
est31
3936a5e3f7 Correct comment in l_util.cpp
Remove outdated loglevel list from a l_util.cpp comment,
and rather point to the updated code.
2015-10-26 00:32:48 +01:00
PilzAdam
eba5f7cd6c Fix parameter passing to gettext call 2015-10-25 19:14:07 +01:00
BlockMen
eb92bfb030 Check if hitter has inventory when punching item
Fixes #3280
2015-10-25 18:15:31 +01:00
Rui
df2c474d19 Credits: Remove my name 2015-10-25 16:10:49 +01:00
BlockMen
50ba7e114d Add option to disable backface culling for models
- Disabled by default (except players)
- Fixes #2984
2015-10-25 12:06:08 +01:00
PilzAdam
6907c3e40a Escape " in generated settings_translation_file.cpp 2015-10-25 10:56:58 +01:00
est31
1f76808e4f Fix out of bounds vector write in Logger::addOutput(ILogOutput *out)
Previously, the invocation of Logger::addOutput(ILogOutput *out) led to
an out of bounds write of the m_outputs vector, resulting in the
m_silenced_levels array being modified.

Fortunately, the only caller of that method was android system logging,
and only since a few commits ago.
2015-10-25 00:13:01 +02:00
PilzAdam
7d5c736531 Fix setting comments 2015-10-24 23:11:21 +02:00
PilzAdam
9ee0d376d4 Don't allow games or mods to add secure. settings 2015-10-24 22:32:03 +02:00
paramat
e2fc8f7dda Mgfractal: Independent iterations and scale parameters
Complete set of parameters for each of mandelbrot and julia sets
The julia set structure often needs different iterations and scale
2015-10-24 21:18:40 +01:00
est31
49bda7f98d Android: statically load iconv library
Fixes #3291

Thanks to @arpruss for reporting the bug, and suggesting the fix.

Also, remove trailing whitespaces.
2015-10-24 20:47:02 +02:00
est31
e46fa22003 Run updatepo.sh 2015-10-24 20:29:11 +02:00
est31
85c6b5fd06 Better gettext support for protocol version mismatch messages
Previously, xgettext failed to resolve the dynamic call.
Thanks to @JakubVanek for pointing this out.
2015-10-24 20:16:47 +02:00
est31
2f19abd704 Small logging refactor and additional options
-> Get rid of Logger::logToSystem and use normal downstream output system for android instead

-> Give the downstream output system more information: enrich the log function of ILogOutput
	with information and add ICombinedLogOutput for easier use.

-> Make Logger::getLevelLabel() static and public so that it can be used by downstream log output.

-> Add g_ and m_ prefixes where required
2015-10-24 19:59:39 +02:00
PilzAdam
6f2d9de769 Improve Lua settings menu
* Add key settings to setting table and ignore them later
  This way they are added to the auto-generated minetest.conf.example
* Add flags type
* Add input validation for int, float and flags
* Break in-game graphic settings into multiple sections
* Parse settingtpes.txt in mods and games
* Improve description for a lot of settings
* Fix typos and wording in settingtypes.txt
* Convert language setting to an enum
2015-10-24 19:39:15 +02:00
kwolekr
2d207afe8e Fix compilation under MSVC and remove unnecessary conditional function prototype
Thanks to SmallJoker for pointing this out.
2015-10-24 13:34:49 -04:00
BlockMen
127b9aed09 Fix on_rightclick() being called directly after placing node
fixes https://github.com/minetest/minetest_game/issues/537
2015-10-24 12:18:57 +02:00
cheapie
380e1504eb Improve rollback database indexing
Index more columns in the action table of the rollback DB to improve the performance of /rollback_check
2015-10-24 08:45:38 +02:00
est31
f9eb31f317 Flush rollback log more often
Flushes the buffer of rollback actions that wait to get saved in two more situations:

1. Flushes in the destructor of the rollback. This makes the server not
forget the last < 500 rollback entries when it shuts down.

2. Flushes the rollback when /rollback_check is invoked. This is neccessary
as otherwise it leads to confusion if users want to test the rollback functionality
by placing a node and then executing the check on it, or if the actions were
very recent out of other reasons.
2015-10-24 08:45:13 +02:00
kwolekr
964be640cb Fix some threading things and add additional thread unittests
- Fix thread name reset on start()
- Fully reset thread state on kill()
- Add unittests to check for correct object states under various circumstances
2015-10-24 02:31:23 -04:00
paramat
59fa117d13 Decoration API: Add flag for placement on liquid surface
Add findLiquidSurface() function to mapgen.cpp
Update lua_api.txt
2015-10-23 21:30:20 +01:00
Robert Zenz
c32847838d Add more ways to pass data to check_player_privs
The callback can now be invoked with either the player object or name as
the first parameter, and with either a table or a list of strings, like
this:

    minetest.check_player_privs(player_name, { shout = true, fly = true })
    minetest.check_player_privs(player_name, "shout", "fly")
    minetest.check_player_privs(player, { shout = true, fly = true })
    minetest.check_player_privs(player, "shout", "fly")
2015-10-22 19:55:48 +02:00
Leonardo
37c1e20127 Translated using Weblate (Portuguese (Brazil))
Currently translated at 72.6% (202 of 278 strings)
2015-10-22 17:45:48 +02:00
Rui
16d208e1dd Translated using Weblate (Japanese)
Currently translated at 100.0% (278 of 278 strings)
2015-10-22 17:45:48 +02:00
est31
1ac19c6dcf Translated using Weblate (German)
Currently translated at 100.0% (278 of 278 strings)
2015-10-22 17:45:48 +02:00
Jun Zhang
df80b1ae5a init_log_streams: check if log_filename is empty.
Fixes #3262.
2015-10-19 12:14:05 +02:00
paramat
3b9f99e0d6 ABMs: Make catch-up behaviour optional
Default is true for backwards compatibility
Update lua_api.txt
2015-10-18 16:42:59 +01:00
Kahrl
2364449d7a Settings tab: double click opens/closes trees 2015-10-18 11:03:59 +02:00
Kahrl
ba9d7215ec Settings tab: don't autoscroll when toggling "Show technical names" 2015-10-18 10:42:44 +02:00
est31
6b0cae5a9d Remove wstrgettext
Everywhere where wstrgettext was used, its output was converted back
to utf8. As wstrgettext internally converts the return value
from utf8 to wstring, it has been a waste. Remove the function, and
use strgettext instead.
2015-10-18 02:29:06 +02:00
est31
f3d82567c9 Display sane output for empty descriptions
According to its man page, the function gettext(3)
"may return a nonempty string" when msgid is "".

This commit fixes a bug where the comment ""
for some settings caused gettext to return a
"nonempty string", in this case header info of the
po file.
2015-10-18 02:18:10 +02:00
Kahrl
c4d1862344 Fix GUITable selection issues with trees
- setOpenedTrees(): this internal function was calling setSelected()
  to update m_selected. Since setSelected() calls autoScroll(),
  this caused the scrollbar to scroll back to the selected row
  in some cases when that shouldn't be done.

  For example, clicking the "+" to open a tree caused autoscroll.

  Fix this by making setOpenedTrees() modify m_selected directly.

- setDynamicData(): set scrollbar position after calling
  setSelected(), not before. This avoids setSelected()'s autoscroll
  messing up the scrollbar position again.

- setSelected(): If an invisible row is selected, open all parents
  of the selected row in order to make the selected row visible.

  This fixes the issue where all the trees are closed again whenever
  you return from the setting edit dialog to the settings tab.
2015-10-17 23:57:28 +02:00
est31
6b408248a1 Re-add "file" type for --add-location for xgettext call
Passing line numbers in the comments is bad.

References:

* Commit 94961b3364
* Previous commit
2015-10-17 22:20:47 +02:00
PilzAdam
006ef5b4a5 New settings tab contain all possible settings
Settings are automatically parsed from builtin/settingtypes.txt
The edit dialog automatically adjust based on the type of setting
2015-10-17 22:06:29 +02:00
Rui
06e5d0f5c5 Fix == to = 2015-10-17 17:20:58 +01:00
kwolekr
6ba9d6545d Fix missing include on AIX 2015-10-17 01:16:17 -04:00
kwolekr
765a834cd0 Refactor Thread class to improve readability and portability
- Fix some incompatibilities with obscure platforms (AIX and WinCE)
- Clean up Thread class interface
- Add m_ prefix to private member variables
- Simplify platform-dependent logic, reducing preprocessor
  conditional clauses and improving readibility
- Add Thread class documentation
2015-10-16 23:43:29 -04:00
kwolekr
6be74d17df Refactor thread utility interface
- Add "thr_" prefix to thread utility functions
- Compare threadid_ts in a portable manner, where possible
2015-10-16 22:20:24 -04:00
est31
836486a98e Fix crash regression when invsize formspec gets used
The invsize formspec element is outdated. Even though,
it is still supported, only a deprecation warning is shown,
introduced by commit [1]. The lua context passed to the
log_deprecated method added by commit [1] is NULL for the
invsize deprecation warning, as its run on the client and not
the server.

Commit [1] has removed checks for NULL inside the log_deprecated
method, resulting in a crash when a formspec with an invsize
element is parsed. This commit puts the check back.

Fixes #3260.

Referenced commits:

[1]: b5acec0a3c "Add proper lua api deprecated handling"

[2]: 7b8d372947 "Use warningstream for deprecated field messages and refactor log_deprecated"
2015-10-17 01:29:05 +02:00
est31
b600bc30a9 Fix enforcing of nametag hiding
Commit

d2ca662569 "Enforce hiding nametag"

didn't fix the issue for "client" instances, where the nametag update
was received before the object was added to the scene. This resulted
in the grey shadow on the nametag that commit tried to fix.

Thanks to @neoascetic for pointing out that there still is a shadow.
2015-10-15 23:46:03 +02:00
Maksim Gamarnik
5d88501a57 Compress textures and fonts
Used PNGOUT, OptiPNG and DeflOpt.
Removes ~350 KB without any loss in quality.
2015-10-15 01:45:59 -04:00
kwolekr
1a5b4b38f3 Add BufReader and vector-based serialization methods 2015-10-15 01:31:31 -04:00
ShadowNinja
e067ceacb8 Clean up gettext initialization 2015-10-15 01:16:10 -04:00
ShadowNinja
7b8d372947 Use warningstream for deprecated field messages and refactor log_deprecated 2015-10-15 01:14:38 -04:00
ShadowNinja
659922fd30 Remove explicit syslog printing for uncaught exceptions on Android
All log operations are now added to the syslog implicitly.
Also, pass along mutable string to argument vector for main().
2015-10-15 00:47:43 -04:00
ShadowNinja
6f2d785d0f Rename macros with two leading underscores
These names are reserved for the compiler/library implementations.
2015-10-14 02:39:37 -04:00
ShadowNinja
6f4d6cb574 Always use errorstream for DEBUG_EXCEPTION_HANDLER 2015-10-14 02:33:30 -04:00
ShadowNinja
4236792b87 Lower log level for benign socket errors 2015-10-14 02:22:04 -04:00
ShadowNinja
96cc5b34fe Use warningstream for log messages with WARNING
Remove DTIME macro and its uses, too
2015-10-14 01:36:48 -04:00
ShadowNinja
2139d7d45f Refactor logging
- Add warning log level
- Change debug_log_level setting to enumeration string
- Map Irrlicht log events to MT log events
- Encapsulate log_* functions and global variables into a class, Logger
- Unify dstream with standard logging mechanism
- Unify core.debug() with standard core.log() script API
2015-10-14 01:03:54 -04:00
Kahrl
e0b57c1140 Fix how address is logged when a wrong password is supplied
- SRP: print the address only once, not twice
- Legacy: previously the address was not printed at all
- Make both messages structurally the same, to facilitate log analyzers
2015-10-12 21:47:56 +02:00
Rui
7f2cefa093 Localize digprop_err function 2015-10-12 02:05:11 +02:00
paramat
bda2f56503 Mgfractal: Independant offset and slice params for mandelbrot and julia
Player now spawns on julia set due to julia offset
Add commented-out '#include profiler.h' for timetaker use
Use v3fs to reduce number of parameters
Tune tunnel width to match mgv7
2015-10-11 23:59:57 +01:00
paramat
3a4bcf35a1 Fractal mapgen: Fix mysterious bug 2015-10-10 21:27:44 +01:00
est31
41d896d5c2 Clear list rings when loading a new formspec
Fixes a bug where the old list ring remained when a new formspec
was displayed over the old one. This created the list-ring of the new formspec
to be partly ignored.

Thanks to @VanessaE to report the bug, and @DonBatman to produce the code that
exposed it.
2015-10-10 17:10:52 +02:00
paramat
7504cdcfbf Mapgen: Use mapgen-specific names for constants in headers
Update copyright years in all mapgens
Add myself to copyright notices in mgv5 and mgv7
2015-10-09 05:51:47 +01:00
paramat
706e7cebea Fractal mapgen: Add seabed and large pseudorandom caves 2015-10-07 06:43:46 +01:00
paramat
d152b55971 Android/Mapgen: Add fractal mapgen file to android makefiles 2015-10-06 22:32:13 +01:00
est31
8edc8a14e4 Correct SRP documentation
Previous statements were wrong.
2015-10-06 19:08:53 +02:00
kilbith
caf0df8924 Add viewing range GUI setting 2015-10-06 19:00:26 +02:00
paramat
e62eac49d5 Mapgen: Add 4D fractal mapgen 2015-10-06 06:43:04 +01:00
paramat
ce1a70c703 Mgv5: getGroundLevelAtPoint searches a larger range 2015-10-05 02:03:50 +01:00
OdnetninI
94464fce70 Translated using Weblate (Spanish)
Currently translated at 99.6% (277 of 278 strings)
2015-10-05 00:17:52 +02:00
pilino1234
8373df623b Translated using Weblate (German)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:33 +02:00
Luca Gronmaier
7521d15bf2 Translated using Weblate (German)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
pilino1234
d441159fb7 Translated using Weblate (German)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
Luca Gronmaier
8b7860ec70 Translated using Weblate (German)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
andrewgigena
31c2f03451 Translated using Weblate (Spanish)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
Olexandr
58ec4482ce Translated using Weblate (Ukrainian)
Currently translated at 81.6% (227 of 278 strings)
2015-10-05 00:17:08 +02:00
Olexandr
66f6b4ca59 Translated using Weblate (Ukrainian)
Currently translated at 78.0% (217 of 278 strings)
2015-10-05 00:17:08 +02:00
Laura Arjona Reina
a77b980c94 Translated using Weblate (Spanish)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
Christian Haug
a576823917 Translated using Weblate (Norwegian Bokmål)
Currently translated at 3.5% (10 of 278 strings)
2015-10-05 00:17:08 +02:00
way-hu
1472b25a58 Translated using Weblate (Hungarian)
Currently translated at 92.8% (258 of 278 strings)
2015-10-05 00:17:08 +02:00
Laura Arjona Reina
51cb2fd269 Translated using Weblate (Spanish)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
Laura Arjona Reina
4cd7e46c63 Translated using Weblate (Spanish)
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:08 +02:00
Olexandr
bcf03e0ff5 Translated using Weblate (Ukrainian)
Currently translated at 66.5% (185 of 278 strings)

Maybe it is better to describe allowed symbols instead of writing regex?
2015-10-05 00:17:08 +02:00
Olexandr
9a3dce3b88 Translated using Weblate (Ukrainian)
Currently translated at 46.4% (129 of 278 strings)
2015-10-05 00:17:08 +02:00
pilino1234
8518ec2861 Translated using Weblate (German)
Currently translated at 99.2% (276 of 278 strings)
2015-10-05 00:17:08 +02:00
Jeff Huang
1d628a5858 Translated using Weblate (Chinese (Taiwan))
Currently translated at 100.0% (278 of 278 strings)
2015-10-05 00:17:07 +02:00
Tim
a3ca8854a8 Translated using Weblate (German)
Currently translated at 98.9% (275 of 278 strings)
2015-10-05 00:17:07 +02:00
pilino1234
69fff104b9 Translated using Weblate (German)
Currently translated at 98.9% (275 of 278 strings)
2015-10-05 00:17:07 +02:00
Tim
3bef5fbde2 Translated using Weblate (German)
Currently translated at 98.9% (275 of 278 strings)
2015-10-05 00:17:07 +02:00
pilino1234
9701372e9d Translated using Weblate (German)
Currently translated at 98.9% (275 of 278 strings)
2015-10-05 00:17:07 +02:00
Jeff Huang
56faa2faf3 Translated using Weblate (Chinese (Taiwan))
Currently translated at 0.0% (0 of 278 strings)
2015-10-05 00:17:07 +02:00
Jeff Huang
de85688c92 Translated using Weblate (Chinese (Taiwan))
Currently translated at 100% (0 of 0 strings)

Created new translation.
2015-10-05 00:17:07 +02:00
Tim
5bf4af9e6c Translated using Weblate (Esperanto)
Currently translated at 99.2% (276 of 278 strings)
2015-10-05 00:17:07 +02:00
est31
b0523adc5f Add new ContentParamType2 "CPT2_DEGROTATE"
This might break some mods, but it is important for all uses of the param2 to
be documented.

This doesn't need a serialisation version or network protocol version change,
as old clients will still work on new servers, and it is bearable to have
new clients getting non rotated plants on old servers.
2015-10-04 23:59:41 +02:00
kwolekr
5130dbce7b Allow setting chunksize in core.set_mapgen_params 2015-10-04 17:26:08 -04:00
kwolekr
9f25aba6c2 Hide mapgens from main menu not intended for end users 2015-10-04 17:11:41 -04:00
kwolekr
0850d3bb93 Add emerge completion callback mechanism
Major refactor of emerge.cpp and Map::init/finishBlockMake
2015-10-04 16:27:50 -04:00
kwolekr
1f9c5a4a7b doc: Update node callback documentation 2015-10-04 15:34:56 -04:00
kwolekr
7b01b94c6b Remove redundant code in player interact handler 2015-10-04 04:06:26 -04:00
kwolekr
f0cd5da687 Define and use limit constants for Irrlicht fixed-width types 2015-10-04 04:00:16 -04:00
Fernando Carmona Varo
b12bdcce34 Added minetest.wallmounted_to_dir 2015-10-04 03:19:18 +02:00
ShadowNinja
20405edb06 Fix MinGW 32-bit build 2015-10-03 13:20:43 -04:00
Duane Robertson
a5bdfb6b3c Add get_biome_id(biome_name) callback
It returns the index used in mg->biomemap for a given biome name.
The biomemap is useless without this unless you re-register all existing biomes,
which could cause problems for anyone else trying to use biomemap.
With this, you can quickly create a lookup table of ids and names.
2015-10-02 22:49:31 +02:00
SmallJoker
21944a0d3c Add environment variable MINETEST_WORLD_PATH
Also add PATH_DELIM for Windows compatibility.
2015-10-02 22:47:13 +02:00
paramat
8aaae7db05 Mapnode: Replace rotateAlongYAxis with improved version
Get facedir by using lowest 5 bits of param2 and limiting to 23
More robust, frees up higher param2 bits for other uses
Change lookup table and table index to u8
2015-10-02 06:03:36 +01:00
est31
0bf1984d2c Fix some SRP issues
-> Remove memory allocation bugs
-> Merge changes from upstream, enabling customizeable memory allocation
2015-09-30 09:19:40 +02:00
est31
2a7d01b833 Some map border related fixes
1. Check for entity addition success in spawn_item implementation
2. Check for success in item_drop callback, so that the player
doesn't lose the item if they are outside bounds and try to drop it.
3. When existing player joins game, check that their position is inside
map bounds. If not, set their position to the return value of findSpawnPos().
4. Make findSpawnPos() respect the border

2 fixes a lua crash if a player drops an item outside map bounds.
3 fixes an assertion crash if a player leaves when being outside map bounds,
and then rejoins.
2015-09-29 23:06:15 +02:00
Kahrl
0cde03254a Don't serialize StaticObjectList with > 65535 objects
Because the count is serialized as u16, this would cause overflow.

If minetest later deserialized a mapblock with an incorrect
static object count, it would be unable to find the NameIdMapping
(which comes after the StaticObjectList) and abort with an error
such as "Invalid block data in database: unsupported NameIdMapping
version" (issue #2610).
2015-09-29 01:55:12 +02:00
paramat
ffe291cb78 Decorations: Remove error message 'chunksize not divisable by sidelen'
Sidelen larger than 16 is essential for low density decorations
With sidelen > 16 chunksize may not be divisable by sidelen if
chunksize is changed, in this situation setting sidelen = chunksize
is desirable and should not create error messages.
2015-09-26 23:58:56 +01:00
est31
e7282816ff Abort at uncatched exceptions
Change a remaining assert(0) call to FATAL_ERROR(msg).
There was a regression since commit

ced6d20295 "For usages of assert() that are meant to persist in Release builds (when NDEBUG is defined), replace those usages with persistent alternatives"

where when an "uncatched" exception is thrown inside a "side thread",
the program doesn't abort anymore.

This led to the problem @netinetwalker experienced where the emergethread
got an unhandled exception for loading a mapblock while redis was loading,
(see #3196) and then jmped outside its loop to work down its queue.
This resulted in the server not doing any emerges anymore.
2015-09-27 00:27:36 +02:00
est31
4338f100f8 Fix redis erroring on non found blocks
Thanks to @netinetwalker for spotting the error, proposing a fix, and testing it.

Error due to @est31's merging changes to PR #3202 to add more error reporting for invalid reply types, commit:

524a7656e3 "redis: throw error if block request failed"

Now we branch out on the valid reply type "not found".
2015-09-26 23:42:55 +02:00
Igor Gnatenko
88a44122ab FindJson: use PATH_SUFFIXES jsoncpp to find incdir
For example, on Fedora systems jsoncpp headers is installed in `/usr/include/jsoncpp`.
2015-09-26 21:43:01 +02:00
Christof Kaufmann
8787d2e7e9 Fix falling through nodes on world load (fixes #2784)
On world load the collision code can not see node boxes, since the
nodes have not been loaded. Thus it collided only at the next full
node. However, standing on a slab on world load leaded to sinking into
it until the world finished loading. Then one maybe fell further, if
the node below was not walkable.

Now, with this commit, when no node around the player has been loaded
it simply does not move the player.
2015-09-26 21:40:45 +02:00
Tim
776760aba7 Clarify radii and distance types in documentation
Because not all circles are round:
* circles using an euclidean metric are what we usually call "round"
* circles using a maximum metric look like euclidean rectangles with equal adjacent sides (squares)
* circles using a manhattan metric look like an euclidean right angled rhombus (squares, but 45° rotated to the former one)

[ci skip]
2015-09-26 21:28:50 +02:00
Tim
89e8f3a918 Update .gitignore to ignore symlinks to non-static Minetest directories and sort into an editor section
[ci skip]
2015-09-26 21:28:50 +02:00
netinetwalker
524a7656e3 redis: throw error if block request failed
Fixes #3196. Before, we didn't throw an error, and the engine thought the
block isn't occupied. But in fact it might be that redis is still loading,
and the block does exist in the database. The result was a cheesy map.
2015-09-26 17:36:59 +02:00
kwolekr
f062bbd7a1 Add /emergeblocks command and core.emerge_area() Lua API 2015-09-23 15:56:24 -04:00
Loic Blot
596484da4f Save and remove player by pointer
Why doing things simple ? Use pointer instead of strings to save players and remove them.
Saving players by name does a lookup to find pointer we already have ! Idem with removePlayer
Also remove unused removePlayer(peer_id), it's never called
2015-09-23 19:37:05 +02:00
paramat
a56aedb4ea Mapnode: Add rotateAlongYAxisFull supporting 24 facedirs 2015-09-22 20:54:25 +01:00
est31
1adc7bf5c6 Replace "self program" with "this program" in fstk boilerplates
... and remove trailing whitespace.
2015-09-21 20:05:17 +02:00
Kahrl
d130c36e14 Fix another typo in doc/world_format.txt 2015-09-21 19:26:54 +02:00
est31
4f03f8d119 lua_api.txt: fix typo
Thanks to @kaadmy (NeD) for pointing this out.
2015-09-21 18:10:05 +02:00
est31
452df1c723 Various style cleanups + unused code removal
-> Don't pass pointer to whole IGameDef to NodeMetadata constructors
	and deserializers, but only to IItemDefManager, which is needed
-> Remove the unused content_mapnode_get_new_name() method
-> Fix style for MapBlock::deSerialize and MapBlock::deSerialize_pre22,
	improving accuracy of error messages a bit
-> Fix style at other serialisation methods too
-> Improve accuracy of some comments
2015-09-19 20:57:29 +02:00
Loic Blot
9c635f28ac Little optimization on getAdded/Removed activeobjects per player loop.
Use std::queue instead of std::set, we don't need such a heavy container.
Don't convert position to int to convert it back to float in the next function.
2015-09-19 20:57:07 +02:00
paramat
fe994946b7 Mgv5/6/7: Re-add #include profiler.h as commented-out option 2015-09-19 02:27:21 +01:00
paramat
795db97fe3 Blob ore: Fix partial blobs 2015-09-19 02:27:00 +01:00
est31
691eb2d06d Document current node metadata format
Document the node metadata changes of the commit (serialisation version >=23):

704782c95b "WIP node metadata, node timers"
2015-09-18 16:47:13 +02:00
est31
94f1e5d9bd Send proper block to old clients for swap_node calls
The legacy code added in commit

d879a539cd - "Add minetest.swap_node"

for sending the whole mapblock to older clients on the case of a node
modification with swap_node, had the problem that the block chosen to be
sent to the client was referenced with node coordinates and not with
block coordinates, resulting in getting the wrong block sent to the client.
2015-09-17 20:23:31 +02:00
kwolekr
dcbb95338a Ore: Add puff ore type 2015-09-17 03:04:50 -04:00
est31
6c81be51ff Fix object position border checking
Borders have to be converted into BS format in order to be accurately comparable to
object positions.
2015-09-16 17:39:49 +02:00
est31
f61f817b9c Disallow placing entities outside safe boundaries
Entity positions are serialized as F1000. Disallow placing
entities outside safe borders with the minetest.add_entity
call.

Note that this patch only enforces those boundaries for
placing entities, moving entities that move outside boundaries
aren't affected.

Thanks to @nanepiwo for pointing this out.
2015-09-15 19:45:17 +02:00
paramat
8e9c9e305a Firelike drawtype: Improve code
Remove unusable fine rotation by param2
Remove unused and redundant code
Fix code style issues
2015-09-14 08:04:01 +01:00
Rui914
620dcddf43 Minor tweaks handle_settings_buttons 2015-09-14 08:29:15 +02:00
est31
8acccf4c58 Fix "make install" and add underscore to doc file name
Fix regression since commit:

915807f8db "Rename doc/mapformat.txt and update doc to match SRP changes"

And add an underscore to doc file name to make it more readable.
2015-09-14 07:51:31 +02:00
est31
283bf97a1c Serialisation: documentation fixes, clarifying renames and whitespace fixes
1. Do two renames:
	* SER_FMT_CLIENT_VER_LOWEST -> SER_FMT_VER_LOWEST_WRITE
	* SER_FMT_VER_LOWEST -> SER_FMT_VER_LOWEST_READ
Now the two define values are consistently named with the _WRITE defines
SER_FMT_VER_{HIGHEST,LOWEST}_WRITE, and to better point out what the two
serialisation versions actually are for.

2. wrap some lines in doc/worldformat.txt, and point out that the node
timers are serialized at a later point, as this can cause confusion about
what now happens (if one doesn't strictly read the if block's conditions).

3. some whitespace fixes in NodeTimerList::serialize, and one new comment.
2015-09-14 07:02:15 +02:00
est31
915807f8db Rename doc/mapformat.txt and update doc to match SRP changes
The documentation file contains not just information about the
map itself, but also about further files inside the world's
directory.

Documentation didn't reflect recent SRP addition, now it does.
2015-09-14 00:32:06 +02:00
kwolekr
beba969413 Ore: Add ore sheet column height range selection
Modders are now able to select the range of ore column height,
and the midpoint at which they 'grow' starting from.
This commit adds three new parameters for the 'sheet' ore type:
column_height_min, column_height_max, and column_midpoint_factor.
clust_size is now deprecated for this ore type.
2015-09-13 00:11:50 -04:00
est31
1d6911676e Run updatepo.sh
After this, it should hopefully not record line numbers anymore,
so the diffs of updatepo.sh runs are smaller. Well, this is theory,
lets see how it will turn out to be in practice.
2015-09-12 23:24:19 +02:00
Tim
a5b34550eb Translated using Weblate (Esperanto)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:18:41 +02:00
Kisbenedek Márton
8eeff63fa2 Translated using Weblate (Hungarian)
Currently translated at 91.1% (246 of 270 strings)
2015-09-12 23:18:41 +02:00
Alex “XShell” Schekoldin
90b57c4d82 Translated using Weblate (Russian)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:18:41 +02:00
Alex “XShell” Schekoldin
02dd60bf5a Translated using Weblate (Russian)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:18:40 +02:00
Muhammad Rifqi Priyo Susanto
1d9eb5a4d5 Translated using Weblate (Indonesian)
Currently translated at 98.1% (265 of 270 strings)

Penerjemahan
2015-09-12 23:18:40 +02:00
E. Kastelijn
d5591b65d6 Translated using Weblate (Dutch)
Currently translated at 97.0% (262 of 270 strings)
2015-09-12 23:18:40 +02:00
Muhammad Rifqi Priyo Susanto
3e3dfebad6 Translated using Weblate (Indonesian)
Currently translated at 97.7% (264 of 270 strings)

This is a combination of 9 consecutive commits by the same author.
Their messages in chronological order are:

Translated using Weblate (Indonesian)

Currently translated at 79.2% (214 of 270 strings)

Translated using Weblate (Indonesian)

Currently translated at 80.0% (216 of 270 strings)

Ini merupakan istilah dan tidak perlu diterjemahkan

Translated using Weblate (Indonesian)

Currently translated at 89.6% (242 of 270 strings)

Penerjemahan

Translated using Weblate (Indonesian)

Currently translated at 94.8% (256 of 270 strings)

Penerjemahan

Translated using Weblate (Indonesian)

Currently translated at 95.9% (259 of 270 strings)

Mencari persamaan makna

Translated using Weblate (Indonesian)

Currently translated at 96.2% (260 of 270 strings)

Penerjemahan

Translated using Weblate (Indonesian)

Currently translated at 96.6% (261 of 270 strings)

Mencari persamaan makna

Translated using Weblate (Indonesian)

Currently translated at 97.0% (262 of 270 strings)

Penerjemahan

Translated using Weblate (Indonesian)

Currently translated at 97.7% (264 of 270 strings)

Istilah tidak diterjemahkan
2015-09-12 23:16:43 +02:00
Tim
458293977e Translated using Weblate (Esperanto)
Currently translated at 73.7% (199 of 270 strings)
2015-09-12 23:16:41 +02:00
E. Kastelijn
5cea06bfd5 Translated using Weblate (Dutch)
Currently translated at 90.7% (245 of 270 strings)
2015-09-12 23:16:41 +02:00
Tim
73c9378743 Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:41 +02:00
Tim
ca32374ff7 Translated using Weblate (Esperanto)
Currently translated at 44.8% (121 of 270 strings)
2015-09-12 23:16:41 +02:00
Tim
0d1b41f380 Translated using Weblate (Esperanto)
Currently translated at 100% (0 of 0 strings)

Created new translation.
2015-09-12 23:16:40 +02:00
Jakub Vaněk
d58211264e Translated using Weblate (Czech)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:40 +02:00
shadowninja
17e83c05c5 Translated using Weblate (Spanish)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:40 +02:00
shadowninja
7dcc115b02 Translated using Weblate (Spanish)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:40 +02:00
Jakub Vaněk
14dc75c470 Translated using Weblate (Czech)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:40 +02:00
Jakub Vaněk
51064d0362 Translated using Weblate (Czech)
Currently translated at 95.5% (258 of 270 strings)
2015-09-12 23:16:40 +02:00
betacentury
26f81955c8 Translated using Weblate (Italian)
Currently translated at 82.9% (224 of 270 strings)
2015-09-12 23:16:40 +02:00
betacentury
ba31be0e47 Translated using Weblate (Italian)
Currently translated at 80.7% (218 of 270 strings)
2015-09-12 23:16:39 +02:00
Wuzzy
97493614e3 Translated using Weblate (Lojban)
Currently translated at 38.5% (104 of 270 strings)
2015-09-12 23:16:39 +02:00
Wuzzy
a9586d59e2 Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:39 +02:00
Wuzzy
38d3f6ca45 Translated using Weblate (Lojban)
Currently translated at 100% (0 of 0 strings)

Created new translation.
2015-09-12 23:16:39 +02:00
Rui
67175a9e1d Translated using Weblate (Japanese)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:39 +02:00
Rui
8ae30bb9d6 Translated using Weblate (Japanese)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:39 +02:00
Rui
e4831d9249 Translated using Weblate (Japanese)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:39 +02:00
hahoyer
beb963f10a Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-09-12 23:16:38 +02:00
est31
64a5eec1bd networkprotocol.h: remove "u16 command" from doc
Its obvious that "u16 command" is inside every packet, therefore this
commit removes all mentions of the command, if non-array like notation
is used. We already didn't add "u16 command" to new packets or removed
it at packet changes, so now we remove it from existing packets.
2015-09-10 10:26:00 +02:00
est31
2a9da62b21 Improve locale directory detection
Use in-place locale directory if that exists, and
static one (RUN_IN_PLACE or CUSTOM_LOCALEDIR) doesn't exist.
Report to errorstream if neither static nor in-place locale
dirs exist, and report successfully found paths to infostreem.

Fixes two bugs:

-> Regression of commit [1] where if we use RUN_IN_PLACE=false,
	but don't make install, locales aren't found. One might
	think this is no regression, as its no bug, but all other
	paths (mainmenu, etc.) are detected properly.
-> Regression of commit [1] where locales don't work on windows.

References:
[1]: Commit 645e208673 "Use CUSTOM_LOCALEDIR if specified" by @ShadowNinja
2015-09-10 08:32:58 +02:00
est31
183d0d5633 Update leveldb git url
Google code was shut down, project moved to github.
2015-09-08 21:45:16 +02:00
Loic Blot
1f1e14ab7f Change m_client_event_queue's type to std::queue
As indicated in its name, m_client_event_queue should be a queue.
Change std::list to std::queue to improve the queue's performance.
2015-09-08 21:23:09 +02:00
Robert Zenz
fe6575b8d3 Add more information about how get_node_light works. 2015-09-08 21:14:56 +02:00
paramat
0b87556048 Shaders: use triple-frequency waving for leaves and plants 2015-09-07 21:52:36 +02:00
paramat
4967e483b6 Mgv5/mgv7 biomes: Reduce heat and humidity noise spreads to former value of 750 2015-09-07 02:56:20 +01:00
ShadowNinja
645e208673 Use CUSTOM_LOCALEDIR if specified 2015-09-06 11:21:26 +02:00
est31
31b6d26784 Fix occasionally failing travis builds
We require sudo right now, tell this travis, so that they don't try to
run it on their container based infrastructure.
2015-09-06 05:40:15 +02:00
Pavel Puchkin
588f0c1fb0 Fix building on OSX, broken since "Clean up threading"
Commit

e4bff8be94 - Clean up threading

by @ShadowNinja has broken the OSX build.

Including things inside a namespace isn't good.

Also fixes #3124.
2015-09-06 05:34:02 +02:00
Rui914
91bf68e1fe Change my email 2015-09-03 22:57:52 +02:00
HEXcube
c345657289 Rename minetest-icon.svg to minetest.svg - Fixes #1564
-Complies with the Linux standard freedesktop icon naming specs: http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html#guidelines
-Ensures compatibility with icon themes
-Edit minetest.desktop, CMakeLists.txt and README.md to reflect this change
2015-09-03 19:26:28 +02:00
est31
2035bfc3a6 Areastore: fix "attempt to index a number value"
Before, calling get_areas_in_area for an areastore with both
include_borders and include_data would result in a lua error,
if there was at least one area as result:
attempt to index a number value in function 'get_areas_in_area'
2015-09-03 06:17:02 +02:00
Rui
d493855481 Small fixes of minetest.has_feature 2015-09-03 06:10:17 +02:00
Ner'zhul
196975ba5c Add two missing directories to doxygen 2015-09-02 02:13:47 +02:00
est31
94961b3364 Don't add line number to comment when running updatepo.sh
Otherwise, this updates all .po files for all line numbers that changed
since the last time updatepo.sh was run. We still add the filename, but
this information shouldn't change too often.

xgettext beginning with 0.18.4 supports this feature.
2015-09-02 01:34:37 +02:00
ShadowNinja
e511282d78 Warn when building without cURL 2015-09-01 14:43:59 -04:00
ShadowNinja
7419504079 Enable server build when no builds are enabled 2015-09-01 14:43:59 -04:00
Marcin
fa30a14c5c Make example config more readable 2015-09-01 20:29:03 +03:00
Rui
4124e360cb Minor tweaks __builtin:falling_node 2015-09-01 19:14:08 +02:00
est31
0903190ba2 Hide minimap if it has been disabled by server 2015-09-01 19:00:33 +02:00
jh10001
dce9468925 gettext.cpp: Fix syntax error when using MSVC
Also remove trailing whitespaces from the file
2015-09-01 00:26:11 +02:00
est31
714b68add2 Credits tab: fix accidental merger of two contributors
Fixes #3125
2015-08-31 16:37:02 +02:00
est31
2c637ce1c2 Make ClientInterface::statenames consistent with the state enum again
Fixes minetest.get_player_information segfault due
to out of bounds access problems, when compiled as debug build.
2015-08-31 13:31:29 +02:00
est31
9c44aace4f l_mainmenu.h: remove unused l_get_dirlist function
The commit
8f9af57314 "Add core.get_dir_list" by @ShadowNinja
has removed the implementation of the l_get_dirlist function and all its usages
from the l_mainmenu.cpp file, but hasn't removed it from the header file.

The reason why this hasn't been detected earlier is that C++ has this interesting
feature to still make it possible to create instances of classes whose never used
private methods are declared but not defined.
2015-08-30 01:17:03 +02:00
Gael-de-Sailly
18973f9af1 Ores: change ore chance in clusters to better respect clust_num_ores for dense clusters 2015-08-29 23:30:17 +01:00
paramat
17b7b7c85f Dungeongen: Remove floating frames
Preserves the rare unbroken protruding dungeons
Fix random range for first room roomplace
Fix checked volume for first room 'fits' bool
and check for 'untouchable' flag instead of 'inside'
Remove 'enable floating dungeons' setting
2015-08-29 06:27:29 +01:00
Kahrl
3304e1e517 Push error handler afresh each time lua_pcall is used
Fixes "double fault" / "error in error handling" messages
(issue #1423) and instead shows a complete backtrace.
2015-08-27 01:56:06 +02:00
Kahrl
8658c8d9b5 Use numeric indices and raw table access with LUA_REGISTRYINDEX 2015-08-27 01:56:06 +02:00
David Jones
34b7a147dc Change i++ to ++i 2015-08-25 18:33:52 -04:00
est31
2480f2d06f Add fgettext_ne as keyword to updatepo.sh 2015-08-25 00:46:58 +02:00
Rui914
ca9ebd4545 Use gettext to "None" of texture pack list 2015-08-25 00:22:58 +02:00
ShadowNinja
67d38a303b Add setting for mods to copy to Android app 2015-08-24 14:37:14 -04:00
onkrot
6c5bc14290 Fix comment positioning in minetest.conf.example 2015-08-24 14:05:18 -04:00
ShadowNinja
32e4f4b32d Fix Android build of threading sources 2015-08-24 11:20:53 -04:00
ShadowNinja
e4bff8be94 Clean up threading
* Rename everything.
    * Strip J prefix.
    * Change UpperCamelCase functions to lowerCamelCase.
  * Remove global (!) semaphore count mutex on OSX.
  * Remove semaphore count getter (unused, unsafe, depended on internal
    API functions on Windows, and used a hack on OSX).
  * Add `Atomic<type>`.
  * Make `Thread` handle thread names.
  * Add support for C++11 multi-threading.
  * Combine pthread and win32 sources.
  * Remove `ThreadStarted` (unused, unneeded).
  * Move some includes from the headers to the sources.
  * Move all of `Event` into its header (allows inlining with no new includes).
  * Make `Event` use `Semaphore` (except on Windows).
  * Move some porting functions into `Thread`.
  * Integrate logging with `Thread`.
  * Add threading test.
2015-08-23 22:04:06 -04:00
est31
6a1047d8c1 Fix wrong android versionName
Before, android versionName was set to "...13", which made the f-droid build fail.
2015-08-21 22:47:04 +02:00
est31
07fddf1f6c Merge 0.4.13 changes into stable-0.4
0.4.13 release!
2015-08-20 21:02:42 +02:00
est31
ffe3f03bc5 Continue with 0.4.13-dev 2015-08-20 04:02:00 +02:00
est31
d44fceac7e Bump version to 0.4.13 2015-08-20 04:02:00 +02:00
RealBadAngel
980d095e32 tileable flags are needed also without shaders because of filters 2015-08-20 03:42:22 +02:00
RealBadAngel
8b8d17b22b Remove use of engine sent texture tiling flags - theyre no longer needed 2015-08-20 02:41:40 +02:00
kwolekr
5009d31a33 Remove some emails from credits tab 2015-08-19 15:56:08 -04:00
kwolekr
f3c16ab373 Update credits tab 2015-08-19 15:14:27 -04:00
Rui
3a2bfd4548 Fix indianred and indigo of color-string 2015-08-19 19:49:45 +02:00
Rui
a64d887275 Add Japanese translation of desktop file 2015-08-19 19:49:22 +02:00
est31
d565ce9539 Client: disable mmdb modstore
The service isn't online, and on the long term, mmdb will likekly be
replaced with other services from the modding community.
2015-08-19 18:56:44 +02:00
est31
457d42c599 Android: bypass broken wide_to_utf8 with wide_to_narrow (again)
This bypass had to be re-enabled as some users reported issues,
even after the iconv build fix.

While utf8_to_wide works well, wide_to_utf8 is quite broken
on android, for some reason, and some devices (unrelated from build
configuration).
2015-08-19 18:38:00 +02:00
est31
1fadf7f21e Fix inventory replace bug 2015-08-19 03:42:00 +02:00
kwolekr
c2d23ff9cc SAPI: Disable unlockable time profiling 2015-08-18 01:26:11 -04:00
kwolekr
bcf38a2ad1 SEnv: Remove static_exists from ActiveObjects in deleted blocks 2015-08-16 15:55:07 -04:00
onkrot
5556ba168f Remove unused functions. 2015-08-16 14:29:33 +02:00
paramat
ee6cad1546 Defaultsettings: Increase client_mapblock_limit to 5000 2015-08-15 20:29:30 +01:00
kwolekr
0ba1cf8203 Rollback: Fail on bad precondition instead of causing assertion error 2015-08-15 14:51:38 -04:00
BlockMen
7238df4c59 Fix sneaking (fixes #665 and #3045) 2015-08-15 20:36:45 +02:00
nerzhul
c4b5561b3f Remove unused function from connection.{cpp,h} 2015-08-15 08:48:20 +02:00
est31
25dfd1bbf5 Don't do formspec escaping twice for loading description 2015-08-14 15:56:25 +02:00
kwolekr
be9024a397 minimap: Add ability to disable from server 2015-08-13 15:05:48 -04:00
est31
a670ecfde4 game.cpp: Update cached settings 2015-08-13 20:05:53 +02:00
Perttu Ahola
def274a583 Fix segfault caused by a8e238ed06 2015-08-13 19:02:48 +03:00
est31
a8e238ed06 Add count based unload limit for mapblocks 2015-08-13 07:56:07 +02:00
kwolekr
2b04ab874d SAPI: Track last executed mod and include in error messages 2015-08-12 23:56:12 -04:00
est31
738fbc66d0 Fix Lua PcgRandom
Before, this lua code led to a crash:

local pcg = PcgRandom(42)
local value = pcg:next()

This was because if you called s32 PcgRandom::range(min, max) with the
minimum and maximum possible values for s32 integers (which the lua
binding code did), u32 PcgRandom::range(bound) got called with 0 as the
bound. The bound however is one above the maximum value, so 0 is a "special"
value to pass to this function. This commit fixes the lua crash by
assigning the RNG's full range to the bound 0, which is also fits to the
"maximum is bound - 1" principle, as (u32)-1 is the maximum value in the
u32 range.
2015-08-12 11:36:22 +02:00
paramat
f0b325254f Treegen: Rename pine tree mapgen alias 2015-08-10 09:50:58 +01:00
Kahrl
6c0c27f662 Fix intlGUIEditBox leak and uninitialized value in Mapper (reported by valgrind) 2015-08-10 08:41:45 +02:00
kwolekr
1c408c4f1d Make NetworkPacket respect serialized string size limits 2015-08-10 02:16:55 -04:00
kwolekr
18cfd89a86 Display Lua memory usage at the time of Out-of-Memory error
Also misc. minor cleanups
2015-08-10 01:38:09 -04:00
rubenwardy
a953ff4dfc Fix segfaults caused by the Environment not being initialized yet 2015-08-09 23:36:55 +02:00
sfan5
6b39bc6865 Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 22:32:04 +02:00
Diego Martinez
46e4970918 Update Spanish translation. 2015-08-09 20:36:56 +02:00
Loic Blot
35cc90b086 Remove unused file 2015-08-09 13:27:42 +02:00
Kisbenedek Márton
e0a961da52 Translated using Weblate (Hungarian)
Currently translated at 91.1% (246 of 270 strings)
2015-08-09 12:33:41 +02:00
Andrey K
247dda5005 Translated using Weblate (Russian)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 12:33:41 +02:00
est31
ba5e4d7217 Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 12:33:41 +02:00
Jackie Coe
ad49c96ecf Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 12:33:41 +02:00
Jackie Coe
f75e6417ad Translated using Weblate (German)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 12:33:41 +02:00
Rui
a8dbcbc2f2 Translated using Weblate (Japanese)
Currently translated at 100.0% (270 of 270 strings)
2015-08-09 12:33:41 +02:00
est31
5447bb4e83 Translated using Weblate (German)
Currently translated at 99.6% (269 of 270 strings)
2015-08-09 12:33:41 +02:00
Jean-Patrick G
5ffb752d3a Translated using Weblate (French)
Currently translated at 96.2% (260 of 270 strings)
2015-08-09 12:33:41 +02:00
Rui
0d1243ce0b Translated using Weblate (Japanese)
Currently translated at 96.2% (260 of 270 strings)
2015-08-09 12:33:41 +02:00
est31
a2f12bf054 Translated using Weblate (German)
Currently translated at 99.6% (269 of 270 strings)
2015-08-09 12:33:41 +02:00
Jean-Patrick G
5622fb2cee Translated using Weblate (French)
Currently translated at 96.2% (260 of 270 strings)
2015-08-09 12:33:41 +02:00
Kahrl
63b12f1f04 Fix camera updates being toggled by N key in release mode (#2762) 2015-08-07 06:02:06 +02:00
gregorycu
5c3c965c1a Fix detection of sneaking node
This fixes bug 1551
2015-08-06 03:14:56 -04:00
kwolekr
8560ece02e Fix BufferedPacket race condition (fixes #2983)
This was caused by the use the non-threadsafe SharedBuffer in a
threaded context.
2015-08-06 02:25:35 -04:00
kwolekr
bd0b469d3d Fix critical vulnerabilities and bugs with NetworkPacket 2015-08-06 00:10:57 -04:00
est31
49cf66d785 Initialize random for verification key generation too 2015-08-06 05:48:07 +02:00
kwolekr
bcf47bc67c Improve Script CPP API diagnostics 2015-08-05 21:13:03 -04:00
kwolekr
3183d5a403 connection: Make assertions non-fatal for received data 2015-08-05 21:01:13 -04:00
RealBadAngel
3295f3c401 Fix tiling issues for PLANTLIKE and FIRELIKE with FSAA 2015-08-05 22:52:32 +02:00
paramat
7a6e4dc54a Cavegen V6: Make all caves consistent with 0.4.12 stable
When tunnels entirely above ground were avoided, the
missing pseudorandom calls changed the allowed caves.
Now, above ground tunnels are not placed while
still running all previous pseudorandom calls.
2015-08-03 06:39:23 +01:00
paramat
cf77e0333d Biome API: Make fallback biome stone and water, disable filler 2015-08-03 02:34:32 +01:00
Břetislav Štec
abe6c072d6 src/util/numeric.{cpp,h}: Fix FacePositionCache data race 2015-08-02 19:42:22 +02:00
Miner59
060e56b24c Fix "bouncy" blocks
Before players "bounced" too high. Now, while still allowing to bounce, higher speed bounces are throttled.
2015-08-02 19:40:23 +02:00
Břetislav Štec
868a1a5c13 src/client/tile.cpp: Fix reference counting 2015-08-02 19:26:15 +02:00
est31
47225346be Android: fix sound issue, and gitignore
Previously, sound failed due to errors with hardfp abi build
instructions. As the problem couldn't be found, the softfp
compatible abi was chosen instead.

This move will cause a small performance overhead, but due to the
abi being armeabi-v7a, the internal calculations will still be done
using the FPU.

We also fix some issues with ABI information passing. However, the
fixes aren't sufficient to get sound working.

The patch also fixes an issue with the gitignore file.
2015-08-02 19:23:17 +02:00
est31
a890c66bc0 Actually document what minetest.is_protected should do 2015-08-02 19:09:55 +02:00
rubenwardy
ec796b8e81 Add map limit config option 2015-08-02 14:27:04 +02:00
Břetislav Štec
a5e5aa5be9 Prepend "Lua: " before lua exceptions
src/server.cpp
src/emerge.cpp
2015-08-02 02:17:37 -04:00
Břetislav Štec
c4287a0d68 src/wieldmesh.cpp: Fix mesh extrusion memory leak 2015-08-02 02:16:30 -04:00
Břetislav Štec
ebe7b31538 src/client.cpp: Fix mapper memory leak 2015-08-02 02:15:38 -04:00
kwolekr
42cf5e972d Improve accuracy and safety of float serialization
Multiplying by a factor of 1/1000.f (rather than dividing by 1000.f) directly
introduces an error of 1 ULP.  With this patch, an exact comparison of a
floating point literal with the deserialized F1000 form representing it is now
guaranteed to be successful.
In addition, the maxmium and minimum safely representible floating point
numbers are now well-defined as constants.
2015-08-01 19:30:08 -04:00
kwolekr
bf991bde45 Clean up util/serialization.{cpp,h} and add unit tests 2015-08-01 19:24:46 -04:00
Břetislav Štec
67997af67f src/environment.cpp: Fix NULL pointer dereference 2015-08-01 20:44:18 +02:00
Břetislav Štec
79e2647556 src/network/connection.h: Fix race condition 2015-08-01 20:44:17 +02:00
est31
c39a85a88d Android: Add githash header to spare rebuilds after new commits
Before, android_version.h got changed at every new commit. Now, we
only change it with new minetest releases. Analogous to how cmake
does it,  we add an android_version_githash.h file that communicates
the git hash to C++ code.

Also, unify VERS_MAJOR, VERS_MINOR and VERS_PATCH variable
calculation inside the whole makefile.
2015-08-01 20:42:07 +02:00
kwolekr
7919318be7 tests: Log exceptions thrown inside of unit tests 2015-07-31 23:30:25 -04:00
paramat
cfed682d04 Dungeon generation: Fix code style issues in dungeongen.cpp 2015-08-01 00:37:26 +01:00
est31
e29b61ecd4 Android: speed up rebuild, and prevent race condition fail
Speeding up rebuild:

Before, we've written the android_version.h file at every rebuild.
As it thought the file's content has changed, make has rebuilt files
in the source tree that depended on that header file during rebuild,
causing lots of files being rebuilt without there being a reason.

The reasoning of make can be observed by passing -d and V=1 params
to the ndk-build command. You then got logging entries like:

Prerequisite `jni/src/android_version.h' is newer than target `obj/local/armeabi-v7a-hard/objs-debug/minetest/jni/src/areastore.o'.

Preventing race condition build fail:

Before, there was a race condition, where, if the prep_srcdir target
was executed in parallel with the $(ROOT)/jni/src/android_version.h
one, it could happen that the jni/src directory was nonexistent, and
we were trying to write into a file inside. This resulted in a build
failue:

/bin/sh: 1: cannot create [...]/jni/src/android_version.h: Directory nonexistent

Additionally, we now don't remove the link to src/ needlessly anymore.
Keeping this wouldn't have affected the rebuild, but this way its
more proper.
2015-07-31 10:12:20 +02:00
est31
7217fd32eb Fix 0.4.11 githash for android
Also make only one >-redirection, sparing repetition.
Also, use cut instead of awk, which is shorter and should be a bit faster.
2015-07-31 04:51:57 +02:00
Loic Blot
05fe9ab2d4 Small SendableMediaAnnouncement cleanup
-> Remove the SendableMediaAnnouncement struct
-> Forge the packet directly in the m_media loop, spare one loop and the construction of a vector
-> Use preincrement to spare iterator copies
2015-07-31 01:01:00 +02:00
est31
eb3aac20c8 Android: fix horrible libiconv build
Before, our libiconv build was a joke. We first called configure for our own build host system,
then called make, before we executed a Android.mk script we provided as patch. The first "native make"
always failed, and the LIBICONV_LIB file setting in our Makefile didn't match the built one,
resulting in an always-rebuild of iconv.

This commit cleans up this total mess, removes the double-build, and the Android.mk, and properly calls
./configure with the according target platform, and uses a built toolchain.

As we have to deal with the android bug "NDK: Support for prebuild libs with full sonames"
https://code.google.com/p/android/issues/detail?id=55868
as the 2013 patch
https://lists.gnu.org/archive/html/libtool-patches/2013-06/msg00002.html
by Google's David Turner wasn't inside the 2011 libtool, we pass -avoid-version to
libtool.

Thanks to the proper build, wide_to_utf8 works for android now, removing us of the need to disable it.
2015-07-29 15:59:06 +02:00
est31
f97c2702a2 Android: Fix minor makefile bugs
Fix commenting happening thanks to missing quotes and dereference variable the right way,
to get rid of a compile error.
2015-07-29 15:53:23 +02:00
nerzhul
ca63f7f10d Precalculate mapblock relative size. This permit to remove many s16 calculs on runtime 2015-07-29 11:45:44 +02:00
Břetislav Štec
88a6b9f52d Fixed minimap memory leak 2015-07-27 11:06:46 -04:00
SmallJoker
9bc0241e44 Extend CMake variable descriptions 2015-07-27 13:36:37 +02:00
est31
f336d3ffb6 Fix srp.cpp:815 leak
Thanks @Zeno-
2015-07-27 08:15:39 +02:00
est31
c30a2d6854 Add AreaStore data structure 2015-07-27 06:42:56 +02:00
SmallJoker
454a290370 Fix MSVC number conversion warning 2015-07-25 17:38:04 +02:00
jeanpatrick.guerrero@gmail.com
ffd0ef16c4 Fix FSAA dropdown option reset after changing another dropdown option 2015-07-25 17:33:41 +02:00
est31
fa1096ec49 Fix minetest.get_(all)_craft_recipe(s) regression
Since 03e0dd33a8 the calls didn't return an output count
for the recipes.
2015-07-25 17:33:41 +02:00
Loic Blot
4e6971e593 Cleanup server addparticle(spawner) by merge two identical functions. 2015-07-25 12:24:28 +02:00
kilbith
a8c5841140 Remove drivers dropdown in the settings tab 2015-07-25 10:41:04 +02:00
est31
288302a1f0 Fix documentation of dedicated_server_loop 2015-07-24 23:11:19 +02:00
est31
5bde7798e9 Check output of mpz_set_str and fix leak on error condition
Also add static identifier as upstream did
2015-07-24 22:42:54 +02:00
Loic Blot
aab7c83d02 Remove some old dead code. Fix some Clang warnings in SRP (ng->N... will
always evaluate to true.
2015-07-24 21:48:02 +02:00
est31
2eb329cc63 Bump protocol to 26
This was needed due to the TileDef serialisation changes. Originally it has been planned
to also add utf-8 based chat to 26, but chat changes aren't final yet, so they are done
in one change, after the release, and not two small ones, causing us having to be compliant
to three versions of the packet.
2015-07-24 20:32:26 +02:00
Novatux
5dc9df8bbe Update my name 2015-07-24 12:04:44 +02:00
est31
3b50b2766a Optional reconnect functionality
Enable the server to request the client to reconnect.

This can be done with the now extended minetest.request_shutdown([reason], [reconnect]) setting.
2015-07-23 07:38:13 +02:00
RealBadAngel
1e0e85f82e Fix issues with light of attached CAOs 2015-07-23 04:35:13 +02:00
Robert Zenz
4eacce5e2f Add note that chat messages can be marked as handled. 2015-07-22 05:43:30 +02:00
paramat
8b472fdc05 Conf.example: Update mgv7 noise parameters 2015-07-22 02:29:26 +01:00
paramat
d569c91f48 Mgv7: Use density noise + density gradient for mountain terrain
Tune and optimise noise parameters
2015-07-21 23:16:14 +01:00
RealBadAngel
60350699c7 Add wielded (and CAOs) shader 2015-07-21 23:56:41 +02:00
sfan5
5b0c719171 Fix crash in mainmenu when loaded subgame does not have a "menu" directory 2015-07-21 21:55:58 +02:00
est31
254dbe7abd Clarify docs for auth.cpp method 2015-07-21 18:14:39 +02:00
est31
a57d83b46a Ask auth handler to create auth when a default password is set
-> Fix server crash with protocol >=25 if a default password is set.
-> Remove some useless and possibly confusion causing code for the TOCLIENT_FIRST_SRP packet handler
2015-07-21 18:12:28 +02:00
est31
403e6e6c9c Document game main menu image system 2015-07-21 17:17:46 +02:00
sfan5
8994913259 Allow random menu images for subgames 2015-07-21 16:58:22 +02:00
Loic Blot
fa7fe510d9 Remove profiler.h include where it's not needed. Remove some unreachable and very old code 2015-07-21 08:10:43 +02:00
Elia Argentieri
5ebb4237e2 Added get_player_velocity() method. Fixes #1176 2015-07-20 05:40:44 +02:00
est31
7bbb9b066a MoveItemSomewhere double bugfix
-> Fix bug where MoveSomewhere from an infinite source would fill the destination inventory with copies of itself.
-> Fix bug where MoveSomewhere would needlessly call callbacks.
-> Remove trailing whitespaces
2015-07-19 06:23:41 +02:00
paramat
4046f3e302 Cavegen: Mgv6: No small caves entirely above ground
Mgv5/mgv7: Remove 'should make cave hole' feature
Remove ravine code
2015-07-19 02:47:11 +01:00
TeTpaAka
e47f390e0d Refactor particle code to remove the while loops
Replaces while loops with proper getfield calls
2015-07-18 14:54:07 +02:00
Rui
1076bbd03e Update toolchain_mingw64.cmake 2015-07-18 09:02:55 +02:00
Mark Schreiber
74d8fdbd95 Add antialiasing UI setting
The Irrlicht engine supports antialiasing, and Minetest already supports
saving an antialiasing setting in its configuration file.  However,
Minetest lacked UI elements to set this setting, and previously the only
way to enable the feature was by hand-editing the configuration file.

Add a drop-down menu that can enable antialiasing.
2015-07-18 08:40:57 +02:00
Marcin
c5c609ce3d Add ability to specify coordinates for /spawnentity 2015-07-18 08:35:36 +02:00
TeTpaAka
dd2e08e117 Make acc and vel deprecated in add_particle and search for acceleration and velocity instead
The doc and the actual behaviour differed.
2015-07-18 07:57:20 +02:00
D Laboratory
162af5fe32 Fix a typo in comment of CMakeLists.txt 2015-07-18 07:50:52 +02:00
ExcaliburZero
5b9c8dfbd2 Change texture pack description file name
Change the name for texture pack description files from "info.txt" to "description.txt" in order to keep the naming consistent between description files for both mods and texture packs.

Also add backwards compatibility for texture packs that use "info.txt", and note in the log that "info.txt" is depreciated.
2015-07-18 07:50:44 +02:00
TeTpaAka
8d03301138 Fix invisible player when the attached entity is removed 2015-07-18 07:41:43 +02:00
Kahrl
9c76f379ac Display an access denied message when client detects a server timeout 2015-07-17 12:06:30 +02:00
est31
2c359da836 Run updatepo.sh 2015-07-17 07:24:10 +02:00
Michal Čihař
b4f166fb45 Translated using Weblate (Turkish)
Currently translated at 100.0% (269 of 269 strings)
2015-07-17 07:18:51 +02:00
Rui
5c7b7caec9 Translated using Weblate (Japanese)
Currently translated at 100.0% (264 of 264 strings)
2015-07-17 07:18:51 +02:00
sfan5
f4667dfd26 Translated using Weblate (Japanese)
Currently translated at 100.0% (264 of 264 strings)
2015-07-17 07:18:51 +02:00
Tae Lim Kook
a2f35da6b6 Translated using Weblate (Korean)
Currently translated at 1.7% (4 of 235 strings)
2015-07-17 07:18:51 +02:00
Tae Lim Kook
fa53bb77d9 Translated using Weblate (Japanese)
Currently translated at 100.0% (264 of 264 strings)
2015-07-17 07:18:51 +02:00
Jean-Patrick G
4872f1cfd1 Translated using Weblate (French)
Currently translated at 99.1% (233 of 235 strings)
2015-07-17 07:18:51 +02:00
Michal Čihař
3ff5e458b6 Translated using Weblate (Italian)
Currently translated at 82.5% (194 of 235 strings)
2015-07-17 07:18:51 +02:00
est31
bf7174f3f9 Server kicks: make messages configurable, cache wstring 2015-07-17 06:37:16 +02:00
nerzhul
f9dbec6edf Kick players when shutting down server and there is a crash due to a Lua stack exception 2015-07-16 20:27:42 +02:00
RealBadAngel
655fc6010f Fix relief mapping issues 2015-07-16 15:36:48 +02:00
Kahrl
b30e8d8ec6 Make serialization error message translatable
Also don't show "probably running a different version" message in simple singleplayer mode
2015-07-14 19:01:33 +02:00
Loic Blot
8ac0cf500f connection.cpp: remove unused constructor 2015-07-14 18:33:20 +02:00
kwolekr
515e7028ac Increase limit of serialized long strings 2015-07-14 03:22:16 -04:00
kwolekr
5006ce8260 Remove raw message output on AOM deserialization failure
Improve TOCLIENT_ACTIVE_OBJECT_MESSAGES robustness for handling invalid data
2015-07-13 23:29:29 -04:00
kwolekr
6f07f79c2f Add more robust error checking to deSerialize*String routines
Add serializeHexString()
Clean up util/serialize.cpp
2015-07-13 22:38:01 -04:00
paramat
b411b6f36f Minimal: Remove recently added unnecessary nodes
Fix 'is ground content' for some nodes
2015-07-14 03:33:58 +01:00
paramat
66ea356e68 Mgv6/treegen: (Re)Add fallback nodes for compatibility with subgames 2015-07-13 19:41:26 +01:00
jp
c3dead719a Fix remnant bugs on mainmenu
- Stop attempting to start a world when no world's created/selected in server tab
- Better world's indexes handling between subgames lists
2015-07-10 16:52:57 -04:00
kwolekr
1a1774a105 Fix damage flash when damage disabled 2015-07-10 15:58:57 -04:00
kwolekr
8eb272cea3 Misc. minor fixes 2015-07-10 15:58:57 -04:00
Loic Blot
e6f0178e83 Little coding style fix on porting.h 2015-07-10 19:04:05 +02:00
est31
cb8978fb1d Settings: pass name to callbacks by reference
Spare some copies.
2015-07-09 08:25:17 +02:00
est31
4ece2b9e32 Update clouds enable_3d_clouds when setting changed 2015-07-09 08:24:51 +02:00
Diego Martinez
13e100e1d8 Windows: Fix some warnings. 2015-07-09 01:52:28 +02:00
paramat
b51738177e Biome API decorations: 'spawnby' searches a 3D neighbourhood
The neighbours checked are the 8 nodes horizontally surrounding the decoration base
and the 8 nodes horizontally surrounding the ground node below the decoration
2015-07-08 22:44:10 +01:00
RealBadAngel
39439cbd3d Add new leaves style - simple (glasslike drawtype) 2015-07-08 11:20:07 +02:00
est31
b0784ba871 Use UTF-8 instead of narrow
Use wide_to_utf8 and utf8_to_wide instead of wide_to_narrow and narrow_to_wide at almost all places.
Only exceptions: test functions for narrow conversion, and chat, which is done in a separate commit.
2015-07-08 10:12:44 +02:00
kwolekr
e234d8b378 Clean-up Minimap code
- Fixed race conditions
- Fixed null dereference
- Fixed out-of-bounds array access
- MinimapMapblock is now allocated and added to update queue only when enabled
- Removed dependency on LocalPlayer
- Fixed code style
- Simplified expressions and program logic
- Cleaned minimap object interfaces
2015-07-08 01:50:31 -04:00
paramat
ba15c98e4d Mgv7: Auto-set lowest mountain generation level
Lowest level of base terrain determines mountain generation in mapchunk
Change some positional function arguments from int to s16
2015-07-08 00:49:04 +01:00
est31
d92d376148 Client: better m_proto_ver initialisation
Previously, m_proto_ver was set to the serialisation version
inside the legacy init packet.

Now, if the server doesn't send a protocol version (protocols < 25),
we set m_proto_ver to some value < 25 and > 0.
2015-07-07 17:03:26 +02:00
ShadowNinja
a93838707a Use minetest logging facilities for irrlicht log output 2015-07-05 01:05:24 +02:00
paramat
d786a272c0 Mgv7: Lower base of mountain generation to -112 and define constant 2015-07-04 20:21:19 +01:00
est31
64dc053209 Fix endless loop since grandparent commit 2015-07-04 19:43:46 +02:00
jeanpatrick.guerrero@gmail.com
c53520aa31 Fix attempt to start a world when no world is selected/created 2015-07-04 17:09:26 +02:00
est31
96989e0a6a Craftdef: Use numbers instead of iterators
Use numbers instead of iterators to traverse various vectors.
2015-07-04 16:28:21 +02:00
TeTpaAka
87b9cdab07 Fix missing check for 0 in craft replacements 2015-07-04 14:33:49 +02:00
kwolekr
7b171ea2be Fix code style from recent commits and add misc. optimizations 2015-07-02 23:14:30 -04:00
Sokomine
0a0378fece Set server_announce to world.mt and respect modes when changing subgame 2015-07-02 23:03:42 +02:00
RealBadAngel
8a85e5e58d Shaders fixes and cleanup relief mapping code. 2015-07-02 21:36:45 +02:00
Sokomine
75d2cfef5c Fix world.mt not written when selecting mode 2015-07-01 19:50:24 +02:00
est31
2e44873ac9 Inventory manager style cleanup and further checks 2015-07-01 17:03:02 +02:00
est31
b2160bcecd Disable mesh cache by default 2015-07-01 13:50:25 +02:00
paramat
c0dafa1c10 Cavegen: Cleanup code. Define constant for MGV7_LAVA_DEPTH 2015-07-01 06:21:13 +01:00
est31
d75009a758 Add android tools environment to gitignore
Previously, if you did `make envpaths` (as described in README.android), the new file got listed by git as new file.
2015-07-01 04:12:55 +02:00
est31
9e3e6dc5ec Make m_blocks_cache private
@RealBadAngel has removed all outside access of the cache.
2015-06-30 21:34:23 +02:00
est31
370a33686a Defer minimap update when shape changed 2015-06-30 21:14:28 +02:00
est31
842579eb8c Close keybind settings menu with esc 2015-06-30 21:04:06 +02:00
est31
29b0dc89e6 Fix single click world select 2015-06-30 20:09:29 +02:00
jeanpatrick.guerrero@gmail.com
85f3d575ec Fix bugs in mainmenu 2015-06-30 18:11:38 +02:00
paramat
91f95fd4df Biome API: Increase heat and humidity noise spreads to 1000 2015-06-30 07:04:18 +01:00
est31
29dda9f356 Add UpdateThread and use it for minimap and mesh threads 2015-06-29 15:00:19 +02:00
kwolekr
4e28c8d3c8 Fix *BSD build with GNU iconv 2015-06-29 12:32:01 +02:00
rubenwardy
0d65ee878c Add Lua errors to error dialog 2015-06-29 04:47:35 +02:00
RealBadAngel
1455267c9e Bugfix: variable type mismatch 2015-06-28 21:11:54 +02:00
RealBadAngel
0a90fedabc Bugfix: minimap was updated only with loading new blocks, allow forced updates with changing player pos 2015-06-28 14:45:47 +02:00
RealBadAngel
b160f8dfe7 Minimap update 2015-06-28 12:17:36 +02:00
est31
420125debd Remove busy polling inside minimap thread 2015-06-27 19:20:25 +02:00
paramat
36163d9653 Mgv5/mgv7 caves: Remove sand found in underground tunnels
Add missing check for max_stone_y to mgv5 cavegen
Tunnels now carve through sand below water_level
2015-06-27 03:36:40 +01:00
RealBadAngel
ffd16e3fec Add minimap feature 2015-06-27 03:42:01 +02:00
est31
3376d2e114 Remove compile warning
Thanks @TeTpaAka for pointing this out.
2015-06-25 15:50:31 +02:00
est31
3d43df99f1 Return to ignore 2015-06-24 22:47:41 +02:00
rubenwardy
b13809f0c0 Use frame instead of words 'no screenshot available' 2015-06-24 07:33:38 +02:00
Loic Blot
c6766b275f Typo fix on previous @est31 commit 2015-06-23 23:17:47 +02:00
est31
3a89e25fe0 Small TOCLIENT_HELLO logging fix
Fix grammar error and missing number conversion for version.
Also add deployed protocol to log line.
2015-06-23 21:14:48 +02:00
est31
2c1fd29884 Add MoveSomewhere inventory action
Improve shift+click experience
2015-06-23 20:18:41 +02:00
Craig Davison
bc55ef337c Use actionstream instead of errorstream when failing to emerge player 2015-06-23 19:25:06 +02:00
est31
6f8bdda90e Fix string conversion error message 2015-06-23 15:04:14 +02:00
TeTpaAka
17ba584fe2 Fix bug when craft input isn't replaced 2015-06-22 19:30:35 +02:00
Zheyu Shen
0b76e85a71 Update Chinese translation 2015-06-22 19:25:01 +02:00
MirceaKitsune
660fa516bf Fix some issues with animations, and allow non-looped animations to be defined 2015-06-22 01:53:38 +02:00
paramat
622918d8a8 Mgv7: Edit noise parameters. Fewer octaves, larger spreads. 2015-06-21 04:34:19 +01:00
RealBadAngel
53efe2ef42 Remove textures vertical offset. Fix for area enabling parallax. 2015-06-21 00:11:09 +02:00
est31
a31d08be55 Android: use loop inside makefile to spare repetition 2015-06-20 07:48:17 +02:00
est31
14f4cd0ef9 Small CAO improvements
-> remove the old parent as @kahrl suggested
-> use indices no iterator as @kwolekr suggested
2015-06-20 06:58:07 +02:00
paramat
70da8a940b Mapgen objects: Enable heatmap and humidmap for all biome api mapgens 2015-06-20 04:16:17 +01:00
figec
d7190df07e More correct wrap_rows implementation 2015-06-20 03:41:51 +02:00
est31
dd91b3d6fb Generic CAO cleanups and renames for clarification
* Use enum for GENERIC_CMD_*
* Rename m_attachements to attachement_parent_ids (public member and clearer name)
* Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO
* USHRT_MAX + 1 buffer sizes to prevent overflows as @kahrl suggested
* Remove unneccessary m_id from GenericCAO (shadowing protected superclass member for no reason) as @kahrl suggested
2015-06-20 03:37:30 +02:00
est31
40226e5274 Make attached objects visible in 3rd person view 2015-06-20 02:59:53 +02:00
figec
3b65a6a36c Fix wrap_rows at inner byte of multibyte sequence
Also fix UTF-8 inner byte bounds and make unittest for case this fixes.
2015-06-18 23:39:23 +02:00
paramat
e45ecad3ab Biome API: Add noise defined biome blend 2015-06-18 07:05:22 +01:00
paramat
2da1503780 Mgv6: Don't create air gap in tundra at y = 48 in custom high terrain 2015-06-18 04:18:15 +01:00
est31
ea1b17b88f Don't print an error for valid listring[] formspec 2015-06-18 04:25:11 +02:00
est31
43dab2ffc8 Make wrap_rows not wrap inside utf-8 multibyte sequences
Also count multibyte sequences as "one" character.
Adds unittest for the bug reporter's case.
Fixes #2796.
2015-06-17 22:22:15 +02:00
est31
6dcf549ba9 Fail iconv call gracefully
No freezing when inbuf_size doesn't decrease over time.
2015-06-17 19:03:58 +02:00
ShadowNinja
a1a2ac7954 Simpler patch for saplings trying to grow on unknown nodes 2015-06-16 21:07:38 +02:00
est31
7a90b31b30 GUIFormSpecMenu::OnEvent code style update and small refactor
* Make method (more) consistent with current code stlye
* Move index into loop constructor after @rubenwardy's suggestion
* Cache inv_s->getList(s.listname), which removes a possibly bad scenario
of inv_s being null.
* Properly check for validity
2015-06-16 20:33:07 +02:00
est31
7b7f8b7225 Update credits tab 2015-06-16 19:34:27 +02:00
est31
c977fbd928 Add list-rings
Adds list-rings, a method to implement item sending between inventories via shift-click.
Nice insider feature: a ring consisting of a single inventory list serves as nice clean-up method.
Also adds them to minimal game, and the standard inventory.
Craft output slots are not supported.
2015-06-16 14:51:26 +02:00
Nathaniel Olsen
3ae8b92be6 Remove unneccessary space for tab completion 2015-06-16 07:16:22 +02:00
Wuzzy
bbf6f4fc25 Don't highlight entries in credits 2015-06-15 17:43:47 +02:00
y.st
3b4408aa6c Don't crash when saplings try to grow on unknown nodes 2015-06-15 17:41:25 +02:00
paramat
38482d2656 Biome API: Enable biome generation to lower world limit
Decorations: Remove lower limit of water level for placement
2015-06-15 02:07:38 +01:00
SmallJoker
bb5f830d16 Ignore punches with no damage in the actionstream 2015-06-15 00:10:13 +02:00
Craig Davison
ecdfbfc8dc Remove reference to deprecated privilege 2015-06-14 23:53:30 +02:00
est31
ee38bcd307 Automated whitespace error fix for last commit 2015-06-14 23:15:20 +02:00
RealBadAngel
43fcfbfe05 Improved parallax mapping. Generate heightmaps on the fly. 2015-06-14 21:13:36 +02:00
est31
d105bf27dd Add UTF and other utility unit tests 2015-06-14 12:07:51 +02:00
est31
60f31ad523 Android: bypass broken wide_to_utf8 with wide_to_narrow
While utf8_to_wide works well, wide_to_utf8 is quite broken
on android, for some reason.
2015-06-14 08:25:21 +02:00
Ilya Zhuravlev
b6387b4e0f Use utf-8 in formspecs 2015-06-13 19:49:55 +02:00
est31
572990dcd3 Add utf-8 conversion utilities and re-add intlGUIEditBox 2015-06-13 19:49:55 +02:00
TeTpaAka
aa13baa30a Add minetest.register_on_player_hpchange 2015-06-13 19:40:31 +02:00
TeTpaAka
e50aa4ed06 Add return list of individual counts to find_node_in_area 2015-06-13 19:39:18 +02:00
est31
502e40a649 dofile error reporting for syntax errors
According to doc, dofile() raises an error when parsing failed due to syntax errors.
Fixes #2775
2015-06-12 20:23:31 +02:00
paramat
0b187ede4b Minimal: Add snow biome and jungleleaves nodes. Add mapgen aliases
Treegen: Remove alias checks from jungletree generation for speed
2015-06-12 08:20:19 +01:00
est31
c849d32a10 Reposition irrlicht timestamp in makefile 2015-06-11 23:56:54 +02:00
HybridDog
05f4e9ee08 More reliable serverlist behaviour
-> remember the previously loaded serverlist, and use if new one failed
-> show a "loading" serverlist
2015-06-09 16:44:43 +02:00
paramat
e481745433 Minimal: Edit mapgen aliases. Use blob ore for clay, update other ores. Update simple biomes. Cleanup code 2015-06-09 00:47:03 +01:00
HybridDog
8383a61eac Decrease minetest.after globalstep lag
* abort if theres no active timer
* only reduce the timer.time of all timers when its necessary
* move updating timers_to_add into a seperate function
2015-06-06 21:00:38 +02:00
paramat
74d8b341bc Mgv5/mgv7: Trigger biome recalculation at underwater surfaces 2015-06-03 06:37:10 +01:00
est31
ba3ff5ef39 Fix uninitialized variable error
If you run minetest with valgrind, you'll quickly notice uninitialized jump
depend error messages that point to s_base.cpp:131. This commit fixes those.
2015-06-02 13:55:02 +02:00
est31
b8a8be9c86 Nicer time setting logging
Now logs

ACTION[ServerThread]: player sets time to 6:03

instead of

ACTION[ServerThread]: player sets time to 6:3
2015-06-02 06:49:05 +02:00
est31
e479337c1a Fix wrong replace from previous commit 2015-06-02 00:20:12 +02:00
est31
6df6b2a0e0 Localize inside whole misc_helpers.lua 2015-06-01 18:18:18 +02:00
est31
617a3d426f Make split method static 2015-06-01 17:04:21 +02:00
est31
06a2eee692 Mapblock: nodecount refactor
Spare direct multoplication, use constant MapBlock::nodecount instead of
local nodecount variables.

Also use strides at one place instead of multiplications.
2015-05-31 06:24:41 +02:00
SmallJoker
b4dfaa3a7a Only retrieve always_fly_fast setting once 2015-05-30 22:29:36 +02:00
Craig Robbins
addf3ee165 (Android) Only simulate holding down fast key if fast_move is toggled to true 2015-05-29 22:59:21 +10:00
kwolekr
522acf920f Make get_biome_list() error message more helpful 2015-05-28 20:04:50 -04:00
Kahrl
0f15488eae Fix typo in variable name 2015-05-28 20:47:15 +02:00
TeTpaAka
c0335f7d13 Add some missing getter functions to the lua API
ObjectRef:
get_properties
get_armor_groups
get_animation
get_attach
get_bone_position

Players:
get_physics_override
hud_get_hotbar_itemcount
hud_get_hotbar_image
hud_get_hotbar_selected_image
get_sky
get_day_night_ratio
get_local_animation
get_eye_offset

Global:
minetest.get_gen_notify
minetest.get_noiseparams
2015-05-28 16:46:35 +02:00
est31
990a96578f Consistent const string params
Parent commit broke behaviour.
Thanks @TeTpaAka for testing the fix.
2015-05-27 13:23:09 +02:00
est31
21878c9d5c Spare some string copies 2015-05-27 11:45:40 +02:00
paramat
f16ebbfecf Mgv6: Enable snowbiomes by default. Double biome noise spread. 3 octaves, 0.5 persistence for humidity 2015-05-26 02:08:06 +01:00
est31
6b7fb591cb Small clientiface ASCII art improvements
Use v arrows except where there is only one line between two boxes,
and other improvements
(Yea could use ↓ but its an ASCII art not an Unicode art).
2015-05-24 16:33:22 +02:00
paramat
774e5d17c4 Biome API, mgv7: Increase heat/humidity spreads. Improve mgv7 noise parameters 2015-05-24 04:33:09 +01:00
paramat
3dba6d1f90 Mgv5/v7: Fix generateBiomes biome recalculation logic Biomegen down to y = -192 for mgv5 deep oceans. Improve code 2015-05-23 02:18:30 +01:00
SmallJoker
39869aaa25 Fix Windows build, clean up included headers
Also fix a startup error caused by s_security.cpp
2015-05-22 20:37:59 +02:00
est31
e13d2bafc6 Deny empty username early in the protocol
Thanks to @UltimateNate for pointing this out :)
2015-05-22 20:24:39 +02:00
est31
9facb40738 Don't ignore nametag attribute change message for newer versions
This allows newer versions to add additional information that isn't
read by us, but still in a backwards compatible manner.
2015-05-21 19:01:46 +02:00
est31
2853b40de1 Fix documentation for texture override face selector behaviour 2015-05-20 19:58:27 +02:00
kwolekr
da34a2b33e Replace instances of std::map<std::string, std::string> with StringMap
Also, clean up surrounding code style
Replace by-value parameter passing with const refs when possible
Fix post-increment of iterators
2015-05-19 16:10:49 -04:00
rubenwardy
603297cc35 Add texture overriding 2015-05-19 21:27:07 +02:00
kwolekr
43702ec6ac Fix build with libstdc++
libstdc++ doesn't include <cstring> inside of <string>, unlike libc++.
2015-05-19 02:38:48 -04:00
kwolekr
6c5a6967ec Split ObjDef/ObjDefManager out to objdef.cpp 2015-05-18 22:30:25 -04:00
est31
497299afd6 Lower log level for unexpected behaviour
Its a possible mistake to log in to a server with twice the same name.
Before, it triggered a server wide error message, now it logs to actionstream.
2015-05-19 00:55:58 +02:00
est31
d2ca662569 Enforce hiding nametag
Work around irrlicht bug and hide nametag if its alpha is set to 0.
Thanks @TeTpaAka for pointing out workaround.
2015-05-18 23:10:48 +02:00
est31
5b03857c62 Add more swp files to gitignore
Specifically, the added rule matches .kate-swp files.
2015-05-18 21:24:57 +02:00
est31
23984ef7f0 Make nametags white again
Commit 11a96e4901
commented out version parsing, resulting in the version byte being parsed as part of the color,
making nametags dark grey.
Re-introduces version parsing and ignores the packet if the version is more recent than ours,
fixing the unused variable warning (should have been done anyway).
2015-05-18 21:11:41 +02:00
kwolekr
20aa78cffb Fix null dereference when loading schematic from definition without a NodeDefManager 2015-05-17 22:32:35 -04:00
kwolekr
46684beec1 Record MapBlock modification reasons as flags instead of strings
This improves performance of MapBlock::raiseModified by a factor of 6.
Also, clean up mapblock.h a bit and inline small functions.
2015-05-17 22:14:26 -04:00
kwolekr
4c9a8a91c4 SAPI/Noise: Add PerlinNoiseMap:getMapSlice() function
This adds the ability to grab 'slices' of noise calculated by PerlinNoiseMap.
Retrieving smaller slices of noise from the computation result as needed
optimizes memory usage while maintaining a reasonable amount of CPU overhead.
2015-05-17 04:04:17 -04:00
paramat
c0edb8e313 Mapgen v5/v7: Detect sandstone, enable sandstone brick dungeons 2015-05-17 06:07:39 +01:00
kwolekr
3ffb5f5761 Add optional buffer param for bulk data array writes in Lua 2015-05-17 00:07:45 -04:00
kwolekr
28b2476b11 Noise: Fix interpolation at negative coordinates 2015-05-17 00:04:51 -04:00
ShadowNinja
c00b6812b1 Fix current mod name change missed during rebase 2015-05-16 21:12:03 -04:00
kwolekr
11a96e4901 Add -Wsign-compare for Clang builds and fix some signed/unsigned compiler warnings 2015-05-16 20:15:03 -04:00
kwolekr
fb36c471d7 SAPI: Accept either ARGB8 table or ColorString to specify colors 2015-05-16 20:15:03 -04:00
ShadowNinja
8f9af57314 Add core.get_dir_list 2015-05-16 18:33:22 -04:00
ShadowNinja
6c06330daf Add core.request_insecure_environment() 2015-05-16 18:33:19 -04:00
ShadowNinja
05ab9973f9 Add core.mkdir 2015-05-16 18:32:37 -04:00
ShadowNinja
3a8c788880 Add mod security
Due to compatibility concerns, this is temporarily disabled.
2015-05-16 18:32:31 -04:00
LeMagnesium
f26421228b Added hour:minute format to time command
* The time command now accepts parameters in the form <hour>:<minute>,
    and if invoked with no parameters returns the current time in said format.
2015-05-16 18:15:34 -04:00
est31
c297a75a7d Fix build since last commit
Also rename method to better match what it does.
2015-05-16 22:14:15 +02:00
est31
8dbf683313 Finalize init packets and enable protocol v25
This enables srp.
2015-05-16 21:17:28 +02:00
TeTpaAka
19cbb6b37b Add push_ARGB8 to script/common/c_converter 2015-05-15 16:21:56 -04:00
TeTpaAka
18c2f16c13 Generalize core.get/set_nametag_color into core.get/set_nametag_attributes 2015-05-15 16:21:01 -04:00
kwolekr
5d1d7c17ea Noise: Make buffer size parameters unsigned 2015-05-15 16:20:30 -04:00
kwolekr
eaef678e0b Schematics: Fix probability values for .mts version 1 2015-05-15 16:20:30 -04:00
Brandon
c5b4e54174 Add minetest.register_on_punchplayer 2015-05-15 11:09:55 +02:00
TeTpaAka
86a963caca Add get and set functions for the nametag color 2015-05-15 11:03:27 +02:00
Craig Robbins
99cf53c908 ANDROID: Do not limit situations where fast is enabled
Before this commit autofast for Android was ignored if the user was sneaking, digging or building. There is no reason for this and it impedes movement control
2015-05-15 13:22:07 +10:00
est31
33a633a631 Fix libgmp for Android
Android terminated immediately after start since commit
181f7baa45
because library wasn't loaded, and libminetest.so required
libgmp.so.10 instead of libgmp.so.

The second issue has been solved by the linker flags.
2015-05-15 05:08:59 +02:00
tenplus1
be18bd6a8c Don't crash if an item gets dropped into unloaded space
Items dropped into unloaded map space will crash game so here's a fix...
2015-05-15 00:15:25 +02:00
est31
178f536f08 Item entity merging refactor
Don't ident too much, and add a comment.
2015-05-15 00:06:18 +02:00
est31
b70e67df8c Fix compiler warning about sign comparison 2015-05-13 00:04:30 +02:00
SmallJoker
ecc514f11b Build and link gmp correctly on MSVC
Also optimize json's library
2015-05-12 21:07:46 +02:00
Novatux
75622c30be Add code to support raillike group names 2015-05-12 20:48:55 +02:00
est31
b4c3ff6eab is_player() is no player-only function 2015-05-12 05:52:49 +02:00
paramat
02805af36e Mapgen v5/6/7: Cleanup node resolver and aliases 2015-05-12 04:40:53 +01:00
est31
82e35edff5 Make early protocol auth mechanism generic, and add SRP
Adds everything needed for SRP (and everything works too),
but still deactivated, as protocol v25 init packets aren't final yet.
Can be activated by changing the LATEST_PROTOCOL_VERSION header to 25
inside networkprotocol.h.
2015-05-11 18:40:27 +02:00
est31
181f7baa45 Add LibGMP
Uses system provided libgmp if found, if not it falls back to mini-gmp.
2015-05-11 17:48:33 +02:00
Megaf
58eae43322 Replaced libjpeg dependency on apt-get, it should be libjpeg-dev instead of libjpeg8-dev.
On Debian 8...
```
Package libjpeg8-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  libjpeg62-turbo-dev
```
Using libjpeg-dev should make the OS select the most appropriate lib to be installed.
These are the packages available on Debian 8.
```
libjpeg-dev - Development files for the JPEG library [dummy package]
libjpeg-turbo-progs - Programs for manipulating JPEG files
libjpeg-turbo-progs-dbg - Programs for manipulating JPEG files (debugging symbols)
libjpeg62-turbo - libjpeg-turbo JPEG runtime library
libjpeg62-turbo-dbg - Debugging symbols for the libjpeg-turbo JPEG library
libjpeg62-turbo-dev - Development files for the libjpeg-turbo JPEG library
libturbojpeg1 - TurboJPEG runtime library - SIMD optimized
libturbojpeg1-dbg - TurboJPEG runtime library - SIMD optimized (debugging symbols)
libturbojpeg1-dev - Development files for the TurboJPEG library

```
This seems to work on all current Debian versions, Wheezy, Jessie and Sid.
https://packages.debian.org/wheezy/libjpeg-dev
https://packages.debian.org/jessie/libjpeg-dev
https://packages.debian.org/stretch/libjpeg-dev

Im not sure if Ubuntu has this dummy package.

http://packages.ubuntu.com/search?keywords=libjpeg-dev

Perhaps this should be further discussed.

libjpeg8-dev -> libjpeg-dev
2015-05-11 20:56:11 +10:00
Craig Robbins
5a1975a4e3 Change lower limit of display_gamma to 1.0 (linear light)
Now matches function comment
2015-05-11 02:03:09 +10:00
kwolekr
2b99d904f6 Schematics: Add per-node force placement option 2015-05-09 18:44:00 -04:00
kwolekr
d59e6ad004 Fix typo in WieldMesh::setItem() 2015-05-08 23:30:56 -04:00
kwolekr
ff740a4179 Ensure that Map::findNodesWithMetadata() reports nodes strictly within the node-granular area 2015-05-08 13:31:03 -04:00
kwolekr
f1ccfd3c3d Replace Wieldmesh::setItem assertion that could be triggered by the server with an error 2015-05-08 13:26:31 -04:00
est31
0310123bc9 Fix release build warning 2015-05-08 07:23:41 +02:00
kwolekr
f091bbd563 Fix compilation for non-client builds, and fix signed comparison warning 2015-05-08 01:21:34 -04:00
kwolekr
2dba29ebf2 Tests: Add schematic unittests
Improve schematic file-saving interface
Add ability to create temporary test files
2015-05-08 00:55:42 -04:00
est31
33c11415bf Gracefully handle PacketErrors 2015-05-08 06:51:03 +02:00
kwolekr
0e64fc45b9 Fix missing Y component assignment in check_v3f 2015-05-08 00:03:41 -04:00
paramat
77e4a467f0 Conf.example: Update recommended maximum cloud radius to 26 2015-05-08 01:17:50 +01:00
Kevin Ott
e17c6ba2cd Remove duplicate lua_getfield() in c_converter.cpp
Fixes #2678
2015-05-07 09:57:34 +02:00
kwolekr
b246812455 Schematics: Add indent-with-space option for schematic Lua table serialization 2015-05-07 02:54:35 -04:00
kwolekr
656575b59d NodeResolver: Remove NodeResolveMethod
This simplifies NodeResolver logic and makes some interfaces cleaner.
2015-05-07 02:36:01 -04:00
ShadowNinja
d720fd5644 Fix connection speed unit names 2015-05-06 15:41:37 -04:00
ShadowNinja
3a8e7341ec Fix error messages for type-checking Lua reading functions 2015-05-06 15:33:36 -04:00
ShadowNinja
3f5c2dea4d Improve Redis error messages 2015-05-06 15:28:22 -04:00
kwolekr
2b44e75442 Fix build on Debian broken by b45df9d (missing include, somehow?) 2015-05-05 20:40:18 -04:00
kwolekr
633af58a05 NodeDefManager: Improve const-correctness of interfaces
- Add ability to explicitly reset NodeResolve state (useful for unittesting)
- Remove non-essential NodeResolve methods modifying state from INodeDefManager
- Add const qualifier to NodeDefManager and ContentFeatures serialize
2015-05-05 16:52:06 -04:00
kwolekr
b785577f03 Add core.find_nodes_with_meta() script API 2015-05-05 16:21:59 -04:00
kwolekr
b45df9d6a7 Tests: Add NodeResolver unittests
Minor misc. NodeResolver cleanups
Prefix faux content type constants for testing with t_ to avoid
confusion or name collisions
2015-05-05 12:00:36 -04:00
ShadowNinja
1be2d32fd5 Make Git version detection use VERSION_STRING instead of tags
This fixes the problem where 0.4.12-dev versions were erroneously shown as
0.4.11-dev because the tag was added on a separate branch.  It also fixes a
similar issue when builders didn't fetch new tags when updating.

This also removes the number-of-commits-since-tag field, since it's
incompatible with this.  Said field doesn't seem to be useful anyway if you
have the commit hash.
2015-05-05 17:13:05 +02:00
ShadowNinja
dfd790930c Fix GCC compiler warning 2015-05-04 20:01:10 -04:00
Jay Arndt
2923eafaca Stop NetworkPacket methods from producing bloated packets 2015-05-05 01:47:41 +02:00
Mahmut Elmas
3ee854cf25 Update Turkish Language
Added some new translations
Fixed some overlenght lines
2015-05-05 00:50:53 +02:00
est31
4b0f5fcbf5 Cache enable_3d_clouds flag
Small improvement on clouds rendering performance
2015-05-04 22:50:04 +02:00
paramat
9345ba7b6a Clouds: Make cloud area radius settable in .conf 2015-05-04 22:41:13 +02:00
Kevin Ott
5fa4fed097 Add a check for animation when getting an extruded mesh
Fixes issue #2667
2015-05-04 02:11:36 -04:00
obneq
9af7f38e3f Fix pathfinder to produce more useful paths
- Fix unintended negation of condition
- Remove line_of_sight 'optimization'
2015-05-03 22:36:11 -04:00
kwolekr
8f38f8255c Tests: Add ObjDef unittests 2015-05-03 22:19:35 -04:00
kwolekr
5b237b4d94 ObjDefManager: Set replacement object's handle info after calling set()
Make gamedef optional when constructing an ObjDefManager
Add note about object ownership
2015-05-03 22:19:35 -04:00
est31
5704fb36d2 Better version detection for shallow clones 2015-05-03 16:47:22 +02:00
paramat
9e1e4b6284 RotateAlongYAxis: For facedir case, return if param2 >= 4 2015-05-03 03:43:51 +01:00
est31
aef1b41b02 Add .patch files to gitignore 2015-05-01 07:42:08 +02:00
SmallJoker
6626a3f72f Fix several MSVC issues numeric.h
-> Round negative numbers correctly CMakeLists.txt
-> Link Json with the static run-time library
2015-05-01 07:34:51 +02:00
kwolekr
37ca3212ee Fix MSVC compatibility
Make sure to include random unittests in android builds, too
Use SWAP() macro
Ensure that negative ranges are tested as well in random unittests
2015-04-29 13:20:01 -04:00
kwolekr
b6475f5448 Tests: Add random unittests 2015-04-29 04:08:04 -04:00
mich1
9179081776 Add Russian comment translation to minetest.desktop 2015-04-27 18:14:58 +02:00
sfan5
4ea5a96fff Revert the upper-case PROJECT_NAME nonsense that was part of #2402 2015-04-27 16:24:49 +02:00
sfan5
558d715bf6 Revert "Only lowercase project name at compile time"
This reverts commit 3be9787e64.
2015-04-27 16:24:49 +02:00
kwolekr
415167b228 Noise: Fix PcgRandom::randNormalDist() when range contains negative numbers
This fixes an issue with erroneous float-to-int rounding that resulted in
truncation toward 0, causing a biased distribution.
2015-04-27 04:05:25 -04:00
kwolekr
cd1d625ab2 Replace PRNG assertions with PrngException 2015-04-27 01:24:37 -04:00
Tomas Brod
732eb72a0c Fix minetest.clear_* creating new LOCAL table instead of clearing the existing one.
On calling clear_redistered_biomes the registered_biomes table is cleared
by creating a new empty table, but the pointer is not updated to point to
the new one. So after calling more register_biome, the registered_biome
table always contains 0 items, which is an error. Instead, the table is
cleared by removing all its items so the pointer (minetest.registered_*)
remains valid.
2015-04-26 15:45:58 -04:00
kwolekr
068d561a3c Update .gitignore 2015-04-26 15:40:19 -04:00
est31
27e3a353d8 Remove craftdef serialisation
It isn't needed anymore, sending ICraftDefManager over the network has been obsoleted
by protocol version 7.
2015-04-26 21:30:52 +02:00
est31
4f851faa91 Craftdef refactor
Fix style, refactor assert, use '"' instead of "\"",
replace code duplicating craftGetItemName, rename iterators.
2015-04-26 21:28:40 +02:00
kwolekr
7220ca906d Tests: Modularize unit testing
Split unit tests into separate files under src/unittest/
Give better unittest diagnostics
Clean up some code
2015-04-26 15:08:54 -04:00
fishyWET
45a77c8bf1 Update chinese translation
fixed some mistakes and added in some new translations
2015-04-27 01:17:10 +10:00
Aaron Suen
1fb3d1156c Fix fast leaves with texture_clean_transparent enabled. 2015-04-26 23:39:40 +10:00
Kevin Ott
400c6087b6 Fix player pitch and yaw not being set properly 2015-04-26 23:36:05 +10:00
Muhammad Rifqi Priyo Susanto
1c7c349264 Remove fly mode in simple main menu
As the fly mode option is avaiable in-game, this is not used anymore.
2015-04-26 23:35:32 +10:00
est31
e3764410d3 German translation: shorter setting name 2015-04-24 20:25:33 +02:00
nerzhul
ab04b7fe94 Remove unused variable Client::m_active_blocks 2015-04-24 15:41:45 +02:00
paramat
ac6efa2539 DecoSchematic: Fix missing trees in rough terrain
Move place_on check to before place_center_x/y/z displacement of p
Reduce displacement of p by place_center_x/y/z flags
to correctly position schematics
2015-04-23 02:44:25 +01:00
est31
ccc09abc2d Protocol 25: wstring -> string for custom access denial reasons
Also fix std::logic_error when server::DenyAccess() is used with only two arguments.
2015-04-22 14:10:39 +02:00
nerzhul
eec01bc2fa Re-apply 972d17baea81ffe6d508b291ef97207a4822e1da...
but not rename the container. Approved-By est31
2015-04-22 11:47:22 +02:00
SmallJoker
17a173f474 Fix crash on startup (Windows) 2015-04-22 13:48:10 +10:00
ShadowNinja
3be9787e64 Only lowercase project name at compile time 2015-04-21 20:51:16 -04:00
kwolekr
e0eec201a1 Revert "m_active_object_messages is used like a queue. Use std::queue instead of std::list. Also rename to m_active_object_messages_queue"
This reverts commit 972d17baea.
The commit being reverted was unauthorized.  There had been no discussion,
review, or sign-off prior to submittal to upstream.
2015-04-21 18:12:01 -04:00
Loic Blot
972d17baea m_active_object_messages is used like a queue. Use std::queue instead of std::list. Also rename to m_active_object_messages_queue 2015-04-21 23:28:13 +02:00
ShadowNinja
436cb468e9 Add minetest.global_exists() 2015-04-21 22:58:37 +02:00
kwolekr
943c6e523e Noise: Add noise unittests
Fix buffer size calculation for lacunarity < 1.0
Add guard against absurd noise parameters
2015-04-21 13:05:14 -04:00
ShadowNinja
c197e03922 Fix sign-compare compiler warnings in mg_ore.cpp 2015-04-20 22:57:30 -04:00
ShadowNinja
d36067fda5 Fix mod store rating 2015-04-20 22:48:14 -04:00
kwolekr
46a2c1f167 Ore: Add biomes parameter 2015-04-20 20:25:33 -04:00
kwolekr
a443a13a9d Fix build on OS X (Thanks neoascetic) 2015-04-20 01:35:41 -04:00
kwolekr
3d4244cc75 Add 'persistence' alias for Lua noiseparams and validate more vector parameters 2015-04-19 21:42:40 -04:00
kwolekr
687d969c9c Noise: Correct noise objects created with invalid dimensions 2015-04-19 21:39:10 -04:00
kwolekr
386d695330 Porting: Refactor initalizePaths()
Add support for Solaris and HP-UX
Search additional potential procfs locations for current executable
2015-04-19 16:52:58 -04:00
est31
f1a41e4f77 Disable connection timeout for singleplayer and server tabs
In worlds with many mods we can easily reach timeout, waiting for the server to start.
2015-04-19 19:58:21 +02:00
paramat
a615da6b12 Biome API: Add biome-specific river water 2015-04-19 06:09:57 +01:00
obneq
0c792db05c fix infinite spawners 2015-04-18 20:14:34 +02:00
kwolekr
e0889c6c03 Schematics: Fix core.schematic_create() 2015-04-17 18:39:37 -04:00
SmallJoker
5f0b36b8b7 10s timeout when connecting to server 2015-04-17 10:40:48 +02:00
est31
d4d561fbcd Fix build since: "Remove referenced schematics from Decorations on clear"
Fixes build, which has been broken for all platforms (except BSD?) since
grandparent 406d9ba87b.
Thanks to @SmallJoker for pointing out a solution.
2015-04-17 10:30:59 +02:00
kwolekr
3576f4fab7 Switch to check_v3s16 in l_mapgen.cpp and l_vmanip.cpp for type safety 2015-04-17 01:03:13 -04:00
kwolekr
406d9ba87b Schematics: Remove referenced schematics from Decorations on clear 2015-04-17 00:53:05 -04:00
est31
f0a1379e5a Refactor around translatePassword
Change types for passed password from wstring to string, which removes converting
back and forth in most cases. Move the narrow_to_wide conversion, where its neccessary,
closer to irrlicht. Remove trailing spaces in guiPasswordChange.cpp. Make parameters for
translatePassword passed as const reference.
2015-04-17 06:10:30 +02:00
kwolekr
821d0025da Biomes: Remove referenced biomes from Decorations on clear 2015-04-16 23:38:05 -04:00
est31
4abb96fb54 Fix path detection with --std= parameter
Fixes path detection when compilers have been told to follow a standard, e.g. with -DCMAKE_CXX_FLAGS=--std=c++98.
To see the passed defines, try this with and without the --std parameter:
gcc -E -dM --std=c99 - < /dev/null | grep linux
2015-04-17 05:12:06 +02:00
est31
b318c4712c Fix build for < C++11 since last commit
Build broke since last commit 479f38973e for compilers not supporting C++11.
Pre C++11, the constructor of std::ifstream only allows C like strings.
2015-04-17 02:34:02 +02:00
kwolekr
479f38973e Schematics: Refactor NodeResolver and add NodeResolveMethod
NodeResolver name lists now belong to the NodeResolver object instead of
the associated NodeDefManager.  In addition to minimizing unnecessary
abstraction and overhead, this move permits NodeResolvers to look up nodes
that they had previously set pending for resolution.  So far, this
functionality has been used in the case of schematics for
serialization/deserialization.
2015-04-16 16:27:05 -04:00
Loic Blot
0c634a9719 Use std::vector instead of std::set for Environment::getObjectsInsideRadius
We are only iterating sequentially, we don't need a set here
Also use a vector reference instead of a copy
2015-04-16 18:37:29 +02:00
paramat
d02300a749 Mgv5: Fix above/below ground spawn when water level is altered 2015-04-16 06:36:57 +01:00
paramat
ad789be45b Mgv5/v7: Add check for water for deciding biome node stability 2015-04-16 04:01:58 +01:00
paramat
a09e4427d6 Defaultsettings: Add dungeons and jungles flags. Update conf.example 2015-04-14 02:04:57 +01:00
kwolekr
b2a89c04b2 Schematics: Reorganize (de)serialization and add Lua serialization API 2015-04-13 03:10:52 -04:00
paramat
39fd4da7a0 Conf.example: Update, fix and improve mapgen flags docs
Remove dynamic weather year parameter
2015-04-13 07:35:25 +01:00
ngosang
8c688bfd07 Add Spanish comment translation to minetest.desktop 2015-04-12 19:08:23 +02:00
paramat
a5f942c3c0 Mgv6: Fix taiga, allow pine tree spawning on snowblocks 2015-04-12 05:52:41 +01:00
paramat
75cbd80e5b Mgv6: Add optional snow biomes 2015-04-12 04:27:26 +01:00
Ner'zhul
ce8a9ed94b Fix a rare crash case un SendPlayerHP
If the player is disconnected while Lua API is doing a l_punch call, for example, the playersao is NULL and the server crash. Fix it.
2015-04-11 10:07:23 +02:00
est31
0a413265cb Document for api functions that rely on current_modname, that it doesn't work when not loading mods 2015-04-08 23:05:26 +02:00
kwolekr
c758fd73ff Link against shlwapi.lib and unify linker input sources for Windows 2015-04-08 12:56:53 -04:00
Dmitry Marakasov
d2fc98e4a6 Fix freetype detection
Don't reinvent freetype detection, use working one from cmake.
2015-04-08 00:37:27 -04:00
kwolekr
0df736173e Schematics: Prepend mod path to relative schematic filepaths 2015-04-08 00:28:56 -04:00
Loic Blot
5132908f4b TOCLIENT_ACTIVE_OBJECT_MESSAGES: channel must be 1 for unreliable message 2015-04-07 14:28:36 +02:00
ShadowNinja
3c6e112c28 Fix missing SQLite3 statement pointer initialization
This fixes a segfault when the database is shut down
before it finishes connecting and setting up.
2015-04-07 00:31:41 -04:00
paramat
392ac41c99 Cavegen: Remove now unnecessary checks for water, lava, ice
Remove large cave checks for air
Mgv5/mgv7:Add is_ground_content checks to 3d noise tunnels
More large caves
Shorten lines
2015-04-07 04:43:24 +01:00
est31
f81759792e Make comments consistent with TOSERVER_INIT -> TOSERVER_INIT_LEGACY rename 2015-04-07 00:15:15 +02:00
Craig Robbins
43aab618e5 Change screenshot filename to one likely to work on all modern filesystems
Fixes #2603
2015-04-06 11:07:51 +10:00
Loic Blot
8804c47e59 TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD can be unreliable, catch PacketError exception.
Also set the packet size at creation not when pushing rawString, no functional change
2015-04-05 11:39:38 +02:00
Loic Blot
ed3ebd633d craftdef.cpp: Return 0 after assert to make Clang happy 2015-04-05 11:16:12 +02:00
Loic Blot
4235f671c1 Fix uninitialized variabled in ConnectionEvent 2015-04-05 11:13:30 +02:00
est31
334e70455b Crafting speedup
This greatly increases crafting performance, especially in worlds with many mods.

Approved by @kwolekr.

Introduces a hash-type-layered fall-through mechanism, where every layer specifies one hash algorithm,
and the "deeper the fall", the more collisions to expect for the algorithm. One Craft definition
only resides at one layer, which improves speed for lower layers (and a complete fail), due to most
craft definitions residing at high layers.

Due to the fall-through design, the undocumented behaviour that later craft recipes
override older ones had to be weaked up a bit, but craft recipes with the same hash and layer
will still override.
2015-04-05 09:25:46 +02:00
est31
fedbbc8883 Add reason to kicked log message and use present tense 2015-04-05 04:18:47 +02:00
est31
1cb404522f Remove errorstream logging on password change
This seems to be a debug message which has been forgotten to be removed.
2015-04-03 14:01:41 +02:00
Loic Blot
470de10de3 Fix players spawned at (0,0,0) in some rare cases instead of static_spawnpoint, if set
Approved by: @kwoelkr
2015-04-03 09:44:36 +02:00
Loic Blot
aa340fd857 Create PacketError exception and use it with ACTIVEOBJECT_REMOVE_ADD handler which can be unreliable 2015-04-03 08:53:31 +02:00
Aaron Suen
92f20696eb Fix crash caused by null texture in GUI formspec/HUD. 2015-04-02 23:56:46 +10:00
SmallJoker
58d62ad045 Fix MSVC error caused by ed10005 2015-04-02 22:56:36 +10:00
paramat
74eb14cc80 Treegen: Add pine tree. Force place trunks
Speed-optimise leaves blits
Use MMVManip for make_jungletree
Use correct code style
2015-04-01 22:54:49 +01:00
Craig Robbins
9527984dbc Move globals from main.cpp to more sane locations
Move debug streams to log.cpp|h

Move GUI-related globals to clientlauncher

Move g_settings and g_settings_path to settings.cpp|h

Move g_menuclouds to clouds.cpp|h

Move g_profiler to profiler.cpp|h
2015-04-01 23:04:25 +10:00
Loic Blot
113bdd3ec0 NetworkPacket: reading outside packet is now clearer.
Use a common function to check the reading offset
2015-04-01 14:47:46 +02:00
kwolekr
ddf96c7a17 Fix some minor details from 6d61375 2015-04-01 00:19:10 -04:00
Aaron Suen
6d61375cc7 Clean scaling pre-filter for formspec/HUD. 2015-04-01 00:01:05 -04:00
kwolekr
b4247dff2e Fix usage of destroyed mutex
Also fix a memory leak
Fix overloaded virtual warning in Player::move()
Remove some trailing whitespace
2015-03-31 23:50:38 -04:00
kwolekr
699e066bea Fix set_bits 2015-03-31 23:30:44 -04:00
kwolekr
337e79c656 ObjDefManager, Mapgen SAPI: Huge refactoring
- General code cleanup
 - Unified object creation and loading
 - Specifying objects in APIs is now orthogonal (i.e. anything can take an ID,
   name string, or the raw table definition (and automatically registers if present
2015-03-31 23:27:58 -04:00
Craig Robbins
d1d5618bb8 Fix use of unitialized variable in gettext.cpp
#2583
2015-03-31 21:26:34 +10:00
Loic Blot
1fe4256462 Connection::Receive(): receive Network Packet instead of SharedBuffer<u8>.
Because we get a Buffer<u8> from ConnectionEvent, don't convert it to SharedBuffer<u8> and return it to Server/Client::Receive which will convert it to NetworkPacket
Instead, put the Buffer<u8> directly to NetworkPacket and return it to packet processing
This remove a long existing memory copy
Also check the packet size directly into Connection::Receive instead of packet processing
2015-03-31 11:01:08 +02:00
Loic Blot
ab77bf98ee RunCommandQueues: little optimization
remove command from queue on success, else do nothing, instead of remove command from queue and push it front on success
2015-03-31 09:29:33 +02:00
Loic Blot
7c121726dc Typo in getOutgoingSequenceNumber => successfull to successful 2015-03-31 09:18:11 +02:00
Aaron Suen
db32e6c5aa Move texture_min_size even further down the pipe. Now, textures are JIT-upscaled using an image transformation, right at the time they're added to a mesh or particle; images used in 2D elements are left unscaled. This should fix any remaining issues with HUD elements. 2015-03-31 16:56:33 +10:00
Craig Robbins
862d4ea328 Change format of screenshot names
Filename screenshot_ + ISO 8601 format + [-serial]

i.e. screenshot_YYYY-MM-DDTHH::MM::SS[-serial].png

Serial is added if the filename + timestamp already exists and is in the range 1 to 999
2015-03-31 16:24:25 +10:00
kwolekr
ed10005d38 GenElementManager: Pass opaque handles to Lua and rename to ObjDefManager
Add core.clear_registered_schematics() and refactor schematics somewhat
2015-03-31 01:11:51 -04:00
Loic Blot
6a48844eba Use Buffer not SharedBuffer in NetworkPacket::oldForgePacket 2015-03-30 19:55:14 +02:00
Craig Robbins
ff924ef0dc On Android enable always fast
Invert the meaning of holding down the fast button (i.e. holding down the fast button -- if there is one -- means walk), unless performing an action, sneaking or jumping.
Still requires fast move to be toggled on (and fast priv)
2015-03-30 00:40:12 +10:00
Craig Robbins
bf06b68c96 Let main menu scale (non-Android)
This fixes main menu not fitting for 800x600 (and lower resolutions) on PC builds
2015-03-30 00:33:07 +10:00
Craig Robbins
5ee0d8ac81 Fix Android build-related bugs
E.g. Sound and freetype always being disabled, redefinition of pre-processor directives
2015-03-29 22:27:01 +10:00
Craig Robbins
e1475bdc89 Make sure g_timegetter is initalised before running speedtests
Thanks @SmallJoker for noticing the issue
2015-03-29 22:21:32 +10:00
Craig Robbins
34101015b2 Fix typo 2015-03-29 22:08:14 +10:00
Craig Robbins
e3d69f2920 Update credits 2015-03-29 21:31:13 +10:00
Loic Blot
dfe00abc5a queued_commands must be a std::deque. RunCommandQueues needs to push packet on front, not back 2015-03-29 10:49:43 +02:00
Loic Blot
3444dec2db Fix uninitialized variable Player::local_animation_speed 2015-03-28 10:46:01 +01:00
Rui
b21230b329 Update minetest.po
Update minetest.po

Update minetest.po
2015-03-28 16:05:29 +10:00
Craig Robbins
2430b2e998 Add Lua function get_video_modes() for main menu
Also updates and uses porting::getSupportedVideoModes()
2015-03-28 13:26:03 +10:00
ShadowNinja
3ef0b4e637 Make camera clear error message if there's no error 2015-03-27 22:20:10 -04:00
ShadowNinja
5659434d32 Fix GetText translation loading 2015-03-27 22:10:08 -04:00
ShadowNinja
30075467b8 Change error_message from wstring to string
This removes a lot of narrow/wide conversions where a wide string was never used.
2015-03-27 20:24:04 -04:00
ShadowNinja
3d53c90d4b Fix MSVC compile error 2015-03-27 15:16:41 -04:00
ShadowNinja
e680d49774 Document nil player as being allowed for can_dig 2015-03-27 15:11:28 -04:00
ShadowNinja
393722a9e3 Fix typo in OpenGL ES 2 CMake file 2015-03-27 15:10:27 -04:00
ShadowNinja
93fcab952b Clean up and tweak build system
* Combine client and server man pages.
  * Update unit test options and available databases in man page.
  * Add `--worldname` to man page.
  * Fix a bunch of places where `"Minetest"` was used directly instead of `PROJECT_NAME`.
  * Disable server build by default on all operating systems.
  * Make `ENABLE_FREETYPE` not fail if FreeType isn't found.
  * Enable LevelDB, Redis, and FreeType detection by default.
  * Remove the `VERSION_PATCH_ORIG` hack.
  * Add option to search for and use system JSONCPP.
  * Remove broken LuaJIT version detection.
  * Rename `DISABLE_LUAJIT` to `ENABLE_LUAJIT`.
  * Rename `minetest_*` variables in `version.{h,cpp}` to `g_*`.
  * Clean up style of CMake files.
2015-03-27 15:00:48 -04:00
Loic Blot
284fefb0c3 Remove duplicate code since 8ca08a850f 2015-03-25 09:08:17 +01:00
Wuzzy
b711d9040f Update German translation and minetest.pot 2015-03-25 09:04:54 +01:00
paramat
d1681872bf lua_api/l_mapgen: generate_ores/decorations: make p1, p2 optional 2015-03-24 18:07:29 +00:00
Craig Robbins
4fbcfac6cf Change filename of screenshots to something more human readable 2015-03-25 02:55:28 +10:00
Craig Robbins
2641fcc4bb Update timestamp to include date 2015-03-25 02:30:17 +10:00
Loic Blot
7851c4f7a2 Don't send an InventoryAction at each setInventoryModified, we only need one SendInventory per inventory modification
Client doesn't like to receive multiples SendInventory for one action, this can trigger glitches on clients (sometimes due to incorrect UDP packet ordering due to UDP protocol)

This fix issue #2544
2015-03-24 14:13:17 +01:00
Craig Robbins
9fbc3a8ca3 Slow down the "key repeat" touch speed for some Android controls
Increases the key/buttons repeat delay for fly, noclip, fast, debug and camera buttons
2015-03-24 22:19:32 +10:00
kwolekr
732d7b9a7c Add core.register_schematic() and cache schematics on use 2015-03-23 22:23:38 -04:00
kwolekr
9fc2b93d9f Fix endianness inconsistency with PcgRandom::bytes() 2015-03-23 22:23:16 -04:00
kwolekr
a423202756 Schematics: Error if unable to open file 2015-03-23 22:22:14 -04:00
kwolekr
11372ac646 Do not enable texture_clean_transparent by default
This feature is still experimental and has some issues. Also,
increase texture_min_size to 64 px. The setting was initially
a conservative 16 so that the effect would not be noticable
for players who aren't using aniso/bi/trilinear filtering. This
isn't necessary now that texture_clean_transparent is disabled
by default.
2015-03-23 18:25:14 -04:00
paramat
37a6297025 Mgv6: Use heightmap in placeTreesAndJungleGrass() 2015-03-23 21:55:01 +00:00
Aaron Suen
6cf7c89236 Fix for sun/moon tonemaps: don't upscale 1px images. 2015-03-23 17:01:37 +10:00
est31
15d9cd3a6f Fix Android build on 32 bit
Remove the --system=linux-x86_64 which isn't neccessary on 64 bit,
as, when given no --system parameter, the standalone-toolchain.sh script
figures out the platform on itself. Naturally, the hardcoded setting broke
android building on 32 bit systems.
2015-03-23 14:11:39 +10:00
est31
c31c87adb5 Fix cmake po detection bug
Previously, cmake po detection would treat the "timestamp" file created by building for android as own language directory.
2015-03-23 13:43:18 +10:00
est31
5b5c498011 Fix minetest.get_craft_recipe function
Previously, calling it resulted in a crash.
2015-03-23 13:40:20 +10:00
Loic Blot
0ae75f2a4e Player: Fix a deadlock triggered by previous commit 0e5e49736c 2015-03-22 21:33:09 +01:00
Loic Blot
0e5e49736c Protect Player::hud from concurrent modifications
Sometimes HUD can be modified by ServerThread and EmergeThread results in a crash on client side because the HUD is not correct
2015-03-22 20:47:07 +01:00
paramat
d6638b4300 Mgv7: 1 up , 1 down overgeneration for chunk border continuity
Fixes biome layer at y = 47 when base/alt terrain exceeds it
Also fixes missing dust glitch at y = 47
Mgv5/mgv7:Cleanup code
2015-03-22 19:30:08 +00:00
Loic Blot
008d7e0467 Revert "Add a Lua call to do damages / heals" ok @ShadowNinja
This reverts commit 467fc0ddc9.
2015-03-22 18:01:56 +01:00
Loic Blot
61f2d0ca34 Remove unused ConnectionCommand::sendToAll function. NetworkPacket::oldForgePacket returns Buffer instead of SharedBuffer and is used in ConnectionCommand instead of Connection::Send
This remove the NetworkPacket buffer => SharedBuffer => Buffer copy. Now NetworkPacket => Buffer
2015-03-22 12:18:16 +01:00
kwolekr
761b127060 Fix some loose ends from 3993093f 2015-03-22 02:58:54 -04:00
kwolekr
3993093f51 Add support for the PCG32 PRNG algo (and associated script APIs) 2015-03-22 00:48:08 -04:00
poet-nohit
7679396ebb SendInventory when handleCommand_Interact is a use.
This call was missing when change looping to triggering SendInventory: 1b2f64473e
2015-03-21 21:37:32 +01:00
Aaron Suen
837a2e1e5f Fix composite textures with texture_min_size. Moved upscaling of textures to later in the process, when images are converted to textures, instead of right after image load, so the original image is unmodified for generateImagePart. 2015-03-22 01:31:01 +10:00
SmallJoker
709f4a50f7 Connect rails with connect_to_raillike and shorten the codes 2015-03-21 22:59:27 +10:00
gregorycu
03e0dd33a8 Optimize minetest.get_(all)_craft_recipe(s)
Signed off by: ShadowNinja, kwolekr
2015-03-20 21:41:18 -04:00
Aaron Suen
1e4fb80d46 Configurable automatic texture scaling and filtering at load time.
Signed off by: Zeno, kwolekr
2015-03-20 20:21:42 -04:00
kwolekr
26153bab7d Revert "Fix issue #2441: crash on respawn, since a conversion std::list to std::vector on Environment.cpp"
This reverts parts of commit 9749d9fee6, which breaks node resolver
list clearing
2015-03-20 18:41:26 -04:00
paramat
d03c2999da Mgv5/mgv7: Sprinkle dust from full_node_max.Y if chunk above is generated
Mgv5: Add large_cave_depth constant
2015-03-19 10:18:42 +00:00
Loic Blot
2676d289d9 Reset the old HP method on PlayerSAO::setHP 2015-03-19 07:47:45 +01:00
est31
538036d004 Fix game minetest.conf default settings
This was a regression introduced by f6e4c5d9cf .
2015-03-18 13:03:02 -04:00
Loic Blot
467fc0ddc9 Add a Lua call to do damages / heals 2015-03-18 14:52:35 +01:00
Loic Blot
8f2e9bfbc2 ServerpacketHandler: spelling fixes 2015-03-18 12:06:02 +01:00
paramat
22730bbc0c Mgv6: Remove addDirtGravelBlobs, replaced by blob ore in Minetest Game
Desert stone above y = -32 not water_level
Remove unused generateExperimental()
2015-03-18 10:55:58 +00:00
fz72
8ca08a850f Save creative_mode and enable_damage setting for each world in world.mt
Create Parameters on world initialisation and set settings of old worlds
2015-03-18 09:53:24 +01:00
Loic Blot
2f0107f4a7 MutexedQueue inherits must use std::deque instead of std::list 2015-03-17 17:12:20 +01:00
Loic Blot
94b3950958 Remove Android makefile ugly make -j hack 2015-03-17 15:48:48 +01:00
Pavel Puchkin
ca5df44edb Standalone bundle for OSX (w/ dependencies!) 2015-03-17 15:37:23 +01:00
Loic Blot
7685969274 Server::step throw is never catched in minetestserver
Replace it with an errorstream + assert for server

This throw can be trigger by LuaError exception or ConnectionBindFailed exception in the following functions:
* EmergeThread::Thread()
* ScriptApiEnv::environment_Step()
* ScriptApiEnv::player_event()
* ServerThread::Thread()
2015-03-17 15:26:20 +01:00
Loic Blot
814e55597d Use the NetworkPacket api to read full version string instead of u8 pointers. Also store the reserved byte to use API properly
Fixes #2509
2015-03-17 14:12:18 +01:00
Loic Blot
bfc4652c66 Fix a little regression on SendActiveObjectMessages which send all TOCLIENT_ACTIVE_OBJECT_MESSAGES as reliable 2015-03-17 09:16:39 +01:00
Craig Robbins
dbe5a446c3 Minor bug fix (lag between damage flash and hearts updating) 2015-03-17 17:39:59 +10:00
Craig Robbins
c552d293fa Fix various damage related bugs (client-side)
E.g. spawning or teleporting into lava to become invinsible
2015-03-17 17:08:00 +10:00
Craig Robbins
34c5a5b377 Minor cleanup: game.cpp
* Sort includes
* Remove unnecessary includes
* Ensure the parameter name for GameRunData is consistent for class member functions
2015-03-17 17:07:39 +10:00
kwolekr
699d42efc6 Revert "Server::step throw is never catched. Replace it with an errorstream + assert"
This reverts commit 5f8e48c63b.
2015-03-16 21:17:27 -04:00
Loic Blot
ceac41ed6e Bump android version code 2015-03-16 20:37:31 +01:00
Loic Blot
315b00d150 Bump android version code 2015-03-16 20:37:07 +01:00
Loic Blot
5f8e48c63b Server::step throw is never catched. Replace it with an errorstream + assert
This throw can be trigger by LuaError exception or ConnectionBindFailed exception in the following functions:
* EmergeThread::Thread()
* ScriptApiEnv::environment_Step()
* ScriptApiEnv::player_event()
* ServerThread::Thread()
2015-03-16 20:25:35 +01:00
est31
16b961b2eb Android: Fix auto-entry of server address and port in mainmenu
Fixes #2497.
2015-03-16 20:04:00 +01:00
est31
0c0248a19c Android: Fix auto-entry of server address and port in mainmenu
Fixes #2497.
2015-03-16 19:46:54 +01:00
Loic Blot
d63df4ecb1 Move client packet generators to dedicated functions for:
* TOSERVER_INIT_LEGACY
* TOSERVER_DELETEDBLOCKS
* TOSERVER_GOTBLOCKS
* TOSERVER_REMOVED_SOUNDS
Also use a std::vector instead of std::set for TOSERVER_REMOVED_SOUNDS
2015-03-16 12:39:27 +01:00
Loic Blot
e7736ffdd6 Move TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD and TOCLIENT_ACTIVE_OBJECT_MESSAGES to private functions 2015-03-16 12:01:40 +01:00
Loic Blot
b560294050 Rename packethandler/{client,server}.cpp to {client,server}packethandler.cpp
* Requested by @Zeno-
* Approved by @nerzhul
2015-03-16 10:19:19 +01:00
Loic Blot
aaf26b3a44 If player is dead, permit it to respawn, even if damages are not enabled
* Mods can do setHP function to do damages and override the enable_damage value sometimes
2015-03-16 10:02:01 +01:00
Loic Blot
b2801d8127 SendPlayerHPOrDie everytime at client connection, damage enabled or not, this will fix the player which stay dead at connection 2015-03-15 19:09:26 +01:00
est31
e4f7c92cff Finer progress bar updates when initializing nodes
The bar is only drawn when the user will notice a change, which prevents time overheads that this commit would cause, resulting from useless draws.
2015-03-15 22:01:52 +10:00
Loic Blot
2bc0165652 Android Makefile update backported from stable-0.4 with minor changes 2015-03-15 11:21:34 +01:00
Loic Blot
0429ec4cfd Android: update makefile and backport language fix from master 2015-03-15 11:01:39 +01:00
Craig Robbins
a740a48f62 Fix narrow_to_wide_c (ANDROID)
* Ensure converted string is NUL terminated
* Restore logic to that used prior to 9e2a9b5
2015-03-15 10:17:09 +01:00
paramat
89217faec5 mg_decoration: Raise highest allowed deco top to max edge of voxelmanip
Remove max_y from functions, simplify code
2015-03-15 04:15:48 +00:00
Loic Blot
155116852a Android: Backport changes from stable-0.4 2015-03-14 19:59:14 +01:00
Loic Blot
b12f569fc6 Releasing android 2015-03-14 19:57:21 +01:00
Loic Blot
aa085bf222 Android: fix package name in JAVA sources 2015-03-14 18:52:31 +01:00
Loic Blot
783e15f389 Fix package name in AndroidManifest.xml 2015-03-14 18:41:36 +01:00
Loic Blot
1488542968 AndroidManifest.xml version bump 2015-03-14 18:28:02 +01:00
Craig Robbins
de6d5ce2cd Disable double-click -> ESC translation for main menu 2015-03-14 23:41:42 +10:00
Loic Blot
0e93eefb8f client.cpp: typo fix and break; fix to make some compilers happy 2015-03-13 22:08:48 +01:00
Loic Blot
083c8c734e Replace NetworkPacket pointers to references 2015-03-13 22:01:49 +01:00
Loic Blot
74d34da6cb Prepare Protocol v25 init & authentication.
* TOSERVER_INIT and TOCLIENT_INIT renamed to _LEGACY
* TOSERVER_PASSWORD merged from dev-0.5, can use protocol v24 and v25
* TOCLIENT_ACCESS_DENIED merged from dev-0.5, can use protocol v24 and v25, with normalized strings an a custom id for custom errors
* new TOSERVER_INIT packet only send MT version, supported compressions, protocols and serialization, this permit to rework everything later without break the _INIT packet
* new TOSERVER_AUTH packet which auth the client
* new TOCLIENT_HELLO packet which send server serialization version atm
* new TOCLIENT_AUTH_ACCEPTED which is send when TOCLIENT_AUTH was okay. After this packet, the client load datas from servers, like after TOCLIENT_INIT_LEGACY packet
2015-03-13 20:23:03 +01:00
Loic Blot
9f3fc7201b Handle the newly added TOCLIENT_ACCESS_DENIED and TOCLIENT_DELETE_PARTICLESPAWNER
* Rename the handlers from _Legacy to regular, because here we can use same handlers
* Fix some packet names and pseudo handlers
2015-03-13 14:28:20 +01:00
Loic Blot
126f36c2e6 Rename some packet and handlers to <packet>_Legacy name for compat layer between new network changes and old network clients 2015-03-13 13:40:48 +01:00
Loic Blot
4e63c977c7 Use the new Player::isDead function when it's the case 2015-03-13 08:57:58 +01:00
SmallJoker
7c19933a8c Update Indonesian Language 2015-03-12 17:08:08 +01:00
Loic Blot
afb19f3a1f handleCommand_Breath mustn't update breath is player is dead. A dead player doesn't breath.
Add Player::isDead function to check player is dead
2015-03-12 11:27:28 +01:00
Loic Blot
3067d78216 Don't handle PlayerPos packet coming from client if player is dead 2015-03-12 10:32:16 +01:00
paramat
6ce0985f47 Mgv5/mgv7: Add desert temples if desert stone detected in mapchunk 2015-03-12 02:33:16 +00:00
est31
140245a76f Unescape tooltip texts
Previously, tooltips didn't unescape escaped formspec texts.
Item descriptions that trigger tooltips like inside inventories or for item_image_button
don't need to get unescaped, as they don't get set using formspec, but from lua.
2015-03-11 14:33:07 +01:00
paramat
29e46d6b29 Mgv6: Fix uninitialised heightmap used by cavegen 2015-03-11 06:04:07 +00:00
paramat
b2b6bbf3e8 lua_api/l_mapgen: Fix overlapping areas of minetest.generate_ores/decorations 2015-03-11 03:36:39 +00:00
ShadowNinja
adfcdc5484 Silence Clang warning 2015-03-10 20:47:52 -04:00
Craig Robbins
d4e210ee95 Ensure that heightmap is initialized before use
Without this, cavegen will use values in the heightmap before they are initialized.
2015-03-10 18:46:28 +10:00
Craig Robbins
e74b8da54e Stop formspecs closing with double-click in empty area
Behaviour on Android remains the same until other alternatives can be devised (if possible)

See #2425 (and the many other -- now closed -- issues reporting this feature as a bug)
2015-03-09 12:42:25 +10:00
Loic Blot
3ae16f1c17 Fix memleak pointed by issue #2439.
Also change bzero to memset. bzero doesn't work on windows
2015-03-08 18:13:27 +01:00
Loic Blot
57d86cf574 Fix unitialized data when creating TOSERVER_INIT packet 2015-03-08 18:03:43 +01:00
ShadowNinja
969413b9fa Make the dummy backend only look up blocks once 2015-03-08 03:16:40 -04:00
Maksim Gamarnik
c788b17322 Update Android Makefile
ARMv7 default build
Update curl
Update OpenSSL
2015-03-08 15:48:40 +10:00
paramat
d463000595 Heightmaps: Fix uninitialised values in mgv5/mgv6. findGroundLevel: Return -MAP_GENERATION_LIMIT if surface not found 2015-03-08 03:54:03 +00:00
gregorycu
267c9f4cb4 Optimize Profiler::avg() 2015-03-07 20:04:01 -05:00
ShadowNinja
d75a0a7394 Don't use luaL_checkstring to read node names, it's only for arguments
This caused confusing error messages like "argument #4 to set_node is not a string."
2015-03-07 20:04:01 -05:00
Mahmut Elmas
86e9408c9f Add Turkish comment translation to minetest.desktop 2015-03-07 18:46:30 -05:00
est31
40e248b9f9 Add more Android build files to .gitignore 2015-03-07 18:44:36 -05:00
ngosang
f6e4c5d9cf Respect game mapgen flags and save world noise params 2015-03-07 15:53:39 -05:00
sapier
9da99efca2 Fix RUN_IN_PLACE broken due to invalid usage of assert 2015-03-07 15:22:35 +01:00
Craig Robbins
ced6d20295 For usages of assert() that are meant to persist in Release builds (when NDEBUG is defined), replace those usages with persistent alternatives 2015-03-07 22:41:47 +10:00
Loic Blot
a603a76787 Improve Clouds::render mathematics 2015-03-07 13:27:43 +01:00
Craig Robbins
5698e2baf8 Fix Android text bug (no text displaying) 2015-03-07 20:51:07 +10:00
paramat
ffdf8dedb7 Dungeongen: Optionally set ignore to be untouchable to disable floating dungeons 2015-03-07 01:41:53 +00:00
ShadowNinja
e9eda2b0d0 Don't start a server for map migration 2015-03-06 00:20:45 -05:00
ShadowNinja
708337dfc2 Clean up database API and save the local map on an interval 2015-03-06 00:20:45 -05:00
paramat
c7454d4732 Biome API: Enable decorations placed on water
Add schematic decoration force placement flag
2015-03-06 03:32:15 +00:00
BlockMen
b65c7ab4a4 Improve group-based connection between raillike nodes 2015-03-05 23:24:32 +01:00
Loic Blot
40c2c18a3f l_get_modnames: Compare using std::sort instead of a custom function which does same work 2015-03-05 20:12:54 +01:00
Loic Blot
c00eed90d3 collisionMoveSimple: use std::vector instead of std::list, this improve the performances 2015-03-05 18:08:19 +01:00
Loic Blot
6c09b34edc ProfilerGraph: Use std::list instead of std::vector 2015-03-05 17:57:47 +01:00
Craig Robbins
daa1c30b35 Fix mapgen using unitialised height map values 2015-03-06 01:42:55 +10:00
Loic Blot
3d505b2b5f Use std::queue for HTTPFetchRequest and std::vector for log_output instead of std::list 2015-03-05 16:21:10 +01:00
Loic Blot
9749d9fee6 Fix issue #2441: crash on respawn, since a conversion std::list to std::vector on Environment.cpp
* Also change some std::list to std::vector for ClientMap::renderMap
* Remove disabled code in ClientMap::renderMap, disabled since a long time
2015-03-05 15:36:20 +01:00
Loic Blot
0d1eedcccc Replace std::list to std::vector into tile.cpp (m_texture_trash) and move tile.hpp to src/client/ 2015-03-05 11:59:40 +01:00
Loic Blot
aa474e4501 Server.cpp Use std::list instead of std::vector for playSound, fillMediaCache, sendRequestedMedia, sendMediaAnnouncement and related functions 2015-03-05 11:40:04 +01:00
Loic Blot
82482ecd9d Server::AsyncRunStep: buffered_messages now uses std::vector instead of std::list. * sendRemoveNode and sendAddNodes are also converted as a side effect 2015-03-05 11:23:54 +01:00
BlockMen
36e8ba9ce2 Fix some rendering glitches
- Fixes particle draworder
- Fixes nodehighlighting
2015-03-05 10:51:18 +01:00
Loic Blot
365e4ae0fa Performance improvement: Use std::list instead of std::vector for request_media, Server::getModNames, Environment::m_simple_objects.
* Also remove unused Server::m_modspaths
2015-03-05 10:44:48 +01:00
Loic Blot
b214cde5b4 Remove Queue class which uses std::list and use native std::queue 2015-03-05 16:49:51 +10:00
Craig Robbins
9e67579315 Fix memory leak in MapgenV6 2015-03-05 15:17:37 +10:00
paramat
eb7482fd73 Cavegen, mgv5: Cleanup code
Conf.example: Update mgv5 mapgen params
Mgv7: Lava caves only below -256
2015-03-04 23:53:58 +00:00
Loic Blot
cd684497c2 Use std::vector instead of std::list in StaticObjectList and MutexedMap::getValues() 2015-03-04 17:22:37 +01:00
Loic Blot
06f328207f ABMHandler and player_collisions use sequential read/write. Switch from std::list to std::vector
* Also remove dead code Map::unloadUnusedData which is dead since a long time
2015-03-04 17:02:36 +01:00
Loic Blot
2066655aae ClientInterface::getClientIDs doesn't need a std::list. Use a std::vector for better perfs 2015-03-04 16:30:24 +01:00
Loic Blot
7e088fdfe3 We always know playerSAO when calling SendInventory. Using it instead of searching it via peer_id 2015-03-04 15:28:33 +01:00
SmallJoker
bbed01ab62 Radius parameter for /deleteblocks here 2015-03-05 00:10:53 +10:00
Loic Blot
40bf1d7b5f Send Position packet on event, don't check it at each AsyncRunStep.
* This permit to cleanup the player checking loop
2015-03-04 12:19:26 +01:00
Loic Blot
7f8f9785d7 ASyncRunStep doesn't need to lock when do setTimeOfDaySpeed.
* setTimeOfDaySpeed already lock a mutex when modify the value, we don't need to lock all environment.
* add a fine grain lock for getTimeOfDay and setTimeOfDay to solve environment multithread modifications on this value
2015-03-04 11:46:31 +01:00
Loic Blot
1b2f64473e Send Inventory packet on event, don't check it at each AsyncRunStep.
* Call UpdateCrafting into SendInventory because this functions is only called before SendInventory
* Use Player* instead of peer_id for UpdateCrafting because SendInventory already has the Player* pointer, then don't loop for searching Player* per peer_id
* m_env_mutex don't need to be used with this modification because it's already locked before the calls
2015-03-04 11:29:39 +01:00
Loic Blot
038d3a31df Remove unused m_wielded_item_not_sent 2015-03-03 17:36:54 +01:00
Loic Blot
7e56637ed0 Send Breath packet on event, don't check it at each AsyncRunStep 2015-03-03 16:33:20 +01:00
Loic Blot
64ff966bae Send Player HP when setHP (or a setHP caller) is called instead of looping and testing the state change. 2015-03-03 16:06:04 +01:00
Miguel Almeida
056e8f7839 Fix occlusion 2015-03-02 12:09:02 +01:00
Craig Robbins
aefe80769b Fix narrow_to_wide_c (ANDROID)
* Ensure converted string is NUL terminated
* Restore logic to that used prior to 9e2a9b5
2015-03-02 13:16:01 +10:00
paramat
773aa8c57b Mgv6: Add heightmap. Do not make large caves that are entirely above ground 2015-03-02 02:13:43 +00:00
est31
1a175c6982 Add /setpassword and /clearpassword logging 2015-02-27 23:00:28 +01:00
mahmutelmas06
d4a6dedc88 Add Turkish language 2015-02-27 15:52:50 +01:00
Rui
7b7cd0ecac Update minetest.po 2015-02-27 15:47:48 +01:00
Loic Blot
3b1ac5b889 Revert "Fix particles draworder" (issue #2388)
This reverts commit c09d026f05.
2015-02-27 14:15:24 +01:00
Craig Robbins
fdb9140825 Change find_surface_nodes_in_area to find_nodes_in_area_under_air 2015-02-27 21:42:00 +10:00
Loic Blot
0f556d0c7f Add find_surface_nodes_in_area LUA call which permit to only get the nodes which touch air. This permit to massively improve performance for mods like plantlife 2015-02-27 21:34:33 +10:00
rubenwardy
2b189d4507 Wrap lines longer than 80 characters in lua_api.txt ...and minor formating changes 2015-02-27 13:41:17 +10:00
Craig Robbins
338e66af5f Fix minor memory leak (Android) 2015-02-27 13:40:27 +10:00
paramat
14f7df980b Biome API: Re-calculate biome at every surface in a mapchunk column 2015-02-26 03:35:25 +00:00
rubenwardy
d65a90a86b Add camera smoothing and cinematic mode (F8) 2015-02-25 15:34:33 +01:00
Loic Blot
b4acac706d Rename --do-unittests to --run-unittests as @Zeno- and @sfan5 requested 2015-02-24 08:56:52 +01:00
gregorycu
577701cabd Optimise MapBlockMesh related functions
Directely or indirectly optimises the following functions:

* MapBlockMesh::MapBlockMesh
* MapBlockMesh::getTileInfo
* MapBlockMesh::makeFastFace
* MapBlockMesh::getSmoothLightCombined
2015-02-23 23:20:31 +10:00
Craig Robbins
3b6480c5b0 Fix wrapDegrees family of functions
wrapDegrees() (renamed to modulo360f)
wrapDegrees_0_360
wrapDegrees_180

Minor errors were present in previous versions; see issue #2328
2015-02-23 22:50:32 +10:00
4Evergreen4
51057a56f5 Add src/network/CMakeFiles/ and src/client/CMakeFiles to gitignore 2015-02-23 16:50:28 +10:00
Kahrl
38cf080a9c Disallow object:remove() if the object is a player
Rebased by Zeno- (conflict in lua_api.txt)
2015-02-23 16:49:48 +10:00
ShadowNinja
cd4324e5a8 Fix serialization of floating point numbers 2015-02-21 13:16:18 -05:00
Markus Koschany
47d9b4d9aa Improve FindIrrlicht.cmake module
Linux distributions prefer to link against a shared version of the Irrlicht
engine instead of using embedded code copies of the same. Search for this
shared version first and use that but fall back to the static version if it
does not exist.

This also fixes https://github.com/minetest/minetest/issues/2163
2015-02-21 18:21:10 +01:00
kaeza
c5defe7a11 Add mod.conf file support This new file only permits to specify a mod name for now 2015-02-21 18:18:06 +01:00
Loic Blot
a0affa496d Fix android build 2015-02-21 17:37:48 +01:00
Loic Blot
009149a073 Fix some memory leaks on packet sending. 2015-02-21 17:27:31 +01:00
Loic Blot
5a5854ea9d Move hex.h to util/ 2015-02-21 14:32:35 +01:00
BlockMen
c09d026f05 Fix particles draworder 2015-02-21 14:11:00 +01:00
Loic Blot
3998a1f8f9 Move sha1.hpp and base64.hpp to util/ 2015-02-21 14:03:27 +01:00
BlockMen
aa31e3c7f3 Use skin font for usernames (fixes #2363) 2015-02-21 13:31:42 +01:00
Loic Blot
cf4045ff0f Use proper CMakeLists.txt for network and client directories 2015-02-21 11:51:12 +01:00
Rui
81930b1729 Update Japanese Translation
ok @Zeno- @nerzhul
2015-02-21 11:17:52 +01:00
Loic Blot
b3aeba684b Unit tests must be done at integration process.
* Remove --enable-unittests and --disable-unittests and add --do-unittests function
* --do-unittests function will exit 0 on success.
* minetest and minetestserver binaries are launched with --do-unittests in travis build.
2015-02-21 11:04:19 +01:00
paramat
38e6280552 Mgv5: Remove blobgen. Remove crumble and wetness noises
Add large pseudorandom caves below -256
De-link terrain level from water_level
Cavegen: Mgv5 large cave code
2015-02-21 01:43:25 +00:00
Ner'zhul
109f0ffeab update README.txt
* prefix apt-get with sudo
* git clone minetest_game without going to folder
* execute minetest binary without going into bin folder
2015-02-20 10:35:39 +01:00
Ner'zhul
e357577cb2 Typo fix in networkprotocol.h
InventoryAction is in inventorymanager.h
2015-02-19 20:03:22 +01:00
BlockMen
627c747470 Uncomment version patch field 2015-02-18 23:52:51 +01:00
Perttu Ahola
e6ad2ace10 Bump version to 0.4.12 2015-02-18 23:50:01 +01:00
Perttu Ahola
7993a403f2 Bump version to 0.4.12 2015-02-18 19:50:37 +02:00
Novatux
b0df67d9c0 Add modname convention checking
Fixes #2037
2015-02-18 17:06:09 +01:00
Novatux
804d65a8ec Add modname convention checking
Fixes #2037
2015-02-18 16:48:58 +01:00
Loic Blot
45ff8569d7 Fix serverlist include 2015-02-18 16:26:23 +01:00
est31
82bfa2ee7b Server: announce MIN/MAX protocol version supported to serverlist. Client: check serverlist
Client now informs about incompatible servers from the list, this permits to prevent the protocol movements.
Server announces its supported protocol versions to master server
2015-02-18 16:17:03 +01:00
est31
5a0ed780f5 Server: announce MIN/MAX protocol version supported to serverlist. Client: check serverlist
Client now informs about incompatible servers from the list, this permits to prevent the protocol movements.
Server announces its supported protocol versions to master server
2015-02-18 16:09:59 +01:00
fz72
9ef2e5000f Fix map_seed not changed when creating a new world after login to another 2015-02-18 14:02:30 +02:00
BlockMen
678546308e Increase default font_size 2015-02-18 12:59:16 +01:00
BlockMen
6f688c50ee Fix font_size under windows 2015-02-18 12:59:07 +01:00
Perttu Ahola
bb603ff18e Use fixed size for builtin menus on non-android platforms 2015-02-18 13:57:54 +02:00
BlockMen
8941ea0cc9 Increase default font_size 2015-02-18 12:51:17 +01:00
BlockMen
9a9fcfc9a3 Fix font_size under windows 2015-02-18 12:39:23 +01:00
Perttu Ahola
4d744cf87a Use fixed size for builtin menus on non-android platforms 2015-02-18 12:33:40 +02:00
Loic Blot
49f84b76bc Update missing files for Android.mk 2015-02-18 09:53:43 +01:00
Loic Blot
4208fdfd22 Fix unused (and so, broken) enable_rollback_recording. This option must be reloaded at server loop but loaded when server starts, for data consistency (not a hot load variable) 2015-02-18 09:36:42 +01:00
Loic Blot
27d4e89d32 Fix unused (and so, broken) enable_rollback_recording. This option must be reloaded at server loop but loaded when server starts, for data consistency (not a hot load variable)
ok @ShadowNinja
2015-02-18 09:28:39 +01:00
Loic Blot
b019221c30 Android build fix 2015-02-18 09:23:24 +01:00
fz72
0a299fd4e5 Fix map_seed not changed when creating a new world after login to another 2015-02-18 08:57:14 +01:00
Loic Blot
2079462e62 Change many useless std::list into Environment class (m_players), ABMHandler and ActiveBlockList::update
This improve looping performances.
2015-02-17 16:50:03 +01:00
Kahrl
4875213168 Grab GUIChatConsole::m_font, fixes segfault when changing font_size 2015-02-18 00:40:11 +10:00
Kahrl
81b9c023c4 Grab GUIChatConsole::m_font, fixes segfault when changing font_size 2015-02-18 00:38:57 +10:00
Loic Blot
fd70f4f2f0 Replace std::list by std::vector into ClientMap::updateDrawList, Map::timerUpdate and ServerMap::save().
This will speedup the loop reading into those functions
2015-02-17 15:28:49 +01:00
Loic Blot
3c91ad8fc2 Replace std::list by std::vector into timerUpdate calls 2015-02-17 15:08:37 +01:00
Novatux
24315db6ef Ignore old entities from 0.3. 2015-02-17 15:07:05 +01:00
Loic Blot
54487b3e70 Remove old comment from Network Rework Patch 2/4 2015-02-17 14:49:21 +01:00
Loic Blot
718bcafd51 Replace std::list by std::vector into ServerMap::listAllLoadableBlocks ServerMap::listAllLoadedBlocks and their database backends.
This adds a speedup on database migration and /clearobjects command
2015-02-17 14:35:44 +01:00
Loic Blot
c58d49977d SAO: re-add old ActiveObjectTypes for a future migration layer 2015-02-17 11:37:55 +01:00
Loic Blot
f8d5af7536 SAO work: ActiveObject types & SAO cleanup * Replace u8 types with ActiveObjectType. * Merge content_object.h into activeobject.h * Remove DummyLoadSAO, it's now unused. * Remove ItemSAO, it's also unused 2015-02-17 09:09:50 +01:00
Yaman
98d80e2012 Add player direction to on-screen debug text
(PR Modified slightly)
2015-02-17 01:56:21 +10:00
sfan5
f1fd0f7e14 Add LevelDB and redis to Travis Linux builds 2015-02-16 11:55:12 +01:00
Loic Blot
7c8793cbea Performance Improvement: Use a cache which caches result for getFacePositions.
This greatly reduce the number of std::list generated by caching the result, which is always constant for each radius selected.
In the callgrind map, you will see original:
  * 3.3M calls to std::list for 9700 calls to getFacePositions
In the modified version, you will see:
  * 3.3K calls to std::list for 6900 call to getFacePositions
Callgrind map is here: #2321

it's a huge performance improvement to l_find_node_near
2015-02-16 11:27:44 +01:00
Loic Blot
ed04e8e9e4 [Patch 2/4] Network rework: packet writing, sending and cleanups
NetworkPacket.cpp:
* Remove some deprecated functions, we must use streaming interface
* m_data converted from u8* to std::vector<u8>
* Add an exporter to forge packet to Connection object
* implement operator << std::wstring. n
* implement operator << std::string
* dynamic resize when write packet content.
* fix string writing and performances.
* create ServerCommandFactory, used by client to get useful informations about packet processing (sending).
  * Reliability
  * Transmit channel
* Implement putRawString for some ugly char (_INIT packet), and use it.
* Many packet read and write migrated
* Implement oldForgePacket to interface writing with current connection
* fix U8/char/bool writing
* fix string writing and performances.
* add some missing functions
* Use v3s16 read instead of reading x,y,z separately
* Add irr::video::SColor support into packets
* Add some missing handlers
* Add a template function to increase offset
* Throw a serialization error on packet reading (must be improved)

PacketFactories:
* Create ServerCommandFactory, used by client to get useful informations about packet processing (sending).
* Create ClientCommandFactory, used by server to get useful informations about packet processing (sending).

Client.cpp:
* implement NetworkPacket ::Send interface.
* Move packet handlers to a dedicated file
* Remove Client::Send(SharedBuffer)

Server.cpp:
* implement NetworkPacket ::Send interface.
* Rewrite all packets using NetworkPacket
* Move packet handlers to a dedicated file
* Remove Server::Send(SharedBuffer)

ClientIface.cpp:
* Remove sendToAll(SharedBuffer<u8>)

Connection.hpp rework:
* Remove duplicate include
* Remove duplicate negation
* Remove a useless variable
* Improve code performance by using a m_peers_list instead of scanning m_peers map
* Remove Connection::Send(SharedBuffer)
* Fix useafterfree into NetworkPacket Sending
* Remove unused Connection::sendToAll

Test.cpp:
* Remove dead code
* Update tests to use NetworkPackets

Misc:
* add new wrappers to Send packets in client, using NetworkPacket
* Add NetworkPacket methods for Connection
* coding style fix
* dead code since changes cleanup
* Use v3s16 read instead of reading x,y,z separately in some packets
* Use different files to handle packets received by client and server
* Cleanup: Remove useless includes

ok @Zeno-
Tested by @Zeno- @VanessaE and @nerzhul on running servers
2015-02-16 11:00:55 +01:00
rubenwardy
efa977518a Fix minetest.item_eat's replace_with_item, fixes #2292 2015-02-16 10:24:19 +01:00
Loic Blot
8aebc31a17 Fix unit test if there isn't a localhost address (for example FreeBSD jails), second part 2015-02-15 14:30:34 +00:00
Loic Blot
a3e2b3e404 Fix unit test if there isn't a localhost address (for example FreeBSD jails) 2015-02-15 13:11:03 +01:00
Loic Blot
3b6b9435c5 Only do the IPv6 unit test if IPv6 is enabled 2015-02-15 12:20:37 +01:00
ngosang
5eb0eda626 Updated Spanish translations 2015-02-15 09:36:28 +01:00
Loic Blot
346652a809 Fix issue #2278, Connection sent before address data loading 2015-02-14 23:23:54 +01:00
Loic Blot
f92540e8ad Add german and french translation for minetest.desktop
This fixes #1573
2015-02-14 13:12:08 +01:00
Jakub Vaněk
ec0bf899ed Update czech translation 2015-02-14 13:11:50 +01:00
ngosang
2b635a892c Minor fixes in translations 2015-02-14 13:11:33 +01:00
Loic Blot
7f6fc148bd Fix issue #2279. ok @zeno- 2015-02-14 21:02:19 +10:00
ngosang
878e9f7594 Fix .zip extraction (mod store) 2015-02-14 21:00:13 +10:00
Rui
c7249f5983 Fix store.lua bug: default screenshot 2015-02-14 21:00:06 +10:00
Rui
7f07858209 Fix tab_mods.lua: default screenshot patch
https://forum.minetest.net/viewtopic.php?f=6&t=11201
Fixed this bug.
2015-02-14 21:00:01 +10:00
ShadowNinja
9e9688fc61 Fix Android build of narrow_to_wide 2015-02-14 20:59:45 +10:00
Markus Koschany
93e5ab367a Fix FTBFS on GNU/Hurd platform
Minetest fails to build on GNU/Hurd due to a name clash with OSX/Apple,
both are defining the __MACH__ keyword. This commit fixes the issue.
2015-02-14 20:59:35 +10:00
est31
60fa5807b9 README.txt: Simplify initial build steps by using git to fetch sources
Also simplify wget steps and apt-get install zlib1g-dev libjsoncpp-dev
2015-02-14 20:59:00 +10:00
ngosang
9dbca41385 Fix Exit to OS button focus in Pause Menu 2015-02-14 20:58:39 +10:00
Loic Blot
7880ff74b6 Re-apply 4a6582c13c broken since 146f77fdb7 2015-02-14 09:21:04 +01:00
est31
61588a43dd Fix crash on passing false as value in table to table.copy(t)
Fixes #2293.
2015-02-14 15:24:09 +10:00
est31
7c5accf605 Fix crash on passing false as value in table to table.copy(t)
Fixes #2293.
2015-02-14 15:18:11 +10:00
Craig Robbins
d44cb547f2 Suppress CGUITTFONT build warnings 2015-02-13 23:54:05 +10:00
Loic Blot
af7f369d28 Add german and french translation for minetest.desktop
This fixes #1573
2015-02-12 19:36:02 +01:00
Jakub Vaněk
2630f45fdf Update czech translation 2015-02-12 16:41:44 +01:00
ngosang
c7a7803780 Minor fixes in translations 2015-02-12 16:41:40 +01:00
BlockMen
e62927ed71 Fix gettext on MSVC 2015-02-13 01:23:30 +10:00
BlockMen
d302629392 Fix gettext on MSVC 2015-02-12 16:03:55 +01:00
ngosang
e102cbd840 Fix .zip extraction (mod store) 2015-02-12 15:27:20 +01:00
Loic Blot
146f77fdb7 main.cpp rework * Move ClientLauncher class to a dedicated file * ClientLauncher now owns print_video_modes and speed_tests functions (they are only called by him) * Move GameParams to shared/gameparams.h because it's shared between server and client and launcher need to know it * Move InputHandlers class to client/inputhandler.h * Cleanup includes 2015-02-12 15:00:03 +01:00
Rui
92d1985802 Fix store.lua bug: default screenshot 2015-02-12 11:32:42 +01:00
Rui
14cc2c23d7 Fix tab_mods.lua: default screenshot patch
https://forum.minetest.net/viewtopic.php?f=6&t=11201
Fixed this bug.
2015-02-12 11:31:34 +01:00
Loic Blot
a19ec3328c Remove unused variables to make clang happy 2015-02-12 11:13:27 +01:00
ngosang
4a6582c13c Small changes in the style of controls 2015-02-12 09:54:48 +01:00
Loic Blot
c3a23ebc28 Make Clang happy with lua lauxlib.c.
No functionnal change
2015-02-12 08:00:22 +01:00
est31
b2f3ffe308 Enable LUA_USE_POSIX if possible in bundled Lua
Fixes warning:
src/lua/src/loslib.c:60: Warning: the use of `tmpnam' is dangerous, better use `mkstemp'
2015-02-12 16:14:12 +10:00
Craig Robbins
66efaaa983 Fix Android compile warning 2015-02-12 13:16:38 +10:00
ngosang
704453ff12 Fix 'Download complete' dialog in the mods store 2015-02-11 19:58:48 +01:00
Loic Blot
a9355284b5 Don't permit to open inventory is playerCAO isn't present. This prevent to open an empty inventory at player load. ok @zeno- 2015-02-11 12:23:14 +01:00
Loic Blot
8252e1ecd0 Fix issue #2279. ok @zeno- 2015-02-11 10:03:29 +01:00
Loic Blot
10b208f5c1 Fix Android build since a704c04f00bfea4b77550169fa08105c2ee0dfd0Oxh. ok @zeno- 2015-02-11 09:15:25 +01:00
Craig Robbins
c8f60bd224 Remove workaround in itemdef.cpp to enable/disable/enable "enable_shaders" setting
* Increase performance (client)
* Avoid changing a global value to solve a local problem
2015-02-11 17:45:49 +10:00
ShadowNinja
98b37e3e0d Fix Android build of narrow_to_wide 2015-02-11 02:28:22 -05:00
Craig Robbins
f824866686 Revert "Remove workaround in itemdef.cpp to enable/disable/enable "enable_shaders" setting"
This reverts commit d25ff8fd25.
2015-02-11 17:01:19 +10:00
Craig Robbins
d25ff8fd25 Remove workaround in itemdef.cpp to enable/disable/enable "enable_shaders" setting
* Increase performance (client)
* Avoid changing a global value to solve a local problem
2015-02-11 16:02:16 +10:00
Markus Koschany
cfca5f99e6 Fix FTBFS on GNU/Hurd platform
Minetest fails to build on GNU/Hurd due to a name clash with OSX/Apple,
both are defining the __MACH__ keyword. This commit fixes the issue.
2015-02-11 15:59:58 +10:00
Craig Robbins
caf8d2a9d1 Increase MapBlock::actuallyUpdateDayNightDiff() performance by 2-8x. ok @celeron55
Before patch, function consumes up to ~8% of the main server loop. After, ~0% (below level of 2 places of significance)
2015-02-10 16:23:37 +01:00
Loic Blot
bb59a8543d Replace getPlayer(playername) by getPlayer(peer_id) in some possible cases. ok @Zeno- 2015-02-10 16:03:16 +01:00
est31
da8199799d README.txt: Simplify initial build steps by using git to fetch sources
Also simplify wget steps and apt-get install zlib1g-dev libjsoncpp-dev
2015-02-10 16:20:33 +02:00
Loic Blot
368496b612 Craftdef.cpp: Improve loop and mathematics for CraftDefinitionShaped::check 2015-02-10 14:16:28 +01:00
ngosang
dd2bb950be Fix Exit to OS button focus in Pause Menu 2015-02-10 21:23:16 +10:00
Loic Blot
a704c04f00 Network Layer 7 rework (Packet handling)
* Move networkcode to a dedicated directory
* Rename clientserver.h to network/networkprotocol.h (Better name) and sanitize some includes
* Create object NetworkPacket
  * It stores command (opcode) and data separated
  * It also stores peer_id
  * Data reading can be done by using a streaming interface
* Change packet routing analysis
  * Remove old conditional analysis
  * Now uses function pointed analysis and add connection state ({Client,Server}::handlers)
  * Connection state permit to categorize condition to handle before analyze packets
  * Create a handler for depreciated messages, instead of duplicating code
2015-02-10 20:04:08 +10:00
kwolekr
15c037614f Hud: Modify Y-positioning of health/breath starbars to prevent overlapping with Hotbar 2015-02-08 12:47:45 -05:00
gregorycu
a0535d286b Fix rebase bug, make render loop use cache setting 2015-02-07 22:23:36 +10:00
Craig Robbins
0904884ad4 Fix warnings in CGUITTFont.cpp 2015-02-06 23:02:15 +10:00
ShadowNinja
1367e8ffff Fix gettext 2015-02-05 11:49:14 -05:00
ShadowNinja
9e2a9b55e1 Reduce gettext wide/narrow and string/char* conversions 2015-02-05 03:24:22 -05:00
ShadowNinja
84c367bb46 Fix translation memory leak 2015-02-05 03:24:13 -05:00
ShadowNinja
8bbf106379 Fix translation finding of overlay messages 2015-02-05 03:24:00 -05:00
ShadowNinja
efeb372e95 Add wstrgettext to list of translation update keywords 2015-02-05 03:23:53 -05:00
paramat
bec5d3ab22 Mgv7 mountains: Remove divide by zero code that creates vast walls
Conf.example: Add mgv7 cave1, cave2 noiseparams
Mgv7: Make skipping of mountain code relative to y=0 not water level
Mountain noise offset now -0.6 to compensate
Tune chance of large caves
2015-02-05 03:21:04 -05:00
Craig Robbins
9a0dd47057 Fix performance regression 2015-02-05 17:34:10 +10:00
SmallJoker
929e0b0ad8 Give full breath after death 2015-02-05 17:33:08 +10:00
gregorycu
5e075c3344 Fix dying of lava causes repeated death This is a bugfix for issue #81 2015-02-05 17:32:35 +10:00
rubenwardy
b56f1175a2 Change assignment to global in a function to warning 2015-02-04 14:57:06 -05:00
ngosang
1b4aaa5f50 Suppress 4 gcc 4.9.2 warnings in CGUITTFont.cpp 2015-02-05 02:41:55 +10:00
Steven Smith
b4cdbc997f Fix download URL 2015-02-04 22:06:55 +10:00
sapier
d902bd31c4 Fix getCraftRecipe returing wrong reciep due to way to unspecific output matching 2015-02-02 21:32:23 +01:00
kwolekr
0118c111e8 Fix some MSVC-specific warnings and add debug path as an MSVC directory 2015-02-02 02:01:13 -05:00
kwolekr
43f102271d Create minidump on fatal Win32 exceptions
Remove software exception translator function, simplifying exception handler
macros.  FatalSystemExceptions are left unhandled.
2015-02-02 01:39:17 -05:00
kwolekr
48fa893abd Randomly generate seed if field blank for any Settings instance 2015-02-01 02:05:39 -05:00
Kahrl
285655a878 Fix NDT_GLASSLIKE normals
Remove inventorycube() workaround for default:glass in minimal game
2015-01-31 03:06:34 +10:00
Craig Robbins
38561023b4 Fix local map saving when joining a local server from the server tab
Disables local map saving for all local server types

See: https://github.com/minetest/minetest/issues/2024
2015-01-31 00:42:08 +10:00
Kahrl
4d15d63134 Fix uninitialized variable m_database_delete in Database_SQLite3
This fixes issue #2219
2015-01-28 05:01:07 +01:00
kwolekr
a8ec7876a6 Prevent null concatenation when /deleteblocks is provided an incorrect format 2015-01-27 22:36:53 -05:00
kwolekr
ad690c46b1 Write common mapgen params to map_meta.txt on world initialization 2015-01-27 22:29:28 -05:00
Loic Blot
80a7408e4d Fix a crash (assert) when client set serial version < 24 in INIT
When SER_FMT_VER_LOWEST is set to zero, then the test is stupid in INIT because all client works. In mapblock we check if client's serialization version is < 24, but if client sent serialization version < 24 (15 for example) the server set it and tried to send nodes, then BOOM

To resolve the problem:
* Create a different CLIENT_MIN_VERSION to handle this problem
* Remove the exception
* Use an assert in case of bad developer code
2015-01-27 16:55:25 +01:00
kwolekr
eeea454bff Fix missing map_meta.txt error when creating new worlds
A missing map_meta.txt should be treated simply as if there were a blank file.
2015-01-27 02:10:04 -05:00
Craig Robbins
ca217d0416 Revert "Fix a crash (assert) when client set serial version < 24 in INIT command SER_FMT_VER_LOWEST is set to zero, then the test is stupid in INIT because all client works. In mapblock we check if client's serialization version is < 24, but if client sent serialization version < 24 (15 for example) the server set it and tried to send nodes, then BOOM"
nerzhul is (may?) be working on a new solution. For the moment this is reverted because old worlds cannot be loaded (see discussion on github for the commit).

This reverts commit 800d192702.
2015-01-27 00:39:33 +10:00
ShadowNinja
47aca6f6d1 Fix imprecise serialization of large numbers 2015-01-25 20:19:35 -05:00
gregorycu
5b55deb1eb Suppress MSVC warning in chat.cpp 2015-01-25 16:09:23 +10:00
gregorycu
ed7c9c4cb8 Settings fixes Make the GameGlobalShaderConstantSetter use the settings callback (8% perf improvement in game loop) Ensure variable is set Ensure settings callback is threadsafe 2015-01-25 15:23:37 +10:00
Craig Robbins
2c4a5e1861 Revert "Make the GameGlobalShaderConstantSetter use the settings callback (8% perf improvement in game loop)"
This reverts commit a555e2d9b0.
2015-01-25 01:19:40 +10:00
(@U-Exp)
800d192702 Fix a crash (assert) when client set serial version < 24 in INIT command SER_FMT_VER_LOWEST is set to zero, then the test is stupid in INIT because all client works. In mapblock we check if client's serialization version is < 24, but if client sent serialization version < 24 (15 for example) the server set it and tried to send nodes, then BOOM 2015-01-24 22:41:02 +10:00
Kahrl
f8bd1f3563 Fix uninitialized variable Server::m_next_sound_id 2015-01-24 06:44:41 +01:00
Craig Robbins
0ea843bbdb Fix unitialised variable occassionally being used 2015-01-24 14:54:42 +10:00
gregorycu
a555e2d9b0 Make the GameGlobalShaderConstantSetter use the settings callback (8% perf improvement in game loop)
Amend the settings callback to support userdata
2015-01-23 21:27:51 -05:00
paramat
aafbbcd537 Mgv5: Skip calculation of filler, heat and humidity perlinmaps in underground mapchunks 2015-01-23 21:24:47 -05:00
ShadowNinja
a9f81b729b Send real port to server list 2015-01-23 21:38:34 +10:00
paramat
1702c34b64 Mgv7 generateRidgeTerrain: Make river generation relative to water level
Remove widthn and make nridge zero underwater
2015-01-22 02:21:11 -05:00
paramat
70354ac20b Mgv7: Speed optimise calculateNoise and generateRidgeTerrain
Remove unnecessary range limiting of persistmap
Skip calculation of filler, mountain, ridge, heat and humidity perlinmaps in underground mapchunks
Skip generateRidgeTerrain in underground mapchunks
2015-01-22 02:10:07 -05:00
paramat
408d9b72f0 Mgv7 generateRidgeTerrain: Enable rangelim of widthn to remove abysses, calculate widthn later in function
Reduce width to 0.2
Carve river channels in deeper waters
2015-01-22 02:06:33 -05:00
Craig Robbins
a28055f8fd Allow filter and mipmap drop down menues to be translated 2015-01-21 22:33:19 +10:00
Markus Koschany
a6dd619938 Improve desktop file 2015-01-20 20:49:05 +01:00
est31
5bcfe7ea6a Update german translation 2015-01-21 00:50:50 +10:00
TriBlade9
db481e7232 Added ratio argument to colorize, removed the weird alpha-based ratio. 2015-01-20 22:56:20 +10:00
Markus Koschany
60d745126f Fix hyphen used as minus sign 2015-01-20 22:47:45 +10:00
ngosang
d4786d8d5d Update Spanish language
I am a native speaker. I have corrected all the mistakes I've found.

Update Spanish language
2015-01-20 22:41:46 +10:00
paramat
9b89f7aad7 Mapgen V5: Various improvements
Caves check for biome nodes, only excavate stone under water level
Unease caves noises, use MT0.3 parameters
Blobgen after cavegen
Biomegen: remove 'is replaceable content' bool
2015-01-18 23:38:15 -05:00
kwolekr
38bd9e93a2 Fix all warnings and remove -Wno-unused-but-set cflag 2015-01-18 23:29:19 -05:00
kwolekr
e36681101e Add SemiDebug (-O1 with debug symbols) build mode and do not optimize Debug at all
Add -Wall to Debug modes for all compilers and -Wabi for non-MSVC
Use /Ox for MSVC Release mode (potentially higher optimization than /O2)
2015-01-18 22:30:11 -05:00
kwolekr
976d0b2caa Reorganize supported video driver query mechanisms 2015-01-18 13:24:25 -05:00
kwolekr
44e4f5ab6e Revert "Fix style on settings tab"
This reverts commit 7b17b9059e.
2015-01-18 13:19:40 -05:00
kwolekr
6e9f287844 Revert "Fix bug in debug build"
This reverts commit 839c4a99cd.
2015-01-18 13:19:28 -05:00
Craig Robbins
839c4a99cd Fix bug in debug build
-O1 results in executables that are completely useless for actuall debugging
2015-01-19 00:26:59 +10:00
jeanpatrick.guerrero@gmail.com
7b17b9059e Fix style on settings tab 2015-01-18 23:40:18 +10:00
Kahrl
e80a044818 Fix use of uninit data in Sky and (potentially) GUIChatConsole constructors
Clean up nearby code a bit

As a small side effect, it is now possible to add a background texture
to the chat console by simply providing background_chat.jpg, it is no
longer necessary to also add "console_color =" to minetest.conf.
2015-01-18 13:16:01 +01:00
Craig Robbins
29514918f8 Fix particles causing unitialised data being used due to use of incorrect union member 2015-01-18 20:30:57 +10:00
gregorycu
db3466dbe8 Water fixes
Change must_reflow to a deque
Add overload for MapBlock::raiseModified that takes a const char*. This is a speed improvement.
Comment out unused variable
Optimisations to block offset calculations
2015-01-18 20:30:33 +10:00
Craig Robbins
805c8e51e5 Create empty default constructor for MapNode 2015-01-18 13:39:50 +10:00
paramat
2f0a8f1c3e Mgv7: Replace small pseudorandom caves with 3D noise tunnels. Fewer large caves 2015-01-17 21:57:48 -05:00
sapier
a39c136e69 Fix NodeMetadataList loosing memory on deserialize due to invalid clear map call instead of clear 2015-01-17 19:14:36 +01:00
gregorycu
2959d6b3da Fix entitiy WieldMeshSceneNode not freed due to additional grab 2015-01-17 19:13:08 +01:00
Craig Robbins
5481e38d0b Make minor style change(unescape_string()) 2015-01-16 21:05:44 +10:00
Loic Blot
e5b636712c Fix missing return in Database_Dummy::deleteBlock 2015-01-16 21:00:11 +10:00
Loic Blot
46821f1156 Optimize bumpmapping mathematics
OpenGL_vertex:
* bufferize a duplicate calcul
* Factorize vertexes
2015-01-16 20:54:04 +10:00
Craig Robbins
5e58a95491 Fix potential out-of-bounds array index 2015-01-16 14:35:57 +10:00
kwolekr
5aeeb219e3 Simplify deleteblocks chat command argument parsing
Add optional core.pos_to_string decimal place rounding
Move core.string_to_pos to builtin/common/misc_helpers.lua for consistency
2015-01-15 18:05:13 -05:00
kwolekr
9736548720 Add ability to delete MapBlocks from map
Also add a Lua API and chatcommand for this
2015-01-15 16:48:56 -05:00
kwolekr
0330cec7ec Initialize noise ptr on creation (fixes crash if OreVein deleted before use) 2015-01-15 16:23:04 -05:00
ShadowNinja
77e20a0c21 Fix unescape_string removing all backslashes 2015-01-15 16:16:41 -05:00
Diego Martínez
c9669e90bb Fix typo in serialize.lua. 2015-01-15 16:16:41 -05:00
sapier
9f52149a11 Android, build: Update curl to 7.40.00 2015-01-15 21:51:54 +01:00
kilbith
eb6b6ff333 Add missing return value for filter/mipmap dropdown in mainmenu 2015-01-15 20:26:05 +01:00
Craig Robbins
516f1bcd16 Revert "Optimize bumpmapping mathematics"
This reverts commit 148fffb0f2.
2015-01-16 01:30:03 +10:00
kilbith
5cf911ffe1 Small tweaking (alignement - client tab) 2015-01-15 23:25:31 +10:00
Loic Blot
148fffb0f2 Optimize bumpmapping mathematics
OpenGL_vertex:
* bufferize a duplicate calcul
* Factorize vertexes
2015-01-15 23:12:45 +10:00
unknown
bd0d786590 Change UniqueQueue to use a queue and a set. 2015-01-15 21:08:35 +10:00
jeanpatrick.guerrero@gmail.com
227e4807b4 Reorganizing client and server tabs 2015-01-15 00:50:23 +10:00
TriBlade9
e19dab2622 Added configurable ambient_occlusion_gamma. Default is 2.2 (same as previous hardcoded values). 2015-01-14 23:35:50 +10:00
Craig Robbins
57f2fa57cd Fix use of uninitialized data 2015-01-14 15:43:33 +10:00
kwolekr
a4a6cc8eb1 builtin: Unify register wrapper functions and wrap clear_registered_* functions too 2015-01-13 12:36:05 -05:00
onkrot
0fd1ee0380 Performance fixes. 2015-01-13 23:48:56 +10:00
unknown
5d08ada224 Add VoxelArea::hasEmptyExtent 2015-01-13 23:24:32 +10:00
Kodexky
c0066a75cd Fix Android crash on keyboard connection change. 2015-01-13 23:09:57 +10:00
kwolekr
714a4f8507 Attempt to fix occasional issue of uninitialized MapBlock data 2015-01-12 22:31:08 -05:00
kwolekr
b0efb8f3b2 Prevent transform of noise3d result in getBlockSeed2 2015-01-12 15:46:04 -05:00
paramat
c367f7301a Mapgen V5: Move cave generation from base terrain loop to optional function
This fixes biome surface in tunnels
2015-01-11 22:35:36 -05:00
paramat
a77c85fa6d Remove builtin_biome.lua from builtin and add simple biome minimal 2015-01-11 22:32:48 -05:00
paramat
c28a90dafb Lua-api.txt: Document that paramtype='light' results in light propagation with attenuation and is essential for a light source to spread it's light 2015-01-11 22:30:28 -05:00
sapier
aed70cb0b6 Disable sound and key binding settings in "pause" menu on android 2015-01-11 13:58:49 +01:00
sapier
2d9b311e7b Fix invalid stepheight increase calculation on android 2015-01-11 13:57:26 +01:00
sapier
25235a4324 Increase stepheight on android by 0.5 to smoothen movement 2015-01-11 04:33:42 +01:00
Kahrl
b7c0e4b333 Fix clipping rectangle of GUITable row highlight 2015-01-10 19:56:14 +01:00
sfan5
3b16103ca6 Change default font sizes to 14(freetype) and 10(non-freetype) 2015-01-10 18:59:43 +01:00
sfan5
8089d89a51 Set default value for ENABLE_REDIS to 0 2015-01-10 15:28:25 +01:00
sapier
30334b6b22 Revert "Switch default scaling factor to 0.75 as most ppl seem to have 96dpi screens instead of previous assumed 72"
which ain't required any longer as fonts are no longer autoadjusted
This reverts commit 7ad17a25f4.
2015-01-09 19:07:55 +01:00
sapier
de3888ca09 Remove automatic consistent formspec size <-> font size (now has to be done manually)
Set builtin formspecs to autoscale in order to get consistent formspec look and feel
Uncouple label positioning from font size (May break some formspecs but is required to allow manual font adjustment)
2015-01-09 18:46:24 +01:00
Craig Robbins
3c8e372119 Removed superfluous facedir check in mapblock_mesh.cpp 2015-01-10 02:06:33 +10:00
Kahrl
2ab97a7821 Fix logic of checkbox formspec element validity checking 2015-01-09 16:57:54 +01:00
sapier
63867b1a37 Fix memory leaks due to messed up memory handling for particles as well as their spawners 2015-01-09 15:23:49 +01:00
sapier
e201620ee1 Split gui_scaling to gui_scaling + hud_scaling as those elements need different handling on some devices 2015-01-09 14:31:33 +01:00
Craig Robbins
d576235409 Fix facedir > 23 causes segfault in client
See issue #2017
Applied kahrl's gist
2015-01-09 15:42:03 +10:00
sapier
7ad17a25f4 Switch default scaling factor to 0.75 as most ppl seem to have 96dpi screens instead of previous assumed 72 2015-01-09 00:37:02 +01:00
ShadowNinja
a3db918f78 Remove included SQLite3 2015-01-08 16:34:42 -05:00
sfan5
d8cf64a202 Add SQLite3 libraries to buildbot 2015-01-08 16:34:42 -05:00
paramat
56a89fd265 Return step smoothing value to 23 2015-01-08 15:06:28 +10:00
kwolekr
4a57ef12a1 Mapgen V6: Re-enable liquid flowing 2015-01-07 19:27:09 -05:00
sapier
50ce63b190 Remove accidentally added non-ft font files 2015-01-08 01:02:24 +01:00
sapier
04d4a00393 Fix armv7 using arm arch while arm uses armv7 2015-01-08 00:11:30 +01:00
rubenwardy
2504da28af Fix direction property of HUD 2015-01-07 20:51:47 +01:00
sapier
ef140eb7b0 Fix emerge thread not cleaning up emerge queue on shutdown 2015-01-07 12:19:48 +01:00
sapier
2b8ed9e80c Switch android build to external sqlite3 2015-01-07 01:01:03 +01:00
sapier
42f3515c0e Fix andorid build error 2015-01-07 00:10:21 +01:00
sapier
0f1d33933d Implement X11 dpi autodetection 2015-01-06 22:41:07 +01:00
sfan5
efdb9da619 Fix buildbot (was broken by 04a1a446cf) 2015-01-06 19:43:21 +01:00
sapier
083d19b3fc Fixes for android
Copy only minetest_game to apk by default
Don't copy .git and .svn folders to apk
Fix bouncing asset copy scrollbar due to long filepaths
Reenable font scaling to fix broken menu on high dpi screens
Implement minetest loglevel to android loglevel mapping
Disable touch digging while moving around
2015-01-06 16:13:39 +01:00
ShadowNinja
ef0a4e3614 Add registered_ores and registered_decorations 2015-01-05 18:24:15 -05:00
Craig Robbins
beb6b3e593 Prevent client crashing if an NDT_AIRLIKE node is dropped
The player dropping the node can either be themselves or another player (i.e. without this fix you can crash other people's clients)
Thanks CWz for reporting the issue
2015-01-05 22:55:02 +10:00
kwolekr
2d849b0a19 Shorten ManualMapVoxelManipulator to MMVManip 2015-01-05 02:42:27 -05:00
kwolekr
7289d61e99 Optionally specify propagateSunlight area in calcLighting
This fixes the Mapgen V5 calcLighting segfault
2015-01-05 01:20:36 -05:00
Diego Martínez
00bca11f59 Fix off-by-one error in string:split implementation. 2015-01-04 23:33:55 -05:00
kwolekr
3bdf3df223 Exclude vertical mapblock borders when setting light 2015-01-04 23:14:16 -05:00
kwolekr
091594e26e NodeDef: Clear NodeResolver related entries too in clear() 2015-01-04 22:39:57 -05:00
kwolekr
bdcf03ae36 Add minetest.generate_ores() and minetest.generate_decorations() 2015-01-04 22:38:48 -05:00
sapier
a92c083011 Fix broken android version due to new openssl not linking correct to curl 2015-01-05 00:51:35 +01:00
kwolekr
cd4d213ae0 NodeResolver: Perform callback immediately if node registration phase finished
Also add NodeResolver callbacks on the client
2015-01-04 16:32:31 -05:00
sapier
663e42ca3f Fix forgotten favourite list image update of simple menu 2015-01-04 17:37:45 +01:00
sapier
21ee434832 Re-add lost way to debug simple menu on PC 2015-01-04 17:19:25 +01:00
sapier
bf5d6e670a Switch to official openssl version and update to 1.0.1j 2015-01-04 16:57:19 +01:00
Craig Robbins
64cdbae6df Remove freezemelt documentation from lua_api.txt 2015-01-04 21:53:25 +10:00
kwolekr
6fdb32361a Remove freezemelt (the remainder of proller nonsense) 2015-01-04 03:30:10 -05:00
kwolekr
8eb9cebdd0 Add warning about using deprecated fields in Mapgen API and update docs 2015-01-04 03:24:40 -05:00
kwolekr
ef8ed5d127 LuaVoxelManip: Error when given out-of-bounds area 2015-01-04 03:07:28 -05:00
kwolekr
7233a1228e Lighting: Fix nearly all issues
The cause of a single light source seemingly being lit without spread
was due to its creation in the +Y mapblock boundary layer during map
generation, which was ignored as the overtop.  This overtop explicitly
needs to be omitted during sunlight propagation, however.  To accomplish
this, Mapgen::calcLighting() was split into separate functions taking
separate parameters.
Additionally, do not diminish light too early during spread.  This fixes the
output inconsistency between Map::updateLighting and Mapgen::calcLighting.
2015-01-04 02:42:31 -05:00
Kahrl
060ae29eaf Update bundled SQLite to 3.8.7.4 2015-01-04 05:21:59 +01:00
ShadowNinja
3c3887bb19 Deduplicate code and use stdlib in string functions 2015-01-03 14:50:16 -05:00
kwolekr
d91559b8f0 Fix crash if NodeResolver destroyed before pending any node resolutions 2015-01-03 11:05:31 -05:00
Wuzzy
800d912b6f Rewrite lua_api.txt into Markdown format
Just Markdown, no variant of it. File name intentionally
not changed to “lua_api.md” because of fear to break references
to that file. The file can still be renamed later.
2015-01-03 00:48:38 -05:00
sapier
0db73bd83e More consistent progress bar from 0-100 on startup 2015-01-02 17:53:42 +01:00
sapier
35149a10e3 Speedup initial android startup on some devices by factor 10 or more 2015-01-02 17:20:55 +01:00
sapier
aaec558f85 Fix rounding error in font size making main menu and in game font sizes inconsistent 2015-01-02 16:52:02 +01:00
paramat
7452d5399b MgV5/6/7: Generate dungeons above water level
Use/add stone_surface_max_y to speed-optimise/guide dungeon generation
MgV7: Don't let mountain terrain chop dungeons at mapchunk borders
Make mountain terrain update stone_surface_max_y for caves in mountains
2015-01-01 15:44:26 -05:00
paramat
938a3f2976 Mgv7: Remove range limits on mountain height to enable modification through .conf 2015-01-01 12:51:49 -05:00
kwolekr
a3d7203be5 Fix map parameter load order 2014-12-30 12:30:42 -05:00
Craig Robbins
3d29be24e0 Add display_gamma option for client 2014-12-31 02:44:31 +10:00
Dmitry Marakasov
2414580754 Fix endian.h include for FreeBSD 2014-12-30 23:00:01 +10:00
Craig Robbins
53bc56dc3c Cleanup updateCameraDirection and fix random input not working 2014-12-30 22:59:55 +10:00
kwolekr
9b0d77a549 Replace instances of height_min/height_max with y_min/y_max to remove ambiguity 2014-12-30 01:48:20 -05:00
kwolekr
b589353d89 Decoration: Fix default parameter values 2014-12-30 00:52:40 -05:00
Diego Martínez
cfec470b51 Fix documentation for string functions 2014-12-30 00:42:50 -05:00
kwolekr
c6df2bc42c Add support back for resolving group names in NodeResolver 2014-12-29 23:15:53 -05:00
kwolekr
f12118c38b Fix some lingering code style issues 2014-12-29 22:04:47 -05:00
kwolekr
0974337804 Mapgen: Use getBlockSeed2() for blockseeds (much better uniformity) 2014-12-29 21:44:52 -05:00
kwolekr
ca89e63b27 Add core.get_mapgen_names() to Main Menu API (and use it)
Also rewrite mapgen registration for static initialization
2014-12-29 21:23:51 -05:00
kwolekr
5e2753c712 Expose mapgen parameters on scripting init
Add minetest.get_mapgen_params()
Deprecate minetest.register_on_mapgen_init()
2014-12-29 12:59:59 -05:00
Kahrl
ff3cfb746e Ignore downloaded public serverlist if public_serverlist is false
Fixes #1807: When the server list finishes downloading, the local server
list resets in certain conditions
2014-12-30 00:49:23 +10:00
Kodexky
a79a116ac8 Center status text for better visibility. 2014-12-30 00:30:28 +10:00
Kodexky
62feade05d Add extra buttons to Android GUI. All icons are licensed by freepik.com under CC BY 3.0 2014-12-30 00:30:28 +10:00
Rui
4150e533b3 Update Japanese Translation 2014-12-30 00:06:20 +10:00
Kahrl
101baf620c Add util/bump_version.sh 2014-12-30 00:03:10 +10:00
Craig Robbins
3993102e88 Fix -Wtype-limits warnings and remove disabling of -Wtype-limits 2014-12-29 23:56:40 +10:00
kwolekr
5038b9aaec Print unit test failures to dstream 2014-12-29 02:30:03 -05:00
kwolekr
9eb492229b FontEngine: Don't use file extension to check font file compatibility 2014-12-29 01:46:13 -05:00
kwolekr
cc3ab5efa5 LuaVoxelManip: Remove blank allocator 2014-12-29 01:31:37 -05:00
kwolekr
3c637b4baf LuaItemStack: Fix and document behavior of set_name, set_count, set_wear, set_metadata 2014-12-28 23:59:24 -05:00
sapier
acb3519502 Fix MSVC compiler warning about passing this pointer in initializer list 2014-12-28 23:40:44 -05:00
Diego Martinez
ab55da589c Faster string.split implementation. 2014-12-28 23:27:07 -05:00
fz72
86cfbc21da MainMenu: Save 'hide gamemods' and 'hide modpack contents' checkbox state (fixes #1960) 2014-12-28 23:20:51 -05:00
Christophe Piveteau
91c00d29a5 Skip further loading of client if there was an exit signal 2014-12-28 22:46:53 -05:00
kwolekr
863379a4c6 Decoration: Add height_min and height_max parameters
Also set default height_min/height_max to -31000 and 31000,
respectively, for ore and biomes
2014-12-28 22:37:27 -05:00
kwolekr
c5faa64405 Cavegen: Fix copy & paste error (solves #2020) 2014-12-28 22:35:14 -05:00
paramat
570c2042b1 Biome API: Add shore top and shore filler nodes, underwater node, water top node. Add water top depth and shore height parameters. Remove water dust node 2014-12-28 21:37:43 -05:00
kwolekr
61dfa912f5 Ore: Add Vein ore type 2014-12-28 21:17:12 -05:00
kwolekr
900fa26965 Ore: Add Blob ore type 2014-12-28 03:11:00 -05:00
kwolekr
8c98f497d9 PseudoRandom: Expose constant PSEUDORANDOM_MAX 2014-12-28 03:09:32 -05:00
kwolekr
8334100fe1 LuaVoxelManip: Add option to allocate blank data 2014-12-27 23:09:36 -05:00
kwolekr
ae2721f2c8 VoxelManipulator: Remove unnecessary deallocation steps 2014-12-27 22:35:05 -05:00
kwolekr
08d259cf41 Set fallback content if resolving content vector requires everything 2014-12-27 22:20:04 -05:00
kwolekr
b67f37f27e Redefine NodeResolver interface and replace with callback mechanism 2014-12-27 02:12:21 -05:00
kwolekr
3ea5ed4ffe Uncomment version patch field 2014-12-26 11:02:26 -05:00
kwolekr
3f83ca29d3 Bump version to 0.4.11 2014-12-24 22:28:06 -05:00
paramat
7a7614afbf Conf.example: Correct grammar and spelling. Shorten some lines. Move a few lines into correct sections. Remove finite liquid reference. Make indentation consistent 2014-12-25 04:06:15 +01:00
ShadowNinja
33eed6eb84 Fix fs::GetRecursiveSubPaths trying to get directory lists for files 2014-12-24 17:23:07 -05:00
Craig Robbins
8621e6de5d Large increase in performance 2014-12-24 23:13:24 +10:00
paramat
03beb597c2 Increase indentation throughout file for clarity. Correct mistakes. Shorten lines. Make more consistent
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-24 11:23:48 +10:00
paramat
4287480608 State biome API heat and humidity noise parameters in positional format
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-24 11:23:48 +10:00
paramat
c927763dce Conf.example: Fix typo 2014-12-23 21:46:55 +01:00
sfan5
eee2f6a35d Update MinGW toolchain downloads used by travis 2014-12-23 17:20:26 +01:00
kwolekr
565959db86 Silence misc. warnings 2014-12-23 01:09:50 -05:00
Craig Robbins
7b93408884 Make limiting of the reflow liquids queue size optional
If liquid_queue_purge_time == 0 then disable the queue size limiting and make this the default setting
Additionally, liquid_loop_max now defaults to 100000
2014-12-23 15:47:06 +10:00
paramat
0c37d48082 Update mapgen stuff in minetest.conf 2014-12-22 22:45:11 -05:00
kwolekr
249749dd8c Temporarily fix always bright wieldhand with shaders enabled 2014-12-22 22:37:11 -05:00
Kahrl
0483f91f30 Regenerate server_flags_creative.png from XCF 2014-12-21 13:29:02 +01:00
Kahrl
7109e8f9fd Fix weird (and wrong) comment in test.cpp 2014-12-21 13:20:42 +01:00
paramat
2b10520999 lua_api.txt: improve noise documentation. Remove previous eased 3D noise format example 2014-12-20 14:50:57 -05:00
paramat
173e1f6014 Re-add hacky fix for underwater grass, to fix mgv7 user's biomes 2014-12-20 14:50:13 -05:00
unknown
1e8e700ee6 Change TileSpec::frames to be std::vector not std::map
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-21 02:41:17 +10:00
Vanessa Ezekowitz
0d55f43977 Fix visual_scale for plantlike nodes (again)
fixes #1989

move the plant to the bottom of its node properly, without affecting its scale.  See isue #1989
2014-12-19 12:25:32 +10:00
kwolekr
7dbb3916cb Temporarily set default biome in builtin
This should probably be removed when minetest_game has proper biomes.
If I hear "the whole map is just stone!" again after this, I am going to detonate.
2014-12-18 09:57:38 -05:00
Craig Robbins
815876e709 Fix visual_scale for NDT_PLANTLIKE being set too small 2014-12-18 20:28:14 +10:00
Craig Robbins
f5211bbd59 Suppress compiler warning 2014-12-18 19:29:04 +10:00
kwolekr
67063ed59f Remove manual biome noise translation 2014-12-17 16:28:28 -05:00
Craig Robbins
082256a9f8 Do not allow the m_transforming_liquid queue to increase until all RAM is consumed 2014-12-18 03:32:19 +10:00
Pavel Puchkin
3b902fd574 Fix OSX packaging finally
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-16 20:33:54 +10:00
kwolekr
8661b3587b Set WM_CLASS window hint for Xorg 2014-12-15 13:52:10 -05:00
kwolekr
8fe1d3fc2e Expose mapgen chunksize in on_mapgen_init callbacks 2014-12-14 18:46:46 -05:00
Calinou
df0ca45ee2 Update French translation
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-15 02:44:48 +10:00
Diego Martinez
c0b193a261 Update Spanish language.
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-15 02:20:47 +10:00
Pavel Puchkin
a0ac471c1a Fixes #1687 by extra semaphore retval handle code for OSX
See https://github.com/minetest/minetest/issues/1687#issuecomment-56830173

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-15 02:12:39 +10:00
Craig Robbins
06207ac550 Fix typo in lua_api.txt 2014-12-15 01:09:17 +10:00
kwolekr
dcbf1b3ce5 Noise: Don't assume Noise is used for 2D unless gradientMap2D is actually called 2014-12-14 00:18:31 -05:00
Kahrl
17dde5ddd0 Fix background of creative icon (was black, now transparent) 2014-12-14 05:09:43 +01:00
Kahrl
6ba5d7771f Revert "Update Russian translation"
This reverts commit e4e4324a30.

Conflicts:
	po/minetest.pot
	po/*/minetest.po
2014-12-13 15:29:50 +01:00
Craig Robbins
b5e11e0e9a Fix misleading error when exiting the client from the main menu 2014-12-14 00:07:44 +10:00
Craig Robbins
784a452ed5 Provide more info if a subgame is not valid/found 2014-12-13 23:01:16 +10:00
PilzAdam
ce4ed65a39 Update german translation 2014-12-13 13:00:11 +01:00
kwolekr
035e6bfc18 LuaPerlinNoiseMap: Fix 3d noise safety check 2014-12-12 22:58:44 -05:00
Kahrl
c4624639e6 Fix segfault when dragging mouse out of mainmenu window (#1910) 2014-12-13 00:39:07 +01:00
Kahrl
581efea60e Remove vertlabels from main menu and relayout a bit 2014-12-13 00:33:38 +01:00
Kahrl
733d3182bd Display serverlist flags as icons 2014-12-13 00:33:38 +01:00
ShadowNinja
94a5a86493 Update po files 2014-12-12 17:20:53 -05:00
AntonBoch1244
e4e4324a30 Update Russian translation 2014-12-12 17:19:01 -05:00
Enki
e1f5c37bbc Update Italian translation 2014-12-12 17:12:40 -05:00
ShadowNinja
8af9d8b6ac Fix missing call to std::ostringstream::str 2014-12-12 16:32:11 -05:00
SmallJoker
19ccc27d37 Fix MSVC compiling warnings and remove an unused texture 2014-12-12 16:09:34 -05:00
kwolekr
093b1b47d9 Log: Silence errorstream during unittests 2014-12-12 15:51:55 -05:00
Anton
10e0cf8b2c Use std::string::empty() instead of size() where applicable 2014-12-12 15:16:24 -05:00
Jürgen Doser
83830e8682 Add basic support for generating API documentation using Doxygen
If CMake is run and Doxygen is found, add a make target called "doc",
which builds API documention in doc/html. This target is not included
in the default "all" target, you have to explicitly run "make doc" to
generate the documentation.

If graphviz is installed, in particular, if the "dot" binary is found,
doxygen is configured to generate various kinds of diagrams. Note that
due to this, the first run of doxygen can take a while.
2014-12-12 14:59:57 -05:00
kwolekr
8066743a83 Settings: Fix invalid memory access when setting not found in working mem 2014-12-12 14:39:36 -05:00
kwolekr
2c9bbe2736 NodeResolver: Fix some comments and use const references for params 2014-12-12 14:21:41 -05:00
kwolekr
cf8213ea82 Add minetest.clear_registered_decorations() and clear_registered_ores() 2014-12-12 14:08:04 -05:00
MirceaKitsune
cec141adc1 Allow footstep sounds to play for liquid and ladder nodes, making swimming and climbing sounds possible 2014-12-12 16:47:47 +01:00
Kodexky
6ba50aa8f9 Responsive tooltip offset for Android.
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-13 00:43:37 +10:00
Craig Robbins
9f65fd6819 Fix typo in mapblock.h 2014-12-12 20:46:37 +10:00
kwolekr
4e5d17f666 LuaPerlinNoiseMap: Prevent invalid memory access when attempting to generate 3d noise with a buffer created for 2d 2014-12-12 02:46:52 -05:00
kwolekr
00fc0babe0 Mapgens: Rename m_emerge to prevent name collisions 2014-12-12 02:38:39 -05:00
kwolekr
2b8180a417 Add support for NoiseParams in minetest.get_perlin() and add docs on NoiseParams to lua_api.txt 2014-12-12 02:02:44 -05:00
Craig Robbins
c151099b79 Revert "Adjust the values of dirs1 and dirs2 so that rotate_and_place orients textures correctly"
This reverts commit 9878e8de4f.

See: https://github.com/minetest/minetest/issues/1939 and IRC log for discussion
2014-12-12 16:21:29 +10:00
kwolekr
d3dc88fe6b Settings: Fail on invalid sequence and throw exception for LuaSettings 2014-12-12 00:44:17 -05:00
kwolekr
b0c4fd6d3f Settings: Sanitize value for multiline terminator tokens 2014-12-11 23:26:13 -05:00
paramat
f114fc74d6 Fix undeclared globals in functions and shorten lines in misc_helpers.lua. 2014-12-11 21:37:46 -05:00
kwolekr
fb80a7c111 Clean up Noise macros 2014-12-11 02:53:10 -05:00
kwolekr
c07f15e910 NodeResolver: Fix cancelNode and cancelNodeList 2014-12-11 00:41:54 -05:00
kwolekr
16baed0467 Noise: Automatically transform noise maps if needed 2014-12-10 23:35:37 -05:00
kwolekr
dcc48976ce Move get_schematic and read_schematic to l_mapgen.cpp 2014-12-10 01:49:57 -05:00
paramat
4cf8042b7c Biome API: Reduce heat and humidity persistences to 0.5 2014-12-10 01:39:08 -05:00
kwolekr
a89f37bb65 Add support for lacunarity in legacy NoiseParams string format 2014-12-10 01:31:43 -05:00
Kahrl
daefd0ab36 Add paste command (Ctrl-V) in GUIChatConsole 2014-12-10 07:12:08 +01:00
kwolekr
cfba55ba0a Remove get_noiseparams function. read_noiseparams should be used from now on 2014-12-10 00:56:44 -05:00
kwolekr
fb2bc956b1 Noise: Create a deep copy of NoiseParams 2014-12-10 00:37:09 -05:00
kwolekr
88c28414f4 Settings: Sanitize setting name everywhere, not just LuaSettings 2014-12-09 23:52:13 -05:00
kwolekr
d50878d608 Rename and repurpose minetest.set_noiseparam_defaults to set_noiseparams 2014-12-09 23:44:04 -05:00
kwolekr
f2c18511a4 Settings: Make setting entry group and values mutually exclusive
This greatly reduces the complexity of Settings code.
Additionally, several memory leaks were fixed.
2014-12-09 23:29:34 -05:00
SmallJoker
2f8fbdb9f5 Rewrite fs:GetDirListing(file) by kahrl 2014-12-10 02:59:10 +10:00
SmallJoker
5229a229a6 Ignore .name directories and files
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-10 02:49:02 +10:00
Craig Robbins
c5f6f9f77a Increase performance of getLight() by at least 2x
Leads to the following increases:
getSmoothLight() approx.     40% increase
getTileInfo() approx.        25% increase
MapBlockMesh::MapBlockMesh() 25-30%
2014-12-10 00:52:02 +10:00
Pavel Puchkin
a1ea017b51 Fix builds failing on BSD-like (such as OSX) due to an irrlicht bug (temporary fix)
Details:
- https://sourceforge.net/p/irrlicht/bugs/433/
- https://github.com/minetest/minetest/issues/1687#issuecomment-61368769
- https://forum.minetest.net/viewtopic.php?f=42&t=9190&start=125#p159364

In case when "settings.h" is included from "emerge.cpp" or
"environment.cpp", u64 type has "unsigned long" length because
previously <stdint> was included. When "settings.h" is included from
"settings.cpp", u64 has "unsigned long long" length because no <stdint>
was included previously. This leads to different signatures of "setU64" method
and linker cannot find appropriate symbol.

The best fix of this bug should be done in the Irrlicht, but as hotfix I
think this is OK and better than types changing.

Previously this bug didn't appear because there was no "settings.cpp" file and
implementation of all methods was done in the header file.
2014-12-09 20:40:52 +10:00
kwolekr
941d000fc6 Noise: Update Noise::resizeNoiseBuf to account for lacunarity not equal to 2 2014-12-09 00:50:58 -05:00
kwolekr
29b413b376 Biomes: Make biome heat and humidity noise parameters user-configurable 2014-12-09 00:38:04 -05:00
Craig Robbins
7490368984 Fix compiler warning (signed vs. unsigned) 2014-12-08 23:00:49 +10:00
kwolekr
2a7c6d27b3 Optimize noise implementations 2014-12-08 03:26:29 -05:00
Kahrl
0183c05ee0 Fix struct vs. class in forward declarations 2014-12-08 09:06:31 +01:00
RealBadAngel
4f23778e53 Fix lighting artifacts (Issue #1887). 2014-12-08 08:53:31 +01:00
Kahrl
d0be823807 Always escape user provided data in mainmenu fields 2014-12-08 07:48:51 +01:00
kwolekr
2fd3d52020 Add flags and lacunarity as new noise parameters
Add 'absolute value' option to noise map functions
Extend persistence modulation to 3D noise
Extend 'eased' option to noise2d_perlin* functions
Some noise.cpp formatting fixups
2014-12-07 21:59:32 -05:00
RealBadAngel
638f3a8454 Disable loading .mtl files. Theyre not used anyway. 2014-12-08 02:24:46 +01:00
MirceaKitsune
c5f6656f99 Make directional fog colors respect tonemap 2014-12-08 01:44:28 +01:00
Craig Robbins
5c55738276 Fix f6 debug/profiler display
After fonts were re-engineered the height of the f6 debug/profiler display would only display about 2-3 lines of text.
2014-12-08 00:01:22 +10:00
Calinou
bc2b8e9eef Increase third person view distance
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-07 21:54:44 +10:00
Muhammad Rifqi Priyo Susanto
5ffddc94c0 Add space between client names in status text (client)
Before:
Server: version=0.4.10, uptime=190.5, max_lag=0.001, clients={user1,user2,user3,user4,user5,foobar,userplayedminetestthismorning}

After:
Server: version=0.4.10, uptime=190.5, max_lag=0.001, clients={user1, user2, user3, user4, user5, foobar, userplayedminetestthismorning}
2014-12-07 21:32:08 +10:00
RealBadAngel
535c473103 Restore finalColorBlend implementation in shaders. 2014-12-07 11:05:00 +01:00
Craig Robbins
500f691426 Fix regression (increase/decrease viewing range with +/- keys) 2014-12-07 18:32:30 +10:00
kwolekr
2f134ce24f Mapgen V5: Fix use of uninitialized value in ctor 2014-12-07 01:19:42 -05:00
kwolekr
390c0cd691 Schematics: Fix minetest.place_schematic() when defined by a Lua table 2014-12-06 18:39:05 -05:00
kwolekr
60feb4ad25 Add minetest.clear_registered_biomes() api 2014-12-06 18:08:23 -05:00
Kahrl
f3abaec83b Ignore some mouse events sent from scrollbar to GUITable
Fixes #1567, #1806.
2014-12-06 22:45:23 +01:00
SmallJoker
d75f0b0360 Close settings files and save them correctly 2014-12-06 14:08:01 -05:00
sfan5
4fcf9fb66a Add workaround for failing clang build 2014-12-06 19:56:31 +01:00
sfan5
04a1a446cf Build for win32 & win64 on Travis too 2014-12-06 19:56:31 +01:00
kwolekr
5062b99cb0 Rewrite generate notification mechanism
Add support for notify-on-decoration
Clean up mapgen constructors
Clean up mapgen.cpp code style somewhat
Remove trailing whitespace from some files
2014-12-06 13:53:35 -05:00
Craig Robbins
2b119e1e19 Performance of main client loop up to 2x faster In places, up to 3 times faster
NOTE 1: This does not mean a 2x increase in framerate. Increase in fps may be up to 1-2fps
NOTE 2: This local 'caching' of settings is not optimal and an alternative solution will be worked on after 0.4.11 is released
2014-12-07 00:51:01 +10:00
SmallJoker
2fd14e1bd5 Add Lua helper functions vector.apply(v) math.sign(x, tolerance) 2014-12-06 10:07:25 +01:00
Craig Robbins
0e78aa296e Add name of node 'pointed at' to debug
This is "Add name of node pointed at to debug #1677" by @rubenwardy updated to work with game.cpp after it was refactored.
2014-12-05 16:14:50 +10:00
SmallJoker
5da6896d51 Fix MSVC build
Note: The unit test was technically incorrect for all platforms but passes due to implicit casting
2014-12-05 16:09:53 +10:00
RealBadAngel
a648120d54 Recalculate normals for mesh #0. Fix for issue #1902. 2014-12-05 01:05:18 +01:00
Craig Robbins
f7f7fec497 (INTERIM) Make sizes of the font in formspecs consistent and not so large
Until a permanent fix can be developed
2014-12-05 02:35:21 +10:00
Craig Robbins
c16b1e2639 Optimise VoxelManipulator::copyFrom
~3-4x faster

This indirectly optimises MapBlock:copyTo() which in turn improves performance of MeshMakeData::fill()
2014-12-04 23:37:04 +10:00
Craig Robbins
f6912f4241 Right mouse button behaviour for craft/inventory If right mousebutton clicked once then don't drop single items into slots. If right mouse button has been clicked and held a second time, drop items as the mouse is moved. In the second case (automatically drop/place items as mouse is moved) only auto-drop into blank slots, or slots that contain the same item. 2014-12-04 23:30:53 +10:00
Calinou
d7b3046cf6 Make dropped items larger and rotate faster
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-12-04 21:10:12 +10:00
kwolekr
f0cd59034c Settings: Various setting group fixes and enhancements
- Remove blank setting values when setting has a group
 - Pair setting values with groups in file when possible
 - Preserve user-set whitespace in setting objects
 - Delete setting value when setting NoiseParams group
 - Delete overwritten groups outside of lock
2014-12-04 03:20:07 -05:00
paramat
0a5373d400 Add definable node_stone to biome API, mgv5, mgv7. Reduce and correct depth of mgv7 biomes. l_mapgen.cpp: add '#include mapgen_v5.h' because '#include mapgen_v7' is there. Improve underwater grass hack 2014-12-03 19:45:29 -05:00
kwolekr
fcb1ea903f Settings: Fix getNoiseParamsFromValue() 2014-12-02 21:09:16 -05:00
kwolekr
68c799bf99 Use setting groups for NoiseParams
Add format example to minetest.conf.example
Add Settings::setU16()
Throw exception on attempted access of NULL settings groups
2014-12-02 04:03:37 -05:00
Kahrl
78103e622c Fix style of comment in minetest.conf.example 2014-12-01 21:47:22 +01:00
Kahrl
e402aa8984 Add fontengine.cpp to Android.mk 2014-12-01 21:22:23 +01:00
sapier
93aab0362c Fix settings callback "call" lost on rebase 2014-12-01 19:47:57 +01:00
Craig Robbins
691b18c41b Fix node 0,0,0 being highlighted when enable_node_highlighting == false
Without this patch node 0,0,0 is highlighted when enable_node_highligting is false
There is a minor lighting issue remaining, however it seems to be related to a different bug (https://github.com/minetest/minetest/issues/1887)
2014-12-01 22:13:21 +10:00
Craig Robbins
d4f42938a5 Fix build
Note: this does not fix the warnings generated by clang
2014-12-01 15:17:47 +10:00
kwolekr
360660947b LuaSettings: Sanitize setting name strings 2014-11-30 19:01:54 -05:00
Kahrl
16781da4f9 Fix segfault at exit caused by non grabbed font 2014-11-30 23:21:14 +01:00
kwolekr
175b7a28e5 settings: Add setting groups and multiline entries 2014-11-30 16:11:21 -05:00
sapier
39162de15a Make hud use fontengine too
Fix non coding style conforming glb_fontengine to g_fontengine
Fix fonts never been deleted due to grabbed to often
2014-11-30 18:06:54 +01:00
Zefram
d1d6a97b1c Scale form elements consistently
The ratios between the sizes of form elements, including text, is now
fixed, aside from variations caused by rounding.  This makes form layout
almost fully predictable, and particularly independent of player's
screen size.  The proportions of non-text elements are the traditional
proportions.

For compatibility, the way in which element positions and sizes are
specified remains unchanged, in all its baroqueness, with one exception.
The exception is that the position of a label[] element is now defined
in terms of the vertically center of the first line of the label,
rather than the bottom of the first line of the label.  This change
allows a label to be precisely aligned with button text or an edit box,
which are positioned in a centering manner.  Label positioning remains
consistent with the previous system, just more precisely defined.

Make multi-line label[] elements work properly.  Previously the code set
a bounding rectangle assuming that there would be only a single line,
and as a result a multi-line label would be cut somewhere in the middle
of the second line.  Now multi-line labels not only work, but have
guaranteed line spacing relative to inventory slots, to aid alignment.

Incidentally fix tabheader[] elements which were being constrained to
the wrong width.

Given an unusually large form, in variable-size mode, the form rendering
system now chooses a scale that will fit the entire form on the screen,
if that doesn't make elements too small.  Fixed-size forms, including the
main menu, are have their sizes fixed in inch terms.  The fixed size for
fixed-size forms and the preferred and minimum sizes for variable-size
forms all scale according to the gui_scaling parameter.
2014-11-30 17:50:09 +01:00
sapier
dceb9f7d60 Implement proper font handling 2014-11-30 17:50:09 +01:00
kwolekr
25945dc539 noise: Throw exception on noise allocation failure 2014-11-29 16:52:45 -05:00
SmallJoker
a3e019c4f6 Fix MSVC compiling error (argc/argv not available to pass to init_gettext)
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-29 22:31:40 +10:00
Ciaran Gultnieks
c30346ea30 Improve Lua API documentation
Changes:
  * Add extra documentation for remove_item.

    This isn't as silly as it sounds: iterate a list containing items with
    unique metadata each, and remove_item the first one you find, placing
    into a different - fine, except the remove will invariably remove the
    wrong one, leading to items being duplicated and others destroyed.

    Arguably it's a bug, and Inventory::removeItem should actually remove
    the item you tell it to. (i.e. if the passed ItemStack has metadata,
    match it). But it seems reasonable to just document the behaviour
    more clearly.

 * Improve string_to_pos documentation.
 * Clarify dig_node documentation (return value).
 * Better on_step documentation.
 * get_nodemeta -> get_meta.
 * Other minor fixes.
2014-11-28 18:35:45 -05:00
Rui
2b1a151226 Update minetest.po (Japanese) 2014-11-28 23:09:58 +10:00
Craig Robbins
edb125837c Fix regression with command line --go option 2014-11-28 22:48:46 +10:00
SmallJoker
6a43b3af09 Add minetest.copy_table(table) To get rid off the "table references"
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-27 18:19:01 +10:00
Ciaran Gultnieks
77137a92cf Don't corrupt stepheight when setting other properties 2014-11-26 20:02:48 +01:00
Kahrl
264d740c9d Wield: always obey anisotropic_filter setting, not just for hi res textures 2014-11-26 19:54:04 +01:00
Kahrl
571ba5d9c5 EMF_USE_MIP_MAPS was introduced in Irrlicht 1.8, don't use in 1.7.3 or below
This is not optimal as it will cause minor graphical glitches for
Irrlicht 1.7 users, but at least it fixes the build.
2014-11-26 19:17:50 +01:00
Sokomine
9f9279008c added enable_build_where_you_stand option
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-27 01:07:11 +10:00
Kahrl
ec5188a49a Wieldmesh: don't force anisotropic filtering on, instead disable mipmaps
This should fix #1844. Thanks to oleastre for making the first version
of this commit (#1848).
2014-11-26 15:17:17 +01:00
Craig Davison
dbae8a8854 Fix some undeclared global variables 2014-11-26 22:50:08 +10:00
rubenwardy
8df8554fce Only set the camera update keymap when using a debug build
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-26 21:53:01 +10:00
Kodexky
9aaf67ebe0 Fix Android main menu crash, and user data directory check.
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-26 18:11:08 +10:00
Calinou
1c9f05d792 Increase step smoothing to fit 1:1 stairs (works well on slabs too)
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-26 17:28:02 +10:00
Craig Robbins
26cf98ccfc Fix client "double saving" simple singleplayer local maps 2014-11-26 00:49:54 +10:00
KodexKy
5413ed1195 Fixes for Android build errors. Enable sensor landscape rotation.
Fix typo in Android Makefile ndk path.
Fix touchscreen parts of game.cpp to work after Zeno's refactor.
Fix isdigit and isspace overload conflict with Android Irrlicht in string.h
Enable sensor landscape rotation in Android Manifiest.
Add mapgen v5 to Android build.
Fix Makefile not checking leveldb.

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-25 13:28:51 +10:00
dvere
9878e8de4f Adjust the values of dirs1 and dirs2 so that rotate_and_place orients textures correctly
According to doc/lua_api.txt if paramtype2 == "facedir" the two least significant bits of parm2 orient the texture around the axis. For dirs1 (looking at a wall) these would be 0, 1, 2, 3 and for dirs2 (looking at the ceiling) 2, 1, 0, 3
2014-11-25 12:44:47 +10:00
ShadowNinja
a1db83e93f Make duplicate warning checks file and line specific 2014-11-23 16:34:49 -05:00
sapier
0dcc4b251f Fix console spaming by debug function on mod checking for global variable to exist. 2014-11-23 15:24:37 +01:00
RealBadAngel
0164483310 Port createForsythOptimizedMesh from Irrlicht 1.8
Mesh rotation helpers.
2014-11-23 00:51:08 +01:00
Craig Robbins
21464639b3 Fix regression with USE_REDIS (refactor_main) 2014-11-23 01:12:25 +10:00
Craig Robbins
d6cc0d8223 refactor main.cpp 2014-11-23 00:27:02 +10:00
Craig Robbins
cb2d467665 Fix smooth lighting (ambient occlusion)
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-22 21:58:00 +10:00
Pavel Puchkin
f7f24d1470 Fix compiling if no endian.h found
f7d6509 introduces error when no endian.h found in the system.

Since "CHECK_INCLUDE_FILE" returns empty string instead of "0", when
"cmake_config.h" is generated it has "#define CMAKE_HAVE_ENDIAN_H " line.
Later we have "#define HAVE_ENDIAN_H CMAKE_HAVE_ENDIAN_H" in the
"config.h", an thus "HAVE_ENDIAN_H" is also empty sting. Because of
this, "#if HAVE_ENDIAN_H" is incorrect preprocessor directive.

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-22 21:56:38 +10:00
ShadowNinja
6c52de88fb Update credits menu 2014-11-21 11:35:29 -05:00
Rafael Reilova
f7d65091f8 serialize.h: use machine native byte swapping if available, fall-back to previous generic method if not (supported for GCC using endian.h, detection done in cmake) write/readARGB8() - just write 32-bit color in one op, instead of 4 1-byte ops cleanup: removed unneeded buffer init for some serialize-out functions use a #define for the fixed point factor in read/writeF1000()
nodemetadata.cpp, nodetimer.cpp
	optimzation: simpler deserialize node position method

staticobject.cpp:
	cleanup: use util/serialize.h inlines instead of its own de/serialization

serialize.cpp:
	minor optimization/cleanup: avoid generation of unneeded string temporary

CMakeLists.txt, cmake_config.h.in: detection of endian.h

config.h: added HAVE_ENDIAN_H

Commits due to feedback squashed

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-21 22:33:48 +10:00
Craig Robbins
d406ac994b Optimise functions from CNodeDefManager and VoxelManipulator
CNodeDefManager::get()
VoxelManipulator::addArea()
2014-11-21 14:56:45 +10:00
Craig Robbins
ea404979e1 Optimise getTileInfo()
getTileInfo() ~1.5x faster
getSmoothLight ~2.0x faster
2014-11-21 14:56:45 +10:00
paramat
fcdb1a8fc2 Mgv5 1 up 1 down overgeneration for biome surface continuity 2014-11-20 23:13:09 -05:00
paramat
d39887dadd Mgv5 get ground level at point function. Fast spawn player version 2014-11-20 21:07:20 -05:00
ShadowNinja
c4e393deea Simplify loading of Android version of menu 2014-11-20 15:37:20 -05:00
ShadowNinja
d2b5ba83b0 Fix leaking global in texture pack menu 2014-11-20 15:37:20 -05:00
Kodexky
b9bc8dadb2 Fix raillike bug (currently manifests itself on Android), and minor improvement to readability.
NB: Minor edits to patch made by Zeno- (int to short and minor formatting)
2014-11-20 15:41:59 +10:00
ShadowNinja
b1965ac209 Clean up rollback 2014-11-19 16:21:59 -05:00
ShadowNinja
da0f1e5497 Fix wallmounted mesh rotations 2014-11-19 16:17:54 -05:00
ShadowNinja
a6ba042cf7 Add strict module
Also fix leaking globals found by it.
2014-11-19 12:40:54 -05:00
ShadowNinja
6afdb22ba7 Tweak core.serialize
This adds proper support for nested tables and improves performance a bit.
2014-11-19 12:40:54 -05:00
sfan5
9d69436052 Add (optional) client-side saving of server map to disk 2014-11-19 15:11:23 +01:00
ShadowNinja
0ee5a2197d Fix Belarusian translation header
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-19 22:31:57 +10:00
ShadowNinja
feb3070299 Add gettext to Travis build
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-19 22:31:57 +10:00
Kahrl
55e4c35eaf Remove unused rangelim function (the macro still exists) 2014-11-19 10:19:52 +01:00
SmallJoker
da2ffebc41 Fix indonesian language errors
Errors found by @Sokomine.
2014-11-18 15:17:46 -05:00
srifqi
5a9e696fa1 Update Indonesian Language
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-18 20:39:48 +10:00
Craig Robbins
f0a8f655c0 Fix double free bug when server is shut down
Thanks @oleastre
2014-11-15 22:33:52 +10:00
kwolekr
8831703428 Fix NoisePerlin3DEased return value 2014-11-14 21:19:46 -05:00
kwolekr
8d3a68f343 Fix warnings and other misc. minor changes 2014-11-14 03:07:12 -05:00
Craig Robbins
5b8855e83c Remove most exceptions from getNode() (and variants) 2014-11-14 18:05:34 +10:00
Wouters Dorian
92815ad54b Improved VoxelArea variable locality, thus performance
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-14 00:10:09 +10:00
SmallJoker
874109c520 Add option 'eased' to NoiseParams
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
2014-11-13 23:06:38 +10:00
kwolekr
b57478b93b Fix compilation under some Linux distributions 2014-11-13 00:16:37 -05:00
kwolekr
c3ad08708f Mapgen v7: Fix uninitialized spflags
Mapgen v5: Fix minor style issue
2014-11-12 23:58:50 -05:00
kwolekr
fc9521874c Add eased 3d point-value noise functions 2014-11-12 23:49:45 -05:00
kwolekr
7616537bc0 Add Generator Element Management framework
Add BiomeManager, OreManager, DecorationManager, and SchematicManager
2014-11-12 23:02:41 -05:00
RealBadAngel
f25cc0dbae Wielded fixes. Add shaders support. 2014-11-13 03:51:04 +01:00
Craig Robbins
45ebaa3524 Fix profiler values not being updated (F6) and not being logged 2014-11-11 20:58:57 +10:00
Kahrl
0adadba218 Serverlist: announce mg_name from map_meta.txt instead of minetest.conf 2014-11-10 22:27:10 +01:00
Zeno-
a1e9732407 Merge pull request #1825 from Zeno-/control_key_cache
Create faster key cache for main game loop (client)
2014-11-10 19:12:25 +10:00
Craig Robbins
987e565eeb Create faster key cache for main game loop (client) 2014-11-10 12:26:19 +10:00
paramat
10a47b7fee Tune cave noise scales to 6. Fix blobs spflag, now enabled. Update conf.example 2014-11-09 20:21:39 -05:00
Wuzzy
18c583ee0b Add tooltips to main menu subgames button bar 2014-11-09 09:38:43 +01:00
Kahrl
9b551d5cbc Implement WieldMeshSceneNode which improves wield mesh rendering
- Don't create and cache an extruded mesh for every (non-node) item.
  Instead use a single one per image resolution.

- For cubic nodes reuse a single wield mesh too

- Improve lighting of the wielded item

- Increase far value of wield mesh scene camera, fixes #1770

- Also includes some minor refactorings of Camera and GenericCAO.
2014-11-08 23:11:57 +01:00
Craig Robbins
cc8d7b8640 Stop inserting empty lines at end of minetest.conf file each time it is rewritten
See: https://github.com/minetest/minetest/issues/1790
2014-11-08 21:57:52 +01:00
Craig Robbins
1c21e391ed Fix regressions and minor improvements in refactor_the_game
a) Fix double tap for jump and show_debug
b) Revert changes to limitFps()... there is no verification that the new method was an issue, but going back to old method just in case
b.2) limitFps() no longer calls device->run() and also no longer has to be called immediately after a call to device->run()
2014-11-08 21:40:11 +01:00
paramat
92981b2fee Add mgv5. New noise code, uses biome API. Eased 3d noise for terrain, caves, blobs 2014-11-08 21:37:26 +01:00
RealBadAngel
d0be27415e Speed up removing a node (less block mesh updates). 2014-11-08 21:04:30 +01:00
ShadowNinja
05e7f71b33 Fix dump() indentation with non-tab indents 2014-11-08 12:49:50 -05:00
Ryan Newell
90b6de173e Add last_login field to auth.txt
Also shortens some related code and adds more parameters to string.split.
2014-11-08 12:49:50 -05:00
SmallJoker
c40e993ce4 Replace setting unlimited_player_transfer_distance with player_transfer_distance 2014-11-08 14:56:09 +01:00
Craig Robbins
96fcca4ea0 Address issues related to refactoring the_game
Fix time of day persistence
Fix wield item being updated every frame causing small performance hit
Rename some classes and variables
2014-11-03 13:57:56 +01:00
Kahrl
817e3a6c64 Fix regression: mouse wheel couldn't scroll from last hotbar item to first 2014-11-02 21:59:56 +01:00
Craig Robbins
43bf4324d5 Cleanup and (mostly) document util/string.h and (very) minor refactoring
Updated: Incorporated feedback from 'kahrl'
Updated: Moved MinetestApp::boolToCStr() from game.cpp into string.h renaming it bool_to_cstr()
2014-11-02 18:07:20 +01:00
Kahrl
8040806f22 Include mg_decoration.h, mg_ore.h from emerge.cpp to fix warnings 2014-11-02 17:52:30 +01:00
Craig Robbins
209c0dd1af Fix unit tests failing if IPv6 not available
See:
https://github.com/minetest/minetest/issues/1526
https://github.com/minetest/minetest/issues/793
2014-11-02 02:27:26 -05:00
Craig Robbins
dfd15fd1d9 Modified dtime calculation method in limitFps() 2014-11-02 02:20:06 +01:00
Craig Robbins
429ecb2b94 Refactor the_game() to make it more understandable and maintainable.
The following is a record of 31 commits before squashing:

Revert "Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism"

This reverts commit b49e5cfc70.

Basic reformatting with astyle
-- additional formatting will be modified, manually, as the need for it is encountered

Start "outlining" what a MinetestApp class might look like

Add MinetestApp::shutdown()

Converted class member functions to camelCase and created protos for new functions

First stage of connect to server done

Add get itemdefs/nodedefs/media code

Init clouds, camera, sky, init GUI, HUD

Input handling

Client events, camera, sound, draw

Fix wield hand getting stuck digging and add debug text back

Fix FPS

Added profiler graph back

Fix FPS issue
Need to work out what went wrong and clean up the copy/paste stuff

Annotate

Various:
Rewrote limitFps()
Limited scope of some variables

Jitter calcs

Reduce scope of objects

Move some stuff out of ::run and minor formatting cleanup

Scope reduction

Function splits

Removed old (broken) limitFps()

Added exception handling back

Fixed some formatting

Reverted commented out unit tests (uncommented them)

Slow clouds down on loading and media screens so the behaviour is like the original the_game()

Formatting/style (no functional changes)

Manually reapply upstream b49e5cf: Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism

Fixed silly errors on my part
Minor formatting cleanups

Removed strange differentiation in FPS limiting when loading
FPS limiting was done differently if cloud_menu_background was true, which does not make sense

Cleaning up

Add some comments
2014-11-02 02:18:25 +01:00
kwolekr
9e811a92e7 Split up mapgen.cpp 2014-11-01 13:16:23 -04:00
kwolekr
db25f75337 Fix erroneous lua_pop parameter 2014-10-30 16:23:48 -04:00
kwolekr
f0ae2da89e Fix uninitialized variable warning 2014-10-30 02:53:20 -04:00
kwolekr
6b4307791a mapgen: Resolve nodes in ctor rather than makeChunk 2014-10-30 02:29:37 -04:00
kwolekr
03f3f958ed Check minetest.hud_change() parameters on conversion (Fix #1714) 2014-10-30 00:12:12 -04:00
Craig Robbins
6c9bbb0360 Fix bug introduced by me (Zeno) 2014-10-29 08:54:16 +01:00
RealBadAngel
dd4c21c180 Add option to enable mesh caching, add wallmounted for meshes. 2014-10-29 08:37:33 +01:00
Craig Robbins
813c088c1c Added names colours and refactored parseColorString() 2014-10-29 03:10:59 -04:00
kwolekr
1cb6ea6346 Refactor decoration-related code
Split up ModApiMapgen::l_register_decoration()
Define and make use of CONTAINS() and ARRLEN() macros
2014-10-29 01:56:37 -04:00
PenguinDad
7c6da2f384 Fix various indentation issues 2014-10-28 15:37:58 -04:00
Craig Robbins
6396712ec4 Fix #1733: An unhandled exception occurred: GetPeer: Peer not found (possible timeout) 2014-10-28 13:39:23 -04:00
rubenwardy
9bb6648f26 Add notice when only minimal is installed 2014-10-28 13:17:14 -04:00
kwolekr
4a3592ff9a Add NodeResolver documentation
Set content to fallback on AddNode failure
Consider node list requests with no results as failed
2014-10-28 02:23:45 -04:00
kwolekr
bc28ca0636 Prevent invalid memory access under failure conditions 2014-10-28 00:18:53 -04:00
kwolekr
6ddf458504 Change license of noise implementation to Simplified BSD 2014-10-27 21:17:07 -04:00
kwolekr
b994a7af13 Add support for eased 3d noise 2014-10-27 02:02:38 -04:00
kwolekr
d274cbfce6 Add NodeResolver and clean up node name -> content ID resolution system 2014-10-26 23:55:45 -04:00
Kahrl
b49e5cfc70 Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism 2014-10-24 21:14:48 +02:00
Pavel Puchkin
73bf791fe1 Remove remenants of mob code
Since minetest has no mobs within the core anymore, I suppose these
settings and code should go. Any mod that uses `minetest.setting_getbool`
will work with no problem since the default return value is `false`.
2014-10-23 20:54:33 -04:00
Rui
737cce5f2b Fix syntax error in Japanese translation 2014-10-23 15:36:11 +02:00
RealBadAngel
7e34621b1d Fix broken plantlike drawtype. 2014-10-22 21:15:31 +02:00
srifqi
171bbd7959 Add Indonesian Language 2014-10-22 21:05:14 +02:00
Rui
31a8a8022a Translated using Weblate (Japanese) 2014-10-22 21:05:14 +02:00
David Thompson
fd5eaae2ba Search for subgames using $MINETEST_SUBGAME_PATH. 2014-10-22 21:05:14 +02:00
RealBadAngel
d221917170 Recalculate normals for cached meshes.
Check if mesh is here before adding to meshcollector.

Fix deleting the meshes.
2014-10-21 18:43:29 +02:00
Kahrl
9029a34cc6 Fix some indentation in nodedef.cpp 2014-10-20 16:11:38 +02:00
Kahrl
ae375cc322 Fix memory leak caused by mesh nodes (and nodeboxes) 2014-10-20 16:11:00 +02:00
RealBadAngel
e5652cb75c Custom collision boxes node property. 2014-10-19 20:48:21 +02:00
sfan5
b11e1db809 Update the cURL the buildbot uses to 7.38.0 2014-10-19 16:09:36 +02:00
Craig Robbins
076c5ee223 Various uninitialised variable fixes
sky.cpp: m_bgcolor.getAlpha() was being used before initialised

mesh related: m_highlight_mesh_color was being used uninitialised
2014-10-19 15:33:08 +02:00
Craig Robbins
fe8ef1be59 Move buttons upwards to accommodate for new configure keys button in the
pause menu
2014-10-18 17:30:17 +02:00
RealBadAngel
0066bd77d2 Add meshnode drawtype. 2014-10-18 16:42:23 +02:00
Kahrl
d1ccc64e1e Make sure PRECISION_SECONDS corresponds to the integer 0 2014-10-09 11:40:33 +02:00
Kahrl
26495da94a Fix unit reported by TimeTaker (was always ms) 2014-10-09 11:15:03 +02:00
Kahrl
8a44df8cba Change topleft text when switching subgames, fixes #1728 2014-10-09 08:58:47 +02:00
Craig Robbins
914f850d31 Fix use of unitialized variables in mouse button handling 2014-10-08 14:56:29 -04:00
Mushiden
7b548cd2b5 Add in-game key change menu 2014-10-07 17:24:09 -04:00
LeMagnesium
b98e8d6da8 Add a better error message when trying to teleport another player without bring privileges 2014-10-07 16:52:52 -04:00
ShadowNinja
741df993ff Fix object reference pushing functions when called from coroutines 2014-10-07 16:37:45 -04:00
BlockMen
28438bba27 Add [colorize modifier 2014-10-05 16:49:52 +02:00
kwolekr
173beeee65 Fix special tile backspace culling 2014-10-03 11:20:29 -04:00
RealBadAngel
b9cb196d49 Bugfix: dont highlight (0,0,0) when theres no node pointed. 2014-10-03 16:03:14 +02:00
RealBadAngel
0920f55eb4 Fix broken plantlike drawtype. 2014-10-03 15:33:32 +02:00
kwolekr
37d3c3d328 Fix misc. style issues 2014-10-03 03:49:06 -04:00
kwolekr
01ce57ade5 Clean up nodedef.cpp 2014-10-03 03:21:08 -04:00
Diego Martínez
5baf379f40 Add better documentation for alternate drop definition to lua_api.txt. 2014-10-02 16:49:33 -04:00
BlockMen
f48f686930 Add optional framed glasslike drawtype 2014-10-02 11:35:15 +02:00
ShadowNinja
e9c9b66ae9 Make players check inventory modification properly 2014-10-01 18:44:36 -04:00
ShadowNinja
8b3135a643 Only set player dirty flag if values change 2014-10-01 18:44:36 -04:00
ShadowNinja
cd0df0d5e7 Simplify player modification checks 2014-10-01 18:44:36 -04:00
sapier
b37bff72f1 Fix android build using hardcoded path for data instead of using the one fetched by android api on init.
Fix android missing version information
2014-10-01 22:18:29 +02:00
Diego Martínez
47abe25fe7 updatepo.sh: Find all files 2014-09-30 13:25:26 -04:00
SmallJoker
db5aff832b Use round if falling node is misplaced
Fixes: http://i.imgur.com/arAWw1i.png (middle-right)
2014-09-28 13:33:39 +02:00
BlockMen
61ed56f916 Standardize tooltip row detection 2014-09-28 10:10:43 +02:00
BlockMen
b75e7148c2 Fix multilined description in tooltips (fixes #1688) 2014-09-28 08:44:05 +02:00
sapier
121e8cc2a1 Fix totally messed up 3d modes interlaced/topbottom/sidebyside 2014-09-25 20:37:06 +02:00
sapier
15c7460eda Fix chat lines not word wrapped correct 2014-09-25 19:54:02 +02:00
Kahrl
5ca5630a11 Fix command line parsing
Broken by 6bc4cad0ed, e.g.
  minetest --worldname world
would be parsed as
  minetest --worldname --worldname
2014-09-22 11:02:26 +02:00
ShadowNinja
56195dc2e4 Fix build with redis
Broken by 6bc4cad0ed because database-redis.h
depended on settings.h to include filesys.h.
2014-09-21 21:02:49 -04:00
TriBlade9
9a685a4f2e Add firelike drawtype 2014-09-21 15:50:27 -04:00
ShadowNinja
b5a6bf2068 Update default of preload_item_visuals in minetest.conf.example 2014-09-21 15:50:27 -04:00
ShadowNinja
3e7e65885a Make dump's output prettier
Changes:
  * Indentation with tabs by default.
  * Array keys dumped without "[i] = " prefix.
  * String keys that are valid identifiers aren't enclosed in '[""]'.
  * Basic support for multiple references (as specified in the comment).
2014-09-21 15:24:00 -04:00
ShadowNinja
fb35cfb2dc Fix GCC reorder warning
Caused by a020d1b653.
2014-09-21 15:23:36 -04:00
sruz25
f6321e277b Add inventory right click drag and drop 2014-09-21 15:23:27 -04:00
Rui914
2c16a11527 Update ja/minetest.po 2014-09-21 15:07:22 -04:00
ShadowNinja
d790acaaa7 Revert the icon name in minetest.desktop
This reverts commit 7993696fc4, which broke the
icon on most distributions.
2014-09-21 14:39:36 -04:00
ShadowNinja
c061bdd37f Fix locking bugs and make inventory deserialization errors more specific 2014-09-21 14:39:36 -04:00
ShadowNinja
6bc4cad0ed Split settings into seperate source and header files
This also cleans up settings a bit
2014-09-21 14:39:35 -04:00
ShadowNinja
2ae5d3f3ab Fix Settings locking 2014-09-21 14:39:35 -04:00
ShadowNinja
cd64a92a8c Use const references for Settings methods
Also check for (this == &other) before locking mutexes.
2014-09-21 14:39:35 -04:00
Craig Robbins
b97c9c6577 Make getters of the Settings class const
Also removed 2 unused functions.
2014-09-21 14:39:35 -04:00
BlockMen
a020d1b653 Allow taking screenshots of formspecs and move message to chat 2014-09-21 19:15:48 +02:00
sfan5
2b7a1ca572 Update .mailmap 2014-09-21 19:01:43 +02:00
SmallJoker
44a1d0c192 Fix wrong video_driver setting when changing in mainmenu
Fixes issue with direct3d(8|9)
2014-09-21 16:27:58 +02:00
ShadowNinja
406ed5efac Add compression API 2014-09-20 14:02:54 -04:00
Mikaela Suomalainen
d6e28c19b5 .travis.yml: fix possible issues
* use `pool.sks-keyservers.net` as keyserver as it's often more reliable
than `keyserver.ubuntu.com` as you can see with Google.
* put script to multiple lines
    * build out-of-source
    * use two CPUs
        * make seems to fail if $(nproc) is used unlike WeeChat. ZNC has
          same issue.
* mark build as failed if one job fails immediately without waiting for
all builds to finish.
    * this doesn't stop jobs that didn't finish before build was marked
    failed.
2014-09-20 13:13:11 -04:00
Kahrl
e9d62950e3 Revert "Small changes to French translation (Petites modifications mineures)"
This reverts commit 4432e98261.

Exception: "Nom / Mot de Passe" --> "Nom / Mot de passe"
2014-09-20 14:02:00 +02:00
kilbith
821b26884a Fixed french vocabulary/grammar errors
Notes (in french) :

72 msgstr "Ok" : OK est un acronyme, pas un nom, donc majuscules.
193 msgstr "Feuilles transparentes" : quel type de feuilles ? Trop vague.
213 msgstr "Filtrage anisotropique" : oxymore.
229 msgstr "Précharger les visuels d'objets" : doit être écourté (dépasse trop la bordure grisée)
2014-09-20 12:17:54 +02:00
mimilus
4432e98261 Small changes to French translation (Petites modifications mineures) 2014-09-20 12:15:13 +02:00
Stefan Beller
adfba207a6 Add a .mailmap file
So I was checking out minetest and wondered how many developers there are
and how they development community is setup and such, so I decided to have
a look at the git shortlog. There were lot of double entries for some
persons, so it was harder to estimate the number of people involved.

By adding a .mailmap file, the overview of the authors is much improved
For details on the .mailmap file, see
https://www.kernel.org/pub/software/scm/git/docs/git-shortlog.html

Signed-off-by: Stefan Beller <stefanbeller@gmail.com>
2014-09-20 11:36:35 +02:00
donat_b
c9cab6bcab Make config compatible with C++11 2014-09-20 11:20:13 +02:00
RealBadAngel
8da3136183 Change default halo.png for better visibility. 2014-09-19 17:47:19 +02:00
ShadowNinja
8852333eb3 Use configured bind_address for HTTPFetch 2014-09-18 21:54:23 -04:00
ShadowNinja
86a3c8ce56 Reduce indentation of HTTPFetchOngoing
Also clean up some related things.
2014-09-18 21:54:22 -04:00
TriBlade9
18bfa1c785 Added configurable selectionbox width. Min width = 1, Max = 5 2014-09-19 03:28:46 +02:00
RealBadAngel
86a0f5603b Bugfix: don't highlight air nodes. 2014-09-18 09:56:27 +02:00
RealBadAngel
58e6d25e03 Node highlighting. 2014-09-17 22:06:13 +02:00
Kahrl
206f076422 Fix typo in comment in chat.cpp 2014-09-14 15:37:27 +02:00
ShadowNinja
2f170a63c6 Simplify and optimize schematic replacements 2014-09-11 22:25:06 -04:00
ShadowNinja
b8ba6318d6 Fix another typo in example configuration 2014-09-11 20:21:03 -04:00
William Teder
0791eac2cc Fix typo in default configuration file 2014-09-11 20:16:19 -04:00
sapier
62ea342ad1 Log unhandled exceptions in connectionthreads to errorstream 2014-09-06 18:22:27 +02:00
sapier
944e79d7a6 Fix access to invalid data on reception of packet with size 0 2014-09-06 17:42:34 +02:00
BlockMen
8948907431 Change screenshot colorformat properly 2014-09-03 19:41:29 +02:00
BlockMen
b2102bfe49 Don't save alpha channel in screenshots (fixes #1451) 2014-09-03 11:39:29 +02:00
kwolekr
f3eefeb794 Add LuaVoxelManip methods: get_node_at() and set_node_at() 2014-09-01 17:33:21 -04:00
kwolekr
9e4e7072da Update Mapgen VoxelManipulator on buffer invalidation 2014-09-01 15:12:22 -04:00
kwolekr
3fa4f782d9 Save previously generated blocks on Mapgen blitback 2014-09-01 14:58:05 -04:00
sapier
e5b4748bb4 Fix only one texture being updated on window resize breaking sidebyside and topbottom 3d modes 2014-08-29 01:35:35 +02:00
sapier
fb2183b61d Fix interlaced 3d mode second image being flipped on compiling against irrlicht >= 1.8 2014-08-29 00:54:46 +02:00
sapier
8ab2971e0b Remove invalid doc about minetest.get_time_us() 2014-08-25 21:52:52 +02:00
sapier
d7364d65ac Add missing doc for minetest.get_us_time() 2014-08-25 21:16:32 +02:00
RealBadAngel
e66bb9b864 Allow use all 6 faces for special tiles.
Protocol version bump.
2014-08-25 12:47:06 +02:00
sapier
3ce6888c1c Fix retval of entity.get_staticdata beeing lost while profiling is enabled 2014-08-24 01:56:27 +02:00
sapier
e09293b483 Add lua exception handling test code
Catch some error situations when mod used without thinking about it
2014-08-23 20:53:34 +02:00
Kahrl
3e267a6ece Fix LuaJIT exception wrapper 2014-08-23 20:41:03 +02:00
Craig Robbins
f33d31693e Fix seg fault if popping from empty stack (L-system trees)
See: https://github.com/minetest/minetest/issues/1525

Background
Wuzzy2: If you attempt to spawn a L-system tree with minetest.spawn_tree, you can make Minetest crash if it is attempted to pop an empty stack.

ShadowNinja: This shouldn't cause a segmentation fault, but it should throw a Lua error

Commit Description
This commit throws a Lua error instead of causing a segmentation fault. The server will still "crash" but will include a Lua backtrace.

L-Systems fix randomness
Unless a random seed is provided (via Lua treedef) seed the PRNG with a different seed for each tree
Resolves: https://github.com/minetest/minetest/issues/1469

Fix l-system crash when treedef random_level not set by Lua
2014-08-23 06:40:27 +02:00
sapier
996ea60642 Add video driver selection to settings menu (based uppon idea from webdesigner97) 2014-08-23 01:55:54 +02:00
Kahrl
26f4a5c110 Minimal game: add /dummyball <count> command 2014-08-23 00:52:57 +02:00
sapier
7940a4264a Fix chat messages capturing mouse interactions for menu/formspecs 2014-08-23 00:23:14 +02:00
SmallJoker
55c646c5c2 Use pause_fps_max also on multiplayer 2014-08-22 22:52:20 +02:00
sfan5
b19dd922ec Add ^[mask texture modifier 2014-08-22 22:42:04 +02:00
SmallJoker
e4d570eafc Reduce time of red screen when damaged
10 seconds in PvP is very long and annoying.
2014-08-22 22:19:07 +02:00
Selat
c58b9d8da3 ban.cpp refactoring 2014-08-22 22:03:08 +02:00
sapier
dec8c43de3 Fix to to too two times 2014-08-22 21:51:20 +02:00
sapier
d7d8aa1039 Add player name length checks 2014-08-22 21:18:43 +02:00
sapier
8e9d896f2d Fix "ghost" blocks if block update is "on wire" while player digs nodes 2014-08-22 20:56:16 +02:00
sapier
247a1ebf23 Improve timeout calculation
gf
2014-08-22 20:56:16 +02:00
rubenwardy
944ffe9e53 Correct spelling mistakes in documentation 2014-08-22 20:55:01 +02:00
sapier
7993696fc4 Fix wrong Icon name in minetest.desktop 2014-08-22 14:09:39 +02:00
Casimir
08f7ac5704 Remove buildable_to nodes without dropping item when replaced by a falling node 2014-08-22 11:14:15 +02:00
RealBadAngel
d9df592da8 Pass light sources in blue channel of vertex color instead of decoded light for all special drawtypes.
Plus some style fixes and optimizations.
2014-08-21 23:28:01 +02:00
sapier
2a5c88bde1 Don't call a player event without having player to do a event for 2014-08-21 17:29:26 +02:00
sapier
a4c987b339 Fix caption of config mods button (simple menu) 2014-08-19 22:34:25 +02:00
sapier
c24e0753fc Mod profiling support
Config settings:
profiling = true/false (gather statistics)
detailed_profiling = true/false (break mod times to callbacks)

Chat commands:
save_mod_profile saves current statistics in debug.txt and shows on console (on default loglevel)
2014-08-19 22:22:57 +02:00
sapier
4caa00cc99 Make scrollbar scale according to DPI and scaling factor 2014-08-16 15:30:56 +02:00
RealBadAngel
bf91d623c8 Let lighting be done only CPU side. Remove finalColorBlend implementation from shaders. 2014-08-16 14:48:52 +02:00
sapier
0a57b5b553 Revert "Fix inventory items blinking on item preloading"
The fix didn't work on some systems sadly this wasn't detected prior merge,
as preload is disabled by default now there's not gonna be a fix for it.
2014-08-16 14:18:33 +02:00
sapier
ccf3985b7a Fix inventory items blinking on item preloading 2014-08-16 13:00:37 +02:00
selat
5f1f1151d3 Remove temporary file at safeWriteToFile() 2014-08-16 12:46:48 +02:00
sapier
f6e01adab7 Makefile support for build without leveldb 2014-08-16 12:28:07 +02:00
sapier
fa427d641b Add sqlite3 backend hack for android 2014-08-16 12:28:07 +02:00
SmallJoker
6c5f79fee9 Fix the *CDP display 2014-08-15 21:46:04 +02:00
BlockMen
e9e9e42573 Fix mainmenu game initialisation 2014-08-14 07:18:32 +02:00
RealBadAngel
5e54bf1472 Make faces shading correct for all possible modes.
Skip shading for lightsources and top of the nodes.
Fixes liquid sources and flowing surfaces having different brightness.
2014-08-14 06:43:47 +02:00
Kahrl
587167e940 Move #includes from version.h to version.cpp 2014-08-10 01:03:52 +02:00
ShadowNinja
15f3713e2f Formspec escape fixed seen in world creation menu 2014-08-05 15:37:53 -04:00
ShadowNinja
d7bcde6db4 Disable preload_item_visuals by default
This can delay connections by several minutes.
2014-08-05 14:54:33 -04:00
Craig Robbins
6929206bc2 Fix issue 1527
https://github.com/minetest/minetest/issues/1527
2014-07-29 22:39:39 -04:00
sfan5
17345404ba Add ZLIBWAPI_DLL and LEVELDB_DLL CMake options Remove legacy MINGWM10_DLL CMake option Update 32-bit buildbot (OpenAL updated, zlib updated) Change build directory for buildbots to '_build' to prevent removal of Android build files Use -win64 suffix for 64-bit Windows builds Fixes #1476 2014-07-29 20:03:18 +02:00
sfan5
5884236046 Rework texture generating code, add texture grouping via ( ... ) 2014-07-29 20:02:56 +02:00
sfan5
5357a17bac Don't include cmake_config_githash.h into files that don't need it 2014-07-25 10:48:03 +02:00
RealBadAngel
8979a3dd99 Dont display interior of glasslike_framed node when its not defined.
Fixes https://github.com/minetest/minetest/issues/1514
2014-07-24 20:58:08 +02:00
RealBadAngel
3bf05f020c Allow full circle rotation with 2degs step for plantlike drawtype. 2014-07-24 20:02:20 +02:00
RealBadAngel
9dc8901e32 Add rotation for plantlike drawtype. 2014-07-22 00:32:03 +02:00
RealBadAngel
70074800a2 Bugfix in makeCuboid - apply rotations to all faces when 1 tile is given. 2014-07-20 16:22:48 +02:00
ShadowNinja
33ca115ae4 Remove vector assertions
These were initially added to get tracebacks for invalid vector errors, but it
didn't work and tracebacks have since been properly fixed in the core.
2014-07-19 23:50:50 -04:00
RealBadAngel
f0db6c4423 Speedup mapblock_mesh 2014-07-17 22:28:14 +02:00
RealBadAngel
625489dff4 Fix texture glitches for plants with visual scale > 1.0 (jungle grass). 2014-07-17 14:10:23 +02:00
RealBadAngel
61088b16c9 Fix texture hack in fences. 2014-07-17 13:37:18 +02:00
sapier
d38f6ebb9b Fix error handling on inconsistent client ready message
Fix android makefile to provide a correct dummy githash if detection fails
2014-07-16 20:01:00 +02:00
Zefram
7d72ac6a69 Make tooltip_show_delay=0 work 2014-07-16 18:06:31 +02:00
Zefram
07f444ed85 Permit non-integer sizes for item_image[] 2014-07-16 17:37:12 +02:00
Zefram
aebbcbf398 Fix indexing error in timer processing 2014-07-16 17:24:39 +02:00
sapier
9a016a6294 Fix flipped textures for drawtype "glasslike" 2014-07-16 16:37:41 +02:00
sapier
65b8b524c0 Add srollbar formspec element 2014-07-16 15:02:56 +02:00
sapier
903d343b08 Fix android build after removal of indev and math mapgen 2014-07-16 13:40:30 +02:00
Novatux
24a631ee2a Fix crash reported here: https://forum.minetest.net/viewtopic.php?f=6&t=9726 2014-07-13 11:05:07 +02:00
sfan5
eec456be63 Move MapBlock (de)serializing code out of Database class 2014-07-12 17:38:17 +02:00
proller
3feece1f28 Remove proller from credits 2014-07-12 18:28:17 +04:00
proller
2d90aca4ab Remove indev mapgen 2014-07-12 18:21:54 +04:00
proller
7df83c2c67 Remove math mapgen 2014-07-12 18:15:55 +04:00
BlockMen
e69d660784 Update default control documentation 2014-07-07 19:12:38 +02:00
sapier
5ca336ea92 Switch back repository to dev-mode after 0.4.10 release. 2014-07-07 19:08:41 +02:00
RealBadAngel
c9ba92c4ad Faces shading fixes 2014-07-07 18:06:20 +02:00
kwolekr
a2e1b0fc7f Don't copy back already generated blocks on map generation 2014-07-07 01:51:04 -04:00
kwolekr
8b3ed78e53 Don't unload blocks if save failed
Improve error handling in saveBlock()
2014-07-07 01:20:25 -04:00
sapier
e14c4cdd4c Fix regression in leveldb backend 2014-07-07 00:06:06 +02:00
sapier
96f285f71e Update version numbers for 0.4.10 2014-07-06 22:39:47 +02:00
sapier
2e19af9919 Fix client crash on deletion of an object the clients localplayer is attached to 2014-07-06 22:11:21 +02:00
sapier
b459f53ac3 Switch android to leveldb as sqlite3 is broken and fails to save any mapblock there 2014-07-06 21:27:54 +02:00
sfan5
d020e0771d Improve error reporting in leveldb backend 2014-07-06 21:20:40 +02:00
Perttu Ahola
9b44bbd0a6 Fix non-smooth non-shader node shading (Fixes #1436, regression by commit a0f78659f3) 2014-07-06 22:01:03 +03:00
sfan5
eadde1e741 Fix errors/warnings reported by valgrind 2014-07-06 16:33:02 +02:00
PilzAdam
6bd15247f9 Fix memory leak in EmergeManager 2014-07-06 15:41:59 +02:00
sfan5
37b7f094e3 Fix warnings reported by clang 2014-07-06 13:19:21 +02:00
sfan5
5f9962e1cc Fix typos in doc/lua-api.txt 2014-07-05 12:19:55 +02:00
Perttu Ahola
2fee2baf98 Remove FPS from being next to the version string 2014-07-05 11:55:13 +03:00
Kahrl
95be18a3c1 Fix typo in doc/lua_api.txt 2014-07-05 01:09:53 +02:00
sapier
b8343cd11c Fix memory leaks in GenericCAO, ShaderSource and Player classes 2014-07-02 23:33:18 +02:00
Novatux
3d6d66b181 Fix inversion of full_punch_interval 2014-07-02 16:48:11 +02:00
ShadowNinja
567dea29ee Move master server to seperate repository 2014-06-30 17:27:24 -04:00
sapier
bfaba2c12a Fix regression in light calculation 2014-06-30 22:56:08 +02:00
ShadowNinja
9afeb97fc6 Fix serverlist code style, const-correctness, and types 2014-06-30 13:26:02 -04:00
ShadowNinja
b4c2e79ea4 Fix server list boolean typing and alignment 2014-06-30 13:25:09 -04:00
ShadowNinja
b2dfde8c8c Add support for multipart/form-data to HTTPFetch for server announcing 2014-06-30 13:23:09 -04:00
proller
1c01ed5f13 Masterserver: Fix compiling servers.jst 2014-06-30 20:47:50 +04:00
sfan5
7f99904eb1 Add redis options to documentation 2014-06-29 21:34:49 +02:00
sapier
c39992e429 Copy zlib and freetype dll to windows package too 2014-06-29 19:36:51 +02:00
sapier
1cc40c0a7c Add support for Android 2.3+
There have been plenty of ppl involved in creating this version.
I don't wanna mention names as I'm sure I'd forget someone so I
just tell where help has been done:
- The partial android versions done by various ppl
- Testing on different android devices
- reviewing code (especially the in core changes)
- testing controls
- reviewing texts

A big thank you to everyone helping this to be completed!
2014-06-29 18:17:56 +02:00
sapier
ff36071d93 Don't spam server console on player/playersao error but just drop the affected client 2014-06-29 17:55:21 +02:00
RealBadAngel
ea6c3835de Glasslike_framed drawtype rework. 2014-06-29 17:50:37 +02:00
Martin Doege
c410e9182d OS X compatibility fixes 2014-06-29 17:27:33 +02:00
sapier
ee7af21e41 Fix msvc2012 build 2014-06-29 16:57:50 +02:00
sapier
ebf7ea5019 Add formspec api versioning 2014-06-29 12:13:55 +02:00
sapier
1367895ae2 Make sure none of the irrlicht member objects of GenericCAO are deleted prior deletion of GenericCAO 2014-06-29 11:57:01 +02:00
SmallJoker
3c5df42a17 Make player files saving again 2014-06-29 00:45:04 +02:00
proller
897c218b96 Masterserver: Fix undefined players 2014-06-28 22:10:55 +04:00
kwolekr
c91f8b1d25 Add prefixes to enum values and fix style issues 2014-06-28 02:02:38 -04:00
Kahrl
6ee0db6fec Make GUITable mouse wheel scrolling faster 2014-06-27 23:55:01 +02:00
sapier
f383766dbf Fix GenericCAO fails to grabing member animated mesh node to prevent it do be deleted to early 2014-06-27 20:42:20 +02:00
RealBadAngel
ed2c8ba9c5 Fix wrong status text rectangle. Fix for #1412 2014-06-27 20:16:37 +02:00
sapier
13517fb726 Add separate download timeout to allow download of bigger files or on low bandwidth lines 2014-06-26 20:57:17 +02:00
sapier
24face5249 Fix statement not set NULL on deletion
Make local only variables static
2014-06-25 20:01:29 +02:00
RealBadAngel
09ba047c01 Add setting for tooltips show delay. 2014-06-25 16:23:05 +02:00
RealBadAngel
27538ecef5 Tooltips rework.
Separate element for tooltips. Delayed showing,
use global color or given ones.
2014-06-24 22:11:47 +02:00
Kahrl
d1ee708db2 Handle missing tablecolumns[], fixes bug #1187 2014-06-24 02:00:29 +02:00
Kahrl
a578f34db5 GUITable typo fixes in comments 2014-06-24 01:06:24 +02:00
ShadowNinja
089fc010ab Store the maximum player file tries in a constant 2014-06-23 15:55:47 -04:00
ShadowNinja
e491f8cd48 Only try to load from possible player files 2014-06-23 15:45:59 -04:00
ShadowNinja
7e6db1b803 Only keep players loaded while they're connected 2014-06-23 15:45:59 -04:00
ShadowNinja
50127510e7 Remove confusing code block from SQLite3 database 2014-06-23 15:36:45 -04:00
ShadowNinja
d9de29fa50 Clear inventory before setting lists 2014-06-23 15:28:48 -04:00
sfan5
5fb8778e28 Fix Windows build 2014-06-23 14:50:00 +02:00
sapier
f6fc39e69a Fix race condition on accessing m_time_of_day_speed causing day night race on some architectures 2014-06-23 00:26:57 +02:00
sapier
b3a2ef1a91 Remove MapVoxelManipulator not really used by anyone 2014-06-23 00:13:41 +02:00
sapier
8ad83767cf Remove emerge and speedup addArea by using memcopy instead of one by one assignment 2014-06-23 00:13:41 +02:00
sapier
d5de0cbf71 Minor fix in check order 2014-06-23 00:13:41 +02:00
sapier
fcfd53aed1 Don't keep temporary images in RAM 2014-06-23 00:13:41 +02:00
sapier
334ec4bb1b Avoid doing a full material compare if not even first texture does match 2014-06-23 00:13:41 +02:00
sapier
35ec3855f6 Speedup attachement handling by replacing vector search by direct array access and secondary child lookup vector 2014-06-23 00:13:41 +02:00
sapier
56bf867874 Use memset for flag initialization (compiler optimization is way better)
use temp variables instead of recalculating array index
2014-06-23 00:13:41 +02:00
sapier
496cb115b1 Speedup getTileInfo by up to 30% 2014-06-23 00:13:41 +02:00
sapier
5d06bdf8ac Speedup getBlockNodeIdMapping by up to factor 4 by using a fixed size mapping array 2014-06-23 00:13:41 +02:00
sapier
2625323f25 Fix menu crash due to lack of favourites list 2014-06-22 14:00:57 +02:00
sapier
9056c163a7 Fix sqlite3 map shutdown fails due to missing to finalize list statement
Add error output on fail to shutdown sqlite3 map db
Implement shutdown of sqlite3 rollback db
2014-06-22 13:38:51 +02:00
sapier
d4245e6cac Support for scalable font and gui elements
Fix positioning of tabheader in order to be usable for scaling GUIs
WARNING: this changes position of current tabheaders, mods have to adjust!
2014-06-22 00:08:55 +02:00
sapier
a0097c6bfa Fix uncought deserialization error on receiving data 2014-06-22 00:05:41 +02:00
sapier
f8522d50e7 Fix server assert in case of invalid message from client, just kick that client. 2014-06-21 23:56:46 +02:00
sapier
2b9beead38 Don't handle lack of IPv6 as fatal in unit tests 2014-06-20 22:35:50 +02:00
RealBadAngel
c86b78c9b7 Fix labels and vertlabels on some systems. 2014-06-20 21:30:48 +02:00
sapier
e81454fb38 Fix small memory leaks on shutdown 2014-06-20 19:50:47 +02:00
Matthew Bekkema
ef8cdd890c Fix build on big endian architectures. 2014-06-20 18:40:06 +02:00
sapier
2dd69a85e7 Fix chat overlaying full screen, now it's gonna overlay only up to length of longest line 2014-06-20 15:18:45 +02:00
sapier
3a9cf21664 Fix newline not handled to to interpreting it as invisible char 2014-06-19 23:02:09 +02:00
sapier
1c7cc2665b Fix broken serverdescription in multiplayer tab 2014-06-19 22:03:49 +02:00
sapier
8af44f8163 Remove ugly curl struct pointer from jsonFetchValue signature 2014-06-19 21:24:53 +02:00
sapier
9a39848ba9 Remove a lot of superfluous ifndef USE_CURL checks 2014-06-19 19:05:37 +02:00
sapier
99f565e8f2 Add support for directly starting a world by name from command line 2014-06-19 14:34:43 +02:00
RealBadAngel
04fbf47744 Add tooltips for button, imagebutton and checkbox. 2014-06-19 00:22:03 +02:00
sapier
65a4630f31 Fix bounding rect for formspec elements label vertlabel and checkboxes 2014-06-18 22:38:29 +02:00
sapier
2a09b7e84f Make dropdown formspec elements send their value same style as buttons on change 2014-06-18 18:47:41 +02:00
sfan5
ce9f1e1d3c Update buildbot scripts and add 64-bit buildbot 2014-06-18 16:40:24 +02:00
RealBadAngel
c380563a12 Fix issue #1275 - one more missing check. 2014-06-18 14:53:43 +02:00
sapier
c0e4551249 Remove not really used guiTextInputMenu 2014-06-17 21:27:40 +02:00
RealBadAngel
cb3b42efe4 Fix issue #1275 - wielded index greater than inv size. 2014-06-17 14:17:53 +02:00
RealBadAngel
a0f78659f3 Improved faces shading with and without shaders. 2014-06-17 00:56:17 +02:00
RealBadAngel
9f46cb6745 L-systems treegen code tweaks. 2014-06-17 00:55:04 +02:00
sapier
9d57413af0 Minor stability improvements in block emerge handling 2014-06-15 18:18:57 +02:00
RealBadAngel
6c98fd6658 Unite nodes shaders.
Pass drawtype and material type to shaders.
Move shaders generation to startup only.
Allow assign shaders per tile.
Initial code to support water surface shader.
2014-06-15 05:40:33 +02:00
sapier
9ffa88b558 Fix regression main_menu_script setting not working any longer 2014-06-14 21:20:09 +02:00
sapier
7b3602bab3 Fix regression dirt texture not beeing default in non cloud menu 2014-06-14 20:51:57 +02:00
sfan5
5b3bbde1ef Fix AppData path for RUN_IN_PLACE, fixes #1365 2014-06-13 21:09:55 +02:00
David Gumberg
c39e46c00d Add AppData file 2014-06-13 13:51:01 -04:00
sapier
c78aa7cf24 Fix HUD not visible if below ground blacked out 2014-06-12 23:38:34 +02:00
Megaf
d7986da58c Changed Time Out message from ERROR to INFO.
Changed Time Out message from ERROR to INFO.
2014-06-12 23:18:26 +02:00
sapier
003634e049 Add support for exiting formspecs by doubleclicking outside 2014-06-12 23:15:05 +02:00
sapier
763a511ca5 Improve performance by removing some temporary objects
Fix some coding style issues
2014-06-12 20:10:29 +02:00
Lord89James
9675d9e9cb New feature: drop a item instead a stack while...
sneaking
2014-06-10 18:11:43 +02:00
0gb.us
c6a9eae3ae Added show_debug to minetest.conf.example
I love that setting. Why is it not in this file already?
2014-06-09 10:23:38 +03:00
Novatux
e17d29ccd6 Fix #1358 (disappearing clouds) 2014-06-09 08:18:33 +02:00
sfan5
282f53ddb7 Allow custom liquids to have drops 2014-06-08 23:25:13 +02:00
Perttu Ahola
1cea2f1b49 Fix switch from "skybox" to other sky types as triggered by player:set_sky() 2014-06-08 12:33:16 +03:00
RealBadAngel
f70e0556fc Re-add missing shaders setting. (Generate normalmaps) 2014-06-04 16:41:33 +02:00
BlockMen
a7d49da217 Codestyle cleanup (main.cpp) 2014-06-01 15:49:34 +02:00
sapier
32ab6c2a32 Revert "Add daemon support for linux like operating systems"
Remove daemon support due to delayed popular vote (part 2)
2014-06-01 14:54:21 +02:00
sapier
75ddf4d221 Revert "Redirect stdin/stderr/stdout to /dev/null in daemon mode"
Remove daemon support due to delayed popular vote (part 1)
2014-06-01 14:51:46 +02:00
sapier
c5f00c38da Redirect stdin/stderr/stdout to /dev/null in daemon mode 2014-06-01 00:41:48 +02:00
sapier
34904a0744 Add daemon support for linux like operating systems 2014-05-31 23:48:06 +02:00
sapier
d76b8c6e7c Small cleanup of hud add/remove code 2014-05-31 22:32:44 +02:00
ShadowNinja
5bd2aea663 Fix over-poping and only push the core once 2014-05-30 19:38:11 -04:00
ShadowNinja
e7706593c6 Add success and output return values to chat commands 2014-05-28 18:36:46 -04:00
rubenwardy
832d7973c8 Add item eat callback 2014-05-26 18:41:58 -04:00
sapier
ab75b1b923 Fix misplaced selection box in some situations 2014-05-26 22:47:40 +02:00
ShadowNinja
31f9912e9e Fix setThreadName support for BSD 2014-05-26 15:20:06 -04:00
sapier
7fba341dbb Works for debian and a few other distributions but fails for even more so back to old order
Revert "Fix library link order"
This reverts commit b743dcb942.
2014-05-25 01:14:47 +02:00
Diego Martinez
f0a9e7ddc8 Sort commands and privs alphabetically in '/help'.
Also make a stray variable local.
2014-05-24 17:33:59 -04:00
ShadowNinja
882e12f8ab Rework dumping functions
Changes:
  * Add comments to explain the dumping code
  * Add support for dumping values of any type (as '<' <type> '>')
  * Add support for tables as keys in dump2()
  * Make dump2() return it's result (like dump()) rather than printing it
  * Simplify and optimize function serialization via serialize()
2014-05-24 17:32:42 -04:00
sapier
660e636887 Hide pause menu prior drawing "shutting down..." message 2014-05-24 13:45:05 +02:00
sapier
c1e297a90a Reduce log level for non npot2 texture warning message 2014-05-24 13:42:52 +02:00
sapier
b743dcb942 Fix library link order 2014-05-24 13:39:27 +02:00
sapier
3939ab6c9d Remove settings not used any longer 2014-05-24 12:17:15 +02:00
sapier
6b37529bd6 Fix disable hud disabling drawing of full gui 2014-05-24 12:15:11 +02:00
Jakub Vaněk
6922807fd5 fixed typo std::encl in src/gettext.cpp 2014-05-24 11:20:21 +02:00
sapier
f969a91c0a Fix a bunch of small bugs due to mainmenu cleanup
Fix doubleclick not working in singleplayer
Fix of by one issue on accessing raw list
Fix this->self
Fix copy&paste error for scroll button
2014-05-24 11:16:05 +02:00
RealBadAngel
18fe277d94 Item entity stacks merge on the ground.
Add TTL to item entities.
2014-05-23 22:46:05 +02:00
sfan5
94dba66c16 Fix memory leak in redis backend, fixes #1325 2014-05-23 13:30:58 +02:00
sapier
73e5bc9c01 Add joining player to printed player list 2014-05-20 18:09:32 +02:00
sapier
09970b7b6d Add support for interlaced polarized 3d screens
Add (experimental) support for topbottom as well as sidebyside 3d mode
2014-05-18 01:08:13 +02:00
sapier
d9f6f9e7a8 Split declaration of GenericCAO from implementation 2014-05-17 23:19:31 +02:00
sapier
87b4bce594 Fix singleplayer dialogs missing game customization 2014-05-17 15:32:51 +02:00
sapier
c3984569c0 Add formspec toolkit and refactor mainmenu to use it
Fix crash on using cursor keys in client menu without selected server
Add support for non fixed size tabviews
2014-05-16 22:57:14 +02:00
ShadowNinja
34d872628d Make print() NUL-safe 2014-05-15 19:09:47 -04:00
RealBadAngel
c8a99404e8 Map irrlicht log level to minetest. Allow write them to debug file. 2014-05-14 19:30:39 +02:00
sapier
6c37e89f08 Fix old client showing duplicated health bar on new server
Fix client not showing hearts and bubbles on connecting to old server
Fix server not remembering hud flags correctly
2014-05-11 22:34:44 +02:00
sapier
167df02e3d Send max number of characters instead of asserting in case of too long chat messages 2014-05-11 15:39:38 +02:00
sapier
5c6cf630de Fix invalid cast fix resulting in chat messages beeing limited to 256 bytes 2014-05-11 15:32:15 +02:00
sapier
b16cbba21a Fix incorrect scaling of customized hud item selection marker 2014-05-11 13:26:23 +02:00
sapier
90f0859128 Fix error messages beeing shown on pressing cursor keys in various menus 2014-05-11 02:57:47 +02:00
sapier
f76b9d724b Fix possible deadlock in error conditions 2014-05-11 00:14:57 +02:00
sapier
c8aed03ace Fix healthbar not beeing hidden on disabled damage 2014-05-10 23:32:25 +02:00
ShadowNinja
c4359ff65c Use "core" namespace internally 2014-05-08 13:02:04 -04:00
ShadowNinja
1cd512913e Organize builtin into subdirectories 2014-05-07 17:14:23 -04:00
ShadowNinja
fef2729fd0 Add write_json() to the async API 2014-05-07 17:05:44 -04:00
ShadowNinja
e17f140be0 Add a limit to node meta data resolving recursion 2014-05-07 17:05:44 -04:00
sapier
d3ee617f37 Fix heart + bubble bar size on different texture packs
Add DPI support for statbar
Move heart+bubble bar to Lua HUD
Add statbar size (based upon an idea by blue42u)
Add support for customizing breath and statbar
2014-05-07 21:46:27 +02:00
RealBadAngel
c80d67f48e Move message about missing normal maps to infostream instead of errorstream. 2014-05-05 19:25:18 +02:00
RealBadAngel
6f511b1d05 Bugfix: make waypoints respect camera offset 2014-05-05 09:03:37 +02:00
sapier
09e8bbea03 Fix numeric underflow on calculating window size adjustment 2014-05-04 02:43:01 +02:00
BlockMen
cfb26629bf Fix player:set_animation() in third person view 2014-05-03 10:50:49 +02:00
sapier
9370f5657a Add hack to avoid 2s startup delay on local games 2014-05-02 00:18:25 +02:00
sapier
4b44d359f5 Fix usage of deprecated functions in builtin 2014-04-29 23:57:07 +02:00
sapier
b5acec0a3c Add proper lua api deprecated handling 2014-04-29 22:49:04 +02:00
sapier
c03d7dc8a7 Add download rate to media progress bar (non http mode only!)
Minor coding style fixes
2014-04-29 20:45:16 +02:00
ShadowNinja
088b18da3d Make debug text adjust it's border to the screensize and fix a border update bug 2014-04-27 18:45:04 -04:00
sapier
65016c880c Fix rounding issue of hud dpi on some machines 2014-04-27 22:44:37 +02:00
ShadowNinja
0d6e4ef5f3 Add support for function serialization to minetest.serialize 2014-04-27 16:15:53 -04:00
ShadowNinja
f2b93b7bae Fix code style of async API 2014-04-27 16:15:53 -04:00
ShadowNinja
6ab3b4c838 Remove dependency on marshal and many other async changes
This makes a number of changes:
  * Remove the dependency on marshal by using string.dump and loadstring.
  * Use lua_tolstring rather than having Lua functions pass string lengths to C++.
  * Move lua_api/l_async_events.* to cpp_api/s_async.*, where it belongs.
  * Make AsyncWorkerThread a child of ScriptApiBase, this removes some duplicate functionality.
  * Don't wait for async threads to shut down.  (Is this safe?  Might result in corruption if the thread is writing to a file.)
  * Pop more unused items from the stack
  * Code style fixes
  * Other misc changes
2014-04-27 16:15:53 -04:00
ShadowNinja
db4ea4658c Only push the Lua error handler once 2014-04-27 16:15:53 -04:00
sapier
1838a3fd69 Add support for dpi based HUD scaling
Add support for (configurable) multiline hotbar
Improved screensize handling
Add userdefined gui scale by BlockMen
2014-04-27 21:53:13 +02:00
Perttu Ahola
8d31534710 Client: Don't crash if trying to draw too many items from inventory in HUD 2014-04-27 09:49:19 +03:00
BlockMen
3a6d6e4751 Move the old stuff to doc 2014-04-25 19:33:31 +02:00
BlockMen
cd14259bd9 Remove useless MSVC project files 2014-04-25 19:20:58 +02:00
BlockMen
c5324015bc Fix directional fog color in front view 2014-04-25 10:35:45 +02:00
ShadowNinja
f2a1900345 Update documentation on is_ground_content 2014-04-24 18:27:25 -04:00
ShadowNinja
e3bdd7b2ed Revert "Add backtrace to error function"
This reverts commit 5b518ed2fe.

This caused duplicate tracebacks and tracebacks when unwanted.
It also ignored the level argument to error() and didn't pass the message (or level) to debug.traceback().
Use xpcall() or lua_pcall()'s errorhandler argument instead.
2014-04-24 18:27:25 -04:00
sapier
885e93df44 Fix lost pause support in singleplayer 2014-04-24 19:47:17 +02:00
FessWolf
9b142157b0 Fix argument type of the RaiseException() function 2014-04-23 15:39:33 -04:00
ShadowNinja
41bc24477b Revert binary database block position encoding
This reverts commits a2003b0d55 and 54ffe2e5de.

These weren't correct.  Add a black magic warning instead.
2014-04-23 15:39:33 -04:00
MetaDucky
9ec281c712 Fixed wrong node texture rotation for facedirs 5 and 7 2014-04-23 12:11:56 +02:00
sapier
127f354e7a Fix formspec replacement handling for in game formspecs 2014-04-22 20:59:01 +02:00
RealBadAngel
e7ef4f07cb make formspec textarea wordwrap
Thats updated #795
2014-04-22 19:57:32 +02:00
sapier
555dc86343 Add missing ip address to player join log entry 2014-04-21 22:28:52 +02:00
RealBadAngel
f20267862f Textureable sun and moon. 2014-04-21 22:00:16 +02:00
sapier
da3c5c743f Fix red background missing in deathscreen 2014-04-21 20:10:23 +02:00
sapier
5b1bd2fb47 Fix chat console not working anymore 2014-04-20 10:55:08 +02:00
sapier
fec1fa51e0 Fix macro ARRAYSIZE name collision on windows 2014-04-20 02:47:02 +02:00
sapier
a0dd2d89f3 Reduce log level for incoming crap packets
Add log entry for peer timeout
2014-04-19 22:12:01 +02:00
sapier
8745935a06 Fix win32 build (typo in jthread lock cleanup) 2014-04-19 14:09:01 +02:00
sapier
0d93119040 Replace deathscreen by formspec variant 2014-04-19 12:21:27 +02:00
sapier
eda9214f81 Bunch of small fixes (coding style, very unlikely errors, warning messages) 2014-04-19 11:56:19 +02:00
sapier
a230e1e736 Use narrow_to_wide in gettext instead of os dependent conversion fct 2014-04-19 11:33:57 +02:00
sapier
ea0df3e4cb jthread remove locks that aren't absolutely required
add c++11 atomic support (optional)
2014-04-19 10:05:23 +02:00
ShadowNinja
c00ed9dac3 Add support for threadnames on BSD, Windows (MSVC-only), and OSX 2014-04-19 02:02:11 -04:00
proller
4977b736e3 Fix warnings 2014-04-19 02:24:45 +04:00
proller
0279f32db7 Remove liquid_finite and weather 2014-04-18 21:56:48 +04:00
Sfan5
674be38fc2 Add redis database backend 2014-04-16 22:05:06 +02:00
RealBadAngel
db60ae0459 Fix invalid liquid lighting. 2014-04-16 16:56:54 +02:00
ShadowNinja
a2003b0d55 Use bit shifts rather than multiplication in block position encoding 2014-04-15 16:25:46 -04:00
ShadowNinja
54ffe2e5de Use binary operators rather than "Python modulo" in decoding block positions 2014-04-15 16:09:15 -04:00
Sfan5
118e2ae865 Fix all warnings reported by clang 2014-04-15 21:34:53 +02:00
Sfan5
d436502fa4 Fix problem with newer MinGW runtimes 2014-04-14 20:09:42 +02:00
ShadowNinja
dcafad2f73 Add checks for nil in minetest.after 2014-04-13 17:54:00 -04:00
ShadowNinja
b04872d96b Reorder initialization of member variables to make GCC happy 2014-04-13 17:47:58 -04:00
BlockMen
8b02a015eb Use integers instead of float values 2014-04-12 20:04:12 +02:00
BlockMen
c0ab09af74 Add player:set_eye_offset() by @MirceaKitsune and clean up 2014-04-12 17:44:20 +02:00
BlockMen
a1db9242ec Add third person view 2014-04-12 17:44:15 +02:00
BlockMen
e149d1ad9a Fix write and read S32 vectors 2014-04-12 17:39:51 +02:00
BlockMen
7cdbb805d9 Fix MSVC build 2014-04-12 17:36:40 +02:00
sapier
960d731587 Fix broken Ipv4 serialization on win32 2014-04-11 22:51:10 +02:00
sapier
8bb8602c25 Fix broken win32+bsd build 2014-04-11 21:45:30 +02:00
BlockMen
fefec8cdc4 Fix crash when teleporting near unknown node 2014-04-11 21:38:16 +02:00
Kahrl
6090e95cdc Infer ipv6_server from bind_address; fix client connect to IN(6)ADDR_ANY 2014-04-10 22:03:42 +02:00
sapier
edcad09dee Add support for named threads (atm linux only) 2014-04-09 21:32:21 +02:00
sapier
d22621efc1 Make config honor build system specified config defines 2014-04-09 20:47:21 +02:00
sapier
a88c685f02 Minor fixes for file/modlist download in mainmenu 2014-04-09 20:22:21 +02:00
sapier
142e2d3b74 Cleanup client init states by bumping protocol version
Don't use TOSERVER_RECEIVED_MEDIA but TOSERVER_CLIENT_READY as indicatio for client ready
Handle clients with protocol version < 23 (almost) same way as before
Make client tell server about it's version
Add client state to not send bogus player position updates prior init complete
Add access to statistics information (peer connction time,rtt,version)
Fix clients standing stalled in world while preloading item visuals (new clients only)
Add get_player_information to read client specific information from lua
2014-04-08 21:12:20 +02:00
sapier
556bdc260a Pass pointer to nodedef directly to avoid recalculation in quite often called function 2014-04-06 10:32:57 +02:00
sapier
28854495b1 Performance optimized button to button mask evaluation 2014-04-03 20:26:26 +02:00
sapier
af01a9577e Fix lost change password button 2014-04-01 22:38:34 +02:00
Perttu Ahola
65d1cb8321 Fix bug in RemoteClient::GetNextBlocks 2014-03-26 18:58:39 +02:00
Ciaran Gultnieks
564e11fc2f Fix merge mistake when rebasing for PR #1169 2014-03-24 19:56:36 +01:00
sapier
5bd9c236d5 Fix double sending of chat messages 2014-03-23 19:15:38 +01:00
Novatux
936c6f577a Fix "ghost stacks" created when a player clicks an item on the ground:
since the object is not immediately removed, any other code may still
think an object is there, therefore leading to item duplication. This code
therefore sets the itemstring to '' after the object is picked up to avoid
such issues
2014-03-22 18:15:33 +01:00
ShadowNinja
5fefc4bbf6 Fix serializing of signed numbers in serializeStructToString 2014-03-21 05:22:21 -04:00
RealBadAngel
0dc1aec509 Normal maps generation on the fly.
Parallax mapping with slope information.
Overriding normal maps.
2014-03-21 01:32:00 +01:00
ShadowNinja
f3d83a4516 Add more informative error messages for inventory and item method errors 2014-03-15 17:20:52 -04:00
ShadowNinja
31fe72dbac Remove lua_State parameter from LuaError::LuaError 2014-03-15 16:28:59 -04:00
ShadowNinja
f8b7555558 Revert "Make sure we get a stacktrace for as many lua errors as possible"
This reverts commit 362ef5f6ce.

Stack tracebacks couldn't be generated in LuaError::LuaError anyway and this
caused a second, empty traceback in most cases.  In cases where there wasn't
annother traceback the stack had already unwound and the traceback was empty.
2014-03-15 16:01:06 -04:00
ShadowNinja
23be6450a1 Make serializeStructToString use an ostringstream 2014-03-15 15:13:02 -04:00
Novatux
93729b09d5 Fix sound not being played at the correct place. 2014-03-15 16:25:34 +01:00
Sfan5
362ef5f6ce Make sure we get a stacktrace for as many lua errors as possible 2014-03-15 14:51:00 +01:00
ShadowNinja
d753d352f1 Revert "Use fixed-width format specifiers in serializeStructToString"
This reverts commit 875f1327a4.
Fixed width format specifiers are only officially availale in C99 and C++11.
2014-03-14 12:13:30 -04:00
ShadowNinja
875f1327a4 Use fixed-width format specifiers in serializeStructToString 2014-03-13 17:30:15 -04:00
BlockMen
e4d1970abf Fix game pause in singleplayer 2014-03-13 14:06:18 +01:00
BlockMen
03297acbf4 Fix special characters in pause and message menu 2014-03-13 14:00:10 +01:00
ShadowNinja
18577f2527 Replace usage of long long with u64/s64 2014-03-12 19:37:19 -04:00
Selat
7cac34c807 Pass arguments by reference 2014-03-12 17:34:48 -04:00
Selat
2bc2ce3bd1 Remove goto from Environment::removePlayer 2014-03-12 17:02:52 -04:00
ShadowNinja
c9b64206f9 Fix error when calling minetest.node_punch without a pointed_thing 2014-03-11 13:00:16 -04:00
Sfan5
859287b027 Fix generating winresource.o with build dir != source dir 2014-03-11 17:48:34 +01:00
Ciaran Gultnieks
5ce3f8f7b7 Correct misleading detached inventory error message
Looks like a bit of hasty copying and pasting from s_item.cpp.
2014-03-09 11:16:09 +01:00
Ciaran Gultnieks
0643cef09a Update ABM object counts when triggers add objects
Also fixes long-standing accuracy issue due to unknown wider
object count not being incremented.
2014-03-09 11:13:44 +01:00
sapier
16a028dd6b Fix race condition on exit to menu 2014-03-09 11:01:13 +01:00
kwolekr
28d6326bd4 Update set_mapgen_params and set_gen_notify Lua API to use new flag format 2014-03-08 11:35:04 -05:00
Ciaran Gultnieks
db98ef6b45 Stop wasting time in abm - performance improvement
Unless I'm mistaken, the chunk of code I'm moving there is potentially
executed hundreds of times inside the loop to get the exact same result
every time
2014-03-06 19:18:36 +01:00
sapier
a4e2198e41 Replace pause and message menu by formspec ones 2014-03-05 18:44:14 +01:00
Novatux
062de11b4c Fix rendering glitches when far from the center of the map 2014-03-04 20:12:10 +01:00
Sfan5
8e15179e7d Document CMake options in README 2014-03-03 19:35:14 +01:00
sapier
3e52dd5c68 Improved win32 file version information 2014-03-02 23:49:19 +01:00
Ciaran Gultnieks
baee91bf78 Fix for unloaded but active block problem 2014-03-02 20:39:28 +01:00
Selat
1b840e8ef9 Fix translation name. 2014-03-02 19:32:59 +01:00
Selat
6f568c1db2 Add Belarusian translation. 2014-03-02 19:06:42 +01:00
ShadowNinja
9a3b7715e2 Remove "Server -!- " prefix from player messages 2014-02-27 00:00:22 -05:00
BlockMen
18fd913e69 Fix MSVC build 2014-02-26 14:21:38 +01:00
proller
d4be81155e Fix null string escape 2014-02-24 20:41:04 +04:00
Sfan5
f6232d71b6 Fix test for broken LuaJIT versions, solves #1152 2014-02-23 18:30:45 +01:00
Diego Martínez
3da56696b5 Translated using Weblate (Spanish) 2014-02-16 20:59:21 +01:00
King Artur
3ba0359285 Translated using Weblate (Romanian)
wrong expression and wrong word order
2014-02-16 20:59:21 +01:00
João Farias
e73ca31b6e Translated using Weblate (Portuguese) 2014-02-16 20:59:20 +01:00
Jonas Kriaučiūnas
c1fe628b57 Translated using Weblate (Lithuanian) 2014-02-16 20:59:20 +01:00
King Artur
0bf5b140c7 Translated using Weblate (Italian) 2014-02-16 20:59:20 +01:00
Pilz Adam
ab6dda4230 Translated using Weblate (German) 2014-02-16 20:59:20 +01:00
Jabo Babo
272909359a Translated using Weblate (Estonian) 2014-02-16 20:59:20 +01:00
b p
330a35a522 Translated using Weblate (Dutch) 2014-02-16 20:59:20 +01:00
Сергей Голубев
85db6cb753 Translated using Weblate (Russian) 2014-02-16 20:59:20 +01:00
Jabo Babo
fac837b00e Translated using Weblate (German)
Kürzen, da es sonst nicht in den Button passt.
2014-02-16 20:59:20 +01:00
Jonas Kriaučiūnas
e02151d855 Translated using Weblate (Lithuanian) 2014-02-16 20:59:20 +01:00
Ilya Zhuravlev
c276e023a4 Translated using Weblate (Russian) 2014-02-16 20:59:19 +01:00
Pilz Adam
6430962479 Translated using Weblate (German) 2014-02-16 20:59:19 +01:00
Mitchell Ward
85cf811890 Translated using Weblate (Dutch) 2014-02-16 20:59:19 +01:00
Jakub Vaněk
fcde24cfd3 Translated using Weblate (Czech) 2014-02-16 20:59:19 +01:00
Mitchell Ward
4269ff1323 Translated using Weblate (Romanian) 2014-02-16 20:59:19 +01:00
Shen Zheyu
3cde5225d5 Translated using Weblate (Chinese (China)) 2014-02-16 20:59:19 +01:00
Frederico Guimarães
0b7cde0b2c Translated using Weblate (Portuguese (Brazil)) 2014-02-16 20:59:19 +01:00
we prefer instagib metl3
0f0be6e592 Translated using Weblate (French) 2014-02-16 20:59:19 +01:00
Pilz Adam
5541821062 Translated using Weblate (German) 2014-02-16 20:59:19 +01:00
Sfan5
d9d06ad920 Fix g_settings not being included 2014-02-16 08:25:53 +01:00
Sfan5
4585fba98b Fix broken cross-compiling 2014-02-16 08:07:57 +01:00
kwolekr
c163859057 Schematic: Add force_placement parameter to minetest.place_structure API 2014-02-15 19:46:57 -05:00
kwolekr
3570f3e396 Add minetest.set_noiseparam_defaults() Lua API 2014-02-15 19:13:14 -05:00
Kahrl
c873164878 Accept any error response code for missing index.mth 2014-02-15 02:19:49 +01:00
sapier
31ec14afe2 Add check to avoid usage of broken LuaJIT < 2.0.0beta8 2014-02-13 23:28:01 +01:00
sapier
ded5f8b1a6 Fix possible missing unlock of env_lock 2014-02-12 19:47:27 +01:00
kwolekr
89f7dc1efd ServerEnvironment: Remove direct dependency on EmergeManager 2014-02-09 16:36:30 -05:00
kwolekr
a0683b811c Define strlcpy on platforms that do not have it 2014-02-09 13:57:29 -05:00
kwolekr
2a01050a0c Add capability to read table flag fields from Lua API 2014-02-09 12:44:31 -05:00
kwolekr
57710520dc Tune block emerge and sending parameters to more aggressive values 2014-02-08 18:32:12 -05:00
kwolekr
83bafbe08b Make flag strings clear specified flag with 'no' prefix
Remove flagmask field from set_mapgen_params table
Add small bits of needed documentation
2014-02-08 17:50:59 -05:00
sapier
f4f98c9550 Remove lots of dead code
Add check for datatype overflows
use native datatype indices instead of fixed 16bit/32bit ones
2014-02-07 21:39:45 +01:00
sapier
3670f5a37b Fix invalid check for fread error on extracting zip 2014-02-07 21:29:31 +01:00
Selat
6715c422ae Fix memory leak in database migration 2014-02-07 20:43:12 +01:00
BlockMen
bc0bbffa14 Add missing header 2014-02-06 21:55:12 +01:00
ShadowNinja
85fe75d1cb Add the option to bind to a specific address 2014-02-05 21:24:46 +01:00
kwolekr
7f743178db Remove blank default values for emergequeue_limit_* settings
Add checks for invalid user input for important settings
Rename Settings::tryGet* to Settings::get*NoEx for consistency
2014-02-05 00:17:53 -05:00
kwolekr
c6c5edd73a Revert "Fix settings to honor numeric conversion errors"
This reverts commit 3f376a092e.
2014-02-05 00:05:58 -05:00
Ilya Zhuravlev
7859e57f6c Fix another heap-use-after-free in pause menu. 2014-02-04 22:17:02 -05:00
Ilya Zhuravlev
2d16ebf57c Fix unexpected preprocessor directive in gettext.cpp 2014-02-04 22:16:51 -05:00
sapier
3f376a092e Fix settings to honor numeric conversion errors
Rename try* non exceptioning functions to *NoEx
2014-02-04 22:14:13 -05:00
kwolekr
2927a327ca Update minetest.conf.example 2014-02-03 22:50:14 -05:00
kwolekr
5a34f40d80 Huge overhaul of the entire MapgenParams system
MapgenParams is no longer a polymorphic class, eliminating the need for messy and bug-prone reallocations.
Separation between the common and mapgen-specific parameters is now strongly defined.
Mapgen parameters objects are now properly encapsulated within the proper subsystems.
2014-02-03 22:50:14 -05:00
kwolekr
a439343844 Settings: Add no-exception variants of each get method 2014-02-03 22:47:40 -05:00
ShadowNinja
458045d49f Fix crash when a error occurs in a globalstep callback 2014-02-03 18:15:03 -05:00
ShadowNinja
fbef701bcd Escape texture pack names 2014-02-03 17:57:19 -05:00
sapier
857a49e081 Add minetest.kick_player(name, reason) 2014-02-03 17:33:59 -05:00
sapier
ea0def381d Remove noisy error messages, prepend "pathfinder: " to pathfinder messages 2014-02-03 20:13:31 +01:00
sapier
284fc0b885 Add missing "-" to list of allowed chars in media filenames 2014-02-02 15:34:33 +01:00
sapier
e7c2e61b19 Add additional check to avoid broadcasting private messages in error conditions 2014-02-02 01:55:24 +01:00
Perttu Ahola
6a3fa9df12 Add player:override_day_night_ratio() for arbitrarily controlling sunlight brightness 2014-02-01 18:38:21 +01:00
Perttu Ahola
86a6cca3cf Add player:set_sky() with simple skybox support 2014-02-01 18:34:26 +01:00
sapier
e258675eab Add propper client initialization
-add client states to avoid server sending data to uninitialized clients
  -don't show uninitialized clients to other players
  -propper client disconnect handling
Minor comment fixes in server
Minor bugfixes in connection
  -improved peer id calculation
  -honor NDEBUG flag
  -improved disconnect handling
  -increased initial send window
Remove some dead code
2014-01-31 18:44:43 +01:00
RealBadAngel
21f1bec724 New HUD element - waypoint. 2014-01-26 21:31:59 +01:00
sapier
3f0ee5d680 Fix bug only half of unreliable queue handled per step in worst case 2014-01-26 17:40:59 +01:00
kwolekr
9b978db0c2 Fix use of previously deallocated EmergeManager 2014-01-26 01:12:18 -05:00
ShadowNinja
6e352e3cbf Fix error on mod download failure 2014-01-24 15:22:22 -05:00
ShadowNinja
76d4396fa1 Pass pointed_thing to on_punch and minetest.register_on_punchnode callbacks 2014-01-23 19:21:56 -05:00
Sfan5
cd7e8372f3 Include system info in the HTTP user agent on Windows 2014-01-23 22:27:13 +01:00
ShadowNinja
1b5b6fe692 Add pointed_thing to minetest.register_on_placenode
As suggested by qwrwed.
2014-01-21 22:06:40 -05:00
kwolekr
057858ddda Connection: Stop processing malformed packet when encountered 2014-01-21 09:33:54 -05:00
Sfan5
3875a77bf8 Fix curl dll not getting installed when sound is disabled 2014-01-21 13:35:26 +01:00
PilzAdam
4585e855a7 Fix minetest.rotate_and_place() calling on_rightclick() with nil/random param for node 2014-01-19 23:16:22 +01:00
kwolekr
1146db9956 Update lua_api.txt documentation 2014-01-19 03:00:47 -05:00
kwolekr
bafc4ac6a1 LuaVoxelManip: Add get_param2_data and set_param2_data 2014-01-19 02:55:59 -05:00
kwolekr
21c96249fa Schematic: Read slice probability table from schematic descriptors 2014-01-19 02:44:45 -05:00
Dániel Varga
66b24cc9ff Fixed mainmenu lua errors because of changes in get_textlist_index
Fixed lua error when none of the worlds or servers selected are and connect,
delete or configure buttons used.
2014-01-18 10:41:43 +01:00
ShadowNinja
b11b48ec07 Deindent HTTPFetchRequest::HTTPFetchRequest() 2014-01-16 20:14:55 -05:00
BlockMen
64c0e40605 Prevent player jumping into nodes from below
Fixes camera glitch and cheating at drowning
2014-01-16 15:46:55 +01:00
BlockMen
1b4908bf56 Prevent placing node when player would be inside new node 2014-01-15 21:26:54 +01:00
sapier
4896d4b829 Fix win32 reading semaphore count not working (broke all queues) 2014-01-15 20:03:11 +01:00
ShadowNinja
f42f01758c Make default User-agent follow RFC 2616 2014-01-15 12:10:53 -05:00
Sfan5
a5287b6777 Fix building with MinGW 2014-01-15 17:35:00 +01:00
BlockMen
84bbe1ec6e Fix building under MSVC 2014-01-14 16:14:56 +01:00
ShadowNinja
5434d87da2 Fix spelling of "attempt" 2014-01-13 22:11:31 -05:00
ShadowNinja
574ed6a363 Add minetest.override_item 2014-01-13 21:41:00 -05:00
Kahrl
8966c16ad2 Add formspec table 2014-01-13 18:11:08 -05:00
khonkhortisan
2b1eff7725 Allow vertical axis particle rotation constraint
Use tables for adding particles, deprecate former way.

separate particles(pawner) definition, add default values, work with no
arguments
2014-01-13 17:34:56 -05:00
Ilya Zhuravlev
a4c5f10ecf Fix some errors reported by clang static analyzer. 2014-01-13 03:29:12 +04:00
kwolekr
a358c040f2 Mapgen V6: Add flag to stop mud flow 2014-01-12 18:21:28 -05:00
Novatux
676f34a02b Fix doc and forceloading crash. 2014-01-12 14:31:32 +01:00
ShadowNinja
a3586cd18d Add maximum recursion depth to read_json_value 2014-01-11 14:08:02 -05:00
ShadowNinja
a9df87ede0 Rename get_json_value to read_json_value 2014-01-11 13:52:26 -05:00
ShadowNinja
bd8ddf1a52 Add InvRef::get/set_lists() 2014-01-11 13:52:26 -05:00
Kahrl
6f6f289db4 Compare values instead of pointers in Inventory::operator== 2014-01-11 19:47:16 +01:00
Kahrl
51e6feb17c Add operator!= to Inventory(List), make operator== a const method 2014-01-11 19:46:37 +01:00
Novatux
84b94eb198 Add forceloading 2014-01-11 17:54:00 +01:00
Novatux
e21b29f422 Deepcopy pointed_thing for after_place_node, give it to on_rightclick too. 2014-01-11 17:23:28 +01:00
sapier
3bbd280336 Fix check for max_fd == -1 should actually be max_fd != -1 2014-01-10 19:19:16 +01:00
sapier
9edb91da57 Fixed minetest reliable udp implementation (compatible to old clients) 2014-01-10 10:10:45 +01:00
sapier
8b0b857eaa Make MutexQueue use jsemaphore for signaling 2014-01-10 10:10:45 +01:00
Perttu Ahola
10fdbf7375 Set locale properly when built without gettext support 2014-01-09 14:46:02 +01:00
ShadowNinja
c3eb7fe316 Document "wielditem" visual 2014-01-08 17:10:57 -05:00
sapier
6f661f77a6 Don't lookup node texts in a endless recursion loop 2014-01-07 11:15:24 +01:00
ShadowNinja
0fd5c61c00 Revert "Improve (re)spawn, add cache_block_before_spawn and max_spawn_height settings"
The commit didn't work because the blocks weren't loaded yet.

This reverts commit 22dbbf0a6f.

Conflicts:
	minetest.conf.example
2014-01-06 21:25:10 -05:00
ShadowNinja
c46574f30f Pass pointed_thing to after_place_node 2014-01-06 21:25:10 -05:00
ShadowNinja
9551f651cb Add protection support to auto-rotated nodes 2014-01-06 21:25:10 -05:00
ShadowNinja
811ea6cfc0 Prevent auto-rotated nodes replacing the nodes they are placed on 2014-01-06 21:25:10 -05:00
proller
78f7f9eca8 Fix wrong named masterserver announce variable 2014-01-07 03:11:18 +04:00
proller
c62bab010f Send long announce as POST, show OS in useragent
Add lag reporting to masterserver (average dtime)
StyledWriter  -> FastWriter in masterserver announce
2014-01-07 02:50:45 +04:00
PilzAdam
3e728e722a Escape error messages in error dialog 2014-01-06 18:59:14 +01:00
Perttu Ahola
92aa38bdfc Actually pause singleplayer game in pause menu and use lower maximum FPS in it 2014-01-06 17:39:44 +02:00
sapier
6833e04bc5 Add function to deregister a profiler from profiler list 2014-01-06 15:26:24 +01:00
Perttu Ahola
d76957ee22 Create new instance of mesh every time it's required (Solves #703) 2014-01-06 13:24:31 +02:00
Perttu Ahola
86c616a545 Fix main menu error message dialog: Now multi-line messages aren't cut at half of second line 2014-01-06 02:37:36 +02:00
hasufell
10eea107ed BUILD: fix cmake list parsing
because cmake is unable to parse it's own lists properly
2014-01-05 20:58:40 +04:00
hasufell
cb7bb736c7 BUILD: prefer pkg-config for freetype2 detection
This can solve numerous problems such as:
http://www.cmake.org/Bug/view.php?id=13959
http://www.cmake.org/Bug/view.php?id=14601

If pkg-config or freetype2.pc is not found, then fall back to the
FindFreetype.cmake module logic.

Restrict to UNIX since I only tested it here.
2014-01-05 20:58:40 +04:00
Sfan5
160e2b7b7d Add option to link to OpenGL ES, fixes #1051 2014-01-05 20:50:55 +04:00
Ilya Zhuravlev
b8c3221d55 Fix absence of images when compiled with RUN_IN_PLACE=0. 2014-01-05 12:43:40 +02:00
Kahrl
4d22977509 Reenable -dev suffix 2014-01-03 04:36:13 +01:00
Novatux
91923806a9 Fix objects being selected behind a node 2014-01-02 14:26:21 +01:00
kwolekr
1ad81c1ce3 Bump version to 0.4.9 2014-01-01 16:54:28 -05:00
kwolekr
25b1cca415 Fix exception caused by destroying sockets on Server shutdown 2013-12-31 15:00:49 -05:00
kaeza
767b2e7b17 Fix enum element name in Lua HUD code (position vs. pos) 2013-12-31 06:13:54 +01:00
ShadowNinja
2902a29c2d Initialize world before creating BanManager and RollbackManager 2013-12-30 14:29:33 -05:00
ShadowNinja
829426c714 Fix InventoryList reading order
Lua does not guarantee that the indexes of a table will be in numerical order.
2013-12-30 14:00:05 -05:00
Novatux
8e1d78e9de Revert "Fix minetest.facedir_to_dir when param2 is 5 or 7."
This reverts commit 4e5760a541.
2013-12-30 18:45:34 +01:00
PilzAdam
4b31a38ae9 Remove FPS from window title
This doubles performance on some window managers (WTF?!)
2013-12-25 03:52:44 +01:00
Kahrl
bf9f50bc0e Make SHA1::addBytes(..., 0) a no-op instead of an assertion failure 2013-12-25 00:29:00 +01:00
Kahrl
3aa28bc7a2 Use sleep_ms instead of select in httpfetch when max_fd == -1, fixes WSAEINVAL 2013-12-24 19:28:09 +01:00
Kahrl
a5377251e2 Fix particle code ignoring return value of std::vector::erase(). Wat. 2013-12-23 15:11:53 +01:00
RealBadAngel
a58b47d0f6 Fix wrong names for parallax settings in config example. 2013-12-22 00:30:17 +01:00
RealBadAngel
7ae0b90ff7 Bugfix to get_all_craft_recipes.
Indexes for empty slots shall not be skipped.
2013-12-21 23:03:51 +01:00
Kahrl
a50db0e824 Check for denied access in itemdef/nodedef/media fetch loop 2013-12-19 21:47:08 +01:00
ShadowNinja
e1f9ba435f Don't throw a error when writing JSON fails 2013-12-18 18:18:43 -05:00
Kahrl
ba8fa0bd42 Log guilty node name when allow_metadata_inventory_move/put/take fails 2013-12-18 23:04:13 +01:00
ShadowNinja
1ed90c90c3 Add 'minetest.write_json' 2013-12-18 16:46:53 -05:00
ShadowNinja
49cec3f782 Handle LuaErrors in Lua -> C++ calls on LuaJIT 2013-12-18 16:35:55 -05:00
BlockMen
38d112033b Fix formspec field labels 2013-12-17 01:13:16 +01:00
sapier
54dbd78f90 Fix broken httpfetch due to SimpleThread removal 2013-12-16 23:31:56 +01:00
BlockMen
c9ac9992c7 Fix MSVC compiling issue 2013-12-16 01:13:08 +01:00
sapier
3946d2a504 Reduce cloud coloring for colored fog and cloud mode 2013-12-16 00:16:06 +01:00
PilzAdam
5fd92d67d5 Remove an unused function and include from client.cpp 2013-12-15 19:57:08 +01:00
sapier
c120ea57c9 Add setting to disable direction dependent fog and sky colors 2013-12-15 15:30:02 +01:00
MirceaKitsune
848f80b2e5 Directional fog + horizon colors, based on sun & moon positions at sunrise / sunset 2013-12-15 14:28:50 +01:00
sapier
e9e9fd7c3f Replace SimpleThread by JThread now implementing same features 2013-12-15 13:39:42 +01:00
BlockMen
9772322613 Add alpha setting to font shadow 2013-12-14 21:11:38 +01:00
kwolekr
7a4c1e7327 Update mapgen params in ServerMap after Mapgen init 2013-12-14 10:49:20 -05:00
kwolekr
15c316765d Handle Lua errors in on_generate callbacks instead of throwing SIGABRT 2013-12-14 01:59:16 -05:00
kwolekr
c3708b456e Add map feature generation notify Lua API 2013-12-14 01:52:24 -05:00
ShadowNinja
83853ccd41 Remove support for optdepends.txt 2013-12-13 13:10:24 -05:00
Kahrl
e275b7099a Don't call curl_global_init twice 2013-12-13 18:08:53 +01:00
sapier
0d990bd189 Replace any direct curl usage by httpfetch 2013-12-13 18:05:46 +01:00
Kahrl
b03135548b Use httpfetch_async in serverlist announce code 2013-12-13 18:05:39 +01:00
Kahrl
0a903e69fb Implement urlencode and urldecode 2013-12-13 18:05:35 +01:00
Kahrl
0404bbf671 Rewrite client media download and support hash-based remote download
Move most of the media-related code in client.cpp into a new class
ClientMediaDownloader (clientmedia.cpp, clientmedia.h). Among other
things, this class does the following things:

- Download [remote_server][sha1] instead of [remote_server][name]. This
is to support servers that provide the same file name with different
contents.
- Initially fetch [remote_server]index.mth. This file should follow the
Minetest Hashset format (currently version 1) and contain a list of SHA1
hashes that exist on the server.
- The list of needed SHA1s is uploaded (via HTTP POST) when index.mth is
requested, so servers can optionally narrow down the list to the needs
of the client.
- If index.mth is missing (HTTP response code 404), we enter compat mode,
fetching [remote_server][name] as before this commit.
- remote_server can now contain multiple servers, separated by commas.
The downloader code attempts to split requests between the different
servers, as permitted by each server's index.mth. If one server claims
to have a file but actually doesn't (or something fails), we ask a
different server that also claims to have it.
- As before, when none of the remote servers provide a particular
file, we download it via the conventional method, i.e. using
the minetest protocol: TOSERVER_REQUEST_MEDIA / TOCLIENT_MEDIA.
- Bugfix: Every downloaded file's SHA1 is now verified against the SHA1
announced by the minetest server (before loading it and inserting it
into the file cache).
- Bugfix: Only send TOSERVER_RECEIVED_MEDIA when we actually have all
media. This should fix #863.
2013-12-13 18:05:20 +01:00
Kahrl
0ea3e6dbe2 Implement httpfetch module and initialize it from main()
Add curl_parallel_limit setting that will replace media_fetch_threads in
a later commit.

Fix a typo in MutexedQueue::pop_back() that made it impossible to compile
code that used this function. (Noticed this while implementing httpfetch.)
2013-12-13 18:05:10 +01:00
Ilya Zhuravlev
67bf7130ce Fix a bug in GenericCAO GENERIC_CMD_UPDATE_POSITION parsing. 2013-12-13 13:18:00 +04:00
stujones11
d9ef072305 Make line_of_sight return blocking node position 2013-12-12 16:11:00 -05:00
kaeza
33de69a173 Add 'on_prejoinplayer' callback 2013-12-12 13:42:14 -05:00
Ilya Zhuravlev
76036abdb0 Add configurable font shadow. 2013-12-12 21:47:54 +04:00
sapier
4ccaa6d0af Implement search tab and version picker 2013-12-11 23:07:38 +01:00
Ilya Zhuravlev
dfd1f87762 Add Lithuanian translation. 2013-12-11 22:10:56 +04:00
PilzAdam
6c4a8766ab Check if width, height or start index of a list[] is negative 2013-12-09 22:39:24 +01:00
RealBadAngel
dae03382bf Optimize shaders code. Add settings at compile time. 2013-12-09 13:28:50 +01:00
kwolekr
50b0e9f7a4 Mapgen Indev: Fix segfault in cave generation due to uninitialized variable 2013-12-08 22:13:05 -05:00
Novatux
206565d965 Fix shaders on some GPUs 2013-12-08 08:01:20 +01:00
kwolekr
3cc45fd8ad Fix leak and possible segfault in minetest.set_mapgen_params 2013-12-08 01:37:41 -05:00
kwolekr
83cc882335 EmergeManager: Fix Lua mapgen override param handling 2013-12-08 01:31:06 -05:00
kwolekr
bbae8eb751 Dungeongen: Create dungeon gen tuneables; add desert temples for Mapgen V6 2013-12-07 22:45:26 -05:00
ShadowNinja
a0dce51af6 Move script_run_callbacks to Lua 2013-12-07 22:03:07 -05:00
ShadowNinja
96f753a108 Fix paralax occlusion setting 2013-12-06 22:42:09 -05:00
sfan5
e15681080e Fix small mistake in Lua API docs 2013-12-06 18:37:32 +01:00
sapier
35f88ac67c Fix win32 jthread implementation 2013-12-06 17:49:10 +01:00
sweetbomber
22dbbf0a6f Improve (re)spawn, add cache_block_before_spawn and max_spawn_height settings 2013-12-05 16:09:02 -05:00
ShadowNinja
000da6b25d Only create one alias metatable 2013-12-04 14:31:55 -05:00
PilzAdam
e51ad5337f Use a table in set_physics_override() 2013-12-03 23:20:00 +01:00
PilzAdam
15be2659ea Add sneak and sneak_glitch to set_physics_override() 2013-12-03 23:20:00 +01:00
Sfan5
d9de9f23d9 Fix LevelDB maps 2013-12-03 20:03:20 +01:00
RealBadAngel
2330267d22 Shaders rework. 2013-12-03 18:55:25 +01:00
PilzAdam
60113bde74 Dont move item back when not clicking on a slot 2013-12-03 18:05:36 +01:00
proller
1309e52198 Rename names -> can_see_far_names in announce 2013-12-03 20:14:06 +04:00
sapier
5004f31575 Fix broken async locking in release build 2013-12-03 17:50:00 +02:00
proller
6cbd1b8bf7 Remove link to #, add unlimited_player_transfer_distance to announce 2013-12-03 19:48:43 +04:00
Sfan5
6fa3892a71 Fix MinGW build 2013-12-01 20:58:46 +01:00
sapier
04e9a9d541 Cleanup jthread and fix win32 build 2013-12-01 16:25:46 +01:00
kwolekr
f3439c40d8 Cavegen: Fix possible out-of-bounds heightmap access 2013-12-01 08:57:35 -05:00
kwolekr
20e3d550fa Decoration: Add schematic Y-slice probability support 2013-12-01 01:24:59 -05:00
sapier
de0cdbc01c Fix log threadname lookup handling not beeing threadsafe 2013-11-30 21:22:15 +01:00
0gb.us
e605d70256 Assume a selection box for fences
Similar to assuming a selection box for the nodebox drawtype, minetest.register_item() now assumes a selection box for the fencelike drawtype.
2013-11-30 13:22:50 -05:00
ShadowNinja
4696c59a5f Add error handler to async step 2013-11-30 13:05:13 -05:00
ShadowNinja
4594ba6522 Optimize table creation 2013-11-30 13:05:13 -05:00
Novatux
06baf05c64 Add documentation for minetest.swap_node 2013-11-30 18:57:56 +01:00
Novatux
d879a539cd Add minetest.swap_node 2013-11-30 18:37:56 +01:00
Ilya Zhuravlev
752e11e114 Fix MSVC build. 2013-11-30 21:00:18 +04:00
kwolekr
9a927476ca Change default value of is_ground_content to true
Most modders would otherwise forget to explicitly define this, and generated nodes aliased from mods would wall-off caves
2013-11-30 02:37:10 -05:00
kwolekr
ff7d7080e3 LuaVoxelManip: Add area parameters back to calc_lighting and set_lighting, made optional this time; also fixed a slight bug with night values being ignored 2013-11-30 00:27:39 -05:00
kwolekr
769b2d7c05 LuaVoxelManip: Add get_light_data() and set_light_data() 2013-11-30 00:01:43 -05:00
MetaDucky
5be786c804 Fixed potential NULL pointer and leak when setting node metadata 2013-11-29 23:35:16 -05:00
kwolekr
747bc40840 Cavegen: Respect is_ground_content MapNode setting; fix some code formatting issues 2013-11-29 20:54:04 -05:00
sapier
d19a69cd0d Fix broken thread stop handling 2013-11-30 02:15:31 +01:00
sapier
d02ce1cf4d Fix old gcc build 2013-11-29 23:36:18 +01:00
sapier
2e66aca357 Fix modstore/favourites hang by adding asynchronous lua job support 2013-11-29 22:09:14 +01:00
sapier
b08d7558de Split server/client port setting to avoid port number clashes in mainmenu 2013-11-28 21:43:06 +01:00
ShadowNinja
ff25218374 Don't use variable length arrays 2013-11-28 11:22:41 -05:00
ShadowNinja
7433d65d3e Rollback fixes and get_node_actions 2013-11-27 18:13:06 -05:00
Mario Barrera
1fd9a11e30 SQLite rollback 2013-11-27 18:13:06 -05:00
sapier
4f246f0e22 Fix line_of_sight (AGAIN) 2013-11-25 00:04:05 +01:00
PilzAdam
f87c1c2410 Reenable -dev suffix 2013-11-24 19:01:25 +01:00
kwolekr
122875c30c Bump version to 0.4.8 2013-11-24 02:23:49 -05:00
kwolekr
068dd796f5 Don't continue trying to deserialize blank block data 2013-11-24 02:10:15 -05:00
sapier
16bd368374 Temporary disable local install button due to irrlicht dialog breaking localization 2013-11-24 02:15:25 +01:00
Novatux
83f1d9ae6b Fix my name (doesn't display correctly because of utf8 characters) 2013-11-23 20:05:07 +01:00
Sfan5
374e68d205 Fix rename modpack button not working, fixes #1019 2013-11-23 19:06:35 +01:00
PilzAdam
fb150e0504 Run updatepo.sh 2013-11-23 17:38:01 +01:00
Pablo Lezaeta
c439bdd4e5 Translated using Weblate (Spanish) 2013-11-23 17:33:15 +01:00
Anton Tsyganenko
d661cb320d Translated using Weblate (Russian) 2013-11-23 17:33:15 +01:00
Maciej Kasatkin
78f1fcf450 Translated using Weblate (Polish) 2013-11-23 17:33:15 +01:00
Jakub Vaněk
28c21ed566 Translated using Weblate (Czech)
Myslím, že se jedná o IME Convert klávesu: http://msdn.microsoft.com/en-us/library/system.windows.input.key.aspx
2013-11-23 17:33:15 +01:00
King Artur
d7b0fcb2f0 Translated using Weblate (Romanian) 2013-11-23 17:33:15 +01:00
Jakub Vaněk
e5b1447d72 Translated using Weblate (Czech)
Myslím, že se jedná o IME NonConvert klávesu: http://msdn.microsoft.com/en-us/library/system.windows.input.key.aspx
2013-11-23 17:33:15 +01:00
Frantisek Simorda
dfc268d88b Translated using Weblate (Czech) 2013-11-23 17:33:15 +01:00
Pablo Lezaeta
8c3cf606a6 Translated using Weblate (Spanish) 2013-11-23 17:33:15 +01:00
Heisenberg CZE
c28810f6df Translated using Weblate (Czech) 2013-11-23 17:33:15 +01:00
Pablo Lezaeta
012551f16f Translated using Weblate (Spanish) 2013-11-23 17:33:15 +01:00
Petr Hála
4d165f5ea5 Translated using Weblate (Czech) 2013-11-23 17:33:15 +01:00
Heisenberg CZE
71cc575ea0 Translated using Weblate (Czech) 2013-11-23 17:33:14 +01:00
Heisenberg CZE
e023e7228e Translated using Weblate (Czech) 2013-11-23 17:33:14 +01:00
Petr Hála
80981f80f3 Translated using Weblate (Czech) 2013-11-23 17:33:14 +01:00
Kahrl
ab601e8710 Fix invalid escape sequence in database migration code 2013-11-23 16:09:38 +01:00
Sfan5
ee0b8da844 Prevent enabling Shaders if Direct3D is used 2013-11-23 15:41:47 +01:00
Kahrl
6f851c9692 Fix crash when pressing Enter key in formspec menu 2013-11-23 00:37:32 +01:00
ShadowNinja
e52d811110 Fix usage of 'minetest' where 'engine' was intended 2013-11-21 21:24:04 -05:00
kwolekr
5323d800cc Fix possible implicit conversion of NULL to std::string 2013-11-21 00:49:32 -05:00
kwolekr
98e4e2b373 LuaVoxelManip: Update parameter index of set_lighting() 2013-11-21 00:45:17 -05:00
kwolekr
b38afc9311 Mapgen V6: Respect water_level setting 2013-11-21 00:43:27 -05:00
BlockMen
0c8bf7cf94 Fix modmanager screenshot path 2013-11-19 15:39:40 +01:00
MetaDucky
0930911efa fix gettext compile issues under win32 2013-11-18 21:11:52 -05:00
kwolekr
86ef7147b6 Fix issue #1009 (minetest.get_connected_players() returns non-existing players) 2013-11-17 15:15:59 -05:00
PilzAdam
a55c073ce9 Increase liquid_loop_max to 10000 again 2013-11-17 21:05:14 +01:00
Perttu Ahola
21789ccc5f Revert patch 58f036ad1 that causes object duplication (which tried to fix objects getting hidden from client) and fix the original problem correctly. This fixes the second distinct object duplication bug. 2013-11-17 14:46:01 -05:00
sapier
b2d9205796 Fix Result of processed Request was written to invalid (non existent) ResultQueue if requesting thread timed out before 2013-11-17 12:46:54 -05:00
sapier
eadc943159 Add missing RequestQueue doc 2013-11-17 12:46:43 -05:00
sapier
dc407e219f Fix multicaller support in RequestQueue 2013-11-17 12:45:58 -05:00
kwolekr
d419e4cbb6 Do the same for LevelDB interface 2013-11-17 11:26:34 -05:00
kwolekr
aa172bdda4 Handle blank blocks in database
Fix screwed-up indentation
2013-11-17 10:57:45 -05:00
kwolekr
a439aea9ba Revert "Don't use msvc libs for mingw build"
This reverts commit 3985c01ad7.
2013-11-17 10:33:58 -05:00
PilzAdam
367b5382a3 Replace print()s with minetest.log() in builtin 2013-11-17 12:11:44 +01:00
kwolekr
a92fc3563c Prevent shaders from being created when disabled 2013-11-17 02:46:05 -05:00
sapier
533785ec9a Add CURL_DLL search to show up CURL_DLL in cmake gui and don't silently ignore missing CURL_DLL 2013-11-17 02:28:39 -05:00
sapier
3985c01ad7 Don't use msvc libs for mingw build 2013-11-17 02:27:00 -05:00
kwolekr
cca4f09ba1 Decoration: Stop DecoSimple::resolveNodeNames from complaining about no node name if decolist is used
Fix warning message for spawnby nodes

Prevent type-punning warning caused by casting enum to int
2013-11-17 02:22:24 -05:00
kwolekr
e396fb2984 Actually fix weather
The real problem was that MapBlocks were not activated before getting sent to the client
2013-11-17 01:59:04 -05:00
sapier
90e7832408 Fix invalid listname and listsize not handled correctly in set_size 2013-11-16 15:52:41 +01:00
MetaDucky
35606cfb67 fixed array limit check when reading Lua specialtiles table 2013-11-16 15:31:17 +01:00
ShadowNinja
371b39a09a Pass a errfunc to lua_pcall to get a traceback 2013-11-15 14:13:31 -05:00
BlockMen
3f519eb729 Fix formspec background padding when clipped 2013-11-14 19:03:55 +01:00
proller
9a750450ed Improved default settings for floatland perlin noise 1. Larger, more detailed floatlands. 2013-11-14 15:38:32 +04:00
Sfan5
5094a39f05 Fix compiling with 32bit MinGW 2013-11-12 15:18:20 +01:00
sapier
a935d81053 Fix invalid usage of temporary object in mainmenu json conversion 2013-11-11 23:23:58 +01:00
sapier
bb54e2cf1d Disable localization workaround in server 2013-11-11 19:56:49 +01:00
sapier
22a59b3912 Fix win32/msvc i18n (quite UGLY version, blame Microsoft) 2013-11-11 19:56:49 +01:00
sapier
0f9440fa61 Fix "TODO read modinfo" in modmanager to improve ui usability 2013-11-10 19:37:45 +01:00
proller
d75b1718f8 Fix spaces float islands code 2013-11-10 18:46:57 +04:00
0gb.us
a92e90f684 FIxed floating isle generation at chunk boundaries
A mapgen fix authored by paramat, as mentioned here: https://github.com/minetest/minetest/issues/989
2013-11-10 18:45:14 +04:00
kwolekr
b401e58c0d Weather: Fix uninitialized weather_update_time (sorry proller) 2013-11-09 15:29:22 -05:00
PilzAdam
0aeecf3f7f Add BlockMen to core dev list 2013-11-09 14:28:00 +01:00
sapier
b6bb3ffec4 Fix game buttons not beeing 48x48 2013-11-09 13:58:57 +01:00
sapier
7bd30b59ee Fix crash updating gametype without game 2013-11-09 13:30:44 +01:00
PilzAdam
1afd359550 Fix typo in lua_api.txt 2013-11-08 18:16:08 +01:00
4Evergreen4
1d856b734b Add wrapper for minetest.rotate_and_place. 2013-11-07 20:14:26 -05:00
Cy
3d63492f50 Don't assert scalars must be vectors. 2013-11-06 23:16:49 -05:00
Vanessa Ezekowitz
8ad052881c Fix orient_flags to be optional. 2013-11-06 22:23:00 -05:00
Vanessa Ezekowitz
d886f34003 Add 6d facedir rotation prediction routine 2013-11-06 21:08:36 -05:00
proller
8903c68460 Correct useragent in http queries
Net struct init
2013-11-06 00:50:32 +04:00
proller
6f44492238 Masterserver uptime fix 2013-11-05 21:18:37 +04:00
kwolekr
2e89209cf1 Add seed entry to world creation dialog 2013-11-05 00:00:01 -05:00
kwolekr
e46c527733 Accept hexadecimal and string values for seeds 2013-11-04 23:59:26 -05:00
sapier
1a96987d0f Fix invalid use of pointer to temporary object in json2lua conversion 2013-11-04 19:11:11 +01:00
Ilya Zhuravlev
7be18657b1 Fix masterserver README.md 2013-11-04 21:54:25 +04:00
proller
cf0786dc9d Masterserver fixes 2013-11-04 13:02:42 +04:00
proller
4a8a50a2a2 Masterserver show privs and js autoload 2013-11-04 04:56:39 +04:00
ShadowNinja
0fd29b7e09 Add a "More..." link when the serverlist is filtered 2013-11-03 18:21:53 -05:00
ShadowNinja
4c2687775f Only show servers with at least master.min_clients clients 2013-11-03 18:02:07 -05:00
ShadowNinja
50ea8601d5 Use a doT.js template for the serverlist 2013-11-03 17:47:16 -05:00
sapier
68bbdf1b2c Fix invalid usage of texture->getSize() where actually texture->getOriginalSize() was meant 2013-11-03 23:00:54 +01:00
BlockMen
5fbc39a76c Fix typo 2013-11-03 22:33:06 +01:00
BlockMen
25edae00ea Reworked formspecs and kahrl's hexcolor parser 2013-11-03 22:14:37 +01:00
Novatux
0b78889289 Send a on_receive_fields event when formspec is closed, with fields.quit = "true" 2013-11-03 11:53:59 +01:00
ShadowNinja
06a5eceb81 Add basic protection support to builtin 2013-11-02 14:01:10 -04:00
Aaron Suen
2636c92075 Portability fixes for OpenBSD (and possibly NetBSD and others). 2013-11-02 13:41:26 -04:00
Novatux
d11c76b9f2 Fix possible crash with grass ABM. 2013-11-02 16:22:26 +01:00
PilzAdam
0d35350b69 Fix liquid_range
* Prevent graphical glitches on old servers
* Fix flowing of liquids with viscosity != 1 and range != 8
* Fix range = 0, no flowing nodes will appear
2013-11-02 15:47:44 +01:00
Novatux
2bf9abade2 Fix grass adding/removing ABM. 2013-11-02 13:49:22 +01:00
Novatux
69a59f1e41 Move the sapling growing and grass adding/removing ABMs to Lua 2013-11-02 10:50:11 +01:00
ShadowNinja
b1c82f332c Add my email address to the main menu credits 2013-11-01 16:30:30 -04:00
ShadowNinja
fba2650e39 Add more checks to vector functions 2013-11-01 13:16:07 -04:00
BlockMen
1cbba877ff Don't remove background of games in submenus 2013-11-01 16:46:25 +01:00
0gb.us
53ab2f8def Fixed ignoring of "diggable" property of nodes. 2013-11-01 10:58:41 -04:00
Novatux
bd6d4666ab Add a callback: minetest.register_on_craft(itemstack, player,
old_craft_grid, craft_inv) and
minetest.register_craft_predict(itemstack, player, old_craft_grid,
craft_inv)
2013-11-01 15:55:34 +01:00
ShadowNinja
2f10cfb226 Made unknown nodes stop falling nodes properly and shorten lines 2013-11-01 10:33:29 -04:00
ShadowNinja
8bc68645cb Raise the maximum node limit to 0x7fff
As agreed to by kahrl
2013-11-01 10:27:23 -04:00
Novatux
6e17503208 Move new core devs to the "Core Developpers" section of mainmenu. 2013-11-01 12:27:50 +01:00
proller
382357d61c Masterserver totals fix 2013-10-18 23:57:22 +04:00
proller
a924409bd1 Masterserver update 2013-10-18 01:32:49 +04:00
ShadowNinja
e232f7311f Add sanity checks to vector functions 2013-10-17 09:42:57 +03:00
ShadowNinja
12504a18ec Remove vector metatable setting
This not only makes the vector functions faster, but also makes them more
consistent with other functions.
2013-10-17 09:41:01 +03:00
Perttu Ahola
b3591019ad Fix object duplication bug (at least in the most reproducible UFO case) 2013-10-17 00:10:16 +03:00
Novatux
34e0a0ca0f Add tool callback 2013-10-16 21:58:29 +04:00
Novatux
4e5760a541 Fix minetest.facedir_to_dir when param2 is 5 or 7. 2013-10-16 21:55:01 +04:00
Sokomine
19742d8d98 Add support for parameter 'visual_scale' for drawtypes 'signlike' and 'torchlike' like used for drawtype 'plantlike' 2013-10-14 21:38:56 +03:00
William Strealy
f86cdf0960 Translated using Weblate (Spanish) 2013-10-08 06:24:36 +02:00
Frederico Guimarães
ee9f4f11a3 Translated using Weblate (Portuguese (Brazil)) 2013-10-08 06:24:36 +02:00
Rutger NL
919ffd9d36 Translated using Weblate (Dutch) 2013-10-08 06:24:36 +02:00
Frederico Guimarães
406bed1164 Translated using Weblate (Portuguese (Brazil)) 2013-10-08 06:24:36 +02:00
Shen Zheyu
d0ddcecbe5 Translated using Weblate (Chinese (China)) 2013-10-08 06:24:36 +02:00
Rutger NL
25304b53a1 Translated using Weblate (Dutch) 2013-10-08 06:24:36 +02:00
we prefer instagib metl3
14e562e92b Translated using Weblate (French) 2013-10-08 06:24:36 +02:00
Pilz Adam
b3ad0f1ed4 Translated using Weblate (German) 2013-10-08 06:24:36 +02:00
Kahrl
5f3806c93c Add Czech language 2013-10-08 00:23:35 +02:00
RealBadAngel
5598f3c81b FIx wrong error message on invalid use of the formspec element image_button 2013-10-07 22:50:26 +02:00
0gb.us
afb27329fc Remove mapgen_air alias (#935) 2013-10-05 18:42:31 +02:00
fairiestoy
2170c9958a Optimized minetest.get_connected_players()
Instead of collecting all objects within a huge radius (which could be
a big value), just register each player that connects and give back the
current hold list.
2013-10-01 15:03:03 +02:00
Kahrl
2134316c80 Pass VERSION_EXTRA to GenerateVersion.cmake 2013-09-29 16:05:09 +02:00
PilzAdam
a9c0961e0c Add set_name(), set_count(), set_wear() and set_metadata() to Lua ItemStack 2013-09-28 23:46:48 +02:00
PilzAdam
731392866f Allow to manually specify param2 in minetest.item_place() and return success 2013-09-28 23:46:48 +02:00
Kahrl
5dce44ec5e Add --version option 2013-09-28 21:30:17 +02:00
Kahrl
f0edd88dff Remove doc/gpl-2.0.txt, add doc/lgpl-2.1.txt 2013-09-28 21:30:17 +02:00
Kahrl
8bc7ea61b9 Show git hash in version string at top left corner of window 2013-09-28 21:30:17 +02:00
ShadowNinja
372d638ec1 Lower the default max_users from 100 to 15 2013-09-28 21:09:52 +02:00
PilzAdam
4ea0e4f606 Add curl, freetype and luaJIT to CMAKE_BUILD_INFO 2013-09-28 15:41:37 +02:00
kwolekr
fb6a789991 Re-fix hud_change stat argument retrieval
Conflicts:
	src/script/lua_api/l_object.cpp
2013-09-26 04:39:10 +02:00
BlockMen
9e6bdc377f Fix compiling issue of MSVC 2013-09-23 11:51:14 +02:00
BlockMen
27947d85f7 Add option to scale image to percentage values 2013-09-20 20:03:58 +02:00
proller
f7ee5da4c1 Fix null dereference in weather update functions 2013-09-18 01:37:47 +04:00
kwolekr
c0398224ef Fix some warnings and other minor details 2013-09-16 23:52:42 -04:00
kwolekr
9bccd75e34 Weather: Clean up getHeat/getHumidity somewhat 2013-09-16 23:33:53 -04:00
ShadowNinja
c9eb17aba3 Fix comments about length of server step
6b927229f5 Changed the default server step
from 0.05s to 0.1s
2013-09-17 01:47:45 +02:00
proller
cfe6eaa66b Use cached "weather" setting 2013-09-17 02:57:36 +04:00
proller
62bc5331aa Fog depend on humidity 2013-09-17 02:43:24 +04:00
proller
4c704fe306 Add configurable PRAGMA synchronous = 2013-09-17 02:11:30 +04:00
kwolekr
d308352dbd Always use builtin JThread library 2013-09-15 23:00:01 -04:00
Kahrl
3c4734d69a Change mainmenu texture handling + small misc changes
Texture names must now be escaped in formspec elements image[],
background[], image_button[], image_button_exit[].

Instead of special-case handling of texture loading (and unloading
which was missing) in guiFormSpecMenu.cpp, use the newly created
ISimpleTextureSource interface which is a minimal subset of
ITextureSource. There is an implementation of this interface
used by GUIEngine (MenuTextureSource).

Fix an off-by-one bug in unescape_string; it caused requests for a
texture called "\0".
2013-09-11 00:08:56 +02:00
BlockMen
da9fe64851 Fix hotbar padding at bottom 2013-09-10 23:39:38 +02:00
PilzAdam
4feea0ac68 Add offset to automatic_face_movement_dir 2013-09-10 23:31:44 +02:00
sapier
681e136d5f Fix bug: texture pack not overriding default menu textures 2013-09-10 22:51:27 +02:00
PilzAdam
e0f9f15d1d Use engine.is_yes() in mainmenu 2013-09-10 21:38:50 +02:00
PilzAdam
214da7bef9 Use the Settings Lua interface to read world.mt 2013-09-10 21:38:49 +02:00
PilzAdam
dd5c451e03 Allow non-string arguments for minetest.is_yes() 2013-09-10 21:38:44 +02:00
PilzAdam
d820a6bfd8 Add Settings interface for Lua 2013-09-10 18:31:38 +02:00
Kahrl
10a38a3005 Handle --migrate even when compiled without leveldb support 2013-09-10 18:29:51 +02:00
Kahrl
c6e3797c1a Remove assert warning in leveldb wonderland 2013-09-10 18:28:26 +02:00
Kahrl
168fa2ffe0 Fix loading leveldb worlds 2013-09-10 18:16:36 +02:00
Kahrl
6fb4a78d71 Fix broken build due to missing mapsector.h include 2013-09-10 17:49:53 +02:00
Kahrl
217b66e5d2 Add --migrate to manpages and update manpage dates 2013-09-10 16:44:11 +02:00
Kahrl
95e4a93b1b Add license headers and remove useless includes 2013-09-10 16:09:30 +02:00
Sfan5
3725179736 Use system-wide LevelDB instead of bundled one 2013-09-09 22:50:51 +02:00
Sfan5
1f3402e7a1 Prevent ModMgr from deleting backend setting in world.mt 2013-09-09 22:50:51 +02:00
Sfan5
49a75b1894 Make --migrate update world.mt too 2013-09-09 22:50:51 +02:00
Sfan5
321ac66558 Add note about --migrate only working with minetestserver or --server 2013-09-09 22:50:51 +02:00
Sfan5
d423a8fc20 Fix 'Unknown map backend' error when using Configure menu right after creating world 2013-09-09 22:50:51 +02:00
Sfan5
f1e4a671dc Use STL containers instead of irr::core::list 2013-09-09 22:50:51 +02:00
Sfan5
1cc1c56234 Add message that LevelDB is not supported on Windows 2013-09-09 22:50:51 +02:00
Sfan5
7e44c2ace1 Make it compile 2013-09-09 22:50:50 +02:00
Ilya Zhuravlev
58841ef12f Add dummy and LevelDB database backends 2013-09-09 22:50:50 +02:00
Ilya Zhuravlev
71a8769bb5 Run updatepo.sh 2013-09-08 15:16:19 +04:00
Ilya Zhuravlev
6de16bb438 Add fallback font support for some languages. 2013-09-08 15:16:19 +04:00
Novatux
6291fd1cbb Add minetest.get_gametime() API function, that returns the number of seconds since the world was created. 2013-09-08 11:09:50 +02:00
Leonardo Costa
4a2203413f Translated using Weblate (Portuguese) 2013-09-07 19:55:22 +02:00
Block Men
0be633a61d Translated using Weblate (German)
Fix typo
2013-09-07 19:55:22 +02:00
Shen Zheyu
2963f631e3 Translated using Weblate (Chinese (China)) 2013-09-07 19:55:22 +02:00
Sfan5
df3a5a2abf Add mapgen_stair_cobble alias to minimal 2013-09-06 21:46:22 +02:00
0gb.us
211b372e26 Standardized method of getting node info in dungeon mapgen. 2013-09-06 21:42:01 +02:00
sapier
8489980039 Add sanity check to sort function 2013-09-05 01:45:39 +02:00
sapier
7935044820 Fix selectionbox not honoring anaglyph mode 3d distortion 2013-09-05 00:57:09 +02:00
sapier
e8b9467905 Fix crash on lua exception 2013-09-05 00:45:00 +02:00
PilzAdam
7860097eda Use player:set_hotbar_image() instead of hardcoded hotbar.png 2013-09-05 00:21:16 +02:00
sapier
5b518ed2fe Add backtrace to error function 2013-09-04 12:19:26 +02:00
Kahrl
af490330e7 Fix remnants of s32 enable_shaders 2013-09-04 00:16:33 +02:00
Kahrl
1ad9365d34 Fix enable_fog = false not having any effect when shaders are enabled 2013-09-03 13:23:30 +02:00
Ilya
e61b1773c9 Server::ProcessData(): call getBanName once instead of twice (#639) 2013-09-03 07:34:43 +02:00
Kahrl
1ecf51a13f Add minetest.parse_json, engine.parse_json 2013-09-02 02:20:08 +02:00
PilzAdam
71a6ffa762 Use wstring for vertlabels 2013-08-31 21:07:53 +02:00
sapier
5d0f19fd7d Fix bug in pathfinder causing endless loop in some situations 2013-08-31 21:26:51 +04:00
Diego Martínez
a0ef75d32d Translated using Weblate (Spanish) 2013-08-30 23:15:56 +02:00
Ilya Zhuravlev
fd6e7cef92 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Anton Tsyganenko
d01d9217dd Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Ilya Zhuravlev
1751fdf937 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Anton Tsyganenko
7766420cf4 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Anton Tsyganenko
e69764a6f3 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Anton Tsyganenko
525483c500 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Anton Tsyganenko
18bf767014 Translated using Weblate (Russian) 2013-08-30 23:15:56 +02:00
Pilz Adam
cfaa9b3be5 Translated using Weblate (German) 2013-08-30 23:15:56 +02:00
proller
902d5927f0 Normalized heat and adjusted humidity 2013-08-30 00:42:53 +04:00
Ilya Zhuravlev
82e1ab7b2b Add escaping to world list in main menu (fixes #896). 2013-08-29 16:12:16 +04:00
Ilya Zhuravlev
d470842e8e Remove "po/du". "du" is invalid language code (fixes #881). 2013-08-26 14:30:17 +04:00
BlockMen
439079cad8 Add support for using textures in hotbar 2013-08-25 18:49:10 +02:00
Kahrl
fead7a27ca Fix aliases not working in shapeless crafting recipes 2013-08-25 18:14:26 +02:00
PilzAdam
4679455c3f Run util/updatepo.sh 2013-08-25 16:54:50 +02:00
Ilya Zhuravlev
d05b15df77 Add a setting for HighPrecisionFPU (fixes #763). 2013-08-25 18:25:01 +04:00
Ilya Zhuravlev
151617c552 Fix *.po errors caused by rebase. 2013-08-25 16:59:53 +04:00
Vladimir a
5a0cadab0c Translated using Weblate (Ukrainian) 2013-08-25 13:05:13 +04:00
Anton Tsyganenko
c9449c6fb7 Translated using Weblate (Russian) 2013-08-25 13:02:30 +04:00
sfan5
833183ddb4 Translated using Weblate (Norwegian Bokmål) 2013-08-25 13:02:11 +04:00
sfan5
f4ef91debf Translated using Weblate (Estonian) 2013-08-25 13:01:41 +04:00
Sasikaa Lacikaa
e74dfaf868 Translated using Weblate (Dutch) 2013-08-25 13:01:17 +04:00
Sasikaa Lacikaa
4260b99df2 Translated using Weblate (Hungarian) 2013-08-25 13:01:17 +04:00
sfan5
9ebed5e497 Translated using Weblate (Dutch) 2013-08-25 12:59:48 +04:00
Vladimir a
342629a3bf Translated using Weblate (Russian) 2013-08-25 12:59:02 +04:00
Nicola Spanti
ca58c2464a Translated using Weblate (French) 2013-08-25 12:57:33 +04:00
we prefer instagib metl3
9f2b08ddf0 Translated using Weblate (French) 2013-08-25 12:57:32 +04:00
sfan5
ba335958d6 Translated using Weblate (Ukrainian) 2013-08-25 12:57:15 +04:00
BlockMen
78ea818aaf Fix umlauts/special character issue in lua gettext 2013-08-19 22:23:41 +02:00
BlockMen
deaa8dc287 Fix gettext for tabs (windows) 2013-08-19 15:59:09 +02:00
Kahrl
ade70fe4b9 Allow SIGINT to kill mainmenu again 2013-08-19 15:49:36 +02:00
Kahrl
4242782dc2 World config dialog: Use engine determined path for game mods 2013-08-19 15:49:36 +02:00
Kahrl
8548bb75b6 GUIFormSpecMenu focus fixes 2013-08-19 15:49:36 +02:00
BlockMen
72b9b0fe3a Reenable image scaling in formspecs 2013-08-18 15:52:04 +02:00
Kahrl
392689e7ba Fix trailing nils being dropped by deprecated minetest.env handler 2013-08-18 15:15:33 +02:00
sapier
09a50d0458 Add translation for main menu
Add engine.gettext() and remove gettext() calls in guiFormspecMenu.cpp
2013-08-17 16:01:43 +02:00
PilzAdam
787b43b218 Send player damage to all clients and apply [brighten 2013-08-17 01:23:25 +02:00
Kahrl
3ee8098708 Diagonal liquid animation 2013-08-17 01:00:36 +02:00
Novatux
4095e8f383 Fix modstore pagecount 2013-08-16 17:54:19 +02:00
Novatux
a2380bf76f Use get_texturepath() instead of get_gamepath()/../textures 2013-08-16 17:44:39 +02:00
PilzAdam
75a139e62c Use errorstream instead of std::cout in pathfinder.cpp 2013-08-16 17:42:12 +02:00
PilzAdam
1e4e64f831 Remove debug output 2013-08-16 02:48:50 +02:00
PilzAdam
b94f18298d Sort modlist alphabetically 2013-08-16 02:09:45 +02:00
PilzAdam
d52185c43e Add ability to activate mods with doubleclick (remove old_style_mod_selection) 2013-08-16 01:04:37 +02:00
Kahrl
5e312dc40d Don't automatically scroll listbox when selecting an item in the middle 2013-08-16 00:58:03 +02:00
Kahrl
d8337034b5 Formspec textlist: Black Irrlicht magic to detect fake doubleclicks 2013-08-16 00:08:19 +02:00
Novatux
7921fe2cd1 Fix formspec escaping, add escaping to info.txt for texture packs. 2013-08-15 22:12:51 +02:00
Sfan5
a97c085e9e Fix documentation about colors in formspec 2013-08-15 19:38:54 +02:00
Kahrl
58beca005c Add virtual destructor to IBackgroundBlockEmerger to silence warning 2013-08-15 01:16:34 +02:00
Kahrl
4e1f50035e Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenu 2013-08-14 21:03:33 +02:00
Ilya Zhuravlev
6228d634fb Fix my name. 2013-08-14 20:35:38 +04:00
PilzAdam
fc72d7fbb6 Fix typos 2013-08-14 00:50:03 +02:00
sapier
fc571ad46d Add support for entities to automatic face movement direction 2013-08-13 23:48:47 +02:00
PilzAdam
d718b0b34e Dont write directly to files but rather write and copy a tmp file 2013-08-13 22:05:45 +02:00
Kahrl
c8930850e3 Remove farmesh 2013-08-13 09:25:13 +02:00
kwolekr
c06caa14c3 Decoration: Fix schematic probability mess with new MTS file version 2013-08-11 15:34:49 -04:00
PilzAdam
56b9377c1c Dont crash if facedir > 23 2013-08-10 16:26:02 +02:00
PilzAdam
0d60bc55e4 Dont download modstore info if its isnt needed 2013-08-10 13:35:38 +02:00
Perttu Ahola
35c5ccfad3 Don't freak out when a client sends multiple TOSERVER_INIT packets; also log one thing more. 2013-08-08 06:11:43 +03:00
Kahrl
2ed3067bbe Fix various memory access problems detected by valgrind 2013-08-07 19:48:31 +02:00
PilzAdam
218f82f798 Fix path of mono font in defaultsettings.cpp 2013-08-07 13:41:00 +02:00
Sfan5
8b9bf47166 Fix stored XSS vulnerability in the serverlist 2013-08-07 09:24:32 +02:00
Kahrl
7294f28c3a Fix uninitialized irr::SEvent fields in guiFormSpecMenu.cpp 2013-08-07 01:36:19 +02:00
Novatux
779165144e Simplify code of mainmenu world sort 2013-08-06 18:33:23 +02:00
Kahrl
7fbc8152bf Fix full crack texture being shown when releasing dig button 2013-08-06 18:15:40 +02:00
BlockMen
7b13d119ed Add support for different drowning damage and allow drowning in other nodetypes 2013-08-06 17:49:39 +02:00
PilzAdam
ba65e2ae6c Fix worldlist in servertab being filtered by selected game 2013-08-06 17:28:51 +02:00
Perttu Ahola
53bf62bb83 Rename LagPool's member variables to avoid MSVC freaking up due to it's #define max 2013-08-06 18:17:58 +03:00
Perttu Ahola
61f240946a Clean up server's log messages and give a better error to client when its player is in use 2013-08-06 18:13:11 +03:00
Novatux
14eab22d81 Add minetest.registered_biomes 2013-08-06 13:24:54 +02:00
Kahrl
96c34d369e Fix crack overlay for animated textures 2013-08-05 01:52:09 +02:00
proller
2336d21efd Master server script improvement 2013-08-05 01:50:34 +04:00
PilzAdam
314e4dd4a6 Fix installation of textures/texture_packs_here.txt 2013-08-04 22:44:31 +02:00
Zeg9
44eb01695a Fix texture bumpmapping on some GPUs 2013-08-04 21:49:48 +02:00
proller
0b0919e81c Masterserver bugfix 2013-08-04 23:46:03 +04:00
proller
714a8cef38 Freeze-melt adjust 2013-08-04 23:31:01 +04:00
BlockMen
be4670fecf Fix formspec label issues in win builds (MSVC) 2013-08-04 20:49:23 +02:00
PilzAdam
2af5864534 Make freetype usage configureable by a setting 2013-08-04 20:35:14 +02:00
PilzAdam
3fd84edb61 Dont show gamefilter in TP tab 2013-08-04 18:37:19 +02:00
Novatux
383153419b Add texture pack selection to main menu 2013-08-04 16:52:30 +02:00
Novatux
fe1fe1b1e4 Change large amount of objects to be configurable via a setting in minetest.conf (max_objects_per_block). 2013-08-04 15:28:01 +03:00
Perttu Ahola
e6687be493 Fix server getting completely choked up on even a little of DoS
* If client count is unbearable, immediately delete denied clients
* Re-prioritize the checking order of things about incoming clients
* Remove a huge CPU-wasting exception in ReliablePacketBuffer
2013-08-04 10:44:37 +03:00
Perttu Ahola
8831669505 Allow mods to listen to cheat detections using minetest.register_on_cheat() 2013-08-04 00:45:49 +03:00
Perttu Ahola
742614180c Fix anticheat 2013-08-03 23:16:37 +03:00
Perttu Ahola
bc5db9b027 Lessen the sky color glitch when quickly turning to look up after looking at ground that contains caves 2013-08-03 19:04:16 +03:00
Perttu Ahola
c50c9a10f1 Fix and improve view range tuner 2013-08-03 18:46:18 +03:00
PilzAdam
45589fae58 Add replacements to schematics 2013-08-03 03:22:14 +02:00
proller
5e433fa913 More info in serverlist 2013-08-03 03:02:59 +04:00
PilzAdam
0b77588e87 Allow multiple 'wherein' nodes in oredef 2013-08-02 00:55:16 +02:00
proller
06cdce1e12 Weather backward compatibility 2013-08-02 00:51:36 +04:00
proller
0e89bca173 Leveled nodebox backward compatibility 2013-08-02 00:50:58 +04:00
Esteban I. Ruiz Moreno
c6cb97e693 Make bumpmapping compatible with irrlicht 1.8 2013-07-31 19:35:28 +02:00
sapier
251e3e01c7 Add support for setting stepheight for entities 2013-07-30 19:48:02 +02:00
PilzAdam
ff7c380d0e Fix warnings in mapblock.cpp 2013-07-28 23:34:58 +02:00
PilzAdam
4fb4efd8ed Play sounds/main_menu.ogg in menu 2013-07-28 23:29:03 +02:00
proller
174285f298 Warnings fix 2013-07-29 00:11:33 +04:00
proller
037e84d377 Better snow fall, finite liquid transform, leveled nodes api 2013-07-28 17:14:31 +04:00
proller
3aedfac968 Weather support 2013-07-27 23:21:48 +04:00
proller
e65d8ad655 Dont announce server in singleplayer 2013-07-27 17:51:34 +04:00
sapier
215e37aac3 Show portnumber for ip adresses only 2013-07-25 12:58:14 +02:00
BlockMen
a59f85c1a0 Add support of pressed_texture of image_button
Fix params number

Add pressed texture name

Fix string def

Fix syntax error
2013-07-24 01:02:43 +02:00
BlockMen
8e2467c393 Add gettext translation for image_button 2013-07-24 01:01:56 +02:00
proller
3629a90c2e Cosmetic player info changes 2013-07-24 02:41:03 +04:00
hdastwb
a0f5b70568 added (optional) support for 6d facedir in dir_to_facedir and added facedir_to_dir 2013-07-24 00:31:32 +02:00
PilzAdam
0b4b9e7f3a Fix modstore URLs 2013-07-22 22:26:48 +02:00
PilzAdam
a38f8d9900 Disable gamemanager by default 2013-07-22 18:16:36 +02:00
sapier
4f3bc05a5b Fix enable mod/enable button not shown on entering world config dialog 2013-07-22 18:10:00 +02:00
sapier
b3db44f801 Fix bug in world creation
Add old style mod selection in worldconfig dialog
2013-07-22 18:10:00 +02:00
sapier
4e2b394ae8 Add missing header/footer for singleplayer tab 2013-07-22 18:10:00 +02:00
sapier
e7ba4777fe Remove debug output 2013-07-22 18:10:00 +02:00
sapier
60225be7fa Fix Bug in modname guessing resulting in undefined modname 2013-07-22 18:10:00 +02:00
sapier
07fb257c04 Use user folder for gamemanager too 2013-07-22 18:10:00 +02:00
sapier
8beb0f19d1 Enable mod and gamemanager by default 2013-07-22 18:10:00 +02:00
sapier
32001d1e2b merge mainmenu_helper.lua to misc_helpers.lua 2013-07-22 18:10:00 +02:00
sapier
e3827fbc23 Fix background/overlay/footer/header handling
Add missing file headers
2013-07-22 18:10:00 +02:00
sapier
5160be91ae Add configurable curl timeout 2013-07-22 18:09:59 +02:00
sapier
d6c052038f Add playernumber to favorites list 2013-07-22 18:09:59 +02:00
sapier
8a1658ec3e filterlist api cleanup 2013-07-22 18:09:59 +02:00
sapier
baf5614880 Add port to favorites if not 30000
Major modmgr overhaul
Add missing formspec checkbox doc
2013-07-22 18:09:59 +02:00
sapier
868f35e27a Replace worldlist by generic filterlist implementation 2013-07-22 18:09:59 +02:00
sapier
5c7ecdb7c5 Add support for modstore screenshots
Add error output on invalid mmdb entries
2013-07-22 18:09:59 +02:00
sapier
80a2acaa86 Swap name/password <-> server description 2013-07-22 18:09:59 +02:00
sapier
47a0a5c746 Revert "Fix serverdescription and name not beeing saved to local serverlist"
This reverts commit 7dbbbfc665.
(was added twice)
2013-07-22 18:09:59 +02:00
sapier
7a9f365ba4 Remove unused required by list in worldconfig 2013-07-22 18:09:59 +02:00
RealBadAngel
0850d3fcf8 Fix light issue in 6d facedir. 2013-07-21 14:06:18 +02:00
PilzAdam
46d1d70e4c Bump protocol version 2013-07-20 21:25:21 +02:00
PilzAdam
8cae659786 Add an option to disable object <-> object collision for Lua entities 2013-07-20 20:43:11 +02:00
PilzAdam
413f0d0353 Add liquid_range to nodedef 2013-07-20 20:41:17 +02:00
PilzAdam
cba90d4441 Make range of tools configureable 2013-07-20 20:37:59 +02:00
RealBadAngel
d19c8b815d Add set_breath and get_breath to lua API. 2013-07-20 20:34:11 +02:00
PilzAdam
ab145c8827 Randomly choose singleplayer port 2013-07-16 02:02:56 +02:00
PilzAdam
ecb024af64 Fix lighting bug caused by disappearing lava 2013-07-16 01:51:04 +02:00
PilzAdam
4e5a45952a Remove support for common mods 2013-07-16 01:46:59 +02:00
Kahrl
112dbba7c4 Change ContentFeatures array to a vector 2013-07-14 23:06:31 +02:00
proller
9733dd5b5e Leveled nodebox 2013-07-13 22:13:24 +04:00
proller
a70993d6d2 Masterserver mods fix 2013-07-13 04:11:26 +04:00
proller
0a2de78da4 Better masterserver html 2013-07-13 01:41:49 +04:00
sapier
288948edf7 Don't show flags in local favorites 2013-07-12 22:55:34 +02:00
sapier
a0771d0940 Fix bug server name set to address field when using up/down keys
Show server description above connect button instead of in favorites list
2013-07-12 22:46:28 +02:00
sapier
38bc38cd88 Add missing server flags in public serverlist 2013-07-12 22:46:27 +02:00
sapier
494fa0c81a Remove lots of debug output from modmgr
Fix RUN_IN_PLACE=0 mod install (now mods are saved in user folder in that case)
Fix text of field element not unescaped correctly
2013-07-12 22:46:27 +02:00
sapier
7dbbbfc665 Fix serverdescription and name not beeing saved to local serverlist 2013-07-12 22:46:27 +02:00
proller
ac7a44792c Masterserver mods announse, ipv6, better curl errors 2013-07-13 00:19:05 +04:00
kwolekr
fc6725f14e Clean up bumpmap code a bit 2013-07-12 00:11:46 -04:00
PilzAdam
320a00e7c6 Disallow the name 'singleplayer' in a multiplayer server 2013-07-12 02:15:09 +02:00
Kahrl
6027c8d259 Add VoxelArea:position, VoxelArea:iter and VoxelArea:iterp 2013-07-11 22:57:26 +02:00
sapier
52beafff53 Worldlist fixes
Add alphabeticaly sorted worldlists
Select world after creation
Move worldlist handling to separate file
Merge world selection of singleplayer/server tab
Remove some useless code
2013-07-11 22:20:50 +02:00
stujones11
e8f201cefa Fix multiple texture support for animated meshnodes 2013-07-10 00:22:21 +02:00
sapier
1c7c5d571d Fix serverlist 2013-07-09 22:55:39 +02:00
proller
e3b7c8e0cc Public server checkbox 2013-07-10 00:17:47 +04:00
PilzAdam
c8bd2ae11c Dont play digging sound if not digging 2013-07-09 02:42:05 +02:00
kwolekr
e1a13608d8 Revert "Fix serverlist not beeing escaped correctly"
This reverts commit 39d03148e5.
2013-07-08 20:21:09 -04:00
sapier
eedb29346e Fix header not beeing shown except on singleplayer tab 2013-07-08 19:58:28 -04:00
sapier
39d03148e5 Fix serverlist not beeing escaped correctly
Always use address for server
Fix first (empty) element beeing selected after deleting last world
2013-07-08 19:58:17 -04:00
sapier
f419f66546 fix crash on play/start with empty world list
make enter button work in create world dialog
2013-07-08 19:58:03 -04:00
kwolekr
fca4610f11 Fix wallmounted rotations along Y axis for 90 and 270 degree cases 2013-07-08 18:50:29 -04:00
kwolekr
ce955f37ba Decoration: Handle facedir and wallmounted param2types with schematic rotation 2013-07-08 15:19:48 -04:00
PilzAdam
c813a3cc53 Remove note in lua-api.txt that there are no vector helper functions 2013-07-08 13:41:46 +02:00
PilzAdam
0b5f18754c Make sure that coordinates passed to /teleport are actual numbers 2013-07-08 13:33:14 +02:00
ShadowNinja
a75afb85ca Move math.hypot() to misc_helpers.lua and fix zero-division error 2013-07-07 21:47:38 -04:00
kwolekr
9dcd21911a Lua main menu: Fix world creation dialog 2013-07-07 20:37:00 -04:00
PilzAdam
9bd5f612f7 Set numeric locale in Lua in main menu 2013-07-08 02:28:36 +02:00
PilzAdam
6bc3a43d52 Settings: everything != 0 equals true; remove .asm shaders 2013-07-08 01:58:49 +02:00
sapier
88d43af276 Fix many formspec menu bugs 2013-07-07 19:49:52 -04:00
Sfan5
7e73b7cae9 Fix parseColor, change remaining colorkeys to new format, fix Contributor list 2013-07-07 19:59:18 +02:00
Kahrl
b3001bcd6e When server sends late media, log to errorstream instead of crashing.
Do a check for valid num_files before doing
assert(!m_mesh_update_thread.IsRunning());

In particular, don't execute the assertion if all media has already
been received.
2013-07-07 08:35:25 +02:00
ShadowNinja
07715b1b6a Handle 0 vectors in vector.normalize() 2013-07-07 02:29:09 -04:00
Vincent Heuken
39ab22070e include mathconstants.h in numerics.cpp 2013-07-07 01:52:43 -04:00
ShadowNinja
ae8ff4b8e2 Add vector helpers 2013-07-07 01:49:11 -04:00
kwolekr
d22baa88ed BiomeDefManager: Fully initialize default biome 2013-07-06 15:28:59 -04:00
kwolekr
65874c25db Mapgen V7: Fix out-of-bounds array access 2013-07-06 15:22:51 -04:00
kwolekr
06266abd6e LuaVoxelManip: Allow liquid updates in non-mapgen VoxelManip objects 2013-07-06 15:12:40 -04:00
kwolekr
55ecde665d Decoration: Remove usage of multi-character constants 2013-07-06 15:03:54 -04:00
Sfan5
307c57dcc4 Use hexadecimal RRGGBB instead of colorkeys, rename getColor to parseColor 2013-07-06 10:32:58 +02:00
kwolekr
18d7bc7fa1 Mapgen V7: Huge rewrite, also tweaks to cavegen et al. 2013-07-06 02:21:54 -04:00
Kahrl
3607fae75a Fix possible NULL dereference in createExtrudedMesh 2013-07-06 06:16:51 +02:00
Kahrl
922a30ee47 Don't rebuild the dummy shader (less SourceShaderCache warning spam)
Also write something about rebuilding shaders to infostream in
Client::afterContentReceived()
2013-07-05 04:24:05 +02:00
proller
92833a07d1 Improve finite liquid distribution, fix small bug 2013-07-05 00:11:11 +04:00
Kahrl
a013f762c4 Throw exception instead of assert on nested reliable packets
Fixes a denial of service vulnerability, issue #784
2013-07-04 06:18:50 +02:00
RealBadAngel
3f6f327cb9 Add texture bumpmapping feature. 2013-07-04 02:36:32 +02:00
Kahrl
b850f0f038 Whoever called a function parameter m_device is fired without notice. 2013-07-03 20:33:54 +02:00
kwolekr
a225efaec5 Lua main menu: Fix crash on init lua error, mapgen dropdown index, and new worlds not saving index 2013-07-03 01:25:26 -04:00
kwolekr
ad4c065344 Change debug optimization level back to -O1 2013-07-02 21:48:18 -04:00
BlockMen
89533f0811 Update wiki url 2013-07-03 03:37:00 +02:00
Kahrl
8f1d5d34a6 Move generateTextureFromMesh to TextureSource to fix a texture leak
TextureSource has a list of textures to delete (m_texture_trash) so this
provides a proper, non-hacky way to delete RTT textures. Also, the prior,
hacky way of deleting them seems to be broken (see pull request #803).

To avoid header file clutter by repeating the same long list of
arguments over and over again, store the arguments of
generateTextureFromMesh in a struct called TextureFromMeshParams.

Also fix issue #782 (Only use bilinear (and others) on item textures
when settings allow it).
2013-07-03 03:24:28 +02:00
sapier
b1ef850877 Fix possible 0 pointer access 2013-07-02 20:01:48 -04:00
sapier
967121a34b Replace C++ mainmenu by formspec powered one 2013-07-02 19:58:20 -04:00
kwolekr
fe4ce03d52 Cavegen: Prevent caves from occuring above ground level, and superfluous mixing of lava and water in caves 2013-07-01 21:20:03 -04:00
Kahrl
8161ab573f Remove texture atlas / AtlasPointer, rename getTextureRaw to getTexture 2013-07-02 03:03:10 +02:00
PilzAdam
caf0b67e47 Remove unnecessary debug output in node_dig() 2013-07-02 00:34:59 +00:00
Lord89James
90b095aa54 Infinite tools in creative mode 2013-07-02 00:33:31 +00:00
arsdragonfly
4bbb78a99b Fix i18n of some strings. 2013-07-02 00:13:50 +00:00
kwolekr
dd6d1afd8e Decoration: Add schematic rotation support 2013-07-01 18:04:51 -04:00
proller
131eb56f52 Disable collision fix, its broke unit tests 2013-07-01 00:26:54 +04:00
proller
37ca8854f7 Fix sand, gravel falling stuck 2013-06-30 22:48:51 +04:00
kwolekr
067888d549 LuaVoxelManip: Fix minor bug with set_lighting, remove coordinate params for light and liquid updates 2013-06-29 22:23:00 -04:00
proller
848c3fe51a Optimize liquid queue on generate map for liquid_finite 2013-06-30 01:29:21 +04:00
kwolekr
21a4adcd27 Update documentation for get_mapgen_object 2013-06-29 16:24:32 -04:00
kwolekr
0003fc8215 Add Lua VoxelArea methods: contains, containsp, containsi 2013-06-28 22:52:13 -04:00
kwolekr
9126823c7e Make generated water a shade darker to match up with older versions 2013-06-28 22:22:44 -04:00
kwolekr
3f13dc790c Add voxelarea.lua helper to builtin 2013-06-28 11:07:45 -04:00
PilzAdam
280946ba83 Dont write player files all the time 2013-06-28 14:15:48 +00:00
kwolekr
9e100bc42b Apply various fixes to several things 2013-06-27 22:35:35 -04:00
kwolekr
6b3169e4d0 LuaVoxelManip: Separate VoxelManip data get/set from emerging/blitting data back to map 2013-06-27 22:35:35 -04:00
kwolekr
2e292b67a0 Add Lua on_mapgen_init callback, and minetest.set_mapgen_params API 2013-06-27 22:35:35 -04:00
kwolekr
18882a4d26 Add Lua PerlinNoiseMap:get#dMap_flat API 2013-06-27 22:35:35 -04:00
kwolekr
8aa930f28e Add minetest.get_mapgen_object to API 2013-06-27 22:35:35 -04:00
kwolekr
2c0b51795e Fix issue of VManip occasionally not blitting back blocks, and pitch black lighting bug 2013-06-27 22:35:35 -04:00
kwolekr
d6ac3d8d9a Add LuaVoxelManip 2013-06-27 22:35:35 -04:00
proller
e47f6fdfe9 Fix ipv6 on windows 2013-06-24 20:13:56 +04:00
kwolekr
30d6d4c733 Cavegen: fix division by 0 with abnormal max tunnel diameter sizes 2013-06-23 15:16:52 -04:00
proller
f764297be2 Math mapgen fix, ip show on connect, pathfinder segfault fix 2013-06-23 20:35:16 +04:00
proller
75b8c13b00 New math mapgen with fractal based worlds 2013-06-23 18:07:10 +04:00
proller
f960c3be31 Add support for IPv6
Two new configuration options are added:
     - "enable_ipv6" to enable/disable the overall use of IPv6
     - "ipv6_server" to enable/disable the use of IPv6 sockets when running
       a server (when "enable_ipv6" is enabled)
2013-06-23 11:31:22 +04:00
kwolekr
309c5f3641 Decoration: Add support for zero probability, fix breakage from last commit 2013-06-22 20:49:01 -04:00
PilzAdam
130464c268 Print playername when failing to read playerfile and ignore files starting with . 2013-06-22 21:39:47 +00:00
kwolekr
4d77781ce7 A handful of minor fixes to various things 2013-06-22 17:27:48 -04:00
kwolekr
c1b829077a Decoration: Add Schematic decoration type 2013-06-22 01:11:52 -04:00
Ilya Zhuravlev
b1a74df26d Add Hungarian language. 2013-06-21 12:26:07 +04:00
Weblate
3af90db5b5 Merge remote-tracking branch 'origin/master' 2013-06-21 10:24:16 +02:00
Chyngyz Dzhumaliev
58f3cd3eb5 Translated using Weblate (Kirghiz) 2013-06-21 10:24:06 +02:00
PilzAdam
b1ebd9f79c Add a setting for max loop count per step in liquid update 2013-06-20 22:31:46 +00:00
Kahrl
c2cdaceed0 Make minetest.debug accept multiple parameters; convert them to string 2013-06-21 00:04:18 +02:00
Kahrl
469d0b120e Remove deprecated functions that don't work anymore from lua_api.txt 2013-06-20 07:52:04 +02:00
PilzAdam
81c8b404e7 Play placing sound only if place prediction was successful 2013-06-19 21:42:12 +00:00
PilzAdam
9b6f1d647c Dont dig or place nodes if interact priv is missing (clientside) 2013-06-19 21:42:12 +00:00
PilzAdam
53066024f6 Add drowning 2013-06-19 15:47:00 +00:00
Diego Martínez
e65ac4d626 Restore old output format of dump() 2013-06-18 19:55:53 +00:00
David Gumberg
26165453d2 Compress textures 2013-06-18 19:48:04 +00:00
kwolekr
f18b4872ea Decoration: Place decorations in mgv6, check if air or cignore before placement 2013-06-17 21:59:57 -04:00
Kahrl
261f559339 Show number of objects in client environment in profiler (F6) 2013-06-18 01:49:06 +02:00
Kahrl
d74c377337 Formspec: Don't perform black magic if selected item fits the guess 2013-06-18 01:32:11 +02:00
Kahrl
c8ed61b281 Fix calculation of selected item (for not drawing it) in formspec
The previous code did not work when the list did not start at index 0
of the inventory list (issue #779).
2013-06-18 01:18:54 +02:00
Esteban I. Ruiz Moreno
816ffa99ba Remove useless recalculation of bounding box (mapblock_mesh) 2013-06-18 01:11:46 +02:00
kwolekr
0b20768a24 Decoration, Ore: Resolve node names on Mapgen init 2013-06-17 18:51:29 -04:00
kwolekr
56093b6614 Decoration: Change divlen to sidelen 2013-06-17 18:23:31 -04:00
kwolekr
0a8519a26f Add initial Decoration support, many misc. improvements & modifications 2013-06-17 03:21:36 -04:00
Kahrl
eccd1fdbed Extend a delay in TestConnection from 50 to 100 milliseconds.
The 50 ms delay causes frequent test failures on certain systems with
slow network stacks, these failures go away with the 100 ms variant.
2013-06-17 02:09:50 +02:00
Kahrl
b5918760fb Tweak IDropAction restriction handling in server.cpp 2013-06-16 17:01:21 +02:00
Kahrl
4405310184 Lazy sunday typo fixing. s/unban_player_of_ip/unban_player_or_ip/g 2013-06-16 14:07:12 +02:00
sweetbomber
0413f8ad9d Removed a redundant step which degraded performance 2013-06-15 21:41:30 +04:00
Esteban I. Ruiz Moreno
93dfc3ec70 Add basic unicode support to the console (linux workaround) 2013-06-15 15:09:11 +00:00
khonkhortisan
3e4f1462bc Fix crash in dump() when index is a table 2013-06-15 00:10:16 +00:00
MetaDucky
40b2f36eb8 Fixes cmake-gui causing RUN_IN_PLACE to be always off 2013-06-13 16:45:52 +02:00
PilzAdam
7a58c1d4ca Reset dig_time when switching to a tool that cant dig the current node 2013-06-13 13:34:48 +00:00
Kahrl
21d6b39fd7 Enable word wrapping in profiler IGUIStaticText (freetype needs this) 2013-06-13 14:32:53 +02:00
PilzAdam
2cdf0ff4ab Play player_damage.ogg when recieving damage and additionally play player_falling_damage.ogg when recieving falling damage 2013-06-12 20:27:06 +00:00
Kahrl
773471750d Fix class/struct forward declaration inconsistencies (good on ya, MSVC) 2013-06-06 22:57:38 +02:00
PilzAdam
6b3e553dd5 Bump version to 0.4.7 2013-06-06 17:14:26 +00:00
PilzAdam
bfa608b85e Revert "Fix multiple texture support for animated meshnodes." (broke existing models)
This reverts commit 649dca4d16.
2013-06-06 17:13:41 +00:00
Esteban I. Ruiz Moreno
7cb5217255 Close console when it loses focus but it is still on screen 2013-06-05 21:14:14 +02:00
Kahrl
4f6bec19bc Only add ^[forcesingle to get raw texture if atlas is used 2013-06-04 07:44:19 +02:00
stujones11
649dca4d16 Fix multiple texture support for animated meshnodes. 2013-06-03 23:31:08 +02:00
sweetbomber
601ab85226 Corrected segfault when registering new biomes. 2013-06-03 20:35:51 +02:00
Kahrl
e988df0fbd Add and implement setting max_clearobjects_extra_loaded_blocks.
Now Environment::clearAllObjects() unloads unused blocks in an interval
defined by max_clearobjects_extra_loaded_blocks (default 4096).
2013-06-03 20:09:32 +02:00
Kahrl
b89c79e905 Delay deleting replaced textures (m_texture_trash) 2013-06-03 15:50:14 +02:00
Kahrl
9fe74a34ea Call m_menumgr->deletingMenu from quitMenu in addition to destructor
This fixes the bug where noMenuActive() keeps returning false after
closing a menu until the mouse is moved, rendering the keyboard
unusable (the_game calls input->clear() every frame when
noMenuActive() is false).
2013-06-03 15:25:48 +02:00
bcnjr5
64befefcfc Add Code::Blocks project and build files to .gitignore 2013-06-03 04:30:59 +02:00
Kahrl
6f9d384311 Replace c55.me links 2013-06-03 01:57:42 +02:00
Dany Cuartiella
29e9d09c68 Translated using Weblate (French) 2013-06-02 01:56:06 +02:00
sapier
c25102a4f7 Fix missing find_path and line_of_sight 2013-06-01 15:07:43 +02:00
MetaDucky
c893958bb1 Fix some nullptr exceptions when handling invalid node inventories 2013-06-01 14:45:43 +02:00
Ilya Zhuravlev
db9c86d6c1 Translated using Weblate (French) 2013-06-01 13:23:00 +02:00
Weblate
1dfc2e02b3 Merge remote-tracking branch 'origin/master' 2013-06-01 13:18:52 +02:00
Frederico Guimarães
ec039a3d12 Translated using Weblate (Portuguese (Brazil)) 2013-06-01 13:18:42 +02:00
v c
77acdfed43 Translated using Weblate (Portuguese) 2013-06-01 13:18:42 +02:00
Chynggyz Jumaliev
926a47f35b Translated using Weblate (Kirghiz) 2013-06-01 13:18:42 +02:00
Pilz Adam
df2f4168e5 Translated using Weblate (German) 2013-06-01 13:18:41 +02:00
Shen Zheyu
fe560d81e7 Translated using Weblate (Chinese (China)) 2013-06-01 13:18:41 +02:00
MetaDucky
64627817fc Fix minetest.get_inventory(loc) always returning nil for "node" type loc 2013-06-01 12:15:11 +02:00
MetaDucky
a61aa6690b Fix editbox default text being pre-selected in some cases 2013-06-01 01:59:48 +02:00
Kahrl
7721948a2f Generate debug HUD text with ostringstream instead of snprintf.
This should fix #730.
2013-06-01 01:50:08 +02:00
proller
6b2c46c431 Liquid adjusting: continue to drop 2013-05-31 22:59:09 +04:00
manuel joaquim
83f1d7cd9e Translated using Weblate (Portuguese) 2013-05-30 00:03:27 +02:00
manuel duarte
13f7049d84 Translated using Weblate (Portuguese) 2013-05-29 01:32:19 +02:00
manuel duarte
503e61cf2b Translated using Weblate (Portuguese) 2013-05-29 01:31:47 +02:00
sapier
efc75db764 Bugfix: Update formname on showing new formspec while already one shown 2013-05-26 01:45:46 +02:00
MetaDucky
f62ddf9022 Fixed wrongly named invref:get_location() table members for nodes.
Makes the result compatible with the minetest.get_inventory(location) param.
2013-05-26 00:35:11 +02:00
Kahrl
96fe1de832 Add ObjectRef.hud_set_hotbar_itemcount and add TOCLIENT_HUD_SET_PARAM 2013-05-26 00:23:33 +02:00
PilzAdam
730d316efe Higher resolution menuheader 2013-05-25 20:12:51 +02:00
sapier
e464f19356 Fix itemstack:add item not working correct 2013-05-25 19:23:10 +02:00
sapier
ab43377577 Move scriptapi to separate folder (by sapier)
On the lua side, notably minetest.env:<function>(<args>) should now
be replaced by minetest.<function>(<args>).
The old way is and will stay supported for a long time.

Also:
Update and clean up lua_api.txt (by celeron55)
Move EnvRef to lua and remove add_rat and add_firefly (by kahrl)
Add separate src/util/CMakeLists.txt, other minor fixes (by kahrl)
2013-05-25 00:51:02 +02:00
PilzAdam
865f380c91 Predict param2 of facedir nodes and attachment of attached_node nodes 2013-05-24 02:10:03 +02:00
Jeija
3abbe7efd1 Make raillike nodes connect to any other raillike nodes if both are in the group connect_to_raillike 2013-05-22 15:08:24 +02:00
PilzAdam
7f6e9e9540 Fix disappearing of wielditem 2013-05-21 20:16:22 +02:00
Kahrl
4a9fe1a1d5 Log non-fatal mod name conflict to actionstream instead of errorstream 2013-05-21 14:56:43 +02:00
PilzAdam
e57dc4ef18 Dont animate changing wielditem from hand to hand 2013-05-20 20:31:38 +02:00
PilzAdam
c67f72890c Add menu_header.png and remove old, unused textures 2013-05-20 17:04:00 +02:00
MetaDucky
5e80df46b8 Fix typo in particle spawning 2013-05-20 16:24:07 +02:00
elagin
c135e9c7d4 Save settings after dropping main menu 2013-05-20 16:03:48 +02:00
Russ
1ba1fb42a4 Fix link in minetest.conf.example 2013-05-20 15:51:21 +02:00
ShadowNinja
127c488355 Use the group "soil" for nodes that saplings grow on 2013-05-20 13:43:13 +02:00
kwolekr
981c6c9bf2 Fix lava damage on player's upper body 2013-05-19 21:29:49 -04:00
kwolekr
d00e8bd31a Fix nearly all warnings 2013-05-19 21:26:56 -04:00
sapier
55a97f4605 Allow nil as puncher e.g. to do damage by tnt 2013-05-20 01:18:45 +02:00
PilzAdam
3e2efdf18a Add a little animation when changing the wielded item 2013-05-20 01:09:41 +02:00
PilzAdam
bc66f46323 Dont teleport back if holding sneak when detaching/turn freemove off 2013-05-19 20:56:58 +02:00
Kahrl
cc92e45b78 Fix EmergeThread names in log
Concatenate the thread id as string instead of adding it to the pointer
2013-05-19 19:58:01 +02:00
PilzAdam
b2253e5b42 Write mods that are not in world.mt into it at world startup 2013-05-19 19:52:29 +02:00
PilzAdam
dcd0b63f64 Dont load mods that have no entry in world.mt 2013-05-19 19:46:50 +02:00
PilzAdam
b2577b1f27 Install mods/mods_here.txt instead of mods/minetest/mods_here.txt 2013-05-19 18:47:58 +02:00
kwolekr
93474c4218 Remove no virtual dtor warnings, make MapgenParams contain actual NoiseParams 2013-05-19 12:22:20 -04:00
kwolekr
f577facf79 Fix regression of world loading caused by 81c863ac 2013-05-19 12:07:00 -04:00
PilzAdam
45fcc9de29 New modsystem
Mods are placed in $path_<user/share>/mods
They can be enabled per world in world.mt or the configure world window
2013-05-19 02:15:36 +02:00
Shen Zheyu
b24f7a4d13 Translated using Weblate (Chinese (China)) 2013-05-18 16:22:44 +02:00
PilzAdam
6074163bf3 Remove survival and build from CMakeLists.txt 2013-05-18 16:14:06 +02:00
PilzAdam
b76ec317c9 Remove common from CMakeLists.txt, README.txt, lua-api.txt and buildwin.sh 2013-05-18 16:13:32 +02:00
PilzAdam
714ecc5e27 Only create SoundManager in main menu if USE_SOUND is true 2013-05-18 13:01:47 +02:00
PilzAdam
9397b5de08 Fix memory leak in MeshUpdateThread 2013-05-18 01:52:18 +02:00
Aaron Suen
1369503aba Fix math for isBlockInSight. Fixes #718 (client-side). 2013-05-18 00:13:01 +02:00
PilzAdam
fedf644635 Move kahrl to core devs in credits tab 2013-05-17 23:15:10 +02:00
sfan5
f9b5771274 Fix Problem with uk Translation 2013-05-17 23:38:23 +03:00
we prefer instagib metl3
8512cd967d Translated using Weblate (French) 2013-05-17 19:20:30 +02:00
Diego Martínez
94eb370710 Translated using Weblate (Spanish) 2013-05-16 14:51:51 +02:00
PilzAdam
587e7b299b Dont drop fonts with ENABLE_FREETYPE=0 2013-05-16 02:20:10 +02:00
PilzAdam
d5ca3b721e Fix memory leak in run_tests() 2013-05-14 12:29:30 +02:00
Frederico Guimarães
27f5ff950e Translated using Weblate (Portuguese (Brazil)) 2013-05-13 20:26:52 +02:00
sfan5
4a95c37e14 Translated using Weblate (German) 2013-05-13 18:39:08 +02:00
PilzAdam
5d9ab86adf Update po files 2013-05-13 18:27:00 +02:00
Weblate
e0564d5de0 Merge remote-tracking branch 'origin/master' 2013-05-13 18:19:51 +02:00
Anton Tsyganenko
be96fa2fb8 Translated using Weblate (Russian) 2013-05-13 18:19:41 +02:00
Sindre Tellevik
726dcaacb6 Translated using Weblate (Norwegian Bokmål) 2013-05-13 18:19:40 +02:00
we prefer instagib metl3
70190624c6 Translated using Weblate (French) 2013-05-13 18:19:40 +02:00
sfan5
71e5a466a6 Translated using Weblate (Dutch) 2013-05-13 18:19:39 +02:00
Esteban I. Ruiz Moreno
822723c246 Add mouse_sensitivity option 2013-05-13 17:39:16 +02:00
Zeg9
bda62bd3bf Add progress bar to item visuals preloading 2013-05-13 17:08:51 +02:00
PilzAdam
efc9329033 Only use game filter in singleplayer tab; use menu_{background, overlay, header, footer}.png for other tabs 2013-05-13 17:06:08 +02:00
Kahrl
2c09e8a84c Fix double free in createExtrudedMesh, reported by ptitSeb 2013-05-12 06:28:33 +02:00
RealBadAngel
9575b0a2a8 Add code to play main_menu.ogg in main menu 2013-05-11 15:39:38 +02:00
Aaron Suen
6911a7d279 Clear custom player HUDs when emerging players. Fixes #711. 2013-05-10 19:25:50 -04:00
PilzAdam
5068cb40ce Fix memory leak: remove InventoryAction after sending and applying 2013-05-11 00:12:14 +02:00
PilzAdam
e5781b5e34 Fix memory leaks: delete font in main and GUIChatConsole 2013-05-10 22:35:17 +02:00
PilzAdam
782d06be46 Fix memory leak by dropping sky 2013-05-10 19:12:24 +02:00
Zeg9
81c863ac4d Add clouds to all loading screens and better progress handling 2013-05-10 15:04:21 +02:00
sapier
d859ad7ed7 Fix gettext memory leaks 2013-05-10 11:31:00 +02:00
sapier
ee1155fe6d Really fix itemdef memory leak 2013-05-09 17:08:23 +02:00
Kahrl
3b1c3ac678 Add --videomodes option to show available video modes 2013-05-09 16:30:04 +02:00
Kahrl
3332f606ed Drop IrrlichtDevice when running --speedtests 2013-05-09 16:18:26 +02:00
Kahrl
f00cee75c1 Fix world selection a bit (also fixes a main menu segfault) 2013-05-08 20:54:03 +02:00
Zeg9
0913287578 Add progress bar and clouds to loading screen 2013-05-08 20:26:43 +02:00
PilzAdam
7b41f54411 Update default controls in README and pause menu 2013-05-07 14:48:20 +02:00
Brent Hull
03ab6aa24c Fix shader license headers to be LGPL 2013-05-06 19:09:08 +02:00
Kahrl
9a559eb8cf Remove 'Meshbuffer ran out of indices' limitation 2013-05-06 19:06:18 +02:00
sapier
58f036ad1d fix static data not beeing stored correctly on deactivation 2013-05-06 19:05:44 +02:00
PilzAdam
098692ef26 Install menu textures of minetest_game 2013-05-04 12:37:02 +02:00
Perttu Ahola
a888b232fe Add header.png and footer.png support for games, and support texture packs via <gameid>_menu_<background/overlay/header/footer>.png 2013-05-04 10:05:12 +03:00
Sfan5
b88aa81da7 Fix favorite Server List on Windows 2013-05-04 07:31:22 +02:00
PilzAdam
8d5b400d09 Fix documentation for HUD commands in protocol 2013-05-04 01:04:09 +02:00
Kahrl
969d2b3eb1 Optional dependencies and properly handle mod name conflicts again 2013-05-03 23:58:22 +02:00
ShadowNinja
a031a15487 Don't predict placement of nodes if they would replace a non buildable_to node 2013-05-03 17:03:25 +02:00
Kahrl
777ac58f85 Predict wallmounted param2 during node placement prediction.
Also clean up the_game a bit: move node placement prediction to a
separate function.
2013-05-03 17:03:25 +02:00
Kahrl
be4cc306a5 Server: force block send of pointed_pos_under after predicted node place 2013-05-03 17:03:25 +02:00
PilzAdam
0deb68d81c Use DIR_DELIM instead of / in file paths 2013-05-02 23:08:59 +02:00
PilzAdam
b75505e6b2 Show game name instead of game ID of selected game 2013-05-02 20:05:07 +02:00
Perttu Ahola
ee8067f7cf Switch menu to game selected in world creation dialog 2013-05-02 20:59:52 +03:00
Perttu Ahola
2cf76f6f1b Pre-select current game in world creation dialog 2013-05-02 19:43:47 +03:00
Perttu Ahola
80874391b8 games/minimal: Add menu/background.png and menu/icon.png 2013-05-02 19:43:47 +03:00
Perttu Ahola
2708482f1b Filter worlds by selected game 2013-05-02 19:43:47 +03:00
Perttu Ahola
084be3599a Get menu background image from selected game 2013-05-02 19:43:47 +03:00
PilzAdam
b28734c82c Fix minetest.features 2013-05-01 16:00:58 +02:00
PilzAdam
d07000ed1d Move sfan5 to core devs 2013-05-01 15:47:14 +02:00
Weblate
647f1cbfe5 Merge remote-tracking branch 'origin/master' 2013-05-01 15:40:20 +02:00
Ilya Zhuravlev
2b0d1710a5 Rename "no" (Norwegian) to "nb" (Norwegian Bokmål) 2013-05-01 17:39:21 +04:00
Weblate
97cddd1b96 Merge remote-tracking branch 'origin/master' 2013-05-01 15:33:15 +02:00
?????? ????????
f1f2004cb9 Translated using Weblate (Ukrainian) 2013-05-01 15:33:01 +02:00
Frederico Guimarães
289c4a7776 Translated using Weblate (Portuguese (Brazil)) 2013-05-01 15:33:01 +02:00
Chynggyz Jumaliev
97790c7711 Translated using Weblate (Kirghiz) 2013-05-01 15:33:01 +02:00
Pilz Adam
149b51967d Translated using Weblate (German) 2013-05-01 15:33:00 +02:00
Ilya Zhuravlev
898a4e441f Add Norwegian language. 2013-05-01 17:32:29 +04:00
Sfan5
a4183994a4 Add a Way of checking for specific Feature with Lua Adds minetest.get_feature() and minetest.has_feature() 2013-05-01 15:06:01 +02:00
kwolekr
c824abd7b2 Fix itemdef drop on NULL texture 2013-04-28 21:07:09 -04:00
kwolekr
d7395cd2ab Actually fix shader3 alpha this time 2013-04-27 23:04:52 -04:00
kwolekr
8767c78169 Enhance caves for mgv7, add ravines 2013-04-27 22:40:52 -04:00
kwolekr
0fb9567f13 Minor hud.cpp cleanup 2013-04-25 20:56:12 -04:00
Esteban I. Ruiz Moreno
43a388ec53 Ability to change the crosshair using textures 2013-04-25 20:07:46 -04:00
kwolekr
d3f0ce6224 Generalize hud_builtin_enable into hud_set_flags 2013-04-25 19:37:36 -04:00
proller
d83602d98e Tune finite liquids, indev huge caves 2013-04-25 22:59:32 +04:00
Zeg9
c33b993397 Fix serverlist on -DRUN_IN_PLACE=0 (use path_user instead of path_share) 2013-04-25 19:49:28 +02:00
sapier
88ffb3f73b Move player collisionbox to player class 2013-04-25 18:53:50 +02:00
PilzAdam
386108f982 kahrl is back 2013-04-25 18:32:49 +02:00
kwolekr
ddd2b18321 Transform alpha channel as well in shader 2013-04-25 12:30:01 -04:00
Perttu Ahola
bc3072b35e Fix compatibility of RBA's NDT_GLASSLIKE_FRAMED 2013-04-25 11:51:28 +03:00
sapier
e9a4e98cb9 Improve getFree*ActiveObjectId to reduce common case cpu usage drasticaly 2013-04-24 21:59:09 -04:00
Chynggyz Jumaliev
53da8bd1c8 Translated using Weblate (Kirghiz) 2013-04-25 03:52:15 +02:00
RealBadAngel
625a4c2e66 Add new drawtype GLASSLIKE_FRAMED 2013-04-24 21:45:18 -04:00
Diego Martínez
e703c5b81f Added support to disable built-in HUD elements 2013-04-24 17:28:00 +03:00
Diego Martínez
33dd267fd9 Fixes possible crash when using hud_change with "align" or "offset" 2013-04-23 23:18:05 -04:00
RealBadAngel
a699bdb7a1 Fix to: addUpdateMeshTaskWithEdge
Check in all 6 directions instead of just 3.
2013-04-23 22:30:09 -04:00
kwolekr
770305e28d Add option to use texture alpha channel 2013-04-23 22:15:51 -04:00
Perttu Ahola
36747794ab Disable fall bobbing by default; enable using fall_bobbing_amount = 1.0 2013-04-23 23:19:36 +03:00
PilzAdam
c03c296dc7 Grow dirt_with_snow instead of dirt_with_grass if snow is above it 2013-04-23 19:02:41 +02:00
ShadowNinja
4a9b8aae5e Add minetest.get_player_ip() 2013-04-23 09:57:45 +03:00
ShadowNinja
3d4d0cb574 Add option to not prepend "Server -!- " to messages sent with minetest.chat_send_player() 2013-04-23 09:47:08 +03:00
Diego Martínez
9894167bbf Added offset support for HUD items 2013-04-23 09:34:11 +03:00
Diego Martínez
7c37b1891a Added support for alignment in HUD items 2013-04-23 09:34:10 +03:00
Weblate
418c2e7a44 Merge remote branch 'origin/master' 2013-04-22 22:37:16 +02:00
Anton Tsyganenko
4117ab473b Translated using Weblate (Russian) 2013-04-22 22:37:08 +02:00
Chynggyz Jumaliev
93d36e88f9 Translated using Weblate (Kirghiz) 2013-04-22 22:37:08 +02:00
Shen Zheyu
b11834605b Translated using Weblate (Chinese (China)) 2013-04-22 22:37:08 +02:00
eduardojsm
58ded5cd27 Translation to Portuguese of Brazil for Minetest 2013-04-22 17:12:57 -03:00
Daniel Ziolkowski
bc6f3e4e00 Translated using Weblate (Polish) 2013-04-22 17:42:53 +02:00
kwolekr
37e6d1356b mgv7: Implement getGroundLevelAtPoint(), fix layer of topnodes at chunk Y boundaries, remove growGrass() 2013-04-21 15:47:13 -04:00
kwolekr
daddd37706 Fix findSpawnPos() 2013-04-21 15:39:34 -04:00
kwolekr
14ba94ad6a Fix hud_change stat argument retrieval 2013-04-21 12:55:46 -04:00
kwolekr
03868ff8e1 Class-ify caves & move to cavegen.cpp, fix cave regression, add caves to Mapgen V7 2013-04-21 01:06:19 -04:00
kwolekr
527deb947c Add direction parameter to statbars in HUD API
Fix health bar overlap when a larger texture is used
2013-04-20 00:22:12 -04:00
kwolekr
c45c530f74 Fix Lua HUD documentation 2013-04-18 15:26:29 -04:00
Weblate
47f60aebcd Merge remote branch 'origin/master' 2013-04-18 20:04:15 +02:00
LS-Steeef
852f768a75 Add dutch translation 2013-04-18 20:02:54 +02:00
Weblate
9e6376bd95 Merge remote branch 'origin/master' 2013-04-18 20:00:16 +02:00
Ilya Pavlov
e385af7cc0 Translated using Weblate (Russian) 2013-04-18 19:59:58 +02:00
Francizca Rodriguez
220c4f1142 Translated using Weblate (Portuguese) 2013-04-18 19:59:58 +02:00
Chynggyz Jumaliev
0a376c1d50 Translated using Weblate (Kirghiz) 2013-04-18 19:59:57 +02:00
Pilz Adam
b83e9225b7 Translated using Weblate (German) 2013-04-18 19:59:57 +02:00
Me Moala
ca8c1b6134 Translated using Weblate (French) 2013-04-18 19:59:57 +02:00
Shen Zheyu
a71bfb4b60 Translated using Weblate (Chinese (China)) 2013-04-18 19:59:55 +02:00
LS-Steeef
e60eb32050 Add dutch translation 2013-04-18 19:57:12 +02:00
kwolekr
666aae3593 Split HUD code off to hud.cpp, make into a class, extensive Lua HUD modification 2013-04-18 02:19:31 -04:00
Jonathon Anderson
49f6e347f0 Lua HUD 2013-04-18 02:14:33 -04:00
darkrose
1f42479e0c Merge pull request #654 from ShadowNinja/remove_old_makefile
Remove old Makefile
2013-04-14 00:18:11 -07:00
ShadowNinja
9e0bb94460 Remove old Makefile(that is what git is for) 2013-04-14 03:06:24 -04:00
kwolekr
ce901f4c4c Fix double free, null texture drop 2013-04-12 17:20:05 -04:00
MirceaKitsune
7cd5eb4c77 Swing the camera down when the player lands on the ground, based on the velocity the surface is hit with. 2013-04-11 19:42:47 -04:00
proller
17cfb1850d Fix masterserver javascript: adjustable output id 2013-04-11 20:20:11 +04:00
RealBadAngel
e7f5cdf9d4 Bugfixes to get_craft_recipe and get_all_craft_recipes.
Improvements to get_all_craft_recipes (see api doc)
2013-04-10 22:33:59 -04:00
sapier
dda2071cc0 fix bug in scriptapi line_of_sight
fix warnings for pathfinder debug traces
2013-04-10 16:50:24 -04:00
sapier
6e4fdf37ba fix objects colliding with its own collision boxes 2013-04-09 23:16:13 +02:00
sapier
7d002b60ff fix emergemanager memory leaks 2013-04-09 02:34:11 -04:00
sapier
04c3b17c78 fix various memory leaks 2013-04-09 02:23:07 -04:00
sapier
58fd39de35 fix extruded items texture leak 2013-04-09 02:14:52 -04:00
RealBadAngel
9449026839 Use system wide LuaJIT if aviable. 2013-04-08 22:10:00 +02:00
sapier
e7247c1a66 fix memory leak on sound shutdown 2013-04-07 23:43:34 -04:00
sapier
0d26bb36af fix memory leak in loadMedia 2013-04-07 23:40:33 -04:00
sapier
10502b59bc addon extended resource accounting 2013-04-07 23:38:22 -04:00
sapier
abe74ea5ea fix inventory image texture leak 2013-04-07 22:54:00 -04:00
sapier
98182f6097 fix memory leaks introduced by invalid gettext usage 2013-04-07 22:50:53 -04:00
sapier
cd27c8ef5d replace Server smart pointer with conventional one to gain control over dtor call order 2013-04-07 22:42:36 -04:00
sapier
2bdff11d54 fix memory leak on shader shutdown 2013-04-07 22:30:29 -04:00
sapier
7a32698312 fix memory leak in itemdef
cleanup useless code
2013-04-07 22:20:01 -04:00
sapier
5743ef4e64 fix huge texture leak in tiledef
fix minor glitches too
2013-04-07 22:17:58 -04:00
sapier
3b684d306c fix 3d model mesh leak 2013-04-07 21:51:35 -04:00
sapier
e1146396bc fix mesh leak in camera class 2013-04-07 21:49:55 -04:00
kwolekr
7c0e707cf1 Add param2 field for ores, some minor fixes and misc. code cleanup 2013-04-07 21:21:54 -04:00
Weblate
feb7de91ec Merge remote branch 'origin/master' 2013-04-07 13:39:28 +02:00
Ilya Zhuravlev
4468ea84e6 Add Ukrainian language. 2013-04-07 15:36:46 +04:00
kwolekr
96e2931c5c Fix black tree leaves, reduce above-ground cave shadows 2013-04-07 02:26:46 -04:00
kwolekr
5961106f9f Fix crash on creating map with invalid mg_name 2013-04-07 01:50:20 -04:00
kwolekr
fbf76184f0 Revert "Fix to be able to build from dir different than source dir"
This commit broke RUN_IN_PLACE
2013-04-07 01:30:06 -04:00
kwolekr
8ec3fc35c6 Add Mapgen V7, reorganize biomes 2013-04-07 00:50:21 -04:00
proller
d50b2ede92 Adjusting water removing above unloaded blocks 2013-04-07 00:05:39 +04:00
kwolekr
453d79e3a2 Don't re-write entire map_meta.txt if a setting is missing 2013-04-06 13:36:51 -04:00
Diego Martínez
046534e14b Fix to be able to build from dir different than source dir 2013-04-06 12:31:12 -04:00
proller
120f02e20b Don't flow finite liquid into an unloaded chunk 2013-04-06 12:09:59 -04:00
sapier
becd8c03fd fix memory leak 2013-04-06 12:00:36 -04:00
sapier
69367aa799 Add Dijkstra A* and A* without prefetching pathfind algorithms 2013-04-06 11:24:03 -04:00
PilzAdam
97f0bb0342 Only enqueue falling nodes if they really want to fall 2013-04-05 22:33:11 +02:00
khonkhortisan
1586cdac53 unkn own block -> unkn own node 2013-04-05 15:57:39 +02:00
ShadowNinja
1bae82e6c4 Add private messaging with /msg 2013-04-05 15:25:59 +02:00
Diego Martínez
2fb0e547a0 Use the nodebox as selection box if it's not set manually 2013-04-05 15:14:37 +02:00
Diego Martínez
1a5dcfd0c8 Install "build" and "survival" games with "make install" 2013-04-05 15:03:05 +02:00
MirceaKitsune
e38d65f8d1 Dont allow fast move in water or ladder when aux1_descend is true 2013-04-05 14:58:35 +02:00
Shen Zheyu
33052abf42 Translated using Weblate (Chinese (China)) 2013-04-05 04:43:06 +02:00
PilzAdam
b0e6806077 Fix nick completion 2013-04-05 02:31:58 +02:00
PilzAdam
76b86c0368 Add a delay to nodeupdate() 2013-04-05 02:24:39 +02:00
MirceaKitsune
c5a8448c41 Allow modifying movement speed, jump height and gravity per-player via the Lua API. 2013-04-05 02:00:59 +02:00
ShadowNinja
2a0badf2d5 Check if the address field is empty when hitting enter on the multiplayer tab 2013-04-03 23:33:17 +02:00
Esteban I. Ruiz Moreno
6b8435cf8c Limit speed in collisionMoveResult for avoiding hangs 2013-04-03 23:29:51 +02:00
Zeg9
c1bf6f9f7a Fix camera "jumping" when attached and the parent goes too fast 2013-04-03 23:22:40 +02:00
PilzAdam
f85c1165c2 Update doc/lua-api.txt 2013-04-03 22:41:18 +02:00
kwolekr
37acadc2af Bump version to 0.4.6 2013-04-03 16:36:25 -04:00
Weblate
82709549ff Merge remote branch 'origin/master' 2013-04-03 20:32:13 +02:00
Diego Martínez
6e96bc98de Translated using Weblate (Spanish) 2013-04-03 20:32:01 +02:00
Dêivan Ortiz Munhoz
60aaf65b10 Translated using Weblate (Polish) 2013-04-03 20:32:01 +02:00
Chynggyz Jumaliev
7d83fefd7f Translated using Weblate (Kirghiz) 2013-04-03 20:32:01 +02:00
Sfan5
2bb559be82 Translated using Weblate (German) 2013-04-03 20:32:01 +02:00
we prefer instagib metl3
d27f57e48f Translated using Weblate (French) 2013-04-03 20:32:01 +02:00
Pilz Adam
e59d971e7b Translated using Weblate (Estonian) 2013-04-03 17:02:27 +02:00
Ragnar Laud
025f4d28c1 Translated using Weblate (Estonian) 2013-04-03 17:01:52 +02:00
Dêivan Ortiz Munhoz
0ed34e6780 Translated using Weblate (Portuguese) 2013-04-03 16:35:58 +02:00
PilzAdam
9ff8012655 Return an ItemStack in minetest.item_place() if nodes' on rightclick doesnt return it 2013-04-02 15:19:02 +02:00
Esteban I. RM
7d036e3ab2 Translated using Weblate (Spanish) 2013-04-02 01:59:59 +02:00
Markus Lehmann
8f57246620 Translated using Weblate (German) 2013-04-01 18:56:17 +02:00
Diego Martínez
2985dc4fc8 Translated using Weblate (Spanish) 2013-04-01 18:46:24 +02:00
Maciej Kasatkin
dd0b8c3de5 Translated using Weblate (Polish) 2013-04-01 18:41:40 +02:00
we prefer instagib metl3
7dd07cc7c5 Translated using Weblate (French) 2013-04-01 14:08:31 +02:00
kwolekr
8d4b768297 Add Ore generation flags, implement ore absolute height 2013-03-31 20:02:03 -04:00
kwolekr
35ed5198fe Increase value range of Ore::clust_scarcity 2013-03-31 12:26:25 -04:00
Diego Martínez
624461c6c6 Translated using Weblate (Spanish) 2013-03-31 16:25:50 +02:00
Weblate
319662c0ed Merge remote branch 'origin/master' 2013-03-31 12:27:05 +02:00
Fabio Luongo
5b597a6bfa Translated using Weblate (Italian) 2013-03-31 12:27:00 +02:00
Pilz Adam
68fb68a83b Translated using Weblate (German) 2013-03-31 12:27:00 +02:00
Ilya Zhuravlev
a2e5706661 Add Kyrgyz language 2013-03-31 14:24:52 +04:00
ShadowNinja
7d3b3890b5 Add a small optimization to the menu splash and remove a old comment 2013-03-30 22:02:46 -04:00
khonkhortisan
96387ee88a Don't load menu textures every frame 2013-03-30 21:52:13 -04:00
0gb.us
23590a8383 Don't grant priveleges to non-existent players.
When accidentally misspelling a name, privileges are sometimes granted to non-existent players, leaving them with the extra privileges, but without the default privileges, if they ever join the server. This corrects that by disallowing /grant from working with invalid players. For completeness, it does the same for /revoke.
2013-03-30 21:50:07 -04:00
Zeg9
923a97b108 Install locales in minetest directory, so they are correctly loaded 2013-03-30 21:48:12 -04:00
kwolekr
c517215bcf Fix MapgenV6::generateCaves possible division by 0 and misc. cosmetic fixes 2013-03-30 21:24:37 -04:00
kwolekr
414f0275cf Optimize CNodeDefManager::getIds 2013-03-30 19:14:42 -04:00
Pilz Adam
04414a963c Translated using Weblate (German) 2013-03-30 20:01:56 +01:00
PilzAdam
02d8df94a8 Update po files 2013-03-30 19:57:27 +01:00
Weblate
a0566270d9 Merge remote branch 'origin/master' 2013-03-30 19:49:52 +01:00
Lord James
0d83bdc3aa Translated using Weblate (Spanish) 2013-03-30 19:49:43 +01:00
Anton Tsyganenko
062a140b9c Translated using Weblate (Russian) 2013-03-30 19:49:43 +01:00
Mitori Itoshiki
3e9ed6c1c7 Translated using Weblate (Japanese) 2013-03-30 19:49:43 +01:00
Fabio Luongo
3983019fd8 Translated using Weblate (Italian) 2013-03-30 19:49:42 +01:00
Ragnar Laud
3ec3aca78d Translated using Weblate (Estonian) 2013-03-30 19:49:42 +01:00
PilzAdam
1aa50b1362 Make the textbox for serverlist title wider 2013-03-30 18:56:29 +01:00
PilzAdam
e17ae475cf GUI: Make singleplayer default tab, store selected serverlist, show title of serverlist 2013-03-30 18:34:36 +01:00
kwolekr
6cf581e360 Fix build on Linux with some glibcs 2013-03-29 21:12:14 -04:00
proller
177ca4f4d5 Fix backward compatibility for server uptime in master server web page 2013-03-30 02:36:06 +04:00
proller
16c11eb4a3 Masterserver: report gameid, uptime, cosmetic fixes on server web page 2013-03-30 02:03:24 +04:00
kwolekr
df49b93877 Add varying levels of precision to TimeTaker 2013-03-29 16:53:15 -04:00
PilzAdam
5e7e0347cd Add different place sound for nodes 2013-03-29 20:14:18 +01:00
PilzAdam
7d9329ecfe New damage system, add damageGroups to ToolCapabilities, bump protocol version 2013-03-29 20:14:09 +01:00
kwolekr
3640c8c051 Update Credits tab 2013-03-29 14:43:47 -04:00
0gb.us
02cbb58107 Fix node replacement in not-quite-loaded chunks
When first entering an area, sometimes placing nodes replaces other nodes that are not buildable_to. This seems to be caused by the fact that nodes in unloaded map blocks are treated as ignore, a node that is buildable_to. This fixes that, by using get_node_or_nil() instead of the previously-used get_node(), then checking to see if the nodes were actually loaded before replacing.
2013-03-29 14:18:51 -04:00
kwolekr
5b854f95d2 Fix last singlenode modification 2013-03-29 13:18:09 -04:00
kwolekr
b0f39da131 Don't replace existing nodes in singlenode mapgen 2013-03-29 11:15:49 -04:00
4aiman Konsorumaniakku
dc54af7a89 Translated using Weblate (Russian) 2013-03-28 13:15:36 +01:00
kwolekr
d01b74d00a Prevent infinite loop with invalid Inventory format 2013-03-27 23:27:31 -04:00
PilzAdam
a782a88913 Fix parameter list of obj:set_attach() and obj:set_bone_position() 2013-03-28 01:09:01 +01:00
sapier
8800896824 Closed add object <-> object collision handling 2013-03-28 00:09:24 +01:00
Perttu Ahola
880d9e53c3 README.txt: Add some build stuff 2013-03-26 18:40:32 +02:00
kwolekr
26cad481d0 Vary ore sheet y position by noise 2013-03-24 22:35:23 -04:00
kwolekr
8d13967aa3 Ensure ore can fit in OreSheet::generate() 2013-03-24 20:19:59 -04:00
PilzAdam
650d706d35 Use minetest.register_ore() in minimal 2013-03-24 21:20:41 +01:00
kwolekr
0e07a7157f Add more error checking to l_register_ore 2013-03-24 15:40:53 -04:00
Perttu Ahola
423d69bd40 Fix indentation of lua_api.txt 2013-03-24 21:39:15 +02:00
kwolekr
6767ed74f8 Update lua_api.txt 2013-03-24 15:20:37 -04:00
kwolekr
57cbb8bfd8 Add Ore infrastructure and l_register_ore() 2013-03-24 13:23:33 -04:00
proller
f70378f7f5 Mapgen indev: float islands, larger far biomes 2013-03-24 03:40:15 +04:00
Jeija
e1ff5b1361 Allow spawning particles from the server, from lua
Spawn single particles or make use of ParticleSpawner for many randomly spawned particles.
Accessible in Lua using minetest.spawn_particle and minetest.add_particlespawner.
Increase Protocol Version to 17.

Conflicts:
	src/clientserver.h
2013-03-23 23:16:29 +01:00
PilzAdam
ab57fdac44 Move rightclickable to the proper place 2013-03-23 23:15:30 +01:00
Jürgen Doser
dacc8cdb3a Include backface_culling flag in serialization format for TileDefs
This way flowing liquids actually show the backface when specified to
do so. Without this, TileDefs where by default initialized with
backface_culling = true and never set otherwise.

For backwards compatibility, an old client connected to a new server,
or a new client connected to an old server will behave like before
i.e., backface_culling is always true.
2013-03-23 23:10:47 +01:00
Mukul Sati
ca7043e52d Set of changes to build mineTest using Visual Studio 11.0. These affect
the following:
1. String concatenation in guiMainMenu.cpp - it is required for all
individual strings to be of the same type <unicode/non-unicode>; adding
explicit L qualifier before the other strings.
2. Correcting type of BlockMakeData to struct in place of class forward
declarations. This information is used for name decoration by Visual
Studio, leading to linker errors in case of mismatches.
3. Windows headers define max as a macro somewhere, leading to a compile
time error in profiler.h; using () around function to prevent macro match
from occurring.
2013-03-24 00:53:10 +04:00
RealBadAngel
6f8d40ef5d 6d facedir 2013-03-23 21:31:05 +01:00
proller
2318d19bb4 Merge pull request #563 from proller/guest
Random guest name and finite liquid checkbox
2013-03-23 08:21:30 -07:00
proller
f98d0433f9 Random guest name and finite liquid checkbox 2013-03-23 19:17:08 +04:00
Perttu Ahola
34b185e955 Add singlenode mapgen; generates solely the node 'mapgen_singlenode', defaults to air 2013-03-22 19:16:51 +02:00
Perttu Ahola
b6dcadeb79 CMakeLists.txt: Add games/common to be installed when available 2013-03-22 07:46:48 +02:00
Perttu Ahola
c2250d95c4 Support game-specific minetest.conf 2013-03-21 22:22:15 +02:00
Perttu Ahola
adc52f3f3c lua_api.txt: Document paths, games and common mod loading 2013-03-21 20:04:00 +02:00
Perttu Ahola
0a568a6037 Update buildwin32.sh to get minetest/common 2013-03-21 19:45:20 +02:00
Perttu Ahola
0747c285cd Update README.txt to instruct to get minetest/common too 2013-03-21 19:43:08 +02:00
Perttu Ahola
306d1ab866 Common mods support
Implement "common mods", includeable from
  {$user,$share}/games/common/$modname
by using the game.conf setting
  common_mods = $modname,$modname2,...
2013-03-21 18:56:42 +02:00
Splizard
9b5bb5c755 Allow falling nodes to pass through solid "buildable_to" nodes. 2013-03-19 16:38:56 +01:00
Juhani Numminen
450e7ef0c5 Git-ignore SQLite build files 2013-03-19 16:20:13 +01:00
kwolekr
8f0d29f931 Fix Map::initBlockMake to actually use chunksize setting 2013-03-18 22:19:02 -04:00
PilzAdam
d6026a5fee Prevent passing nil to unpack() in minetest.after 2013-03-19 00:15:41 +01:00
kwolekr
939397dd6e Add jungle grass to jungles 2013-03-17 23:08:11 -04:00
Ilya Zhuravlev
d207d359d1 Don't erase modified_blocks 2013-03-17 21:17:13 +04:00
ShadowNinja
5f88cd98ad Add FPS limit to menu clouds 2013-03-17 12:13:48 -04:00
RealBadAngel
7f51b2da28 lua methods set_look_pitch and set_look_yaw 2013-03-17 11:39:35 -04:00
PilzAdam
c00c8832c6 Fix new_style_water 2013-03-17 11:28:43 -04:00
PilzAdam
5a9fd8f433 Add missing settings to minetest.conf.example 2013-03-17 13:07:53 +01:00
Jeija
fc5d2074b9 Allow minetest.after to take a variable number of arguments 2013-03-17 00:23:30 -04:00
proller
10c03e1a9d build with ogles2 driver 2013-03-16 22:37:50 -04:00
kwolekr
67228160ae Some minor cleanups from the last commit 2013-03-16 22:34:12 -04:00
proller
165498cecf initial mapgen indev version with farscale feature and huge caves 2013-03-16 21:48:32 -04:00
kwolekr
e3badd7062 Make saplings only grow on dirt or grass, make jungle tree trunks only replace air 2013-03-16 19:55:29 -04:00
kwolekr
6823ce99a7 Re-add jungles, apple trees 2013-03-16 17:06:11 -04:00
kwolekr
1f1ad9fd23 Optimize Mapgen::updateLighting(), add setLighting() 2013-03-15 23:04:50 -04:00
proller
f5ab056b38 Liquid fine tuning 2013-03-14 17:06:25 -04:00
kwolekr
16c031be77 Remove 'tape and glue', update Credits tab 2013-03-14 16:46:42 -04:00
ShadowNinja
350596b94f Add cloud menu background by Krisi, configurable with the menu_clouds option.
Also add a menuheader, menusplash, menufooter_clouds, and allow HD menu footers.
And finally don't git-ignore textures/base/.
2013-03-13 21:18:40 -04:00
sapier
66750dc88e fix typo invalid for loop end 2013-03-13 19:42:05 -04:00
kwolekr
d10223254a Clean up Mapgen 2013-03-11 21:32:52 -04:00
sapier
eb90c3d92d Move l_get_all_craft_recipes to scriptapi_craft 2013-03-11 19:27:13 -04:00
Ilya Zhuravlev
6a1670dbc3 Migrate to STL containers/algorithms. 2013-03-11 19:08:39 -04:00
Ilya Zhuravlev
e204bedf1d Update menulogo.png 2013-03-10 23:57:30 +04:00
kwolekr
650e932ddf Re-add dungeons in new dungeongen.cpp 2013-03-10 00:42:51 -05:00
Mitori Itoshiki
b7def0fcf4 Translated using Weblate (Russian) 2013-03-09 14:18:29 +01:00
Shen Zheyu
e6bf6950eb Translated using Weblate (Chinese (China)) 2013-03-09 09:41:51 +01:00
4aiman Konsorumaniakku
17bbf4d3f6 Translated using Weblate (Russian) 2013-03-07 22:55:23 +01:00
c h
57f5dc5dcf Translated using Weblate (Japanese) 2013-03-07 22:36:47 +01:00
PilzAdam
aa77ee66c5 Change libjson to libjsoncpp in .gitignore 2013-03-06 17:09:28 -05:00
kwolekr
b9512cab1b Fix Irrlicht includes in scriptapi_* 2013-03-06 17:04:44 -05:00
proller
dd8593f2d6 fix link if system json lib exists 2013-03-05 23:54:07 -05:00
RealBadAngel
5af8acfa6e Added method to get all registered recipes for item(node) 2013-03-05 23:32:33 -05:00
kwolekr
ba78194636 Allow any character in formspec strings with escape char 2013-03-05 23:25:02 -05:00
sapier
bdbdeab005 split scriptapi.cpp
Remerge some files in order to reduce number of additional files

Make necessary changes for split, rename files, reorganize some bits
2013-03-05 00:59:49 -05:00
kwolekr
038529c763 Bump version to 0.4.5 2013-03-04 17:01:36 -05:00
PilzAdam
55097e1985 Fix pickup of dropped items when the player only takes a part of them 2013-03-03 16:35:29 +01:00
kwolekr
c61a2ef44f Merge pull request #513 from sfan5/patch-2
Add python script to doc/protocol.txt
2013-03-02 22:34:56 -08:00
Ilya Zhuravlev
5917e86297 Add one more curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); 2013-03-03 00:02:00 +04:00
Weblate
75a8312f4e Merge remote branch 'origin/master' 2013-03-01 17:13:22 +01:00
Mitori Itoshiki
48b999a8dd Translated using Weblate (Japanese) 2013-03-01 17:13:14 +01:00
Ilya Zhuravlev
3823878305 Add Estonian language template 2013-03-01 20:12:19 +04:00
Ilya Zhuravlev
fceb465fc9 Fix "longjmp causes uninitialized stack frame" (serverlist.cpp) 2013-03-01 17:02:54 +04:00
sfan5
72abd5a88e Add python script to doc/protocol.txt 2013-02-28 20:15:34 +01:00
Weblate
066b0314b1 Merge remote branch 'origin/master' 2013-02-28 18:04:07 +01:00
Weblate
22e186b4aa Merge remote branch 'origin/master' 2013-02-28 18:03:28 +01:00
Mitori Itoshiki
372acf7b8e Translated using Weblate (Russian) 2013-02-28 18:02:51 +01:00
Francizca Rodriguez
5b16271bd6 Translated using Weblate (Portuguese) 2013-02-28 18:02:51 +01:00
Tomona Nanase
8de315738b Translated using Weblate (Japanese) 2013-02-28 18:02:51 +01:00
Sfan5
13504b6adc Translated using Weblate (German) 2013-02-28 18:02:50 +01:00
we prefer instagib metl3
f43b90da38 Translated using Weblate (French) 2013-02-28 18:02:50 +01:00
Rune Biskopstö Christensen
1f11cd09d5 Translated using Weblate (Danish) 2013-02-28 18:02:50 +01:00
Shen Zheyu
82e9faf2a9 Translated using Weblate (Chinese (China)) 2013-02-28 18:02:50 +01:00
kwolekr
7caa28a6aa Change default settings for log level, texture atlas, document new settings 2013-02-27 19:59:05 -05:00
PilzAdam
0183bdad04 Fix nodeplacement prediction 2013-02-27 20:23:32 +01:00
kwolekr
d31f07bd4b Fix most warnings, re-fix MSVC compile error 2013-02-26 01:57:59 -05:00
kwolekr
979ca23f1e Merge pull request #482 from proller/liquid
finite liquid
2013-02-25 20:52:24 -08:00
kwolekr
9b5f182642 Remove dead code, relocate some code 2013-02-25 23:11:12 -05:00
kwolekr
f00d136ab1 Fix selection of # threads, set default to 1 thread 2013-02-25 23:11:00 -05:00
kwolekr
28c50c16cd Fix build on Windows 2013-02-25 23:10:54 -05:00
kwolekr
5bd50a2d90 Fix most walled-off caves 2013-02-25 23:08:55 -05:00
kwolekr
60e6284f30 Tune queue limits, some other adjustments 2013-02-25 23:08:41 -05:00
kwolekr
67c59645ec Misc. cleanup and minor fixes 2013-02-25 23:08:33 -05:00
kwolekr
5ec5b1cbd6 Add multi-Emerge thread support 2013-02-25 23:08:26 -05:00
kwolekr
76217939e0 Add emerge queue limit configuration 2013-02-25 22:59:17 -05:00
kwolekr
206ec36c8e Fix EmergeThread hang on exit 2013-02-25 22:58:24 -05:00
kwolekr
3b7a445cd7 Add global and per-peer queue limits 2013-02-25 22:58:11 -05:00
kwolekr
b9d8e59bbf Add emerge.cpp, initial EmergeThread changes
- Neatly placed all emerge related code into a new file, emerge.cpp
- Greatly cleaned up the code in EmergeThread::Thread()
- Reworked Emerge queue.  Now an actual std::queue of v3s16 block positions
- Removed the completely unnecessary map of peer ids requesting blocks
2013-02-25 22:56:18 -05:00
Sfan5
6d0ea26c2d Update Copyright Years 2013-02-24 20:15:24 +01:00
PilzAdam
92c7bd02fb Update buildbot 2013-02-24 18:52:44 +01:00
PilzAdam
497ff1ecd6 Change Minetest-c55 to Minetest 2013-02-24 18:49:03 +01:00
PilzAdam
22b0039ad4 Update README 2013-02-24 18:48:51 +01:00
proller
b90e431fc7 new adjustable finite liquid 2013-02-24 18:39:07 +04:00
kwolekr
9bd76f2972 Merge pull request #505 from RealBadAngel/master
Add seed parameter for default and L-system trees
2013-02-23 18:06:07 -08:00
RealBadAngel
f0d70d4e86 Add seed parameter for default and L-system trees 2013-02-24 02:26:25 +01:00
kwolekr
6b9906687b Merge pull request #503 from RealBadAngel/master
Add sound volume controls to ingame menu
2013-02-23 15:58:00 -08:00
PilzAdam
bc2e9dbaf2 Read server_announce from minetest.conf for GUI 2013-02-23 22:48:02 +01:00
RealBadAngel
4d73d99ebc Add sound volume controls to ingame menu 2013-02-23 16:01:35 +01:00
yuqian wang
a3ad84feef Translated using Weblate (Chinese (China)) 2013-02-23 03:33:10 +01:00
kwolekr
f9a8efb992 Merge pull request #431 from sapier/dtime_clamping
add limit for (collision handling) steps to avoid runaway memory consumption
2013-02-22 16:42:50 -08:00
Maciej Kasatkin
42eb8c8e3b Translated using Weblate (Polish) 2013-02-22 16:59:19 +01:00
kwolekr
7f240aea1e Added debug log level setting 2013-02-21 22:35:04 -05:00
Ilya Zhuravlev
c19fc00b04 Fix json include 2013-02-22 02:41:59 +04:00
proller
ee07c3f7cf new auto masterserver 2013-02-22 02:04:53 +04:00
Pilz Adam
724b0a0162 Translated using Weblate (German) 2013-02-21 17:34:52 +01:00
PilzAdam
ef6b8bee07 Drop nodes as items when dugged and no room in inventory and dont remove dropped items when no room in inventory 2013-02-21 16:58:50 +01:00
celeron55
b29834ab02 Merge pull request #500 from doserj/server_report_missing_deps
Print missing mod dependencies on server start
2013-02-20 11:34:57 -08:00
Jürgen Doser
89b88917a8 Print missing mod dependencies on server start
i.e., not only the mod with missing dependencies, but also the missing
dependencies itself. (This already used to be the case before the mod
selection gui was added)

Also, mods with unsatisfied dependencies are no longer reported as
mods that could not be found.
2013-02-20 20:06:39 +01:00
Mitori Itoshiki
93fc957036 Translated using Weblate (Japanese) 2013-02-20 05:57:45 +01:00
Tomona Nanase
164318bd97 Translated using Weblate (Japanese) 2013-02-19 21:31:41 +01:00
PilzAdam
fc61c8809b Dont drop tools on rightclick 2013-02-19 20:16:55 +01:00
Jeija
365c169b43 Disable placement prediction for nodes that use on_rightclick 2013-02-19 20:02:40 +01:00
Ilya Zhuravlev
214a8b4597 Set numeric locale for Lua 2013-02-18 13:58:55 +04:00
Artem Sinkevich
d2ff536a3b Translated using Weblate (Russian) 2013-02-17 11:28:35 +01:00
kwolekr
8d920dd09b Merge pull request #465 from doserj/mod_selection_empty_modname_fix
Remove use of operator[] on a std::map, so no spurious elements get inse...
2013-02-15 17:45:32 -08:00
Perttu Ahola
c88d89d26e Some kind of middleway values for player acceleration for now 2013-02-15 23:18:19 +02:00
Perttu Ahola
4035bf3259 Restore old acceleration behavior until something is actually agreed on (part 2) 2013-02-15 22:47:23 +02:00
Perttu Ahola
65cb318cd9 Restore old acceleration behavior until something is actually agreed on 2013-02-15 22:25:23 +02:00
Ilya Zhuravlev
30b9a4d6b4 Add Freetype support 2013-02-14 18:46:08 +01:00
MirceaKitsune
df3c925b3c Improved Player Physics 2013-02-14 06:21:30 +10:00
PilzAdam
86b906d015 Fix minetest.item_place_node() and minetest.item_drop() to always return an ItemStack 2013-02-13 18:06:25 +01:00
RealBadAngel
b1019a88ba Fix to on_rightclick not able to change wielded_item 2013-02-13 02:06:36 +04:00
Dmitry Marakasov
8e69b9cb26 Server requires gettext library as well 2013-02-12 20:27:50 +01:00
PilzAdam
9f1ae4084d Enable multiline signs 2013-02-12 19:37:25 +01:00
PilzAdam
2c362badd4 Dont remove grass under unloaded blocks 2013-02-10 12:52:59 +01:00
Jürgen Doser
6b1420a58a Disable backface culling for drawtype plantlike and only draw 2 faces instead of 4
This way, plants actually show the real backface on their back side,
i.e., the front face mirrored around the vertical axis, instead of
showing the front face on both sides. This looked weird when the
texture was not symmetrical around the vertical axis.
2013-02-10 12:45:25 +01:00
ShadowNinja
1cda39d5bb Don't fall off nodes if sneaking with free_move on but without fly privileges 2013-02-10 12:35:04 +01:00
ShadowNinja
32552fede5 Don't see through nodes without noclip privileges 2013-02-10 12:29:46 +01:00
Oleg Matveev
6c3829c2b5 Translated using Weblate (Russian) 2013-02-10 10:22:43 +01:00
Pilz Adam
ea044adf1a Translated using Weblate (Portuguese) 2013-02-10 10:22:43 +01:00
Pilz Adam
47f38d2316 Translated using Weblate (Italian) 2013-02-10 10:22:42 +01:00
pandoro almascarpone
f944ff233d Translated using Weblate (Italian) 2013-02-09 22:18:20 +01:00
Weblate
a27857e938 Merge remote branch 'origin/master' 2013-02-08 16:29:19 +01:00
Pilz Adam
0cda2d5193 Translated using Weblate (Russian) 2013-02-08 16:29:13 +01:00
Francizca Rodriguez
65fa26e93e Translated using Weblate (Portuguese) 2013-02-08 16:29:13 +01:00
Mitori Itoshiki
5d4f2f1528 Translated using Weblate (Japanese) 2013-02-08 16:29:13 +01:00
Pilz Adam
f8d0b7d651 Translated using Weblate (Danish) 2013-02-08 16:29:13 +01:00
Shen Zheyu
7895376821 Translated using Weblate (Chinese (China)) 2013-02-08 16:29:12 +01:00
Francizca Rodriguez
aca501df8c Translated using Weblate (Spanish) 2013-02-07 22:14:11 +01:00
Francizca Rodriguez
06ec9e2e1a Translated using Weblate (Portuguese) 2013-02-07 22:12:26 +01:00
Pilz Adam
f9e28285ac Translated using Weblate (Portuguese) 2013-02-07 21:34:19 +01:00
Francizca Rodriguez
90a8aa1444 Translated using Weblate (Portuguese) 2013-02-07 21:34:14 +01:00
Pilz Adam
9a39548367 Translated using Weblate (Portuguese) 2013-02-07 21:34:06 +01:00
Francizca Rodriguez
db5df028b3 Translated using Weblate (Portuguese) 2013-02-07 21:34:02 +01:00
Pilz Adam
7a8094a9c0 Translated using Weblate (Portuguese) 2013-02-07 21:33:56 +01:00
Francizca Rodriguez
10b12cc86e Translated using Weblate (Portuguese) 2013-02-07 21:33:48 +01:00
Ilya Zhuravlev
9b2044351f Document remote_media setting 2013-02-07 17:58:52 +04:00
Ilya Zhuravlev
86b33c4922 Fix compile error (MSVC2010). 2013-02-07 16:17:55 +04:00
kwolekr
97260d09a8 Add flag string settings, flat map option 2013-02-06 16:52:48 -05:00
L JJ
c4e1a01349 Translated using Weblate (Chinese (China)) 2013-02-06 14:49:00 +01:00
kwolekr
f148ae58c3 Fix assertion condition in initializePaths() 2013-02-06 01:13:19 -05:00
kwolekr
bd55b9cc0f Don't write control character to verbosestream 2013-02-06 01:12:56 -05:00
kwolekr
77dbad72f7 Fix and improve noise map functions 2013-02-06 01:12:36 -05:00
kwolekr
75fe948bf7 Add Perlin noise map Lua API 2013-02-06 01:11:56 -05:00
kwolekr
a73905401a Improve random map seed generation 2013-02-06 01:10:37 -05:00
Mitori Itoshiki
8e5b33d359 Translated using Weblate (Russian) 2013-02-05 20:37:51 +01:00
we prefer instagib metl3
4ba6387980 Translated using Weblate (French) 2013-02-05 18:25:54 +01:00
Weblate
b19726db6c Merge remote branch 'origin/master' 2013-02-05 17:52:07 +01:00
Marco gonzalez
c48c6d188c Translated using Weblate (Spanish) 2013-02-05 17:52:02 +01:00
Ilya Zhuravlev
f6e0e1f5d7 Translated using Weblate (Russian) 2013-02-05 17:52:02 +01:00
Pilz Adam
20031a1008 Translated using Weblate (German) 2013-02-05 17:52:02 +01:00
L JJ
a933cb31d4 Translated using Weblate (Chinese (China)) 2013-02-05 17:52:02 +01:00
Ilya Zhuravlev
2868676693 Add Japanese & Korean languages. 2013-02-05 20:50:26 +04:00
Shen Zheyu
366724f6bf Translated using Weblate (Chinese (China)) 2013-02-05 14:35:38 +01:00
Lord James
c59a9720fd Translated using Weblate (Spanish) 2013-02-04 12:34:44 +01:00
Pilz Adam
2dde1d70ec Translated using Weblate (German) 2013-02-02 18:39:22 +01:00
Weblate
1d248cce30 Merge remote branch 'origin/master' 2013-02-02 21:34:12 +04:00
Lord James
c33654c21a Translated using Weblate (Spanish) 2013-02-02 18:28:40 +01:00
Pavel Elagin
5721ff3837 Translated using Weblate (Russian) 2013-02-02 18:28:39 +01:00
Maciej Kasatkin
e215c9a84f Translated using Weblate (Polish) 2013-02-02 18:28:39 +01:00
Robert Arkenin
e5cdf486aa Translated using Weblate (Italian) 2013-02-02 18:28:39 +01:00
Pilz Adam
820d8a920b Translated using Weblate (German) 2013-02-02 18:28:39 +01:00
sub reptice
0f6af98d09 Translated using Weblate (French) 2013-02-02 18:28:38 +01:00
Ilya Zhuravlev
6424c5b698 Add Chinese Simplified & Portuguese. 2013-02-02 21:27:01 +04:00
Marco gonzalez
eed6e04ed1 Translated using Weblate (Spanish) 2013-02-01 21:52:34 +01:00
Jürgen Doser
9ebf1fd3b7 Remove use of operator[] on a std::map, so no spurious elements get inserted. (fixes #464)
All uses of operator[] in guiConfigureWorld.cpp have been replaced
with .find() operations.

In some places, operator[] had been called with mod names of "Add-Ons"
or "N/A", which would insert a default-constructed ModSpec into the
list of add-on mods. In other places, the use of operator[] was safe
now, but it probably is safer for future changes to use .find()
everywhere.
2013-02-01 15:50:33 +01:00
Diego Martínez
fb12a82d65 Translated using Weblate (Spanish) 2013-01-31 12:25:39 +01:00
Marco gonzalez
c8cdc80fd6 Translated using Weblate (Spanish) 2013-01-31 06:58:08 +01:00
PilzAdam
33cb3d713c Translate key functions in key change menu 2013-01-30 20:27:26 +01:00
Maciej Kasatkin
0addefad05 Translated using Weblate (Polish) 2013-01-30 01:12:14 +01:00
Robert Arkenin
3bb89bb155 Translated using Weblate (Russian) 2013-01-29 23:10:18 +01:00
Pavel Elagin
9d6caa4e5f Translated using Weblate (Russian) 2013-01-29 22:14:40 +01:00
kwolekr
12472a44d4 Merge pull request #442 from kwolekr/mingw_compile_fix
Fix compile under MingW
2013-01-29 13:07:47 -08:00
kwolekr
cbbb6447bf Merge pull request #441 from kwolekr/mapgen_factories
Make mapgen factory setup more elegant, add mapgen_v6.h
2013-01-29 13:05:56 -08:00
Marco gonzalez
154a8bb466 Translated using Weblate (Spanish) 2013-01-29 22:04:41 +01:00
Diego Martínez
d1be82d97c Translated using Weblate (Spanish) 2013-01-29 21:47:49 +01:00
Ilya Zhuravlev
8e2a3c7279 Translated using Weblate (Russian) 2013-01-29 21:41:02 +01:00
Marco gonzalez
ebe2f704d1 Translated using Weblate (Spanish) 2013-01-29 21:38:19 +01:00
Pavel Elagin
63c27766ef Translated using Weblate (Russian) 2013-01-29 21:10:00 +01:00
Ilya Zhuravlev
6912f65cd7 Add Spanish, Russian, Polish and Romanian languages. 2013-01-29 21:21:00 +04:00
PilzAdam
28f5b55643 Dont call on_rightclick() if sneak is pressed 2013-01-27 21:58:46 +01:00
Jeija
c1fee78e85 Place block when holding sneak while right-clicking nodes with formspec 2013-01-28 00:44:42 +04:00
Ilya Zhuravlev
d6f0bf9eef Workaround failing Travis clang build. 2013-01-28 00:37:20 +04:00
kwolekr
bcc0ca93d4 Merge pull request #447 from sapier/add_lua_log_parameter_check
BUGFIX: check parameters for minetest.log lua function
2013-01-26 10:58:53 -08:00
sapier
eb2a8fe8b8 check parameters for minetest.log lua function 2013-01-26 10:32:08 +00:00
Weblate
13358c29b8 Merge remote branch 'origin/master' 2013-01-24 15:56:49 +01:00
Pilz Adam
aaee2786a7 Translated using Weblate (German) 2013-01-24 18:55:12 +04:00
kwolekr
9d69b38583 Slightly improved version of mystrtok_r 2013-01-23 17:37:53 -05:00
kwolekr
69ba485415 Fix compile under MingW 2013-01-23 16:28:15 -05:00
kwolekr
91e88196c7 Make mapgen factory setup more elegant, add mapgen_v6.h 2013-01-23 16:16:49 -05:00
sfan5
035933f806 Tweak buildbot
* CURL support
* only download packages if they don't exist
* fixed download links (libvorbis and libogg)
* manual downloading if automatic downloading fails (only minetest and minetest_game)
* mingwm10.dll and openal_stripped.zip are downloaded automatically
2013-01-23 20:42:46 +02:00
RealBadAngel
1163fdfa11 Treegen update. Some new symbols. Speed up code a bit. 2013-01-23 20:40:09 +02:00
celeron55
0a27e81704 Merge pull request #436 from doserj/mod_selection
Fix some crashes and improved behaviour for mod selection gui
2013-01-23 10:10:25 -08:00
Perttu Ahola
c4af909ac8 Update translation files 2013-01-23 18:27:17 +02:00
Jürgen Doser
f099861245 Make sure that settings are written to config file when settings are removed.
Previously, settings where only written when a value has changed, and
removal of a setting value didn't count as a change.
2013-01-22 19:05:46 +01:00
Jürgen Doser
f214940c96 Fix crash when pressing delete button in server browser and no server is selected.
A check for that was there, but was comparing an unsigned variable to
-1, which doesn't work.
2013-01-22 19:05:46 +01:00
Jürgen Doser
26a0efae23 Improve behaviour for empty modpacks and when no mods at all are installed:
Only show enable all / disable all buttons for all add-ons when at
least one add-on is installed. When no add-on ist installed, don't
show any buttons or checkboxes.

Added is_modpack flag to ModSpec to distinguish empty modpacks from
normal mods and check this flag in mod selection gui so that empty
modpacks are not treated like mods that can be enabled or disabled.
2013-01-22 19:05:28 +01:00
Jürgen Doser
e237c1d07d Fix crash when no world is selected and configure button is pressed.
by moving return statement out of if-then-else clause...
2013-01-22 17:47:12 +01:00
Ilya Zhuravlev
33be32f278 Disable travis email notifications. 2013-01-22 01:43:56 +04:00
Ilya Zhuravlev
297186b834 Add .travis.yml 2013-01-22 01:37:58 +04:00
Ilya Zhuravlev
5696ee8421 Fix msvc build 2013-01-22 01:16:29 +04:00
sapier
d8a0efa6af add support for saving settings by lua command (server doesn't autosave on exit) 2013-01-21 22:44:41 +02:00
Perttu Ahola
b52dfbe510 Add mapgen parameters to minetest.conf.example 2013-01-21 21:41:37 +02:00
kwolekr
b87cd8c58b Use a string identifier for a mapgen instead of version 2013-01-21 21:41:37 +02:00
kwolekr
318669327e Fix compile on certain Linux configurations, reduce spawn point height 2013-01-21 21:41:37 +02:00
kwolekr
278d93a3ee Removed Mapgen V7 for now 2013-01-21 21:41:37 +02:00
kwolekr
b55fb4f2f6 Last set of minor cleanups 2013-01-21 21:41:37 +02:00
kwolekr
1cd8351054 Fix MapgenV6::getGroundLevelAtPoint() 2013-01-21 21:41:37 +02:00
kwolekr
631a835e07 Finish and clean up mapgen configuration 2013-01-21 21:41:37 +02:00
kwolekr
45cf32afc5 Add Settings::getStruct and Settings::setStruct 2013-01-21 21:41:37 +02:00
kwolekr
cde3d38766 Clean up EmergeManager, do initial work on Mapgen configuration 2013-01-21 21:41:37 +02:00
kwolekr
d5029958b9 Readded and optimized mapgen V6 2013-01-21 21:41:37 +02:00
kwolekr
bddd5f2b98 Cleaned & enhanced noise object management 2013-01-21 21:41:37 +02:00
kwolekr
96898c1794 Add initial Lua biomedef support, fixed biome selection 2013-01-21 21:41:37 +02:00
kwolekr
11afcbff69 The new mapgen, noise functions, et al. 2013-01-21 21:41:33 +02:00
kwolekr
736b386554 Make WATER_LEVEL configurable, fix slight comparison bug in findSpawnPos() 2013-01-21 21:41:09 +02:00
kwolekr
a785522194 Only clear block modified flag if writing to db was successful 2013-01-21 21:41:09 +02:00
kwolekr
8e50e256e6 Make cloud height user-configurable 2013-01-21 21:41:09 +02:00
kwolekr
9b3287b865 stop MSVC++ from generating dumb warnings 2013-01-21 21:41:09 +02:00
kwolekr
14657bd29a Proper RUN_IN_PLACE support for OSX and FreeBSD 2013-01-21 21:41:09 +02:00
Jürgen Doser
6af8a34d91 Basic support for configuring which mods to load for each world
settings.h: added function to return all keys used in settings, and a
function to remove a setting

mods.{h,cpp}: added class ModConfiguration that represents a subset of the installed mods.

server.{h,cpp}: server does not load add-on mods that are disabled in
the world.mt file. mods are disabled by a setting of the form
"load_mod_<modname> = false". if no load_mod_<modname> = ... setting
is found, the mod is loaded anyways for backwards compatibilty. server
also complains to errorstream about mods with unstatisfied
dependencies and about mods that are not installed.

guiConfigureWorld.{h,cpp}: shows a treeview of installed add-on mods
and modpacks with little icons in front of their name indicating their
status: a checkmark for enabled mods, a cross for disabled mods, a
question mark for "new" mods

Mods can be enabled/disabled by a checkbox. Mods also show a list of
dependencies and reverse dependencies. double-click on a mod in
dependency or reverse dependency listbox selects the corresponding
mod. Enabling a mod also enables all its dependencies. Disabling a mod
also disables all its reverse dependencies.

For modpacks, show buttons to enable/disable all mods (recursively,
including their dependencies) in it.

Button "Save" saves the current settings to the world.mt file and
returns to the main menu. Button "Cancel" returns to main menu without
saving.

basic keyboard controls (if the proper widget has keyboard focus):

up/down: scroll through tree of mods
left/right: collaps/expand a modpack
space: enable/disable the selected mod
2013-01-21 17:31:50 +02:00
Jeija
6f93c01af9 Add a list of servers to the "Multiplayer" tab
If USE_CURL is set, it also downloads a list from a remote server.
The url of this list is configurable in minetest.conf using the setting "serverlist_url"
The local list of favorite servers is saved in client/serverlist/filename
filename is also configureable using the setting "serverlist_file"
2013-01-21 16:42:56 +02:00
sapier
12e9f3d010 add limit for steps to avoid runaway memory consumption by collision handling 2013-01-16 23:27:11 +00:00
PilzAdam
c691d619c2 Bugfix: else repeat_rightclick_timer = 0; 2013-01-14 21:38:40 +01:00
Jeija
61f5ca6b16 Add particles 2013-01-14 15:27:00 +01:00
PilzAdam
443bbe6a78 Fix spread of items in falling code 2013-01-12 20:55:45 +01:00
Jürgen Doser
183c81b5ec fix integer overflow (fixes #414)
liquid_kind was declared as an u8, but used to hold a content_t value, which is delcared to be a u16.

changing this fixes (at least for me) the problem reported in bug #414.
2013-01-12 23:32:09 +04:00
Jürgen Doser
076f13cc01 fixes node timer bug (fixes #407).
Previously, when a block was activated, on_timer callbacks where
called with the relative position of the node inside the block,
instead of the absolute position of the node.
2013-01-11 18:59:27 +01:00
dannydark
8eb717d4d0 Fixed two typo's in commit 615fd498bc 2013-01-07 18:57:12 +01:00
PilzAdam
8aa190606e Disable all HP handling if enable_damage is false 2013-01-07 18:39:45 +01:00
PilzAdam
0437abbffb Add a setting to enable always flying fast 2013-01-07 18:26:34 +01:00
sapier
0b1d09ff4f Fix buttons not working for Lua-triggered formspecs 2013-01-07 19:00:33 +02:00
RealBadAngel
8b75736c6f L-Systems treegen update. 2013-01-07 18:13:14 +04:00
Ilya Zhuravlev
099d7ff2ad "or" should be "||". Don't use "or", "and", etc.. It breaks build. 2013-01-04 23:39:12 +04:00
Jeija
46d431e7c3 Implement textarea in formspec, a multiline input field 2013-01-04 20:09:09 +01:00
PilzAdam
615fd498bc Fix typo doubletab -> doubletap 2013-01-04 20:04:48 +01:00
dannydark
bc879a1453 Fixed content_abm aliases
Since commit 5a13c49492 when I'm in a new area of the world that hasn't
yet been generated the debug log gets flooded with the following error:

Map::setNode(): Not allowing to place CONTENT_IGNORE while trying to
replace "default:dirt_with_grass" at (729,1,-219) (block (45,0,-14))

This commit fixes that.
2013-01-04 19:05:57 +01:00
PilzAdam
82fd83fd12 Switch to fly mode if spacebar is doubleclicked
Can be turned off in the key change GUI or in minetest.conf via doubletab_space
2013-01-04 18:51:38 +01:00
Jeija
b50da63852 Repeated right clicking when holding the right mouse button
Configure using repeat_rightclick_time in minetest.conf
2013-01-04 18:33:53 +01:00
PilzAdam
5bc14e2fe4 Add on_rightclick(pos, node, clicker) callback for nodes 2013-01-04 17:15:16 +01:00
PilzAdam
d2b1210376 Adjust the maximum alpha of the red hurt screen 2013-01-03 16:15:46 +01:00
Jeija
a27cdf16f4 Tilt camera on player damage (tweaked by PilzAdam) 2013-01-03 15:16:46 +01:00
PilzAdam
5a13c49492 Change the nodenames for dirt -> grass and sapling -> tree abms to match the mapgen aliases 2013-01-02 23:06:31 +01:00
PilzAdam
8493979d86 Replace constant red hurt screen with fade out red 2013-01-02 23:06:17 +01:00
Perttu Ahola
2c472a66d1 Add ServerEnvironment::setNode()/removeNode() to allow setting nodes from the C++ side with proper script-defined initialization/destruction 2013-01-02 23:18:14 +02:00
Perttu Ahola
69bd803a32 Add InvRef:get_location() 2013-01-02 22:53:55 +02:00
Perttu Ahola
b7de864f2e Call this 0.4.4-d1 because it has a protocol addition since 0.4.4 2013-01-02 21:03:47 +02:00
sapier
da9707950e Add TOCLIENT_SHOW_FORMSPEC to display formspecs at client from lua 2013-01-02 20:59:37 +02:00
RealBadAngel
36f03a7f4a Bugfixes to item_image formspec method 2013-01-02 18:29:08 +04:00
dannydark
5d18dc358b Fixed compile issues on windows
With latest upstream L-Systems treegen.
2012-12-30 16:38:53 +04:00
RealBadAngel
b40e599866 L-System treegen 2012-12-30 13:42:19 +04:00
PilzAdam
45029117f5 Use aux1 to move fast when flying 2012-12-27 18:33:24 +01:00
Esteban I. Ruiz Moreno
578ece8dd0 Add selectionbox_color, crosshair_color, and crosshair_alpha options 2012-12-27 13:10:03 -03:00
PilzAdam
896e1a30b0 Fix 'longjmp causes uninitialized stack frame' in cURL 2012-12-26 21:41:00 +01:00
Perttu Ahola
0f1d2c127c Initialize all member variables of LuaEntitySAO 2012-12-23 17:16:46 +02:00
DannyDark
d880a5ec0c Fixed two typos in wireshark lua file. 2012-12-23 02:17:34 +04:00
Ilya Zhuravlev
145e301269 Fix keycodes (#325) 2012-12-23 02:11:32 +04:00
Ilya Zhuravlev
c4172934e5 Prefer shared cURL library instead of the static one. 2012-12-21 20:35:04 +04:00
DannyDark
40dac4cde4 Fixed u64 ambiguous symbol error
Fixed the compiler not being able to determine which symbol it should
use when compiling Minetest as 64bit with Irrlicht 1.8+
2012-12-20 17:53:25 +10:00
sfan5
05b58501f2 Tweak CMake files for cURL 2012-12-18 21:52:56 +04:00
PilzAdam
29c17c14f1 Add ability to change the itemstack in placenode callbacks 2012-12-17 19:49:18 +01:00
PilzAdam
f4ed37ec6f Fix falling damage when not flying 2012-12-17 18:04:41 +01:00
Ilya Zhuravlev
e9006f904c Make m_media_fetch_threads to contain MediaFetchThread* instead of MediaFetchThread 2012-12-17 20:56:59 +04:00
Ilya Zhuravlev
e301bc2d77 Fix hypen used as minus sign (manpages), fix spelling error (server.cpp) 2012-12-17 19:46:54 +04:00
Ilya Zhuravlev
3578e1d4a7 Added ability to fetch media from remote server (using cURL library) 2012-12-16 15:20:18 +04:00
jordan4ibanez
aa46e5c5e7 Fix item entity's collision with nodeboxes 2012-12-15 15:32:17 -05:00
PilzAdam
9786202b08 Dont sneak while flying 2012-12-11 19:04:55 +01:00
PilzAdam
52ba413185 Only fly through walls in noclip mode wich requires the noclip privilege 2012-12-11 16:44:13 +01:00
Ilya Zhuravlev
1d13d106dd Update README 2012-12-07 02:20:42 +04:00
Perttu Ahola
ab06fca4be Bump version to 0.4.4 2012-12-06 21:21:10 +02:00
Perttu Ahola
fd9e226b79 Update GUI texts 2012-12-06 21:02:02 +02:00
Jürgen Doser
7d2f0d7b1b draw gui later. this fixes the hotbar disappearing while rendering to texture. 2012-12-06 20:43:17 +02:00
Jürgen Doser
870f7bcc93 fix screen flickering black when rendering to texture 2012-12-06 19:56:49 +02:00
Perttu Ahola
543fc6702f Set proper field background colors in Irrlicht 1.8 2012-12-06 19:35:40 +02:00
Perttu Ahola
5080b63435 Raise default maximum render distance to 240 2012-12-06 15:49:20 +02:00
Perttu Ahola
8bb36f4650 Fix automagic render distance tuner 2012-12-06 15:49:20 +02:00
Matthew I
a47b829040 Add #include guards to base64.h 2012-12-03 19:44:54 +02:00
Perttu Ahola
07632b7d69 Try to add a bit of topside brightness when not using shaders 2012-12-02 23:48:11 +02:00
Perttu Ahola
ec54e35757 Tweak shader randomly a bit 2012-12-02 23:47:53 +02:00
Perttu Ahola
68e36226b3 Default to preload_item_visuals=true 2012-12-02 20:43:55 +02:00
MirceaKitsune
15b86a6b9b Don't send player position from client to server if the player hasn't moved 2012-12-02 20:22:02 +02:00
Ilya Zhuravlev
eeb0900291 Fix minetest.get_node_drops(). It should always return list of item names, not ItemStack(s). 2012-12-02 21:09:30 +04:00
Perttu Ahola
804a7875a2 Smooth day-night transitions 2012-12-02 18:02:45 +02:00
Perttu Ahola
041585a78e Const-correct util/serialize.h 2012-12-02 14:36:12 +02:00
Perttu Ahola
cd1f604ffe Handle day-night transition in shader and make light sources brighter when shaders are used 2012-12-02 14:24:58 +02:00
Perttu Ahola
566f7f638a Get rid of jordan4ibanez's insane digging animation speed 2012-12-02 03:10:23 +02:00
Perttu Ahola
3e07c5bf82 Fix tile MaterialType to make sense and make lava surface be shader'd lower like water 2012-12-02 02:59:15 +02:00
Perttu Ahola
ca16119adb Install shaders properly 2012-12-02 01:45:31 +02:00
Perttu Ahola
d0b9b10ee0 Remove accidental vim swap file 2012-12-02 01:42:03 +02:00
Perttu Ahola
98fd364672 Add enable_shaders to minetest.conf.example 2012-12-02 00:54:44 +02:00
obneq
151fad1f2b Add checkboxes for shaders and on-demand item visual generation 2012-12-02 00:52:35 +02:00
Perttu Ahola
27373919f4 Implement a global shader parameter passing system and useful shaders 2012-12-02 00:46:18 +02:00
Kahrl
22e6fb7056 ShaderSource and silly example shaders 2012-12-02 00:46:18 +02:00
Perttu Ahola
e3258b78e2 Add setting preload_item_visuals 2012-12-02 00:46:10 +02:00
Perttu Ahola
bee170570d On-demand item meshes and textures 2012-12-02 00:38:26 +02:00
Perttu Ahola
ba73e75ef9 Modify some client log message levels 2012-12-02 00:24:11 +02:00
RealBadAngel
f4b7e1a570 New elements in formspec, item_image and item_image_button.
Fixed also game bug drawing dragged item behind fields, buttons etc.
2012-12-01 20:39:41 +02:00
PilzAdam
fa50341a71 Only check attachment for nodes with group attached_node 2012-12-01 15:20:53 +01:00
PilzAdam
fa76057e7f Add the group attached_node
Nodes in this group will be dropped as items if the node under them or the node in the wallmounted direction is not walkable.
2012-12-01 13:32:32 +01:00
PilzAdam
bb454b1846 Merge support for anaglyph stereo 2012-12-01 12:41:05 +01:00
Perttu Ahola
778d9b0cd6 Add the ability for client to check if image exists 2012-11-30 22:19:54 +02:00
DannyDark
84ace27872 Log /grant and /revoke command usage 2012-11-30 22:12:21 +02:00
Jürgen Doser
c1d8eeb70a Make dragged itemstack following the mouse cursor much smoother
by using the cursor coordinates directly, instead of updating them only when a mouse event is seen.
2012-11-30 22:07:30 +02:00
Matthew I
6cf87e1d23 Ignore directories beginning with a "." when searching for mods
This is not a problem on POSIX systems (these directories are
ignored by the POSIX implementation of fs::GetDirListing() in
filesys.cpp), but these directories still are reported on Windows
systems.  This becomes a problem when mod authors use version
control systems that create directories like ".git" or ".svn"
and collectMods() picks up on them.  It has also been suggested
that ignoring such directories would allow for the easily disabling
mods by inserting a "." in front of their name.

This quick fix simply makes collectMods() ignore directories
beginning with a ".".
2012-11-30 21:41:50 +02:00
Perttu Ahola
8a93581c8a Run scriptapi_on_shutdown() thread-safely and remove some old crap 2012-11-30 19:41:13 +02:00
Matthew I
6c8fa83ecd Add shutdown hook interface to Lua API
Scripts can call minetest.register_on_shutdown() to register a
shutdown hook.

Document that minetest.register_on_shutdown() callbacks may not be run

If the server crashes, it is unlikely that callbacks registered using
minetest.register_on_shutdown() will be called.
2012-11-30 19:26:51 +02:00
Perttu Ahola
ab45133ab4 Add congestion control settings to minetest.conf 2012-11-29 22:13:22 +02:00
Perttu Ahola
7b6d642300 Full protocol 13 compatibility on server side 2012-11-29 22:08:25 +02:00
Perttu Ahola
96a286dcf5 Make strict and non-strict protocol version checking to work more like expected 2012-11-29 22:08:25 +02:00
Perttu Ahola
420de7ad5e Allow server to accept protocol 13 clients altough they don't work too well 2012-11-29 22:08:25 +02:00
Perttu Ahola
8ccdd3bdb4 Ranged support of protocol version on server side 2012-11-29 22:08:25 +02:00
Perttu Ahola
23913f26cd Support serialization of protocol 13 ContentFeatures 2012-11-29 22:08:25 +02:00
Perttu Ahola
9714612999 unit test: TestNodedefSerialization 2012-11-29 22:08:25 +02:00
Perttu Ahola
69cdcea9fc Modify new ObjectProperties format to such that 0.4.3 will eat it 2012-11-29 22:08:25 +02:00
Perttu Ahola
30ec69c7d3 Fix Taoki's messed up generic object command ids 2012-11-29 22:08:25 +02:00
Perttu Ahola
f720c67f3e Change version to 0.4.4-dev because... ehm... why it wasn't that already? 2012-11-29 22:08:25 +02:00
Calinou
655bb526f4 Fix head shifting downards in glass, nodeboxes... 2012-11-28 16:14:52 +04:00
Perttu Ahola
5c26972cdd Fix mesh glitches on MapBlock boundaries 2012-11-27 19:00:09 +02:00
Perttu Ahola
117f208826 Revert "Use wielditem drawtype for all nodes in item_entity"
This reverts commit ffad18e424.
2012-11-27 17:32:58 +02:00
MirceaKitsune
5f798d944e Fix forgotten material properties for meshes (also seems to have been forgotten for cubes previously). This allows transparent png images to work properly 2012-11-27 08:06:13 +02:00
Perttu Ahola
6b927229f5 Default server step to 0.1s and sync object/player update intervals to it 2012-11-26 22:34:59 +02:00
PilzAdam
ffad18e424 Use wielditem drawtype for all nodes in item_entity 2012-11-26 18:30:07 +01:00
Perttu Ahola
e0eaed5fdb Remove unnecessary util/serialize.h from content_mapblock.cpp 2012-11-26 11:56:18 +02:00
Perttu Ahola
5bd638d4a5 Const-correct SharedBuffer::SharedBuffer(const T *t, unsigned int size) 2012-11-26 11:39:52 +02:00
Perttu Ahola
eca1c96412 Move util/serialize.h out from staticobject.h for smaller header dependencies 2012-11-26 11:18:34 +02:00
Perttu Ahola
2f5686ca48 Move a function from clientserver.h to clientserver.cpp 2012-11-26 10:31:24 +02:00
Perttu Ahola
4fa4340b95 Proper versioning of new network-serialized stuff 2012-11-26 09:49:31 +02:00
Perttu Ahola
197542c7ec New PROTOCOL_VERSION scheme (allow client to support a range of versions) 2012-11-26 09:49:07 +02:00
Perttu Ahola
ab507f83e2 Fix LuaEntitySAO::getClientInitializationData() and bump the related version 2012-11-26 09:10:27 +02:00
Perttu Ahola
d67004a3be Bump version to 0.4.4 as this isn't compatible with 0.4.3 2012-11-26 00:56:47 +02:00
Perttu Ahola
c8acc373c1 Update ContentFeatures serialization format now as PROTOCOL_VERSION was changed 2012-11-25 21:11:45 +02:00
MirceaKitsune
3d1c481f0b RealBadAngel's patch which allows the lua api to read pressed player keys. This should make it possible to change the player's animation based on what he is doing
Correct lua api version number

Always update animations and attachments after the entity is added to scene client side. Fixes animations not being applied in client initialization for some reason. Attachments should be re-tested now just to be safe.

Fix a segmentation fault caused by reaching materials that didn't exist in a loop for setting texture
2012-11-25 19:14:24 +02:00
MirceaKitsune
756db8174a A bunch of fixes
No longer hide players who are dead. With models, a death animation should be used instead

Some changes requested by celeron55

Rename a lot of things in the code, and use better lua api function names

Minor code corrections

Bump protocol version up, since the models / animations / attachments code creates new client<->server messages
2012-11-25 19:14:24 +02:00
MirceaKitsune
fa67b46c04 Allow Vanessa's texture filtering / mipmap patch to work on models, as well as all other node types
Initialize m_bone_posrot too

Update pos_translator for attached players, which should fix a bug noticed with carts where a detached player would travel from the detachment spot to where it was detached

Don't make attachments possible to right-click either

Properly apply object and text visibility for local attachments, and fix them showing when they shouldn't
2012-11-25 19:14:24 +02:00
MirceaKitsune
4d656963e4 Fix more things I forgot for attached players. Such players will now properly see themselves moving when attached, and the server will read their position accordingly
Fix attached players being able to bob their view and generate foostep sounds by pressing a movement key (running in place)
2012-11-25 19:14:24 +02:00
MirceaKitsune
9259d028ac Update attachments at the ending of the addToScene function for parents. And with this... *drum roll* Client-side attachments are at last functional and stick visibly.
Fix the last segmentation fault (apparently). So far attachments seem to be fully functional, although removing the parent causes children to go to origin 0,0,0 and possibly still cause such a fault (though this should already be addressed)

Fix a bug in falling code where entities get stuck

Also check if the parent has been removed server-side, and detach the child if so. Fixes children going to origin 0,0,0 when their parent is removed.

Unset all attachment properties when permanently detaching (on both the client and server). Also store less data we don't need

Create a separate function for detaching, and also update lua api documentation

When a child is detached, update its position from the server to clients. This WILL cause it to get positioned slightly differently client side, as the server attachment system only copies parent origin and knows not about mesh / bone transformation. This prevents different clients seeing the object detached in different spots which is most correct

Update the position of attached players to clients. An attached player will see himself move, but this is currently VERY ugly and laggy as it is done by the server (it probably must stay this way too)

Use a different approach for locally attached players. This allows for smooth positio transitions to work, as well at the player turning around freely. Still buggy however
2012-11-25 19:14:24 +02:00
MirceaKitsune
52fcb0b4b9 Send animations, bone overrides and attachments in entity initialization. Clients no longer have to be near an object when an animation or attachment is set to see the changes, and newly connected clients (or a client that simply renders the object for the first time) will get all of those settings. Therefore, the lua script no longer needs to run every X seconds either, just once per entity.
Finish fixing the material color code. But it won't work until MineTest has dynamic lighting... another day another feature.

Extra checks for the bone positioning / rotation code

Many checks and consistency improvements to the client attachment code

Make a separate function for checking if a client object is attached. A more in-depth change will be needed here to fix reading of invalid pointers

Use a different method of fetching the parent. Fixes the mass segmentation faults when rendering an attachment (some still happen though)

Major change to how attachments are handled. Fix the last segmentaton fault, which was due to the parent becoming invalid while being refreshed / removed which would bause the child to remain attached to nothing. Parents remove their children when being deleted themselves and add them back when re-added. Attachments are stored inside a 2D a vector which easily allows both a child to find their parent and a parent to find its children.

Remove attachment list entry when an object is being permanently removed. Also avoid duplicate entries in this list when re-attaching the same object

The "big code comments" can now go away. Client attachments almost work properly, and I know what else needs to be done
2012-11-25 19:14:23 +02:00
MirceaKitsune
d7d759b43f Enable client-side attachments, add detachment code 2012-11-25 19:14:23 +02:00
MirceaKitsune
ba3fd63e29 Fix some remaining issues with attachments, now they work. Tested with object->player and player->player attachments 2012-11-25 19:14:22 +02:00
MirceaKitsune
948b5a8be7 Complete the attachment framework.
The child ID can now be checked against the parent ID in content_cao.cpp so the parent can be detected. Actual attachment code to come

Divide attachment system between server attachments and client attachments, neither coded right now. As explained in the code comment:

// Attachments need to be handled on both the server and client.
// If we attach only on the server, models (which are client-side)
// can't be read so we don't know the origin and orientation of bones.
// If we attach only on the client, the real position of attachments is
// not updated and you can't click them for example.
2012-11-25 18:14:15 +02:00
MirceaKitsune
e42eeec8f6 Framework for the attachment system, new object property which allows changing the color and alpha of mesh materials
New object property which allows changing the color and alpha of mesh materials. Due to the current lighting systems it doesn't work yet, but the full implementation is there

Framework for the attachment system, with no actual functionality yet

Send bone and player object to the setAttachment function in content_sao.cpp, but we need a way to translate it there and send it to the client

I will also want position and rotation offsets to be possible to apply to attachments

Network object ID from server to client. This will be used to identify the parent client-side and know what to attach to
2012-11-25 18:14:15 +02:00
MirceaKitsune
118285e6ba Get the new animation framework properly working
Store start and end frames as v2f

Also move bone animations to their own function instead of object properties
2012-11-25 18:14:15 +02:00
MirceaKitsune
ba4d93027f Joint positioning and rotation code, and fix a problem related to their lua API
Attempt to move the animation system to a more correct implementation, rather than using object properties. Incomplete and breaks functionality
2012-11-25 18:14:15 +02:00
MirceaKitsune
fb0c431864 Allow the LUA API to set animations to meshes as well as the animation speed. Also update animations only when needed.
Support for animation blending, though for some reason it doesn't work.

Don't enable animation transitions by default for many reaosons

Object property to store individual bone positions. LUA can specify a bone name followed by a bone position. No functionality yet. Bone rotation to be added in the following commit

Same system for bone rotation, plus a few other things I missed
2012-11-25 18:14:15 +02:00
MirceaKitsune
9c8ba42750 Get the mesh working through the memory cache properly. Most credit goes to celeron55 for the help on this code
Get the texture from memory as well

Add .x to the list of supported formats

Update LUA API documentation
2012-11-25 18:14:15 +02:00
MirceaKitsune
f9675bd2b4 Add a subfolder for models and transfer models from server to client
(obj, md2 and md3 are currently allowed)

Get rid of the texture string and use the existing textures array. Segmented meshes have multiple materials, and this will allow us to texture each. Do not switch to this commit yet!

If a texture string is left empty in LUA, don't modify that material. Useful so a script can change specific textures without affecting others
2012-11-25 18:14:15 +02:00
MirceaKitsune
cb40b3517a Fix material properties and allow lighting. Models should now be affected by light instead of being black 2012-11-25 18:14:15 +02:00
MirceaKitsune
0a020dbcc8 Properly read the mesh from LUA.
Players can now be set to meshes using the following test script:

function switch_player_visual()
		prop = {
			mesh="player.obj",
			texture="player.png",
			visual="mesh",
		}
	for _, obj in pairs(minetest.get_connected_players()) do
		obj:set_properties(prop)
	end
	minetest.after(1.0, switch_player_visual)
end
minetest.after(1.0, switch_player_visual)
2012-11-25 18:14:14 +02:00
MirceaKitsune
ac97a7f70e 3D model support for players using Irrlicht. Also ready the basis for mesh support on nodes / items via LUA (to be done). Supports any mesh format compatible with Irrlicht, but animations are not set up yet. 2012-11-25 18:14:14 +02:00
Perttu Ahola
e02b95741b Revert "Don't leak textures all over the place"
This causes textures to be deleted before they are no longer accessed,
resulting in a segmentation fault. This needs to be rewritten in such a way
that textures are deleted when the client disconnects from a server.

This reverts commit 41c00e87d4.
2012-11-25 16:39:07 +02:00
Ilya Zhuravlev
bbd990f2cc Fix trees growing into any type of node 2012-11-23 00:36:52 +04:00
xyzz
a0b5605db8 Merge pull request #268 from khonkhortisan/image_button
Allow transparent image_buttons
2012-11-22 09:13:18 -08:00
Anthony
3ba9b26310 Fix server crash on /clearpassword
According to #253, using `/clearpassword` without an argument causes the server to crash from an assertion failure. I've resubmitted matttpt's patch as a pull request to aid in merging.
2012-11-20 16:45:30 +01:00
MirceaKitsune
6c43ec2d2b Add anaglyph settings to minetest.conf.example 2012-11-13 19:21:18 +02:00
MirceaKitsune
9b9eb23b6d Default anaglyph to 0.1 2012-11-13 19:20:57 +02:00
MirceaKitsune
8b16e5f27d Anaglyph stereo support, created by xyz 2012-11-13 19:20:35 +02:00
xyzz
5292476841 Merge pull request #284 from RealBadAngel/master
Adding backgrounds to formspec
2012-11-12 11:50:58 -08:00
PilzAdam
1db0334787 Merge pull request #286 from PilzAdam/digging_animation
Add jordan4ibanez' better digging animation
2012-11-10 10:33:16 -08:00
PilzAdam
6e2ba111af Add jordan4ibanez' better digging animation 2012-11-10 17:36:56 +01:00
Perttu Ahola
5f1d3ad754 Swap out pixel-perfect nyan cat by request of Chris Torres 2012-11-09 20:14:04 +02:00
Vanessa Ezekowitz
46f471c89f added GUI checkboxes in Settings tab for the aforementioned video settings. 2012-11-09 19:12:49 +02:00
Vanessa Ezekowitz
0dd9c14ff8 Added video settings filter options via config file - second try :-)
Set one or more of these in the config to turn the related option on:

mip_map = 1
anisotropic_filter = 1
bilinear_filter = 1
trilinear_filter = 1
2012-11-09 19:12:44 +02:00
Perttu Ahola
0709918bd8 Fix unnecessary network protocol incompatibility in ContentFeatures 2012-11-08 20:43:32 +02:00
RealBadAngel
8e5167d726 Adding background to Formspec 2012-11-08 19:22:37 +01:00
PilzAdam
8c3ffa3907 Merge pull request #279 from RealBadAngel/patch-2
Formspec: Draw images before inventories. Allows to use image as backgro...
2012-11-05 08:12:12 -08:00
RealBadAngel
8540871ebc Formspec: Draw images before inventories. Allows to use image as background. 2012-11-04 21:18:28 +01:00
PilzAdam
23837e4352 Merge pull request #274 from PilzAdam/falling
Fix a bug in falling code where entities get stuck
2012-11-03 15:14:14 -07:00
PilzAdam
3cab24fbcf Merge pull request #243 from xyzz/liquid_renewable
Add liquid_renewable property, allow non-renewable liquids.
2012-11-03 12:34:44 -07:00
PilzAdam
755df5f659 Merge pull request #273 from PilzAdam/air
Make air and ignore drop nothing
2012-11-03 10:36:46 -07:00
PilzAdam
936411e4d1 Make air and ignore drop nothing 2012-11-03 18:29:01 +01:00
PilzAdam
21317be493 Fix a bug in falling code where entities get stuck 2012-11-03 18:07:49 +01:00
Kahrl
41c00e87d4 Don't leak textures all over the place 2012-11-02 18:45:39 +02:00
Perttu Ahola
2863a3291a Fix flowing liquid animation direction calculation 2012-11-02 18:05:42 +02:00
PilzAdam
8adad36a66 Merge pull request #272 from PilzAdam/pow
Replace pow() with multiplikation to improve speed
2012-11-02 08:35:30 -07:00
PilzAdam
b701f8a878 Replace pow() with multiplikation to improve speed 2012-11-02 16:24:57 +01:00
PilzAdam
63e73f29cc Merge pull request #270 from PilzAdam/master
Move falling to builtin
2012-11-01 11:00:57 -07:00
PilzAdam
7fcf153ada Add functions to the default mod of minimal game to support old code 2012-11-01 18:49:12 +01:00
PilzAdam
0443d36abf Add falling_node to special groups in lua-api.txt 2012-11-01 12:33:24 +01:00
PilzAdam
df2ad89518 Remove a useless comment 2012-10-31 19:08:00 +01:00
PilzAdam
10dc2b30fb Move falling to builtin 2012-10-31 19:06:11 +01:00
Kyle
f9087d14a3 Allow transparent image_buttons 2012-10-18 12:06:47 -07:00
Perttu Ahola
25cf3757b2 Add nodedef.on_blast() to lua_api.txt in order to support chained explosions of any explosives 2012-09-09 23:24:48 +03:00
Perttu Ahola
72ef6f637e Statically store always_collect field of __builtin:item 2012-09-09 23:14:41 +03:00
Perttu Ahola
9cadaf824b Add dtime_s to entity activation 2012-09-09 17:12:29 +03:00
Perttu Ahola
1cc1b93e65 Fix ServerActiveObject stuff 2012-09-09 16:11:05 +03:00
Perttu Ahola
c4f400acd0 Fix wielditem entity drawtype brightness control 2012-09-09 13:26:52 +03:00
Perttu Ahola
ac628c9b0a Fix ObjectRef:punch() 2012-09-09 12:05:38 +03:00
Ilya Zhuravlev
926830e0df Add liquid_renewable property. 2012-09-07 20:48:12 +04:00
Perttu Ahola
9696ed31a4 Version 0.4.3 2012-09-05 01:31:06 +03:00
Matthew I
c8895dd43b Prevent world creation if the world already exists 2012-09-05 01:17:44 +03:00
Matthew I
5dd1d354f8 Enforce stricter world names using a blacklist
Blacklisted characters are: / \
2012-09-05 01:17:28 +03:00
Perttu Ahola
a0da6bcf43 Add aux1_descends to key change menu 2012-09-05 00:55:19 +03:00
Perttu Ahola
1b63f8d6b9 Version 0.4.3-rc0; increase PROTOCOL_VERSION due to backwards-incompatible InventoryList width field 2012-09-05 00:39:43 +03:00
Perttu Ahola
60932d2bd7 Remove "Unknown inventory identifier" deserialization errors, because they can break forward compatibility 2012-09-04 23:02:56 +03:00
Perttu Ahola
ee2d9d973a Reorganize ClientMap rendering code for a bit more performance
- Don't select blocks for drawing in every frame
- Sort meshbuffers by material before drawing
2012-09-04 22:41:03 +03:00
Perttu Ahola
0e6f7a21c6 Fix shift-descend to ladders from a floor 2012-09-03 23:31:51 +03:00
Perttu Ahola
cc47ff7c4c Fix moving stuff into a mismatched stack in a "infinite" inventory 2012-09-02 23:01:42 +03:00
Perttu Ahola
e1a495ee30 Make inventory GUI do sane things when server-side inventory acts unusually 2012-09-02 22:51:38 +03:00
Perttu Ahola
6495007924 Fix bug in moving a larger sized stack in inventory on top of another
- You have 2 stacks: a with x items and b with y<x items
- Take a with your mouse and place it on b
- Whole stack a moves to b
- (y * 2 - x) items move from b to a
- (x - y) items are left to the mouse cursor
2012-09-02 20:24:45 +03:00
Perttu Ahola
d53a6cd851 Add overridable function for handling dropped items from nodes 2012-09-02 19:38:44 +03:00
Perttu Ahola
b6c12d2aa3 Fix github issue #224 2012-09-01 18:32:15 +03:00
Thomas Lauro
7a14171be4 Fix issue with openal mac os x compile 2012-09-01 18:19:59 +03:00
Perttu Ahola
5194505407 Fix GUIKeyChangeMenu so that '/' can be inserted on a finnish keyboard 2012-09-01 18:03:50 +03:00
Thomas Lauro
3e7957512b A bunch of GUIKeyChangeMenu fixes
- Display message when associating a key already in use
- Fix issue for not beeing able to assign space to an action
- Cleaning up
- Make it build (by celeron55)
2012-09-01 18:03:40 +03:00
Perttu Ahola
c0bd96d9b3 Attempt to fix flying gravel and dirt 2012-09-01 13:41:15 +03:00
Sergey Gilfanov
0f7728f84d Smooth transition to the desert biome. 2012-09-01 13:22:07 +03:00
Perttu Ahola
c129b3852b Fix the bouncy node related stuff a bit 2012-09-01 13:21:52 +03:00
Perttu Ahola
3b43c69df4 Add bouncy node group 2012-09-01 12:58:37 +03:00
Perttu Ahola
b17d3e7ad7 Add disable_jump and fall_damage_add_percent node groups 2012-09-01 12:07:27 +03:00
Ilya Zhuravlev
6a16075912 Add InventoryList width property & allow custom crafting grids. 2012-09-01 10:01:41 +03:00
sfan5
43ebec2be1 Make shift the default descent control on ladders and when flying
"aux1_descends" setting switches to the old descend control.
2012-09-01 09:48:07 +03:00
Perttu Ahola
f60227f112 Don't crash in "unexpected multibyte character"; just print it in log. Github #222 2012-09-01 09:23:39 +03:00
Perttu Ahola
f3630e95d6 Use proper alpha blit in some more texture modifiers 2012-08-31 18:06:47 +03:00
Perttu Ahola
8887105ffd Properly initialize baseimg for texture modifier [combine:WxH:X,Y=filename:X,Y=filename2 2012-08-31 17:58:55 +03:00
Matthew I
1d7408a7b8 Fix black display inside opaque water
Opaque water's solidness was being set to 2, like a normal node.
When you swim, it is treated like a solid block, and the display
goes black.  Setting it to 1 like transparent water allows you to
see.

It looks somewhat awkward when you swim, look up, and see an opaque
wall of water (the surface), but there isn't much that can be done
about it.  If you made the water transparent so it looked good,
it would defeat the purpose :) .
2012-08-31 17:50:12 +03:00
Perttu Ahola
0b1ab41a95 Fix github issue #213: Dropping unknown items crashes the game
The items will now just disappear when dropped.
2012-08-19 10:55:04 +03:00
Perttu Ahola
b717b6505b Fix crash when furnace is full (minimal game) 2012-08-12 17:11:23 +03:00
Matthew I
b29d609b0b Move chat commands to Lua and remove servercommand.{cpp,h}
Commands moved:
 /me
 /status
 /time
 /shutdown
 /ban
 /clearobjects
2012-08-12 16:45:58 +03:00
Matthew I
8a3c777c40 Add ban management routines to Lua API
Those functions are:
 * minetest.get_ban_list()
 * minetest.get_ban_description(ip_or_name)
 * minetest.ban_player(name)
 * minetest.unban_player_or_ip(ip_or_name)
2012-08-12 16:45:58 +03:00
Matthew I
548da26ddc Extend Lua API in order to implement chat commands
minetest.get_server_status()
minetest.request_shutdown()
EnvRef:clear_objects()
2012-08-12 16:44:55 +03:00
Matthew I
8e0ac70c4d Remove trailing comma after player list in server status string 2012-08-12 16:44:54 +03:00
Matthew I
1ed559bd24 Allow digging of unknown nodes
This allows the removal of nodes with unknown types.
get_item_callback() (C++) would fail if a node has an unknown type.  Now it
will try using the callback from minetest.nodedef_default in this case.
Also, minetest.node_dig() (Lua) was altered to always allow digging when
the node definition is empty (i.e. unknown node).
2012-08-12 16:04:18 +03:00
Perttu Ahola
e3b831e975 Fix wrong amount of nodes being dropped from inventory 2012-08-12 15:49:23 +03:00
darkrose
d05e3adbc7 fix node timers so on_timer gets the correct position 2012-08-12 15:28:31 +03:00
Perttu Ahola
a9a475ad50 Remove unwanted ! from ifs in inventory record-for-rollback code 2012-08-12 11:20:36 +03:00
Perttu Ahola
d38b465b7c Call this 0.4.2-rc1 2012-07-28 16:31:45 +03:00
Perttu Ahola
fd7ec2da91 Fix inventory segfault when rollback recording is disabled 2012-07-28 14:44:18 +03:00
Perttu Ahola
c9ed379e39 Add enable_rollback_recording setting, defaulting to false 2012-07-28 03:08:09 +03:00
Perttu Ahola
e64feefc61 Handle max<min in LuaPseudoRandom::l_next() 2012-07-27 19:03:15 +03:00
Perttu Ahola
3e754382af Tweak rollback and liquids 2012-07-27 15:46:51 +03:00
Perttu Ahola
7ef0a13250 Tweak rollback stuff 2012-07-27 14:52:29 +03:00
Perttu Ahola
0de3fb786d Increase automatic suspect guess timeframe 2012-07-27 13:54:14 +03:00
Perttu Ahola
1d44a98f2f ABM and liquid overload skip 2012-07-27 13:45:49 +03:00
Perttu Ahola
98ff4eb4ee Fix server build (a missing header) 2012-07-27 13:43:25 +03:00
Perttu Ahola
a9d8df83d2 Make the rollback system VERY FUCKING GOD DAMN POWERFUL 2012-07-27 13:24:28 +03:00
Perttu Ahola
508b7b5e51 Don't track liquids for rollback because of too much log 2012-07-27 02:46:54 +03:00
Perttu Ahola
f7dc72f8aa Properly rollback chat command triggered things 2012-07-27 02:37:04 +03:00
Perttu Ahola
0190f9b077 Experimental-ish rollback functionality 2012-07-27 02:27:18 +03:00
Perttu Ahola
0c91a0d59d Working group-shapeless and multigroup recipes 2012-07-26 13:49:13 +03:00
Perttu Ahola
a26a66a8c4 Restore focus to formspec menu when pressing a button 2012-07-25 18:28:40 +03:00
Perttu Ahola
100345f1e4 Deprecate minetest.add_to_creative_inventory and use group not_in_creative_inventory instead 2012-07-25 18:05:31 +03:00
Perttu Ahola
4535166a3b Add notice in the minimal game 2012-07-25 17:10:31 +03:00
Perttu Ahola
0346e68deb Add special return value -1 to inventry callbacks 2012-07-25 16:52:00 +03:00
Perttu Ahola
db62c227c8 Improve formspec positioning 2012-07-25 16:30:23 +03:00
Perttu Ahola
983e45ae92 Improve inventory callbacks a bit 2012-07-25 15:39:39 +03:00
Perttu Ahola
0a18dda158 Remove special handling of creative mode 2012-07-25 14:07:45 +03:00
Perttu Ahola
9eaf93d41d Detached inventory callbacks and reworked node metadata callbacks 2012-07-25 02:36:54 +03:00
Perttu Ahola
2ac20982e0 Detached inventories 2012-07-24 20:57:17 +03:00
Perttu Ahola
96eac87d47 builtin/item.lua: callbacks with copies of positions and nodes rather than recycle the same ones, which callbacks can modify 2012-07-24 17:46:17 +03:00
Perttu Ahola
0cf1ed544c darkrose should work at a nuclear power plant.
It'd take years to figure out what caused the accident.
2012-07-24 16:36:50 +03:00
Perttu Ahola
558e284e25 Update minetestmapper.py to support ver. 24 and 25 2012-07-24 15:17:00 +03:00
Perttu Ahola
5c31445117 Improve node timer format (map format version 25) and update mapformat.txt 2012-07-24 15:03:46 +03:00
Perttu Ahola
717ae67995 Add node timer test in minimal/experimental 2012-07-24 14:51:13 +03:00
Perttu Ahola
e8331f0c1d Add oldnode parameter to minetest.register_on_placenode callback 2012-07-23 20:44:56 +03:00
Perttu Ahola
c009aa3a22 Fix building on top of (pointable && buildable_to) nodes 2012-07-23 20:42:08 +03:00
Perttu Ahola
9af9d8f5d0 Describe node definition fields better in lua_api.txt 2012-07-23 20:17:44 +03:00
Perttu Ahola
2c027b03db Move /give, /giveme, /spawnentity and /pulverize to builtin/chatcommands.lua 2012-07-23 17:43:08 +03:00
Perttu Ahola
aef1332e42 Improve build configuration options 2012-07-23 15:23:33 +03:00
Perttu Ahola
16fc8b5fc2 Update lua_api.txt a bit 2012-07-23 08:48:55 +03:00
Perttu Ahola
fd845f27f5 Fix map deserialization and remove old serialization code 2012-07-23 08:18:39 +03:00
darkrose
ea62ee4b61 Increase node id/param0 to 16 bits, leaving param2 always with 8 bits 2012-07-23 08:18:39 +03:00
darkrose
cd6becd442 Implement node timers 2012-07-23 08:18:37 +03:00
Perttu Ahola
829f262c79 Fix terrible grammar in comment! 2012-07-22 20:36:06 +03:00
Perttu Ahola
246520b5cb Fix compressZlib() 2012-07-22 20:29:09 +03:00
Perttu Ahola
38bb649582 Test zlib wrapper's handling of large data 2012-07-22 20:27:55 +03:00
Perttu Ahola
82855a04ec Tweak test.c overally a bit 2012-07-22 20:26:54 +03:00
Perttu Ahola
6dfefaf229 Formspec button_exit[] and image_button_exit[] 2012-07-22 17:40:48 +03:00
darkrose
d44f8a854b Doc updates for formspec 2012-07-22 17:40:48 +03:00
Perttu Ahola
acf3a43095 Add /test1 command to minimal for testing a more complicated player inventory form 2012-07-22 17:40:48 +03:00
Perttu Ahola
4cc98d7add minetest.register_on_player_receive_fields() 2012-07-22 17:40:48 +03:00
darkrose
506203345b Implement formspec 2012-07-22 17:40:41 +03:00
Matthew I
c259f7c8bd Update Lua API documentation to include minetest.get_modnames() 2012-07-22 13:36:17 +03:00
Matthew I
c62a121cca Add "/mods" command to list mods to client 2012-07-22 13:36:10 +03:00
Matthew I
136eb32389 Add minetest.get_modnames() to Lua API 2012-07-22 13:36:03 +03:00
Perttu Ahola
e3ddbe8c6b Version 0.4.1 2012-07-21 23:14:23 +03:00
Andreas Zwinkau
d085139057 Fix signedness warning in base64.cpp 2012-07-21 22:10:29 +03:00
Andreas Zwinkau
28e7443f9b Fix wctomb use
wctomb(NULL, _) returns "nonzero if the encoding has nontrivial shift state, or zero if the encoding is stateless."

I assume the intentation was to get the size of the target buffer.
Use MB_CUR_MAX for this.
2012-07-21 22:09:17 +03:00
Andreas Zwinkau
e79ad21aeb Remove mbtowc warnings
As mbtowc(_, _, 1) reads at most one char, everything other than a
return value of 1 is an error. Since the input strings are static,
an assert protects against future changes.

Likewise, wctomb should currently never encounter a character, which
actually needs a multibyte representation.
2012-07-21 22:08:20 +03:00
Perttu Ahola
0b61253931 Actually fix facedir-rotated nodes placed using minetest.env:place_node() 2012-07-21 21:23:15 +03:00
Matthew I
a2738dec59 Fix hovering after mining a block underneath you while sneaking 2012-07-21 20:56:56 +03:00
Perttu Ahola
1788709e2d Rotate facedir-rotated top and bottom textures too, and re-implement nodebox side rotation 2012-07-21 20:23:32 +03:00
Perttu Ahola
47d30d12cb Facedir rotation of nodebox textures 2012-07-21 18:59:12 +03:00
Perttu Ahola
43df78102c Check whether node is known before reading definition in __builtin:item:on_step() 2012-07-21 16:36:14 +03:00
Bad-Command
cc10eec6c6 Fix signed overflow in getPointedThing 2012-07-21 16:13:51 +03:00
Perttu Ahola
15bf9a7026 Fix typo in scriptapi.cpp in minetest.get_craft_recipe() 2012-07-21 15:32:46 +03:00
Perttu Ahola
2795f44f03 Server-side checking of digging; disable_anticheat setting 2012-07-21 14:38:49 +03:00
Perttu Ahola
b0ba05c9ac BITCH, THIS IS 0.4.0. 2012-07-21 03:37:07 +03:00
Perttu Ahola
71c6845a94 Define M_PI on MSVC 2012-07-21 03:36:34 +03:00
Perttu Ahola
4b97023251 Add a random-ish contributor list to credit screen 2012-07-21 03:14:58 +03:00
darkrose
369046bbb4 Check for table type when reading groups from Lua 2012-07-21 02:35:45 +03:00
darkrose
38580fbee7 Add minetest.get_craft_recipe() 2012-07-21 02:33:22 +03:00
darkrose
08e1d40d6e Add support for "textures/all" (and thus texture packs) to server 2012-07-21 02:33:19 +03:00
darkrose
80f35467d8 Make lava buckets work as fuel in minimal game 2012-07-21 02:33:11 +03:00
darkrose
1b19020bf4 Remove trenches from map generator (cyisfor) (glitches: read below)
This causes glitches in very high cliffs by not making mud "flow" down from
them. Those are quite rare currently because of the lame height differences
generated.
2012-07-21 02:32:04 +03:00
Calinou
61e58ee9b7 Message cleanups (consistency) and prevent /me when not allowed to shout 2012-07-21 02:27:58 +03:00
darkrose
f21af8da9c Handle nil placer as it might occur when using minetest.env:place_node. (Uberi) 2012-07-21 02:27:46 +03:00
Perttu Ahola
dece3a3600 Remove util/old/genmap.py, because it is uselessly old 2012-07-19 21:17:31 +03:00
Perttu Ahola
16ad10e62f Allow defining player's inventory form in Lua 2012-07-19 14:09:16 +03:00
Perttu Ahola
02fb912a95 Fix /builtin/misc.lua:47: attempt to call method 'is_player' (a nil value) 2012-06-19 00:50:07 +03:00
Perttu Ahola
48790c0751 Fix random glitches in transparent animations 2012-06-18 00:21:23 +03:00
Perttu Ahola
c57e5083e8 Add pointed_thing to lua_api.txt 2012-06-17 19:47:55 +03:00
Perttu Ahola
c9a2058361 Hopefully fix includes on mingw 2012-06-17 18:05:13 +03:00
Perttu Ahola
7039dfafd6 Increment protocol version 2012-06-17 17:49:12 +03:00
Perttu Ahola
22ae83a589 Explain node boxes in lua_api.txt 2012-06-17 17:23:58 +03:00
Kahrl
1575448b1a Custom boxy nodes (stairs, slabs) and collision changes 2012-06-17 16:34:39 +03:00
Perttu Ahola
9f031a6759 Optimize headers 2012-06-17 04:03:39 +03:00
Perttu Ahola
d0ea6f9920 Properly and efficiently use split utility headers 2012-06-17 02:40:36 +03:00
Perttu Ahola
1bc37d576c Initially split utility.h to multiple files in util/ 2012-06-17 01:29:13 +03:00
Perttu Ahola
d159591b9a Mention node drawtypes in lua_api.txt 2012-06-16 23:42:04 +03:00
Perttu Ahola
57550b2b3d Fix /setpassword and /clearpassword 2012-06-16 23:35:11 +03:00
Perttu Ahola
d15d6c4e6b Fix "Node placement prediction failed for (places __default) - Name not known" 2012-06-16 22:45:35 +03:00
Perttu Ahola
6b598f61a6 Add desynchronize_mapblock_texture_animation setting and improve minetest.conf.example a bit 2012-06-16 22:37:20 +03:00
Perttu Ahola
9e21204f8b Fix build error due to DEBUGFILE 2012-06-16 21:36:54 +03:00
Perttu Ahola
e6b86fa304 Revert back proper crack texture 2012-06-16 20:48:05 +03:00
Perttu Ahola
268e50dfbd Clean up constants.h a bit 2012-06-16 18:15:06 +03:00
Perttu Ahola
07ccc15fc2 Allow node cracking animations of any length 2012-06-16 18:02:56 +03:00
Perttu Ahola
2b500d72e5 Remove tiles and special_tiles from node definition prototype because otherwise the old names can't be used 2012-06-16 18:02:26 +03:00
Perttu Ahola
cd0014b24f Update field names to non-deprecated ones in node definition prototype 2012-06-16 17:05:21 +03:00
Perttu Ahola
b3786d84c5 Use new field names and reorder fields a bit in minimal game 2012-06-16 16:47:41 +03:00
Perttu Ahola
fd1135c7af Node texture animation 2012-06-16 16:47:28 +03:00
Perttu Ahola
f0678979b1 Add comment about ItemSAO being deprecated 2012-06-11 22:10:48 +03:00
Perttu Ahola
f4a7e11bce Add some missing object properties to doc/lua_api.txt 2012-06-10 15:04:24 +03:00
Perttu Ahola
6a0388bb4b Node placement client-side prediction 2012-06-10 12:46:48 +03:00
Perttu Ahola
7ba72f2763 Remove a random old comment and a #define from game.cpp 2012-06-09 13:40:07 +03:00
Perttu Ahola
f7147d9c0a Add experimental_tester_tool_1.png to minimal game (was accidentally left out) 2012-06-08 16:46:02 +03:00
Perttu Ahola
523a5fd2e5 Move genmap.py and pnoise.py to old/ 2012-06-08 15:50:27 +03:00
Perttu Ahola
ff85e2343c Update minetestmapper.py to support the current map format (and previous ones) 2012-06-08 15:17:03 +03:00
Perttu Ahola
e74668ef7f Update and fix doc/mapformat.txt; make current format more solid in mapblock.cpp 2012-06-08 14:57:02 +03:00
Perttu Ahola
22502f80db Don't deprecate minetest.register_on_placenode and minetest.register_on_dignode 2012-06-08 01:51:23 +03:00
Perttu Ahola
4b2cc38aba Add disallow_empty_password setting 2012-06-07 02:11:28 +03:00
Perttu Ahola
a8eb68142e Call this 0.4.dev-20120606 2012-06-07 00:40:04 +03:00
Perttu Ahola
81554fbf72 Add minetest.serialize() and minetest.deserialize() 2012-06-07 00:05:00 +03:00
Perttu Ahola
a435cfcd82 Allow groups in crafting recipes 2012-06-06 23:39:17 +03:00
Perttu Ahola
7631918a12 Remove obsolete "footprints" default setting from defaultsettings.cpp 2012-06-06 20:04:05 +03:00
Kahrl
e070f1e525 Allow replacements in cooking and fuel recipes 2012-06-06 00:22:34 +03:00
Perttu Ahola
430d6e1cca Fix small errors in lua_api.txt 2012-06-06 00:15:33 +03:00
Perttu Ahola
3a0562bebc Add after_destruct and cache the existence of on_construct, on_destruct and after_destruct for quick skipping when a node does not have them 2012-06-05 23:51:37 +03:00
Perttu Ahola
c3658e7c79 place_node, dig_node and punch_node; an in-game tester tool; remove old code 2012-06-05 23:10:07 +03:00
Perttu Ahola
b0f81c3253 Fix NDT_RAILLIKE tweakings 2012-06-05 21:51:01 +03:00
darkrose
31c171fc1e Shadily clean up NDT_RAILLIKE to surely differ from the few leftover non-LGPLv2 parts from the standpoint of copyright law. 2012-06-05 19:47:19 +03:00
Perttu Ahola
e9c123b1b9 Clean and optimize clouds.cpp enough to not really contain any of the small amount of non-LGPLv2/later code left 2012-06-05 18:54:42 +03:00
Perttu Ahola
037b259197 Switch the license to be LGPLv2/later, with small parts still remaining as GPLv2/later, by agreement of major contributors 2012-06-05 18:54:07 +03:00
Perttu Ahola
a569961e0f Update translation template po/minetest.pot 2012-06-04 23:29:14 +03:00
Perttu Ahola
7eabde6aee Use gettext for more basic user interface strings 2012-06-04 23:24:31 +03:00
Perttu Ahola
ed772da0cc Remove misdesigned exception from ReliablePacketBuffer 2012-06-04 22:43:33 +03:00
Perttu Ahola
f48882213e Add ignore_world_load_errors configuration option and provide better error messages 2012-06-04 22:34:40 +03:00
Perttu Ahola
1cd2076d42 Improve GUIMessageMenu (move and resize elements based on size of text) 2012-06-04 22:33:47 +03:00
Perttu Ahola
816b9c8d71 Fix loading of old signs 2012-06-04 18:19:23 +03:00
Perttu Ahola
3bea1a944e Call this 0.4.dev-20120603 2012-06-04 00:37:51 +03:00
darkrose
3e419ffb38 Add InvRef:is_empty(listname) and make chests/furnaces not diggable if not empty in minimal game 2012-06-03 22:31:02 +03:00
darkrose
a149c6ecde Add can_dig callback 2012-06-03 22:31:02 +03:00
darkrose
3f18e9a2da fix locked chest to not destroy denied items (minimal game) 2012-06-03 22:31:02 +03:00
Perttu Ahola
4b0494062e Add fire visualization to minimal furnace menu 2012-06-03 22:31:02 +03:00
Perttu Ahola
a09d86dd3c Update inventory menu from formspec on-the-fly 2012-06-03 22:31:02 +03:00
Perttu Ahola
3ccb0f691b Add texture modification [lowpart:percent:filename 2012-06-03 22:31:02 +03:00
Perttu Ahola
1709fd854a Implement image[<X>,<Y>;<W>,<H>;<texture name>] and allow floating-point values in formspec 2012-06-03 22:31:02 +03:00
Perttu Ahola
7bf446f671 Reshape inventory menu code 2012-06-03 22:31:02 +03:00
Perttu Ahola
e4bc76f55c Add a bit of unit test for inventory 2012-06-03 22:31:02 +03:00
Perttu Ahola
81c5e5200b Fix loading of legacy chests 2012-06-03 22:31:01 +03:00
Perttu Ahola
9c3830dd35 Use proper furnace cook time 2012-06-03 22:31:01 +03:00
Perttu Ahola
bf8cfce50e Add ObjRef:is_player() and modify ObjRef:get_player_name() to always return a string to aid better inter-object compatibility of code that assumes objects to be players 2012-06-03 22:31:01 +03:00
Perttu Ahola
b235e4d290 Make GUIinventoryMenu::drawList more robust with invalid data 2012-06-03 22:31:01 +03:00
darkrose
b8cf6dee3e Lua implementation of furnace with visible active state 2012-06-03 22:31:01 +03:00
Perttu Ahola
35df1ee253 Implement locked chest; add after_place_node and after_dig_node node callbacks 2012-06-03 22:31:01 +03:00
Perttu Ahola
353f9fd43c minetest.get_craft_result 2012-06-03 22:31:01 +03:00
Perttu Ahola
3899f83da8 NodeMetaRef:{to,from}_table and lua_api.txt additions 2012-06-03 22:31:01 +03:00
Perttu Ahola
5f3c70061d Properly handle dropping of items from nodes, and disallow moving items directly between nodes 2012-06-03 22:31:01 +03:00
Perttu Ahola
aba7134301 on_metadata_inventory_{move,offer,take} 2012-06-03 22:31:01 +03:00
Perttu Ahola
d7447cdf9e Implement sign using form field protocol 2012-06-03 22:31:01 +03:00
Perttu Ahola
ff8d2bbc36 Convert legacy chest inventory list "0" to "main" 2012-06-03 22:31:00 +03:00
Perttu Ahola
70c98c9972 Properly create metadata inventories in minimal 2012-06-03 22:31:00 +03:00
Perttu Ahola
45f32838b9 Improve GUIInventoryMenu error messages more 2012-06-03 22:31:00 +03:00
Perttu Ahola
7d6e80a423 Add proper error messages to GUIInventoryMenu when inventory lists are invalid 2012-06-03 22:31:00 +03:00
Perttu Ahola
f3ec1452cd Random node metadata things 2012-06-03 22:31:00 +03:00
Perttu Ahola
29f03756bd Attempt to begin to implement chests and furnace in Lua (with problems) 2012-06-03 22:31:00 +03:00
Perttu Ahola
fe8c5546f0 Add node on_construct, on_destruct callbacks and update lua_api.txt 2012-06-03 22:31:00 +03:00
darkrose
c4315a7afa Strip unneeded variables from NodeMetadata 2012-06-03 22:31:00 +03:00
Kahrl
704782c95b WIP node metadata, node timers 2012-06-03 22:31:00 +03:00
Perttu Ahola
67059e1932 Catch VersionMismatchException while loading world data 2012-06-03 20:42:49 +03:00
Perttu Ahola
e2ea711136 Check password hash validity 2012-06-03 20:32:44 +03:00
Perttu Ahola
74aa598769 Fix MSVC build (pow type overload stuff) 2012-05-31 20:22:37 +03:00
Perttu Ahola
747ff7daf8 Add support for putting modpacks directly into mod directories 2012-05-21 19:49:35 +03:00
Perttu Ahola
1f670fc688 Add better trace peudo-loglevel support 2012-05-20 18:30:30 +03:00
Perttu Ahola
388906ac70 Allow using --worldname for local game too 2012-05-20 17:41:40 +03:00
Perttu Ahola
49d9745dc4 Comment out unnecessary debug output in Settings 2012-05-20 17:19:48 +03:00
Perttu Ahola
7c15d793ac --world list 2012-05-20 17:09:46 +03:00
Perttu Ahola
d90cb3511c Better description of static_spawnpoint in minetest.conf.example 2012-05-20 16:59:13 +03:00
Perttu Ahola
5100272dc3 Update minetest.conf.example a bit 2012-05-20 14:54:02 +03:00
Perttu Ahola
afda9810f1 Tune smooth lighting a bit 2012-05-20 14:12:17 +03:00
Perttu Ahola
22df8b81b3 Log more stuff in Client::afterContentReceived() 2012-05-19 17:11:41 +03:00
Perttu Ahola
7a427c9070 Take out the "Privileges of foo are hidden from you." response of /privs 2012-05-19 12:42:55 +03:00
Perttu Ahola
a35e4bdbda Add a hack to get rid of the rare "ERROR: StaticObjectList::insert(): id already exists" failure 2012-04-15 14:37:35 +03:00
Perttu Ahola
0aeb5adb8f Fix continuing to process TOSERVER_INIT2 even if player doesn't exist 2012-04-14 18:46:10 +03:00
Perttu Ahola
9c5cc217bf Add "Registered definitions of stuff" to doc/lua_api.txt 2012-04-14 11:24:18 +03:00
Perttu Ahola
24603d7ad3 Fix executing register_chatcommand-defined commands even in the middle of a chat line 2012-04-13 17:20:48 +03:00
Perttu Ahola
1eac6ff8ff Fix unhandled InvalidPositionException 2012-04-10 18:16:03 +03:00
Perttu Ahola
8742b3dab2 basic_privs to allow granting/revoking interact_extra too 2012-04-10 00:41:28 +03:00
Perttu Ahola
93cdc9b9dc Support static_spawnpoint setting 2012-04-09 23:32:13 +03:00
Perttu Ahola
8ed74a3429 Fix ABM handling on block activation 2012-04-09 23:06:24 +03:00
Perttu Ahola
07a5e59ae7 Allow redefining minetest.item_place and the like 2012-04-09 21:14:16 +03:00
Perttu Ahola
f8c2f1cf54 Make client know about reverted disallowed diggings 2012-04-09 21:13:22 +03:00
Perttu Ahola
b1f043d010 Add basic_privs privilege 2012-04-09 18:57:41 +03:00
Perttu Ahola
251c0c8508 Improve doc/lua_api.txt and add minetest.get_item_group(name, group) 2012-04-09 12:36:25 +03:00
Perttu Ahola
3214daca4c Fix unable to join server first time with a password 2012-04-09 11:24:35 +03:00
Perttu Ahola
e4485f5412 Call this 0.4.dev-20120408 2012-04-08 23:55:17 +03:00
Perttu Ahola
4eaaa0ec53 Add minimal documentation about the $world/game/ addition 2012-04-08 23:32:53 +03:00
Perttu Ahola
42323014ea Support placing a minetest game inside $world/game to allow creating proper adventure maps
Pro-tip: You can open a world in minetest by opening the world.mt file using minetest.
2012-04-08 23:17:02 +03:00
Perttu Ahola
c59d139eeb Fix crash after 'LuaEntity name "particles:smoke" not defined' and similar errors 2012-04-08 23:16:15 +03:00
Perttu Ahola
2b4d21160f minetest.get_node_group(name, group) 2012-04-08 18:39:55 +03:00
Perttu Ahola
e29a5b11e4 EnvRef:find_nodes_in_area(minp, maxp, nodenames) 2012-04-08 14:37:12 +03:00
Perttu Ahola
b58ee690a3 Allow looping of local and positional sounds 2012-04-08 14:35:57 +03:00
Perttu Ahola
d8edd3d0c8 Make lava brighter by showing light sources at their full emitted light level 2012-04-08 04:01:12 +03:00
Perttu Ahola
1b078efd5f Improve texture atlas generation 2012-04-07 23:37:12 +03:00
q66
e8e73d37fb Fullscreen, vsync, fullscreen_bpp and fsaa options in the config; fsaa is experimental atm, causes visible spaces between blocks. 2012-04-07 23:23:00 +03:00
Perttu Ahola
2eec788544 Improve doc/lua_api.txt 2012-04-07 19:59:03 +03:00
Perttu Ahola
dca28b9e12 Tune mapgen 2012-04-07 19:57:26 +03:00
Perttu Ahola
e879c92596 Fix collision code getting stuck if speed is 0 2012-04-07 19:19:36 +03:00
Perttu Ahola
7281c68b27 Fix segfault when setting privileges of a non-connected player 2012-04-07 18:46:10 +03:00
Perttu Ahola
d228f1b658 Fix fabs() brainfart 2012-04-07 18:05:06 +03:00
Perttu Ahola
2e60593c5b Tune desert beaches 2012-04-07 17:59:24 +03:00
Perttu Ahola
531fe10f51 Fix MSVC ambiguous fabs() call errors 2012-04-07 16:47:45 +03:00
Perttu Ahola
454b07455a Add deserts to map generator 2012-04-07 15:36:51 +03:00
Perttu Ahola
a4dc6f2c76 Tune mapgen a bit 2012-04-07 14:08:49 +03:00
Sergey Gilfanov
5608f12f9b PerlinNoise for Lua. 2012-04-07 13:39:01 +03:00
Perttu Ahola
18d8e3acec Support custom textures installed as /textures/all/*.png 2012-04-07 10:43:06 +03:00
Perttu Ahola
578fc5bb44 Add EnvRef:find_node_near(pos, radius, nodenames) 2012-04-06 22:44:42 +03:00
Perttu Ahola
e8660cfd8e Add missing mapgen.lua to games/minimal 2012-04-06 21:09:23 +03:00
Perttu Ahola
6a57eabb14 Handle failing openal init properly, add enable_sound and sound_volume settings 2012-04-06 15:30:36 +03:00
Perttu Ahola
a67540807a Add #include <unistd.h> to filesys.cpp 2012-04-06 14:56:14 +03:00
Perttu Ahola
20c377ca65 experimental:soundblock dig_immediate=3 2012-04-06 11:20:51 +03:00
Perttu Ahola
5436f1c7d5 Attempt to fix sound left-right channels 2012-04-06 00:39:37 +03:00
Perttu Ahola
4107390337 Make the minimal development test somewhat playable by adding ore generation and removing the player visual switch test 2012-04-05 21:42:33 +03:00
Perttu Ahola
e74da72b82 Fix crash when inputting only / in chat 2012-04-05 21:18:42 +03:00
Perttu Ahola
24953ba974 Fix super-small size of regular item entities 2012-04-04 22:57:29 +03:00
Perttu Ahola
22a5a1fa43 Show reported map seed on debug info (F5) 2012-04-04 22:43:54 +03:00
Perttu Ahola
7bac62ee7f Minimally update compiling on Windows in README.txt 2012-04-04 21:30:54 +03:00
Perttu Ahola
fcda11c6b0 Add to README.txt's example dependencies on Linux: libogg-dev libvorbis-dev libopenal-dev 2012-04-04 21:13:03 +03:00
Perttu Ahola
66e1cb324c Fix visual='cube' size 2012-04-04 18:10:10 +03:00
Perttu Ahola
a869d23451 Fix sound direction and add experimental:soundblock alias sb in minimal for testing 2012-04-04 13:32:08 +03:00
Perttu Ahola
41f4941b74 Remove debug output 2012-04-04 13:20:56 +03:00
Perttu Ahola
b22168d3da Fix dropped nodeitem visuals 2012-04-04 13:16:09 +03:00
Perttu Ahola
b9b56bac6b Fix buildbot 2012-04-03 08:55:13 +03:00
Perttu Ahola
fa670fa4b5 Add util/buildbot 2012-04-03 08:48:44 +03:00
Perttu Ahola
b131a0cf0c Add optional MINGWM10_DLL to cmake install 2012-04-03 01:03:31 +03:00
Perttu Ahola
d7cef8d762 Add multiplayer test script 2012-04-03 00:32:08 +03:00
Perttu Ahola
4483fc7df3 Fix installation path of minetest_game/mods (// in place of / doesn't work on virtualbox network drives) 2012-04-02 22:50:46 +03:00
Perttu Ahola
2cd5addc0c Fix things for cross-compiling using mingw 2012-04-02 21:14:30 +03:00
Perttu Ahola
5bf06efb2a Tune cave generation 2012-04-02 08:51:05 +03:00
Perttu Ahola
5196e309b8 Improve caves more 2012-04-02 02:49:21 +03:00
Perttu Ahola
bee1adc651 Some completely crapshit coding to make caves more varied 2012-04-01 20:54:36 +03:00
Perttu Ahola
f0e7da8a63 Implement dropped items as LuaEntities; leave the old ones as is for compatibility 2012-04-01 16:06:01 +03:00
Perttu Ahola
5bd32eca0f Fix disabling of player movement cheat detection in singleplayer 2012-04-01 13:37:07 +03:00
Perttu Ahola
491287c0af Don't apply player movement cheat detection in singleplayer 2012-04-01 13:19:50 +03:00
Perttu Ahola
8ecfd88d92 Remplement and improve /setting in Lua, now called /set 2012-04-01 13:08:52 +03:00
Perttu Ahola
b54178bbbd Don't allow /granting unknown privileges 2012-04-01 12:45:38 +03:00
Perttu Ahola
67547f74fc Split builtin.lua to multiple files 2012-04-01 12:38:19 +03:00
Perttu Ahola
56ba193c77 Allow getting the path of builtin.lua using minetest.get_modpath("__builtin") 2012-04-01 12:38:14 +03:00
Perttu Ahola
d5594e431c granting and revoking of all privileges at once 2012-04-01 01:10:29 +03:00
Perttu Ahola
7bfa2d4da6 Add license of Lua in README.txt 2012-03-31 19:30:17 +03:00
Perttu Ahola
4cf00f5698 Change default privileges from "build, shout" to "interact, shout" 2012-03-31 17:48:46 +03:00
Perttu Ahola
a18326e97a Fix authentication handler reporting failed password change while it isn't 2012-03-31 17:41:04 +03:00
Perttu Ahola
36c9463467 Improve /grant and /revoke output, add /auth_reload 2012-03-31 17:26:44 +03:00
Perttu Ahola
13159c1a48 Add server-side enforcement of the 'fast' privilege; also fix client checking 'fly' instead of 'fast' 2012-03-31 17:08:39 +03:00
Perttu Ahola
0fbef74f31 Fix client.h getting included on the server build 2012-03-31 16:32:00 +03:00
Perttu Ahola
52122c342d Add 'fly' and 'fast' privileges and the underlying privileges-to-client system 2012-03-31 16:25:02 +03:00
Perttu Ahola
96ee73f790 Fix doc/lua_api.txt 2012-03-31 14:27:04 +03:00
Perttu Ahola
dc70f50b59 initial_properties field in entity definition 2012-03-31 13:50:25 +03:00
Perttu Ahola
e297c73913 More documentation in doc/lua_api.txt 2012-03-31 13:08:17 +03:00
Perttu Ahola
280e1a2512 Allow group:groupname in ABM definition and implement minetest.hash_node_position() 2012-03-31 12:30:11 +03:00
Jonathan Neuschäfer
1518b8f753 cmake: lua: use COMMON_CFLAGS
This fixes LUA_USE_DLOPEN having no effect.
2012-03-31 01:31:17 +03:00
Perttu Ahola
5403b1cf6d Install minetest_game without .git and other unnecessary things 2012-03-31 00:05:01 +03:00
Perttu Ahola
29110d5428 Fix handling of missing auth.txt in the new handler 2012-03-30 23:12:01 +03:00
Perttu Ahola
462003363f Make server ignore media files with unknown filename extensions 2012-03-30 22:49:44 +03:00
Perttu Ahola
b494324ec3 Fix admin password handling in minetest.builtin_auth_handler.get_auth 2012-03-30 21:25:54 +03:00
Perttu Ahola
4cee9a86ac Improved teleport command 2012-03-30 20:54:57 +03:00
Perttu Ahola
7cad0a2dcd Reimplement authentication handler in Lua; now we have 1) infinite privilege names, 2) minetest.register_authentication_handler() 2012-03-30 18:42:18 +03:00
Perttu Ahola
ed1ff06867 Fix the position of LuaEntityCAOs not getting updated at all 2012-03-30 13:55:08 +03:00
Perttu Ahola
80a64341f0 Add minetest.get_connected_players() 2012-03-30 13:45:51 +03:00
Perttu Ahola
bbf3eebb1a Fix object visuals flashing brightly or disappearing when switching them at night 2012-03-30 13:44:48 +03:00
Perttu Ahola
6b20ea0752 Fix walking sound of other players (and other objects) 2012-03-30 13:34:25 +03:00
Perttu Ahola
3241ad3ae8 ObjectRef:set_armor_groups() and ObjectRef:set_properties() - works on players too! 2012-03-30 13:34:21 +03:00
Perttu Ahola
9e7ccedba4 ObjectProperties 2012-03-30 12:51:51 +03:00
Perttu Ahola
b9ffb5f30d minetest.register_chatcommand(cmd, def) 2012-03-30 01:45:23 +03:00
Perttu Ahola
9d456ca87a Raise the player fall damage threshold to a much more fun level 2012-03-29 23:32:56 +03:00
Perttu Ahola
18350ad37f Improve the look of fences 2012-03-29 22:59:43 +03:00
Kahrl
0983f65da7 [transformN image modifier 2012-03-29 22:58:01 +03:00
Perttu Ahola
42bbd5c9ae Simple fix for camera blinking black when jumping into ceiling with current smaller collision box 2012-03-29 21:21:34 +03:00
Perttu Ahola
92ae11bd3b Use GenericCAO in place of LuaEntityCAO and PlayerCAO 2012-03-29 19:42:42 +03:00
Perttu Ahola
443f45eca1 Add GenericCAO and player armor groups, but don't use them yet 2012-03-29 16:10:11 +03:00
Kahrl
a9ddbb4beb on_joinplayer + on_leaveplayer + scriptapi_run_callbacks + bugfix
Add minetest.register_on_joinplayer and minetest.register_on_leaveplayer,
make adding new callbacks to scriptapi.cpp easier by adding
scriptapi_run_callbacks, also fix a minor bug with PlayerSAO <->
singleplayer mode interaction
2012-03-29 14:27:09 +03:00
Kahrl
f8c3743991 added PlayerSAO and RemotePlayer, removed ServerRemotePlayer 2012-03-29 14:05:45 +03:00
Perttu Ahola
072c265c30 Modify minimal/give_initial_stuff to always give stuff 2012-03-29 13:39:18 +03:00
Perttu Ahola
440e9cdbef Rework tool_capabilities a bit (maxwear->uses, scale dig time according to leveldiff) 2012-03-29 13:35:20 +03:00
Perttu Ahola
ace005bf7c Try a default day+night length of 20 minutes instead of 15 2012-03-29 11:41:41 +03:00
Perttu Ahola
75821c6889 Generate beaches 2012-03-29 03:44:37 +03:00
Perttu Ahola
d376148ca1 Generate blobs of dirt and gravel in stone 2012-03-29 02:23:59 +03:00
Perttu Ahola
582ca33507 Remove unnecessary debug output 2012-03-29 01:38:13 +03:00
Perttu Ahola
a6ca7eb29d Area-based MapEditEvent ignore and that put to use for on_generate too 2012-03-29 01:22:08 +03:00
Perttu Ahola
02c035c548 Reduce EnvRef:set_node() time tenfold by postponing the dayNightDiff update until it is actually needed 2012-03-29 00:28:48 +03:00
Perttu Ahola
418041d906 Fix on_generate minp/maxp (was broken due to chunkymapgen) 2012-03-28 23:11:28 +03:00
Perttu Ahola
a3a400992e Add EnvRef:set_node() 2012-03-28 22:50:08 +03:00
Perttu Ahola
68625b047f Add range option to PseudoRandom:next() 2012-03-28 22:01:23 +03:00
Perttu Ahola
9a1df7bf38 Add blockseed to on_generated 2012-03-28 22:01:21 +03:00
Perttu Ahola
81b9cfdfa4 Default to having fancy trees and 3d clouds turned on 2012-03-28 14:10:54 +03:00
Perttu Ahola
ae7aa65069 Add minetest.is_singleplayer() 2012-03-28 13:22:48 +03:00
Perttu Ahola
9e0f969b8b doc/lua_api.txt: minetest.get_worldpath(modname) -> minetest.get_worldpath() 2012-03-28 13:01:35 +03:00
Perttu Ahola
14a8fa4d68 Correctly lock mutexes when the server sends MapEditEvents (could cause memory corruption) 2012-03-28 12:51:47 +03:00
Perttu Ahola
07e5c9bd5f No occlusion culling when free_move is on and camera is inside ground 2012-03-28 12:19:25 +03:00
Perttu Ahola
49c2ca0216 Make mapgen use mapgen_* node aliases rather than the LEGN macro 2012-03-28 01:26:15 +03:00
Perttu Ahola
04172e3dd0 Add PseudoRandom in Lua API 2012-03-28 00:38:20 +03:00
Perttu Ahola
2c56a9f588 Tune skybox 2012-03-27 23:30:41 +03:00
Perttu Ahola
20e025b3d8 Try to make background/fog/sky color selection work better 2012-03-27 22:41:07 +03:00
Perttu Ahola
10591d2080 Set default minimum viewing range of 35 nodes 2012-03-27 19:57:24 +03:00
Perttu Ahola
af29c0ade5 Unrelated, but anyway: tune light levels again 2012-03-27 19:25:25 +03:00
Perttu Ahola
4c876ac62e Tune caves 2012-03-27 19:09:08 +03:00
Perttu Ahola
66bf7b0b01 Fix deep ground cave generation a bit 2012-03-27 19:09:08 +03:00
Perttu Ahola
17d51a1609 Fix mapgen block_is_underground heuristic 2012-03-27 19:09:07 +03:00
Perttu Ahola
0a59605e05 Tune mapgen 2012-03-27 19:09:07 +03:00
Perttu Ahola
202658678d Set default maximum viewing range to a bit more than default server send range to make fog work well 2012-03-27 19:09:07 +03:00
Perttu Ahola
4f01db256f Re-implement and re-tune mapgen v2 2012-03-27 19:05:59 +03:00
Perttu Ahola
c04f4a7d73 Tune generation responsiveness and cheat inhibition on server 2012-03-27 19:05:59 +03:00
Perttu Ahola
f5e46ba7fc Increase maximum generate distance now that generation might actually keep up with it 2012-03-27 19:04:59 +03:00
Perttu Ahola
8609af54fc Remove usage of mapgen::add_random_objects(block) 2012-03-27 19:01:52 +03:00
Perttu Ahola
9a4ef87859 Remove no-op mapgen::add_random_objects 2012-03-27 19:01:52 +03:00
Perttu Ahola
a57f4c23d8 Fix inexistent_top_provides_sunlight heuristic in make_block and remove clitch-causing optimization 2012-03-27 19:01:52 +03:00
Perttu Ahola
d629f4d2fb Remove some debug output 2012-03-27 19:01:52 +03:00
Perttu Ahola
6f20a73782 Tune block fetching to clients on server 2012-03-27 19:01:52 +03:00
Perttu Ahola
8cb7badd63 Do post-mapgen lighting using the VoxelManipulator-based functions (causes glitches currently) 2012-03-27 19:01:51 +03:00
Perttu Ahola
0f3c2f6541 voxalgo::clearLightAndCollectSources 2012-03-27 19:01:51 +03:00
Perttu Ahola
56496ad5d8 Implement propagateSunlight for VoxelManipulator 2012-03-27 19:01:50 +03:00
Perttu Ahola
e15dca2a9f Fix tree generation density for different mapgen chunk sizes 2012-03-27 18:52:36 +03:00
Perttu Ahola
a32706bc26 Post-mapgen lighting optimization 2012-03-27 18:52:36 +03:00
Perttu Ahola
bdcca4767c Make mapgen generate stuff in chunks of 3^3 mapblocks 2012-03-27 18:52:36 +03:00
Perttu Ahola
38f4dbfb51 Update minetest.conf.example and defaultsettings.cpp 2012-03-27 18:51:21 +03:00
Perttu Ahola
a374b1a6a3 Increase vertical FOV on lower aspect ratios (<16:10) 2012-03-27 18:39:21 +03:00
Perttu Ahola
0ff94978f5 Fix minetest_game installation and don't fail if it doesn't exist 2012-03-27 17:33:51 +03:00
Perttu Ahola
fa24e6b995 Fix and extend minetest.after(time, func, param) 2012-03-27 08:17:42 +03:00
Perttu Ahola
37b64ff616 Add minetest.after(time, func) 2012-03-27 00:37:31 +03:00
Perttu Ahola
a2fd8d1db1 Add default_grass_footstep.1.ogg as a test sound in minimal 2012-03-27 00:36:31 +03:00
Perttu Ahola
684b004751 Update version number to 0.4.dev-20120326 because much has changed from the previous one 2012-03-27 00:07:25 +03:00
Perttu Ahola
cbe11fc7aa Do a dumb-ass static string copy for const-incorrect old versions of ov_fopen 2012-03-27 00:06:26 +03:00
Perttu Ahola
d01387a82f Add games/minimal/game.conf 2012-03-26 23:50:24 +03:00
Perttu Ahola
862d76b617 Move games/minetest to games/minimal and update README.txt 2012-03-26 23:28:19 +03:00
Perttu Ahola
bd9912213f Prefer _game postfix in game names (to be squashed to the previous commit) 2012-03-26 23:17:29 +03:00
Perttu Ahola
814ada538a Support _game postfix in game names, taking it out to make the gameid 2012-03-26 23:16:02 +03:00
Perttu Ahola
53f7eef052 Add game.conf check in subgame.cpp 2012-03-26 23:02:12 +03:00
Perttu Ahola
405347769a New world removal GUI code 2012-03-26 08:37:15 +03:00
Perttu Ahola
5b31d32da8 Better file/directory removal platform code and utilities 2012-03-26 08:36:59 +03:00
Perttu Ahola
dcef5183f7 Small fix to fs::GetDirListing when trying to list an inexistent directory 2012-03-25 23:16:53 +03:00
Perttu Ahola
728d01ef4b MSVC build directory autodetection at startup 2012-03-25 23:10:09 +03:00
Perttu Ahola
0557df8d06 Add OPENAL_DLL LIBOGG_DLL LIBVORBIS_DLL and LIBVORBISFILE_DLL to be used optionally when installing 2012-03-25 22:50:09 +03:00
Perttu Ahola
3a9753b85f Add OGG_INCLUDE_DIR to SOUND_INCLUDE_DIRS 2012-03-25 22:07:34 +03:00
Perttu Ahola
8e6ac5c263 Fix cmake install script (mesetint -> minetest) 2012-03-25 21:41:37 +03:00
Perttu Ahola
188b303991 Don't try to use sound if building only server 2012-03-25 21:10:25 +03:00
Perttu Ahola
836595313c Raise PROTOCOL_VERSION to 9, as this is not compatible with earlier versions 2012-03-25 20:36:02 +03:00
Perttu Ahola
6779036d25 Make server world selection not brain dead and use gameid 'minetest' instead of 'mesetint' 2012-03-25 20:30:58 +03:00
Perttu Ahola
4fb6c07535 Change postfixes from N.ogg to .N.ogg in user/testsounds/ loader 2012-03-25 18:51:05 +03:00
Perttu Ahola
f01c988094 Some serialization version stuff 2012-03-25 18:45:27 +03:00
Perttu Ahola
677456d319 Initialize utility.h return values to 0 to make lazily error-checked deserialization code work less chaotically 2012-03-25 17:09:24 +03:00
Perttu Ahola
f022af66da Update doc/lua_api.txt 2012-03-25 16:22:02 +03:00
Perttu Ahola
98c40f5ee6 Switch sound randomizer postfixes from N.ogg to .N.ogg 2012-03-25 16:21:34 +03:00
Perttu Ahola
db0928add3 Sound loading from memory (by using a quick hack) 2012-03-25 15:52:43 +03:00
Perttu Ahola
a9a923e4da Update/fix .gitignore 2012-03-25 15:52:08 +03:00
Perttu Ahola
1cac1de3b2 Almost support loading sounds from server 2012-03-25 14:48:22 +03:00
Perttu Ahola
524c78a8d6 Add a variant of hex_encode 2012-03-25 14:48:19 +03:00
Perttu Ahola
e71262463f Add removeStringEnd() 2012-03-25 14:48:14 +03:00
Perttu Ahola
26666bb36f Add more media directories; mod/{textures,sounds,media} 2012-03-25 12:10:58 +03:00
Perttu Ahola
f801e16b78 Texture cache -> Media cache WIP 2012-03-25 11:51:33 +03:00
Jonathan Neuschäfer
4bf5065a9c Cache textures by checksum 2012-03-25 11:51:00 +03:00
Perttu Ahola
04085cad3c Make event_manager.h build on MSVC 2012-03-25 04:06:45 +03:00
Perttu Ahola
c8997e48c0 Build configuration fixes/improvements on Windows 2012-03-25 04:03:51 +03:00
Perttu Ahola
77621568fd Fix build on MinGW (as compared to Linux) 2012-03-24 23:16:09 +02:00
Perttu Ahola
601d1936c9 Lua API for playing sounds 2012-03-24 19:01:26 +02:00
Perttu Ahola
06e93f8d95 Add sound.dig 2012-03-24 11:10:28 +02:00
Perttu Ahola
74780134f2 Update doc/lua_api.txt 2012-03-24 04:32:31 +02:00
Perttu Ahola
93219e3b9d Add sounds, tune things 2012-03-24 04:24:26 +02:00
Perttu Ahola
77120a021d Digging and placing sounds 2012-03-24 04:24:26 +02:00
Perttu Ahola
6c14025b2d Add event manager and use it to trigger sounds 2012-03-24 04:24:26 +02:00
Perttu Ahola
e53794868e LocalPlayer::getStandingNodePos() 2012-03-24 04:24:26 +02:00
Perttu Ahola
8c2f3bb378 c55sound continued 2012-03-24 04:24:25 +02:00
Perttu Ahola
0ac2ce7dea Update/fix/improve config.h and cmake_config.h.in 2012-03-24 04:24:25 +02:00
Perttu Ahola
c301e3c82a celeron55's sound system initial framework 2012-03-24 04:24:23 +02:00
Perttu Ahola
9dd78a8a45 Seriously WTF, LLVM/clang? 2012-03-23 00:45:18 +02:00
Perttu Ahola
ede1674d6a Fix filesys.cpp debug output to go into debug.txt 2012-03-23 00:05:32 +02:00
Perttu Ahola
c3f2b24a9a Remove useless clearing of the Z buffer 2012-03-22 22:15:38 +02:00
Perttu Ahola
b91bba1ab2 Install lua_api.txt and mapformat.txt in because awesome. 2012-03-22 17:08:32 +02:00
Perttu Ahola
fbc22f91d5 Update doc/lua_api.txt and doc/mapformat.txt even more 2012-03-22 17:02:40 +02:00
Perttu Ahola
424b36d469 Describe format of nodes in doc/mapformat.txt 2012-03-22 16:12:33 +02:00
Perttu Ahola
8070f9485b Update doc/mapformat.txt 2012-03-22 15:54:12 +02:00
Perttu Ahola
c353709f7e mapformat WIP 2012-03-22 14:11:20 +02:00
Perttu Ahola
c13691a8e6 Add output levels --info and --trace (--verbose is now more verbose) 2012-03-22 14:10:37 +02:00
Perttu Ahola
2671b9af1b Move headers from socket.h to socket.cpp 2012-03-22 13:41:50 +02:00
Perttu Ahola
7d0ad0f521 Fix UDPSocket's debug output 2012-03-22 13:36:37 +02:00
Perttu Ahola
9bd75d5668 Log at info level when a banned client connects 2012-03-22 13:35:32 +02:00
Perttu Ahola
fde676a43a Add more information to lua_api.txt 2012-03-22 12:14:45 +02:00
Perttu Ahola
2469ce6067 Update Lua API documentation and move it into doc/lua_api.txt 2012-03-22 11:41:40 +02:00
Perttu Ahola
ef0ec31554 Goddamn MSVC pow overload ambiguities 2012-03-21 22:11:15 +02:00
Perttu Ahola
da4f51332f Add ScopeProfilerType SPT_GRAPH_ADD 2012-03-21 15:38:24 +02:00
Perttu Ahola
194258b479 Add different automatic profiler graph drawing style for relative-ish plots 2012-03-21 15:06:45 +02:00
Perttu Ahola
fa416e7116 Add more graph colors, add mainloop_dtime graph, make statustext fade away faster 2012-03-21 15:06:44 +02:00
Perttu Ahola
71b2e0e002 Modify and clean main loop to allow measuring the proper times 2012-03-21 15:06:44 +02:00
Perttu Ahola
7d1ac4d1f6 Profiler graph 2012-03-21 15:06:41 +02:00
Perttu Ahola
2f2ef80ec2 Use atof() in mystof(), because istringstream>>float randomly causes a segfault on mingw 2012-03-21 02:16:22 +02:00
Perttu Ahola
c0530921ff Attempt to fix some minor memory leaks 2012-03-20 17:55:34 +02:00
Perttu Ahola
94f1ab4da3 Call this 0.4.dev-20120320 2012-03-20 01:37:28 +02:00
Perttu Ahola
3f75b748cf Fix various things being too fast to break by hand 2012-03-20 01:36:53 +02:00
Perttu Ahola
8181b68531 Remove .hgignore and .hgtags (mercurial isn't used anymore) 2012-03-20 01:28:23 +02:00
Perttu Ahola
2de91f11fb Add mods/mesetint/mods_here.txt to be installed on RUN_IN_PLACE builds 2012-03-20 01:19:47 +02:00
Perttu Ahola
50621ffe85 Fix mod paths 2012-03-20 01:07:02 +02:00
Perttu Ahola
db4911f956 Fix for MSVC and move stuff around a bit in CMakeLists.txt and src/CMakeLists.txt 2012-03-20 01:06:58 +02:00
Perttu Ahola
2a325de7aa Update vc10 build script example in README.txt 2012-03-20 00:37:37 +02:00
Perttu Ahola
b9cc0a7976 Move icon files to misc/ 2012-03-20 00:32:43 +02:00
Perttu Ahola
97b693052c Flatten share/ and user/ in the source and for the RUN_IN_PLACE build 2012-03-20 00:08:00 +02:00
Perttu Ahola
19ed3bb193 Move share/builtin.lua to share/builtin/builtin.lua 2012-03-19 21:37:27 +02:00
Perttu Ahola
895b970a10 Move client textures to the correct place 2012-03-19 21:34:21 +02:00
Perttu Ahola
1f56d71f19 Rework directory structure 2012-03-19 20:44:07 +02:00
Perttu Ahola
1ff20da5b6 Add the mod search path user/mods/gameid 2012-03-19 08:34:38 +02:00
Perttu Ahola
5ef78cd815 Make Lua error output in log clearer 2012-03-19 08:23:48 +02:00
Perttu Ahola
9101b680c0 Do not error() on digprop_* calls but print a warning 2012-03-19 08:23:11 +02:00
Perttu Ahola
d24c56fd4b Unknown nodes can be dug 2012-03-19 08:16:17 +02:00
Perttu Ahola
77d09552ae Warn instead of completely removing minetest.digprop_whatever() Lua functions 2012-03-19 00:29:41 +02:00
Perttu Ahola
dbaccff476 Remove minetest.digprop_whatever() Lua functions (because they are useless now) 2012-03-19 00:20:50 +02:00
Perttu Ahola
dc6cf5cdee Update README.txt a bit 2012-03-19 00:12:07 +02:00
Perttu Ahola
fb3ac49335 Update version to 0.4.dev-20120318 2012-03-18 19:14:20 +02:00
Perttu Ahola
c54a40df06 Attempt to fix build for MSVC 2012-03-18 19:08:13 +02:00
Perttu Ahola
9c4f68e174 Fix getVisibleBrightness() to return sunlight visibility correctly even if not much of world has been loaded 2012-03-18 18:30:21 +02:00
Perttu Ahola
4ee4dfdc13 Make some things diggable by hand by using a special group oddly_breakable_by_hand; also fill in some other groups 2012-03-18 18:20:55 +02:00
Perttu Ahola
2e0c0e9d89 Fix old world search path for non-run-in-place build 2012-03-18 17:17:05 +02:00
Perttu Ahola
db5db587be Move doc/changelog.txt and doc/ancient_main_comment.txt into old/ 2012-03-18 16:43:51 +02:00
Perttu Ahola
569fca5308 Disable word wrap in vertical texts in main menu 2012-03-18 16:32:59 +02:00
Perttu Ahola
b409803527 Fix installation in cmake project files 2012-03-18 16:30:02 +02:00
Perttu Ahola
99d257ae8b "or" -> "||" in content_mapblock.cpp 2012-03-18 16:07:17 +02:00
Perttu Ahola
2f2b7915ea Fix and tune stars 2012-03-18 15:57:25 +02:00
Perttu Ahola
c1cfcb1577 Do not clear address in main menu if starting a singleplayer game by double clicking the world 2012-03-18 15:26:06 +02:00
Perttu Ahola
2e90ed07ac Dynamic sky, fog and cloud colors; sun and moon 2012-03-18 13:42:18 +02:00
Perttu Ahola
58bed83d03 Move ClientMap to clientmap.{h,cpp} 2012-03-16 00:25:18 +02:00
Perttu Ahola
54917e3062 Add Client::getEnv() and remove some unnecessary wrappers 2012-03-15 23:54:10 +02:00
Perttu Ahola
81385682c8 Revert old 4BS/s walk speed for now 2012-03-15 23:11:07 +02:00
Kahrl
807a0d313b MapBlockMesh, mesh animation system, urgent mesh updates, athmospheric light, removed footprints 2012-03-15 21:45:44 +02:00
Perttu Ahola
f9a66c5d46 Tune main menu 2012-03-15 21:37:43 +02:00
Perttu Ahola
60add387e3 Create main menu tab "Settings" for client settings 2012-03-15 18:15:12 +02:00
Perttu Ahola
ca0fd4173c Fix click areas of singleplayer checkboxes 2012-03-15 16:20:26 +02:00
Perttu Ahola
4aa0f040fb Fix initial moving of mouse above the "exit to menu" button in singleplayer mode 2012-03-15 16:20:21 +02:00
Perttu Ahola
5957fed9a7 Fix and improve Server's privilege get/setters 2012-03-15 15:38:59 +02:00
Perttu Ahola
6298878bfa Add "simple singleplayer mode"; Fix a number of GUI things 2012-03-15 15:20:20 +02:00
Perttu Ahola
899004207d Save selected tab 2012-03-15 14:17:05 +02:00
Perttu Ahola
2b200d481f Menu tuning WIP 2012-03-15 13:59:48 +02:00
Perttu Ahola
8551ddc839 Use a more standard order of yes/no/cancel/whatever buttons in dialogs 2012-03-15 13:18:21 +02:00
Perttu Ahola
eea3277b81 Crude tab test in main menu (requires gui redesign for the additional tabs) 2012-03-13 08:50:03 +02:00
Perttu Ahola
11b86f8d8a Add [new] to world name when supplying a non-existent world on command line 2012-03-13 01:46:24 +02:00
Perttu Ahola
71a3c2fcd1 Allow directly supplying world as a parameter, including world.mt 2012-03-13 01:46:19 +02:00
Perttu Ahola
4ff36696ea Move keychange/connect main menu buttons a bit 2012-03-13 01:02:25 +02:00
Perttu Ahola
800d3b4ee7 Fix game selection in world creation (used always the first one) 2012-03-13 00:58:57 +02:00
Perttu Ahola
a0b2c7ba25 Attempt to fix RUN_IN_PLACE autodetection on Linux 2012-03-13 00:51:33 +02:00
Perttu Ahola
64232f0aec Add confirmation menu and make world deletion possible in GUI 2012-03-13 00:48:05 +02:00
Perttu Ahola
591527d878 World creation button and dialog and functionality 2012-03-13 00:06:37 +02:00
Perttu Ahola
82073025cc Remember selected world by path 2012-03-12 22:15:56 +02:00
Perttu Ahola
2c9bb06516 Make finish quicktune and leave it unused (as intended) 2012-03-12 21:27:29 +02:00
Perttu Ahola
18c4a90101 Add quicktune.{cpp,h} 2012-03-12 08:38:15 +02:00
Perttu Ahola
5a8ee4889d Handle certain errors properly when using --go 2012-03-11 21:41:32 +02:00
Perttu Ahola
ea1fdf3201 Add a note about minetest.conf in the key change dialog (because it sucks) 2012-03-11 21:32:03 +02:00
Perttu Ahola
2e61008fd9 Use default_game when making a new world using --world without --gameid 2012-03-11 21:24:29 +02:00
Perttu Ahola
eafde7186f Remove duplicate code in main menu 2012-03-11 21:12:27 +02:00
Perttu Ahola
a72dc388c3 Rename "Delete map" to "Delete world" 2012-03-11 21:03:54 +02:00
Perttu Ahola
618314985d Proper handling of failing to bind server socket 2012-03-11 20:45:43 +02:00
Perttu Ahola
d1d83d7e7f World selection box in main menu (and random fixing) 2012-03-11 20:45:14 +02:00
Perttu Ahola
bcaab74f1f --world implies local game 2012-03-11 16:11:07 +02:00
Perttu Ahola
1b670a293b Fix CreateAllDirs() (failed for relative fully non-existing path) 2012-03-11 16:06:32 +02:00
Perttu Ahola
45f78bdf40 Mention world location at server startup at action level 2012-03-11 15:49:14 +02:00
Perttu Ahola
54eca4e736 Redirect Lua print to minetest.debug 2012-03-11 15:41:53 +02:00
Perttu Ahola
3da05a09b5 --logfile '' = no logging 2012-03-11 15:28:35 +02:00
Perttu Ahola
f79082a46d Remove useless debug output (log at info level) 2012-03-11 15:23:30 +02:00
Perttu Ahola
e71d75ed9a --gameid list 2012-03-11 15:20:42 +02:00
Perttu Ahola
a4a35f659b Update --gameid to manpages 2012-03-11 15:13:10 +02:00
Perttu Ahola
9eba6a349f Update version number to 0.4.dev-20120311 2012-03-11 15:10:34 +02:00
Perttu Ahola
6a1b6d0344 world.mt creation 2012-03-11 15:04:50 +02:00
Perttu Ahola
7f7fb9750d command-line/world game selection 2012-03-11 14:54:23 +02:00
Perttu Ahola
df190b8f87 full_punch_interval = 1.0 for mese pickaxe 2012-03-11 12:30:56 +02:00
Perttu Ahola
af33b3b338 Limit crack update speed 2012-03-11 12:28:41 +02:00
Perttu Ahola
a87d19cd7e When mouse button is held down in air, show continuous animation 2012-03-11 12:22:37 +02:00
Perttu Ahola
611fe41588 Fix log output in ban.cpp 2012-03-11 12:12:21 +02:00
Perttu Ahola
8b6cce18cb Improve command-line parameters 2012-03-11 12:06:59 +02:00
Perttu Ahola
d330430336 Prettify --help output 2012-03-11 11:02:22 +02:00
Perttu Ahola
37b2bc3c0c Move huge comment from the beginning of main.cpp to doc/ancient_main_comment.txt 2012-03-11 10:53:27 +02:00
Perttu Ahola
f49914dd17 --verbose, not --info-on-stderr 2012-03-11 04:22:48 +02:00
Perttu Ahola
f1d9880006 Clean up log messages everywhere 2012-03-11 04:15:45 +02:00
Perttu Ahola
6ec447a1aa Do not print errors when searching for usable configuration file 2012-03-11 01:09:27 +02:00
Perttu Ahola
b485fac33e Fix configuration file behaviour
- Do not rewrite if nothing needs to be changed
- Update at program exit, in addition to updating when continuing from main menu to game
2012-03-11 00:54:51 +02:00
Perttu Ahola
98404ad8ea Increase Peer max_packets_per_second (hopefully doesn't break anything) 2012-03-11 00:20:04 +02:00
Perttu Ahola
e1f5227304 Add description in minetest.conf.example 2012-03-10 23:54:45 +02:00
Perttu Ahola
2de8f915f8 Tune "Connecting to server" and "Waiting content" screens 2012-03-10 23:28:51 +02:00
Kahrl
967f25461b Chat console, including a number of rebases and modifications.
Defaults modified from original: alpha=200, key=F10
2012-03-10 20:11:10 +02:00
Perttu Ahola
0053651814 Starting the game in the pause menu is lame, don't do it\! 2012-03-10 18:21:15 +02:00
Kahrl
7d36833bd4 Set fixed FOV for the wielded item 2012-03-10 18:15:31 +02:00
Kahrl
1bbfd0b6d2 Different implementation of KeyPress::operator==
Fixes some key mapping issues.
2012-03-10 18:10:59 +02:00
Perttu Ahola
4547ace59a Make Camera::updateViewingRange more snappy in following the min/max settings 2012-03-10 18:03:40 +02:00
Perttu Ahola
d74659254b Faster player movement and smaller collision box 2012-03-10 17:28:56 +02:00
Perttu Ahola
55d310b05a dig_immediate=2 -> 0.5 seconds digging time 2012-03-10 17:25:14 +02:00
Perttu Ahola
15da308c2a Set rail to have dig_immediate=2 2012-03-10 17:23:36 +02:00
Perttu Ahola
e80bc6ef58 Tidy up server log output a bit 2012-03-10 17:10:16 +02:00
Perttu Ahola
d81e783665 Clean unit test output 2012-03-10 17:10:16 +02:00
Perttu Ahola
030b63c3d2 Add and tidy up some Server log output for declined connections 2012-03-10 17:10:16 +02:00
Perttu Ahola
f3dba05143 Remove servermain.cpp, use main.cpp with a couple of #ifdefs instead 2012-03-10 17:10:16 +02:00
Perttu Ahola
1020707918 Fix addon and configuration file paths 2012-03-10 17:10:16 +02:00
Perttu Ahola
c89d1cf072 Initial directory structure rework 2012-03-10 17:10:10 +02:00
Perttu Ahola
9c5e422d3a Ban and Auth managers use infostream rather than dstream 2012-03-10 15:49:38 +02:00
Perttu Ahola
5e00141005 Replace dig_immediate=1 with dig_immediate=3 in mods/default/init.lua 2012-03-10 11:28:14 +02:00
Perttu Ahola
fa70413c82 Add a small bunch of notes about groups in mods/default/init.lua 2012-03-10 11:28:14 +02:00
Perttu Ahola
06d2bc7fbd dig_immediate=3 instead of 1 means 0 seconds 2012-03-10 11:28:14 +02:00
Perttu Ahola
1ae9e0afa1 Update mini documentation in mods/default/init.lua a bit 2012-03-10 11:28:14 +02:00
Perttu Ahola
f9da2c9507 Immediate smoke puff when a normal entity is punched to death 2012-03-10 11:28:14 +02:00
Perttu Ahola
989aba1966 Fix and tune things, add tool "recharge" animation, add dummyball 2012-03-10 11:28:14 +02:00
Perttu Ahola
6b7d6c27ee Set proper armor group for experimental:tnt 2012-03-10 11:28:13 +02:00
Perttu Ahola
8db89b8136 LuaEntity armor groups 2012-03-10 11:28:13 +02:00
Perttu Ahola
8c01ad8a9d ClientActiveObject::debugInfoText() 2012-03-10 11:28:13 +02:00
Perttu Ahola
f60a5ec08f Remove header in servermain.cpp to make minetestserver to build 2012-03-10 11:28:13 +02:00
Perttu Ahola
501b8fe743 Damage groups WIP 2012-03-10 11:28:13 +02:00
Perttu Ahola
e9cdb938fe Entity damage system WIP; Remove C++ mobs 2012-03-10 11:28:13 +02:00
Perttu Ahola
f1cb91cd93 Small fix in getHitParams 2012-03-10 11:28:13 +02:00
Perttu Ahola
910186905f Don't draw cracks when digging is impossible 2012-03-10 11:28:13 +02:00
Perttu Ahola
07ed57476f itemgroup.h and ItemGroupList typedef 2012-03-10 11:28:13 +02:00
Perttu Ahola
0b21618a05 Tune group digging time stuff a bit 2012-03-10 11:28:13 +02:00
Perttu Ahola
b49a7c140e remove material from minetest.nodedef_default 2012-03-10 11:28:13 +02:00
Perttu Ahola
562ac3bce9 Digging time groups WIP 2012-03-10 11:28:12 +02:00
Jeija
f21291211c Improve raillike drawtype 2012-03-10 11:16:45 +02:00
Perttu Ahola
d834d6e074 Handle select errno EINTR properly (not doing this breaks at least many profilers) 2012-03-08 10:03:29 +02:00
Perttu Ahola
11716825fc Move profiler measurements into inside of mutex locking for more useful results 2012-03-07 21:54:18 +02:00
Perttu Ahola
0309021359 Add dedicated_server_step setting 2012-03-07 21:44:53 +02:00
Perttu Ahola
14a71590c3 Merge remote-tracking branch 'jn/random-fixes' 2012-02-28 21:47:15 +02:00
Juhani Numminen
a5f6d65c37 Add UNIX man pages to aid package creators. 2012-02-28 21:26:14 +02:00
Juhani Numminen
79326e6287 Add descriptions to command line arguments 2012-02-28 21:03:45 +02:00
Juhani Numminen
c8ec711503 Install icon and .desktop file on Unix systems 2012-02-28 21:03:38 +02:00
celeron55
0f8b91bfba Merge pull request #46 from garrosh/master
Add *~ to .gitignore
2012-02-28 10:44:40 -08:00
Perttu Ahola
b7fd3c8669 Add minetest.get_worldpath() for getting location for custom data 2012-02-28 20:41:26 +02:00
Perttu Ahola
b3f4cbe157 Fix pointed.thing.ref -> pointed_thing.ref in builtin.lua 2012-02-28 19:55:24 +02:00
Perttu Ahola
d0491ce8b6 Add descriptions to minetest.conf.example 2012-02-27 14:27:28 +02:00
Jonathan Neuschäfer
806f10524f server: /give: show the actual stackstring 2012-02-24 23:27:01 +01:00
Jonathan Neuschäfer
50110e00e8 creative inventory: update to use default:fence_wood 2012-02-24 23:27:01 +01:00
Jonathan Neuschäfer
3a89c40e26 mesh: warn only once about render-to-target not being supported 2012-02-24 23:27:01 +01:00
Jonathan Neuschäfer
ff678d1607 tile: remove redundant warning about failing render-to-target 2012-02-24 23:27:01 +01:00
Jonathan Neuschäfer
abab3db23d tile: don't duplicate std::string::find_last_of 2012-02-24 23:26:14 +01:00
Jonathan Neuschäfer
496451c164 itemdef: handle the !render-to-target case 2012-02-24 22:37:16 +01:00
Perttu Ahola
993821a924 Tune brightness stuff and fog color 2012-02-06 17:40:48 +02:00
Perttu Ahola
ad5ac22442 Set default maximum viewing range to a bit more than default server send range to make fog work well 2012-02-06 17:34:45 +02:00
Perttu Ahola
94b25685c5 Fix calculating if block is in viewing range; fix fog and default minimum accordingly 2012-02-06 17:27:54 +02:00
Kahrl
88cdd3a363 Players stay in environment even when dead, damage flash and fall damage fixes
Don't set m_removed on dead players (dead players are indicated by hp == 0). Local
damage flash is shown whatever the cause was (even from Lua set_hp). PlayerCAO
damage flash matches duration of local damage flash. Fall damage is dealt much more consistently (this is done by disallowing jumping when speed.Y is very negative, up to now jumping could sometimes negate fall damage)
2012-02-05 12:06:55 +02:00
Perttu Ahola
e15de8b70d Modify light values to work a bit better with non-smooth lighting 2012-02-05 12:02:40 +02:00
Perttu Ahola
61016962ee Add groups = {} to item definition 2012-02-04 02:20:05 +02:00
Perttu Ahola
a1eb2836c0 Set better visual light levels 2012-02-02 16:14:32 +02:00
Giuseppe Bilotta
64af6d3afe Fix some warnings on some compilers
ItemStack is a struct, not a class
CollisionInfo is a struct, not a class
InventoryAction is abstract and it needs a virtual destructor
2012-02-02 15:54:20 +02:00
Perttu Ahola
365f7a5bfe Merge remote-tracking branch 'kahrl/hidehud' 2012-02-02 14:35:18 +02:00
Kahrl
796009ef21 Fix server hang when stepping a furnace with a huge dtime 2012-02-02 12:50:11 +02:00
Kahrl
b85b4ede82 Page up/down: don't display the old value, it was a little confusing 2012-02-01 02:37:01 +01:00
Kahrl
2cb96d9d68 Page up and down change the minimum viewing range 2012-02-01 02:24:55 +01:00
Kahrl
78bf92175a Show the top line too when only chat, but not HUD is shown 2012-02-01 01:36:59 +01:00
Kahrl
0c3d39357b F1 toggles HUD, F2 toggles chat, F5 toggles debug info, F6 toggles profiler pages 2012-02-01 00:56:30 +01:00
Kahrl
0e8bd531c2 Fix craftresult_is_preview flood in log and remove unnecessary debug output 2012-01-25 20:18:20 +02:00
Garrosh
ac69a3561a Added Kate backup file scheme to .gitignore for Kate users 2012-01-24 22:38:00 -05:00
Perttu Ahola
24b1008d56 Remove unnecessary delays from large data transfer unit test 2012-01-24 12:50:10 +02:00
Perttu Ahola
a4340c330a Set default number of maximum users to 100 instead of 20 2012-01-24 12:02:40 +02:00
Perttu Ahola
2e8e9ee7f5 Add EnvRef:set_timeofday(0...1) and EnvRef:get_timeofday() 2012-01-24 12:01:59 +02:00
Perttu Ahola
cb05a28745 Call this 0.4.dev-20120122-1 2012-01-22 23:05:36 +02:00
Perttu Ahola
a387c9b95d Fix "illegal escape sequence" in MSVC (actually not illegal) 2012-01-22 22:00:29 +02:00
Kahrl
0a426f3592 Fix give_initial_stuff mod; experimental mod: dug_item -> drop; scriptapi.cpp: drops -> drop 2012-01-22 17:31:20 +02:00
Kahrl
00bc9a8678 tool and ToolItem apply item aliases 2012-01-22 17:31:20 +02:00
Kahrl
c241902b40 Cleanup (some stuff went wrong when reverting 4-byte mapnodes); fix legacy_wallmounted 2012-01-22 17:31:20 +02:00
Kahrl
4799a8f761 cleanup 2012-01-22 17:31:20 +02:00
Kahrl
02b334a679 Create node metadata when placing nodes again 2012-01-22 17:31:20 +02:00
Kahrl
b4dd5d3bd7 Client-side prediction of inventory changes, and some inventory menu fixes 2012-01-22 17:31:20 +02:00
Kahrl
1efdc36b22 Inventory menu (with dragging) improved. Crafting is now handled via a IACTION_CRAFT inventory action. 2012-01-22 17:31:12 +02:00
Kahrl
157a4cf18c Node placement / mineral / serialization / iron freq / node_dig callback
- Node placement code moved to Lua
- Mineral system removed (added default:stone_with_coal and default:stone_with_iron).
- MapBlock and MapNode serialization updated.
- Mapgen: Frequency of iron increased.
- node_dig callback and related changes.
2012-01-22 17:24:50 +02:00
Kahrl
f22c73f501 Fix inventory glitch when connecting as new user 2012-01-14 11:05:24 +01:00
Kahrl
c920df748b Inventory menu changes: Tooltips; dragging; drop from menu. Lag is a bit annoying (even in single player). 2012-01-13 12:35:55 +01:00
Kahrl
a58d725569 Tool progress bar tweaking 2012-01-12 08:47:17 +01:00
Kahrl
6a76c226e1 The huge item definition and item namespace unification patch (itemdef), see http://c55.me/minetest/wiki/doku.php?id=changes:itemdef 2012-01-12 06:10:39 +01:00
Perttu Ahola
569156b013 Call this 0.4.dev-20120106-1 2012-01-06 20:41:52 +02:00
Perttu Ahola
6d4bc012f0 Fix key change menu a bit 2012-01-06 19:50:40 +02:00
Perttu Ahola
2f5c28aaf1 ObjectRef:setpos() to move player properly (a bit shortcuttish implementation) 2012-01-06 19:17:44 +02:00
Perttu Ahola
4f2c1e36a1 Implement minetest.register_on_dieplayer() 2012-01-06 00:12:33 +02:00
Perttu Ahola
bc743ca7ce Add missing checks to texture caching 2012-01-04 00:37:46 +02:00
Perttu Ahola
f9d7e399b2 Limit range of ABM timer initial value randomization 2012-01-03 13:49:47 +02:00
Perttu Ahola
3e6f824e6c Use free rather than delete for malloc'd memory 2012-01-02 21:42:33 +02:00
Perttu Ahola
6286c555d4 Initialize ABM timer to random value to spread processing 2012-01-02 21:06:38 +02:00
Perttu Ahola
4630281318 Fix ABM trigger chance being often way too high 2012-01-02 20:26:33 +02:00
Perttu Ahola
cd0019acd2 Fix server sending stuff before textures have been sent 2012-01-02 17:44:00 +02:00
Perttu Ahola
e82a76e438 Mark ObjectRef::get_entity_name() deprecated 2012-01-02 17:33:03 +02:00
Perttu Ahola
ab57fbe4ca Add name field to registered entities 2012-01-02 16:26:40 +02:00
Perttu Ahola
56f55ab1af Add ObjectRef:getvelocity(), ObjectRef:setyaw() and ObjectRef:getyaw() 2012-01-02 16:19:52 +02:00
Perttu Ahola
2445cbbbdc Add ObjectRef:get_luaentity() 2012-01-02 16:08:59 +02:00
Perttu Ahola
48131bf988 Call this 0.4.dev-20120102-1 2012-01-02 13:51:43 +02:00
Perttu Ahola
2b9596fe9b Make text area in message dialog a bit larger 2012-01-02 13:34:24 +02:00
Perttu Ahola
0e1f448b61 Texture cache on client (mostly made by sapier) (breaks network compatibility) 2012-01-02 13:31:50 +02:00
Perttu Ahola
ff82b95800 ObjectRef:get_entity_name() and fixing of comments in default/init.lua 2012-01-02 13:12:56 +02:00
Perttu Ahola
49b7055cb3 Make add_entity return a reference to added entity (or nil) 2012-01-02 12:48:25 +02:00
Perttu Ahola
cb88f7b6d4 Clean up InvRef documentation in default/init.lua a bit 2012-01-02 03:18:23 +02:00
Perttu Ahola
9425fb8192 Improve mini Lua reference 2012-01-02 02:59:14 +02:00
Perttu Ahola
e48ccd7943 Add ObjectRef:get_inventory() and add stuff to documentation comments 2012-01-02 02:59:14 +02:00
Perttu Ahola
6be5441176 Working implementation of experimental:luafurnace 2012-01-02 02:59:14 +02:00
Perttu Ahola
d5ba7ebaf0 Random fixes to InvRef related stuff and a broken luafurnace 2012-01-02 02:59:14 +02:00
Perttu Ahola
270a482740 Add InvRef:get_list() and InvRef:set_list() and fix some things (untested) 2012-01-02 02:59:14 +02:00
Perttu Ahola
e0b4890794 Add minetest.get_inventory(location), untested 2012-01-02 02:57:14 +02:00
Perttu Ahola
247e8b6e5d A small robustness addition to ItemStack 2012-01-02 01:49:38 +02:00
Perttu Ahola
b760e2ba23 Rename InvStack to ItemStack 2012-01-02 01:49:38 +02:00
Perttu Ahola
103173fc9b Add InvRef and InvStack (currently untested and unusable) 2012-01-02 01:49:38 +02:00
Perttu Ahola
70ed371d0c Add default: to everything in default/init.lua (...hopefully doesn't break anything) 2012-01-01 21:31:47 +02:00
Perttu Ahola
81d3485109 Fix segfault when generating stuff on world boundaries 2012-01-01 21:01:55 +02:00
Perttu Ahola
7b7b68cdab Correctly pop stuff from the Lua stack in script_load() 2011-12-31 14:41:57 +02:00
Giuseppe Bilotta
135a65e200 Add virtual destructors to abstract classes
IRespawnInitiator and InventoryActions are abstract classes, but they
were missing a virtual destructor. Define it, even if it does nothing
and its absence most likely makes no difference other tha causing
warnings during compile.
2011-12-28 20:50:21 +02:00
Perttu Ahola
123529e5eb Fix mirrored sign texture 2011-12-28 18:29:33 +02:00
Perttu Ahola
e81989a0d8 Add wooden planks to creative inventory 2011-12-28 18:24:09 +02:00
Perttu Ahola
1c15f53318 Add EnvRef:get_objects_inside_radius(pos, radius) 2011-12-28 18:18:08 +02:00
Perttu Ahola
7937813c98 Add get_look_dir(), get_look_pitch() and get_look_yaw() for players 2011-12-28 17:34:07 +02:00
Perttu Ahola
ad4040d982 Fix minetest.env:get_player_by_name(nil) causing segfault and similar things 2011-12-28 16:25:29 +02:00
Perttu Ahola
69579306dd Extend load screen maximum time 2011-12-11 16:52:19 +02:00
Perttu Ahola
bd21f00f0a Add minetest.get_modpath(modname) 2011-12-11 16:49:40 +02:00
Perttu Ahola
012bcbcb48 add_luaentity->add_entity in mods/experimental 2011-12-11 01:52:37 +02:00
Perttu Ahola
e06d4555bf Call this 0.4.dev-20111209-1 2011-12-09 11:36:47 +02:00
Perttu Ahola
abd106bacb Enforce modname naming convention 2011-12-04 18:26:05 +02:00
Perttu Ahola
008de2fb8f Delete unknown LuaEntities when punched 2011-12-04 16:25:27 +02:00
Perttu Ahola
2e67fa3e48 Improve /spawnentity a bit 2011-12-04 16:20:54 +02:00
Perttu Ahola
ea36951bc4 Rename EnvRef:add_luaentity to EnvRef:add_entity 2011-12-04 16:08:37 +02:00
Perttu Ahola
09c48b60bd Add EnvRef:get_node_light(pos, timeofday) 2011-12-04 15:55:37 +02:00
Perttu Ahola
4cc117ddf6 Properly use time_from_last_punch for limiting PvP punch damage 2011-12-04 14:43:01 +02:00
Kahrl
ceaf8edade Use plain IBillboardSceneNode instead of MyBillboardSceneNode (improves
Irrlicht 1.8 compat); also find dungeon master's fireball texture
again; add /spawnentity command
2011-12-04 13:27:30 +02:00
Perttu Ahola
520200d597 Check symlinks with stat() to know if they are directories or not 2011-12-04 13:02:00 +02:00
Perttu Ahola
ab67985d21 Add support for unix filesystems which yield DT_UNKNOWN in dirent->d_type, falling back on stat(). 2011-12-04 12:49:58 +02:00
Perttu Ahola
bc5cc638fc Fix player not dying when beated to death by other player 2011-12-04 03:56:22 +02:00
Perttu Ahola
bff8be8b76 Fix getting two old-style minerals per digged node 2011-12-04 03:47:55 +02:00
Perttu Ahola
3e95b8a158 Determine light_propagates from paramtype 2011-12-04 03:45:02 +02:00
Perttu Ahola
e8539d4dae Add experimental TNT's old name as an alias 2011-12-04 02:16:23 +02:00
Perttu Ahola
1907b31da7 Add furnace to legacy aliases 2011-12-04 02:15:05 +02:00
Perttu Ahola
6145a135bd Make ToolItem and MaterialItem to convert names by aliases at creation time too (necessary for eg. crafting) 2011-12-04 02:12:45 +02:00
Perttu Ahola
97c3bc408b Fix fence name 2011-12-04 02:12:43 +02:00
Perttu Ahola
a00e908f52 Call this 0.4.dev-20111204-1 2011-12-04 01:24:47 +02:00
Perttu Ahola
4ad8891e05 Convert CraftItems directly to the name pointed by alias; necessary due to lua definition table 2011-12-04 01:16:22 +02:00
Perttu Ahola
2b8b2a4f30 Fix wrong checked node names in bucket 2011-12-04 01:15:09 +02:00
Perttu Ahola
5c24450e54 Add some aliases to bucket 2011-12-04 00:51:19 +02:00
Perttu Ahola
3a689a5c4f Don't initialize ItemCAOs with stick.png 2011-12-04 00:45:12 +02:00
Perttu Ahola
44e36d9aad Fix craftitem aliases 2011-12-04 00:44:29 +02:00
Perttu Ahola
62f7f72d20 Move default_treeprop.png to treeprop.png 2011-12-04 00:40:04 +02:00
Perttu Ahola
829c632511 Craftitem aliases 2011-12-04 00:39:20 +02:00
Perttu Ahola
8730dfb1f9 Fix log message in tooldef.cpp 2011-12-04 00:35:08 +02:00
Perttu Ahola
6764365994 Modify a commit in tooldef.cpp and nodedef.cpp 2011-12-04 00:33:05 +02:00
Perttu Ahola
8addbc9655 Tool aliases 2011-12-04 00:22:34 +02:00
Perttu Ahola
658d1a7235 Add serialization for node aliases to let client show inventory images correctly 2011-12-04 00:07:02 +02:00
Perttu Ahola
4b00d4d9d2 Node definition aliases 2011-12-03 23:50:31 +02:00
Perttu Ahola
6a5829788e Even more texture fixing 2011-12-03 22:33:22 +02:00
Perttu Ahola
03074cd23e Rename lump_of_* to *_lump 2011-12-03 22:31:12 +02:00
Perttu Ahola
2620e8eada Fix the previous commit 2011-12-03 21:31:39 +02:00
Perttu Ahola
9b5e676ffa Clean and fix mods/experimental/init.lua 2011-12-03 21:30:54 +02:00
Perttu Ahola
fd1ef11617 More texture naming fixes 2011-12-03 21:22:29 +02:00
Perttu Ahola
9fa567a6ce Rename textures of default mod 2011-12-03 21:10:02 +02:00
Perttu Ahola
fc6c00cbe1 Remove iron apple from default 2011-12-03 20:31:41 +02:00
Perttu Ahola
66f90a6101 Make global names in default mod use good naming convention and move backwards-compatibility definitions to mods/legacy 2011-12-03 20:25:21 +02:00
Perttu Ahola
1fe5c58d56 Rename cookresult_item to cookresult_itemstring 2011-12-03 18:45:04 +02:00
Perttu Ahola
f23616acaf add EnvRef:get_node_or_nil() 2011-12-03 18:37:50 +02:00
Perttu Ahola
7d37913ea4 Add ABM required neighbor check 2011-12-03 18:18:59 +02:00
Perttu Ahola
ac56053c74 Fix bucket texture names 2011-12-03 17:40:58 +02:00
Perttu Ahola
d566ffaa5f Allow digging unknown nodes 2011-12-03 13:56:39 +02:00
Perttu Ahola
d06d7cb9a4 Show infotext for unknown nodes 2011-12-03 13:51:16 +02:00
Perttu Ahola
e494b5d422 Show infotext for unknown items placed on ground 2011-12-03 13:46:19 +02:00
Perttu Ahola
fdf7b3bcdf Call this 0.4.dev-20111203-3 2011-12-03 12:02:45 +02:00
Perttu Ahola
871e6c0c73 On SIGINT in main menu, don't connect before shutting down 2011-12-03 12:02:27 +02:00
Kahrl
392485aa45 inventorycube: use all three specified textures; also moved mesh creation / modification functions to mesh.cpp; in lua, inventorycube is now called minetest.inventorycube 2011-12-03 11:47:37 +02:00
Kahrl
275a348b75 Do not broadcast an empty chat message when someone tries to log in with the wrong password 2011-12-03 11:47:19 +02:00
Kahrl
189689716c Notify player whose password is being changed 2011-12-03 11:47:19 +02:00
1144 changed files with 389321 additions and 197307 deletions

28
.clang-format Normal file
View File

@@ -0,0 +1,28 @@
BasedOnStyle: LLVM
IndentWidth: 8
UseTab: Always
BreakBeforeBraces: Custom
Standard: Cpp03
BraceWrapping:
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
BeforeCatch: false
BeforeElse: false
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
AccessModifierOffset: -8
ColumnLimit: 90
AllowShortFunctionsOnASingleLine: Inline
SortIncludes: false
IncludeCategories:
- Regex: '^".*'
Priority: 2
- Regex: '^<.*'
Priority: 1
AlignAfterOpenBracket: DontAlign
ContinuationIndentWidth: 16

118
.gitignore vendored
View File

@@ -1,27 +1,101 @@
map/*
world/*
CMakeFiles/*
src/CMakeFiles/*
src/Makefile
src/cmake_config.h
src/cmake_install.cmake
src/jthread/CMakeFiles/*
src/jthread/Makefile
src/jthread/cmake_config.h
src/jthread/cmake_install.cmake
.*.swp
## Editors and Development environments
*~
*.swp
*.bak*
*.orig
# Vim
*.vim
# Kate
.*.kate-swp
.swp.*
# KDevelop4
.kdev4/
*.kdev4
# Eclipse (CDT and LDT)
.project
.cproject
.settings/
.buildpath
.metadata
# GNU Global
tags
!tags/
gtags.files
.idea/*
# Codelite
*.project
## Files related to minetest development cycle
/*.patch
*.diff
# GNU Patch reject file
*.rej
## Non-static Minetest directories or symlinks to these
/bin/
/games/*
!/games/minimal/
/cache
/textures/*
!/textures/base/
/screenshots
/sounds
/mods/*
!/mods/minetest/
/mods/minetest/*
!/mods/minetest/mods_here.txt
/worlds
/world/
/clientmods/*
!/clientmods/preview/
/client/mod_storage/
## Configuration/log files
minetest.conf
bin/
debug.txt
## Other files generated by minetest
screenshot_*.png
## Doxygen files
doc/Doxyfile
doc/html/
doc/doxygen_*
## Build files
CMakeFiles
Makefile
!build/android/Makefile
cmake_install.cmake
CMakeCache.txt
CPackConfig.cmake
CPackSourceConfig.cmake
Makefile
cmake_install.cmake
src/jthread/libjthread.a
debug.txt
bin/debug.txt
minetestmapper/map.png
locale/
src/android_version.h
src/android_version_githash.h
src/cmake_config.h
src/cmake_config_githash.h
src/lua/build/
src/lua/CMakeFiles/
*bak*
locale/
.directory
*.cbp
*.layout
*.o
*.a
*.ninja
.ninja*
*.gch
cmake-build-debug/
cmake-build-release/
## Android build files
build/android/src/main/assets
build/android/build
build/android/deps
build/android/libs
build/android/jni/lib
build/android/jni/src
build/android/src/main/jniLibs
build/android/obj
build/android/local.properties
build/android/.gradle
timestamp

223
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,223 @@
---
# Github repository is cloned every day on Gitlab.com
# https://gitlab.com/minetest/minetest
# Pipelines URL: https://gitlab.com/minetest/minetest/pipelines
stages:
- build
- package
- deploy
variables:
MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
.build_template: &build_definition
stage: build
script:
- mkdir cmakebuild
- mkdir -p artifact/minetest/usr/
- cd cmakebuild
- cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
- make -j2
- make install
artifacts:
when: on_success
expire_in: 1h
paths:
- artifact/*
.debpkg_template: &debpkg_template
stage: package
before_script:
- apt-get update -y
- apt-get install -y git
- mkdir -p build/deb/minetest/DEBIAN/
- cp misc/debpkg-control build/deb/minetest/DEBIAN/control
- cp -Rp artifact/minetest/usr build/deb/minetest/
script:
- git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest
- rm -Rf build/deb/minetest/usr/share/minetest/games/minetest/.git
- sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control
- sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
- cd build/deb/ && dpkg-deb -b minetest/
artifacts:
when: on_success
expire_in: 30 day
paths:
- build/deb/*.deb
.debpkg_install: &debpkg_install
stage: deploy
before_script:
- apt-get update -y
- apt-get install -y libc6 libcurl3-gnutls libfreetype6 libirrlicht1.8 $LEVELDB_PKG liblua5.1-0 libluajit-5.1-2 libopenal1 libstdc++6 libvorbisfile3 libx11-6 zlib1g
script:
- dpkg -i build/deb/*.deb
##
## Debian
##
# Jessie
build:debian-8:
<<: *build_definition
image: debian:8
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:debian-8:
image: debian:8
dependencies:
- build:debian-8
variables:
LEVELDB_PKG: libleveldb1
<<: *debpkg_template
deploy:debian-8:
image: debian:8
dependencies:
- package:debian-8
variables:
LEVELDB_PKG: libleveldb1
<<: *debpkg_install
# Stretch
build:debian-9:
<<: *build_definition
image: debian:9
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:debian-9:
image: debian:9
dependencies:
- build:debian-9
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_template
deploy:debian-9:
image: debian:9
dependencies:
- package:debian-9
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_install
##
## Ubuntu
##
# Trusty
build:ubuntu-14.04:
<<: *build_definition
image: ubuntu:trusty
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-14.04:
image: ubuntu:trusty
dependencies:
- build:ubuntu-14.04
variables:
LEVELDB_PKG: libleveldb1
<<: *debpkg_template
deploy:ubuntu-14.04:
image: ubuntu:trusty
dependencies:
- package:ubuntu-14.04
variables:
LEVELDB_PKG: libleveldb1
<<: *debpkg_install
# Xenial
build:ubuntu-16.04:
<<: *build_definition
image: ubuntu:xenial
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-16.04:
image: ubuntu:xenial
dependencies:
- build:ubuntu-16.04
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_template
deploy:ubuntu-16.04:
image: ubuntu:xenial
dependencies:
- package:ubuntu-16.04
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_install
# Yakkety
build:ubuntu-16.10:
<<: *build_definition
image: ubuntu:yakkety
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-16.10:
image: ubuntu:yakkety
dependencies:
- build:ubuntu-16.10
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_template
deploy:ubuntu-16.10:
image: ubuntu:yakkety
dependencies:
- package:ubuntu-16.10
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_install
# Zesty
build:ubuntu-17.04:
<<: *build_definition
image: ubuntu:zesty
before_script:
- apt-get update -y
- apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
package:ubuntu-17.04:
image: ubuntu:zesty
dependencies:
- build:ubuntu-17.04
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_template
deploy:ubuntu-17.04:
image: ubuntu:zesty
dependencies:
- package:ubuntu-17.04
variables:
LEVELDB_PKG: libleveldb1v5
<<: *debpkg_install
##
## Fedora
##
build:fedora-24:
<<: *build_definition
image: fedora:24
before_script:
- dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl* openal* libvorbis* libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel

View File

@@ -1,25 +0,0 @@
map/*
world/*
CMakeFiles/*
src/CMakeFiles/*
src/Makefile
src/cmake_config.h
src/cmake_install.cmake
src/jthread/CMakeFiles/*
src/jthread/Makefile
src/jthread/cmake_config.h
src/jthread/cmake_install.cmake
src/.*.swp
src/sqlite/libsqlite3.a
src/session.vim
util/uloste.png
minetest.conf
debug.txt
bin/
CMakeCache.txt
CPackConfig.cmake
CPackSourceConfig.cmake
Makefile
cmake_install.cmake
src/jthread/libjthread.a
data_temp/*

View File

@@ -1 +0,0 @@
a519d683251105654d2a146ae7b91d3850b6504c 0.2.20110731_3

33
.mailmap Normal file
View File

@@ -0,0 +1,33 @@
0gb.us <0gb.us@0gb.us> <us_0gb@laptop-0gb-us.0gb.us>
Calinou <calinou9999@gmail.com> <calinou9999spam@gmail.com>
Perttu Ahola <celeron55@gmail.com> celeron55 <celeron55@gmail.com>
Perttu Ahola <celeron55@gmail.com> celeron55 <celeron55@armada.(none)>
Craig Robbins <kde.psych@gmail.com> <crobbins@localhost.localdomain>
Diego Martínez <kaeza@users.sf.net> <lkaezadl3@gmail.com>
Ilya Zhuravlev <zhuravlevilya@ya.ru> <whatever@xyz.is>
kwolekr <kwolekr@minetest.net> <mirrorisim@gmail.com>
PilzAdam <pilzadam@minetest.net> PilzAdam <adam-k@outlook.com>
PilzAdam <pilzadam@minetest.net> Pilz Adam <PilzAdam@gmx.de>
PilzAdam <pilzadam@minetest.net> PilzAdam <PilzAdam@gmx.de>
proller <proller@github.com> <proler@github.com>
proller <proller@github.com> <proler@gmail.com>
RealBadAngel <maciej.kasatkin@o2.pl> <mk@realbadangel.pl>
RealBadAngel <maciej.kasatkin@o2.pl> <maciej.kasatkin@yahoo.com>
Selat <LongExampleTestName@gmail.com> <LongExampletestName@gmail.com>
ShadowNinja <shadowninja@minetest.net> ShadowNinja <noreply@gmail.com>
Shen Zheyu <arsdragonfly@gmail.com> arsdragonfly <arsdragonfly@gmail.com>
Pavel Elagin <elagin.pasha@gmail.com> elagin <elagin.pasha@gmail.com>
Esteban I. Ruiz Moreno <exio4.com@gmail.com> Esteban I. RM <exio4.com@gmail.com>
manuel duarte <ffrogger0@yahoo.com> manuel joaquim <ffrogger0@yahoo.com>
manuel duarte <ffrogger0@yahoo.com> sweetbomber <ffrogger _zero_ at yahoo dot com>
Diego Martínez <kaeza@users.sf.net> kaeza <kaeza@users.sf.net>
Diego Martínez <kaeza@users.sf.net> Diego Martinez <kaeza@users.sf.net>
Lord James <neftali_dtctv@hotmail.com> Lord89James <neftali_dtctv@hotmail.com>
BlockMen <nmuelll@web.de> Block Men <nmuelll@web.de>
sfan5 <sfan5@live.de> Sfan5 <sfan5@live.de>
DannyDark <the_skeleton_of_a_child@yahoo.co.uk> dannydark <the_skeleton_of_a_child@yahoo.co.uk>
Ilya Pavlov <TTChangeTheWorld@gmail.com> Ilya <TTChangeTheWorld@gmail.com>
Ilya Zhuravlev <zhuravlevilya@ya.ru> xyzz <zhuravlevilya@ya.ru>
sapier <Sapier at GMX dot net> sapier <sapier AT gmx DOT net>
sapier <Sapier at GMX dot net> sapier <sapier at gmx dot net>

39
.travis.yml Normal file
View File

@@ -0,0 +1,39 @@
language: cpp
before_install: ./util/travis/before_install.sh
script: ./util/travis/script.sh
sudo: required
notifications:
email: false
matrix:
fast_finish: true
include:
- env: PLATFORM=Win32
compiler: gcc
os: linux
- env: PLATFORM=Win64
compiler: gcc
os: linux
- env: PLATFORM=Unix COMPILER=clang
compiler: clang
os: osx
- env: PLATFORM=Unix COMPILER=g++
compiler: gcc
os: linux
- env: PLATFORM=Unix COMPILER=clang
compiler: clang
os: linux
- env: PLATFORM=Unix COMPILER=clang VALGRIND=1
compiler: clang
os: linux
dist: trusty
- env: COMPILER=none LINT=1
compiler: clang
os: linux
dist: trusty
- env: PLATFORM=Unix COMPILER=g++-6
compiler: gcc
os: linux
addons:
apt:
sources: &sources
- ubuntu-toolchain-r-test

View File

@@ -1,36 +1,53 @@
cmake_minimum_required(VERSION 2.6)
if(${CMAKE_VERSION} STREQUAL "2.8.2")
# bug http://vtk.org/Bug/view.php?id=11020
message( WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!")
endif(${CMAKE_VERSION} STREQUAL "2.8.2")
# Bug http://vtk.org/Bug/view.php?id=11020
message(WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!")
endif()
# This can be read from ${PROJECT_NAME} after project() is called
project(minetest)
set(PROJECT_NAME_CAPITALIZED "Minetest")
# Also remember to set PROTOCOL_VERSION in clientserver.h when releasing
# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 0)
set(VERSION_MINOR 4)
set(VERSION_PATCH dev-20111203-2)
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set(VERSION_PATCH 17)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Change to false for releases
set(DEVELOPMENT_BUILD FALSE)
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
if(VERSION_EXTRA)
set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA})
elseif(DEVELOPMENT_BUILD)
set(VERSION_STRING "${VERSION_STRING}-dev")
endif()
if (CMAKE_BUILD_TYPE STREQUAL Debug)
# Append "-debug" to version string
set(VERSION_STRING "${VERSION_STRING}-debug")
endif()
message(STATUS "*** Will build version ${VERSION_STRING} ***")
MESSAGE(STATUS "*** Will build version ${VERSION_STRING} ***")
# Configuration options
set(DEFAULT_RUN_IN_PLACE FALSE)
if(WIN32)
set(RUN_IN_PLACE 1 CACHE BOOL "Run directly in source directory structure")
else()
set(RUN_IN_PLACE 0 CACHE BOOL "Run directly in source directory structure")
set(DEFAULT_RUN_IN_PLACE TRUE)
endif()
set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL
"Run directly in source directory structure")
set(BUILD_CLIENT 1 CACHE BOOL "Build client")
if(WIN32)
set(BUILD_SERVER 0 CACHE BOOL "Build server")
else()
set(BUILD_SERVER 1 CACHE BOOL "Build server")
endif()
set(WARN_ALL 1 CACHE BOOL "Enable -Wall for Release build")
set(BUILD_CLIENT TRUE CACHE BOOL "Build client")
set(BUILD_SERVER FALSE CACHE BOOL "Build server")
set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
if(NOT CMAKE_BUILD_TYPE)
# Default to release
@@ -39,44 +56,152 @@ endif()
# Included stuff
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
include(${CMAKE_SOURCE_DIR}/cmake/Modules/misc.cmake)
# This is done here so that relative search paths are more reasnable
# This is done here so that relative search paths are more reasonable
find_package(Irrlicht)
#
# Installation
#
if(WIN32)
set(DATADIR "data")
set(SHAREDIR ".")
set(BINDIR "bin")
set(DOCDIR "doc")
set(EXAMPLE_CONF_DIR ".")
set(LOCALEDIR "locale")
elseif(APPLE)
# random placeholders
set(DATADIR "share/${PROJECT_NAME}")
set(BINDIR "bin")
set(DOCDIR "share/doc/${PROJECT_NAME}")
set(EXAMPLE_CONF_DIR ".")
set(BUNDLE_NAME ${PROJECT_NAME}.app)
set(BUNDLE_PATH "${BUNDLE_NAME}")
set(BINDIR ${BUNDLE_NAME}/Contents/MacOS)
set(SHAREDIR ${BUNDLE_NAME}/Contents/Resources)
set(DOCDIR "${SHAREDIR}/${PROJECT_NAME}")
set(EXAMPLE_CONF_DIR ${DOCDIR})
set(LOCALEDIR "${SHAREDIR}/locale")
elseif(UNIX) # Linux, BSD etc
set(DATADIR "share/${PROJECT_NAME}")
set(BINDIR "bin")
set(DOCDIR "share/doc/${PROJECT_NAME}")
set(EXAMPLE_CONF_DIR "share/doc/${PROJECT_NAME}")
if(RUN_IN_PLACE)
set(SHAREDIR ".")
set(BINDIR "bin")
set(DOCDIR "doc")
set(EXAMPLE_CONF_DIR ".")
set(MANDIR "unix/man")
set(XDG_APPS_DIR "unix/applications")
set(APPDATADIR "unix/metainfo")
set(ICONDIR "unix/icons")
set(LOCALEDIR "locale")
else()
set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}")
set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}")
set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man")
set(EXAMPLE_CONF_DIR ${DOCDIR})
set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo")
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale")
endif()
endif()
install(FILES "README.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/changelog.txt" DESTINATION "${DOCDIR}")
install(FILES "minetest.conf.example" DESTINATION "${DOCDIR}")
set(CUSTOM_SHAREDIR "" CACHE STRING "Directory to install data files into")
if(NOT CUSTOM_SHAREDIR STREQUAL "")
set(SHAREDIR "${CUSTOM_SHAREDIR}")
message(STATUS "Using SHAREDIR=${SHAREDIR}")
endif()
set(CUSTOM_BINDIR "" CACHE STRING "Directory to install binaries into")
if(NOT CUSTOM_BINDIR STREQUAL "")
set(BINDIR "${CUSTOM_BINDIR}")
message(STATUS "Using BINDIR=${BINDIR}")
endif()
set(CUSTOM_DOCDIR "" CACHE STRING "Directory to install documentation into")
if(NOT CUSTOM_DOCDIR STREQUAL "")
set(DOCDIR "${CUSTOM_DOCDIR}")
if(NOT RUN_IN_PLACE)
set(EXAMPLE_CONF_DIR ${DOCDIR})
endif()
message(STATUS "Using DOCDIR=${DOCDIR}")
endif()
set(CUSTOM_MANDIR "" CACHE STRING "Directory to install manpages into")
if(NOT CUSTOM_MANDIR STREQUAL "")
set(MANDIR "${CUSTOM_MANDIR}")
message(STATUS "Using MANDIR=${MANDIR}")
endif()
set(CUSTOM_EXAMPLE_CONF_DIR "" CACHE STRING "Directory to install example config file into")
if(NOT CUSTOM_EXAMPLE_CONF_DIR STREQUAL "")
set(EXAMPLE_CONF_DIR "${CUSTOM_EXAMPLE_CONF_DIR}")
message(STATUS "Using EXAMPLE_CONF_DIR=${EXAMPLE_CONF_DIR}")
endif()
set(CUSTOM_XDG_APPS_DIR "" CACHE STRING "Directory to install .desktop files into")
if(NOT CUSTOM_XDG_APPS_DIR STREQUAL "")
set(XDG_APPS_DIR "${CUSTOM_XDG_APPS_DIR}")
message(STATUS "Using XDG_APPS_DIR=${XDG_APPS_DIR}")
endif()
set(CUSTOM_ICONDIR "" CACHE STRING "Directory to install icons into")
if(NOT CUSTOM_ICONDIR STREQUAL "")
set(ICONDIR "${CUSTOM_ICONDIR}")
message(STATUS "Using ICONDIR=${ICONDIR}")
endif()
set(CUSTOM_LOCALEDIR "" CACHE STRING "Directory to install l10n files into")
if(NOT CUSTOM_LOCALEDIR STREQUAL "")
set(LOCALEDIR "${CUSTOM_LOCALEDIR}")
message(STATUS "Using LOCALEDIR=${LOCALEDIR}")
endif()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/builtin" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games" DESTINATION "${SHAREDIR}" PATTERN ".git*" EXCLUDE)
if(BUILD_CLIENT)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base")
endif()
if(RUN_IN_PLACE)
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/mods/mods_here.txt" DESTINATION "${SHAREDIR}/mods")
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/textures/texture_packs_here.txt" DESTINATION "${SHAREDIR}/textures")
endif()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}")
install(FILES "README.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/lua_api.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/menu_lua_api.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/texture_packs.txt" DESTINATION "${DOCDIR}")
install(FILES "doc/world_format.txt" DESTINATION "${DOCDIR}")
install(FILES "minetest.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}")
if(UNIX AND NOT APPLE)
install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6")
install(FILES "misc/net.minetest.minetest.desktop" DESTINATION "${XDG_APPS_DIR}")
install(FILES "misc/net.minetest.minetest.appdata.xml" DESTINATION "${APPDATADIR}")
install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
install(FILES "misc/minetest-xorg-icon-128.png"
DESTINATION "${ICONDIR}/hicolor/128x128/apps"
RENAME "minetest.png")
endif()
if(APPLE)
install(FILES "misc/minetest-icon.icns" DESTINATION "${SHAREDIR}")
install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents")
endif()
# Library pack
find_package(GMP REQUIRED)
find_package(Json REQUIRED)
find_package(Lua REQUIRED)
#
# Subdirectories
# Be sure to add all relevant definitions above this
#
add_subdirectory(src)
# CPack
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "An InfiniMiner/Minecraft inspired game")
@@ -87,32 +212,17 @@ set(CPACK_PACKAGE_VENDOR "celeron55")
set(CPACK_PACKAGE_CONTACT "Perttu Ahola <celeron55@gmail.com>")
if(WIN32)
# For some reason these aren't copied otherwise
# NOTE: For some reason now it seems to work without these
#if(BUILD_CLIENT)
# install(FILES bin/minetest.exe DESTINATION bin)
#endif()
#if(BUILD_SERVER)
# install(FILES bin/minetestserver.exe DESTINATION bin)
#endif()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64")
else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win32")
endif()
set(CPACK_GENERATOR ZIP)
# This might be needed for some installer
#set(CPACK_PACKAGE_EXECUTABLES bin/minetest.exe "Minetest" bin/minetestserver.exe "Minetest Server")
elseif(APPLE)
# TODO
# see http://cmake.org/Wiki/CMake:CPackPackageGenerators#Bundle_.28OSX_only.29
#
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-osx")
set(CPACK_PACKAGE_ICON "")
set(CPACK_BUNDLE_NAME ${PROJECT_NAME})
set(CPACK_BUNDLE_ICON "")
set(CPACK_BUNDLE_PLIST "")
set(CPACK_BUNDLE_STARTUP_COMMAND "Contents/MacOS/${PROJECT_NAME}")
set(CPACK_GENERATOR "Bundle")
set(CPACK_GENERATOR ZIP)
else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-linux")
set(CPACK_GENERATOR TGZ)
@@ -121,3 +231,16 @@ endif()
include(CPack)
# Add a target to generate API documentation with Doxygen
find_package(Doxygen)
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in
${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
endif()

106
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,106 @@
# Contributing
Contributions are welcome! Here's how you can help:
- [Contributing code](#code)
- [Reporting issues](#issues)
- [Requesting features](#feature-requests)
- [Translating](#translations)
- [Donating](#donations)
## Code
If you are planning to start some significant coding, you would benefit from asking first on [our IRC channel](http://www.minetest.net/irc/) before starting.
1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and [clone](https://help.github.com/articles/cloning-a-repository/) your fork.
2. Start coding!
- Refer to the [Lua API](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt), [Developer Wiki](http://dev.minetest.net/Main_Page) and other [documentation](https://github.com/minetest/minetest/tree/master/doc).
- Follow the [C/C++](http://dev.minetest.net/Code_style_guidelines) and [Lua](http://dev.minetest.net/Lua_code_style_guidelines) code style guidelines.
- Check your code works as expected and document any changes to the Lua API.
3. Commit & [push](https://help.github.com/articles/pushing-to-a-remote/) your changes to a new branch (not `master`, one change per branch)
- Commit messages should:
- Use the present tense
- Have a title which begins with a capital letter
- Be descriptive. (e.g. no `Update init.lua` or `Fix a problem`)
- Have a first line with less than *80 characters* and have a second line that is *empty*
4. Once you are happy with your changes, submit a pull request.
- Open the [pull-request form](https://github.com/minetest/minetest/pull/new/master)
- Add a short description explaining briefly what you've done (or if it's a work-in-progress - what you need to do)
##### A pull-request is considered merge-able when:
1. It follows the [roadmap](https://forum.minetest.net/viewtopic.php?t=9177) in some way and fits the whole picture of the project.
2. It works.
3. It follows the code style for [C/C++](http://dev.minetest.net/Code_style_guidelines) or [Lua](http://dev.minetest.net/Lua_code_style_guidelines).
4. The code's interfaces are well designed, regardless of other aspects that might need more work in the future.
5. It uses protocols and formats which include the required compatibility.
## Issues
If you experience an issue, we would like to know the details - especially when a stable release is on the way.
1. Do a quick search on GitHub to check if the issue has already been reported.
2. Is it an issue with the Minetest *engine*? If not, report it [elsewhere](http://www.minetest.net/development/#reporting-issues).
3. [Open an issue](https://github.com/minetest/minetest/issues/new) and describe the issue you are having - you could include:
- Error logs (check the bottom of the `debug.txt` file)
- Screenshots
- Ways you have tried to solve the issue, and whether they worked or not
- Your Minetest version and the content (subgames, mods or texture packs) you have installed
- Your platform (e.g. Windows 10 or Ubuntu 15.04 x64)
After reporting you should aim to answer questions or clarifications as this helps pinpoint the cause of the issue (if you don't do this your issue may be closed after 1 month).
## Feature requests
Feature requests are welcome but take a moment to see if your idea follows the [roadmap](https://forum.minetest.net/viewtopic.php?t=9177) in some way and fits the whole picture of the project. You should provide a clear explanation with as much detail as possible.
## Translations
Translations of Minetest are performed using Weblate. You can access the project page with a list of current languages [here](https://hosted.weblate.org/projects/minetest/minetest/).
### Donations
If you'd like to monetarily support Minetest development, you can find donation methods on [our website](http://www.minetest.net/development/#donate).
# Maintaining
*This is a concise version of the [Rules & Guidelines](http://dev.minetest.net/Category:Rules_and_Guidelines) on the developer wiki.*
These notes are for those who have push access Minetest (core developers / maintainers).
- See the [project organisation](http://dev.minetest.net/Organisation) for the people involved.
## Reviewing pull requests
Pull requests should be reviewed and, if appropriate, checked if they achieve their intended purpose. You can show that you are in the process of, or will review the pull request by commenting *"Looks good"* or something similar.
**If the pull-request is not [merge-able](#a-pull-request-is-considered-merge-able-when):**
Submit a comment explaining to the author what they need to change to make the pull-request merge-able.
- If the author comments or makes changes to the pull-request, it can be reviewed again.
- If no response is made from the author within 1 month (when improvements are suggested or a question is asked), it can be closed.
**If the pull-request is [merge-able](#a-pull-request-is-considered-merge-able-when):**
Submit a :+1: (+1) or "Looks good" comment to show you believe the pull-request should be merged. "Looks good" comments often signify that the patch might require (more) testing.
- Two core developers must agree to the merge before it is carried out and both should +1 the pull request.
- Who intends to merge the pull-request should follow the commit rules:
- The title should follow the commit guidelines (title starts with a capital letter, present tense, descriptive).
- Don't modify history older than 10 minutes.
- Use rebase, not merge to get linear history:
- `curl https://github.com/minetest/minetest/pull/1.patch | git am`
## Reviewing issues and feature requests
- If an issue does not get a response from its author within 1 month (when requiring more details), it can be closed.
- When an issue is a duplicate, refer to the first ones and close the later ones.
- Tag issues with the appropriate [labels](https://github.com/minetest/minetest/labels) for devices, platforms etc.
## Releasing a new version
*Refer to [dev.minetest.net/Releasing_Minetest](http://dev.minetest.net/Releasing_Minetest)*

View File

@@ -1,50 +1,109 @@
Minetest-c55
---------------
An InfiniMiner/Minecraft inspired game.
Copyright (c) 2010-2011 Perttu Ahola <celeron55@gmail.com>
(see source files for other contributors)
Minetest
========
Further documentation:
An InfiniMiner/Minecraft inspired game.
Copyright (c) 2010-2017 Perttu Ahola <celeron55@gmail.com>
and contributors (see source file comments and the version control log)
In case you downloaded the source code:
---------------------------------------
If you downloaded the Minetest Engine source code in which this file is
contained, you probably want to download the minetest_game project too:
https://github.com/minetest/minetest_game/
See the README.txt in it.
Further documentation
----------------------
- Website: http://celeron.55.lt/~celeron55/minetest/
- Wiki: http://celeron.55.lt/~celeron55/minetest/wiki/
- Forum: http://celeron.55.lt/~celeron55/minetest/forum/
- Website: http://minetest.net/
- Wiki: http://wiki.minetest.net/
- Developer wiki: http://dev.minetest.net/
- Forum: http://forum.minetest.net/
- Github: https://github.com/minetest/minetest/
- doc/ directory of source distribution
This game is not finished:
This game is not finished
--------------------------
- Don't expect it to work as well as a finished game will.
- Please report any bugs to me. debug.txt is useful.
- Please report any bugs. When doing that, debug.txt is useful.
Controls:
---------
- See the in-game pause menu
- Settable in the configuration file, see the section below.
Default controls
-----------------
- Move mouse: Look around
- W, A, S, D: Move
- Space: Jump/move up
- Shift: Sneak/move down
- Q: Drop itemstack
- Shift + Q: Drop single item
- Left mouse button: Dig/punch/take item
- Right mouse button: Place/use
- Shift + right mouse button: Build (without using)
- I: Inventory menu
- Mouse wheel: Select item
- 0-9: Select item
- Z: Zoom (needs zoom privilege)
- T: Chat
- /: Command
Map directory:
--------------
- Map is stored in a directory, which can be removed to generate a new map.
- There is a command-line option for it: --map-dir
- For a RUN_IN_PLACE build, it is located in:
../world
- Otherwise something like this:
Windows: C:\Documents and Settings\user\Application Data\minetest\world
Linux: ~/.minetest/world
OS X: ~/Library/Application Support/minetest/world
- Esc: Pause menu/abort/exit (pauses only singleplayer game)
- R: Enable/disable full range view
- +: Increase view range
- -: Decrease view range
- K: Enable/disable fly mode (needs fly privilege)
- J: Enable/disable fast mode (needs fast privilege)
- H: Enable/disable noclip mode (needs noclip privilege)
- F1: Hide/show HUD
- F2: Hide/show chat
- F3: Disable/enable fog
- F4: Disable/enable camera update (Mapblocks are not updated anymore when disabled, disabled in release builds)
- F5: Cycle through debug info screens
- F6: Cycle through profiler info screens
- F7: Cycle through camera modes
- F8: Toggle cinematic mode
- F9: Cycle through minimap modes
- Shift + F9: Change minimap orientation
- F10: Show/hide console
- F12: Take screenshot
- P: Write stack traces into debug.txt
Most controls are settable in the configuration file, see the section below.
Paths
------
$bin - Compiled binaries
$share - Distributed read-only data
$user - User-created modifiable data
Windows .zip / RUN_IN_PLACE source:
$bin = bin
$share = .
$user = .
Linux installed:
$bin = /usr/bin
$share = /usr/share/minetest
$user = ~/.minetest
macOS:
$bin = Contents/MacOS
$share = Contents/Resources
$user = Contents/User OR ~/Library/Application Support/minetest
World directory
----------------
- Worlds can be found as separate folders in:
$user/worlds/
Configuration file:
-------------------
- An optional configuration file can be used. See minetest.conf.example.
- Path to file can be passed as a parameter to the executable:
--config <path-to-file>
- Defaults:
- If built with -DRUN_IN_PLACE=1:
../minetest.conf
../../minetest.conf
- Otherwise something like this:
Windows: C:\Documents and Settings\user\Application Data\minetest\minetest.conf
Linux: ~/.minetest/minetest.conf
OS X: ~/Library/Application Support/minetest.conf
- Default location:
$user/minetest.conf
- It is created by Minetest when it is ran the first time.
- A specific file can be specified on the command line:
--config <path-to-file>
- A run-in-place build will look for the configuration file in
$location_of_exe/../minetest.conf and also $location_of_exe/../../minetest.conf
Command-line options:
---------------------
@@ -54,29 +113,142 @@ Compiling on GNU/Linux:
-----------------------
Install dependencies. Here's an example for Debian/Ubuntu:
$ apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev
$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev
Download source, extract (this is the URL to the latest of source repository, which might not work at all times):
$ wget https://github.com/celeron55/minetest/tarball/master -O master.tar.gz
For Fedora users:
$ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl* openal* libvorbis* libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
You can install git for easily keeping your copy up to date.
If you dont want git, read below on how to get the source without git.
This is an example for installing git on Debian/Ubuntu:
$ sudo apt-get install git
For Fedora users:
$ sudo dnf install git
Download source (this is the URL to the latest of source repository, which might not work at all times) using git:
$ git clone --depth 1 https://github.com/minetest/minetest.git
$ cd minetest
Download minetest_game (otherwise only the "Minimal development test" game is available) using git:
$ git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game
Download source, without using git:
$ wget https://github.com/minetest/minetest/archive/master.tar.gz
$ tar xf master.tar.gz
$ cd celeron55-minetest-286edd4 (or similar)
$ cd minetest-master
Download minetest_game, without using git:
$ cd games/
$ wget https://github.com/minetest/minetest_game/archive/master.tar.gz
$ tar xf master.tar.gz
$ mv minetest_game-master minetest_game
$ cd ..
Build a version that runs directly from the source directory:
$ cmake . -DRUN_IN_PLACE=1
$ make -j2
$ cmake . -DRUN_IN_PLACE=TRUE
$ make -j <number of processors>
Run it:
$ cd bin
$ ./minetest
$ ./bin/minetest
- Use cmake . -LH to see all CMake options and their current state
- If you want to install it system-wide (or are making a distribution package), you will want to use -DRUN_IN_PLACE=0
- You can build a bare server or a bare client by specifying -DBUILD_CLIENT=0 or -DBUILD_SERVER=0
- If you want to install it system-wide (or are making a distribution package),
you will want to use -DRUN_IN_PLACE=FALSE
- You can build a bare server by specifying -DBUILD_SERVER=TRUE
- You can disable the client build by specifying -DBUILD_CLIENT=FALSE
- You can select between Release and Debug build by -DCMAKE_BUILD_TYPE=<Debug or Release>
- Debug build is slower, but gives much more useful output in a debugger
- If you build a bare server, you don't need to have Irrlicht installed.
In that case use -DIRRLICHT_SOURCE_DIR=/the/irrlicht/source
CMake options
-------------
General options:
BUILD_CLIENT - Build Minetest client
BUILD_SERVER - Build Minetest server
CMAKE_BUILD_TYPE - Type of build (Release vs. Debug)
Release - Release build
Debug - Debug build
SemiDebug - Partially optimized debug build
RelWithDebInfo - Release build with Debug information
MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible
ENABLE_CURL - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
ENABLE_CURSES - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
ENABLE_FREETYPE - Build with FreeType2; Allows using TTF fonts
ENABLE_GETTEXT - Build with Gettext; Allows using translations
ENABLE_GLES - Search for Open GLES headers & libraries and use them
ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend
ENABLE_POSTGRESQL - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended)
ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend
ENABLE_SPATIAL - Build with LibSpatial; Speeds up AreaStores
ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds
ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua)
ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp)
RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory)
USE_GPROF - Enable profiling using GProf
VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)
Library specific options:
BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located
BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so
CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll
CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located
CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib
EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h
EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so
FREETYPE_INCLUDE_DIR_freetype2 - Only if building with Freetype2; directory that contains an freetype directory with files such as ftimage.h in it
FREETYPE_INCLUDE_DIR_ft2build - Only if building with Freetype2; directory that contains ft2build.h
FREETYPE_LIBRARY - Only if building with Freetype2; path to libfreetype.a/libfreetype.so/freetype.lib
FREETYPE_DLL - Only if building with Freetype2 on Windows; path to libfreetype.dll
GETTEXT_DLL - Only when building with Gettext on Windows; path to libintl3.dll
GETTEXT_ICONV_DLL - Only when building with Gettext on Windows; path to libiconv2.dll
GETTEXT_INCLUDE_DIR - Only when building with Gettext; directory that contains iconv.h
GETTEXT_LIBRARY - Only when building with Gettext on Windows; path to libintl.dll.a
GETTEXT_MSGFMT - Only when building with Gettext; path to msgfmt/msgfmt.exe
IRRLICHT_DLL - Only on Windows; path to Irrlicht.dll
IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h
IRRLICHT_LIBRARY - Path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a/Irrlicht.lib
LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h
LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a
LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll
PostgreSQL_INCLUDE_DIR - Only when building with PostgreSQL; directory that contains libpq-fe.h
POSTGRESQL_LIBRARY - Only when building with PostgreSQL; path to libpq.a/libpq.so
REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h
REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so
SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h
SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib
LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located
LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so
MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll
OGG_DLL - Only if building with sound on Windows; path to libogg.dll
OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h
OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a
OPENAL_DLL - Only if building with sound on Windows; path to OpenAL32.dll
OPENAL_INCLUDE_DIR - Only if building with sound; directory where al.h is located
OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib
OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h
OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so
SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h
SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib
VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll
VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a
VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll
VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside
VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a
XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so
ZLIB_DLL - Only on Windows; path to zlib1.dll
ZLIBWAPI_DLL - Only on Windows; path to zlibwapi.dll
ZLIB_INCLUDE_DIR - Directory that contains zlib.h
ZLIB_LIBRARY - Path to libz.a/libz.so/zlibwapi.lib
Compiling on Windows:
---------------------
- This section is outdated. In addition to what is described here:
- In addition to minetest, you need to download minetest_game.
- If you wish to have sound support, you need libogg, libvorbis and libopenal
- You need:
* CMake:
@@ -90,16 +262,23 @@ Compiling on Windows:
http://www.winimage.com/zLibDll/index.html
* Zlib library (zlibwapi.lib and zlibwapi.dll from zlib125dll.zip):
http://www.winimage.com/zLibDll/index.html
* Optional: gettext bibrary and tools:
* SQLite3 headers and library
https://www.sqlite.org/download.html
* Optional: gettext library and tools:
http://gnuwin32.sourceforge.net/downlinks/gettext.php
- This is used for other UI languages. Feel free to leave it out.
* And, of course, Minetest-c55:
http://celeron.55.lt/~celeron55/minetest/download
* And, of course, Minetest:
http://minetest.net/download
- Steps:
- Select a directory called DIR hereafter in which you will operate.
- Make sure you have CMake and a compiler installed.
- Download all the other stuff to DIR and extract them into there.
("extract here", not "extract to packagename/")
NOTE: zlib125dll.zip needs to be extracted into zlib125dll
NOTE: You need to extract sqlite3.h & sqlite3ext.h from sqlite3 source
and sqlite3.dll & sqlite3.def from sqlite3 precompiled binaries
into "sqlite3" directory, and generate sqlite3.lib using command
"LIB /DEF:sqlite3.def /OUT:sqlite3.lib"
- All those packages contain a nice base directory in them, which
should end up being the direct subdirectories of DIR.
- You will end up with a directory structure like this (+=dir, -=file):
@@ -107,7 +286,9 @@ Compiling on Windows:
+ DIR
- zlib-1.2.5.tar.gz
- zlib125dll.zip
- irrlicht-1.7.1.zip
- irrlicht-1.8.3.zip
- sqlite-amalgamation-3130000.zip (SQLite3 headers)
- sqlite-dll-win32-x86-3130000.zip (SQLite3 library for 32bit system)
- 110214175330.zip (or whatever, this is the minetest source)
+ zlib-1.2.5
- zlib.h
@@ -117,10 +298,15 @@ Compiling on Windows:
- readme.txt
+ dll32
...
+ irrlicht-1.7.1
+ irrlicht-1.8.3
+ lib
+ include
...
+ sqlite3
sqlite3.h
sqlite3ext.h
sqlite3.lib
sqlite3.dll
+ gettext (optional)
+bin
+include
@@ -147,7 +333,7 @@ Compiling on Windows:
BUILD_SERVER [ ]
CMAKE_BUILD_TYPE Release
CMAKE_INSTALL_PREFIX DIR/minetest-install
IRRLICHT_SOURCE_DIR DIR/irrlicht-1.7.1
IRRLICHT_SOURCE_DIR DIR/irrlicht-1.8.3
RUN_IN_PLACE [X]
WARN_ALL [ ]
ZLIB_DLL DIR/zlib125dll/dll32/zlibwapi.dll
@@ -158,6 +344,11 @@ Compiling on Windows:
GETTEXT_LIBRARIES DIR/gettext/lib/intl.lib
GETTEXT_MSGFMT DIR/gettext/bin/msgfmt
-----------------
- If CMake complains it couldn't find SQLITE3, choose "Advanced" box on the
right top corner, then specify the location of SQLITE3_INCLUDE_DIR and
SQLITE3_LIBRARY manually.
- If you want to build 64-bit minetest, you will need to build 64-bit version
of irrlicht engine manually, as only 32-bit pre-built library is provided.
- Hit "Configure"
- Hit "Configure" once again 8)
- If something is still coloured red, you have a problem.
@@ -176,51 +367,81 @@ Compiling on Windows:
If using MinGW:
- Using the command line, browse to the build directory and run 'make'
(or mingw32-make or whatever it happens to be)
- You may need to copy some of the downloaded DLLs into bin/, see what
running the produced executable tells you it doesn't have.
- You should now have a working game with the executable in
DIR/minetest/bin/minetest.exe
Windows releases of minetest are built using a bat script like this:
--------------------------------------------------------------------
set sourcedir=%CD%
set installpath="C:\tmp\minetest_install"
set irrlichtpath="C:\tmp\irrlicht-1.7.2"
set sourcedir=%CD%
set builddir=%sourcedir%\bvc10
mkdir %builddir%
pushd %builddir%
cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=1 -DCMAKE_INSTALL_PREFIX=%installpath%
cmake %sourcedir% -G "Visual Studio 10" -DIRRLICHT_SOURCE_DIR=%irrlichtpath% -DRUN_IN_PLACE=TRUE -DCMAKE_INSTALL_PREFIX=%installpath%
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" ALL_BUILD.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" INSTALL.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" PACKAGE.vcxproj /p:Configuration=Release
if %errorlevel% neq 0 goto fail
popd
echo Finished.
exit /b 0
License of Minetest-c55 textures and sounds
-------------------------------------------
:fail
popd
echo Failed.
exit /b 1
License of Minetest textures and sounds
---------------------------------------
This applies to textures and sounds contained in the main Minetest
distribution.
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
License of Minetest-c55 source code
-----------------------------------
Authors of media files
-----------------------
Everything not listed in here:
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
Minetest-c55
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
ShadowNinja:
textures/base/pack/smoke_puff.png
Paramat:
textures/base/pack/menu_header.png
erlehmann:
misc/minetest-icon-24x24.png
misc/minetest-icon.ico
misc/minetest.svg
textures/base/pack/logo.png
License of Minetest source code
-------------------------------
Minetest
Copyright (C) 2010-2017 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU Lesser General Public License for more details.
You should have received a copy of the GNU General Public License along
You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@@ -276,4 +497,61 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
Lua
---------------
Lua is licensed under the terms of the MIT license reproduced below.
This means that Lua is free software and can be used for both academic
and commercial purposes at absolutely no cost.
For details and rationale, see https://www.lua.org/license.html .
Copyright (C) 1994-2008 Lua.org, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Fonts
---------------
Bitstream Vera Fonts Copyright:
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.
Arimo - Apache License, version 2.0
Digitized data copyright (c) 2010-2012 Google Corporation.
Cousine - Apache License, version 2.0
Digitized data copyright (c) 2010-2012 Google Corporation.
DroidSansFallBackFull:
Copyright (C) 2008 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

853
build/android/Makefile Normal file
View File

@@ -0,0 +1,853 @@
# build options
OS := $(shell uname)
# compile with GPROF
# GPROF = 1
# build for build platform
APP_PLATFORM = android-9
ANDR_ROOT = $(shell pwd)
PROJ_ROOT = $(shell realpath $(ANDR_ROOT)/../..)
APP_ROOT = $(ANDR_ROOT)/src/main
GAMES_TO_COPY = minetest_game
MODS_TO_COPY =
VERSION_MAJOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ')
VERSION_MINOR := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ')
VERSION_PATCH := $(shell cat $(PROJ_ROOT)/CMakeLists.txt | \
grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ')
################################################################################
# toolchain config for arm new processors
################################################################################
TARGET_HOST = arm-linux
TARGET_ABI = armeabi-v7a
TARGET_LIBDIR = armeabi-v7a
TARGET_TOOLCHAIN = arm-linux-androideabi-
TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 -O3
TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON)
TARGET_ARCH = armv7
CROSS_PREFIX = arm-linux-androideabi-
COMPILER_VERSION = 4.9
HAVE_LEVELDB = 0
################################################################################
# toolchain config for little endian mips
################################################################################
#TARGET_HOST = mipsel-linux
#TARGET_ABI = mips
#TARGET_LIBDIR = mips
#TARGET_TOOLCHAIN = mipsel-linux-android-
#TARGET_ARCH = mips32
#CROSS_PREFIX = mipsel-linux-android-
#COMPILER_VERSION = 4.9
#HAVE_LEVELDB = 0
################################################################################
# toolchain config for x86
################################################################################
#TARGET_HOST = x86-linux
#TARGET_ABI = x86
#TARGET_LIBDIR = x86
#TARGET_TOOLCHAIN = x86-
#CROSS_PREFIX = i686-linux-android-
#TARGET_ARCH = x86
#COMPILER_VERSION = 4.9
#HAVE_LEVELDB = 0
################################################################################
ASSETS_TIMESTAMP = deps/assets_timestamp
LEVELDB_DIR = $(ANDR_ROOT)/deps/leveldb/
LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a
LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp
LEVELDB_TIMESTAMP_INT = $(ANDR_ROOT)/deps/leveldb_timestamp
LEVELDB_URL_GIT = https://github.com/google/leveldb
LEVELDB_COMMIT = 2d0320a458d0e6a20fff46d5f80b18bfdcce7018
OPENAL_DIR = $(ANDR_ROOT)/deps/openal-soft/
OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so
OPENAL_TIMESTAMP = $(OPENAL_DIR)/timestamp
OPENAL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openal_timestamp
OPENAL_URL_GIT = https://github.com/apportable/openal-soft
OGG_DIR = $(ANDR_ROOT)/deps/libvorbis-libogg-android/
OGG_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
VORBIS_LIB = $(OGG_DIR)libs/$(TARGET_ABI)/libogg.so
OGG_TIMESTAMP = $(OGG_DIR)timestamp
OGG_TIMESTAMP_INT = $(ANDR_ROOT)/deps/ogg_timestamp
OGG_URL_GIT = https://github.com/vincentjames501/libvorbis-libogg-android
IRRLICHT_REVISION = 5145
IRRLICHT_DIR = $(ANDR_ROOT)/deps/irrlicht/
IRRLICHT_LIB = $(IRRLICHT_DIR)lib/Android/libIrrlicht.a
IRRLICHT_TIMESTAMP = $(IRRLICHT_DIR)timestamp
IRRLICHT_TIMESTAMP_INT = $(ANDR_ROOT)/deps/irrlicht_timestamp
IRRLICHT_URL_SVN = https://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@$(IRRLICHT_REVISION)
OPENSSL_VERSION = 1.0.2k
OPENSSL_BASEDIR = openssl-$(OPENSSL_VERSION)
OPENSSL_DIR = $(ANDR_ROOT)/deps/$(OPENSSL_BASEDIR)/
OPENSSL_LIB = $(OPENSSL_DIR)/libssl.so.1.0.0
OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp
OPENSSL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/openssl_timestamp
OPENSSL_URL = https://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz
CURL_VERSION = 7.54.0
CURL_DIR = $(ANDR_ROOT)/deps/curl-$(CURL_VERSION)
CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a
CURL_TIMESTAMP = $(CURL_DIR)/timestamp
CURL_TIMESTAMP_INT = $(ANDR_ROOT)/deps/curl_timestamp
CURL_URL_HTTP = https://curl.haxx.se/download/curl-${CURL_VERSION}.tar.bz2
GMP_VERSION = 6.1.2
GMP_DIR = $(ANDR_ROOT)/deps/gmp-$(GMP_VERSION)
GMP_LIB = $(GMP_DIR)/usr/lib/libgmp.so
GMP_TIMESTAMP = $(GMP_DIR)/timestamp
GMP_TIMESTAMP_INT = $(ANDR_ROOT)/deps/gmp_timestamp
GMP_URL_HTTP = https://gmplib.org/download/gmp/gmp-$(GMP_VERSION).tar.bz2
FREETYPE_DIR = $(ANDR_ROOT)/deps/freetype2-android/
FREETYPE_LIB = $(FREETYPE_DIR)/Android/obj/local/$(TARGET_ABI)/libfreetype2-static.a
FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp
FREETYPE_TIMESTAMP_INT = $(ANDR_ROOT)/deps/freetype_timestamp
FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android
ICONV_VERSION = 1.14
ICONV_DIR = $(ANDR_ROOT)/deps/libiconv/
ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so
ICONV_TIMESTAMP = $(ICONV_DIR)timestamp
ICONV_TIMESTAMP_INT = $(ANDR_ROOT)/deps/iconv_timestamp
ICONV_URL_HTTP = https://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz
SQLITE3_FOLDER = sqlite-amalgamation-3180000
SQLITE3_URL = https://www.sqlite.org/2017/$(SQLITE3_FOLDER).zip
ANDROID_SDK = $(shell grep '^sdk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
ANDROID_NDK = $(shell grep '^ndk\.dir' local.properties | sed 's/^.*=[[:space:]]*//')
NDK_MODULE_PATH = $(ANDROID_NDK)/toolchains
#use interim target variable to switch leveldb on or off
ifeq ($(HAVE_LEVELDB),1)
LEVELDB_TARGET = $(LEVELDB_LIB)
endif
.PHONY : debug release reconfig delconfig \
leveldb_download clean_leveldb leveldb\
irrlicht_download clean_irrlicht irrlicht \
clean_assets assets sqlite3_download \
freetype_download clean_freetype freetype \
apk clean_apk \
clean_all clean prep_srcdir \
install_debug install_release envpaths all \
$(ASSETS_TIMESTAMP) $(LEVELDB_TIMESTAMP) \
$(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \
$(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \
$(OPENSSL_TIMESTAMP) \
$(ANDR_ROOT)/jni/src/android_version.h \
$(ANDR_ROOT)/jni/src/android_version_githash.h
debug : local.properties
export NDEBUG=; \
export BUILD_TYPE=debug; \
$(MAKE) apk
all : debug release
release : local.properties
@export NDEBUG=1; \
export BUILD_TYPE=release; \
$(MAKE) apk
reconfig: delconfig
@$(MAKE) local.properties
delconfig:
$(RM) local.properties
local.properties:
@echo "Please specify path of ANDROID NDK"; \
echo "e.g. $$HOME/Android/ndk-r11c/"; \
read ANDROID_NDK ; \
if [ ! -d $$ANDROID_NDK ] ; then \
echo "$$ANDROID_NDK is not a valid folder"; \
exit 1; \
fi; \
echo "ndk.dir = $$ANDROID_NDK" > local.properties; \
echo "Please specify path of ANDROID SDK"; \
echo "e.g. $$HOME/Android/sdk/"; \
read SDKFLDR ; \
if [ ! -d $$SDKFLDR ] ; then \
echo "$$SDKFLDR is not a valid folder"; \
exit 1; \
fi; \
echo "sdk.dir = $$SDKFLDR" >> local.properties;
$(OPENAL_TIMESTAMP) : openal_download
@LAST_MODIF=$$(find ${OPENAL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${OPENAL_TIMESTAMP}; \
fi
openal_download :
@if [ ! -d ${OPENAL_DIR} ] ; then \
echo "openal sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd ${ANDR_ROOT}/deps ; \
git clone ${OPENAL_URL_GIT} || exit 1; \
fi
openal : $(OPENAL_LIB)
$(OPENAL_LIB): $(OPENAL_TIMESTAMP)
+ @REFRESH=0; \
if [ ! -e ${OPENAL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ${OPENAL_TIMESTAMP} -nt ${OPENAL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "changed timestamp for openal detected building..."; \
cd ${OPENAL_DIR}; \
${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
NDK_MODULE_PATH=${NDK_MODULE_PATH} APP_ABI=${TARGET_ABI} \
TARGET_ARCH_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OPENAL_TIMESTAMP}; \
touch ${OPENAL_TIMESTAMP_INT}; \
else \
echo "nothing to be done for openal"; \
fi
clean_openal :
$(RM) -rf ${OPENAL_DIR}
$(OGG_TIMESTAMP) : ogg_download
@LAST_MODIF=$$(find ${OGG_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${OGG_TIMESTAMP}; \
fi
ogg_download :
@if [ ! -d ${OGG_DIR} ] ; then \
echo "ogg sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd ${ANDR_ROOT}/deps ; \
git clone ${OGG_URL_GIT}|| exit 1; \
cd libvorbis-libogg-android ; \
patch -p1 < ${ANDR_ROOT}/patches/libvorbis-libogg-fpu.patch || exit 1; \
sed -i 's-:-?-' jni/Application.mk; \
fi
ogg : $(OGG_LIB)
$(OGG_LIB): $(OGG_TIMESTAMP)
+ @REFRESH=0; \
if [ ! -e ${OGG_TIMESTAMP_INT} ] ; then \
echo "${OGG_TIMESTAMP_INT} doesn't exist"; \
REFRESH=1; \
fi; \
if [ ${OGG_TIMESTAMP} -nt ${OGG_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "changed timestamp for ogg detected building..."; \
cd ${OGG_DIR}; \
${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${OGG_TIMESTAMP}; \
touch ${OGG_TIMESTAMP_INT}; \
else \
echo "nothing to be done for libogg/libvorbis"; \
fi
clean_ogg :
$(RM) -rf ${OGG_DIR}
$(OPENSSL_TIMESTAMP) : openssl_download
@LAST_MODIF=$$(find ${OPENSSL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${OPENSSL_TIMESTAMP}; \
fi
openssl_download :
@if [ ! -d ${OPENSSL_DIR} ] ; then \
echo "openssl sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd ${ANDR_ROOT}/deps ; \
wget ${OPENSSL_URL} || exit 1; \
tar -xzf ${OPENSSL_BASEDIR}.tar.gz; \
cd ${OPENSSL_BASEDIR}; \
patch -p1 < ${ANDR_ROOT}/patches/openssl_arch.patch; \
fi
openssl : $(OPENSSL_LIB)
$(OPENSSL_LIB): $(OPENSSL_TIMESTAMP) $(GMP_LIB)
@REFRESH=0; \
if [ ! -e ${OPENSSL_TIMESTAMP_INT} ] ; then \
echo "${OPENSSL_TIMESTAMP_INT} doesn't exist"; \
REFRESH=1; \
fi; \
if [ ${OPENSSL_TIMESTAMP} -nt ${OPENSSL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "changed timestamp for openssl detected building..."; \
cd ${OPENSSL_DIR}; \
ln -s ${OPENSSL_DIR} ../openssl; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-openssl; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--platform=android-9 \
--install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
CC=${CROSS_PREFIX}gcc ./Configure enable-gmp -DL_ENDIAN -I${GMP_DIR} -L${GMP_DIR}/usr/lib android-${TARGET_ARCH};\
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make depend; \
CC=${CROSS_PREFIX}gcc ANDROID_DEV=/tmp/ndk-${TARGET_HOST} make build_libs; \
touch ${OPENSSL_TIMESTAMP}; \
touch ${OPENSSL_TIMESTAMP_INT}; \
$(RM) -rf $${TOOLCHAIN}; \
else \
echo "nothing to be done for openssl"; \
fi
clean_openssl :
$(RM) -rf ${OPENSSL_DIR}; \
$(RM) -rf $(ANDR_ROOT)/deps/${OPENSSL_BASEDIR}.tar.gz; \
$(RM) -rf $(ANDR_ROOT)/deps/openssl
$(LEVELDB_TIMESTAMP) : leveldb_download
@LAST_MODIF=$$(find ${LEVELDB_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${LEVELDB_TIMESTAMP}; \
fi
leveldb_download :
@if [ ! -d ${LEVELDB_DIR} ] ; then \
echo "leveldb sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd ${ANDR_ROOT}/deps ; \
git clone ${LEVELDB_URL_GIT} || exit 1; \
cd ${LEVELDB_DIR} || exit 1; \
git checkout ${LEVELDB_COMMIT} || exit 1; \
fi
leveldb : $(LEVELDB_LIB)
ifeq ($(HAVE_LEVELDB),1)
$(LEVELDB_LIB): $(LEVELDB_TIMESTAMP)
@REFRESH=0; \
if [ ! -e ${LEVELDB_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ${LEVELDB_TIMESTAMP} -nt ${LEVELDB_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "changed timestamp for leveldb detected building..."; \
cd deps/leveldb; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-leveldb; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--platform=android-9 \
--install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
export CPPFLAGS="$${CPPFLAGS} ${TARGET_CXXFLAGS_ADDON}"; \
export LDFLAGS="$${LDFLAGS} ${TARGET_LDFLAGS_ADDON}"; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
$(MAKE) || exit 1; \
touch ${LEVELDB_TIMESTAMP}; \
touch ${LEVELDB_TIMESTAMP_INT}; \
$(RM) -rf $${TOOLCHAIN}; \
else \
echo "nothing to be done for leveldb"; \
fi
endif
clean_leveldb :
$(RM) -rf deps/leveldb
$(FREETYPE_TIMESTAMP) : freetype_download
@LAST_MODIF=$$(find ${FREETYPE_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${FREETYPE_TIMESTAMP}; \
fi
freetype_download :
@if [ ! -d ${FREETYPE_DIR} ] ; then \
echo "freetype sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
git clone ${FREETYPE_URL_GIT} || exit 1; \
fi
freetype : $(FREETYPE_LIB)
$(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP)
+ @REFRESH=0; \
if [ ! -e ${FREETYPE_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ! -e ${FREETYPE_LIB} ] ; then \
REFRESH=1; \
fi; \
if [ ${FREETYPE_TIMESTAMP} -nt ${FREETYPE_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${FREETYPE_DIR}; \
echo "changed timestamp for freetype detected building..."; \
cd ${FREETYPE_DIR}/Android/jni; \
${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_PLATFORM=${APP_PLATFORM} APP_ABI=${TARGET_ABI} \
PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${FREETYPE_TIMESTAMP}; \
touch ${FREETYPE_TIMESTAMP_INT}; \
else \
echo "nothing to be done for freetype"; \
fi
clean_freetype :
$(RM) -rf ${FREETYPE_DIR}
$(ICONV_TIMESTAMP) : iconv_download
@LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${ICONV_TIMESTAMP}; \
fi
iconv_download :
@if [ ! -d ${ICONV_DIR} ] ; then \
echo "iconv sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd ${ANDR_ROOT}/deps; \
wget ${ICONV_URL_HTTP} || exit 1; \
tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \
rm libiconv-${ICONV_VERSION}.tar.gz; \
ln -s libiconv-${ICONV_VERSION} libiconv; \
cd ${ICONV_DIR}; \
patch -p1 < ${ANDR_ROOT}/patches/libiconv_android.patch; \
patch -p1 < ${ANDR_ROOT}/patches/libiconv_stdio.patch; \
fi
iconv : $(ICONV_LIB)
$(ICONV_LIB) : $(ICONV_TIMESTAMP)
@REFRESH=0; \
if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ! -e ${ICONV_LIB} ] ; then \
REFRESH=1; \
fi; \
if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${ICONV_DIR}; \
echo "changed timestamp for iconv detected building..."; \
cd ${ICONV_DIR}; \
\
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--platform=android-9 \
--install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
./configure --host=${TARGET_HOST} || exit 1; \
sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \
grep "iconv_LDFLAGS" src/Makefile; \
$(MAKE) -s || exit 1; \
touch ${ICONV_TIMESTAMP}; \
touch ${ICONV_TIMESTAMP_INT}; \
rm -rf ${TOOLCHAIN}; \
else \
echo "nothing to be done for iconv"; \
fi
clean_iconv :
$(RM) -rf ${ICONV_DIR}
#Note: Texturehack patch is required for gpu's not supporting color format
# correctly. Known bad GPU:
# -geforce on emulator
# -Vivante Corporation GC1000 core (e.g. Galaxy Tab 3)
irrlicht_download :
@if [ ! -d "deps/irrlicht" ] ; then \
echo "irrlicht sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
svn co ${IRRLICHT_URL_SVN} irrlicht || exit 1; \
cd irrlicht; \
patch -p1 < ${ANDR_ROOT}/patches/irrlicht-touchcount.patch || exit 1; \
patch -p1 < ${ANDR_ROOT}/patches/irrlicht-back_button.patch || exit 1; \
patch -p1 < ${ANDR_ROOT}/patches/irrlicht-texturehack.patch || exit 1; \
fi
$(IRRLICHT_TIMESTAMP) : irrlicht_download
@LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${IRRLICHT_TIMESTAMP}; \
fi
irrlicht : $(IRRLICHT_LIB)
$(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB)
+ @REFRESH=0; \
if [ ! -e ${IRRLICHT_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ! -e ${IRRLICHT_LIB} ] ; then \
REFRESH=1; \
fi; \
if [ ${IRRLICHT_TIMESTAMP} -nt ${IRRLICHT_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${IRRLICHT_DIR}; \
echo "changed timestamp for irrlicht detected building..."; \
cd deps/irrlicht/source/Irrlicht/Android; \
${ANDROID_NDK}/ndk-build NDEBUG=${NDEBUG} \
NDK_MODULE_PATH=${NDK_MODULE_PATH} \
APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \
PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
touch ${IRRLICHT_TIMESTAMP}; \
touch ${IRRLICHT_TIMESTAMP_INT}; \
else \
echo "nothing to be done for irrlicht"; \
fi
clean_irrlicht :
$(RM) -rf deps/irrlicht
$(CURL_TIMESTAMP) : curl_download
@LAST_MODIF=$$(find ${CURL_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${CURL_TIMESTAMP}; \
fi
curl_download :
@if [ ! -d "deps/curl-${CURL_VERSION}" ] ; then \
echo "curl sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
wget ${CURL_URL_HTTP} || exit 1; \
tar -xjf curl-${CURL_VERSION}.tar.bz2 || exit 1; \
rm curl-${CURL_VERSION}.tar.bz2; \
ln -s curl-${CURL_VERSION} curl; \
fi
curl : $(CURL_LIB)
$(CURL_LIB): $(CURL_TIMESTAMP) $(OPENSSL_LIB)
@REFRESH=0; \
if [ ! -e ${CURL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ! -e ${CURL_LIB} ] ; then \
REFRESH=1; \
fi; \
if [ ${CURL_TIMESTAMP} -nt ${CURL_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${CURL_DIR}; \
echo "changed timestamp for curl detected building..."; \
cd deps/curl-${CURL_VERSION}; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-curl; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--platform=android-9 \
--install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \
export CPPFLAGS="$${CPPFLAGS} -I${OPENSSL_DIR}/include ${TARGET_CFLAGS_ADDON}"; \
export CFLAGS="$${CFLAGS} ${TARGET_CFLAGS_ADDON}"; \
export LDFLAGS="$${LDFLAGS} -L${OPENSSL_DIR} ${TARGET_LDFLAGS_ADDON}"; \
./configure --host=${TARGET_HOST} --disable-shared --enable-static --with-ssl; \
$(MAKE) -s || exit 1; \
touch ${CURL_TIMESTAMP}; \
touch ${CURL_TIMESTAMP_INT}; \
$(RM) -rf $${TOOLCHAIN}; \
else \
echo "nothing to be done for curl"; \
fi
clean_curl :
$(RM) -rf deps/curl-${CURL_VERSION} \
$(RM) -f deps/curl
$(GMP_TIMESTAMP) : gmp_download
@LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${GMP_TIMESTAMP}; \
fi
gmp_download :
@if [ ! -d "${GMP_DIR}" ] ; then \
echo "gmp sources missing, downloading..."; \
mkdir -p ${ANDR_ROOT}/deps; \
cd deps; \
wget ${GMP_URL_HTTP} || exit 1; \
tar -xjf gmp-${GMP_VERSION}.tar.bz2 || exit 1; \
rm gmp-${GMP_VERSION}.tar.bz2; \
ln -s gmp-${GMP_VERSION} gmp; \
fi
gmp : $(GMP_LIB)
$(GMP_LIB): $(GMP_TIMESTAMP)
@REFRESH=0; \
if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ ! -e ${GMP_LIB} ] ; then \
REFRESH=1; \
fi; \
if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
mkdir -p ${GMP_DIR}; \
echo "changed timestamp for gmp detected building..."; \
cd deps/gmp-${GMP_VERSION}; \
export CROSS_PREFIX=${CROSS_PREFIX}; \
export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \
${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \
--platform=android-9 \
--install-dir=$${TOOLCHAIN}; \
export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \
export CC=${CROSS_PREFIX}gcc; \
export CXX=${CROSS_PREFIX}g++; \
export LIBGMP_LDFLAGS="-avoid-version"; \
export LIBGMPXX_LDFLAGS="-avoid-version"; \
./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \
$(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \
touch ${GMP_TIMESTAMP}; \
touch ${GMP_TIMESTAMP_INT}; \
$(RM) -rf $${TOOLCHAIN}; \
else \
echo "nothing to be done for gmp"; \
fi
clean_gmp:
$(RM) -rf deps/gmp-${GMP_VERSION} \
$(RM) -f deps/gmp
sqlite3_download: deps/${SQLITE3_FOLDER}/sqlite3.c
deps/${SQLITE3_FOLDER}/sqlite3.c :
cd deps; \
wget ${SQLITE3_URL}; \
unzip ${SQLITE3_FOLDER}.zip; \
ln -s ${SQLITE3_FOLDER} sqlite; \
cd ${SQLITE3_FOLDER};
clean_sqlite3:
cd deps && $(RM) -rf ${SQLITE3_FOLDER} && $(RM) -f ${SQLITE3_FOLDER}.zip && \
$(RM) -f sqlite
$(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB)
@mkdir -p ${ANDR_ROOT}/deps; \
for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \
LAST_MODIF=$$(find ${PROJ_ROOT}/${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \
touch ${PROJ_ROOT}/${DIRNAME}/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
echo ${DIRNAME} changed $$LAST_MODIF; \
fi; \
done; \
LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \
if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \
touch ${IRRLICHT_DIR}/media/timestamp; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
if [ ${PROJ_ROOT}/minetest.conf.example -nt ${ASSETS_TIMESTAMP} ] ; then \
echo "conf changed"; \
touch ${ASSETS_TIMESTAMP}; \
fi; \
if [ ${PROJ_ROOT}/README.txt -nt ${ASSETS_TIMESTAMP} ] ; then \
touch ${ASSETS_TIMESTAMP}; \
fi; \
if [ ! -e $(ASSETS_TIMESTAMP) ] ; then \
touch $(ASSETS_TIMESTAMP); \
fi
assets : $(ASSETS_TIMESTAMP)
@REFRESH=0; \
if [ ! -e ${ASSETS_TIMESTAMP}.old ] ; then \
REFRESH=1; \
fi; \
if [ ${ASSETS_TIMESTAMP} -nt ${ASSETS_TIMESTAMP}.old ] ; then \
REFRESH=1; \
fi; \
if [ ! -d ${APP_ROOT}/assets ] ; then \
REFRESH=1; \
fi; \
if [ $$REFRESH -ne 0 ] ; then \
echo "assets changed, refreshing..."; \
$(MAKE) clean_assets; \
mkdir -p ${APP_ROOT}/assets/Minetest; \
cp ${PROJ_ROOT}/minetest.conf.example ${APP_ROOT}/assets/Minetest; \
cp ${PROJ_ROOT}/README.txt ${APP_ROOT}/assets/Minetest; \
cp -r ${PROJ_ROOT}/builtin ${APP_ROOT}/assets/Minetest; \
mkdir -p ${APP_ROOT}/assets/Minetest/client; \
cp -r ${PROJ_ROOT}/client/shaders ${APP_ROOT}/assets/Minetest/client; \
cp ${PROJ_ROOT}/doc/lgpl-2.1.txt ${APP_ROOT}/assets/Minetest/LICENSE.txt; \
mkdir -p ${APP_ROOT}/assets/Minetest/fonts; \
cp -r ${PROJ_ROOT}/fonts/*.ttf ${APP_ROOT}/assets/Minetest/fonts/; \
mkdir -p ${APP_ROOT}/assets/Minetest/games; \
for game in ${GAMES_TO_COPY}; do \
cp -r ${PROJ_ROOT}/games/$$game ${APP_ROOT}/assets/Minetest/games/; \
done; \
mkdir -p ${APP_ROOT}/assets/Minetest/mods; \
for mod in ${MODS_TO_COPY}; do \
cp -r ${PROJ_ROOT}/mods/$$mod ${APP_ROOT}/assets/Minetest/mods/; \
done; \
cp -r ${PROJ_ROOT}/po ${APP_ROOT}/assets/Minetest; \
cp -r ${PROJ_ROOT}/textures ${APP_ROOT}/assets/Minetest; \
mkdir -p ${APP_ROOT}/assets/Minetest/media; \
cp -r ${IRRLICHT_DIR}/media/Shaders ${APP_ROOT}/assets/Minetest/media; \
cd ${APP_ROOT}/assets || exit 1; \
find . -name "timestamp" -exec rm {} \; ; \
find . -name "*.blend" -exec rm {} \; ; \
find . -name "*~" -exec rm {} \; ; \
find . -type d -path "*.git" -exec rm -rf {} \; ; \
find . -type d -path "*.svn" -exec rm -rf {} \; ; \
find . -type f -path "*.gitignore" -exec rm -rf {} \; ; \
ls -R | grep ":$$" | sed -e 's/:$$//' -e 's/\.//' -e 's/^\///' > "index.txt"; \
find -L Minetest > filelist.txt; \
cp ${ANDR_ROOT}/${ASSETS_TIMESTAMP} ${ANDR_ROOT}/${ASSETS_TIMESTAMP}.old; \
else \
echo "nothing to be done for assets"; \
fi
clean_assets :
@$(RM) -r assets
apk: local.properties assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \
$(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ANDR_ROOT)/jni/src/android_version.h \
$(ANDR_ROOT)/jni/src/android_version_githash.h sqlite3_download
+ @${ANDROID_NDK}/ndk-build NDK_MODULE_PATH=${NDK_MODULE_PATH} \
GPROF=${GPROF} APP_ABI=${TARGET_ABI} HAVE_LEVELDB=${HAVE_LEVELDB} \
APP_PLATFORM=${APP_PLATFORM} \
PRIVATE_CC=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}gcc \
PRIVATE_CXX=${NDK_MODULE_PATH}/${TARGET_TOOLCHAIN}${COMPILER_VERSION}/prebuilt/linux-x86_64/bin/${TARGET_TOOLCHAIN}g++ \
TARGET_LIBDIR=${TARGET_LIBDIR} \
TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \
TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \
TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \
if [ ! -e ${APP_ROOT}/jniLibs ]; then \
ln -s ${ANDR_ROOT}/libs ${APP_ROOT}/jniLibs || exit 1; \
fi; \
export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" && \
export BUILD_TYPE_C=$$(echo "$${BUILD_TYPE}" | sed 's/./\U&/') && \
./gradlew assemble$$BUILD_TYPE_C && \
echo "APK stored at: build/outputs/apk/Minetest-$$BUILD_TYPE.apk" && \
echo "You can install it with \`make install_$$BUILD_TYPE\`"
# These Intentionally doesn't depend on their respective build steps,
# because it takes a while to verify that everything's up-to-date.
install_debug:
${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-debug.apk
install_release:
${ANDROID_SDK}/platform-tools/adb install -r build/outputs/apk/Minetest-release.apk
prep_srcdir :
@if [ ! -e ${ANDR_ROOT}/jni/src ]; then \
ln -s ${PROJ_ROOT}/src ${ANDR_ROOT}/jni/src; \
fi; \
if [ ! -e ${ANDR_ROOT}/jni/lib ]; then \
ln -s ${PROJ_ROOT}/lib ${ANDR_ROOT}/jni/lib; \
fi
clean_apk :
./gradlew clean
clean_all :
@$(MAKE) clean_apk; \
$(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl \
clean_openssl clean_openal clean_ogg clean_gmp; \
sleep 1; \
$(RM) -r gen libs obj deps bin Debug and_env
$(ANDR_ROOT)/jni/src/android_version_githash.h : prep_srcdir
@export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version_githash.h; \
export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
{ \
echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \
echo "#define ANDROID_MT_VERSION_GITHASH_H"; \
export GITHASH=$$(git rev-parse --short=8 HEAD); \
export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \
echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \
echo "#endif"; \
} > "$${VERSION_FILE_NEW}"; \
if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
echo "android_version_githash.h changed, updating..."; \
mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
else \
rm "$${VERSION_FILE_NEW}"; \
fi
$(ANDR_ROOT)/jni/src/android_version.h : prep_srcdir
@export VERSION_FILE=${ANDR_ROOT}/jni/src/android_version.h; \
export VERSION_FILE_NEW=$${VERSION_FILE}.new; \
{ \
echo "#ifndef ANDROID_MT_VERSION_H"; \
echo "#define ANDROID_MT_VERSION_H"; \
echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \
echo "#define VERSION_MINOR ${VERSION_MINOR}"; \
echo "#define VERSION_PATCH ${VERSION_PATCH}"; \
echo "#define VERSION_STRING STR(VERSION_MAJOR) \".\" STR(VERSION_MINOR) \
\".\" STR(VERSION_PATCH)"; \
echo "#endif"; \
} > $${VERSION_FILE_NEW}; \
if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \
echo "android_version.h changed, updating..."; \
mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \
else \
rm "$${VERSION_FILE_NEW}"; \
fi
clean : clean_apk clean_assets

View File

@@ -0,0 +1,48 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:1.5.0"
}
}
apply plugin: "com.android.application"
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
versionCode 18
versionName "${System.env.VERSION_STR}.${versionCode}"
minSdkVersion 9
targetSdkVersion 9
applicationId "net.minetest.minetest"
manifestPlaceholders = [ package: "net.minetest.minetest", project: project.name ]
}
lintOptions {
disable "OldTargetApi", "GoogleAppIndexingWarning"
}
Properties props = new Properties()
props.load(new FileInputStream(file("local.properties")))
if (props.getProperty("keystore") != null) {
signingConfigs {
release {
storeFile file(props["keystore"])
storePassword props["keystore.password"]
keyAlias props["key"]
keyPassword props["key.password"]
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#Sat Aug 27 20:10:09 CEST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

164
build/android/gradlew vendored Executable file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

90
build/android/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,90 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -0,0 +1,402 @@
LOCAL_PATH := $(call my-dir)/..
#LOCAL_ADDRESS_SANITIZER:=true
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := deps/irrlicht/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
ifeq ($(HAVE_LEVELDB), 1)
include $(CLEAR_VARS)
LOCAL_MODULE := LevelDB
LOCAL_SRC_FILES := deps/leveldb/libleveldb.a
include $(PREBUILT_STATIC_LIBRARY)
endif
include $(CLEAR_VARS)
LOCAL_MODULE := curl
LOCAL_SRC_FILES := deps/curl/lib/.libs/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := freetype
LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := iconv
LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := openal
LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ogg
LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libogg.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := vorbis
LOCAL_SRC_FILES := deps/libvorbis-libogg-android/libs/$(TARGET_LIBDIR)/libvorbis.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := gmp
LOCAL_SRC_FILES := deps/gmp/usr/lib/libgmp.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := deps/openssl/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := deps/openssl/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := minetest
LOCAL_CPP_FEATURES += exceptions
ifdef GPROF
GPROF_DEF=-DGPROF
endif
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ \
-DHAVE_TOUCHSCREENGUI \
-DUSE_CURL=1 \
-DUSE_SOUND=1 \
-DUSE_FREETYPE=1 \
-DUSE_LEVELDB=$(HAVE_LEVELDB) \
$(GPROF_DEF) \
-pipe -fstrict-aliasing
ifndef NDEBUG
LOCAL_CFLAGS += -g -D_DEBUG -O0 -fno-omit-frame-pointer
else
LOCAL_CFLAGS += -O3
endif
ifdef GPROF
PROFILER_LIBS := android-ndk-profiler
LOCAL_CFLAGS += -pg
endif
# LOCAL_CFLAGS += -fsanitize=address
# LOCAL_LDFLAGS += -fsanitize=address
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS += -fno-stack-protector
endif
LOCAL_C_INCLUDES := \
jni/src \
jni/src/script \
jni/lib/lua/src \
jni/lib/jsoncpp \
jni/src/cguittfont \
deps/irrlicht/include \
deps/libiconv/include \
deps/freetype2-android/include \
deps/curl/include \
deps/openal-soft/jni/OpenAL/include \
deps/libvorbis-libogg-android/jni/include \
deps/gmp/usr/include \
deps/leveldb/include \
deps/sqlite/
LOCAL_SRC_FILES := \
jni/src/ban.cpp \
jni/src/camera.cpp \
jni/src/cavegen.cpp \
jni/src/chat.cpp \
jni/src/client.cpp \
jni/src/clientenvironment.cpp \
jni/src/clientiface.cpp \
jni/src/clientmap.cpp \
jni/src/clientmedia.cpp \
jni/src/clientobject.cpp \
jni/src/clouds.cpp \
jni/src/collision.cpp \
jni/src/content_abm.cpp \
jni/src/content_cao.cpp \
jni/src/content_cso.cpp \
jni/src/content_mapblock.cpp \
jni/src/content_mapnode.cpp \
jni/src/content_nodemeta.cpp \
jni/src/content_sao.cpp \
jni/src/convert_json.cpp \
jni/src/craftdef.cpp \
jni/src/database-dummy.cpp \
jni/src/database-files.cpp \
jni/src/database-sqlite3.cpp \
jni/src/database.cpp \
jni/src/debug.cpp \
jni/src/defaultsettings.cpp \
jni/src/drawscene.cpp \
jni/src/dungeongen.cpp \
jni/src/emerge.cpp \
jni/src/environment.cpp \
jni/src/face_position_cache.cpp \
jni/src/filecache.cpp \
jni/src/filesys.cpp \
jni/src/fontengine.cpp \
jni/src/game.cpp \
jni/src/genericobject.cpp \
jni/src/gettext.cpp \
jni/src/guiChatConsole.cpp \
jni/src/guiEngine.cpp \
jni/src/guiFileSelectMenu.cpp \
jni/src/guiFormSpecMenu.cpp \
jni/src/guiKeyChangeMenu.cpp \
jni/src/guiPasswordChange.cpp \
jni/src/guiTable.cpp \
jni/src/guiscalingfilter.cpp \
jni/src/guiVolumeChange.cpp \
jni/src/httpfetch.cpp \
jni/src/hud.cpp \
jni/src/imagefilters.cpp \
jni/src/intlGUIEditBox.cpp \
jni/src/inventory.cpp \
jni/src/inventorymanager.cpp \
jni/src/itemdef.cpp \
jni/src/itemstackmetadata.cpp \
jni/src/keycode.cpp \
jni/src/light.cpp \
jni/src/localplayer.cpp \
jni/src/log.cpp \
jni/src/main.cpp \
jni/src/map.cpp \
jni/src/map_settings_manager.cpp \
jni/src/mapblock.cpp \
jni/src/mapblock_mesh.cpp \
jni/src/mapgen.cpp \
jni/src/mapgen_flat.cpp \
jni/src/mapgen_fractal.cpp \
jni/src/mapgen_singlenode.cpp \
jni/src/mapgen_v5.cpp \
jni/src/mapgen_v6.cpp \
jni/src/mapgen_v7.cpp \
jni/src/mapgen_valleys.cpp \
jni/src/mapnode.cpp \
jni/src/mapsector.cpp \
jni/src/mesh.cpp \
jni/src/mesh_generator_thread.cpp \
jni/src/metadata.cpp \
jni/src/mg_biome.cpp \
jni/src/mg_decoration.cpp \
jni/src/mg_ore.cpp \
jni/src/mg_schematic.cpp \
jni/src/minimap.cpp \
jni/src/mods.cpp \
jni/src/nameidmapping.cpp \
jni/src/nodedef.cpp \
jni/src/nodemetadata.cpp \
jni/src/nodetimer.cpp \
jni/src/noise.cpp \
jni/src/objdef.cpp \
jni/src/object_properties.cpp \
jni/src/particles.cpp \
jni/src/pathfinder.cpp \
jni/src/player.cpp \
jni/src/porting_android.cpp \
jni/src/porting.cpp \
jni/src/profiler.cpp \
jni/src/quicktune.cpp \
jni/src/raycast.cpp \
jni/src/reflowscan.cpp \
jni/src/remoteplayer.cpp \
jni/src/rollback.cpp \
jni/src/rollback_interface.cpp \
jni/src/serialization.cpp \
jni/src/server.cpp \
jni/src/serverenvironment.cpp \
jni/src/serverlist.cpp \
jni/src/serverobject.cpp \
jni/src/shader.cpp \
jni/src/sky.cpp \
jni/src/socket.cpp \
jni/src/sound.cpp \
jni/src/sound_openal.cpp \
jni/src/staticobject.cpp \
jni/src/subgame.cpp \
jni/src/tileanimation.cpp \
jni/src/tool.cpp \
jni/src/treegen.cpp \
jni/src/version.cpp \
jni/src/voxel.cpp \
jni/src/voxelalgorithms.cpp \
jni/src/util/areastore.cpp \
jni/src/util/auth.cpp \
jni/src/util/base64.cpp \
jni/src/util/directiontables.cpp \
jni/src/util/enriched_string.cpp \
jni/src/util/numeric.cpp \
jni/src/util/pointedthing.cpp \
jni/src/util/serialize.cpp \
jni/src/util/sha1.cpp \
jni/src/util/string.cpp \
jni/src/util/srp.cpp \
jni/src/util/timetaker.cpp \
jni/src/unittest/test.cpp \
jni/src/unittest/test_collision.cpp \
jni/src/unittest/test_compression.cpp \
jni/src/unittest/test_connection.cpp \
jni/src/unittest/test_filepath.cpp \
jni/src/unittest/test_inventory.cpp \
jni/src/unittest/test_map_settings_manager.cpp \
jni/src/unittest/test_mapnode.cpp \
jni/src/unittest/test_nodedef.cpp \
jni/src/unittest/test_noderesolver.cpp \
jni/src/unittest/test_noise.cpp \
jni/src/unittest/test_objdef.cpp \
jni/src/unittest/test_profiler.cpp \
jni/src/unittest/test_random.cpp \
jni/src/unittest/test_schematic.cpp \
jni/src/unittest/test_serialization.cpp \
jni/src/unittest/test_settings.cpp \
jni/src/unittest/test_socket.cpp \
jni/src/unittest/test_utilities.cpp \
jni/src/unittest/test_voxelalgorithms.cpp \
jni/src/unittest/test_voxelmanipulator.cpp \
jni/src/touchscreengui.cpp \
jni/src/database-leveldb.cpp \
jni/src/settings.cpp \
jni/src/wieldmesh.cpp \
jni/src/client/clientlauncher.cpp \
jni/src/client/inputhandler.cpp \
jni/src/client/tile.cpp \
jni/src/client/joystick_controller.cpp \
jni/src/irrlicht_changes/static_text.cpp
# intentionally kept out (we already build openssl itself): jni/src/util/sha256.c
# Network
LOCAL_SRC_FILES += \
jni/src/network/connection.cpp \
jni/src/network/networkpacket.cpp \
jni/src/network/clientopcodes.cpp \
jni/src/network/clientpackethandler.cpp \
jni/src/network/serveropcodes.cpp \
jni/src/network/serverpackethandler.cpp \
# lua api
LOCAL_SRC_FILES += \
jni/src/script/common/c_content.cpp \
jni/src/script/common/c_converter.cpp \
jni/src/script/common/c_internal.cpp \
jni/src/script/common/c_types.cpp \
jni/src/script/cpp_api/s_async.cpp \
jni/src/script/cpp_api/s_base.cpp \
jni/src/script/cpp_api/s_client.cpp \
jni/src/script/cpp_api/s_entity.cpp \
jni/src/script/cpp_api/s_env.cpp \
jni/src/script/cpp_api/s_inventory.cpp \
jni/src/script/cpp_api/s_item.cpp \
jni/src/script/cpp_api/s_mainmenu.cpp \
jni/src/script/cpp_api/s_node.cpp \
jni/src/script/cpp_api/s_nodemeta.cpp \
jni/src/script/cpp_api/s_player.cpp \
jni/src/script/cpp_api/s_security.cpp \
jni/src/script/cpp_api/s_server.cpp \
jni/src/script/lua_api/l_areastore.cpp \
jni/src/script/lua_api/l_base.cpp \
jni/src/script/lua_api/l_camera.cpp \
jni/src/script/lua_api/l_client.cpp \
jni/src/script/lua_api/l_craft.cpp \
jni/src/script/lua_api/l_env.cpp \
jni/src/script/lua_api/l_inventory.cpp \
jni/src/script/lua_api/l_item.cpp \
jni/src/script/lua_api/l_itemstackmeta.cpp\
jni/src/script/lua_api/l_localplayer.cpp \
jni/src/script/lua_api/l_mainmenu.cpp \
jni/src/script/lua_api/l_mapgen.cpp \
jni/src/script/lua_api/l_metadata.cpp \
jni/src/script/lua_api/l_minimap.cpp \
jni/src/script/lua_api/l_nodemeta.cpp \
jni/src/script/lua_api/l_nodetimer.cpp \
jni/src/script/lua_api/l_noise.cpp \
jni/src/script/lua_api/l_object.cpp \
jni/src/script/lua_api/l_particles.cpp \
jni/src/script/lua_api/l_rollback.cpp \
jni/src/script/lua_api/l_server.cpp \
jni/src/script/lua_api/l_settings.cpp \
jni/src/script/lua_api/l_sound.cpp \
jni/src/script/lua_api/l_http.cpp \
jni/src/script/lua_api/l_storage.cpp \
jni/src/script/lua_api/l_util.cpp \
jni/src/script/lua_api/l_vmanip.cpp \
jni/src/script/scripting_client.cpp \
jni/src/script/scripting_server.cpp \
jni/src/script/scripting_mainmenu.cpp
#freetype2 support
LOCAL_SRC_FILES += jni/src/cguittfont/xCGUITTFont.cpp
# Lua
LOCAL_SRC_FILES += \
jni/lib/lua/src/lapi.c \
jni/lib/lua/src/lauxlib.c \
jni/lib/lua/src/lbaselib.c \
jni/lib/lua/src/lcode.c \
jni/lib/lua/src/ldblib.c \
jni/lib/lua/src/ldebug.c \
jni/lib/lua/src/ldo.c \
jni/lib/lua/src/ldump.c \
jni/lib/lua/src/lfunc.c \
jni/lib/lua/src/lgc.c \
jni/lib/lua/src/linit.c \
jni/lib/lua/src/liolib.c \
jni/lib/lua/src/llex.c \
jni/lib/lua/src/lmathlib.c \
jni/lib/lua/src/lmem.c \
jni/lib/lua/src/loadlib.c \
jni/lib/lua/src/lobject.c \
jni/lib/lua/src/lopcodes.c \
jni/lib/lua/src/loslib.c \
jni/lib/lua/src/lparser.c \
jni/lib/lua/src/lstate.c \
jni/lib/lua/src/lstring.c \
jni/lib/lua/src/lstrlib.c \
jni/lib/lua/src/ltable.c \
jni/lib/lua/src/ltablib.c \
jni/lib/lua/src/ltm.c \
jni/lib/lua/src/lundump.c \
jni/lib/lua/src/lvm.c \
jni/lib/lua/src/lzio.c \
jni/lib/lua/src/print.c
# SQLite3
LOCAL_SRC_FILES += deps/sqlite/sqlite3.c
# Threading
LOCAL_SRC_FILES += \
jni/src/threading/event.cpp \
jni/src/threading/mutex.cpp \
jni/src/threading/semaphore.cpp \
jni/src/threading/thread.cpp
# JSONCPP
LOCAL_SRC_FILES += jni/lib/jsoncpp/jsoncpp.cpp
LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp
LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS)
ifeq ($(HAVE_LEVELDB), 1)
LOCAL_STATIC_LIBRARIES += LevelDB
endif
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid
include $(BUILD_SHARED_LIBRARY)
# at the end of Android.mk
ifdef GPROF
$(call import-module,android-ndk-profiler)
endif
$(call import-module,android/native_app_glue)

View File

@@ -0,0 +1,9 @@
# NDK_TOOLCHAIN_VERSION := clang3.8
APP_PLATFORM := android-9
APP_MODULES := minetest
APP_STL := gnustl_static
APP_CPPFLAGS += -fexceptions
APP_GNUSTL_FORCE_CPP_FEATURES := rtti

View File

@@ -0,0 +1,20 @@
--- irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp.orig 2015-08-29 15:43:09.000000000 +0300
+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2016-05-13 21:36:22.880388505 +0300
@@ -486,7 +486,7 @@
event.KeyInput.Char = 0;
}
- device->postEventFromUser(event);
+ status = device->postEventFromUser(event);
}
break;
default:
@@ -543,7 +543,7 @@
KeyMap[1] = KEY_LBUTTON; // AKEYCODE_SOFT_LEFT
KeyMap[2] = KEY_RBUTTON; // AKEYCODE_SOFT_RIGHT
KeyMap[3] = KEY_HOME; // AKEYCODE_HOME
- KeyMap[4] = KEY_BACK; // AKEYCODE_BACK
+ KeyMap[4] = KEY_CANCEL; // AKEYCODE_BACK
KeyMap[5] = KEY_UNKNOWN; // AKEYCODE_CALL
KeyMap[6] = KEY_UNKNOWN; // AKEYCODE_ENDCALL
KeyMap[7] = KEY_KEY_0; // AKEYCODE_0

View File

@@ -0,0 +1,240 @@
--- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-22 17:01:13.266568869 +0200
+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-22 17:03:59.298572810 +0200
@@ -366,112 +366,140 @@
void(*convert)(const void*, s32, void*) = 0;
getFormatParameters(ColorFormat, InternalFormat, filtering, PixelFormat, PixelType, convert);
- // make sure we don't change the internal format of existing images
- if (!newTexture)
- InternalFormat = oldInternalFormat;
-
- Driver->setActiveTexture(0, this);
-
- if (Driver->testGLError())
- os::Printer::log("Could not bind Texture", ELL_ERROR);
-
- // mipmap handling for main texture
- if (!level && newTexture)
- {
- // auto generate if possible and no mipmap data is given
- if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE))
- {
- if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
- glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
- else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
- glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
- else
- glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
+ bool retry = false;
+
+ do {
+ if (retry) {
+ InternalFormat = GL_RGBA;
+ PixelFormat = GL_RGBA;
+ convert = CColorConverter::convert_A8R8G8B8toA8B8G8R8;
+ }
+ // make sure we don't change the internal format of existing images
+ if (!newTexture)
+ InternalFormat = oldInternalFormat;
- glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
- AutomaticMipmapUpdate=true;
- }
+ Driver->setActiveTexture(0, this);
- // enable bilinear filter without mipmaps
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
- }
+ if (Driver->testGLError())
+ os::Printer::log("Could not bind Texture", ELL_ERROR);
- // now get image data and upload to GPU
+ // mipmap handling for main texture
+ if (!level && newTexture)
+ {
+ // auto generate if possible and no mipmap data is given
+ if (!IsCompressed && HasMipMaps && !mipmapData && Driver->queryFeature(EVDF_MIP_MAP_AUTO_UPDATE))
+ {
+ if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_SPEED))
+ glHint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
+ else if (Driver->getTextureCreationFlag(ETCF_OPTIMIZED_FOR_QUALITY))
+ glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
+ else
+ glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
+ AutomaticMipmapUpdate=true;
+ }
+
+ // enable bilinear filter without mipmaps
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
+ }
- u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height);
+ // now get image data and upload to GPU
- void* source = image->lock();
+ u32 compressedImageSize = IImage::getCompressedImageSize(ColorFormat, image->getDimension().Width, image->getDimension().Height);
- IImage* tmpImage = 0;
+ void* source = image->lock();
- if (convert)
- {
- tmpImage = new CImage(image->getColorFormat(), image->getDimension());
- void* dest = tmpImage->lock();
- convert(source, image->getDimension().getArea(), dest);
- image->unlock();
- source = dest;
- }
+ IImage* tmpImage = 0;
- if (newTexture)
- {
- if (IsCompressed)
+ if (convert)
{
- glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width,
- image->getDimension().Height, 0, compressedImageSize, source);
+ tmpImage = new CImage(image->getColorFormat(), image->getDimension());
+ void* dest = tmpImage->lock();
+ convert(source, image->getDimension().getArea(), dest);
+ image->unlock();
+ source = dest;
}
- else
- glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width,
- image->getDimension().Height, 0, PixelFormat, PixelType, source);
- }
- else
- {
- if (IsCompressed)
+
+ if (newTexture)
{
- glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
- image->getDimension().Height, PixelFormat, compressedImageSize, source);
+ if (IsCompressed)
+ {
+ glCompressedTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, image->getDimension().Width,
+ image->getDimension().Height, 0, compressedImageSize, source);
+ }
+ else
+ glTexImage2D(GL_TEXTURE_2D, level, InternalFormat, image->getDimension().Width,
+ image->getDimension().Height, 0, PixelFormat, PixelType, source);
}
else
- glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
- image->getDimension().Height, PixelFormat, PixelType, source);
- }
-
- if (convert)
- {
- tmpImage->unlock();
- tmpImage->drop();
- }
- else
- image->unlock();
-
- if (!level && newTexture)
- {
- if (IsCompressed && !mipmapData)
{
- if (image->hasMipMaps())
- mipmapData = static_cast<u8*>(image->lock())+compressedImageSize;
+ if (IsCompressed)
+ {
+ glCompressedTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
+ image->getDimension().Height, PixelFormat, compressedImageSize, source);
+ }
else
- HasMipMaps = false;
+ glTexSubImage2D(GL_TEXTURE_2D, level, 0, 0, image->getDimension().Width,
+ image->getDimension().Height, PixelFormat, PixelType, source);
}
- regenerateMipMapLevels(mipmapData);
-
- if (HasMipMaps) // might have changed in regenerateMipMapLevels
+ if (convert)
{
- // enable bilinear mipmap filter
- GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST;
-
- if (filtering != GL_LINEAR)
- filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST;
+ tmpImage->unlock();
+ tmpImage->drop();
+ }
+ else
+ image->unlock();
+
+ if (glGetError() != GL_NO_ERROR) {
+ static bool warned = false;
+ if ((!retry) && (ColorFormat == ECF_A8R8G8B8)) {
+
+ if (!warned) {
+ os::Printer::log("Your driver claims to support GL_BGRA but fails on trying to upload a texture, converting to GL_RGBA and trying again", ELL_ERROR);
+ warned = true;
+ }
+ }
+ else if (retry) {
+ os::Printer::log("Neither uploading texture as GL_BGRA nor, converted one using GL_RGBA succeeded", ELL_ERROR);
+ }
+ retry = !retry;
+ continue;
+ } else {
+ retry = false;
+ }
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
+ if (!level && newTexture)
+ {
+ if (IsCompressed && !mipmapData)
+ {
+ if (image->hasMipMaps())
+ mipmapData = static_cast<u8*>(image->lock())+compressedImageSize;
+ else
+ HasMipMaps = false;
+ }
+
+ regenerateMipMapLevels(mipmapData);
+
+ if (HasMipMaps) // might have changed in regenerateMipMapLevels
+ {
+ // enable bilinear mipmap filter
+ GLint filteringMipMaps = GL_LINEAR_MIPMAP_NEAREST;
+
+ if (filtering != GL_LINEAR)
+ filteringMipMaps = GL_NEAREST_MIPMAP_NEAREST;
+
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filteringMipMaps);
+ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filtering);
+ }
}
- }
- if (Driver->testGLError())
- os::Printer::log("Could not glTexImage2D", ELL_ERROR);
+ if (Driver->testGLError())
+ os::Printer::log("Could not glTexImage2D", ELL_ERROR);
+ }
+ while(retry);
}
--- irrlicht/source/Irrlicht/COGLESTexture.cpp.orig 2014-06-25 00:28:50.820501856 +0200
+++ irrlicht/source/Irrlicht/COGLESTexture.cpp 2014-06-25 00:08:37.712544692 +0200
@@ -422,6 +422,9 @@
source = dest;
}
+ //clear old error
+ glGetError();
+
if (newTexture)
{
if (IsCompressed)

View File

@@ -0,0 +1,30 @@
--- irrlicht.orig/include/IEventReceiver.h 2014-06-03 19:43:50.433713133 +0200
+++ irrlicht/include/IEventReceiver.h 2014-06-03 19:44:36.993711489 +0200
@@ -375,6 +375,9 @@
// Y position of simple touch.
s32 Y;
+ // number of current touches
+ s32 touchedCount;
+
//! Type of touch event.
ETOUCH_INPUT_EVENT Event;
};
--- irrlicht.orig/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:43:50.505713130 +0200
+++ irrlicht/source/Irrlicht/Android/CIrrDeviceAndroid.cpp 2014-06-03 19:45:37.265709359 +0200
@@ -315,6 +315,7 @@
event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, i);
event.TouchInput.X = AMotionEvent_getX(androidEvent, i);
event.TouchInput.Y = AMotionEvent_getY(androidEvent, i);
+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent);
device->postEventFromUser(event);
}
@@ -326,6 +327,7 @@
event.TouchInput.ID = AMotionEvent_getPointerId(androidEvent, pointerIndex);
event.TouchInput.X = AMotionEvent_getX(androidEvent, pointerIndex);
event.TouchInput.Y = AMotionEvent_getY(androidEvent, pointerIndex);
+ event.TouchInput.touchedCount = AMotionEvent_getPointerCount(androidEvent);
device->postEventFromUser(event);
}

View File

@@ -0,0 +1,39 @@
--- a/libcharset/lib/localcharset.c 2015-06-10 11:55:25.933870724 +0200
+++ b/libcharset/lib/localcharset.c 2015-06-10 11:55:39.578063493 +0200
@@ -47,7 +47,7 @@
#if !defined WIN32_NATIVE
# include <unistd.h>
-# if HAVE_LANGINFO_CODESET
+# if HAVE_LANGINFO_CODESET && !(defined __ANDROID__)
# include <langinfo.h>
# else
# if 0 /* see comment below */
@@ -124,7 +124,7 @@ get_charset_aliases (void)
cp = charset_aliases;
if (cp == NULL)
{
-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
+#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__ || defined __ANDROID__)
const char *dir;
const char *base = "charset.alias";
char *file_name;
@@ -338,6 +338,9 @@ get_charset_aliases (void)
"CP54936" "\0" "GB18030" "\0"
"CP65001" "\0" "UTF-8" "\0";
# endif
+# if defined __ANDROID__
+ cp = "*" "\0" "UTF-8" "\0";
+# endif
#endif
charset_aliases = cp;
@@ -361,7 +364,7 @@ locale_charset (void)
const char *codeset;
const char *aliases;
-#if !(defined WIN32_NATIVE || defined OS2)
+#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__)
# if HAVE_LANGINFO_CODESET

View File

@@ -0,0 +1,13 @@
--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200
+++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200
@@ -695,8 +696,9 @@ _GL_CXXALIASWARN (gets);
/* It is very rare that the developer ever has full control of stdin,
so any use of gets warrants an unconditional warning. Assume it is
always declared, since it is required by C89. */
-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/
+#define gets(a) fgets( a, sizeof(*(a)), stdin)
#endif
#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@

View File

@@ -0,0 +1,37 @@
--- libvorbis-libogg-android/jni/libvorbis-jni/Android.mk.orig 2014-06-17 19:22:50.621559073 +0200
+++ libvorbis-libogg-android/jni/libvorbis-jni/Android.mk 2014-06-17 19:38:20.641581140 +0200
@@ -4,9 +4,6 @@
LOCAL_MODULE := vorbis-jni
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -fsigned-char
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
-endif
LOCAL_SHARED_LIBRARIES := libogg libvorbis
--- libvorbis-libogg-android/jni/libvorbis/Android.mk.orig 2014-06-17 19:22:39.077558797 +0200
+++ libvorbis-libogg-android/jni/libvorbis/Android.mk 2014-06-17 19:38:52.121581887 +0200
@@ -4,9 +4,6 @@
LOCAL_MODULE := libvorbis
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
-endif
LOCAL_SHARED_LIBRARIES := libogg
LOCAL_SRC_FILES := \
--- libvorbis-libogg-android/jni/libogg/Android.mk.orig 2014-06-17 19:22:33.965558675 +0200
+++ libvorbis-libogg-android/jni/libogg/Android.mk 2014-06-17 19:38:25.337581252 +0200
@@ -4,10 +4,6 @@
LOCAL_MODULE := libogg
LOCAL_CFLAGS += -I$(LOCAL_PATH)/../include -ffast-math -fsigned-char
-ifeq ($(TARGET_ARCH),arm)
- LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
-endif
-
LOCAL_SRC_FILES := \
bitwise.c \

View File

@@ -0,0 +1,13 @@
--- openssl-1.0.2e.orig/Configure 2015-12-03 15:04:23.000000000 +0100
+++ openssl-1.0.2e/Configure 2015-12-14 21:01:40.351265968 +0100
@@ -464,8 +464,10 @@
# Android: linux-* but without pointers to headers and libs.
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"android-arm","gcc:-march=armv4 -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"android-mips32","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
#### *BSD [do see comment about ${BSDthreads} above!]
"BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",

View File

@@ -0,0 +1,2 @@
rootProject.name = "Minetest"

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
</manifest>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.minetest.minetest"
android:installLocation="auto">
<uses-feature android:glEsVersion="0x00010000" android:required="true"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:icon="@drawable/irr_icon"
android:label="${project}"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:allowBackup="true">
<activity android:name=".MtNativeActivity"
android:label="${project}"
android:launchMode="singleTask"
android:configChanges="orientation|keyboard|keyboardHidden|navigation"
android:screenOrientation="sensorLandscape"
android:clearTaskOnLaunch="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="minetest" />
</activity>
<activity android:name=".MinetestTextEntry"
android:theme="@style/Theme.Transparent"
android:excludeFromRecents="true">
</activity>
<activity android:name=".MinetestAssetCopy"
android:theme="@style/Theme.Transparent"
android:excludeFromRecents="true">
</activity>
</application>
</manifest>

View File

@@ -0,0 +1,416 @@
package net.minetest.minetest;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Vector;
import java.util.Iterator;
import java.lang.Object;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Display;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.graphics.Rect;
import android.graphics.Paint;
import android.text.TextPaint;
public class MinetestAssetCopy extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.assetcopy);
m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
m_Filename = (TextView) findViewById(R.id.textView1);
Display display = getWindowManager().getDefaultDisplay();
m_ProgressBar.getLayoutParams().width = (int) (display.getWidth() * 0.8);
m_ProgressBar.invalidate();
/* check if there's already a copy in progress and reuse in case it is*/
MinetestAssetCopy prevActivity =
(MinetestAssetCopy) getLastNonConfigurationInstance();
if(prevActivity!= null) {
m_AssetCopy = prevActivity.m_AssetCopy;
}
else {
m_AssetCopy = new copyAssetTask();
m_AssetCopy.execute();
}
}
/* preserve asset copy background task to prevent restart of copying */
/* this way of doing it is not recommended for latest android version */
/* but the recommended way isn't available on android 2.x */
public Object onRetainNonConfigurationInstance()
{
return this;
}
ProgressBar m_ProgressBar;
TextView m_Filename;
copyAssetTask m_AssetCopy;
private class copyAssetTask extends AsyncTask<String, Integer, String>
{
private long getFullSize(String filename)
{
long size = 0;
try {
InputStream src = getAssets().open(filename);
byte[] buf = new byte[4096];
int len = 0;
while ((len = src.read(buf)) > 0)
{
size += len;
}
}
catch (IOException e)
{
e.printStackTrace();
}
return size;
}
@Override
protected String doInBackground(String... files)
{
m_foldernames = new Vector<String>();
m_filenames = new Vector<String>();
m_tocopy = new Vector<String>();
m_asset_size_unknown = new Vector<String>();
String baseDir =
Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/";
// prepare temp folder
File TempFolder = new File(baseDir + "Minetest/tmp/");
if (!TempFolder.exists())
{
TempFolder.mkdir();
}
else {
File[] todel = TempFolder.listFiles();
for(int i=0; i < todel.length; i++)
{
Log.v("MinetestAssetCopy","deleting: " + todel[i].getAbsolutePath());
todel[i].delete();
}
}
// add a .nomedia file
try {
OutputStream dst = new FileOutputStream(baseDir + "Minetest/.nomedia");
dst.close();
} catch (IOException e) {
Log.e("MinetestAssetCopy","Failed to create .nomedia file");
e.printStackTrace();
}
// build lists from prepared data
BuildFolderList();
BuildFileList();
// scan filelist
ProcessFileList();
// doing work
m_copy_started = true;
m_ProgressBar.setMax(m_tocopy.size());
for (int i = 0; i < m_tocopy.size(); i++)
{
try
{
String filename = m_tocopy.get(i);
publishProgress(i);
boolean asset_size_unknown = false;
long filesize = -1;
if (m_asset_size_unknown.contains(filename))
{
File testme = new File(baseDir + "/" + filename);
if(testme.exists())
{
filesize = testme.length();
}
asset_size_unknown = true;
}
InputStream src;
try
{
src = getAssets().open(filename);
} catch (IOException e) {
Log.e("MinetestAssetCopy","Copying file: " + filename + " FAILED (not in assets)");
e.printStackTrace();
continue;
}
// Transfer bytes from in to out
byte[] buf = new byte[1*1024];
int len = src.read(buf, 0, 1024);
/* following handling is crazy but we need to deal with */
/* compressed assets.Flash chips limited livetime due to */
/* write operations, we can't allow large files to destroy */
/* users flash. */
if (asset_size_unknown)
{
if ( (len > 0) && (len < buf.length) && (len == filesize))
{
src.close();
continue;
}
if (len == buf.length)
{
src.close();
long size = getFullSize(filename);
if ( size == filesize)
{
continue;
}
src = getAssets().open(filename);
len = src.read(buf, 0, 1024);
}
}
if (len > 0)
{
int total_filesize = 0;
OutputStream dst;
try
{
dst = new FileOutputStream(baseDir + "/" + filename);
} catch (IOException e) {
Log.e("MinetestAssetCopy","Copying file: " + baseDir +
"/" + filename + " FAILED (couldn't open output file)");
e.printStackTrace();
src.close();
continue;
}
dst.write(buf, 0, len);
total_filesize += len;
while ((len = src.read(buf)) > 0)
{
dst.write(buf, 0, len);
total_filesize += len;
}
dst.close();
Log.v("MinetestAssetCopy","Copied file: " +
m_tocopy.get(i) + " (" + total_filesize +
" bytes)");
}
else if (len < 0)
{
Log.e("MinetestAssetCopy","Copying file: " +
m_tocopy.get(i) + " failed, size < 0");
}
src.close();
}
catch (IOException e)
{
Log.e("MinetestAssetCopy","Copying file: " +
m_tocopy.get(i) + " failed");
e.printStackTrace();
}
}
return "";
}
/**
* update progress bar
*/
protected void onProgressUpdate(Integer... progress)
{
if (m_copy_started)
{
boolean shortened = false;
String todisplay = m_tocopy.get(progress[0]);
m_ProgressBar.setProgress(progress[0]);
m_Filename.setText(todisplay);
}
else
{
boolean shortened = false;
String todisplay = m_Foldername;
String full_text = "scanning " + todisplay + " ...";
m_Filename.setText(full_text);
}
}
/**
* check al files and folders in filelist
*/
protected void ProcessFileList()
{
String FlashBaseDir =
Environment.getExternalStorageDirectory().getAbsolutePath();
Iterator itr = m_filenames.iterator();
while (itr.hasNext())
{
String current_path = (String) itr.next();
String FlashPath = FlashBaseDir + "/" + current_path;
if (isAssetFolder(current_path))
{
/* store information and update gui */
m_Foldername = current_path;
publishProgress(0);
/* open file in order to check if it's a folder */
File current_folder = new File(FlashPath);
if (!current_folder.exists())
{
if (!current_folder.mkdirs())
{
Log.e("MinetestAssetCopy","\t failed create folder: " +
FlashPath);
}
else
{
Log.v("MinetestAssetCopy","\t created folder: " +
FlashPath);
}
}
continue;
}
/* if it's not a folder it's most likely a file */
boolean refresh = true;
File testme = new File(FlashPath);
long asset_filesize = -1;
long stored_filesize = -1;
if (testme.exists())
{
try
{
AssetFileDescriptor fd = getAssets().openFd(current_path);
asset_filesize = fd.getLength();
fd.close();
}
catch (IOException e)
{
refresh = true;
m_asset_size_unknown.add(current_path);
Log.e("MinetestAssetCopy","Failed to open asset file \"" +
FlashPath + "\" for size check");
}
stored_filesize = testme.length();
if (asset_filesize == stored_filesize)
{
refresh = false;
}
}
if (refresh)
{
m_tocopy.add(current_path);
}
}
}
/**
* read list of folders prepared on package build
*/
protected void BuildFolderList()
{
try
{
InputStream is = getAssets().open("index.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null)
{
m_foldernames.add(line);
line = reader.readLine();
}
is.close();
} catch (IOException e1)
{
Log.e("MinetestAssetCopy","Error on processing index.txt");
e1.printStackTrace();
}
}
/**
* read list of asset files prepared on package build
*/
protected void BuildFileList()
{
long entrycount = 0;
try
{
InputStream is = getAssets().open("filelist.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null)
{
m_filenames.add(line);
line = reader.readLine();
entrycount ++;
}
is.close();
}
catch (IOException e1)
{
Log.e("MinetestAssetCopy","Error on processing filelist.txt");
e1.printStackTrace();
}
}
protected void onPostExecute (String result)
{
finish();
}
protected boolean isAssetFolder(String path)
{
return m_foldernames.contains(path);
}
boolean m_copy_started = false;
String m_Foldername = "media";
Vector<String> m_foldernames;
Vector<String> m_filenames;
Vector<String> m_tocopy;
Vector<String> m_asset_size_unknown;
}
}

View File

@@ -0,0 +1,91 @@
package net.minetest.minetest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
public class MinetestTextEntry extends Activity {
public AlertDialog mTextInputDialog;
public EditText mTextInputWidget;
private final int MultiLineTextInput = 1;
private final int SingleLineTextInput = 2;
private final int SingleLinePasswordInput = 3;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle b = getIntent().getExtras();
String acceptButton = b.getString("EnterButton");
String hint = b.getString("hint");
String current = b.getString("current");
int editType = b.getInt("editType");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
mTextInputWidget = new EditText(this);
mTextInputWidget.setHint(hint);
mTextInputWidget.setText(current);
mTextInputWidget.setMinWidth(300);
if (editType == SingleLinePasswordInput) {
mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
else {
mTextInputWidget.setInputType(InputType.TYPE_CLASS_TEXT);
}
builder.setView(mTextInputWidget);
if (editType == MultiLineTextInput) {
builder.setPositiveButton(acceptButton, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{ pushResult(mTextInputWidget.getText().toString()); }
});
}
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
public void onCancel(DialogInterface dialog) {
cancelDialog();
}
});
mTextInputWidget.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View view, int KeyCode, KeyEvent event) {
if ( KeyCode == KeyEvent.KEYCODE_ENTER){
pushResult(mTextInputWidget.getText().toString());
return true;
}
return false;
}
});
mTextInputDialog = builder.create();
mTextInputDialog.show();
}
public void pushResult(String text) {
Intent resultData = new Intent();
resultData.putExtra("text", text);
setResult(Activity.RESULT_OK,resultData);
mTextInputDialog.dismiss();
finish();
}
public void cancelDialog() {
setResult(Activity.RESULT_CANCELED);
mTextInputDialog.dismiss();
finish();
}
}

View File

@@ -0,0 +1,99 @@
package net.minetest.minetest;
import android.app.NativeActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
public class MtNativeActivity extends NativeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
m_MessagReturnCode = -1;
m_MessageReturnValue = "";
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void copyAssets() {
Intent intent = new Intent(this, MinetestAssetCopy.class);
startActivity(intent);
}
public void showDialog(String acceptButton, String hint, String current,
int editType) {
Intent intent = new Intent(this, MinetestTextEntry.class);
Bundle params = new Bundle();
params.putString("acceptButton", acceptButton);
params.putString("hint", hint);
params.putString("current", current);
params.putInt("editType", editType);
intent.putExtras(params);
startActivityForResult(intent, 101);
m_MessageReturnValue = "";
m_MessagReturnCode = -1;
}
public static native void putMessageBoxResult(String text);
/* ugly code to workaround putMessageBoxResult not beeing found */
public int getDialogState() {
return m_MessagReturnCode;
}
public String getDialogValue() {
m_MessagReturnCode = -1;
return m_MessageReturnValue;
}
public float getDensity() {
return getResources().getDisplayMetrics().density;
}
public int getDisplayWidth() {
return getResources().getDisplayMetrics().widthPixels;
}
public int getDisplayHeight() {
return getResources().getDisplayMetrics().heightPixels;
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == 101) {
if (resultCode == RESULT_OK) {
String text = data.getStringExtra("text");
m_MessagReturnCode = 0;
m_MessageReturnValue = text;
}
else {
m_MessagReturnCode = 1;
}
}
}
static {
System.loadLibrary("openal");
System.loadLibrary("ogg");
System.loadLibrary("vorbis");
System.loadLibrary("ssl");
System.loadLibrary("crypto");
System.loadLibrary("gmp");
System.loadLibrary("iconv");
// We don't have to load libminetest.so ourselves,
// but if we do, we get nicer logcat errors when
// loading fails.
System.loadLibrary("minetest");
}
private int m_MessagReturnCode;
private String m_MessageReturnValue;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:layout_gravity="center_horizontal"
android:text="@string/preparing_media"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="preparing_media">Preparing media...</string>
</resources>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>

17
builtin/async/init.lua Normal file
View File

@@ -0,0 +1,17 @@
core.log("info", "Initializing Asynchronous environment")
function core.job_processor(serialized_func, serialized_param)
local func = loadstring(serialized_func)
local param = core.deserialize(serialized_param)
local retval = nil
if type(func) == "function" then
retval = core.serialize(func(param))
else
core.log("error", "ASYNC WORKER: Unable to deserialize function")
end
return retval or core.serialize(nil)
end

View File

@@ -0,0 +1,65 @@
-- Minetest: builtin/client/chatcommands.lua
core.register_on_sending_chat_messages(function(message)
if message:sub(1,2) == ".." then
return false
end
local first_char = message:sub(1,1)
if first_char == "/" or first_char == "." then
core.display_chat_message(core.gettext("issued command: ") .. message)
end
if first_char ~= "." then
return false
end
local cmd, param = string.match(message, "^%.([^ ]+) *(.*)")
param = param or ""
if not cmd then
core.display_chat_message(core.gettext("-!- Empty command"))
return true
end
local cmd_def = core.registered_chatcommands[cmd]
if cmd_def then
core.set_last_run_mod(cmd_def.mod_origin)
local _, message = cmd_def.func(param)
if message then
core.display_chat_message(message)
end
else
core.display_chat_message(core.gettext("-!- Invalid command: ") .. cmd)
end
return true
end)
core.register_chatcommand("list_players", {
description = core.gettext("List online players"),
func = function(param)
local players = table.concat(core.get_player_names(), ", ")
core.display_chat_message(core.gettext("Online players: ") .. players)
end
})
core.register_chatcommand("disconnect", {
description = core.gettext("Exit to main menu"),
func = function(param)
core.disconnect()
end,
})
core.register_chatcommand("clear_chat_queue", {
description = core.gettext("Clear the out chat queue"),
func = function(param)
core.clear_out_chat_queue()
return true, core.gettext("The out chat queue is now empty")
end,
})
function core.run_server_chatcommand(cmd, param)
core.send_chat_message("/" .. cmd .. " " .. param)
end

23
builtin/client/init.lua Normal file
View File

@@ -0,0 +1,23 @@
-- Minetest: builtin/client/init.lua
local scriptpath = core.get_builtin_path()..DIR_DELIM
local clientpath = scriptpath.."client"..DIR_DELIM
local commonpath = scriptpath.."common"..DIR_DELIM
dofile(clientpath .. "register.lua")
dofile(commonpath .. "after.lua")
dofile(commonpath .. "chatcommands.lua")
dofile(clientpath .. "chatcommands.lua")
dofile(commonpath .. "vector.lua")
core.register_on_death(function()
core.display_chat_message("You died.")
local formspec = "size[11,5.5]bgcolor[#320000b4;true]" ..
"label[4.85,1.35;" .. fgettext("You died.") .. "]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]"
core.show_formspec("bultin:death", formspec)
end)
core.register_on_formspec_input(function(formname, fields)
if formname == "bultin:death" then
core.send_respawn()
end
end)

View File

@@ -0,0 +1,73 @@
core.callback_origins = {}
local getinfo = debug.getinfo
debug.getinfo = nil
function core.run_callbacks(callbacks, mode, ...)
assert(type(callbacks) == "table")
local cb_len = #callbacks
if cb_len == 0 then
if mode == 2 or mode == 3 then
return true
elseif mode == 4 or mode == 5 then
return false
end
end
local ret
for i = 1, cb_len do
local cb_ret = callbacks[i](...)
if mode == 0 and i == 1 or mode == 1 and i == cb_len then
ret = cb_ret
elseif mode == 2 then
if not cb_ret or i == 1 then
ret = cb_ret
end
elseif mode == 3 then
if cb_ret then
return cb_ret
end
ret = cb_ret
elseif mode == 4 then
if (cb_ret and not ret) or i == 1 then
ret = cb_ret
end
elseif mode == 5 and cb_ret then
return cb_ret
end
end
return ret
end
--
-- Callback registration
--
local function make_registration()
local t = {}
local registerfunc = function(func)
t[#t + 1] = func
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
name = getinfo(1, "n").name or "??"
}
--local origin = core.callback_origins[func]
--print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
end
return t, registerfunc
end
core.registered_globalsteps, core.register_globalstep = make_registration()
core.registered_on_shutdown, core.register_on_shutdown = make_registration()
core.registered_on_connect, core.register_on_connect = make_registration()
core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration()
core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration()
core.registered_on_death, core.register_on_death = make_registration()
core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()
core.registered_on_formspec_input, core.register_on_formspec_input = make_registration()
core.registered_on_dignode, core.register_on_dignode = make_registration()
core.registered_on_punchnode, core.register_on_punchnode = make_registration()
core.registered_on_placenode, core.register_on_placenode = make_registration()
core.registered_on_item_use, core.register_on_item_use = make_registration()

33
builtin/common/after.lua Normal file
View File

@@ -0,0 +1,33 @@
local jobs = {}
local time = 0.0
core.register_globalstep(function(dtime)
time = time + dtime
if #jobs < 1 then
return
end
-- Iterate backwards so that we miss any new timers added by
-- a timer callback, and so that we don't skip the next timer
-- in the list if we remove one.
for i = #jobs, 1, -1 do
local job = jobs[i]
if time >= job.expire then
core.set_last_run_mod(job.mod_origin)
job.func(unpack(job.arg))
table.remove(jobs, i)
end
end
end)
function core.after(after, func, ...)
assert(tonumber(after) and type(func) == "function",
"Invalid core.after invocation")
jobs[#jobs + 1] = {
func = func,
expire = time + after,
arg = {...},
mod_origin = core.get_last_run_mod()
}
end

View File

@@ -0,0 +1,40 @@
core.async_jobs = {}
local function handle_job(jobid, serialized_retval)
local retval = core.deserialize(serialized_retval)
assert(type(core.async_jobs[jobid]) == "function")
core.async_jobs[jobid](retval)
core.async_jobs[jobid] = nil
end
if core.register_globalstep then
core.register_globalstep(function(dtime)
for i, job in ipairs(core.get_finished_jobs()) do
handle_job(job.jobid, job.retval)
end
end)
else
core.async_event_handler = handle_job
end
function core.handle_async(func, parameter, callback)
-- Serialize function
local serialized_func = string.dump(func)
assert(serialized_func ~= nil)
-- Serialize parameters
local serialized_param = core.serialize(parameter)
if serialized_param == nil then
return false
end
local jobid = core.do_async_callback(serialized_func, serialized_param)
core.async_jobs[jobid] = callback
return true
end

View File

@@ -0,0 +1,112 @@
-- Minetest: builtin/common/chatcommands.lua
core.registered_chatcommands = {}
function core.register_chatcommand(cmd, def)
def = def or {}
def.params = def.params or ""
def.description = def.description or ""
def.privs = def.privs or {}
def.mod_origin = core.get_current_modname() or "??"
core.registered_chatcommands[cmd] = def
end
function core.unregister_chatcommand(name)
if core.registered_chatcommands[name] then
core.registered_chatcommands[name] = nil
else
core.log("warning", "Not unregistering chatcommand " ..name..
" because it doesn't exist.")
end
end
function core.override_chatcommand(name, redefinition)
local chatcommand = core.registered_chatcommands[name]
assert(chatcommand, "Attempt to override non-existent chatcommand "..name)
for k, v in pairs(redefinition) do
rawset(chatcommand, k, v)
end
core.registered_chatcommands[name] = chatcommand
end
local cmd_marker = "/"
local function gettext(...)
return ...
end
local function gettext_replace(text, replace)
return text:gsub("$1", replace)
end
if INIT == "client" then
cmd_marker = "."
gettext = core.gettext
gettext_replace = fgettext_ne
end
local function do_help_cmd(name, param)
local function format_help_line(cmd, def)
local msg = core.colorize("#00ffff", cmd_marker .. cmd)
if def.params and def.params ~= "" then
msg = msg .. " " .. def.params
end
if def.description and def.description ~= "" then
msg = msg .. ": " .. def.description
end
return msg
end
if param == "" then
local cmds = {}
for cmd, def in pairs(core.registered_chatcommands) do
if INIT == "client" or core.check_player_privs(name, def.privs) then
cmds[#cmds + 1] = cmd
end
end
table.sort(cmds)
return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n"
.. gettext_replace("Use '$1help <cmd>' to get more information,"
.. " or '$1help all' to list everything.", cmd_marker)
elseif param == "all" then
local cmds = {}
for cmd, def in pairs(core.registered_chatcommands) do
if INIT == "client" or core.check_player_privs(name, def.privs) then
cmds[#cmds + 1] = format_help_line(cmd, def)
end
end
table.sort(cmds)
return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n")
elseif INIT == "game" and param == "privs" then
local privs = {}
for priv, def in pairs(core.registered_privileges) do
privs[#privs + 1] = priv .. ": " .. def.description
end
table.sort(privs)
return true, "Available privileges:\n"..table.concat(privs, "\n")
else
local cmd = param
local def = core.registered_chatcommands[cmd]
if not def then
return false, gettext("Command not available: ")..cmd
else
return true, format_help_line(cmd, def)
end
end
end
if INIT == "client" then
core.register_chatcommand("help", {
params = gettext("[all/<cmd>]"),
description = gettext("Get help for commands"),
func = function(param)
return do_help_cmd(nil, param)
end,
})
else
core.register_chatcommand("help", {
params = "[all/privs/<cmd>]",
description = "Get help for commands or list privileges",
func = do_help_cmd,
})
end

View File

@@ -0,0 +1,320 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
-- TODO improve doc --
-- TODO code cleanup --
-- Generic implementation of a filter/sortable list --
-- Usage: --
-- Filterlist needs to be initialized on creation. To achieve this you need to --
-- pass following functions: --
-- raw_fct() (mandatory): --
-- function returning a table containing the elements to be filtered --
-- compare_fct(element1,element2) (mandatory): --
-- function returning true/false if element1 is same element as element2 --
-- uid_match_fct(element1,uid) (optional) --
-- function telling if uid is attached to element1 --
-- filter_fct(element,filtercriteria) (optional) --
-- function returning true/false if filtercriteria met to element --
-- fetch_param (optional) --
-- parameter passed to raw_fct to aquire correct raw data --
-- --
--------------------------------------------------------------------------------
filterlist = {}
--------------------------------------------------------------------------------
function filterlist.refresh(self)
self.m_raw_list = self.m_raw_list_fct(self.m_fetch_param)
filterlist.process(self)
end
--------------------------------------------------------------------------------
function filterlist.create(raw_fct,compare_fct,uid_match_fct,filter_fct,fetch_param)
assert((raw_fct ~= nil) and (type(raw_fct) == "function"))
assert((compare_fct ~= nil) and (type(compare_fct) == "function"))
local self = {}
self.m_raw_list_fct = raw_fct
self.m_compare_fct = compare_fct
self.m_filter_fct = filter_fct
self.m_uid_match_fct = uid_match_fct
self.m_filtercriteria = nil
self.m_fetch_param = fetch_param
self.m_sortmode = "none"
self.m_sort_list = {}
self.m_processed_list = nil
self.m_raw_list = self.m_raw_list_fct(self.m_fetch_param)
self.add_sort_mechanism = filterlist.add_sort_mechanism
self.set_filtercriteria = filterlist.set_filtercriteria
self.get_filtercriteria = filterlist.get_filtercriteria
self.set_sortmode = filterlist.set_sortmode
self.get_list = filterlist.get_list
self.get_raw_list = filterlist.get_raw_list
self.get_raw_element = filterlist.get_raw_element
self.get_raw_index = filterlist.get_raw_index
self.get_current_index = filterlist.get_current_index
self.size = filterlist.size
self.uid_exists_raw = filterlist.uid_exists_raw
self.raw_index_by_uid = filterlist.raw_index_by_uid
self.refresh = filterlist.refresh
filterlist.process(self)
return self
end
--------------------------------------------------------------------------------
function filterlist.add_sort_mechanism(self,name,fct)
self.m_sort_list[name] = fct
end
--------------------------------------------------------------------------------
function filterlist.set_filtercriteria(self,criteria)
if criteria == self.m_filtercriteria and
type(criteria) ~= "table" then
return
end
self.m_filtercriteria = criteria
filterlist.process(self)
end
--------------------------------------------------------------------------------
function filterlist.get_filtercriteria(self)
return self.m_filtercriteria
end
--------------------------------------------------------------------------------
--supported sort mode "alphabetic|none"
function filterlist.set_sortmode(self,mode)
if (mode == self.m_sortmode) then
return
end
self.m_sortmode = mode
filterlist.process(self)
end
--------------------------------------------------------------------------------
function filterlist.get_list(self)
return self.m_processed_list
end
--------------------------------------------------------------------------------
function filterlist.get_raw_list(self)
return self.m_raw_list
end
--------------------------------------------------------------------------------
function filterlist.get_raw_element(self,idx)
if type(idx) ~= "number" then
idx = tonumber(idx)
end
if idx ~= nil and idx > 0 and idx <= #self.m_raw_list then
return self.m_raw_list[idx]
end
return nil
end
--------------------------------------------------------------------------------
function filterlist.get_raw_index(self,listindex)
assert(self.m_processed_list ~= nil)
if listindex ~= nil and listindex > 0 and
listindex <= #self.m_processed_list then
local entry = self.m_processed_list[listindex]
for i,v in ipairs(self.m_raw_list) do
if self.m_compare_fct(v,entry) then
return i
end
end
end
return 0
end
--------------------------------------------------------------------------------
function filterlist.get_current_index(self,listindex)
assert(self.m_processed_list ~= nil)
if listindex ~= nil and listindex > 0 and
listindex <= #self.m_raw_list then
local entry = self.m_raw_list[listindex]
for i,v in ipairs(self.m_processed_list) do
if self.m_compare_fct(v,entry) then
return i
end
end
end
return 0
end
--------------------------------------------------------------------------------
function filterlist.process(self)
assert(self.m_raw_list ~= nil)
if self.m_sortmode == "none" and
self.m_filtercriteria == nil then
self.m_processed_list = self.m_raw_list
return
end
self.m_processed_list = {}
for k,v in pairs(self.m_raw_list) do
if self.m_filtercriteria == nil or
self.m_filter_fct(v,self.m_filtercriteria) then
self.m_processed_list[#self.m_processed_list + 1] = v
end
end
if self.m_sortmode == "none" then
return
end
if self.m_sort_list[self.m_sortmode] ~= nil and
type(self.m_sort_list[self.m_sortmode]) == "function" then
self.m_sort_list[self.m_sortmode](self)
end
end
--------------------------------------------------------------------------------
function filterlist.size(self)
if self.m_processed_list == nil then
return 0
end
return #self.m_processed_list
end
--------------------------------------------------------------------------------
function filterlist.uid_exists_raw(self,uid)
for i,v in ipairs(self.m_raw_list) do
if self.m_uid_match_fct(v,uid) then
return true
end
end
return false
end
--------------------------------------------------------------------------------
function filterlist.raw_index_by_uid(self, uid)
local elementcount = 0
local elementidx = 0
for i,v in ipairs(self.m_raw_list) do
if self.m_uid_match_fct(v,uid) then
elementcount = elementcount +1
elementidx = i
end
end
-- If there are more elements than one with same name uid can't decide which
-- one is meant. self shouldn't be possible but just for sure.
if elementcount > 1 then
elementidx=0
end
return elementidx
end
--------------------------------------------------------------------------------
-- COMMON helper functions --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
function compare_worlds(world1,world2)
if world1.path ~= world2.path then
return false
end
if world1.name ~= world2.name then
return false
end
if world1.gameid ~= world2.gameid then
return false
end
return true
end
--------------------------------------------------------------------------------
function sort_worlds_alphabetic(self)
table.sort(self.m_processed_list, function(a, b)
--fixes issue #857 (crash due to sorting nil in worldlist)
if a == nil or b == nil then
if a == nil and b ~= nil then return false end
if b == nil and a ~= nil then return true end
return false
end
if a.name:lower() == b.name:lower() then
return a.name < b.name
end
return a.name:lower() < b.name:lower()
end)
end
--------------------------------------------------------------------------------
function sort_mod_list(self)
table.sort(self.m_processed_list, function(a, b)
-- Show game mods at bottom
if a.typ ~= b.typ then
if b.typ == "game" then
return a.typ ~= "game_mod"
end
return b.typ == "game_mod"
end
-- If in same or no modpack, sort by name
if a.modpack == b.modpack then
if a.name:lower() == b.name:lower() then
return a.name < b.name
end
return a.name:lower() < b.name:lower()
-- Else compare name to modpack name
else
-- Always show modpack pseudo-mod on top of modpack mod list
if a.name == b.modpack then
return true
elseif b.name == a.modpack then
return false
end
local name_a = a.modpack or a.name
local name_b = b.modpack or b.name
if name_a:lower() == name_b:lower() then
return name_a < name_b
end
return name_a:lower() < name_b:lower()
end
end)
end

View File

@@ -0,0 +1,658 @@
-- Minetest: builtin/misc_helpers.lua
--------------------------------------------------------------------------------
-- Localize functions to avoid table lookups (better performance).
local string_sub, string_find = string.sub, string.find
--------------------------------------------------------------------------------
function basic_dump(o)
local tp = type(o)
if tp == "number" then
return tostring(o)
elseif tp == "string" then
return string.format("%q", o)
elseif tp == "boolean" then
return tostring(o)
elseif tp == "nil" then
return "nil"
-- Uncomment for full function dumping support.
-- Not currently enabled because bytecode isn't very human-readable and
-- dump's output is intended for humans.
--elseif tp == "function" then
-- return string.format("loadstring(%q)", string.dump(o))
else
return string.format("<%s>", tp)
end
end
local keywords = {
["and"] = true,
["break"] = true,
["do"] = true,
["else"] = true,
["elseif"] = true,
["end"] = true,
["false"] = true,
["for"] = true,
["function"] = true,
["goto"] = true, -- Lua 5.2
["if"] = true,
["in"] = true,
["local"] = true,
["nil"] = true,
["not"] = true,
["or"] = true,
["repeat"] = true,
["return"] = true,
["then"] = true,
["true"] = true,
["until"] = true,
["while"] = true,
}
local function is_valid_identifier(str)
if not str:find("^[a-zA-Z_][a-zA-Z0-9_]*$") or keywords[str] then
return false
end
return true
end
--------------------------------------------------------------------------------
-- Dumps values in a line-per-value format.
-- For example, {test = {"Testing..."}} becomes:
-- _["test"] = {}
-- _["test"][1] = "Testing..."
-- This handles tables as keys and circular references properly.
-- It also handles multiple references well, writing the table only once.
-- The dumped argument is internal-only.
function dump2(o, name, dumped)
name = name or "_"
-- "dumped" is used to keep track of serialized tables to handle
-- multiple references and circular tables properly.
-- It only contains tables as keys. The value is the name that
-- the table has in the dump, eg:
-- {x = {"y"}} -> dumped[{"y"}] = '_["x"]'
dumped = dumped or {}
if type(o) ~= "table" then
return string.format("%s = %s\n", name, basic_dump(o))
end
if dumped[o] then
return string.format("%s = %s\n", name, dumped[o])
end
dumped[o] = name
-- This contains a list of strings to be concatenated later (because
-- Lua is slow at individual concatenation).
local t = {}
for k, v in pairs(o) do
local keyStr
if type(k) == "table" then
if dumped[k] then
keyStr = dumped[k]
else
-- Key tables don't have a name, so use one of
-- the form _G["table: 0xFFFFFFF"]
keyStr = string.format("_G[%q]", tostring(k))
-- Dump key table
t[#t + 1] = dump2(k, keyStr, dumped)
end
else
keyStr = basic_dump(k)
end
local vname = string.format("%s[%s]", name, keyStr)
t[#t + 1] = dump2(v, vname, dumped)
end
return string.format("%s = {}\n%s", name, table.concat(t))
end
--------------------------------------------------------------------------------
-- This dumps values in a one-statement format.
-- For example, {test = {"Testing..."}} becomes:
-- [[{
-- test = {
-- "Testing..."
-- }
-- }]]
-- This supports tables as keys, but not circular references.
-- It performs poorly with multiple references as it writes out the full
-- table each time.
-- The indent field specifies a indentation string, it defaults to a tab.
-- Use the empty string to disable indentation.
-- The dumped and level arguments are internal-only.
function dump(o, indent, nested, level)
local t = type(o)
if not level and t == "userdata" then
-- when userdata (e.g. player) is passed directly, print its metatable:
return "userdata metatable: " .. dump(getmetatable(o))
end
if t ~= "table" then
return basic_dump(o)
end
-- Contains table -> true/nil of currently nested tables
nested = nested or {}
if nested[o] then
return "<circular reference>"
end
nested[o] = true
indent = indent or "\t"
level = level or 1
local t = {}
local dumped_indexes = {}
for i, v in ipairs(o) do
t[#t + 1] = dump(v, indent, nested, level + 1)
dumped_indexes[i] = true
end
for k, v in pairs(o) do
if not dumped_indexes[k] then
if type(k) ~= "string" or not is_valid_identifier(k) then
k = "["..dump(k, indent, nested, level + 1).."]"
end
v = dump(v, indent, nested, level + 1)
t[#t + 1] = k.." = "..v
end
end
nested[o] = nil
if indent ~= "" then
local indent_str = "\n"..string.rep(indent, level)
local end_indent_str = "\n"..string.rep(indent, level - 1)
return string.format("{%s%s%s}",
indent_str,
table.concat(t, ","..indent_str),
end_indent_str)
end
return "{"..table.concat(t, ", ").."}"
end
--------------------------------------------------------------------------------
function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
delim = delim or ","
max_splits = max_splits or -1
local items = {}
local pos, len, seplen = 1, #str, #delim
local plain = not sep_is_pattern
max_splits = max_splits + 1
repeat
local np, npe = string_find(str, delim, pos, plain)
np, npe = (np or (len+1)), (npe or (len+1))
if (not np) or (max_splits == 1) then
np = len + 1
npe = np
end
local s = string_sub(str, pos, np - 1)
if include_empty or (s ~= "") then
max_splits = max_splits - 1
items[#items + 1] = s
end
pos = npe + 1
until (max_splits == 0) or (pos > (len + 1))
return items
end
--------------------------------------------------------------------------------
function table.indexof(list, val)
for i, v in ipairs(list) do
if v == val then
return i
end
end
return -1
end
assert(table.indexof({"foo", "bar"}, "foo") == 1)
assert(table.indexof({"foo", "bar"}, "baz") == -1)
--------------------------------------------------------------------------------
if INIT ~= "client" then
function file_exists(filename)
local f = io.open(filename, "r")
if f == nil then
return false
else
f:close()
return true
end
end
end
--------------------------------------------------------------------------------
function string:trim()
return (self:gsub("^%s*(.-)%s*$", "%1"))
end
assert(string.trim("\n \t\tfoo bar\t ") == "foo bar")
--------------------------------------------------------------------------------
function math.hypot(x, y)
local t
x = math.abs(x)
y = math.abs(y)
t = math.min(x, y)
x = math.max(x, y)
if x == 0 then return 0 end
t = t / x
return x * math.sqrt(1 + t * t)
end
--------------------------------------------------------------------------------
function math.sign(x, tolerance)
tolerance = tolerance or 0
if x > tolerance then
return 1
elseif x < -tolerance then
return -1
end
return 0
end
--------------------------------------------------------------------------------
function get_last_folder(text,count)
local parts = text:split(DIR_DELIM)
if count == nil then
return parts[#parts]
end
local retval = ""
for i=1,count,1 do
retval = retval .. parts[#parts - (count-i)] .. DIR_DELIM
end
return retval
end
--------------------------------------------------------------------------------
function cleanup_path(temppath)
local parts = temppath:split("-")
temppath = ""
for i=1,#parts,1 do
if temppath ~= "" then
temppath = temppath .. "_"
end
temppath = temppath .. parts[i]
end
parts = temppath:split(".")
temppath = ""
for i=1,#parts,1 do
if temppath ~= "" then
temppath = temppath .. "_"
end
temppath = temppath .. parts[i]
end
parts = temppath:split("'")
temppath = ""
for i=1,#parts,1 do
if temppath ~= "" then
temppath = temppath .. ""
end
temppath = temppath .. parts[i]
end
parts = temppath:split(" ")
temppath = ""
for i=1,#parts,1 do
if temppath ~= "" then
temppath = temppath
end
temppath = temppath .. parts[i]
end
return temppath
end
function core.formspec_escape(text)
if text ~= nil then
text = string.gsub(text,"\\","\\\\")
text = string.gsub(text,"%]","\\]")
text = string.gsub(text,"%[","\\[")
text = string.gsub(text,";","\\;")
text = string.gsub(text,",","\\,")
end
return text
end
function core.wrap_text(text, max_length, as_table)
local result = {}
local line = {}
if #text <= max_length then
return as_table and {text} or text
end
for word in text:gmatch('%S+') do
local cur_length = #table.concat(line, ' ')
if cur_length > 0 and cur_length + #word + 1 >= max_length then
-- word wouldn't fit on current line, move to next line
table.insert(result, table.concat(line, ' '))
line = {}
end
table.insert(line, word)
end
table.insert(result, table.concat(line, ' '))
return as_table and result or table.concat(result, '\n')
end
--------------------------------------------------------------------------------
if INIT == "game" then
local dirs1 = {9, 18, 7, 12}
local dirs2 = {20, 23, 22, 21}
function core.rotate_and_place(itemstack, placer, pointed_thing,
infinitestacks, orient_flags, prevent_after_place)
orient_flags = orient_flags or {}
local unode = core.get_node_or_nil(pointed_thing.under)
if not unode then
return
end
local undef = core.registered_nodes[unode.name]
if undef and undef.on_rightclick then
return undef.on_rightclick(pointed_thing.under, unode, placer,
itemstack, pointed_thing)
end
local fdir = placer and core.dir_to_facedir(placer:get_look_dir()) or 0
local above = pointed_thing.above
local under = pointed_thing.under
local iswall = (above.y == under.y)
local isceiling = not iswall and (above.y < under.y)
if undef and undef.buildable_to then
iswall = false
end
if orient_flags.force_floor then
iswall = false
isceiling = false
elseif orient_flags.force_ceiling then
iswall = false
isceiling = true
elseif orient_flags.force_wall then
iswall = true
isceiling = false
elseif orient_flags.invert_wall then
iswall = not iswall
end
local param2 = fdir
if iswall then
param2 = dirs1[fdir + 1]
elseif isceiling then
if orient_flags.force_facedir then
cparam2 = 20
else
param2 = dirs2[fdir + 1]
end
else -- place right side up
if orient_flags.force_facedir then
param2 = 0
end
end
local old_itemstack = ItemStack(itemstack)
local new_itemstack, removed = core.item_place_node(
itemstack, placer, pointed_thing, param2, prevent_after_place
)
return infinitestacks and old_itemstack or new_itemstack
end
--------------------------------------------------------------------------------
--Wrapper for rotate_and_place() to check for sneak and assume Creative mode
--implies infinite stacks when performing a 6d rotation.
--------------------------------------------------------------------------------
local creative_mode_cache = core.settings:get_bool("creative_mode")
local function is_creative(name)
return creative_mode_cache or
core.check_player_privs(name, {creative = true})
end
core.rotate_node = function(itemstack, placer, pointed_thing)
local name = placer and placer:get_player_name() or ""
local invert_wall = placer and placer:get_player_control().sneak or false
core.rotate_and_place(itemstack, placer, pointed_thing,
is_creative(name),
{invert_wall = invert_wall}, true)
return itemstack
end
end
--------------------------------------------------------------------------------
function core.explode_table_event(evt)
if evt ~= nil then
local parts = evt:split(":")
if #parts == 3 then
local t = parts[1]:trim()
local r = tonumber(parts[2]:trim())
local c = tonumber(parts[3]:trim())
if type(r) == "number" and type(c) == "number"
and t ~= "INV" then
return {type=t, row=r, column=c}
end
end
end
return {type="INV", row=0, column=0}
end
--------------------------------------------------------------------------------
function core.explode_textlist_event(evt)
if evt ~= nil then
local parts = evt:split(":")
if #parts == 2 then
local t = parts[1]:trim()
local r = tonumber(parts[2]:trim())
if type(r) == "number" and t ~= "INV" then
return {type=t, index=r}
end
end
end
return {type="INV", index=0}
end
--------------------------------------------------------------------------------
function core.explode_scrollbar_event(evt)
local retval = core.explode_textlist_event(evt)
retval.value = retval.index
retval.index = nil
return retval
end
--------------------------------------------------------------------------------
function core.pos_to_string(pos, decimal_places)
local x = pos.x
local y = pos.y
local z = pos.z
if decimal_places ~= nil then
x = string.format("%." .. decimal_places .. "f", x)
y = string.format("%." .. decimal_places .. "f", y)
z = string.format("%." .. decimal_places .. "f", z)
end
return "(" .. x .. "," .. y .. "," .. z .. ")"
end
--------------------------------------------------------------------------------
function core.string_to_pos(value)
if value == nil then
return nil
end
local p = {}
p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
if p.x and p.y and p.z then
p.x = tonumber(p.x)
p.y = tonumber(p.y)
p.z = tonumber(p.z)
return p
end
local p = {}
p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
if p.x and p.y and p.z then
p.x = tonumber(p.x)
p.y = tonumber(p.y)
p.z = tonumber(p.z)
return p
end
return nil
end
assert(core.string_to_pos("10.0, 5, -2").x == 10)
assert(core.string_to_pos("( 10.0, 5, -2)").z == -2)
assert(core.string_to_pos("asd, 5, -2)") == nil)
--------------------------------------------------------------------------------
function core.string_to_area(value)
local p1, p2 = unpack(value:split(") ("))
if p1 == nil or p2 == nil then
return nil
end
p1 = core.string_to_pos(p1 .. ")")
p2 = core.string_to_pos("(" .. p2)
if p1 == nil or p2 == nil then
return nil
end
return p1, p2
end
local function test_string_to_area()
local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)")
assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2)
assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53)
p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53")
assert(p1 == nil and p2 == nil)
p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53")
assert(p1 == nil and p2 == nil)
end
test_string_to_area()
--------------------------------------------------------------------------------
function table.copy(t, seen)
local n = {}
seen = seen or {}
seen[t] = n
for k, v in pairs(t) do
n[(type(k) == "table" and (seen[k] or table.copy(k, seen))) or k] =
(type(v) == "table" and (seen[v] or table.copy(v, seen))) or v
end
return n
end
--------------------------------------------------------------------------------
-- mainmenu only functions
--------------------------------------------------------------------------------
if INIT == "mainmenu" then
function core.get_game(index)
local games = game.get_games()
if index > 0 and index <= #games then
return games[index]
end
return nil
end
end
if INIT == "client" or INIT == "mainmenu" then
function fgettext_ne(text, ...)
text = core.gettext(text)
local arg = {n=select('#', ...), ...}
if arg.n >= 1 then
-- Insert positional parameters ($1, $2, ...)
local result = ''
local pos = 1
while pos <= text:len() do
local newpos = text:find('[$]', pos)
if newpos == nil then
result = result .. text:sub(pos)
pos = text:len() + 1
else
local paramindex =
tonumber(text:sub(newpos+1, newpos+1))
result = result .. text:sub(pos, newpos-1)
.. tostring(arg[paramindex])
pos = newpos + 2
end
end
text = result
end
return text
end
function fgettext(text, ...)
return core.formspec_escape(fgettext_ne(text, ...))
end
end
local ESCAPE_CHAR = string.char(0x1b)
function core.get_color_escape_sequence(color)
return ESCAPE_CHAR .. "(c@" .. color .. ")"
end
function core.get_background_escape_sequence(color)
return ESCAPE_CHAR .. "(b@" .. color .. ")"
end
function core.colorize(color, message)
local lines = tostring(message):split("\n", true)
local color_code = core.get_color_escape_sequence(color)
for i, line in ipairs(lines) do
lines[i] = color_code .. line
end
return table.concat(lines, "\n") .. core.get_color_escape_sequence("#ffffff")
end
function core.strip_foreground_colors(str)
return (str:gsub(ESCAPE_CHAR .. "%(c@[^)]+%)", ""))
end
function core.strip_background_colors(str)
return (str:gsub(ESCAPE_CHAR .. "%(b@[^)]+%)", ""))
end
function core.strip_colors(str)
return (str:gsub(ESCAPE_CHAR .. "%([bc]@[^)]+%)", ""))
end
--------------------------------------------------------------------------------
-- Returns the exact coordinate of a pointed surface
--------------------------------------------------------------------------------
function core.pointed_thing_to_face_pos(placer, pointed_thing)
local eye_offset_first = placer:get_eye_offset()
local node_pos = pointed_thing.under
local camera_pos = placer:get_pos()
local pos_off = vector.multiply(
vector.subtract(pointed_thing.above, node_pos), 0.5)
local look_dir = placer:get_look_dir()
local offset, nc
local oc = {}
for c, v in pairs(pos_off) do
if nc or v == 0 then
oc[#oc + 1] = c
else
offset = v
nc = c
end
end
local fine_pos = {[nc] = node_pos[nc] + offset}
camera_pos.y = camera_pos.y + 1.625 + eye_offset_first.y / 10
local f = (node_pos[nc] + offset - camera_pos[nc]) / look_dir[nc]
for i = 1, #oc do
fine_pos[oc[i]] = camera_pos[oc[i]] + look_dir[oc[i]] * f
end
return fine_pos
end

View File

@@ -0,0 +1,221 @@
--- Lua module to serialize values as Lua code.
-- From: https://github.com/fab13n/metalua/blob/no-dll/src/lib/serialize.lua
-- License: MIT
-- @copyright 2006-2997 Fabien Fleutot <metalua@gmail.com>
-- @author Fabien Fleutot <metalua@gmail.com>
-- @author ShadowNinja <shadowninja@minetest.net>
--------------------------------------------------------------------------------
--- Serialize an object into a source code string. This string, when passed as
-- an argument to deserialize(), returns an object structurally identical to
-- the original one. The following are currently supported:
-- * Booleans, numbers, strings, and nil.
-- * Functions; uses interpreter-dependent (and sometimes platform-dependent) bytecode!
-- * Tables; they can cantain multiple references and can be recursive, but metatables aren't saved.
-- This works in two phases:
-- 1. Recursively find and record multiple references and recursion.
-- 2. Recursively dump the value into a string.
-- @param x Value to serialize (nil is allowed).
-- @return load()able string containing the value.
function core.serialize(x)
local local_index = 1 -- Top index of the "_" local table in the dump
-- table->nil/1/2 set of tables seen.
-- nil = not seen, 1 = seen once, 2 = seen multiple times.
local seen = {}
-- nest_points are places where a table appears within itself, directly
-- or not. For instance, all of these chunks create nest points in
-- table x: "x = {}; x[x] = 1", "x = {}; x[1] = x",
-- "x = {}; x[1] = {y = {x}}".
-- To handle those, two tables are used by mark_nest_point:
-- * nested - Transient set of tables being currently traversed.
-- Used for detecting nested tables.
-- * nest_points - parent->{key=value, ...} table cantaining the nested
-- keys and values in the parent. They're all dumped after all the
-- other table operations have been performed.
--
-- mark_nest_point(p, k, v) fills nest_points with information required
-- to remember that key/value (k, v) creates a nest point in table
-- parent. It also marks "parent" and the nested item(s) as occuring
-- multiple times, since several references to it will be required in
-- order to patch the nest points.
local nest_points = {}
local nested = {}
local function mark_nest_point(parent, k, v)
local nk, nv = nested[k], nested[v]
local np = nest_points[parent]
if not np then
np = {}
nest_points[parent] = np
end
np[k] = v
seen[parent] = 2
if nk then seen[k] = 2 end
if nv then seen[v] = 2 end
end
-- First phase, list the tables and functions which appear more than
-- once in x.
local function mark_multiple_occurences(x)
local tp = type(x)
if tp ~= "table" and tp ~= "function" then
-- No identity (comparison is done by value, not by instance)
return
end
if seen[x] == 1 then
seen[x] = 2
elseif seen[x] ~= 2 then
seen[x] = 1
end
if tp == "table" then
nested[x] = true
for k, v in pairs(x) do
if nested[k] or nested[v] then
mark_nest_point(x, k, v)
else
mark_multiple_occurences(k)
mark_multiple_occurences(v)
end
end
nested[x] = nil
end
end
local dumped = {} -- object->varname set
local local_defs = {} -- Dumped local definitions as source code lines
-- Mutually recursive local functions:
local dump_val, dump_or_ref_val
-- If x occurs multiple times, dump the local variable rather than
-- the value. If it's the first time it's dumped, also dump the
-- content in local_defs.
function dump_or_ref_val(x)
if seen[x] ~= 2 then
return dump_val(x)
end
local var = dumped[x]
if var then -- Already referenced
return var
end
-- First occurence, create and register reference
local val = dump_val(x)
local i = local_index
local_index = local_index + 1
var = "_["..i.."]"
local_defs[#local_defs + 1] = var.." = "..val
dumped[x] = var
return var
end
-- Second phase. Dump the object; subparts occuring multiple times
-- are dumped in local variables which can be referenced multiple
-- times. Care is taken to dump local vars in a sensible order.
function dump_val(x)
local tp = type(x)
if x == nil then return "nil"
elseif tp == "string" then return string.format("%q", x)
elseif tp == "boolean" then return x and "true" or "false"
elseif tp == "function" then
return string.format("loadstring(%q)", string.dump(x))
elseif tp == "number" then
-- Serialize integers with string.format to prevent
-- scientific notation, which doesn't preserve
-- precision and breaks things like node position
-- hashes. Serialize floats normally.
if math.floor(x) == x then
return string.format("%d", x)
else
return tostring(x)
end
elseif tp == "table" then
local vals = {}
local idx_dumped = {}
local np = nest_points[x]
for i, v in ipairs(x) do
if not np or not np[i] then
vals[#vals + 1] = dump_or_ref_val(v)
end
idx_dumped[i] = true
end
for k, v in pairs(x) do
if (not np or not np[k]) and
not idx_dumped[k] then
vals[#vals + 1] = "["..dump_or_ref_val(k).."] = "
..dump_or_ref_val(v)
end
end
return "{"..table.concat(vals, ", ").."}"
else
error("Can't serialize data of type "..tp)
end
end
local function dump_nest_points()
for parent, vals in pairs(nest_points) do
for k, v in pairs(vals) do
local_defs[#local_defs + 1] = dump_or_ref_val(parent)
.."["..dump_or_ref_val(k).."] = "
..dump_or_ref_val(v)
end
end
end
mark_multiple_occurences(x)
local top_level = dump_or_ref_val(x)
dump_nest_points()
if next(local_defs) then
return "local _ = {}\n"
..table.concat(local_defs, "\n")
.."\nreturn "..top_level
else
return "return "..top_level
end
end
-- Deserialization
local env = {
loadstring = loadstring,
}
local safe_env = {
loadstring = function() end,
}
function core.deserialize(str, safe)
if type(str) ~= "string" then
return nil, "Cannot deserialize type '"..type(str)
.."'. Argument must be a string."
end
if str:byte(1) == 0x1B then
return nil, "Bytecode prohibited"
end
local f, err = loadstring(str)
if not f then return nil, err end
setfenv(f, safe and safe_env or env)
local good, data = pcall(f)
if good then
return data
else
return nil, data
end
end
-- Unit tests
local test_in = {cat={sound="nyan", speed=400}, dog={sound="woof"}}
local test_out = core.deserialize(core.serialize(test_in))
assert(test_in.cat.sound == test_out.cat.sound)
assert(test_in.cat.speed == test_out.cat.speed)
assert(test_in.dog.sound == test_out.dog.sound)
test_in = {escape_chars="\n\r\t\v\\\"\'", non_european="θשׁ٩∂"}
test_out = core.deserialize(core.serialize(test_in))
assert(test_in.escape_chars == test_out.escape_chars)
assert(test_in.non_european == test_out.non_european)

57
builtin/common/strict.lua Normal file
View File

@@ -0,0 +1,57 @@
-- Always warn when creating a global variable, even outside of a function.
-- This ignores mod namespaces (variables with the same name as the current mod).
local WARN_INIT = false
local getinfo = debug.getinfo
function core.global_exists(name)
if type(name) ~= "string" then
error("core.global_exists: " .. tostring(name) .. " is not a string")
end
return rawget(_G, name) ~= nil
end
local meta = {}
local declared = {}
-- Key is source file, line, and variable name; seperated by NULs
local warned = {}
function meta:__newindex(name, value)
local info = getinfo(2, "Sl")
local desc = ("%s:%d"):format(info.short_src, info.currentline)
if not declared[name] then
local warn_key = ("%s\0%d\0%s"):format(info.source,
info.currentline, name)
if not warned[warn_key] and info.what ~= "main" and
info.what ~= "C" then
core.log("warning", ("Assignment to undeclared "..
"global %q inside a function at %s.")
:format(name, desc))
warned[warn_key] = true
end
declared[name] = true
end
-- Ignore mod namespaces
if WARN_INIT and name ~= core.get_current_modname() then
core.log("warning", ("Global variable %q created at %s.")
:format(name, desc))
end
rawset(self, name, value)
end
function meta:__index(name)
local info = getinfo(2, "Sl")
local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name)
if not declared[name] and not warned[warn_key] and info.what ~= "C" then
core.log("warning", ("Undeclared global variable %q accessed at %s:%s")
:format(name, info.short_src, info.currentline))
warned[warn_key] = true
end
return rawget(self, name)
end
setmetatable(_G, meta)

145
builtin/common/vector.lua Normal file
View File

@@ -0,0 +1,145 @@
vector = {}
function vector.new(a, b, c)
if type(a) == "table" then
assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()")
return {x=a.x, y=a.y, z=a.z}
elseif a then
assert(b and c, "Invalid arguments for vector.new()")
return {x=a, y=b, z=c}
end
return {x=0, y=0, z=0}
end
function vector.equals(a, b)
return a.x == b.x and
a.y == b.y and
a.z == b.z
end
function vector.length(v)
return math.hypot(v.x, math.hypot(v.y, v.z))
end
function vector.normalize(v)
local len = vector.length(v)
if len == 0 then
return {x=0, y=0, z=0}
else
return vector.divide(v, len)
end
end
function vector.floor(v)
return {
x = math.floor(v.x),
y = math.floor(v.y),
z = math.floor(v.z)
}
end
function vector.round(v)
return {
x = math.floor(v.x + 0.5),
y = math.floor(v.y + 0.5),
z = math.floor(v.z + 0.5)
}
end
function vector.apply(v, func)
return {
x = func(v.x),
y = func(v.y),
z = func(v.z)
}
end
function vector.distance(a, b)
local x = a.x - b.x
local y = a.y - b.y
local z = a.z - b.z
return math.hypot(x, math.hypot(y, z))
end
function vector.direction(pos1, pos2)
local x_raw = pos2.x - pos1.x
local y_raw = pos2.y - pos1.y
local z_raw = pos2.z - pos1.z
local x_abs = math.abs(x_raw)
local y_abs = math.abs(y_raw)
local z_abs = math.abs(z_raw)
if x_abs >= y_abs and
x_abs >= z_abs then
y_raw = y_raw * (1 / x_abs)
z_raw = z_raw * (1 / x_abs)
x_raw = x_raw / x_abs
end
if y_abs >= x_abs and
y_abs >= z_abs then
x_raw = x_raw * (1 / y_abs)
z_raw = z_raw * (1 / y_abs)
y_raw = y_raw / y_abs
end
if z_abs >= y_abs and
z_abs >= x_abs then
x_raw = x_raw * (1 / z_abs)
y_raw = y_raw * (1 / z_abs)
z_raw = z_raw / z_abs
end
return {x=x_raw, y=y_raw, z=z_raw}
end
function vector.add(a, b)
if type(b) == "table" then
return {x = a.x + b.x,
y = a.y + b.y,
z = a.z + b.z}
else
return {x = a.x + b,
y = a.y + b,
z = a.z + b}
end
end
function vector.subtract(a, b)
if type(b) == "table" then
return {x = a.x - b.x,
y = a.y - b.y,
z = a.z - b.z}
else
return {x = a.x - b,
y = a.y - b,
z = a.z - b}
end
end
function vector.multiply(a, b)
if type(b) == "table" then
return {x = a.x * b.x,
y = a.y * b.y,
z = a.z * b.z}
else
return {x = a.x * b,
y = a.y * b,
z = a.z * b}
end
end
function vector.divide(a, b)
if type(b) == "table" then
return {x = a.x / b.x,
y = a.y / b.y,
z = a.z / b.z}
else
return {x = a.x / b,
y = a.y / b,
z = a.z / b}
end
end
function vector.sort(a, b)
return {x = math.min(a.x, b.x), y = math.min(a.y, b.y), z = math.min(a.z, b.z)},
{x = math.max(a.x, b.x), y = math.max(a.y, b.y), z = math.max(a.z, b.z)}
end

215
builtin/fstk/buttonbar.lua Normal file
View File

@@ -0,0 +1,215 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function buttonbar_formspec(self)
if self.hidden then
return ""
end
local formspec = string.format("box[%f,%f;%f,%f;%s]",
self.pos.x,self.pos.y ,self.size.x,self.size.y,self.bgcolor)
for i=self.startbutton,#self.buttons,1 do
local btn_name = self.buttons[i].name
local btn_pos = {}
if self.orientation == "horizontal" then
btn_pos.x = self.pos.x + --base pos
(i - self.startbutton) * self.btn_size + --button offset
self.btn_initial_offset
else
btn_pos.x = self.pos.x + (self.btn_size * 0.05)
end
if self.orientation == "vertical" then
btn_pos.y = self.pos.y + --base pos
(i - self.startbutton) * self.btn_size + --button offset
self.btn_initial_offset
else
btn_pos.y = self.pos.y + (self.btn_size * 0.05)
end
if (self.orientation == "vertical" and
(btn_pos.y + self.btn_size <= self.pos.y + self.size.y)) or
(self.orientation == "horizontal" and
(btn_pos.x + self.btn_size <= self.pos.x + self.size.x)) then
local borders="true"
if self.buttons[i].image ~= nil then
borders="false"
end
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;%s]tooltip[%s;%s]",
btn_pos.x, btn_pos.y, self.btn_size, self.btn_size,
self.buttons[i].image, btn_name, self.buttons[i].caption,
borders, btn_name, self.buttons[i].tooltip)
else
--print("end of displayable buttons: orientation: " .. self.orientation)
--print( "button_end: " .. (btn_pos.y + self.btn_size - (self.btn_size * 0.05)))
--print( "bar_end: " .. (self.pos.x + self.size.x))
break
end
end
if (self.have_move_buttons) then
local btn_dec_pos = {}
btn_dec_pos.x = self.pos.x + (self.btn_size * 0.05)
btn_dec_pos.y = self.pos.y + (self.btn_size * 0.05)
local btn_inc_pos = {}
local btn_size = {}
if self.orientation == "horizontal" then
btn_size.x = 0.5
btn_size.y = self.btn_size
btn_inc_pos.x = self.pos.x + self.size.x - 0.5
btn_inc_pos.y = self.pos.y + (self.btn_size * 0.05)
else
btn_size.x = self.btn_size
btn_size.y = 0.5
btn_inc_pos.x = self.pos.x + (self.btn_size * 0.05)
btn_inc_pos.y = self.pos.y + self.size.y - 0.5
end
local text_dec = "<"
local text_inc = ">"
if self.orientation == "vertical" then
text_dec = "^"
text_inc = "v"
end
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;;btnbar_dec_%s;%s;true;true]",
btn_dec_pos.x, btn_dec_pos.y, btn_size.x, btn_size.y,
self.name, text_dec)
formspec = formspec ..
string.format("image_button[%f,%f;%f,%f;;btnbar_inc_%s;%s;true;true]",
btn_inc_pos.x, btn_inc_pos.y, btn_size.x, btn_size.y,
self.name, text_inc)
end
return formspec
end
local function buttonbar_buttonhandler(self, fields)
if fields["btnbar_inc_" .. self.name] ~= nil and
self.startbutton < #self.buttons then
self.startbutton = self.startbutton + 1
return true
end
if fields["btnbar_dec_" .. self.name] ~= nil and self.startbutton > 1 then
self.startbutton = self.startbutton - 1
return true
end
for i=1,#self.buttons,1 do
if fields[self.buttons[i].name] ~= nil then
return self.userbuttonhandler(fields)
end
end
end
local buttonbar_metatable = {
handle_buttons = buttonbar_buttonhandler,
handle_events = function(self, event) end,
get_formspec = buttonbar_formspec,
hide = function(self) self.hidden = true end,
show = function(self) self.hidden = false end,
delete = function(self) ui.delete(self) end,
add_button = function(self, name, caption, image, tooltip)
if caption == nil then caption = "" end
if image == nil then image = "" end
if tooltip == nil then tooltip = "" end
self.buttons[#self.buttons + 1] = {
name = name,
caption = caption,
image = image,
tooltip = tooltip
}
if self.orientation == "horizontal" then
if ( (self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2)
> self.size.x ) then
self.btn_initial_offset = self.btn_size * 0.05 + 0.5
self.have_move_buttons = true
end
else
if ((self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2)
> self.size.y ) then
self.btn_initial_offset = self.btn_size * 0.05 + 0.5
self.have_move_buttons = true
end
end
end,
set_bgparams = function(self, bgcolor)
if (type(bgcolor) == "string") then
self.bgcolor = bgcolor
end
end,
}
buttonbar_metatable.__index = buttonbar_metatable
function buttonbar_create(name, cbf_buttonhandler, pos, orientation, size)
assert(name ~= nil)
assert(cbf_buttonhandler ~= nil)
assert(orientation == "vertical" or orientation == "horizontal")
assert(pos ~= nil and type(pos) == "table")
assert(size ~= nil and type(size) == "table")
local self = {}
self.name = name
self.type = "addon"
self.bgcolor = "#000000"
self.pos = pos
self.size = size
self.orientation = orientation
self.startbutton = 1
self.have_move_buttons = false
self.hidden = false
if self.orientation == "horizontal" then
self.btn_size = self.size.y
else
self.btn_size = self.size.x
end
if (self.btn_initial_offset == nil) then
self.btn_initial_offset = self.btn_size * 0.05
end
self.userbuttonhandler = cbf_buttonhandler
self.buttons = {}
setmetatable(self,buttonbar_metatable)
ui.add(self)
return self
end

69
builtin/fstk/dialog.lua Normal file
View File

@@ -0,0 +1,69 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--this program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function dialog_event_handler(self,event)
if self.user_eventhandler == nil or
self.user_eventhandler(event) == false then
--close dialog on esc
if event == "MenuQuit" then
self:delete()
return true
end
end
end
local dialog_metatable = {
eventhandler = dialog_event_handler,
get_formspec = function(self)
if not self.hidden then return self.formspec(self.data) end
end,
handle_buttons = function(self,fields)
if not self.hidden then return self.buttonhandler(self,fields) end
end,
handle_events = function(self,event)
if not self.hidden then return self.eventhandler(self,event) end
end,
hide = function(self) self.hidden = true end,
show = function(self) self.hidden = false end,
delete = function(self)
if self.parent ~= nil then
self.parent:show()
end
ui.delete(self)
end,
set_parent = function(self,parent) self.parent = parent end
}
dialog_metatable.__index = dialog_metatable
function dialog_create(name,get_formspec,buttonhandler,eventhandler)
local self = {}
self.name = name
self.type = "toplevel"
self.hidden = true
self.data = {}
self.formspec = get_formspec
self.buttonhandler = buttonhandler
self.user_eventhandler = eventhandler
setmetatable(self,dialog_metatable)
ui.add(self)
return self
end

273
builtin/fstk/tabview.lua Normal file
View File

@@ -0,0 +1,273 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
-- A tabview implementation --
-- Usage: --
-- tabview.create: returns initialized tabview raw element --
-- element.add(tab): add a tab declaration --
-- element.handle_buttons() --
-- element.handle_events() --
-- element.getFormspec() returns formspec of tabview --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local function add_tab(self,tab)
assert(tab.size == nil or (type(tab.size) == table and
tab.size.x ~= nil and tab.size.y ~= nil))
assert(tab.cbf_formspec ~= nil and type(tab.cbf_formspec) == "function")
assert(tab.cbf_button_handler == nil or
type(tab.cbf_button_handler) == "function")
assert(tab.cbf_events == nil or type(tab.cbf_events) == "function")
local newtab = {
name = tab.name,
caption = tab.caption,
button_handler = tab.cbf_button_handler,
event_handler = tab.cbf_events,
get_formspec = tab.cbf_formspec,
tabsize = tab.tabsize,
on_change = tab.on_change,
tabdata = {},
}
self.tablist[#self.tablist + 1] = newtab
if self.last_tab_index == #self.tablist then
self.current_tab = tab.name
if tab.on_activate ~= nil then
tab.on_activate(nil,tab.name)
end
end
end
--------------------------------------------------------------------------------
local function get_formspec(self)
local formspec = ""
if not self.hidden and (self.parent == nil or not self.parent.hidden) then
if self.parent == nil then
local tsize = self.tablist[self.last_tab_index].tabsize or
{width=self.width, height=self.height}
formspec = formspec ..
string.format("size[%f,%f,%s]",tsize.width,tsize.height,
dump(self.fixed_size))
end
formspec = formspec .. self:tab_header()
formspec = formspec ..
self.tablist[self.last_tab_index].get_formspec(
self,
self.tablist[self.last_tab_index].name,
self.tablist[self.last_tab_index].tabdata,
self.tablist[self.last_tab_index].tabsize
)
end
return formspec
end
--------------------------------------------------------------------------------
local function handle_buttons(self,fields)
if self.hidden then
return false
end
if self:handle_tab_buttons(fields) then
return true
end
if self.glb_btn_handler ~= nil and
self.glb_btn_handler(self,fields) then
return true
end
if self.tablist[self.last_tab_index].button_handler ~= nil then
return
self.tablist[self.last_tab_index].button_handler(
self,
fields,
self.tablist[self.last_tab_index].name,
self.tablist[self.last_tab_index].tabdata
)
end
return false
end
--------------------------------------------------------------------------------
local function handle_events(self,event)
if self.hidden then
return false
end
if self.glb_evt_handler ~= nil and
self.glb_evt_handler(self,event) then
return true
end
if self.tablist[self.last_tab_index].evt_handler ~= nil then
return
self.tablist[self.last_tab_index].evt_handler(
self,
event,
self.tablist[self.last_tab_index].name,
self.tablist[self.last_tab_index].tabdata
)
end
return false
end
--------------------------------------------------------------------------------
local function tab_header(self)
local toadd = ""
for i=1,#self.tablist,1 do
if toadd ~= "" then
toadd = toadd .. ","
end
toadd = toadd .. self.tablist[i].caption
end
return string.format("tabheader[%f,%f;%s;%s;%i;true;false]",
self.header_x, self.header_y, self.name, toadd, self.last_tab_index);
end
--------------------------------------------------------------------------------
local function switch_to_tab(self, index)
--first call on_change for tab to leave
if self.tablist[self.last_tab_index].on_change ~= nil then
self.tablist[self.last_tab_index].on_change("LEAVE",
self.current_tab, self.tablist[index].name)
end
--update tabview data
self.last_tab_index = index
local old_tab = self.current_tab
self.current_tab = self.tablist[index].name
if (self.autosave_tab) then
core.settings:set(self.name .. "_LAST",self.current_tab)
end
-- call for tab to enter
if self.tablist[index].on_change ~= nil then
self.tablist[index].on_change("ENTER",
old_tab,self.current_tab)
end
end
--------------------------------------------------------------------------------
local function handle_tab_buttons(self,fields)
--save tab selection to config file
if fields[self.name] then
local index = tonumber(fields[self.name])
switch_to_tab(self, index)
return true
end
return false
end
--------------------------------------------------------------------------------
local function set_tab_by_name(self, name)
for i=1,#self.tablist,1 do
if self.tablist[i].name == name then
switch_to_tab(self, i)
return true
end
end
return false
end
--------------------------------------------------------------------------------
local function hide_tabview(self)
self.hidden=true
--call on_change as we're not gonna show self tab any longer
if self.tablist[self.last_tab_index].on_change ~= nil then
self.tablist[self.last_tab_index].on_change("LEAVE",
self.current_tab, nil)
end
end
--------------------------------------------------------------------------------
local function show_tabview(self)
self.hidden=false
-- call for tab to enter
if self.tablist[self.last_tab_index].on_change ~= nil then
self.tablist[self.last_tab_index].on_change("ENTER",
nil,self.current_tab)
end
end
local tabview_metatable = {
add = add_tab,
handle_buttons = handle_buttons,
handle_events = handle_events,
get_formspec = get_formspec,
show = show_tabview,
hide = hide_tabview,
delete = function(self) ui.delete(self) end,
set_parent = function(self,parent) self.parent = parent end,
set_autosave_tab =
function(self,value) self.autosave_tab = value end,
set_tab = set_tab_by_name,
set_global_button_handler =
function(self,handler) self.glb_btn_handler = handler end,
set_global_event_handler =
function(self,handler) self.glb_evt_handler = handler end,
set_fixed_size =
function(self,state) self.fixed_size = state end,
tab_header = tab_header,
handle_tab_buttons = handle_tab_buttons
}
tabview_metatable.__index = tabview_metatable
--------------------------------------------------------------------------------
function tabview_create(name, size, tabheaderpos)
local self = {}
self.name = name
self.type = "toplevel"
self.width = size.x
self.height = size.y
self.header_x = tabheaderpos.x
self.header_y = tabheaderpos.y
setmetatable(self, tabview_metatable)
self.fixed_size = true
self.hidden = true
self.current_tab = nil
self.last_tab_index = 1
self.tablist = {}
self.autosave_tab = false
ui.add(self)
return self
end

208
builtin/fstk/ui.lua Normal file
View File

@@ -0,0 +1,208 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ui = {}
ui.childlist = {}
ui.default = nil
--------------------------------------------------------------------------------
function ui.add(child)
--TODO check child
ui.childlist[child.name] = child
return child.name
end
--------------------------------------------------------------------------------
function ui.delete(child)
if ui.childlist[child.name] == nil then
return false
end
ui.childlist[child.name] = nil
return true
end
--------------------------------------------------------------------------------
function ui.set_default(name)
ui.default = name
end
--------------------------------------------------------------------------------
function ui.find_by_name(name)
return ui.childlist[name]
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Internal functions not to be called from user
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local function wordwrap_quickhack(str)
local res = ""
local ar = str:split("\n")
for i = 1, #ar do
local text = ar[i]
-- Hack to add word wrapping.
-- TODO: Add engine support for wrapping in formspecs
while #text > 80 do
if res ~= "" then
res = res .. ","
end
res = res .. core.formspec_escape(string.sub(text, 1, 79))
text = string.sub(text, 80, #text)
end
if res ~= "" then
res = res .. ","
end
res = res .. core.formspec_escape(text)
end
return res
end
--------------------------------------------------------------------------------
function ui.update()
local formspec = ""
-- handle errors
if gamedata ~= nil and gamedata.reconnect_requested then
formspec = wordwrap_quickhack(gamedata.errormessage or "")
formspec = "size[12,5]" ..
"label[0.5,0;" .. fgettext("The server has requested a reconnect:") ..
"]textlist[0.2,0.8;11.5,3.5;;" .. formspec ..
"]button[6,4.6;3,0.5;btn_reconnect_no;" .. fgettext("Main menu") .. "]" ..
"button[3,4.6;3,0.5;btn_reconnect_yes;" .. fgettext("Reconnect") .. "]"
elseif gamedata ~= nil and gamedata.errormessage ~= nil then
formspec = wordwrap_quickhack(gamedata.errormessage)
local error_title
if string.find(gamedata.errormessage, "ModError") then
error_title = fgettext("An error occured in a Lua script, such as a mod:")
else
error_title = fgettext("An error occured:")
end
formspec = "size[12,5]" ..
"label[0.5,0;" .. error_title ..
"]textlist[0.2,0.8;11.5,3.5;;" .. formspec ..
"]button[4.5,4.6;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]"
else
local active_toplevel_ui_elements = 0
for key,value in pairs(ui.childlist) do
if (value.type == "toplevel") then
local retval = value:get_formspec()
if retval ~= nil and retval ~= "" then
active_toplevel_ui_elements = active_toplevel_ui_elements +1
formspec = formspec .. retval
end
end
end
-- no need to show addons if there ain't a toplevel element
if (active_toplevel_ui_elements > 0) then
for key,value in pairs(ui.childlist) do
if (value.type == "addon") then
local retval = value:get_formspec()
if retval ~= nil and retval ~= "" then
formspec = formspec .. retval
end
end
end
end
if (active_toplevel_ui_elements > 1) then
core.log("warning", "more than one active ui "..
"element, self most likely isn't intended")
end
if (active_toplevel_ui_elements == 0) then
core.log("warning", "no toplevel ui element "..
"active; switching to default")
ui.childlist[ui.default]:show()
formspec = ui.childlist[ui.default]:get_formspec()
end
end
core.update_formspec(formspec)
end
--------------------------------------------------------------------------------
function ui.handle_buttons(fields)
for key,value in pairs(ui.childlist) do
local retval = value:handle_buttons(fields)
if retval then
ui.update()
return
end
end
end
--------------------------------------------------------------------------------
function ui.handle_events(event)
for key,value in pairs(ui.childlist) do
if value.handle_events ~= nil then
local retval = value:handle_events(event)
if retval then
return retval
end
end
end
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- initialize callbacks
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
core.button_handler = function(fields)
if fields["btn_reconnect_yes"] then
gamedata.reconnect_requested = false
gamedata.errormessage = nil
gamedata.do_reconnect = true
core.start()
return
elseif fields["btn_reconnect_no"] or fields["btn_error_confirm"] then
gamedata.errormessage = nil
gamedata.reconnect_requested = false
ui.update()
return
end
if ui.handle_buttons(fields) then
ui.update()
end
end
--------------------------------------------------------------------------------
core.event_handler = function(event)
if ui.handle_events(event) then
ui.update()
return
end
if event == "Refresh" then
ui.update()
return
end
end

216
builtin/game/auth.lua Normal file
View File

@@ -0,0 +1,216 @@
-- Minetest: builtin/auth.lua
--
-- Authentication handler
--
function core.string_to_privs(str, delim)
assert(type(str) == "string")
delim = delim or ','
local privs = {}
for _, priv in pairs(string.split(str, delim)) do
privs[priv:trim()] = true
end
return privs
end
function core.privs_to_string(privs, delim)
assert(type(privs) == "table")
delim = delim or ','
local list = {}
for priv, bool in pairs(privs) do
if bool then
list[#list + 1] = priv
end
end
return table.concat(list, delim)
end
assert(core.string_to_privs("a,b").b == true)
assert(core.privs_to_string({a=true,b=true}) == "a,b")
core.auth_file_path = core.get_worldpath().."/auth.txt"
core.auth_table = {}
local function read_auth_file()
local newtable = {}
local file, errmsg = io.open(core.auth_file_path, 'rb')
if not file then
core.log("info", core.auth_file_path.." could not be opened for reading ("..errmsg.."); assuming new world")
return
end
for line in file:lines() do
if line ~= "" then
local fields = line:split(":", true)
local name, password, privilege_string, last_login = unpack(fields)
last_login = tonumber(last_login)
if not (name and password and privilege_string) then
error("Invalid line in auth.txt: "..dump(line))
end
local privileges = core.string_to_privs(privilege_string)
newtable[name] = {password=password, privileges=privileges, last_login=last_login}
end
end
io.close(file)
core.auth_table = newtable
core.notify_authentication_modified()
end
local function save_auth_file()
local newtable = {}
-- Check table for validness before attempting to save
for name, stuff in pairs(core.auth_table) do
assert(type(name) == "string")
assert(name ~= "")
assert(type(stuff) == "table")
assert(type(stuff.password) == "string")
assert(type(stuff.privileges) == "table")
assert(stuff.last_login == nil or type(stuff.last_login) == "number")
end
local content = {}
for name, stuff in pairs(core.auth_table) do
local priv_string = core.privs_to_string(stuff.privileges)
local parts = {name, stuff.password, priv_string, stuff.last_login or ""}
content[#content + 1] = table.concat(parts, ":")
end
if not core.safe_file_write(core.auth_file_path, table.concat(content, "\n")) then
error(core.auth_file_path.." could not be written to")
end
end
read_auth_file()
core.builtin_auth_handler = {
get_auth = function(name)
assert(type(name) == "string")
-- Figure out what password to use for a new player (singleplayer
-- always has an empty password, otherwise use default, which is
-- usually empty too)
local new_password_hash = ""
-- If not in authentication table, return nil
if not core.auth_table[name] then
return nil
end
-- Figure out what privileges the player should have.
-- Take a copy of the privilege table
local privileges = {}
for priv, _ in pairs(core.auth_table[name].privileges) do
privileges[priv] = true
end
-- If singleplayer, give all privileges except those marked as give_to_singleplayer = false
if core.is_singleplayer() then
for priv, def in pairs(core.registered_privileges) do
if def.give_to_singleplayer then
privileges[priv] = true
end
end
-- For the admin, give everything
elseif name == core.settings:get("name") then
for priv, def in pairs(core.registered_privileges) do
privileges[priv] = true
end
end
-- All done
return {
password = core.auth_table[name].password,
privileges = privileges,
-- Is set to nil if unknown
last_login = core.auth_table[name].last_login,
}
end,
create_auth = function(name, password)
assert(type(name) == "string")
assert(type(password) == "string")
core.log('info', "Built-in authentication handler adding player '"..name.."'")
core.auth_table[name] = {
password = password,
privileges = core.string_to_privs(core.settings:get("default_privs")),
last_login = os.time(),
}
save_auth_file()
end,
set_password = function(name, password)
assert(type(name) == "string")
assert(type(password) == "string")
if not core.auth_table[name] then
core.builtin_auth_handler.create_auth(name, password)
else
core.log('info', "Built-in authentication handler setting password of player '"..name.."'")
core.auth_table[name].password = password
save_auth_file()
end
return true
end,
set_privileges = function(name, privileges)
assert(type(name) == "string")
assert(type(privileges) == "table")
if not core.auth_table[name] then
core.builtin_auth_handler.create_auth(name,
core.get_password_hash(name,
core.settings:get("default_password")))
end
core.auth_table[name].privileges = privileges
core.notify_authentication_modified(name)
save_auth_file()
end,
reload = function()
read_auth_file()
return true
end,
record_login = function(name)
assert(type(name) == "string")
assert(core.auth_table[name]).last_login = os.time()
save_auth_file()
end,
}
function core.register_authentication_handler(handler)
if core.registered_auth_handler then
error("Add-on authentication handler already registered by "..core.registered_auth_handler_modname)
end
core.registered_auth_handler = handler
core.registered_auth_handler_modname = core.get_current_modname()
handler.mod_origin = core.registered_auth_handler_modname
end
function core.get_auth_handler()
return core.registered_auth_handler or core.builtin_auth_handler
end
local function auth_pass(name)
return function(...)
local auth_handler = core.get_auth_handler()
if auth_handler[name] then
return auth_handler[name](...)
end
return false
end
end
core.set_player_password = auth_pass("set_password")
core.set_player_privs = auth_pass("set_privileges")
core.auth_reload = auth_pass("reload")
local record_login = auth_pass("record_login")
core.register_on_joinplayer(function(player)
record_login(player:get_player_name())
end)
core.register_on_prejoinplayer(function(name, ip)
local auth = core.auth_table
if auth[name] ~= nil then
return
end
local name_lower = name:lower()
for k in pairs(auth) do
if k:lower() == name_lower then
return string.format("\nCannot create new player called '%s'. "..
"Another account called '%s' is already registered. "..
"Please check the spelling if it's your account "..
"or use a different nickname.", name, k)
end
end
end)

View File

@@ -0,0 +1,968 @@
-- Minetest: builtin/game/chatcommands.lua
--
-- Chat command handler
--
core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY
core.register_on_chat_message(function(name, message)
if message:sub(1,1) ~= "/" then
return
end
local cmd, param = string.match(message, "^/([^ ]+) *(.*)")
if not cmd then
core.chat_send_player(name, "-!- Empty command")
return true
end
param = param or ""
local cmd_def = core.registered_chatcommands[cmd]
if not cmd_def then
core.chat_send_player(name, "-!- Invalid command: " .. cmd)
return true
end
local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs)
if has_privs then
core.set_last_run_mod(cmd_def.mod_origin)
local success, message = cmd_def.func(name, param)
if message then
core.chat_send_player(name, message)
end
else
core.chat_send_player(name, "You don't have permission"
.. " to run this command (missing privileges: "
.. table.concat(missing_privs, ", ") .. ")")
end
return true -- Handled chat message
end)
if core.settings:get_bool("profiler.load") then
-- Run after register_chatcommand and its register_on_chat_message
-- Before any chattcommands that should be profiled
profiler.init_chatcommand()
end
-- Parses a "range" string in the format of "here (number)" or
-- "(x1, y1, z1) (x2, y2, z2)", returning two position vectors
local function parse_range_str(player_name, str)
local p1, p2
local args = str:split(" ")
if args[1] == "here" then
p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2]))
if p1 == nil then
return false, "Unable to get player " .. player_name .. " position"
end
else
p1, p2 = core.string_to_area(str)
if p1 == nil then
return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
end
end
return p1, p2
end
--
-- Chat commands
--
core.register_chatcommand("me", {
params = "<action>",
description = "Display chat action (e.g., '/me orders a pizza' displays"
.. " '<player name> orders a pizza')",
privs = {shout=true},
func = function(name, param)
core.chat_send_all("* " .. name .. " " .. param)
end,
})
core.register_chatcommand("admin", {
description = "Show the name of the server owner",
func = function(name)
local admin = minetest.settings:get("name")
if admin then
return true, "The administrator of this server is "..admin.."."
else
return false, "There's no administrator named in the config file."
end
end,
})
core.register_chatcommand("privs", {
params = "<name>",
description = "Print privileges of player",
func = function(caller, param)
param = param:trim()
local name = (param ~= "" and param or caller)
return true, "Privileges of " .. name .. ": "
.. core.privs_to_string(
core.get_player_privs(name), ' ')
end,
})
local function handle_grant_command(caller, grantname, grantprivstr)
local caller_privs = minetest.get_player_privs(caller)
if not (caller_privs.privs or caller_privs.basic_privs) then
return false, "Your privileges are insufficient."
end
if not core.get_auth_handler().get_auth(grantname) then
return false, "Player " .. grantname .. " does not exist."
end
local grantprivs = core.string_to_privs(grantprivstr)
if grantprivstr == "all" then
grantprivs = core.registered_privileges
end
local privs = core.get_player_privs(grantname)
local privs_unknown = ""
local basic_privs =
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
for priv, _ in pairs(grantprivs) do
if not basic_privs[priv] and not caller_privs.privs then
return false, "Your privileges are insufficient."
end
if not core.registered_privileges[priv] then
privs_unknown = privs_unknown .. "Unknown privilege: " .. priv .. "\n"
end
privs[priv] = true
end
if privs_unknown ~= "" then
return false, privs_unknown
end
core.set_player_privs(grantname, privs)
core.log("action", caller..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname)
if grantname ~= caller then
core.chat_send_player(grantname, caller
.. " granted you privileges: "
.. core.privs_to_string(grantprivs, ' '))
end
return true, "Privileges of " .. grantname .. ": "
.. core.privs_to_string(
core.get_player_privs(grantname), ' ')
end
core.register_chatcommand("grant", {
params = "<name> <privilege>|all",
description = "Give privilege to player",
func = function(name, param)
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then
return false, "Invalid parameters (see /help grant)"
end
return handle_grant_command(name, grantname, grantprivstr)
end,
})
core.register_chatcommand("grantme", {
params = "<privilege>|all",
description = "Grant privileges to yourself",
func = function(name, param)
if param == "" then
return false, "Invalid parameters (see /help grantme)"
end
return handle_grant_command(name, name, param)
end,
})
core.register_chatcommand("revoke", {
params = "<name> <privilege>|all",
description = "Remove privilege from player",
privs = {},
func = function(name, param)
if not core.check_player_privs(name, {privs=true}) and
not core.check_player_privs(name, {basic_privs=true}) then
return false, "Your privileges are insufficient."
end
local revoke_name, revoke_priv_str = string.match(param, "([^ ]+) (.+)")
if not revoke_name or not revoke_priv_str then
return false, "Invalid parameters (see /help revoke)"
elseif not core.get_auth_handler().get_auth(revoke_name) then
return false, "Player " .. revoke_name .. " does not exist."
end
local revoke_privs = core.string_to_privs(revoke_priv_str)
local privs = core.get_player_privs(revoke_name)
local basic_privs =
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
for priv, _ in pairs(revoke_privs) do
if not basic_privs[priv] and
not core.check_player_privs(name, {privs=true}) then
return false, "Your privileges are insufficient."
end
end
if revoke_priv_str == "all" then
privs = {}
else
for priv, _ in pairs(revoke_privs) do
privs[priv] = nil
end
end
core.set_player_privs(revoke_name, privs)
core.log("action", name..' revoked ('
..core.privs_to_string(revoke_privs, ', ')
..') privileges from '..revoke_name)
if revoke_name ~= name then
core.chat_send_player(revoke_name, name
.. " revoked privileges from you: "
.. core.privs_to_string(revoke_privs, ' '))
end
return true, "Privileges of " .. revoke_name .. ": "
.. core.privs_to_string(
core.get_player_privs(revoke_name), ' ')
end,
})
core.register_chatcommand("setpassword", {
params = "<name> <password>",
description = "Set player's password",
privs = {password=true},
func = function(name, param)
local toname, raw_password = string.match(param, "^([^ ]+) +(.+)$")
if not toname then
toname = param:match("^([^ ]+) *$")
raw_password = nil
end
if not toname then
return false, "Name field required"
end
local act_str_past = "?"
local act_str_pres = "?"
if not raw_password then
core.set_player_password(toname, "")
act_str_past = "cleared"
act_str_pres = "clears"
else
core.set_player_password(toname,
core.get_password_hash(toname,
raw_password))
act_str_past = "set"
act_str_pres = "sets"
end
if toname ~= name then
core.chat_send_player(toname, "Your password was "
.. act_str_past .. " by " .. name)
end
core.log("action", name .. " " .. act_str_pres
.. " password of " .. toname .. ".")
return true, "Password of player \"" .. toname .. "\" " .. act_str_past
end,
})
core.register_chatcommand("clearpassword", {
params = "<name>",
description = "Set empty password",
privs = {password=true},
func = function(name, param)
local toname = param
if toname == "" then
return false, "Name field required"
end
core.set_player_password(toname, '')
core.log("action", name .. " clears password of " .. toname .. ".")
return true, "Password of player \"" .. toname .. "\" cleared"
end,
})
core.register_chatcommand("auth_reload", {
params = "",
description = "Reload authentication data",
privs = {server=true},
func = function(name, param)
local done = core.auth_reload()
return done, (done and "Done." or "Failed.")
end,
})
core.register_chatcommand("remove_player", {
params = "<name>",
description = "Remove player data",
privs = {server=true},
func = function(name, param)
local toname = param
if toname == "" then
return false, "Name field required"
end
local rc = core.remove_player(toname)
if rc == 0 then
core.log("action", name .. " removed player data of " .. toname .. ".")
return true, "Player \"" .. toname .. "\" removed."
elseif rc == 1 then
return true, "No such player \"" .. toname .. "\" to remove."
elseif rc == 2 then
return true, "Player \"" .. toname .. "\" is connected, cannot remove."
end
return false, "Unhandled remove_player return code " .. rc .. ""
end,
})
core.register_chatcommand("teleport", {
params = "<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>",
description = "Teleport to player or position",
privs = {teleport=true},
func = function(name, param)
-- Returns (pos, true) if found, otherwise (pos, false)
local function find_free_position_near(pos)
local tries = {
{x=1,y=0,z=0},
{x=-1,y=0,z=0},
{x=0,y=0,z=1},
{x=0,y=0,z=-1},
}
for _, d in ipairs(tries) do
local p = {x = pos.x+d.x, y = pos.y+d.y, z = pos.z+d.z}
local n = core.get_node_or_nil(p)
if n and n.name then
local def = core.registered_nodes[n.name]
if def and not def.walkable then
return p, true
end
end
end
return pos, false
end
local teleportee = nil
local p = {}
p.x, p.y, p.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
p.x = tonumber(p.x)
p.y = tonumber(p.y)
p.z = tonumber(p.z)
if p.x and p.y and p.z then
local lm = 31000
if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then
return false, "Cannot teleport out of map bounds!"
end
teleportee = core.get_player_by_name(name)
if teleportee then
teleportee:setpos(p)
return true, "Teleporting to "..core.pos_to_string(p)
end
end
local teleportee = nil
local p = nil
local target_name = nil
target_name = param:match("^([^ ]+)$")
teleportee = core.get_player_by_name(name)
if target_name then
local target = core.get_player_by_name(target_name)
if target then
p = target:getpos()
end
end
if teleportee and p then
p = find_free_position_near(p)
teleportee:setpos(p)
return true, "Teleporting to " .. target_name
.. " at "..core.pos_to_string(p)
end
if not core.check_player_privs(name, {bring=true}) then
return false, "You don't have permission to teleport other players (missing bring privilege)"
end
local teleportee = nil
local p = {}
local teleportee_name = nil
teleportee_name, p.x, p.y, p.z = param:match(
"^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
if teleportee_name then
teleportee = core.get_player_by_name(teleportee_name)
end
if teleportee and p.x and p.y and p.z then
teleportee:setpos(p)
return true, "Teleporting " .. teleportee_name
.. " to " .. core.pos_to_string(p)
end
local teleportee = nil
local p = nil
local teleportee_name = nil
local target_name = nil
teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
if teleportee_name then
teleportee = core.get_player_by_name(teleportee_name)
end
if target_name then
local target = core.get_player_by_name(target_name)
if target then
p = target:getpos()
end
end
if teleportee and p then
p = find_free_position_near(p)
teleportee:setpos(p)
return true, "Teleporting " .. teleportee_name
.. " to " .. target_name
.. " at " .. core.pos_to_string(p)
end
return false, 'Invalid parameters ("' .. param
.. '") or player not found (see /help teleport)'
end,
})
core.register_chatcommand("set", {
params = "[-n] <name> <value> | <name>",
description = "Set or read server configuration setting",
privs = {server=true},
func = function(name, param)
local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)")
if arg and arg == "-n" and setname and setvalue then
core.settings:set(setname, setvalue)
return true, setname .. " = " .. setvalue
end
local setname, setvalue = string.match(param, "([^ ]+) (.+)")
if setname and setvalue then
if not core.settings:get(setname) then
return false, "Failed. Use '/set -n <name> <value>' to create a new setting."
end
core.settings:set(setname, setvalue)
return true, setname .. " = " .. setvalue
end
local setname = string.match(param, "([^ ]+)")
if setname then
local setvalue = core.settings:get(setname)
if not setvalue then
setvalue = "<not set>"
end
return true, setname .. " = " .. setvalue
end
return false, "Invalid parameters (see /help set)."
end,
})
local function emergeblocks_callback(pos, action, num_calls_remaining, ctx)
if ctx.total_blocks == 0 then
ctx.total_blocks = num_calls_remaining + 1
ctx.current_blocks = 0
end
ctx.current_blocks = ctx.current_blocks + 1
if ctx.current_blocks == ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
string.format("Finished emerging %d blocks in %.2fms.",
ctx.total_blocks, (os.clock() - ctx.start_time) * 1000))
end
end
local function emergeblocks_progress_update(ctx)
if ctx.current_blocks ~= ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)",
ctx.current_blocks, ctx.total_blocks,
(ctx.current_blocks / ctx.total_blocks) * 100))
core.after(2, emergeblocks_progress_update, ctx)
end
end
core.register_chatcommand("emergeblocks", {
params = "(here [radius]) | (<pos1> <pos2>)",
description = "Load (or, if nonexistent, generate) map blocks "
.. "contained in area pos1 to pos2",
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
if p1 == false then
return false, p2
end
local context = {
current_blocks = 0,
total_blocks = 0,
start_time = os.clock(),
requestor_name = name
}
core.emerge_area(p1, p2, emergeblocks_callback, context)
core.after(2, emergeblocks_progress_update, context)
return true, "Started emerge of area ranging from " ..
core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
end,
})
core.register_chatcommand("deleteblocks", {
params = "(here [radius]) | (<pos1> <pos2>)",
description = "Delete map blocks contained in area pos1 to pos2",
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
if p1 == false then
return false, p2
end
if core.delete_area(p1, p2) then
return true, "Successfully cleared area ranging from " ..
core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
else
return false, "Failed to clear one or more blocks in area"
end
end,
})
core.register_chatcommand("fixlight", {
params = "(here [radius]) | (<pos1> <pos2>)",
description = "Resets lighting in the area between pos1 and pos2",
privs = {server = true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
if p1 == false then
return false, p2
end
if core.fix_light(p1, p2) then
return true, "Successfully reset light in the area ranging from " ..
core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
else
return false, "Failed to load one or more blocks in area"
end
end,
})
core.register_chatcommand("mods", {
params = "",
description = "List mods installed on the server",
privs = {},
func = function(name, param)
return true, table.concat(core.get_modnames(), ", ")
end,
})
local function handle_give_command(cmd, giver, receiver, stackstring)
core.log("action", giver .. " invoked " .. cmd
.. ', stackstring="' .. stackstring .. '"')
local itemstack = ItemStack(stackstring)
if itemstack:is_empty() then
return false, "Cannot give an empty item"
elseif not itemstack:is_known() then
return false, "Cannot give an unknown item"
end
local receiverref = core.get_player_by_name(receiver)
if receiverref == nil then
return false, receiver .. " is not a known player"
end
local leftover = receiverref:get_inventory():add_item("main", itemstack)
local partiality
if leftover:is_empty() then
partiality = ""
elseif leftover:get_count() == itemstack:get_count() then
partiality = "could not be "
else
partiality = "partially "
end
-- The actual item stack string may be different from what the "giver"
-- entered (e.g. big numbers are always interpreted as 2^16-1).
stackstring = itemstack:to_string()
if giver == receiver then
return true, ("%q %sadded to inventory.")
:format(stackstring, partiality)
else
core.chat_send_player(receiver, ("%q %sadded to inventory.")
:format(stackstring, partiality))
return true, ("%q %sadded to %s's inventory.")
:format(stackstring, partiality, receiver)
end
end
core.register_chatcommand("give", {
params = "<name> <ItemString>",
description = "Give item to player",
privs = {give=true},
func = function(name, param)
local toname, itemstring = string.match(param, "^([^ ]+) +(.+)$")
if not toname or not itemstring then
return false, "Name and ItemString required"
end
return handle_give_command("/give", name, toname, itemstring)
end,
})
core.register_chatcommand("giveme", {
params = "<ItemString>",
description = "Give item to yourself",
privs = {give=true},
func = function(name, param)
local itemstring = string.match(param, "(.+)$")
if not itemstring then
return false, "ItemString required"
end
return handle_give_command("/giveme", name, name, itemstring)
end,
})
core.register_chatcommand("spawnentity", {
params = "<EntityName> [<X>,<Y>,<Z>]",
description = "Spawn entity at given (or your) position",
privs = {give=true, interact=true},
func = function(name, param)
local entityname, p = string.match(param, "^([^ ]+) *(.*)$")
if not entityname then
return false, "EntityName required"
end
core.log("action", ("%s invokes /spawnentity, entityname=%q")
:format(name, entityname))
local player = core.get_player_by_name(name)
if player == nil then
core.log("error", "Unable to spawn entity, player is nil")
return false, "Unable to spawn entity, player is nil"
end
if p == "" then
p = player:getpos()
else
p = core.string_to_pos(p)
if p == nil then
return false, "Invalid parameters ('" .. param .. "')"
end
end
p.y = p.y + 1
core.add_entity(p, entityname)
return true, ("%q spawned."):format(entityname)
end,
})
core.register_chatcommand("pulverize", {
params = "",
description = "Destroy item in hand",
func = function(name, param)
local player = core.get_player_by_name(name)
if not player then
core.log("error", "Unable to pulverize, no player.")
return false, "Unable to pulverize, no player."
end
if player:get_wielded_item():is_empty() then
return false, "Unable to pulverize, no item in hand."
end
player:set_wielded_item(nil)
return true, "An item was pulverized."
end,
})
-- Key = player name
core.rollback_punch_callbacks = {}
core.register_on_punchnode(function(pos, node, puncher)
local name = puncher and puncher:get_player_name()
if name and core.rollback_punch_callbacks[name] then
core.rollback_punch_callbacks[name](pos, node, puncher)
core.rollback_punch_callbacks[name] = nil
end
end)
core.register_chatcommand("rollback_check", {
params = "[<range>] [<seconds>] [limit]",
description = "Check who last touched a node or a node near it"
.. " within the time specified by <seconds>. Default: range = 0,"
.. " seconds = 86400 = 24h, limit = 5",
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
return false, "Rollback functions are disabled."
end
local range, seconds, limit =
param:match("(%d+) *(%d*) *(%d*)")
range = tonumber(range) or 0
seconds = tonumber(seconds) or 86400
limit = tonumber(limit) or 5
if limit > 100 then
return false, "That limit is too high!"
end
core.rollback_punch_callbacks[name] = function(pos, node, puncher)
local name = puncher:get_player_name()
core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
local actions = core.rollback_get_node_actions(pos, range, seconds, limit)
if not actions then
core.chat_send_player(name, "Rollback functions are disabled")
return
end
local num_actions = #actions
if num_actions == 0 then
core.chat_send_player(name, "Nobody has touched"
.. " the specified location in "
.. seconds .. " seconds")
return
end
local time = os.time()
for i = num_actions, 1, -1 do
local action = actions[i]
core.chat_send_player(name,
("%s %s %s -> %s %d seconds ago.")
:format(
core.pos_to_string(action.pos),
action.actor,
action.oldnode.name,
action.newnode.name,
time - action.time))
end
end
return true, "Punch a node (range=" .. range .. ", seconds="
.. seconds .. "s, limit=" .. limit .. ")"
end,
})
core.register_chatcommand("rollback", {
params = "<player name> [<seconds>] | :<actor> [<seconds>]",
description = "Revert actions of a player. Default for <seconds> is 60",
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
return false, "Rollback functions are disabled."
end
local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
if not target_name then
local player_name = nil
player_name, seconds = string.match(param, "([^ ]+) *(%d*)")
if not player_name then
return false, "Invalid parameters. See /help rollback"
.. " and /help rollback_check."
end
target_name = "player:"..player_name
end
seconds = tonumber(seconds) or 60
core.chat_send_player(name, "Reverting actions of "
.. target_name .. " since "
.. seconds .. " seconds.")
local success, log = core.rollback_revert_actions_by(
target_name, seconds)
local response = ""
if #log > 100 then
response = "(log is too long to show)\n"
else
for _, line in pairs(log) do
response = response .. line .. "\n"
end
end
response = response .. "Reverting actions "
.. (success and "succeeded." or "FAILED.")
return success, response
end,
})
core.register_chatcommand("status", {
description = "Print server status",
func = function(name, param)
return true, core.get_server_status()
end,
})
core.register_chatcommand("time", {
params = "<0..23>:<0..59> | <0..24000>",
description = "Set time of day",
privs = {},
func = function(name, param)
if param == "" then
local current_time = math.floor(core.get_timeofday() * 1440)
local minutes = current_time % 60
local hour = (current_time - minutes) / 60
return true, ("Current time is %d:%02d"):format(hour, minutes)
end
local player_privs = core.get_player_privs(name)
if not player_privs.settime then
return false, "You don't have permission to run this command " ..
"(missing privilege: settime)."
end
local hour, minute = param:match("^(%d+):(%d+)$")
if not hour then
local new_time = tonumber(param)
if not new_time then
return false, "Invalid time."
end
-- Backward compatibility.
core.set_timeofday((new_time % 24000) / 24000)
core.log("action", name .. " sets time to " .. new_time)
return true, "Time of day changed."
end
hour = tonumber(hour)
minute = tonumber(minute)
if hour < 0 or hour > 23 then
return false, "Invalid hour (must be between 0 and 23 inclusive)."
elseif minute < 0 or minute > 59 then
return false, "Invalid minute (must be between 0 and 59 inclusive)."
end
core.set_timeofday((hour * 60 + minute) / 1440)
core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute))
return true, "Time of day changed."
end,
})
core.register_chatcommand("days", {
description = "Display day count",
func = function(name, param)
return true, "Current day is " .. core.get_day_count()
end
})
core.register_chatcommand("shutdown", {
description = "Shutdown server",
params = "[delay_in_seconds (non-negative number, or -1 to cancel)] [reconnect] [message]",
privs = {server=true},
func = function(name, param)
local delay, reconnect, message = param:match("([^ ][-]?[0-9]+)([^ ]+)(.*)")
message = message or ""
if delay ~= "" then
delay = tonumber(delay) or 0
else
delay = 0
core.log("action", name .. " shuts down server")
core.chat_send_all("*** Server shutting down (operator request).")
end
core.request_shutdown(message:trim(), core.is_yes(reconnect), delay)
end,
})
core.register_chatcommand("ban", {
params = "<name>",
description = "Ban IP of player",
privs = {ban=true},
func = function(name, param)
if param == "" then
return true, "Ban list: " .. core.get_ban_list()
end
if not core.get_player_by_name(param) then
return false, "No such player."
end
if not core.ban_player(param) then
return false, "Failed to ban player."
end
local desc = core.get_ban_description(param)
core.log("action", name .. " bans " .. desc .. ".")
return true, "Banned " .. desc .. "."
end,
})
core.register_chatcommand("unban", {
params = "<name/ip>",
description = "Remove IP ban",
privs = {ban=true},
func = function(name, param)
if not core.unban_player_or_ip(param) then
return false, "Failed to unban player/IP."
end
core.log("action", name .. " unbans " .. param)
return true, "Unbanned " .. param
end,
})
core.register_chatcommand("kick", {
params = "<name> [reason]",
description = "Kick a player",
privs = {kick=true},
func = function(name, param)
local tokick, reason = param:match("([^ ]+) (.+)")
tokick = tokick or param
if not core.kick_player(tokick, reason) then
return false, "Failed to kick player " .. tokick
end
local log_reason = ""
if reason then
log_reason = " with reason \"" .. reason .. "\""
end
core.log("action", name .. " kicks " .. tokick .. log_reason)
return true, "Kicked " .. tokick
end,
})
core.register_chatcommand("clearobjects", {
params = "[full|quick]",
description = "Clear all objects in world",
privs = {server=true},
func = function(name, param)
local options = {}
if param == "" or param == "full" then
options.mode = "full"
elseif param == "quick" then
options.mode = "quick"
else
return false, "Invalid usage, see /help clearobjects."
end
core.log("action", name .. " clears all objects ("
.. options.mode .. " mode).")
core.chat_send_all("Clearing all objects. This may take long."
.. " You may experience a timeout. (by "
.. name .. ")")
core.clear_objects(options)
core.log("action", "Object clearing done.")
core.chat_send_all("*** Cleared all objects.")
end,
})
core.register_chatcommand("msg", {
params = "<name> <message>",
description = "Send a private message",
privs = {shout=true},
func = function(name, param)
local sendto, message = param:match("^(%S+)%s(.+)$")
if not sendto then
return false, "Invalid usage, see /help msg."
end
if not core.get_player_by_name(sendto) then
return false, "The player " .. sendto
.. " is not online."
end
core.log("action", "PM from " .. name .. " to " .. sendto
.. ": " .. message)
core.chat_send_player(sendto, "PM from " .. name .. ": "
.. message)
return true, "Message sent."
end,
})
core.register_chatcommand("last-login", {
params = "[name]",
description = "Get the last login time of a player",
func = function(name, param)
if param == "" then
param = name
end
local pauth = core.get_auth_handler().get_auth(param)
if pauth and pauth.last_login then
-- Time in UTC, ISO 8601 format
return true, "Last login time was " ..
os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login)
end
return false, "Last login time is unknown"
end,
})
core.register_chatcommand("clearinv", {
params = "[name]",
description = "Clear the inventory of yourself or another player",
func = function(name, param)
local player
if param and param ~= "" and param ~= name then
if not core.check_player_privs(name, {server=true}) then
return false, "You don't have permission"
.. " to run this command (missing privilege: server)"
end
player = core.get_player_by_name(param)
core.chat_send_player(param, name.." cleared your inventory.")
else
player = core.get_player_by_name(name)
end
if player then
player:get_inventory():set_list("main", {})
player:get_inventory():set_list("craft", {})
player:get_inventory():set_list("craftpreview", {})
core.log("action", name.." clears "..player:get_player_name().."'s inventory")
return true, "Cleared "..player:get_player_name().."'s inventory."
else
return false, "Player must be online to clear inventory!"
end
end,
})

View File

@@ -0,0 +1,27 @@
-- Minetest: builtin/constants.lua
--
-- Constants values for use with the Lua API
--
-- mapnode.h
-- Built-in Content IDs (for use with VoxelManip API)
core.CONTENT_UNKNOWN = 125
core.CONTENT_AIR = 126
core.CONTENT_IGNORE = 127
-- emerge.h
-- Block emerge status constants (for use with core.emerge_area)
core.EMERGE_CANCELLED = 0
core.EMERGE_ERRORED = 1
core.EMERGE_FROM_MEMORY = 2
core.EMERGE_FROM_DISK = 3
core.EMERGE_GENERATED = 4
-- constants.h
-- Size of mapblocks in nodes
core.MAP_BLOCKSIZE = 16
-- light.h
-- Maximum value for node 'light_source' parameter
core.LIGHT_MAX = 14

View File

@@ -0,0 +1,72 @@
-- Minetest: builtin/deprecated.lua
--
-- Default material types
--
local function digprop_err()
core.log("deprecated", "The core.digprop_* functions are obsolete and need to be replaced by item groups.")
end
core.digprop_constanttime = digprop_err
core.digprop_stonelike = digprop_err
core.digprop_dirtlike = digprop_err
core.digprop_gravellike = digprop_err
core.digprop_woodlike = digprop_err
core.digprop_leaveslike = digprop_err
core.digprop_glasslike = digprop_err
function core.node_metadata_inventory_move_allow_all()
core.log("deprecated", "core.node_metadata_inventory_move_allow_all is obsolete and does nothing.")
end
function core.add_to_creative_inventory(itemstring)
core.log("deprecated", "core.add_to_creative_inventory: This function is deprecated and does nothing.")
end
--
-- EnvRef
--
core.env = {}
local envref_deprecation_message_printed = false
setmetatable(core.env, {
__index = function(table, key)
if not envref_deprecation_message_printed then
core.log("deprecated", "core.env:[...] is deprecated and should be replaced with core.[...]")
envref_deprecation_message_printed = true
end
local func = core[key]
if type(func) == "function" then
rawset(table, key, function(self, ...)
return func(...)
end)
else
rawset(table, key, nil)
end
return rawget(table, key)
end
})
function core.rollback_get_last_node_actor(pos, range, seconds)
return core.rollback_get_node_actions(pos, range, seconds, 1)[1]
end
--
-- core.setting_*
--
local settings = core.settings
local function setting_proxy(name)
return function(...)
core.log("deprecated", "WARNING: minetest.setting_* "..
"functions are deprecated. "..
"Use methods on the minetest.settings object.")
return settings[name](settings, ...)
end
end
core.setting_set = setting_proxy("set")
core.setting_get = setting_proxy("get")
core.setting_setbool = setting_proxy("set_bool")
core.setting_getbool = setting_proxy("get_bool")
core.setting_save = setting_proxy("write")

View File

@@ -0,0 +1,20 @@
-- Minetest: builtin/detached_inventory.lua
core.detached_inventories = {}
function core.create_detached_inventory(name, callbacks, player_name)
local stuff = {}
stuff.name = name
if callbacks then
stuff.allow_move = callbacks.allow_move
stuff.allow_put = callbacks.allow_put
stuff.allow_take = callbacks.allow_take
stuff.on_move = callbacks.on_move
stuff.on_put = callbacks.on_put
stuff.on_take = callbacks.on_take
end
stuff.mod_origin = core.get_current_modname() or "??"
core.detached_inventories[name] = stuff
return core.create_detached_inventory_raw(name, player_name)
end

331
builtin/game/falling.lua Normal file
View File

@@ -0,0 +1,331 @@
-- Minetest: builtin/item.lua
local builtin_shared = ...
--
-- Falling stuff
--
core.register_entity(":__builtin:falling_node", {
initial_properties = {
visual = "wielditem",
visual_size = {x = 0.667, y = 0.667},
textures = {},
physical = true,
is_visible = false,
collide_with_objects = false,
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
},
node = {},
meta = {},
set_node = function(self, node, meta)
self.node = node
self.meta = meta or {}
self.object:set_properties({
is_visible = true,
textures = {node.name},
})
end,
get_staticdata = function(self)
local ds = {
node = self.node,
meta = self.meta,
}
return core.serialize(ds)
end,
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})
local ds = core.deserialize(staticdata)
if ds and ds.node then
self:set_node(ds.node, ds.meta)
elseif ds then
self:set_node(ds)
elseif staticdata ~= "" then
self:set_node({name = staticdata})
end
end,
on_step = function(self, dtime)
-- Set gravity
local acceleration = self.object:getacceleration()
if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then
self.object:setacceleration({x = 0, y = -10, z = 0})
end
-- Turn to actual node when colliding with ground, or continue to move
local pos = self.object:getpos()
-- Position of bottom center point
local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z}
-- 'bcn' is nil for unloaded nodes
local bcn = core.get_node_or_nil(bcp)
-- Delete on contact with ignore at world edges
if bcn and bcn.name == "ignore" then
self.object:remove()
return
end
local bcd = bcn and core.registered_nodes[bcn.name]
if bcn and
(not bcd or bcd.walkable or
(core.get_item_group(self.node.name, "float") ~= 0 and
bcd.liquidtype ~= "none")) then
if bcd and bcd.leveled and
bcn.name == self.node.name then
local addlevel = self.node.level
if not addlevel or addlevel <= 0 then
addlevel = bcd.leveled
end
if core.add_node_level(bcp, addlevel) == 0 then
self.object:remove()
return
end
elseif bcd and bcd.buildable_to and
(core.get_item_group(self.node.name, "float") == 0 or
bcd.liquidtype == "none") then
core.remove_node(bcp)
return
end
local np = {x = bcp.x, y = bcp.y + 1, z = bcp.z}
-- Check what's here
local n2 = core.get_node(np)
local nd = core.registered_nodes[n2.name]
-- If it's not air or liquid, remove node and replace it with
-- it's drops
if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then
core.remove_node(np)
if nd and nd.buildable_to == false then
-- Add dropped items
local drops = core.get_node_drops(n2, "")
for _, dropped_item in pairs(drops) do
core.add_item(np, dropped_item)
end
end
-- Run script hook
for _, callback in pairs(core.registered_on_dignodes) do
callback(np, n2)
end
end
-- Create node and remove entity
if core.registered_nodes[self.node.name] then
core.add_node(np, self.node)
if self.meta then
local meta = core.get_meta(np)
meta:from_table(self.meta)
end
end
self.object:remove()
core.check_for_falling(np)
return
end
local vel = self.object:getvelocity()
if vector.equals(vel, {x = 0, y = 0, z = 0}) then
local npos = self.object:getpos()
self.object:setpos(vector.round(npos))
end
end
})
local function spawn_falling_node(p, node, meta)
local obj = core.add_entity(p, "__builtin:falling_node")
if obj then
obj:get_luaentity():set_node(node, meta)
end
end
function core.spawn_falling_node(pos)
local node = core.get_node(pos)
if node.name == "air" or node.name == "ignore" then
return false
end
local obj = core.add_entity(pos, "__builtin:falling_node")
if obj then
obj:get_luaentity():set_node(node)
core.remove_node(pos)
return true
end
return false
end
local function drop_attached_node(p)
local n = core.get_node(p)
core.remove_node(p)
for _, item in pairs(core.get_node_drops(n, "")) do
local pos = {
x = p.x + math.random()/2 - 0.25,
y = p.y + math.random()/2 - 0.25,
z = p.z + math.random()/2 - 0.25,
}
core.add_item(pos, item)
end
end
function builtin_shared.check_attached_node(p, n)
local def = core.registered_nodes[n.name]
local d = {x = 0, y = 0, z = 0}
if def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted" then
-- The fallback vector here is in case 'wallmounted to dir' is nil due
-- to voxelmanip placing a wallmounted node without resetting a
-- pre-existing param2 value that is out-of-range for wallmounted.
-- The fallback vector corresponds to param2 = 0.
d = core.wallmounted_to_dir(n.param2) or {x = 0, y = 1, z = 0}
else
d.y = -1
end
local p2 = vector.add(p, d)
local nn = core.get_node(p2).name
local def2 = core.registered_nodes[nn]
if def2 and not def2.walkable then
return false
end
return true
end
--
-- Some common functions
--
function core.check_single_for_falling(p)
local n = core.get_node(p)
if core.get_item_group(n.name, "falling_node") ~= 0 then
local p_bottom = {x = p.x, y = p.y - 1, z = p.z}
-- Only spawn falling node if node below is loaded
local n_bottom = core.get_node_or_nil(p_bottom)
local d_bottom = n_bottom and core.registered_nodes[n_bottom.name]
if d_bottom and
(core.get_item_group(n.name, "float") == 0 or
d_bottom.liquidtype == "none") and
(n.name ~= n_bottom.name or (d_bottom.leveled and
core.get_node_level(p_bottom) <
core.get_node_max_level(p_bottom))) and
(not d_bottom.walkable or d_bottom.buildable_to) then
n.level = core.get_node_level(p)
local meta = core.get_meta(p)
local metatable = {}
if meta ~= nil then
metatable = meta:to_table()
end
core.remove_node(p)
spawn_falling_node(p, n, metatable)
return true
end
end
if core.get_item_group(n.name, "attached_node") ~= 0 then
if not builtin_shared.check_attached_node(p, n) then
drop_attached_node(p)
return true
end
end
return false
end
-- This table is specifically ordered.
-- We don't walk diagonals, only our direct neighbors, and self.
-- Down first as likely case, but always before self. The same with sides.
-- Up must come last, so that things above self will also fall all at once.
local check_for_falling_neighbors = {
{x = -1, y = -1, z = 0},
{x = 1, y = -1, z = 0},
{x = 0, y = -1, z = -1},
{x = 0, y = -1, z = 1},
{x = 0, y = -1, z = 0},
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 0},
{x = 0, y = 1, z = 0},
}
function core.check_for_falling(p)
-- Round p to prevent falling entities to get stuck.
p = vector.round(p)
-- We make a stack, and manually maintain size for performance.
-- Stored in the stack, we will maintain tables with pos, and
-- last neighbor visited. This way, when we get back to each
-- node, we know which directions we have already walked, and
-- which direction is the next to walk.
local s = {}
local n = 0
-- The neighbor order we will visit from our table.
local v = 1
while true do
-- Push current pos onto the stack.
n = n + 1
s[n] = {p = p, v = v}
-- Select next node from neighbor list.
p = vector.add(p, check_for_falling_neighbors[v])
-- Now we check out the node. If it is in need of an update,
-- it will let us know in the return value (true = updated).
if not core.check_single_for_falling(p) then
-- If we don't need to "recurse" (walk) to it then pop
-- our previous pos off the stack and continue from there,
-- with the v value we were at when we last were at that
-- node
repeat
local pop = s[n]
p = pop.p
v = pop.v
s[n] = nil
n = n - 1
-- If there's nothing left on the stack, and no
-- more sides to walk to, we're done and can exit
if n == 0 and v == 11 then
return
end
until v < 11
-- The next round walk the next neighbor in list.
v = v + 1
else
-- If we did need to walk the neighbor, then
-- start walking it from the walk order start (1),
-- and not the order we just pushed up the stack.
v = 1
end
end
end
--
-- Global callbacks
--
local function on_placenode(p, node)
core.check_for_falling(p)
end
core.register_on_placenode(on_placenode)
local function on_dignode(p, node)
core.check_for_falling(p)
end
core.register_on_dignode(on_dignode)
local function on_punchnode(p, node)
core.check_for_falling(p)
end
core.register_on_punchnode(on_punchnode)
--
-- Globally exported functions
--
-- TODO remove this function after the 0.4.15 release
function nodeupdate(p)
core.log("deprecated", "nodeupdate: deprecated, please use core.check_for_falling instead")
core.check_for_falling(p)
end
-- TODO remove this function after the 0.4.15 release
function nodeupdate_single(p)
core.log("deprecated", "nodeupdate_single: deprecated, please use core.check_single_for_falling instead")
core.check_single_for_falling(p)
end

33
builtin/game/features.lua Normal file
View File

@@ -0,0 +1,33 @@
-- Minetest: builtin/features.lua
core.features = {
glasslike_framed = true,
nodebox_as_selectionbox = true,
chat_send_player_param3 = true,
get_all_craft_recipes_works = true,
use_texture_alpha = true,
no_legacy_abms = true,
texture_names_parens = true,
area_store_custom_ids = true,
add_entity_with_staticdata = true,
no_chat_message_prediction = true,
}
function core.has_feature(arg)
if type(arg) == "table" then
local missing_features = {}
local result = true
for ftr in pairs(arg) do
if not core.features[ftr] then
missing_features[ftr] = true
result = false
end
end
return result, missing_features
elseif type(arg) == "string" then
if not core.features[arg] then
return false, {[arg]=true}
end
return true, {}
end
end

View File

@@ -0,0 +1,100 @@
-- Prevent anyone else accessing those functions
local forceload_block = core.forceload_block
local forceload_free_block = core.forceload_free_block
core.forceload_block = nil
core.forceload_free_block = nil
local blocks_forceloaded
local blocks_temploaded = {}
local total_forceloaded = 0
local BLOCKSIZE = core.MAP_BLOCKSIZE
local function get_blockpos(pos)
return {
x = math.floor(pos.x/BLOCKSIZE),
y = math.floor(pos.y/BLOCKSIZE),
z = math.floor(pos.z/BLOCKSIZE)}
end
-- When we create/free a forceload, it's either transient or persistent. We want
-- to add to/remove from the table that corresponds to the type of forceload, but
-- we also need the other table because whether we forceload a block depends on
-- both tables.
-- This function returns the "primary" table we are adding to/removing from, and
-- the other table.
local function get_relevant_tables(transient)
if transient then
return blocks_temploaded, blocks_forceloaded
else
return blocks_forceloaded, blocks_temploaded
end
end
function core.forceload_block(pos, transient)
local blockpos = get_blockpos(pos)
local hash = core.hash_node_position(blockpos)
local relevant_table, other_table = get_relevant_tables(transient)
if relevant_table[hash] ~= nil then
relevant_table[hash] = relevant_table[hash] + 1
return true
elseif other_table[hash] ~= nil then
relevant_table[hash] = 1
else
if total_forceloaded >= (tonumber(core.settings:get("max_forceloaded_blocks")) or 16) then
return false
end
total_forceloaded = total_forceloaded+1
relevant_table[hash] = 1
forceload_block(blockpos)
return true
end
end
function core.forceload_free_block(pos, transient)
local blockpos = get_blockpos(pos)
local hash = core.hash_node_position(blockpos)
local relevant_table, other_table = get_relevant_tables(transient)
if relevant_table[hash] == nil then return end
if relevant_table[hash] > 1 then
relevant_table[hash] = relevant_table[hash] - 1
elseif other_table[hash] ~= nil then
relevant_table[hash] = nil
else
total_forceloaded = total_forceloaded-1
relevant_table[hash] = nil
forceload_free_block(blockpos)
end
end
-- Keep the forceloaded areas after restart
local wpath = core.get_worldpath()
local function read_file(filename)
local f = io.open(filename, "r")
if f==nil then return {} end
local t = f:read("*all")
f:close()
if t=="" or t==nil then return {} end
return core.deserialize(t) or {}
end
local function write_file(filename, table)
local f = io.open(filename, "w")
f:write(core.serialize(table))
f:close()
end
blocks_forceloaded = read_file(wpath.."/force_loaded.txt")
for _, __ in pairs(blocks_forceloaded) do
total_forceloaded = total_forceloaded + 1
end
core.after(5, function()
for hash, _ in pairs(blocks_forceloaded) do
local blockpos = core.get_position_from_hash(hash)
forceload_block(blockpos)
end
end)
core.register_on_shutdown(function()
write_file(wpath.."/force_loaded.txt", blocks_forceloaded)
end)

36
builtin/game/init.lua Normal file
View File

@@ -0,0 +1,36 @@
local scriptpath = core.get_builtin_path()..DIR_DELIM
local commonpath = scriptpath.."common"..DIR_DELIM
local gamepath = scriptpath.."game"..DIR_DELIM
-- Shared between builtin files, but
-- not exposed to outer context
local builtin_shared = {}
dofile(commonpath.."vector.lua")
dofile(gamepath.."constants.lua")
assert(loadfile(gamepath.."item.lua"))(builtin_shared)
dofile(gamepath.."register.lua")
if core.settings:get_bool("profiler.load") then
profiler = dofile(scriptpath.."profiler"..DIR_DELIM.."init.lua")
end
dofile(commonpath .. "after.lua")
dofile(gamepath.."item_entity.lua")
dofile(gamepath.."deprecated.lua")
dofile(gamepath.."misc.lua")
dofile(gamepath.."privileges.lua")
dofile(gamepath.."auth.lua")
dofile(commonpath .. "chatcommands.lua")
dofile(gamepath.."chatcommands.lua")
dofile(gamepath.."static_spawn.lua")
dofile(gamepath.."detached_inventory.lua")
assert(loadfile(gamepath.."falling.lua"))(builtin_shared)
dofile(gamepath.."features.lua")
dofile(gamepath.."voxelarea.lua")
dofile(gamepath.."forceloading.lua")
dofile(gamepath.."statbars.lua")
profiler = nil

757
builtin/game/item.lua Normal file
View File

@@ -0,0 +1,757 @@
-- Minetest: builtin/item.lua
local builtin_shared = ...
local function copy_pointed_thing(pointed_thing)
return {
type = pointed_thing.type,
above = vector.new(pointed_thing.above),
under = vector.new(pointed_thing.under),
ref = pointed_thing.ref,
}
end
--
-- Item definition helpers
--
function core.inventorycube(img1, img2, img3)
img2 = img2 or img1
img3 = img3 or img1
return "[inventorycube"
.. "{" .. img1:gsub("%^", "&")
.. "{" .. img2:gsub("%^", "&")
.. "{" .. img3:gsub("%^", "&")
end
function core.get_pointed_thing_position(pointed_thing, above)
if pointed_thing.type == "node" then
if above then
-- The position where a node would be placed
return pointed_thing.above
end
-- The position where a node would be dug
return pointed_thing.under
elseif pointed_thing.type == "object" then
return pointed_thing.ref and pointed_thing.ref:getpos()
end
end
function core.dir_to_facedir(dir, is6d)
--account for y if requested
if is6d and math.abs(dir.y) > math.abs(dir.x) and math.abs(dir.y) > math.abs(dir.z) then
--from above
if dir.y < 0 then
if math.abs(dir.x) > math.abs(dir.z) then
if dir.x < 0 then
return 19
else
return 13
end
else
if dir.z < 0 then
return 10
else
return 4
end
end
--from below
else
if math.abs(dir.x) > math.abs(dir.z) then
if dir.x < 0 then
return 15
else
return 17
end
else
if dir.z < 0 then
return 6
else
return 8
end
end
end
--otherwise, place horizontally
elseif math.abs(dir.x) > math.abs(dir.z) then
if dir.x < 0 then
return 3
else
return 1
end
else
if dir.z < 0 then
return 2
else
return 0
end
end
end
-- Table of possible dirs
local facedir_to_dir = {
{x= 0, y=0, z= 1},
{x= 1, y=0, z= 0},
{x= 0, y=0, z=-1},
{x=-1, y=0, z= 0},
{x= 0, y=-1, z= 0},
{x= 0, y=1, z= 0},
}
-- Mapping from facedir value to index in facedir_to_dir.
local facedir_to_dir_map = {
[0]=1, 2, 3, 4,
5, 2, 6, 4,
6, 2, 5, 4,
1, 5, 3, 6,
1, 6, 3, 5,
1, 4, 3, 2,
}
function core.facedir_to_dir(facedir)
return facedir_to_dir[facedir_to_dir_map[facedir % 32]]
end
function core.dir_to_wallmounted(dir)
if math.abs(dir.y) > math.max(math.abs(dir.x), math.abs(dir.z)) then
if dir.y < 0 then
return 1
else
return 0
end
elseif math.abs(dir.x) > math.abs(dir.z) then
if dir.x < 0 then
return 3
else
return 2
end
else
if dir.z < 0 then
return 5
else
return 4
end
end
end
-- table of dirs in wallmounted order
local wallmounted_to_dir = {
[0] = {x = 0, y = 1, z = 0},
{x = 0, y = -1, z = 0},
{x = 1, y = 0, z = 0},
{x = -1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z = -1},
}
function core.wallmounted_to_dir(wallmounted)
return wallmounted_to_dir[wallmounted % 8]
end
function core.dir_to_yaw(dir)
return -math.atan2(dir.x, dir.z)
end
function core.yaw_to_dir(yaw)
return {x = -math.sin(yaw), y = 0, z = math.cos(yaw)}
end
function core.is_colored_paramtype(ptype)
return (ptype == "color") or (ptype == "colorfacedir") or
(ptype == "colorwallmounted")
end
function core.strip_param2_color(param2, paramtype2)
if not core.is_colored_paramtype(paramtype2) then
return nil
end
if paramtype2 == "colorfacedir" then
param2 = math.floor(param2 / 32) * 32
elseif paramtype2 == "colorwallmounted" then
param2 = math.floor(param2 / 8) * 8
end
-- paramtype2 == "color" requires no modification.
return param2
end
function core.get_node_drops(node, toolname)
-- Compatibility, if node is string
local nodename = node
local param2 = 0
-- New format, if node is table
if (type(node) == "table") then
nodename = node.name
param2 = node.param2
end
local def = core.registered_nodes[nodename]
local drop = def and def.drop
local ptype = def and def.paramtype2
-- get color, if there is color (otherwise nil)
local palette_index = core.strip_param2_color(param2, ptype)
if drop == nil then
-- default drop
if palette_index then
local stack = ItemStack(nodename)
stack:get_meta():set_int("palette_index", palette_index)
return {stack:to_string()}
end
return {nodename}
elseif type(drop) == "string" then
-- itemstring drop
return {drop}
elseif drop.items == nil then
-- drop = {} to disable default drop
return {}
end
-- Extended drop table
local got_items = {}
local got_count = 0
local _, item, tool
for _, item in ipairs(drop.items) do
local good_rarity = true
local good_tool = true
if item.rarity ~= nil then
good_rarity = item.rarity < 1 or math.random(item.rarity) == 1
end
if item.tools ~= nil then
good_tool = false
end
if item.tools ~= nil and toolname then
for _, tool in ipairs(item.tools) do
if tool:sub(1, 1) == '~' then
good_tool = toolname:find(tool:sub(2)) ~= nil
else
good_tool = toolname == tool
end
if good_tool then
break
end
end
end
if good_rarity and good_tool then
got_count = got_count + 1
for _, add_item in ipairs(item.items) do
-- add color, if necessary
if item.inherit_color and palette_index then
local stack = ItemStack(add_item)
stack:get_meta():set_int("palette_index", palette_index)
add_item = stack:to_string()
end
got_items[#got_items+1] = add_item
end
if drop.max_items ~= nil and got_count == drop.max_items then
break
end
end
end
return got_items
end
local function user_name(user)
return user and user:get_player_name() or ""
end
local function is_protected(pos, name)
return core.is_protected(pos, name) and
not minetest.check_player_privs(name, "protection_bypass")
end
-- Returns a logging function. For empty names, does not log.
local function make_log(name)
return name ~= "" and core.log or function() end
end
function core.item_place_node(itemstack, placer, pointed_thing, param2,
prevent_after_place)
local def = itemstack:get_definition()
if def.type ~= "node" or pointed_thing.type ~= "node" then
return itemstack, false
end
local under = pointed_thing.under
local oldnode_under = core.get_node_or_nil(under)
local above = pointed_thing.above
local oldnode_above = core.get_node_or_nil(above)
local playername = user_name(placer)
local log = make_log(playername)
if not oldnode_under or not oldnode_above then
log("info", playername .. " tried to place"
.. " node in unloaded position " .. core.pos_to_string(above))
return itemstack, false
end
local olddef_under = core.registered_nodes[oldnode_under.name]
olddef_under = olddef_under or core.nodedef_default
local olddef_above = core.registered_nodes[oldnode_above.name]
olddef_above = olddef_above or core.nodedef_default
if not olddef_above.buildable_to and not olddef_under.buildable_to then
log("info", playername .. " tried to place"
.. " node in invalid position " .. core.pos_to_string(above)
.. ", replacing " .. oldnode_above.name)
return itemstack, false
end
-- Place above pointed node
local place_to = {x = above.x, y = above.y, z = above.z}
-- If node under is buildable_to, place into it instead (eg. snow)
if olddef_under.buildable_to then
log("info", "node under is buildable to")
place_to = {x = under.x, y = under.y, z = under.z}
end
if is_protected(place_to, playername) then
log("action", playername
.. " tried to place " .. def.name
.. " at protected position "
.. core.pos_to_string(place_to))
core.record_protection_violation(place_to, playername)
return itemstack
end
log("action", playername .. " places node "
.. def.name .. " at " .. core.pos_to_string(place_to))
local oldnode = core.get_node(place_to)
local newnode = {name = def.name, param1 = 0, param2 = param2 or 0}
-- Calculate direction for wall mounted stuff like torches and signs
if def.place_param2 ~= nil then
newnode.param2 = def.place_param2
elseif (def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted") and not param2 then
local dir = {
x = under.x - above.x,
y = under.y - above.y,
z = under.z - above.z
}
newnode.param2 = core.dir_to_wallmounted(dir)
-- Calculate the direction for furnaces and chests and stuff
elseif (def.paramtype2 == "facedir" or
def.paramtype2 == "colorfacedir") and not param2 then
local placer_pos = placer and placer:getpos()
if placer_pos then
local dir = {
x = above.x - placer_pos.x,
y = above.y - placer_pos.y,
z = above.z - placer_pos.z
}
newnode.param2 = core.dir_to_facedir(dir)
log("action", "facedir: " .. newnode.param2)
end
end
local metatable = itemstack:get_meta():to_table().fields
-- Transfer color information
if metatable.palette_index and not def.place_param2 then
local color_divisor = nil
if def.paramtype2 == "color" then
color_divisor = 1
elseif def.paramtype2 == "colorwallmounted" then
color_divisor = 8
elseif def.paramtype2 == "colorfacedir" then
color_divisor = 32
end
if color_divisor then
local color = math.floor(metatable.palette_index / color_divisor)
local other = newnode.param2 % color_divisor
newnode.param2 = color * color_divisor + other
end
end
-- Check if the node is attached and if it can be placed there
if core.get_item_group(def.name, "attached_node") ~= 0 and
not builtin_shared.check_attached_node(place_to, newnode) then
log("action", "attached node " .. def.name ..
" can not be placed at " .. core.pos_to_string(place_to))
return itemstack, false
end
-- Add node and update
core.add_node(place_to, newnode)
local take_item = true
-- Run callback
if def.after_place_node and not prevent_after_place then
-- Deepcopy place_to and pointed_thing because callback can modify it
local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
if def.after_place_node(place_to_copy, placer, itemstack,
pointed_thing_copy) then
take_item = false
end
end
-- Run script hook
for _, callback in ipairs(core.registered_on_placenodes) do
-- Deepcopy pos, node and pointed_thing because callback can modify them
local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
local newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2}
local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.param2}
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
if callback(place_to_copy, newnode_copy, placer, oldnode_copy, itemstack, pointed_thing_copy) then
take_item = false
end
end
if take_item then
itemstack:take_item()
end
return itemstack, true
end
function core.item_place_object(itemstack, placer, pointed_thing)
local pos = core.get_pointed_thing_position(pointed_thing, true)
if pos ~= nil then
local item = itemstack:take_item()
core.add_item(pos, item)
end
return itemstack
end
function core.item_place(itemstack, placer, pointed_thing, param2)
-- Call on_rightclick if the pointed node defines it
if pointed_thing.type == "node" and placer and
not placer:get_player_control().sneak then
local n = core.get_node(pointed_thing.under)
local nn = n.name
if core.registered_nodes[nn] and core.registered_nodes[nn].on_rightclick then
return core.registered_nodes[nn].on_rightclick(pointed_thing.under, n,
placer, itemstack, pointed_thing) or itemstack, false
end
end
if itemstack:get_definition().type == "node" then
return core.item_place_node(itemstack, placer, pointed_thing, param2)
end
return itemstack
end
function core.item_secondary_use(itemstack, placer)
return itemstack
end
function core.item_drop(itemstack, dropper, pos)
local dropper_is_player = dropper and dropper:is_player()
local p = table.copy(pos)
local cnt = itemstack:get_count()
if dropper_is_player then
p.y = p.y + 1.2
if dropper:get_player_control().sneak then
cnt = 1
end
end
local item = itemstack:take_item(cnt)
local obj = core.add_item(p, item)
if obj then
if dropper_is_player then
local dir = dropper:get_look_dir()
dir.x = dir.x * 2.9
dir.y = dir.y * 2.9 + 2
dir.z = dir.z * 2.9
obj:set_velocity(dir)
obj:get_luaentity().dropped_by = dropper:get_player_name()
end
return itemstack
end
-- If we reach this, adding the object to the
-- environment failed
end
function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
for _, callback in pairs(core.registered_on_item_eats) do
local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing)
if result then
return result
end
end
if itemstack:take_item() ~= nil then
user:set_hp(user:get_hp() + hp_change)
if replace_with_item then
if itemstack:is_empty() then
itemstack:add_item(replace_with_item)
else
local inv = user:get_inventory()
-- Check if inv is null, since non-players don't have one
if inv and inv:room_for_item("main", {name=replace_with_item}) then
inv:add_item("main", replace_with_item)
else
local pos = user:getpos()
pos.y = math.floor(pos.y + 0.5)
core.add_item(pos, replace_with_item)
end
end
end
end
return itemstack
end
function core.item_eat(hp_change, replace_with_item)
return function(itemstack, user, pointed_thing) -- closure
if user then
return core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
end
end
end
function core.node_punch(pos, node, puncher, pointed_thing)
-- Run script hook
for _, callback in ipairs(core.registered_on_punchnodes) do
-- Copy pos and node because callback can modify them
local pos_copy = vector.new(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
local pointed_thing_copy = pointed_thing and copy_pointed_thing(pointed_thing) or nil
callback(pos_copy, node_copy, puncher, pointed_thing_copy)
end
end
function core.handle_node_drops(pos, drops, digger)
-- Add dropped items to object's inventory
local inv = digger and digger:get_inventory()
local give_item
if inv then
give_item = function(item)
return inv:add_item("main", item)
end
else
give_item = function(item)
-- itemstring to ItemStack for left:is_empty()
return ItemStack(item)
end
end
for _, dropped_item in pairs(drops) do
local left = give_item(dropped_item)
if not left:is_empty() then
local p = {
x = pos.x + math.random()/2-0.25,
y = pos.y + math.random()/2-0.25,
z = pos.z + math.random()/2-0.25,
}
core.add_item(p, left)
end
end
end
function core.node_dig(pos, node, digger)
local diggername = user_name(digger)
local log = make_log(diggername)
local def = core.registered_nodes[node.name]
if def and (not def.diggable or
(def.can_dig and not def.can_dig(pos, digger))) then
log("info", diggername .. " tried to dig "
.. node.name .. " which is not diggable "
.. core.pos_to_string(pos))
return
end
if is_protected(pos, diggername) then
log("action", diggername
.. " tried to dig " .. node.name
.. " at protected position "
.. core.pos_to_string(pos))
core.record_protection_violation(pos, diggername)
return
end
log('action', diggername .. " digs "
.. node.name .. " at " .. core.pos_to_string(pos))
local wielded = digger and digger:get_wielded_item()
local drops = core.get_node_drops(node, wielded and wielded:get_name())
if wielded then
local wdef = wielded:get_definition()
local tp = wielded:get_tool_capabilities()
local dp = core.get_dig_params(def and def.groups, tp)
if wdef and wdef.after_use then
wielded = wdef.after_use(wielded, digger, node, dp) or wielded
else
-- Wear out tool
if not core.settings:get_bool("creative_mode") then
wielded:add_wear(dp.wear)
if wielded:get_count() == 0 and wdef.sound and wdef.sound.breaks then
core.sound_play(wdef.sound.breaks, {pos = pos, gain = 0.5})
end
end
end
digger:set_wielded_item(wielded)
end
-- Handle drops
core.handle_node_drops(pos, drops, digger)
local oldmetadata = nil
if def and def.after_dig_node then
oldmetadata = core.get_meta(pos):to_table()
end
-- Remove node and update
core.remove_node(pos)
-- Run callback
if def and def.after_dig_node then
-- Copy pos and node because callback can modify them
local pos_copy = {x=pos.x, y=pos.y, z=pos.z}
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
def.after_dig_node(pos_copy, node_copy, oldmetadata, digger)
end
-- Run script hook
local _, callback
for _, callback in ipairs(core.registered_on_dignodes) do
local origin = core.callback_origins[callback]
if origin then
core.set_last_run_mod(origin.mod)
--print("Running " .. tostring(callback) ..
-- " (a " .. origin.name .. " callback in " .. origin.mod .. ")")
else
--print("No data associated with callback")
end
-- Copy pos and node because callback can modify them
local pos_copy = {x=pos.x, y=pos.y, z=pos.z}
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
callback(pos_copy, node_copy, digger)
end
end
-- This is used to allow mods to redefine core.item_place and so on
-- NOTE: This is not the preferred way. Preferred way is to provide enough
-- callbacks to not require redefining global functions. -celeron55
local function redef_wrapper(table, name)
return function(...)
return table[name](...)
end
end
--
-- Item definition defaults
--
core.nodedef_default = {
-- Item properties
type="node",
-- name intentionally not defined here
description = "",
groups = {},
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
stack_max = 99,
usable = false,
liquids_pointable = false,
tool_capabilities = nil,
node_placement_prediction = nil,
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'), -- core.item_place
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
on_use = nil,
can_dig = nil,
on_punch = redef_wrapper(core, 'node_punch'), -- core.node_punch
on_rightclick = nil,
on_dig = redef_wrapper(core, 'node_dig'), -- core.node_dig
on_receive_fields = nil,
on_metadata_inventory_move = core.node_metadata_inventory_move_allow_all,
on_metadata_inventory_offer = core.node_metadata_inventory_offer_allow_all,
on_metadata_inventory_take = core.node_metadata_inventory_take_allow_all,
-- Node properties
drawtype = "normal",
visual_scale = 1.0,
-- Don't define these because otherwise the old tile_images and
-- special_materials wouldn't be read
--tiles ={""},
--special_tiles = {
-- {name="", backface_culling=true},
-- {name="", backface_culling=true},
--},
alpha = 255,
post_effect_color = {a=0, r=0, g=0, b=0},
paramtype = "none",
paramtype2 = "none",
is_ground_content = true,
sunlight_propagates = false,
walkable = true,
pointable = true,
diggable = true,
climbable = false,
buildable_to = false,
floodable = false,
liquidtype = "none",
liquid_alternative_flowing = "",
liquid_alternative_source = "",
liquid_viscosity = 0,
drowning = 0,
light_source = 0,
damage_per_second = 0,
selection_box = {type="regular"},
legacy_facedir_simple = false,
legacy_wallmounted = false,
}
core.craftitemdef_default = {
type="craft",
-- name intentionally not defined here
description = "",
groups = {},
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
stack_max = 99,
liquids_pointable = false,
tool_capabilities = nil,
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'), -- core.item_place
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_use = nil,
}
core.tooldef_default = {
type="tool",
-- name intentionally not defined here
description = "",
groups = {},
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
stack_max = 1,
liquids_pointable = false,
tool_capabilities = nil,
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'), -- core.item_place
on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_drop = redef_wrapper(core, 'item_drop'), -- core.item_drop
on_use = nil,
}
core.noneitemdef_default = { -- This is used for the hand and unknown items
type="none",
-- name intentionally not defined here
description = "",
groups = {},
inventory_image = "",
wield_image = "",
wield_scale = {x=1,y=1,z=1},
stack_max = 99,
liquids_pointable = false,
tool_capabilities = nil,
-- Interaction callbacks
on_place = redef_wrapper(core, 'item_place'),
on_secondary_use = redef_wrapper(core, 'item_secondary_use'),
on_drop = nil,
on_use = nil,
}

View File

@@ -0,0 +1,228 @@
-- Minetest: builtin/item_entity.lua
function core.spawn_item(pos, item)
-- Take item in any format
local stack = ItemStack(item)
local obj = core.add_entity(pos, "__builtin:item")
-- Don't use obj if it couldn't be added to the map.
if obj then
obj:get_luaentity():set_item(stack:to_string())
end
return obj
end
-- If item_entity_ttl is not set, enity will have default life time
-- Setting it to -1 disables the feature
local time_to_live = tonumber(core.settings:get("item_entity_ttl"))
if not time_to_live then
time_to_live = 900
end
core.register_entity(":__builtin:item", {
initial_properties = {
hp_max = 1,
physical = true,
collide_with_objects = false,
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
visual = "wielditem",
visual_size = {x = 0.4, y = 0.4},
textures = {""},
spritediv = {x = 1, y = 1},
initial_sprite_basepos = {x = 0, y = 0},
is_visible = false,
},
itemstring = '',
physical_state = true,
age = 0,
set_item = function(self, itemstring)
self.itemstring = itemstring
local stack = ItemStack(itemstring)
local count = stack:get_count()
local max_count = stack:get_stack_max()
if count > max_count then
count = max_count
self.itemstring = stack:get_name().." "..max_count
end
local s = 0.2 + 0.1 * (count / max_count)
local c = s
local itemtable = stack:to_table()
local itemname = nil
if itemtable then
itemname = stack:to_table().name
end
-- Backwards compatibility: old clients use the texture
-- to get the type of the item
local item_texture = nil
local item_type = ""
if core.registered_items[itemname] then
item_texture = core.registered_items[itemname].inventory_image
item_type = core.registered_items[itemname].type
end
local prop = {
is_visible = true,
visual = "wielditem",
textures = {itemname},
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c},
automatic_rotate = math.pi * 0.5,
wield_item = itemstring,
}
self.object:set_properties(prop)
end,
get_staticdata = function(self)
return core.serialize({
itemstring = self.itemstring,
always_collect = self.always_collect,
age = self.age,
dropped_by = self.dropped_by
})
end,
on_activate = function(self, staticdata, dtime_s)
if string.sub(staticdata, 1, string.len("return")) == "return" then
local data = core.deserialize(staticdata)
if data and type(data) == "table" then
self.itemstring = data.itemstring
self.always_collect = data.always_collect
if data.age then
self.age = data.age + dtime_s
else
self.age = dtime_s
end
self.dropped_by = data.dropped_by
end
else
self.itemstring = staticdata
end
self.object:set_armor_groups({immortal = 1})
self.object:setvelocity({x = 0, y = 2, z = 0})
self.object:setacceleration({x = 0, y = -10, z = 0})
self:set_item(self.itemstring)
end,
-- moves items from this stack to an other stack
try_merge_with = function(self, own_stack, object, obj)
-- other item's stack
local stack = ItemStack(obj.itemstring)
-- only merge if items are the same
if own_stack:get_name() == stack:get_name() and
own_stack:get_meta() == stack:get_meta() and
own_stack:get_wear() == stack:get_wear() and
stack:get_free_space() > 0 then
local overflow = false
local count = stack:get_count() + own_stack:get_count()
local max_count = stack:get_stack_max()
if count > max_count then
overflow = true
stack:set_count(max_count)
count = count - max_count
own_stack:set_count(count)
else
self.itemstring = ''
stack:set_count(count)
end
local pos = object:getpos()
pos.y = pos.y + (count - stack:get_count()) / max_count * 0.15
object:moveto(pos, false)
local s, c
if not overflow then
obj.itemstring = stack:to_string()
s = 0.2 + 0.1 * (count / max_count)
c = s
object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c},
wield_item = obj.itemstring
})
self.object:remove()
-- merging succeeded
return true
else
s = 0.4
c = 0.3
obj.itemstring = stack:to_string()
object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c},
wield_item = obj.itemstring
})
s = 0.2 + 0.1 * (count / max_count)
c = s
self.itemstring = own_stack:to_string()
self.object:set_properties({
visual_size = {x = s, y = s},
collisionbox = {-c, -c, -c, c, c, c},
wield_item = self.itemstring
})
end
end
-- merging didn't succeed
return false
end,
on_step = function(self, dtime)
self.age = self.age + dtime
if time_to_live > 0 and self.age > time_to_live then
self.itemstring = ''
self.object:remove()
return
end
local p = self.object:getpos()
p.y = p.y - 0.5
local node = core.get_node_or_nil(p)
-- Delete in 'ignore' nodes
if node and node.name == "ignore" then
self.itemstring = ""
self.object:remove()
return
end
-- If node is nil (unloaded area), or node is not registered, or node is
-- walkably solid and item is resting on nodebox
local v = self.object:getvelocity()
if not node or not core.registered_nodes[node.name] or
core.registered_nodes[node.name].walkable and v.y == 0 then
if self.physical_state then
local own_stack = ItemStack(self.object:get_luaentity().itemstring)
-- Merge with close entities of the same item
for _, object in ipairs(core.get_objects_inside_radius(p, 0.8)) do
local obj = object:get_luaentity()
if obj and obj.name == "__builtin:item"
and obj.physical_state == false then
if self:try_merge_with(own_stack, object, obj) then
return
end
end
end
self.object:setvelocity({x = 0, y = 0, z = 0})
self.object:setacceleration({x = 0, y = 0, z = 0})
self.physical_state = false
self.object:set_properties({physical = false})
end
else
if not self.physical_state then
self.object:setvelocity({x = 0, y = 0, z = 0})
self.object:setacceleration({x = 0, y = -10, z = 0})
self.physical_state = true
self.object:set_properties({physical = true})
end
end
end,
on_punch = function(self, hitter)
local inv = hitter:get_inventory()
if inv and self.itemstring ~= '' then
local left = inv:add_item("main", self.itemstring)
if left and not left:is_empty() then
self.itemstring = left:to_string()
return
end
end
self.itemstring = ''
self.object:remove()
end,
})

189
builtin/game/misc.lua Normal file
View File

@@ -0,0 +1,189 @@
-- Minetest: builtin/misc.lua
--
-- Misc. API functions
--
function core.check_player_privs(name, ...)
if core.is_player(name) then
name = name:get_player_name()
elseif type(name) ~= "string" then
error("core.check_player_privs expects a player or playername as " ..
"argument.", 2)
end
local requested_privs = {...}
local player_privs = core.get_player_privs(name)
local missing_privileges = {}
if type(requested_privs[1]) == "table" then
-- We were provided with a table like { privA = true, privB = true }.
for priv, value in pairs(requested_privs[1]) do
if value and not player_privs[priv] then
missing_privileges[#missing_privileges + 1] = priv
end
end
else
-- Only a list, we can process it directly.
for key, priv in pairs(requested_privs) do
if not player_privs[priv] then
missing_privileges[#missing_privileges + 1] = priv
end
end
end
if #missing_privileges > 0 then
return false, missing_privileges
end
return true, ""
end
local player_list = {}
core.register_on_joinplayer(function(player)
local player_name = player:get_player_name()
player_list[player_name] = player
if not minetest.is_singleplayer() then
core.chat_send_all("*** " .. player_name .. " joined the game.")
end
end)
core.register_on_leaveplayer(function(player, timed_out)
local player_name = player:get_player_name()
player_list[player_name] = nil
local announcement = "*** " .. player_name .. " left the game."
if timed_out then
announcement = announcement .. " (timed out)"
end
core.chat_send_all(announcement)
end)
function core.get_connected_players()
local temp_table = {}
for index, value in pairs(player_list) do
if value:is_player_connected() then
temp_table[#temp_table + 1] = value
end
end
return temp_table
end
function core.is_player(player)
-- a table being a player is also supported because it quacks sufficiently
-- like a player if it has the is_player function
local t = type(player)
return (t == "userdata" or t == "table") and
type(player.is_player) == "function" and player:is_player()
end
function minetest.player_exists(name)
return minetest.get_auth_handler().get_auth(name) ~= nil
end
-- Returns two position vectors representing a box of `radius` in each
-- direction centered around the player corresponding to `player_name`
function core.get_player_radius_area(player_name, radius)
local player = core.get_player_by_name(player_name)
if player == nil then
return nil
end
local p1 = player:getpos()
local p2 = p1
if radius then
p1 = vector.subtract(p1, radius)
p2 = vector.add(p2, radius)
end
return p1, p2
end
function core.hash_node_position(pos)
return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768
end
function core.get_position_from_hash(hash)
local pos = {}
pos.x = (hash%65536) - 32768
hash = math.floor(hash/65536)
pos.y = (hash%65536) - 32768
hash = math.floor(hash/65536)
pos.z = (hash%65536) - 32768
return pos
end
function core.get_item_group(name, group)
if not core.registered_items[name] or not
core.registered_items[name].groups[group] then
return 0
end
return core.registered_items[name].groups[group]
end
function core.get_node_group(name, group)
core.log("deprecated", "Deprecated usage of get_node_group, use get_item_group instead")
return core.get_item_group(name, group)
end
function core.setting_get_pos(name)
local value = core.settings:get(name)
if not value then
return nil
end
return core.string_to_pos(value)
end
-- To be overriden by protection mods
function core.is_protected(pos, name)
return false
end
function core.record_protection_violation(pos, name)
for _, func in pairs(core.registered_on_protection_violation) do
func(pos, name)
end
end
local raillike_ids = {}
local raillike_cur_id = 0
function core.raillike_group(name)
local id = raillike_ids[name]
if not id then
raillike_cur_id = raillike_cur_id + 1
raillike_ids[name] = raillike_cur_id
id = raillike_cur_id
end
return id
end
-- HTTP callback interface
function core.http_add_fetch(httpenv)
httpenv.fetch = function(req, callback)
local handle = httpenv.fetch_async(req)
local function update_http_status()
local res = httpenv.fetch_async_get(handle)
if res.completed then
callback(res)
else
core.after(0, update_http_status)
end
end
core.after(0, update_http_status)
end
return httpenv
end
function core.close_formspec(player_name, formname)
return minetest.show_formspec(player_name, formname, "")
end
function core.cancel_shutdown_requests()
core.request_shutdown("", false, -1)
end

View File

@@ -0,0 +1,92 @@
-- Minetest: builtin/privileges.lua
--
-- Privileges
--
core.registered_privileges = {}
function core.register_privilege(name, param)
local function fill_defaults(def)
if def.give_to_singleplayer == nil then
def.give_to_singleplayer = true
end
if def.description == nil then
def.description = "(no description)"
end
end
local def = {}
if type(param) == "table" then
def = param
else
def = {description = param}
end
fill_defaults(def)
core.registered_privileges[name] = def
end
core.register_privilege("interact", "Can interact with things and modify the world")
core.register_privilege("shout", "Can speak in chat")
core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
core.register_privilege("privs", "Can modify privileges")
core.register_privilege("teleport", {
description = "Can use /teleport command",
give_to_singleplayer = false,
})
core.register_privilege("bring", {
description = "Can teleport other players",
give_to_singleplayer = false,
})
core.register_privilege("settime", {
description = "Can use /time",
give_to_singleplayer = false,
})
core.register_privilege("server", {
description = "Can do server maintenance stuff",
give_to_singleplayer = false,
})
core.register_privilege("protection_bypass", {
description = "Can bypass node protection in the world",
give_to_singleplayer = false,
})
core.register_privilege("ban", {
description = "Can ban and unban players",
give_to_singleplayer = false,
})
core.register_privilege("kick", {
description = "Can kick players",
give_to_singleplayer = false,
})
core.register_privilege("give", {
description = "Can use /give and /giveme",
give_to_singleplayer = false,
})
core.register_privilege("password", {
description = "Can use /setpassword and /clearpassword",
give_to_singleplayer = false,
})
core.register_privilege("fly", {
description = "Can fly using the free_move mode",
give_to_singleplayer = false,
})
core.register_privilege("fast", {
description = "Can walk fast using the fast_move mode",
give_to_singleplayer = false,
})
core.register_privilege("noclip", {
description = "Can fly through walls",
give_to_singleplayer = false,
})
core.register_privilege("rollback", {
description = "Can use the rollback functionality",
give_to_singleplayer = false,
})
core.register_privilege("zoom", {
description = "Can zoom the camera",
give_to_singleplayer = false,
})
core.register_privilege("debug", {
description = "Allows enabling various debug options that may affect gameplay",
give_to_singleplayer = false,
})

570
builtin/game/register.lua Normal file
View File

@@ -0,0 +1,570 @@
-- Minetest: builtin/misc_register.lua
--
-- Make raw registration functions inaccessible to anyone except this file
--
local register_item_raw = core.register_item_raw
core.register_item_raw = nil
local unregister_item_raw = core.unregister_item_raw
core.unregister_item_raw = nil
local register_alias_raw = core.register_alias_raw
core.register_alias_raw = nil
--
-- Item / entity / ABM / LBM registration functions
--
core.registered_abms = {}
core.registered_lbms = {}
core.registered_entities = {}
core.registered_items = {}
core.registered_nodes = {}
core.registered_craftitems = {}
core.registered_tools = {}
core.registered_aliases = {}
-- For tables that are indexed by item name:
-- If table[X] does not exist, default to table[core.registered_aliases[X]]
local alias_metatable = {
__index = function(t, name)
return rawget(t, core.registered_aliases[name])
end
}
setmetatable(core.registered_items, alias_metatable)
setmetatable(core.registered_nodes, alias_metatable)
setmetatable(core.registered_craftitems, alias_metatable)
setmetatable(core.registered_tools, alias_metatable)
-- These item names may not be used because they would interfere
-- with legacy itemstrings
local forbidden_item_names = {
MaterialItem = true,
MaterialItem2 = true,
MaterialItem3 = true,
NodeItem = true,
node = true,
CraftItem = true,
craft = true,
MBOItem = true,
ToolItem = true,
tool = true,
}
local function check_modname_prefix(name)
if name:sub(1,1) == ":" then
-- If the name starts with a colon, we can skip the modname prefix
-- mechanism.
return name:sub(2)
else
-- Enforce that the name starts with the correct mod name.
local expected_prefix = core.get_current_modname() .. ":"
if name:sub(1, #expected_prefix) ~= expected_prefix then
error("Name " .. name .. " does not follow naming conventions: " ..
"\"" .. expected_prefix .. "\" or \":\" prefix required")
end
-- Enforce that the name only contains letters, numbers and underscores.
local subname = name:sub(#expected_prefix+1)
if subname:find("[^%w_]") then
error("Name " .. name .. " does not follow naming conventions: " ..
"contains unallowed characters")
end
return name
end
end
function core.register_abm(spec)
-- Add to core.registered_abms
core.registered_abms[#core.registered_abms + 1] = spec
spec.mod_origin = core.get_current_modname() or "??"
end
function core.register_lbm(spec)
-- Add to core.registered_lbms
check_modname_prefix(spec.name)
core.registered_lbms[#core.registered_lbms + 1] = spec
spec.mod_origin = core.get_current_modname() or "??"
end
function core.register_entity(name, prototype)
-- Check name
if name == nil then
error("Unable to register entity: Name is nil")
end
name = check_modname_prefix(tostring(name))
prototype.name = name
prototype.__index = prototype -- so that it can be used as a metatable
-- Add to core.registered_entities
core.registered_entities[name] = prototype
prototype.mod_origin = core.get_current_modname() or "??"
end
function core.register_item(name, itemdef)
-- Check name
if name == nil then
error("Unable to register item: Name is nil")
end
name = check_modname_prefix(tostring(name))
if forbidden_item_names[name] then
error("Unable to register item: Name is forbidden: " .. name)
end
itemdef.name = name
local is_overriding = core.registered_items[name]
-- Apply defaults and add to registered_* table
if itemdef.type == "node" then
-- Use the nodebox as selection box if it's not set manually
if itemdef.drawtype == "nodebox" and not itemdef.selection_box then
itemdef.selection_box = itemdef.node_box
elseif itemdef.drawtype == "fencelike" and not itemdef.selection_box then
itemdef.selection_box = {
type = "fixed",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
}
end
if itemdef.light_source and itemdef.light_source > core.LIGHT_MAX then
itemdef.light_source = core.LIGHT_MAX
core.log("warning", "Node 'light_source' value exceeds maximum," ..
" limiting to maximum: " ..name)
end
setmetatable(itemdef, {__index = core.nodedef_default})
core.registered_nodes[itemdef.name] = itemdef
elseif itemdef.type == "craft" then
setmetatable(itemdef, {__index = core.craftitemdef_default})
core.registered_craftitems[itemdef.name] = itemdef
elseif itemdef.type == "tool" then
setmetatable(itemdef, {__index = core.tooldef_default})
core.registered_tools[itemdef.name] = itemdef
elseif itemdef.type == "none" then
setmetatable(itemdef, {__index = core.noneitemdef_default})
else
error("Unable to register item: Type is invalid: " .. dump(itemdef))
end
-- Flowing liquid uses param2
if itemdef.type == "node" and itemdef.liquidtype == "flowing" then
itemdef.paramtype2 = "flowingliquid"
end
-- BEGIN Legacy stuff
if itemdef.cookresult_itemstring ~= nil and itemdef.cookresult_itemstring ~= "" then
core.register_craft({
type="cooking",
output=itemdef.cookresult_itemstring,
recipe=itemdef.name,
cooktime=itemdef.furnace_cooktime
})
end
if itemdef.furnace_burntime ~= nil and itemdef.furnace_burntime >= 0 then
core.register_craft({
type="fuel",
recipe=itemdef.name,
burntime=itemdef.furnace_burntime
})
end
-- END Legacy stuff
itemdef.mod_origin = core.get_current_modname() or "??"
-- Disable all further modifications
getmetatable(itemdef).__newindex = {}
--core.log("Registering item: " .. itemdef.name)
core.registered_items[itemdef.name] = itemdef
core.registered_aliases[itemdef.name] = nil
-- Used to allow builtin to register ignore to registered_items
if name ~= "ignore" then
register_item_raw(itemdef)
elseif is_overriding then
core.log("warning", "Attempted redefinition of \"ignore\"")
end
end
function core.unregister_item(name)
if not core.registered_items[name] then
core.log("warning", "Not unregistering item " ..name..
" because it doesn't exist.")
return
end
-- Erase from registered_* table
local type = core.registered_items[name].type
if type == "node" then
core.registered_nodes[name] = nil
elseif type == "craft" then
core.registered_craftitems[name] = nil
elseif type == "tool" then
core.registered_tools[name] = nil
end
core.registered_items[name] = nil
unregister_item_raw(name)
end
function core.register_node(name, nodedef)
nodedef.type = "node"
core.register_item(name, nodedef)
end
function core.register_craftitem(name, craftitemdef)
craftitemdef.type = "craft"
-- BEGIN Legacy stuff
if craftitemdef.inventory_image == nil and craftitemdef.image ~= nil then
craftitemdef.inventory_image = craftitemdef.image
end
-- END Legacy stuff
core.register_item(name, craftitemdef)
end
function core.register_tool(name, tooldef)
tooldef.type = "tool"
tooldef.stack_max = 1
-- BEGIN Legacy stuff
if tooldef.inventory_image == nil and tooldef.image ~= nil then
tooldef.inventory_image = tooldef.image
end
if tooldef.tool_capabilities == nil and
(tooldef.full_punch_interval ~= nil or
tooldef.basetime ~= nil or
tooldef.dt_weight ~= nil or
tooldef.dt_crackiness ~= nil or
tooldef.dt_crumbliness ~= nil or
tooldef.dt_cuttability ~= nil or
tooldef.basedurability ~= nil or
tooldef.dd_weight ~= nil or
tooldef.dd_crackiness ~= nil or
tooldef.dd_crumbliness ~= nil or
tooldef.dd_cuttability ~= nil) then
tooldef.tool_capabilities = {
full_punch_interval = tooldef.full_punch_interval,
basetime = tooldef.basetime,
dt_weight = tooldef.dt_weight,
dt_crackiness = tooldef.dt_crackiness,
dt_crumbliness = tooldef.dt_crumbliness,
dt_cuttability = tooldef.dt_cuttability,
basedurability = tooldef.basedurability,
dd_weight = tooldef.dd_weight,
dd_crackiness = tooldef.dd_crackiness,
dd_crumbliness = tooldef.dd_crumbliness,
dd_cuttability = tooldef.dd_cuttability,
}
end
-- END Legacy stuff
core.register_item(name, tooldef)
end
function core.register_alias(name, convert_to)
if forbidden_item_names[name] then
error("Unable to register alias: Name is forbidden: " .. name)
end
if core.registered_items[name] ~= nil then
core.log("warning", "Not registering alias, item with same name" ..
" is already defined: " .. name .. " -> " .. convert_to)
else
--core.log("Registering alias: " .. name .. " -> " .. convert_to)
core.registered_aliases[name] = convert_to
register_alias_raw(name, convert_to)
end
end
function core.register_alias_force(name, convert_to)
if forbidden_item_names[name] then
error("Unable to register alias: Name is forbidden: " .. name)
end
if core.registered_items[name] ~= nil then
core.unregister_item(name)
core.log("info", "Removed item " ..name..
" while attempting to force add an alias")
end
--core.log("Registering alias: " .. name .. " -> " .. convert_to)
core.registered_aliases[name] = convert_to
register_alias_raw(name, convert_to)
end
function core.on_craft(itemstack, player, old_craft_list, craft_inv)
for _, func in ipairs(core.registered_on_crafts) do
itemstack = func(itemstack, player, old_craft_list, craft_inv) or itemstack
end
return itemstack
end
function core.craft_predict(itemstack, player, old_craft_list, craft_inv)
for _, func in ipairs(core.registered_craft_predicts) do
itemstack = func(itemstack, player, old_craft_list, craft_inv) or itemstack
end
return itemstack
end
-- Alias the forbidden item names to "" so they can't be
-- created via itemstrings (e.g. /give)
local name
for name in pairs(forbidden_item_names) do
core.registered_aliases[name] = ""
register_alias_raw(name, "")
end
-- Deprecated:
-- Aliases for core.register_alias (how ironic...)
--core.alias_node = core.register_alias
--core.alias_tool = core.register_alias
--core.alias_craftitem = core.register_alias
--
-- Built-in node definitions. Also defined in C.
--
core.register_item(":unknown", {
type = "none",
description = "Unknown Item",
inventory_image = "unknown_item.png",
on_place = core.item_place,
on_secondary_use = core.item_secondary_use,
on_drop = core.item_drop,
groups = {not_in_creative_inventory=1},
diggable = true,
})
core.register_node(":air", {
description = "Air (you hacker you!)",
inventory_image = "air.png",
wield_image = "air.png",
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
floodable = true,
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
})
core.register_node(":ignore", {
description = "Ignore (you hacker you!)",
inventory_image = "ignore.png",
wield_image = "ignore.png",
drawtype = "airlike",
paramtype = "none",
sunlight_propagates = false,
walkable = false,
pointable = false,
diggable = false,
buildable_to = true, -- A way to remove accidentally placed ignores
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
})
-- The hand (bare definition)
core.register_item(":", {
type = "none",
groups = {not_in_creative_inventory=1},
})
function core.override_item(name, redefinition)
if redefinition.name ~= nil then
error("Attempt to redefine name of "..name.." to "..dump(redefinition.name), 2)
end
if redefinition.type ~= nil then
error("Attempt to redefine type of "..name.." to "..dump(redefinition.type), 2)
end
local item = core.registered_items[name]
if not item then
error("Attempt to override non-existent item "..name, 2)
end
for k, v in pairs(redefinition) do
rawset(item, k, v)
end
register_item_raw(item)
end
core.callback_origins = {}
function core.run_callbacks(callbacks, mode, ...)
assert(type(callbacks) == "table")
local cb_len = #callbacks
if cb_len == 0 then
if mode == 2 or mode == 3 then
return true
elseif mode == 4 or mode == 5 then
return false
end
end
local ret = nil
for i = 1, cb_len do
local origin = core.callback_origins[callbacks[i]]
if origin then
core.set_last_run_mod(origin.mod)
--print("Running " .. tostring(callbacks[i]) ..
-- " (a " .. origin.name .. " callback in " .. origin.mod .. ")")
else
--print("No data associated with callback")
end
local cb_ret = callbacks[i](...)
if mode == 0 and i == 1 then
ret = cb_ret
elseif mode == 1 and i == cb_len then
ret = cb_ret
elseif mode == 2 then
if not cb_ret or i == 1 then
ret = cb_ret
end
elseif mode == 3 then
if cb_ret then
return cb_ret
end
ret = cb_ret
elseif mode == 4 then
if (cb_ret and not ret) or i == 1 then
ret = cb_ret
end
elseif mode == 5 and cb_ret then
return cb_ret
end
end
return ret
end
--
-- Callback registration
--
local function make_registration()
local t = {}
local registerfunc = function(func)
t[#t + 1] = func
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
name = debug.getinfo(1, "n").name or "??"
}
--local origin = core.callback_origins[func]
--print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
end
return t, registerfunc
end
local function make_registration_reverse()
local t = {}
local registerfunc = function(func)
table.insert(t, 1, func)
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
name = debug.getinfo(1, "n").name or "??"
}
--local origin = core.callback_origins[func]
--print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func))
end
return t, registerfunc
end
local function make_registration_wrap(reg_fn_name, clear_fn_name)
local list = {}
local orig_reg_fn = core[reg_fn_name]
core[reg_fn_name] = function(def)
local retval = orig_reg_fn(def)
if retval ~= nil then
if def.name ~= nil then
list[def.name] = def
else
list[retval] = def
end
end
return retval
end
local orig_clear_fn = core[clear_fn_name]
core[clear_fn_name] = function()
for k in pairs(list) do
list[k] = nil
end
return orig_clear_fn()
end
return list
end
core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } }
function core.registered_on_player_hpchange(player, hp_change)
local last = false
for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do
local func = core.registered_on_player_hpchanges.modifiers[i]
hp_change, last = func(player, hp_change)
if type(hp_change) ~= "number" then
local debuginfo = debug.getinfo(func)
error("The register_on_hp_changes function has to return a number at " ..
debuginfo.short_src .. " line " .. debuginfo.linedefined)
end
if last then
break
end
end
for i, func in ipairs(core.registered_on_player_hpchanges.loggers) do
func(player, hp_change)
end
return hp_change
end
function core.register_on_player_hpchange(func, modifier)
if modifier then
core.registered_on_player_hpchanges.modifiers[#core.registered_on_player_hpchanges.modifiers + 1] = func
else
core.registered_on_player_hpchanges.loggers[#core.registered_on_player_hpchanges.loggers + 1] = func
end
core.callback_origins[func] = {
mod = core.get_current_modname() or "??",
name = debug.getinfo(1, "n").name or "??"
}
end
core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes")
core.registered_ores = make_registration_wrap("register_ore", "clear_registered_ores")
core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations")
core.registered_on_chat_messages, core.register_on_chat_message = make_registration()
core.registered_globalsteps, core.register_globalstep = make_registration()
core.registered_playerevents, core.register_playerevent = make_registration()
core.registered_on_shutdown, core.register_on_shutdown = make_registration()
core.registered_on_punchnodes, core.register_on_punchnode = make_registration()
core.registered_on_placenodes, core.register_on_placenode = make_registration()
core.registered_on_dignodes, core.register_on_dignode = make_registration()
core.registered_on_generateds, core.register_on_generated = make_registration()
core.registered_on_newplayers, core.register_on_newplayer = make_registration()
core.registered_on_dieplayers, core.register_on_dieplayer = make_registration()
core.registered_on_respawnplayers, core.register_on_respawnplayer = make_registration()
core.registered_on_prejoinplayers, core.register_on_prejoinplayer = make_registration()
core.registered_on_joinplayers, core.register_on_joinplayer = make_registration()
core.registered_on_leaveplayers, core.register_on_leaveplayer = make_registration()
core.registered_on_player_receive_fields, core.register_on_player_receive_fields = make_registration_reverse()
core.registered_on_cheats, core.register_on_cheat = make_registration()
core.registered_on_crafts, core.register_on_craft = make_registration()
core.registered_craft_predicts, core.register_craft_predict = make_registration()
core.registered_on_protection_violation, core.register_on_protection_violation = make_registration()
core.registered_on_item_eats, core.register_on_item_eat = make_registration()
core.registered_on_punchplayers, core.register_on_punchplayer = make_registration()
--
-- Compatibility for on_mapgen_init()
--
core.register_on_mapgen_init = function(func) func(core.get_mapgen_params()) end

165
builtin/game/statbars.lua Normal file
View File

@@ -0,0 +1,165 @@
-- cache setting
local enable_damage = core.settings:get_bool("enable_damage")
local health_bar_definition =
{
hud_elem_type = "statbar",
position = { x=0.5, y=1 },
text = "heart.png",
number = 20,
direction = 0,
size = { x=24, y=24 },
offset = { x=(-10*24)-25, y=-(48+24+16)},
}
local breath_bar_definition =
{
hud_elem_type = "statbar",
position = { x=0.5, y=1 },
text = "bubble.png",
number = 20,
direction = 0,
size = { x=24, y=24 },
offset = {x=25,y=-(48+24+16)},
}
local hud_ids = {}
local function initialize_builtin_statbars(player)
if not player:is_player() then
return
end
local name = player:get_player_name()
if name == "" then
return
end
if (hud_ids[name] == nil) then
hud_ids[name] = {}
-- flags are not transmitted to client on connect, we need to make sure
-- our current flags are transmitted by sending them actively
player:hud_set_flags(player:hud_get_flags())
end
if player:hud_get_flags().healthbar and enable_damage then
if hud_ids[name].id_healthbar == nil then
health_bar_definition.number = player:get_hp()
hud_ids[name].id_healthbar = player:hud_add(health_bar_definition)
end
else
if hud_ids[name].id_healthbar ~= nil then
player:hud_remove(hud_ids[name].id_healthbar)
hud_ids[name].id_healthbar = nil
end
end
if (player:get_breath() < 11) then
if player:hud_get_flags().breathbar and enable_damage then
if hud_ids[name].id_breathbar == nil then
hud_ids[name].id_breathbar = player:hud_add(breath_bar_definition)
end
else
if hud_ids[name].id_breathbar ~= nil then
player:hud_remove(hud_ids[name].id_breathbar)
hud_ids[name].id_breathbar = nil
end
end
elseif hud_ids[name].id_breathbar ~= nil then
player:hud_remove(hud_ids[name].id_breathbar)
hud_ids[name].id_breathbar = nil
end
end
local function cleanup_builtin_statbars(player)
if not player:is_player() then
return
end
local name = player:get_player_name()
if name == "" then
return
end
hud_ids[name] = nil
end
local function player_event_handler(player,eventname)
assert(player:is_player())
local name = player:get_player_name()
if name == "" then
return
end
if eventname == "health_changed" then
initialize_builtin_statbars(player)
if hud_ids[name].id_healthbar ~= nil then
player:hud_change(hud_ids[name].id_healthbar,"number",player:get_hp())
return true
end
end
if eventname == "breath_changed" then
initialize_builtin_statbars(player)
if hud_ids[name].id_breathbar ~= nil then
player:hud_change(hud_ids[name].id_breathbar,"number",player:get_breath()*2)
return true
end
end
if eventname == "hud_changed" then
initialize_builtin_statbars(player)
return true
end
return false
end
function core.hud_replace_builtin(name, definition)
if definition == nil or
type(definition) ~= "table" or
definition.hud_elem_type ~= "statbar" then
return false
end
if name == "health" then
health_bar_definition = definition
for name,ids in pairs(hud_ids) do
local player = core.get_player_by_name(name)
if player and hud_ids[name].id_healthbar then
player:hud_remove(hud_ids[name].id_healthbar)
initialize_builtin_statbars(player)
end
end
return true
end
if name == "breath" then
breath_bar_definition = definition
for name,ids in pairs(hud_ids) do
local player = core.get_player_by_name(name)
if player and hud_ids[name].id_breathbar then
player:hud_remove(hud_ids[name].id_breathbar)
initialize_builtin_statbars(player)
end
end
return true
end
return false
end
core.register_on_joinplayer(initialize_builtin_statbars)
core.register_on_leaveplayer(cleanup_builtin_statbars)
core.register_playerevent(player_event_handler)

View File

@@ -0,0 +1,25 @@
-- Minetest: builtin/static_spawn.lua
local function warn_invalid_static_spawnpoint()
if core.settings:get("static_spawnpoint") and
not core.setting_get_pos("static_spawnpoint") then
core.log("error", "The static_spawnpoint setting is invalid: \""..
core.settings:get("static_spawnpoint").."\"")
end
end
warn_invalid_static_spawnpoint()
local function put_player_in_spawn(player_obj)
local static_spawnpoint = core.setting_get_pos("static_spawnpoint")
if not static_spawnpoint then
return false
end
core.log("action", "Moving " .. player_obj:get_player_name() ..
" to static spawnpoint at " .. core.pos_to_string(static_spawnpoint))
player_obj:setpos(static_spawnpoint)
return true
end
core.register_on_newplayer(put_player_in_spawn)
core.register_on_respawnplayer(put_player_in_spawn)

132
builtin/game/voxelarea.lua Normal file
View File

@@ -0,0 +1,132 @@
VoxelArea = {
MinEdge = {x=1, y=1, z=1},
MaxEdge = {x=0, y=0, z=0},
ystride = 0,
zstride = 0,
}
function VoxelArea:new(o)
o = o or {}
setmetatable(o, self)
self.__index = self
local e = o:getExtent()
o.ystride = e.x
o.zstride = e.x * e.y
return o
end
function VoxelArea:getExtent()
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
return {
x = MaxEdge.x - MinEdge.x + 1,
y = MaxEdge.y - MinEdge.y + 1,
z = MaxEdge.z - MinEdge.z + 1,
}
end
function VoxelArea:getVolume()
local e = self:getExtent()
return e.x * e.y * e.z
end
function VoxelArea:index(x, y, z)
local MinEdge = self.MinEdge
local i = (z - MinEdge.z) * self.zstride +
(y - MinEdge.y) * self.ystride +
(x - MinEdge.x) + 1
return math.floor(i)
end
function VoxelArea:indexp(p)
local MinEdge = self.MinEdge
local i = (p.z - MinEdge.z) * self.zstride +
(p.y - MinEdge.y) * self.ystride +
(p.x - MinEdge.x) + 1
return math.floor(i)
end
function VoxelArea:position(i)
local p = {}
local MinEdge = self.MinEdge
i = i - 1
p.z = math.floor(i / self.zstride) + MinEdge.z
i = i % self.zstride
p.y = math.floor(i / self.ystride) + MinEdge.y
i = i % self.ystride
p.x = math.floor(i) + MinEdge.x
return p
end
function VoxelArea:contains(x, y, z)
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
return (x >= MinEdge.x) and (x <= MaxEdge.x) and
(y >= MinEdge.y) and (y <= MaxEdge.y) and
(z >= MinEdge.z) and (z <= MaxEdge.z)
end
function VoxelArea:containsp(p)
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
return (p.x >= MinEdge.x) and (p.x <= MaxEdge.x) and
(p.y >= MinEdge.y) and (p.y <= MaxEdge.y) and
(p.z >= MinEdge.z) and (p.z <= MaxEdge.z)
end
function VoxelArea:containsi(i)
return (i >= 1) and (i <= self:getVolume())
end
function VoxelArea:iter(minx, miny, minz, maxx, maxy, maxz)
local i = self:index(minx, miny, minz) - 1
local xrange = maxx - minx + 1
local nextaction = i + 1 + xrange
local y = 0
local yrange = maxy - miny + 1
local yreqstride = self.ystride - xrange
local z = 0
local zrange = maxz - minz + 1
local multistride = self.zstride - ((yrange - 1) * self.ystride + xrange)
return function()
-- continue i until it needs to jump
i = i + 1
if i ~= nextaction then
return i
end
-- continue y until maxy is exceeded
y = y + 1
if y ~= yrange then
-- set i to index(minx, miny + y, minz + z) - 1
i = i + yreqstride
nextaction = i + xrange
return i
end
-- continue z until maxz is exceeded
z = z + 1
if z == zrange then
-- cuboid finished, return nil
return
end
-- set i to index(minx, miny, minz + z) - 1
i = i + multistride
y = 0
nextaction = i + xrange
return i
end
end
function VoxelArea:iterp(minp, maxp)
return self:iter(minp.x, minp.y, minp.z, maxp.x, maxp.y, maxp.z)
end

52
builtin/init.lua Normal file
View File

@@ -0,0 +1,52 @@
--
-- This file contains built-in stuff in Minetest implemented in Lua.
--
-- It is always loaded and executed after registration of the C API,
-- before loading and running any mods.
--
-- Initialize some very basic things
function core.debug(...) core.log(table.concat({...}, "\t")) end
if core.print then
local core_print = core.print
-- Override native print and use
-- terminal if that's turned on
function print(...)
local n, t = select("#", ...), {...}
for i = 1, n do
t[i] = tostring(t[i])
end
core_print(table.concat(t, "\t"))
end
core.print = nil -- don't pollute our namespace
end
math.randomseed(os.time())
minetest = core
-- Load other files
local scriptdir = core.get_builtin_path() .. DIR_DELIM
local gamepath = scriptdir .. "game" .. DIR_DELIM
local clientpath = scriptdir .. "client" .. DIR_DELIM
local commonpath = scriptdir .. "common" .. DIR_DELIM
local asyncpath = scriptdir .. "async" .. DIR_DELIM
dofile(commonpath .. "strict.lua")
dofile(commonpath .. "serialize.lua")
dofile(commonpath .. "misc_helpers.lua")
if INIT == "game" then
dofile(gamepath .. "init.lua")
elseif INIT == "mainmenu" then
local mm_script = core.settings:get("main_menu_script")
if mm_script and mm_script ~= "" then
dofile(mm_script)
else
dofile(core.get_mainmenu_path() .. DIR_DELIM .. "init.lua")
end
elseif INIT == "async" then
dofile(asyncpath .. "init.lua")
elseif INIT == "client" then
dofile(clientpath .. "init.lua")
else
error(("Unrecognized builtin initialization type %s!"):format(tostring(INIT)))
end

336
builtin/mainmenu/common.lua Normal file
View File

@@ -0,0 +1,336 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
-- Global menu data
--------------------------------------------------------------------------------
menudata = {}
--------------------------------------------------------------------------------
-- Local cached values
--------------------------------------------------------------------------------
local min_supp_proto, max_supp_proto
function common_update_cached_supp_proto()
min_supp_proto = core.get_min_supp_proto()
max_supp_proto = core.get_max_supp_proto()
end
common_update_cached_supp_proto()
--------------------------------------------------------------------------------
-- Menu helper functions
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
local function render_client_count(n)
if n > 99 then return '99+'
elseif n >= 0 then return tostring(n)
else return '?' end
end
local function configure_selected_world_params(idx)
local worldconfig = modmgr.get_worldconfig(menudata.worldlist:get_list()[idx].path)
if worldconfig.creative_mode then
core.settings:set("creative_mode", worldconfig.creative_mode)
end
if worldconfig.enable_damage then
core.settings:set("enable_damage", worldconfig.enable_damage)
end
end
--------------------------------------------------------------------------------
function image_column(tooltip, flagname)
return "image,tooltip=" .. core.formspec_escape(tooltip) .. "," ..
"0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
"1=" .. core.formspec_escape(defaulttexturedir ..
(flagname and "server_flags_" .. flagname .. ".png" or "blank.png")) .. "," ..
"2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," ..
"3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," ..
"4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," ..
"5=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png")
end
--------------------------------------------------------------------------------
function order_favorite_list(list)
local res = {}
--orders the favorite list after support
for i = 1, #list do
local fav = list[i]
if is_server_protocol_compat(fav.proto_min, fav.proto_max) then
res[#res + 1] = fav
end
end
for i = 1, #list do
local fav = list[i]
if not is_server_protocol_compat(fav.proto_min, fav.proto_max) then
res[#res + 1] = fav
end
end
return res
end
--------------------------------------------------------------------------------
function render_serverlist_row(spec, is_favorite)
local text = ""
if spec.name then
text = text .. core.formspec_escape(spec.name:trim())
elseif spec.address then
text = text .. spec.address:trim()
if spec.port then
text = text .. ":" .. spec.port
end
end
local details = ""
local grey_out = not is_server_protocol_compat(spec.proto_min, spec.proto_max)
if is_favorite then
details = "1,"
else
details = "0,"
end
if spec.ping then
local ping = spec.ping * 1000
if ping <= 50 then
details = details .. "2,"
elseif ping <= 100 then
details = details .. "3,"
elseif ping <= 250 then
details = details .. "4,"
else
details = details .. "5,"
end
else
details = details .. "0,"
end
if spec.clients and spec.clients_max then
local clients_color = ''
local clients_percent = 100 * spec.clients / spec.clients_max
-- Choose a color depending on how many clients are connected
-- (relatively to clients_max)
if grey_out then clients_color = '#aaaaaa'
elseif spec.clients == 0 then clients_color = '' -- 0 players: default/white
elseif clients_percent <= 60 then clients_color = '#a1e587' -- 0-60%: green
elseif clients_percent <= 90 then clients_color = '#ffdc97' -- 60-90%: yellow
elseif clients_percent == 100 then clients_color = '#dd5b5b' -- full server: red (darker)
else clients_color = '#ffba97' -- 90-100%: orange
end
details = details .. clients_color .. ',' ..
render_client_count(spec.clients) .. ',/,' ..
render_client_count(spec.clients_max) .. ','
elseif grey_out then
details = details .. '#aaaaaa,?,/,?,'
else
details = details .. ',?,/,?,'
end
if spec.creative then
details = details .. "1,"
else
details = details .. "0,"
end
if spec.damage then
details = details .. "1,"
else
details = details .. "0,"
end
if spec.pvp then
details = details .. "1,"
else
details = details .. "0,"
end
return details .. (grey_out and '#aaaaaa,' or ',') .. text
end
--------------------------------------------------------------------------------
os.tempfolder = function()
if core.settings:get("TMPFolder") then
return core.settings:get("TMPFolder") .. DIR_DELIM .. "MT_" .. math.random(0,10000)
end
local filetocheck = os.tmpname()
os.remove(filetocheck)
local randname = "MTTempModFolder_" .. math.random(0,10000)
if DIR_DELIM == "\\" then
local tempfolder = os.getenv("TEMP")
return tempfolder .. filetocheck
else
local backstring = filetocheck:reverse()
return filetocheck:sub(0,filetocheck:len()-backstring:find(DIR_DELIM)+1) ..randname
end
end
--------------------------------------------------------------------------------
function menu_render_worldlist()
local retval = ""
local current_worldlist = menudata.worldlist:get_list()
for i, v in ipairs(current_worldlist) do
if retval ~= "" then retval = retval .. "," end
retval = retval .. core.formspec_escape(v.name) ..
" \\[" .. core.formspec_escape(v.gameid) .. "\\]"
end
return retval
end
--------------------------------------------------------------------------------
function menu_handle_key_up_down(fields, textlist, settingname)
local oldidx, newidx = core.get_textlist_index(textlist), 1
if fields.key_up or fields.key_down then
if fields.key_up and oldidx and oldidx > 1 then
newidx = oldidx - 1
elseif fields.key_down and oldidx and
oldidx < menudata.worldlist:size() then
newidx = oldidx + 1
end
core.settings:set(settingname, menudata.worldlist:get_raw_index(newidx))
configure_selected_world_params(newidx)
return true
end
return false
end
--------------------------------------------------------------------------------
function asyncOnlineFavourites()
if not menudata.public_known then
menudata.public_known = {{
name = fgettext("Loading..."),
description = fgettext_ne("Try reenabling public serverlist and check your internet connection.")
}}
end
menudata.favorites = menudata.public_known
menudata.favorites_is_public = true
if not menudata.public_downloading then
menudata.public_downloading = true
else
return
end
core.handle_async(
function(param)
return core.get_favorites("online")
end,
nil,
function(result)
menudata.public_downloading = nil
local favs = order_favorite_list(result)
if favs[1] then
menudata.public_known = favs
menudata.favorites = menudata.public_known
menudata.favorites_is_public = true
end
core.event_handler("Refresh")
end
)
end
--------------------------------------------------------------------------------
function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transparency)
local textlines = core.wrap_text(text, textlen, true)
local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width ..
"," .. height .. ";" .. tl_name .. ";"
for i = 1, #textlines do
textlines[i] = textlines[i]:gsub("\r", "")
retval = retval .. core.formspec_escape(textlines[i]) .. ","
end
retval = retval .. ";0;"
if transparency then retval = retval .. "true" end
retval = retval .. "]"
return retval
end
--------------------------------------------------------------------------------
function is_server_protocol_compat(server_proto_min, server_proto_max)
if (not server_proto_min) or (not server_proto_max) then
-- There is no info. Assume the best and act as if we would be compatible.
return true
end
return min_supp_proto <= server_proto_max and max_supp_proto >= server_proto_min
end
--------------------------------------------------------------------------------
function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
if not is_server_protocol_compat(server_proto_min, server_proto_max) then
local server_prot_ver_info, client_prot_ver_info
local s_p_min = server_proto_min
local s_p_max = server_proto_max
if s_p_min ~= s_p_max then
server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ",
s_p_min, s_p_max)
else
server_prot_ver_info = fgettext_ne("Server enforces protocol version $1. ",
s_p_min)
end
if min_supp_proto ~= max_supp_proto then
client_prot_ver_info= fgettext_ne("We support protocol versions between version $1 and $2.",
min_supp_proto, max_supp_proto)
else
client_prot_ver_info = fgettext_ne("We only support protocol version $1.", min_supp_proto)
end
gamedata.errormessage = fgettext_ne("Protocol version mismatch. ")
.. server_prot_ver_info
.. client_prot_ver_info
return false
end
return true
end
--------------------------------------------------------------------------------
function menu_worldmt(selected, setting, value)
local world = menudata.worldlist:get_list()[selected]
if world then
local filename = world.path .. DIR_DELIM .. "world.mt"
local world_conf = Settings(filename)
if value then
if not world_conf:write() then
core.log("error", "Failed to write world config file")
end
world_conf:set(setting, value)
world_conf:write()
else
return world_conf:get(setting)
end
else
return nil
end
end
function menu_worldmt_legacy(selected)
local modes_names = {"creative_mode", "enable_damage", "server_announce"}
for _, mode_name in pairs(modes_names) do
local mode_val = menu_worldmt(selected, mode_name)
if mode_val then
core.settings:set(mode_name, mode_val)
else
menu_worldmt(selected, mode_name, core.settings:get(mode_name))
end
end
end

View File

@@ -0,0 +1,287 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local enabled_all = false
local function modname_valid(name)
return not name:find("[^a-z0-9_]")
end
local function get_formspec(data)
local mod = data.list:get_list()[data.selected_mod]
local retval =
"size[11.5,7.5,true]" ..
"label[0.5,0;" .. fgettext("World:") .. "]" ..
"label[1.75,0;" .. data.worldspec.name .. "]"
if mod == nil then
mod = {name=""}
end
local hard_deps, soft_deps = modmgr.get_dependencies(mod.path)
retval = retval ..
"label[0,0.7;" .. fgettext("Mod:") .. "]" ..
"label[0.75,0.7;" .. mod.name .. "]" ..
"label[0,1.25;" .. fgettext("Dependencies:") .. "]" ..
"textlist[0,1.75;5,2.125;world_config_depends;" ..
hard_deps .. ";0]" ..
"label[0,3.875;" .. fgettext("Optional dependencies:") .. "]" ..
"textlist[0,4.375;5,1.8;world_config_optdepends;" ..
soft_deps .. ";0]" ..
"button[3.25,7;2.5,0.5;btn_config_world_save;" .. fgettext("Save") .. "]" ..
"button[5.75,7;2.5,0.5;btn_config_world_cancel;" .. fgettext("Cancel") .. "]"
if mod and mod.name ~= "" and not mod.is_game_content then
if mod.is_modpack then
local rawlist = data.list:get_raw_list()
local all_enabled = true
for j = 1, #rawlist, 1 do
if rawlist[j].modpack == mod.name and not rawlist[j].enabled then
all_enabled = false
break
end
end
if all_enabled then
retval = retval .. "button[5.5,0.125;2.5,0.5;btn_mp_disable;" ..
fgettext("Disable MP") .. "]"
else
retval = retval .. "button[5.5,0.125;2.5,0.5;btn_mp_enable;" ..
fgettext("Enable MP") .. "]"
end
else
if mod.enabled then
retval = retval .. "checkbox[5.5,-0.125;cb_mod_enable;" ..
fgettext("enabled") .. ";true]"
else
retval = retval .. "checkbox[5.5,-0.125;cb_mod_enable;" ..
fgettext("enabled") .. ";false]"
end
end
end
if enabled_all then
retval = retval ..
"button[8.75,0.125;2.5,0.5;btn_disable_all_mods;" .. fgettext("Disable all") .. "]"
else
retval = retval ..
"button[8.75,0.125;2.5,0.5;btn_enable_all_mods;" .. fgettext("Enable all") .. "]"
end
retval = retval ..
"tablecolumns[color;tree;text]" ..
"table[5.5,0.75;5.75,6;world_config_modlist;"
retval = retval .. modmgr.render_modlist(data.list)
retval = retval .. ";" .. data.selected_mod .."]"
return retval
end
local function enable_mod(this, toset)
local mod = this.data.list:get_list()[this.data.selected_mod]
if mod.is_game_content then
-- game mods can't be enabled or disabled
elseif not mod.is_modpack then
if toset == nil then
mod.enabled = not mod.enabled
else
mod.enabled = toset
end
else
local list = this.data.list:get_raw_list()
for i=1,#list,1 do
if list[i].modpack == mod.name then
if toset == nil then
toset = not list[i].enabled
end
list[i].enabled = toset
end
end
end
end
local function handle_buttons(this, fields)
if fields["world_config_modlist"] ~= nil then
local event = core.explode_table_event(fields["world_config_modlist"])
this.data.selected_mod = event.row
core.settings:set("world_config_selected_mod", event.row)
if event.type == "DCL" then
enable_mod(this)
end
return true
end
if fields["key_enter"] ~= nil then
enable_mod(this)
return true
end
if fields["cb_mod_enable"] ~= nil then
local toset = core.is_yes(fields["cb_mod_enable"])
enable_mod(this,toset)
return true
end
if fields["btn_mp_enable"] ~= nil or
fields["btn_mp_disable"] then
local toset = (fields["btn_mp_enable"] ~= nil)
enable_mod(this,toset)
return true
end
if fields["btn_config_world_save"] then
local filename = this.data.worldspec.path ..
DIR_DELIM .. "world.mt"
local worldfile = Settings(filename)
local mods = worldfile:to_table()
local rawlist = this.data.list:get_raw_list()
local i,mod
for i,mod in ipairs(rawlist) do
if not mod.is_modpack and
not mod.is_game_content then
if modname_valid(mod.name) then
worldfile:set("load_mod_"..mod.name, tostring(mod.enabled))
else
if mod.enabled then
gamedata.errormessage = fgettext_ne("Failed to enable mod \"$1\" as it contains disallowed characters. Only chararacters [a-z0-9_] are allowed.", mod.name)
end
end
mods["load_mod_"..mod.name] = nil
end
end
-- Remove mods that are not present anymore
for key,value in pairs(mods) do
if key:sub(1,9) == "load_mod_" then
worldfile:remove(key)
end
end
if not worldfile:write() then
core.log("error", "Failed to write world config file")
end
this:delete()
return true
end
if fields["btn_config_world_cancel"] then
this:delete()
return true
end
if fields.btn_enable_all_mods then
local list = this.data.list:get_raw_list()
for i = 1, #list do
if not list[i].is_game_content
and not list[i].is_modpack then
list[i].enabled = true
end
end
enabled_all = true
return true
end
if fields.btn_disable_all_mods then
local list = this.data.list:get_raw_list()
for i = 1, #list do
if not list[i].is_game_content
and not list[i].is_modpack then
list[i].enabled = false
end
end
enabled_all = false
return true
end
return false
end
function create_configure_world_dlg(worldidx)
local dlg = dialog_create("sp_config_world",
get_formspec,
handle_buttons,
nil)
dlg.data.selected_mod = tonumber(core.settings:get("world_config_selected_mod"))
if dlg.data.selected_mod == nil then
dlg.data.selected_mod = 0
end
dlg.data.worldspec = core.get_worlds()[worldidx]
if dlg.data.worldspec == nil then dlg:delete() return nil end
dlg.data.worldconfig = modmgr.get_worldconfig(dlg.data.worldspec.path)
if dlg.data.worldconfig == nil or dlg.data.worldconfig.id == nil or
dlg.data.worldconfig.id == "" then
dlg:delete()
return nil
end
dlg.data.list = filterlist.create(
modmgr.preparemodlist, --refresh
modmgr.comparemod, --compare
function(element,uid) --uid match
if element.name == uid then
return true
end
end,
function(element, criteria)
if criteria.hide_game and
element.is_game_content then
return false
end
if criteria.hide_modpackcontents and
element.modpack ~= nil then
return false
end
return true
end, --filter
{ worldpath= dlg.data.worldspec.path,
gameid = dlg.data.worldspec.gameid }
)
if dlg.data.selected_mod > dlg.data.list:size() then
dlg.data.selected_mod = 0
end
dlg.data.list:set_filtercriteria(
{
hide_game=dlg.data.hide_gamemods,
hide_modpackcontents= dlg.data.hide_modpackcontents
})
dlg.data.list:add_sort_mechanism("alphabetic", sort_mod_list)
dlg.data.list:set_sortmode("alphabetic")
return dlg
end

View File

@@ -0,0 +1,143 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function create_world_formspec(dialogdata)
local mapgens = core.get_mapgen_names()
local current_seed = core.settings:get("fixed_map_seed") or ""
local current_mg = core.settings:get("mg_name")
local mglist = ""
local selindex = 1
local i = 1
for k,v in pairs(mapgens) do
if current_mg == v then
selindex = i
end
i = i + 1
mglist = mglist .. v .. ","
end
mglist = mglist:sub(1, -2)
local gameid = core.settings:get("menu_last_game")
local game, gameidx = nil , 0
if gameid ~= nil then
game, gameidx = gamemgr.find_by_gameid(gameid)
if gameidx == nil then
gameidx = 0
end
end
current_seed = core.formspec_escape(current_seed)
local retval =
"size[11.5,6.5,true]" ..
"label[2,0;" .. fgettext("World name") .. "]"..
"field[4.5,0.4;6,0.5;te_world_name;;]" ..
"label[2,1;" .. fgettext("Seed") .. "]"..
"field[4.5,1.4;6,0.5;te_seed;;".. current_seed .. "]" ..
"label[2,2;" .. fgettext("Mapgen") .. "]"..
"dropdown[4.2,2;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" ..
"label[2,3;" .. fgettext("Game") .. "]"..
"textlist[4.2,3;5.8,2.3;games;" .. gamemgr.gamelist() ..
";" .. gameidx .. ";true]" ..
"button[3.25,6;2.5,0.5;world_create_confirm;" .. fgettext("Create") .. "]" ..
"button[5.75,6;2.5,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
if #gamemgr.games == 0 then
retval = retval .. "box[2,4;8,1;#ff8800]label[2.25,4;" ..
fgettext("You have no subgames installed.") .. "]label[2.25,4.4;" ..
fgettext("Download one from minetest.net") .. "]"
elseif #gamemgr.games == 1 and gamemgr.games[1].id == "minimal" then
retval = retval .. "box[1.75,4;8.7,1;#ff8800]label[2,4;" ..
fgettext("Warning: The minimal development test is meant for developers.") .. "]label[2,4.4;" ..
fgettext("Download a subgame, such as minetest_game, from minetest.net") .. "]"
end
return retval
end
local function create_world_buttonhandler(this, fields)
if fields["world_create_confirm"] or
fields["key_enter"] then
local worldname = fields["te_world_name"]
local gameindex = core.get_textlist_index("games")
if gameindex ~= nil and
worldname ~= "" then
local message = nil
core.settings:set("fixed_map_seed", fields["te_seed"])
if not menudata.worldlist:uid_exists_raw(worldname) then
core.settings:set("mg_name",fields["dd_mapgen"])
message = core.create_world(worldname,gameindex)
else
message = fgettext("A world named \"$1\" already exists", worldname)
end
if message ~= nil then
gamedata.errormessage = message
else
core.settings:set("menu_last_game",gamemgr.games[gameindex].id)
if this.data.update_worldlist_filter then
menudata.worldlist:set_filtercriteria(gamemgr.games[gameindex].id)
mm_texture.update("singleplayer", gamemgr.games[gameindex].id)
end
menudata.worldlist:refresh()
core.settings:set("mainmenu_last_selected_world",
menudata.worldlist:raw_index_by_uid(worldname))
end
else
gamedata.errormessage =
fgettext("No worldname given or no game selected")
end
this:delete()
return true
end
if fields["games"] then
return true
end
if fields["world_create_cancel"] then
this:delete()
return true
end
return false
end
function create_create_world_dlg(update_worldlistfilter)
local retval = dialog_create("sp_create_world",
create_world_formspec,
create_world_buttonhandler,
nil)
retval.update_worldlist_filter = update_worldlistfilter
return retval
end

View File

@@ -0,0 +1,69 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function delete_mod_formspec(dialogdata)
dialogdata.mod = modmgr.global_mods:get_list()[dialogdata.selected]
local retval =
"size[11.5,4.5,true]" ..
"label[2,2;" ..
fgettext("Are you sure you want to delete \"$1\"?", dialogdata.mod.name) .. "]"..
"button[3.25,3.5;2.5,0.5;dlg_delete_mod_confirm;" .. fgettext("Delete") .. "]" ..
"button[5.75,3.5;2.5,0.5;dlg_delete_mod_cancel;" .. fgettext("Cancel") .. "]"
return retval
end
--------------------------------------------------------------------------------
local function delete_mod_buttonhandler(this, fields)
if fields["dlg_delete_mod_confirm"] ~= nil then
if this.data.mod.path ~= nil and
this.data.mod.path ~= "" and
this.data.mod.path ~= core.get_modpath() then
if not core.delete_dir(this.data.mod.path) then
gamedata.errormessage = fgettext("Modmgr: failed to delete \"$1\"", this.data.mod.path)
end
modmgr.refresh_globals()
else
gamedata.errormessage = fgettext("Modmgr: invalid modpath \"$1\"", this.data.mod.path)
end
this:delete()
return true
end
if fields["dlg_delete_mod_cancel"] then
this:delete()
return true
end
return false
end
--------------------------------------------------------------------------------
function create_delete_mod_dlg(selected_index)
local retval = dialog_create("dlg_delete_mod",
delete_mod_formspec,
delete_mod_buttonhandler,
nil)
retval.data.selected = selected_index
return retval
end

View File

@@ -0,0 +1,61 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function delete_world_formspec(dialogdata)
local retval =
"size[10,2.5,true]" ..
"label[0.5,0.5;" ..
fgettext("Delete World \"$1\"?", dialogdata.delete_name) .. "]" ..
"button[0.5,1.5;2.5,0.5;world_delete_confirm;" .. fgettext("Delete") .. "]" ..
"button[7.0,1.5;2.5,0.5;world_delete_cancel;" .. fgettext("Cancel") .. "]"
return retval
end
local function delete_world_buttonhandler(this, fields)
if fields["world_delete_confirm"] then
if this.data.delete_index > 0 and
this.data.delete_index <= #menudata.worldlist:get_raw_list() then
core.delete_world(this.data.delete_index)
menudata.worldlist:refresh()
end
this:delete()
return true
end
if fields["world_delete_cancel"] then
this:delete()
return true
end
return false
end
function create_delete_world_dlg(name_to_del, index_to_del)
assert(name_to_del ~= nil and type(name_to_del) == "string" and name_to_del ~= "")
assert(index_to_del ~= nil and type(index_to_del) == "number")
local retval = dialog_create("delete_world",
delete_world_formspec,
delete_world_buttonhandler,
nil)
retval.data.delete_name = name_to_del
retval.data.delete_index = index_to_del
return retval
end

View File

@@ -0,0 +1,67 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function rename_modpack_formspec(dialogdata)
dialogdata.mod = modmgr.global_mods:get_list()[dialogdata.selected]
local retval =
"size[11.5,4.5,true]" ..
"field[2.5,2;7,0.5;te_modpack_name;".. fgettext("Rename Modpack:") .. ";" ..
dialogdata.mod.name .. "]" ..
"button[3.25,3.5;2.5,0.5;dlg_rename_modpack_confirm;"..
fgettext("Accept") .. "]" ..
"button[5.75,3.5;2.5,0.5;dlg_rename_modpack_cancel;"..
fgettext("Cancel") .. "]"
return retval
end
--------------------------------------------------------------------------------
local function rename_modpack_buttonhandler(this, fields)
if fields["dlg_rename_modpack_confirm"] ~= nil then
local oldpath = core.get_modpath() .. DIR_DELIM .. this.data.mod.name
local targetpath = core.get_modpath() .. DIR_DELIM .. fields["te_modpack_name"]
core.copy_dir(oldpath,targetpath,false)
modmgr.refresh_globals()
modmgr.selected_mod = modmgr.global_mods:get_current_index(
modmgr.global_mods:raw_index_by_uid(fields["te_modpack_name"]))
this:delete()
return true
end
if fields["dlg_rename_modpack_cancel"] then
this:delete()
return true
end
return false
end
--------------------------------------------------------------------------------
function create_rename_modpack_dlg(selected_index)
local retval = dialog_create("dlg_delete_mod",
rename_modpack_formspec,
rename_modpack_buttonhandler,
nil)
retval.data.selected = selected_index
return retval
end

View File

@@ -0,0 +1,772 @@
--Minetest
--Copyright (C) 2015 PilzAdam
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local FILENAME = "settingtypes.txt"
local CHAR_CLASSES = {
SPACE = "[%s]",
VARIABLE = "[%w_%-%.]",
INTEGER = "[+-]?[%d]",
FLOAT = "[+-]?[%d%.]",
FLAGS = "[%w_%-%.,]",
}
-- returns error message, or nil
local function parse_setting_line(settings, line, read_all, base_level, allow_secure)
-- comment
local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$")
if comment then
if settings.current_comment == "" then
settings.current_comment = comment
else
settings.current_comment = settings.current_comment .. "\n" .. comment
end
return
end
-- clear current_comment so only comments directly above a setting are bound to it
-- but keep a local reference to it for variables in the current line
local current_comment = settings.current_comment
settings.current_comment = ""
-- empty lines
if line:match("^" .. CHAR_CLASSES.SPACE .. "*$") then
return
end
-- category
local stars, category = line:match("^%[([%*]*)([^%]]+)%]$")
if category then
table.insert(settings, {
name = category,
level = stars:len() + base_level,
type = "category",
})
return
end
-- settings
local first_part, name, readable_name, setting_type = line:match("^"
-- this first capture group matches the whole first part,
-- so we can later strip it from the rest of the line
.. "("
.. "([" .. CHAR_CLASSES.VARIABLE .. "+)" -- variable name
.. CHAR_CLASSES.SPACE .. "*"
.. "%(([^%)]*)%)" -- readable name
.. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.VARIABLE .. "+)" -- type
.. CHAR_CLASSES.SPACE .. "*"
.. ")")
if not first_part then
return "Invalid line"
end
if name:match("secure%.[.]*") and not allow_secure then
return "Tried to add \"secure.\" setting"
end
if readable_name == "" then
readable_name = nil
end
local remaining_line = line:sub(first_part:len() + 1)
if setting_type == "int" then
local default, min, max = remaining_line:match("^"
-- first int is required, the last 2 are optional
.. "(" .. CHAR_CLASSES.INTEGER .. "+)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.INTEGER .. "*)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.INTEGER .. "*)"
.. "$")
if not default or not tonumber(default) then
return "Invalid integer setting"
end
min = tonumber(min)
max = tonumber(max)
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "int",
default = default,
min = min,
max = max,
comment = current_comment,
})
return
end
if setting_type == "string" or setting_type == "noise_params"
or setting_type == "key" or setting_type == "v3f" then
local default = remaining_line:match("^(.*)$")
if not default then
return "Invalid string setting"
end
if setting_type == "key" and not read_all then
-- ignore key type if read_all is false
return
end
table.insert(settings, {
name = name,
readable_name = readable_name,
type = setting_type,
default = default,
comment = current_comment,
})
return
end
if setting_type == "bool" then
if remaining_line ~= "false" and remaining_line ~= "true" then
return "Invalid boolean setting"
end
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "bool",
default = remaining_line,
comment = current_comment,
})
return
end
if setting_type == "float" then
local default, min, max = remaining_line:match("^"
-- first float is required, the last 2 are optional
.. "(" .. CHAR_CLASSES.FLOAT .. "+)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.FLOAT .. "*)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.FLOAT .. "*)"
.."$")
if not default or not tonumber(default) then
return "Invalid float setting"
end
min = tonumber(min)
max = tonumber(max)
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "float",
default = default,
min = min,
max = max,
comment = current_comment,
})
return
end
if setting_type == "enum" then
local default, values = remaining_line:match("^"
-- first value (default) may be empty (i.e. is optional)
.. "(" .. CHAR_CLASSES.VARIABLE .. "*)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.FLAGS .. "+)"
.. "$")
if not default or values == "" then
return "Invalid enum setting"
end
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "enum",
default = default,
values = values:split(",", true),
comment = current_comment,
})
return
end
if setting_type == "path" then
local default = remaining_line:match("^(.*)$")
if not default then
return "Invalid path setting"
end
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "path",
default = default,
comment = current_comment,
})
return
end
if setting_type == "flags" then
local default, possible = remaining_line:match("^"
-- first value (default) may be empty (i.e. is optional)
-- this is implemented by making the last value optional, and
-- swapping them around if it turns out empty.
.. "(" .. CHAR_CLASSES.FLAGS .. "+)" .. CHAR_CLASSES.SPACE .. "*"
.. "(" .. CHAR_CLASSES.FLAGS .. "*)"
.. "$")
if not default or not possible then
return "Invalid flags setting"
end
if possible == "" then
possible = default
default = ""
end
table.insert(settings, {
name = name,
readable_name = readable_name,
type = "flags",
default = default,
possible = possible,
comment = current_comment,
})
return
end
return "Invalid setting type \"" .. setting_type .. "\""
end
local function parse_single_file(file, filepath, read_all, result, base_level, allow_secure)
-- store this helper variable in the table so it's easier to pass to parse_setting_line()
result.current_comment = ""
local line = file:read("*line")
while line do
local error_msg = parse_setting_line(result, line, read_all, base_level, allow_secure)
if error_msg then
core.log("error", error_msg .. " in " .. filepath .. " \"" .. line .. "\"")
end
line = file:read("*line")
end
result.current_comment = nil
end
-- read_all: whether to ignore certain setting types for GUI or not
-- parse_mods: whether to parse settingtypes.txt in mods and games
local function parse_config_file(read_all, parse_mods)
local builtin_path = core.get_builtin_path() .. DIR_DELIM .. FILENAME
local file = io.open(builtin_path, "r")
local settings = {}
if not file then
core.log("error", "Can't load " .. FILENAME)
return settings
end
parse_single_file(file, builtin_path, read_all, settings, 0, true)
file:close()
if parse_mods then
-- Parse games
local games_category_initialized = false
local index = 1
local game = gamemgr.get_game(index)
while game do
local path = game.path .. DIR_DELIM .. FILENAME
local file = io.open(path, "r")
if file then
if not games_category_initialized then
local translation = fgettext_ne("Games"), -- not used, but needed for xgettext
table.insert(settings, {
name = "Games",
level = 0,
type = "category",
})
games_category_initialized = true
end
table.insert(settings, {
name = game.name,
level = 1,
type = "category",
})
parse_single_file(file, path, read_all, settings, 2, false)
file:close()
end
index = index + 1
game = gamemgr.get_game(index)
end
-- Parse mods
local mods_category_initialized = false
local mods = {}
get_mods(core.get_modpath(), mods)
for _, mod in ipairs(mods) do
local path = mod.path .. DIR_DELIM .. FILENAME
local file = io.open(path, "r")
if file then
if not mods_category_initialized then
local translation = fgettext_ne("Mods"), -- not used, but needed for xgettext
table.insert(settings, {
name = "Mods",
level = 0,
type = "category",
})
mods_category_initialized = true
end
table.insert(settings, {
name = mod.name,
level = 1,
type = "category",
})
parse_single_file(file, path, read_all, settings, 2, false)
file:close()
end
end
end
return settings
end
local function filter_settings(settings, searchstring)
if not searchstring or searchstring == "" then
return settings, -1
end
-- Setup the keyword list
local keywords = {}
for word in searchstring:lower():gmatch("%S+") do
table.insert(keywords, word)
end
local result = {}
local category_stack = {}
local current_level = 0
local best_setting = nil
for _, entry in pairs(settings) do
if entry.type == "category" then
-- Remove all settingless categories
while #category_stack > 0 and entry.level <= current_level do
table.remove(category_stack, #category_stack)
if #category_stack > 0 then
current_level = category_stack[#category_stack].level
else
current_level = 0
end
end
-- Push category onto stack
category_stack[#category_stack + 1] = entry
current_level = entry.level
else
-- See if setting matches keywords
local setting_score = 0
for k = 1, #keywords do
local keyword = keywords[k]
if string.find(entry.name:lower(), keyword, 1, true) then
setting_score = setting_score + 1
end
if entry.readable_name and
string.find(fgettext(entry.readable_name):lower(), keyword, 1, true) then
setting_score = setting_score + 1
end
if entry.comment and
string.find(fgettext_ne(entry.comment):lower(), keyword, 1, true) then
setting_score = setting_score + 1
end
end
-- Add setting to results if match
if setting_score > 0 then
-- Add parent categories
for _, category in pairs(category_stack) do
result[#result + 1] = category
end
category_stack = {}
-- Add setting
result[#result + 1] = entry
entry.score = setting_score
if not best_setting or
setting_score > result[best_setting].score then
best_setting = #result
end
end
end
end
return result, best_setting or -1
end
local full_settings = parse_config_file(false, true)
local search_string = ""
local settings = full_settings
local selected_setting = 1
local function get_current_value(setting)
local value = core.settings:get(setting.name)
if value == nil then
value = setting.default
end
return value
end
local function create_change_setting_formspec(dialogdata)
local setting = settings[selected_setting]
local formspec = "size[10,5.2,true]" ..
"button[5,4.5;2,1;btn_done;" .. fgettext("Save") .. "]" ..
"button[3,4.5;2,1;btn_cancel;" .. fgettext("Cancel") .. "]" ..
"tablecolumns[color;text]" ..
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
"table[0,0;10,3;info;"
if setting.readable_name then
formspec = formspec .. "#FFFF00," .. fgettext(setting.readable_name)
.. " (" .. core.formspec_escape(setting.name) .. "),"
else
formspec = formspec .. "#FFFF00," .. core.formspec_escape(setting.name) .. ","
end
formspec = formspec .. ",,"
local comment_text = ""
if setting.comment == "" then
comment_text = fgettext_ne("(No description of setting given)")
else
comment_text = fgettext_ne(setting.comment)
end
for _, comment_line in ipairs(comment_text:split("\n", true)) do
formspec = formspec .. "," .. core.formspec_escape(comment_line) .. ","
end
if setting.type == "flags" then
formspec = formspec .. ",,"
.. "," .. fgettext("Please enter a comma seperated list of flags.") .. ","
.. "," .. fgettext("Possible values are: ")
.. core.formspec_escape(setting.possible:gsub(",", ", ")) .. ","
elseif setting.type == "noise_params" then
formspec = formspec .. ",,"
.. "," .. fgettext("Format: <offset>, <scale>, (<spreadX>, <spreadY>, <spreadZ>), <seed>, <octaves>, <persistence>") .. ","
.. "," .. fgettext("Optionally the lacunarity can be appended with a leading comma.") .. ","
elseif setting.type == "v3f" then
formspec = formspec .. ",,"
.. "," .. fgettext_ne("Format is 3 numbers separated by commas and inside brackets.") .. ","
end
formspec = formspec:sub(1, -2) -- remove trailing comma
formspec = formspec .. ";1]"
if setting.type == "bool" then
local selected_index
if core.is_yes(get_current_value(setting)) then
selected_index = 2
else
selected_index = 1
end
formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;"
.. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";"
.. selected_index .. "]"
elseif setting.type == "enum" then
local selected_index = 0
formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;"
for index, value in ipairs(setting.values) do
-- translating value is not possible, since it's the value
-- that we set the setting to
formspec = formspec .. core.formspec_escape(value) .. ","
if get_current_value(setting) == value then
selected_index = index
end
end
if #setting.values > 0 then
formspec = formspec:sub(1, -2) -- remove trailing comma
end
formspec = formspec .. ";" .. selected_index .. "]"
elseif setting.type == "path" then
local current_value = dialogdata.selected_path
if not current_value then
current_value = get_current_value(setting)
end
formspec = formspec .. "field[0.5,4;7.5,1;te_setting_value;;"
.. core.formspec_escape(current_value) .. "]"
.. "button[8,3.75;2,1;btn_browser_path;" .. fgettext("Browse") .. "]"
else
-- TODO: fancy input for float, int, flags, noise_params, v3f
local width = 10
local text = get_current_value(setting)
if dialogdata.error_message then
formspec = formspec .. "tablecolumns[color;text]" ..
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
"table[5,3.9;5,0.6;error_message;#FF0000,"
.. core.formspec_escape(dialogdata.error_message) .. ";0]"
width = 5
if dialogdata.entered_text then
text = dialogdata.entered_text
end
end
formspec = formspec .. "field[0.5,4;" .. width .. ",1;te_setting_value;;"
.. core.formspec_escape(text) .. "]"
end
return formspec
end
local function handle_change_setting_buttons(this, fields)
if fields["btn_done"] or fields["key_enter"] then
local setting = settings[selected_setting]
if setting.type == "bool" then
local new_value = fields["dd_setting_value"]
-- Note: new_value is the actual (translated) value shown in the dropdown
core.settings:set_bool(setting.name, new_value == fgettext("Enabled"))
elseif setting.type == "enum" then
local new_value = fields["dd_setting_value"]
core.settings:set(setting.name, new_value)
elseif setting.type == "int" then
local new_value = tonumber(fields["te_setting_value"])
if not new_value or math.floor(new_value) ~= new_value then
this.data.error_message = fgettext_ne("Please enter a valid integer.")
this.data.entered_text = fields["te_setting_value"]
core.update_formspec(this:get_formspec())
return true
end
if setting.min and new_value < setting.min then
this.data.error_message = fgettext_ne("The value must be at least $1.", setting.min)
this.data.entered_text = fields["te_setting_value"]
core.update_formspec(this:get_formspec())
return true
end
if setting.max and new_value > setting.max then
this.data.error_message = fgettext_ne("The value must not be larger than $1.", setting.max)
this.data.entered_text = fields["te_setting_value"]
core.update_formspec(this:get_formspec())
return true
end
core.settings:set(setting.name, new_value)
elseif setting.type == "float" then
local new_value = tonumber(fields["te_setting_value"])
if not new_value then
this.data.error_message = fgettext_ne("Please enter a valid number.")
this.data.entered_text = fields["te_setting_value"]
core.update_formspec(this:get_formspec())
return true
end
core.settings:set(setting.name, new_value)
elseif setting.type == "flags" then
local new_value = fields["te_setting_value"]
for _,value in ipairs(new_value:split(",", true)) do
value = value:trim()
local possible = "," .. setting.possible .. ","
if not possible:find("," .. value .. ",", 0, true) then
this.data.error_message = fgettext_ne("\"$1\" is not a valid flag.", value)
this.data.entered_text = fields["te_setting_value"]
core.update_formspec(this:get_formspec())
return true
end
end
core.settings:set(setting.name, new_value)
else
local new_value = fields["te_setting_value"]
core.settings:set(setting.name, new_value)
end
core.settings:write()
this:delete()
return true
end
if fields["btn_cancel"] then
this:delete()
return true
end
if fields["btn_browser_path"] then
core.show_file_open_dialog("dlg_browse_path", fgettext_ne("Select path"))
end
if fields["dlg_browse_path_accepted"] then
this.data.selected_path = fields["dlg_browse_path_accepted"]
core.update_formspec(this:get_formspec())
end
return false
end
local function create_settings_formspec(tabview, name, tabdata)
local formspec = "size[12,6.5;true]" ..
"tablecolumns[color;tree;text,width=32;text]" ..
"tableoptions[background=#00000000;border=false]" ..
"field[0.3,0.1;10.2,1;search_string;;" .. core.formspec_escape(search_string) .. "]" ..
"field_close_on_enter[search_string;false]" ..
"button[10.2,-0.2;2,1;search;" .. fgettext("Search") .. "]" ..
"table[0,0.8;12,4.5;list_settings;"
local current_level = 0
for _, entry in ipairs(settings) do
local name
if not core.settings:get_bool("main_menu_technical_settings") and entry.readable_name then
name = fgettext_ne(entry.readable_name)
else
name = entry.name
end
if entry.type == "category" then
current_level = entry.level
formspec = formspec .. "#FFFF00," .. current_level .. "," .. fgettext(name) .. ",,"
elseif entry.type == "bool" then
local value = get_current_value(entry)
if core.is_yes(value) then
value = fgettext("Enabled")
else
value = fgettext("Disabled")
end
formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. ","
.. value .. ","
elseif entry.type == "key" then
-- ignore key settings, since we have a special dialog for them
else
formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. ","
.. core.formspec_escape(get_current_value(entry)) .. ","
end
end
if #settings > 0 then
formspec = formspec:sub(1, -2) -- remove trailing comma
end
formspec = formspec .. ";" .. selected_setting .. "]" ..
"button[0,6;4,1;btn_back;".. fgettext("< Back to Settings page") .. "]" ..
"button[10,6;2,1;btn_edit;" .. fgettext("Edit") .. "]" ..
"button[7,6;3,1;btn_restore;" .. fgettext("Restore Default") .. "]" ..
"checkbox[0,5.3;cb_tech_settings;" .. fgettext("Show technical names") .. ";"
.. dump(core.settings:get_bool("main_menu_technical_settings")) .. "]"
return formspec
end
local function handle_settings_buttons(this, fields, tabname, tabdata)
local list_enter = false
if fields["list_settings"] then
selected_setting = core.get_table_index("list_settings")
if core.explode_table_event(fields["list_settings"]).type == "DCL" then
-- Directly toggle booleans
local setting = settings[selected_setting]
if setting and setting.type == "bool" then
local current_value = get_current_value(setting)
core.settings:set_bool(setting.name, not core.is_yes(current_value))
core.settings:write()
return true
else
list_enter = true
end
else
return true
end
end
if fields.search or fields.key_enter_field == "search_string" then
if search_string == fields.search_string then
if selected_setting > 0 then
-- Go to next result on enter press
local i = selected_setting + 1
local looped = false
while i > #settings or settings[i].type == "category" do
i = i + 1
if i > #settings then
-- Stop infinte looping
if looped then
return false
end
i = 1
looped = true
end
end
selected_setting = i
core.update_formspec(this:get_formspec())
return true
end
else
-- Search for setting
search_string = fields.search_string
settings, selected_setting = filter_settings(full_settings, search_string)
core.update_formspec(this:get_formspec())
end
return true
end
if fields["btn_edit"] or list_enter then
local setting = settings[selected_setting]
if setting and setting.type ~= "category" then
local edit_dialog = dialog_create("change_setting", create_change_setting_formspec,
handle_change_setting_buttons)
edit_dialog:set_parent(this)
this:hide()
edit_dialog:show()
end
return true
end
if fields["btn_restore"] then
local setting = settings[selected_setting]
if setting and setting.type ~= "category" then
core.settings:set(setting.name, setting.default)
core.settings:write()
core.update_formspec(this:get_formspec())
end
return true
end
if fields["btn_back"] then
this:delete()
return true
end
if fields["cb_tech_settings"] then
core.settings:set("main_menu_technical_settings", fields["cb_tech_settings"])
core.settings:write()
core.update_formspec(this:get_formspec())
return true
end
return false
end
function create_adv_settings_dlg()
local dlg = dialog_create("settings_advanced",
create_settings_formspec,
handle_settings_buttons,
nil)
return dlg
end
-- Generate minetest.conf.example and settings_translation_file.cpp
--assert(loadfile(core.get_builtin_path()..DIR_DELIM.."mainmenu"..DIR_DELIM.."generate_from_settingtypes.lua"))(parse_config_file(true, false))

View File

@@ -0,0 +1,83 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
gamemgr = {}
--------------------------------------------------------------------------------
function gamemgr.find_by_gameid(gameid)
for i=1,#gamemgr.games,1 do
if gamemgr.games[i].id == gameid then
return gamemgr.games[i], i
end
end
return nil, nil
end
--------------------------------------------------------------------------------
function gamemgr.get_game_mods(gamespec, retval)
if gamespec ~= nil and
gamespec.gamemods_path ~= nil and
gamespec.gamemods_path ~= "" then
get_mods(gamespec.gamemods_path, retval)
end
end
--------------------------------------------------------------------------------
function gamemgr.get_game_modlist(gamespec)
local retval = ""
local game_mods = {}
gamemgr.get_game_mods(gamespec, game_mods)
for i=1,#game_mods,1 do
if retval ~= "" then
retval = retval..","
end
retval = retval .. game_mods[i].name
end
return retval
end
--------------------------------------------------------------------------------
function gamemgr.get_game(index)
if index > 0 and index <= #gamemgr.games then
return gamemgr.games[index]
end
return nil
end
--------------------------------------------------------------------------------
function gamemgr.update_gamelist()
gamemgr.games = core.get_games()
end
--------------------------------------------------------------------------------
function gamemgr.gamelist()
local retval = ""
if #gamemgr.games > 0 then
retval = retval .. core.formspec_escape(gamemgr.games[1].name)
for i=2,#gamemgr.games,1 do
retval = retval .. "," .. core.formspec_escape(gamemgr.games[i].name)
end
end
return retval
end
--------------------------------------------------------------------------------
-- read initial data
--------------------------------------------------------------------------------
gamemgr.update_gamelist()

View File

@@ -0,0 +1,99 @@
local settings = ...
local concat = table.concat
local insert = table.insert
local sprintf = string.format
local rep = string.rep
local minetest_example_header = [[
# This file contains a list of all available settings and their default value for minetest.conf
# By default, all the settings are commented and not functional.
# Uncomment settings by removing the preceding #.
# minetest.conf is read by default from:
# ../minetest.conf
# ../../minetest.conf
# Any other path can be chosen by passing the path as a parameter
# to the program, eg. "minetest.exe --config ../minetest.conf.example".
# Further documentation:
# http://wiki.minetest.net/
]]
local function create_minetest_conf_example()
local result = { minetest_example_header }
for _, entry in ipairs(settings) do
if entry.type == "category" then
if entry.level == 0 then
insert(result, "#\n# " .. entry.name .. "\n#\n\n")
else
insert(result, rep("#", entry.level))
insert(result, "# " .. entry.name .. "\n\n")
end
else
if entry.comment ~= "" then
for _, comment_line in ipairs(entry.comment:split("\n", true)) do
insert(result, "# " .. comment_line .. "\n")
end
end
insert(result, "# type: " .. entry.type)
if entry.min then
insert(result, " min: " .. entry.min)
end
if entry.max then
insert(result, " max: " .. entry.max)
end
if entry.values then
insert(result, " values: " .. concat(entry.values, ", "))
end
if entry.possible then
insert(result, " possible values: " .. entry.possible:gsub(",", ", "))
end
insert(result, "\n")
local append
if entry.default ~= "" then
append = " " .. entry.default
end
insert(result, sprintf("# %s =%s\n\n", entry.name, append or ""))
end
end
return concat(result)
end
local translation_file_header = [[
// This file is automatically generated
// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files
// To update it, refer to the bottom of builtin/mainmenu/dlg_settings_advanced.lua
fake_function() {]]
local function create_translation_file()
local result = { translation_file_header }
for _, entry in ipairs(settings) do
if entry.type == "category" then
insert(result, sprintf("\tgettext(%q);", entry.name))
else
if entry.readable_name then
insert(result, sprintf("\tgettext(%q);", entry.readable_name))
end
if entry.comment ~= "" then
local comment_escaped = entry.comment:gsub("\n", "\\n")
comment_escaped = comment_escaped:gsub("\"", "\\\"")
insert(result, "\tgettext(\"" .. comment_escaped .. "\");")
end
end
end
insert(result, "}\n")
return concat(result, "\n")
end
local file = assert(io.open("minetest.conf.example", "w"))
file:write(create_minetest_conf_example())
file:close()
file = assert(io.open("src/settings_translation_file.cpp", "w"))
file:write(create_translation_file())
file:close()

167
builtin/mainmenu/init.lua Normal file
View File

@@ -0,0 +1,167 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
mt_color_grey = "#AAAAAA"
mt_color_blue = "#6389FF"
mt_color_green = "#72FF63"
mt_color_dark_green = "#25C191"
--for all other colors ask sfan5 to complete his work!
local menupath = core.get_mainmenu_path()
local basepath = core.get_builtin_path()
defaulttexturedir = core.get_texturepath_share() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
dofile(basepath .. DIR_DELIM .. "common" .. DIR_DELIM .. "async_event.lua")
dofile(basepath .. DIR_DELIM .. "common" .. DIR_DELIM .. "filterlist.lua")
dofile(basepath .. DIR_DELIM .. "fstk" .. DIR_DELIM .. "buttonbar.lua")
dofile(basepath .. DIR_DELIM .. "fstk" .. DIR_DELIM .. "dialog.lua")
dofile(basepath .. DIR_DELIM .. "fstk" .. DIR_DELIM .. "tabview.lua")
dofile(basepath .. DIR_DELIM .. "fstk" .. DIR_DELIM .. "ui.lua")
dofile(menupath .. DIR_DELIM .. "common.lua")
dofile(menupath .. DIR_DELIM .. "gamemgr.lua")
dofile(menupath .. DIR_DELIM .. "modmgr.lua")
dofile(menupath .. DIR_DELIM .. "store.lua")
dofile(menupath .. DIR_DELIM .. "textures.lua")
dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua")
if PLATFORM ~= "Android" then
dofile(menupath .. DIR_DELIM .. "dlg_create_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_mod.lua")
dofile(menupath .. DIR_DELIM .. "dlg_delete_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua")
end
local tabs = {}
tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
tabs.mods = dofile(menupath .. DIR_DELIM .. "tab_mods.lua")
tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
if PLATFORM == "Android" then
tabs.simple_main = dofile(menupath .. DIR_DELIM .. "tab_simple_main.lua")
else
tabs.local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua")
tabs.play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua")
tabs.texturepacks = dofile(menupath .. DIR_DELIM .. "tab_texturepacks.lua")
end
--------------------------------------------------------------------------------
local function main_event_handler(tabview, event)
if event == "MenuQuit" then
core.close()
end
return true
end
--------------------------------------------------------------------------------
local function init_globals()
-- Init gamedata
gamedata.worldindex = 0
if PLATFORM == "Android" then
local world_list = core.get_worlds()
local world_index
local found_singleplayerworld = false
for i, world in ipairs(world_list) do
if world.name == "singleplayerworld" then
found_singleplayerworld = true
world_index = i
break
end
end
if not found_singleplayerworld then
core.create_world("singleplayerworld", 1)
world_list = core.get_worlds()
for i, world in ipairs(world_list) do
if world.name == "singleplayerworld" then
world_index = i
break
end
end
end
gamedata.worldindex = world_index
else
menudata.worldlist = filterlist.create(
core.get_worlds,
compare_worlds,
-- Unique id comparison function
function(element, uid)
return element.name == uid
end,
-- Filter function
function(element, gameid)
return element.gameid == gameid
end
)
menudata.worldlist:add_sort_mechanism("alphabetic", sort_worlds_alphabetic)
menudata.worldlist:set_sortmode("alphabetic")
if not core.settings:get("menu_last_game") then
local default_game = core.settings:get("default_game") or "minetest"
core.settings:set("menu_last_game", default_game)
end
mm_texture.init()
end
-- Create main tabview
local tv_main = tabview_create("maintab", {x = 12, y = 5.4}, {x = 0, y = 0})
if PLATFORM == "Android" then
tv_main:add(tabs.simple_main)
tv_main:add(tabs.settings)
else
tv_main:set_autosave_tab(true)
tv_main:add(tabs.local_game)
tv_main:add(tabs.play_online)
tv_main:add(tabs.settings)
tv_main:add(tabs.texturepacks)
end
tv_main:add(tabs.mods)
tv_main:add(tabs.credits)
tv_main:set_global_event_handler(main_event_handler)
tv_main:set_fixed_size(false)
if PLATFORM ~= "Android" then
tv_main:set_tab(core.settings:get("maintab_LAST"))
end
ui.set_default("maintab")
tv_main:show()
-- Create modstore ui
if PLATFORM == "Android" then
modstore.init({x = 12, y = 6}, 3, 2)
else
modstore.init({x = 12, y = 8}, 4, 3)
end
ui.update()
core.sound_play("main_menu", true)
end
init_globals()

View File

@@ -0,0 +1,4 @@
-- helper file to be able to debug the simple menu on PC
-- without messing around with actual menu code!
PLATFORM = "Android"
dofile("builtin/mainmenu/init.lua")

570
builtin/mainmenu/modmgr.lua Normal file
View File

@@ -0,0 +1,570 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
function get_mods(path,retval,modpack)
local mods = core.get_dir_list(path, true)
for _, name in ipairs(mods) do
if name:sub(1, 1) ~= "." then
local prefix = path .. DIR_DELIM .. name .. DIR_DELIM
local toadd = {}
retval[#retval + 1] = toadd
local mod_conf = Settings(prefix .. "mod.conf"):to_table()
if mod_conf.name then
name = mod_conf.name
end
toadd.name = name
toadd.path = prefix
if modpack ~= nil and modpack ~= "" then
toadd.modpack = modpack
else
local modpackfile = io.open(prefix .. "modpack.txt")
if modpackfile then
modpackfile:close()
toadd.is_modpack = true
get_mods(prefix, retval, name)
end
end
end
end
end
--modmanager implementation
modmgr = {}
--------------------------------------------------------------------------------
function modmgr.extract(modfile)
if modfile.type == "zip" then
local tempfolder = os.tempfolder()
if tempfolder ~= nil and
tempfolder ~= "" then
core.create_dir(tempfolder)
if core.extract_zip(modfile.name,tempfolder) then
return tempfolder
end
end
end
return nil
end
-------------------------------------------------------------------------------
function modmgr.getbasefolder(temppath)
if temppath == nil then
return {
type = "invalid",
path = ""
}
end
local testfile = io.open(temppath .. DIR_DELIM .. "init.lua","r")
if testfile ~= nil then
testfile:close()
return {
type="mod",
path=temppath
}
end
testfile = io.open(temppath .. DIR_DELIM .. "modpack.txt","r")
if testfile ~= nil then
testfile:close()
return {
type="modpack",
path=temppath
}
end
local subdirs = core.get_dir_list(temppath, true)
--only single mod or modpack allowed
if #subdirs ~= 1 then
return {
type = "invalid",
path = ""
}
end
testfile =
io.open(temppath .. DIR_DELIM .. subdirs[1] ..DIR_DELIM .."init.lua","r")
if testfile ~= nil then
testfile:close()
return {
type="mod",
path= temppath .. DIR_DELIM .. subdirs[1]
}
end
testfile =
io.open(temppath .. DIR_DELIM .. subdirs[1] ..DIR_DELIM .."modpack.txt","r")
if testfile ~= nil then
testfile:close()
return {
type="modpack",
path=temppath .. DIR_DELIM .. subdirs[1]
}
end
return {
type = "invalid",
path = ""
}
end
--------------------------------------------------------------------------------
function modmgr.isValidModname(modpath)
if modpath:find("-") ~= nil then
return false
end
return true
end
--------------------------------------------------------------------------------
function modmgr.parse_register_line(line)
local pos1 = line:find("\"")
local pos2 = nil
if pos1 ~= nil then
pos2 = line:find("\"",pos1+1)
end
if pos1 ~= nil and pos2 ~= nil then
local item = line:sub(pos1+1,pos2-1)
if item ~= nil and
item ~= "" then
local pos3 = item:find(":")
if pos3 ~= nil then
local retval = item:sub(1,pos3-1)
if retval ~= nil and
retval ~= "" then
return retval
end
end
end
end
return nil
end
--------------------------------------------------------------------------------
function modmgr.parse_dofile_line(modpath,line)
local pos1 = line:find("\"")
local pos2 = nil
if pos1 ~= nil then
pos2 = line:find("\"",pos1+1)
end
if pos1 ~= nil and pos2 ~= nil then
local filename = line:sub(pos1+1,pos2-1)
if filename ~= nil and
filename ~= "" and
filename:find(".lua") then
return modmgr.identify_modname(modpath,filename)
end
end
return nil
end
--------------------------------------------------------------------------------
function modmgr.identify_modname(modpath,filename)
local testfile = io.open(modpath .. DIR_DELIM .. filename,"r")
if testfile ~= nil then
local line = testfile:read()
while line~= nil do
local modname = nil
if line:find("minetest.register_tool") then
modname = modmgr.parse_register_line(line)
end
if line:find("minetest.register_craftitem") then
modname = modmgr.parse_register_line(line)
end
if line:find("minetest.register_node") then
modname = modmgr.parse_register_line(line)
end
if line:find("dofile") then
modname = modmgr.parse_dofile_line(modpath,line)
end
if modname ~= nil then
testfile:close()
return modname
end
line = testfile:read()
end
testfile:close()
end
return nil
end
--------------------------------------------------------------------------------
function modmgr.render_modlist(render_list)
local retval = ""
if render_list == nil then
if modmgr.global_mods == nil then
modmgr.refresh_globals()
end
render_list = modmgr.global_mods
end
local list = render_list:get_list()
local last_modpack = nil
local retval = {}
for i, v in ipairs(list) do
local color = ""
if v.is_modpack then
local rawlist = render_list:get_raw_list()
color = mt_color_dark_green
for j = 1, #rawlist, 1 do
if rawlist[j].modpack == list[i].name and
rawlist[j].enabled ~= true then
-- Modpack not entirely enabled so showing as grey
color = mt_color_grey
break
end
end
elseif v.is_game_content then
color = mt_color_blue
elseif v.enabled then
color = mt_color_green
end
retval[#retval + 1] = color
if v.modpack ~= nil or v.typ == "game_mod" then
retval[#retval + 1] = "1"
else
retval[#retval + 1] = "0"
end
retval[#retval + 1] = core.formspec_escape(v.name)
end
return table.concat(retval, ",")
end
--------------------------------------------------------------------------------
function modmgr.get_dependencies(modfolder)
local toadd_hard = ""
local toadd_soft = ""
if modfolder ~= nil then
local filename = modfolder ..
DIR_DELIM .. "depends.txt"
local hard_dependencies = {}
local soft_dependencies = {}
local dependencyfile = io.open(filename,"r")
if dependencyfile then
local dependency = dependencyfile:read("*l")
while dependency do
dependency = dependency:gsub("\r", "")
if string.sub(dependency, -1, -1) == "?" then
table.insert(soft_dependencies, string.sub(dependency, 1, -2))
else
table.insert(hard_dependencies, dependency)
end
dependency = dependencyfile:read()
end
dependencyfile:close()
end
toadd_hard = table.concat(hard_dependencies, ",")
toadd_soft = table.concat(soft_dependencies, ",")
end
return toadd_hard, toadd_soft
end
--------------------------------------------------------------------------------
function modmgr.get_worldconfig(worldpath)
local filename = worldpath ..
DIR_DELIM .. "world.mt"
local worldfile = Settings(filename)
local worldconfig = {}
worldconfig.global_mods = {}
worldconfig.game_mods = {}
for key,value in pairs(worldfile:to_table()) do
if key == "gameid" then
worldconfig.id = value
elseif key:sub(0, 9) == "load_mod_" then
worldconfig.global_mods[key] = core.is_yes(value)
else
worldconfig[key] = value
end
end
--read gamemods
local gamespec = gamemgr.find_by_gameid(worldconfig.id)
gamemgr.get_game_mods(gamespec, worldconfig.game_mods)
return worldconfig
end
--------------------------------------------------------------------------------
function modmgr.installmod(modfilename,basename)
local modfile = modmgr.identify_filetype(modfilename)
local modpath = modmgr.extract(modfile)
if modpath == nil then
gamedata.errormessage = fgettext("Install Mod: file: \"$1\"", modfile.name) ..
fgettext("\nInstall Mod: unsupported filetype \"$1\" or broken archive", modfile.type)
return
end
local basefolder = modmgr.getbasefolder(modpath)
if basefolder.type == "modpack" then
local clean_path = nil
if basename ~= nil then
clean_path = "mp_" .. basename
end
if clean_path == nil then
clean_path = get_last_folder(cleanup_path(basefolder.path))
end
if clean_path ~= nil then
local targetpath = core.get_modpath() .. DIR_DELIM .. clean_path
if not core.copy_dir(basefolder.path,targetpath) then
gamedata.errormessage = fgettext("Failed to install $1 to $2", basename, targetpath)
end
else
gamedata.errormessage = fgettext("Install Mod: unable to find suitable foldername for modpack $1", modfilename)
end
end
if basefolder.type == "mod" then
local targetfolder = basename
if targetfolder == nil then
targetfolder = modmgr.identify_modname(basefolder.path,"init.lua")
end
--if heuristic failed try to use current foldername
if targetfolder == nil then
targetfolder = get_last_folder(basefolder.path)
end
if targetfolder ~= nil and modmgr.isValidModname(targetfolder) then
local targetpath = core.get_modpath() .. DIR_DELIM .. targetfolder
core.copy_dir(basefolder.path,targetpath)
else
gamedata.errormessage = fgettext("Install Mod: unable to find real modname for: $1", modfilename)
end
end
core.delete_dir(modpath)
modmgr.refresh_globals()
end
--------------------------------------------------------------------------------
function modmgr.preparemodlist(data)
local retval = {}
local global_mods = {}
local game_mods = {}
--read global mods
local modpath = core.get_modpath()
if modpath ~= nil and
modpath ~= "" then
get_mods(modpath,global_mods)
end
for i=1,#global_mods,1 do
global_mods[i].typ = "global_mod"
retval[#retval + 1] = global_mods[i]
end
--read game mods
local gamespec = gamemgr.find_by_gameid(data.gameid)
gamemgr.get_game_mods(gamespec, game_mods)
if #game_mods > 0 then
-- Add title
retval[#retval + 1] = {
typ = "game",
is_game_content = true,
name = fgettext("Subgame Mods")
}
end
for i=1,#game_mods,1 do
game_mods[i].typ = "game_mod"
game_mods[i].is_game_content = true
retval[#retval + 1] = game_mods[i]
end
if data.worldpath == nil then
return retval
end
--read world mod configuration
local filename = data.worldpath ..
DIR_DELIM .. "world.mt"
local worldfile = Settings(filename)
for key,value in pairs(worldfile:to_table()) do
if key:sub(1, 9) == "load_mod_" then
key = key:sub(10)
local element = nil
for i=1,#retval,1 do
if retval[i].name == key and
not retval[i].is_modpack then
element = retval[i]
break
end
end
if element ~= nil then
element.enabled = core.is_yes(value)
else
core.log("info", "Mod: " .. key .. " " .. dump(value) .. " but not found")
end
end
end
return retval
end
--------------------------------------------------------------------------------
function modmgr.comparemod(elem1,elem2)
if elem1 == nil or elem2 == nil then
return false
end
if elem1.name ~= elem2.name then
return false
end
if elem1.is_modpack ~= elem2.is_modpack then
return false
end
if elem1.typ ~= elem2.typ then
return false
end
if elem1.modpack ~= elem2.modpack then
return false
end
if elem1.path ~= elem2.path then
return false
end
return true
end
--------------------------------------------------------------------------------
function modmgr.mod_exists(basename)
if modmgr.global_mods == nil then
modmgr.refresh_globals()
end
if modmgr.global_mods:raw_index_by_uid(basename) > 0 then
return true
end
return false
end
--------------------------------------------------------------------------------
function modmgr.get_global_mod(idx)
if modmgr.global_mods == nil then
return nil
end
if idx == nil or idx < 1 or
idx > modmgr.global_mods:size() then
return nil
end
return modmgr.global_mods:get_list()[idx]
end
--------------------------------------------------------------------------------
function modmgr.refresh_globals()
modmgr.global_mods = filterlist.create(
modmgr.preparemodlist, --refresh
modmgr.comparemod, --compare
function(element,uid) --uid match
if element.name == uid then
return true
end
end,
nil, --filter
{}
)
modmgr.global_mods:add_sort_mechanism("alphabetic", sort_mod_list)
modmgr.global_mods:set_sortmode("alphabetic")
end
--------------------------------------------------------------------------------
function modmgr.identify_filetype(name)
if name:sub(-3):lower() == "zip" then
return {
name = name,
type = "zip"
}
end
if name:sub(-6):lower() == "tar.gz" or
name:sub(-3):lower() == "tgz"then
return {
name = name,
type = "tgz"
}
end
if name:sub(-6):lower() == "tar.bz2" then
return {
name = name,
type = "tbz"
}
end
if name:sub(-2):lower() == "7z" then
return {
name = name,
type = "7z"
}
end
return {
name = name,
type = "ukn"
}
end

614
builtin/mainmenu/store.lua Normal file
View File

@@ -0,0 +1,614 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
--modstore implementation
modstore = {}
--------------------------------------------------------------------------------
-- @function [parent=#modstore] init
function modstore.init(size, unsortedmods, searchmods)
modstore.mods_on_unsorted_page = unsortedmods
modstore.mods_on_search_page = searchmods
modstore.modsperpage = modstore.mods_on_unsorted_page
modstore.basetexturedir = core.get_texturepath() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
modstore.lastmodtitle = ""
modstore.last_search = ""
modstore.searchlist = filterlist.create(
function()
if modstore.modlist_unsorted ~= nil and
modstore.modlist_unsorted.data ~= nil then
return modstore.modlist_unsorted.data
end
return {}
end,
function(element,modid)
if element.id == modid then
return true
end
return false
end, --compare fct
nil, --uid match fct
function(element,substring)
if substring == nil or
substring == "" then
return false
end
substring = substring:upper()
if element.title ~= nil and
element.title:upper():find(substring) ~= nil then
return true
end
if element.details ~= nil and
element.details.author ~= nil and
element.details.author:upper():find(substring) ~= nil then
return true
end
if element.details ~= nil and
element.details.description ~= nil and
element.details.description:upper():find(substring) ~= nil then
return true
end
return false
end --filter fct
)
modstore.current_list = nil
modstore.tv_store = tabview_create("modstore",size,{x=0,y=0})
modstore.tv_store:set_global_event_handler(modstore.handle_events)
modstore.tv_store:add(
{
name = "unsorted",
caption = fgettext("Unsorted"),
cbf_formspec = modstore.unsorted_tab,
cbf_button_handler = modstore.handle_buttons,
on_change =
function() modstore.modsperpage = modstore.mods_on_unsorted_page end
}
)
modstore.tv_store:add(
{
name = "search",
caption = fgettext("Search"),
cbf_formspec = modstore.getsearchpage,
cbf_button_handler = modstore.handle_buttons,
on_change = modstore.activate_search_tab
}
)
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] nametoindex
function modstore.nametoindex(name)
for i=1,#modstore.tabnames,1 do
if modstore.tabnames[i] == name then
return i
end
end
return 1
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] showdownloading
function modstore.showdownloading(title)
local new_dlg = dialog_create("store_downloading",
function(data)
return "size[6,2]label[0.25,0.75;" ..
fgettext("Downloading $1, please wait...", data.title) .. "]"
end,
function(this,fields)
if fields["btn_hidden_close_download"] ~= nil then
if fields["btn_hidden_close_download"].successfull then
modstore.lastmodentry = fields["btn_hidden_close_download"]
modstore.successfulldialog(this)
else
this.parent:show()
this:delete()
modstore.lastmodtitle = ""
end
return true
end
return false
end,
nil)
new_dlg:set_parent(modstore.tv_store)
modstore.tv_store:hide()
new_dlg.data.title = title
new_dlg:show()
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] successfulldialog
function modstore.successfulldialog(downloading_dlg)
local new_dlg = dialog_create("store_downloading",
function(data)
local retval = ""
retval = retval .. "size[6,2,true]"
if modstore.lastmodentry ~= nil then
retval = retval .. "label[0,0.25;" .. fgettext("Successfully installed:") .. "]"
retval = retval .. "label[3,0.25;" .. modstore.lastmodentry.moddetails.title .. "]"
retval = retval .. "label[0,0.75;" .. fgettext("Shortname:") .. "]"
retval = retval .. "label[3,0.75;" .. core.formspec_escape(modstore.lastmodentry.moddetails.basename) .. "]"
end
retval = retval .. "button[2.2,1.5;1.5,0.5;btn_confirm_mod_successfull;" .. fgettext("Ok") .. "]"
return retval
end,
function(this,fields)
if fields["btn_confirm_mod_successfull"] ~= nil then
this.parent:show()
downloading_dlg:delete()
this:delete()
return true
end
return false
end,
nil)
new_dlg:set_parent(modstore.tv_store)
modstore.tv_store:hide()
new_dlg:show()
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] handle_buttons
function modstore.handle_buttons(parent, fields, name, data)
if fields["btn_modstore_page_up"] then
if modstore.current_list ~= nil and modstore.current_list.page > 0 then
modstore.current_list.page = modstore.current_list.page - 1
end
return true
end
if fields["btn_modstore_page_down"] then
if modstore.current_list ~= nil and
modstore.current_list.page <modstore.current_list.pagecount-1 then
modstore.current_list.page = modstore.current_list.page +1
end
return true
end
if fields["btn_modstore_search"] or
(fields["key_enter"] and fields["te_modstore_search"] ~= nil) then
modstore.last_search = fields["te_modstore_search"]
filterlist.set_filtercriteria(modstore.searchlist,fields["te_modstore_search"])
filterlist.refresh(modstore.searchlist)
modstore.currentlist = {
page = 0,
pagecount = math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage),
data = filterlist.get_list(modstore.searchlist),
}
return true
end
if fields["btn_modstore_close"] then
local maintab = ui.find_by_name("maintab")
parent:hide()
maintab:show()
return true
end
for key,value in pairs(fields) do
local foundat = key:find("btn_install_mod_")
if ( foundat == 1) then
local modid = tonumber(key:sub(17))
for i=1,#modstore.modlist_unsorted.data,1 do
if modstore.modlist_unsorted.data[i].id == modid then
local moddetails = modstore.modlist_unsorted.data[i].details
modstore.lastmodtitle = moddetails.title
if not core.handle_async(
function(param)
local fullurl = core.settings:get("modstore_download_url") ..
param.moddetails.download_url
if param.version ~= nil then
local found = false
for i=1,#param.moddetails.versions, 1 do
if param.moddetails.versions[i].date:sub(1,10) == param.version then
fullurl = core.settings:get("modstore_download_url") ..
param.moddetails.versions[i].download_url
found = true
end
end
if not found then
core.log("error","no download url found for version " .. dump(param.version))
return {
moddetails = param.moddetails,
successfull = false
}
end
end
if core.download_file(fullurl,param.filename) then
return {
texturename = param.texturename,
moddetails = param.moddetails,
filename = param.filename,
successfull = true
}
else
core.log("error","downloading " .. dump(fullurl) .. " failed")
return {
moddetails = param.moddetails,
successfull = false
}
end
end,
{
moddetails = moddetails,
version = fields["dd_version" .. modid],
filename = os.tempfolder() .. "_MODNAME_" .. moddetails.basename .. ".zip",
texturename = modstore.modlist_unsorted.data[i].texturename
},
function(result)
--print("Result from async: " .. dump(result.successfull))
if result.successfull then
modmgr.installmod(result.filename,result.moddetails.basename)
os.remove(result.filename)
else
gamedata.errormessage = "Failed to download " .. result.moddetails.title
end
if gamedata.errormessage == nil then
core.button_handler({btn_hidden_close_download=result})
else
core.button_handler({btn_hidden_close_download={successfull=false}})
end
end
) then
print("ERROR: async event failed")
gamedata.errormessage = "Failed to download " .. modstore.lastmodtitle
end
modstore.showdownloading(modstore.lastmodtitle)
return true
end
end
return true
end
end
return false
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] handle_events
function modstore.handle_events(this,event)
if (event == "MenuQuit") then
this:hide()
return true
end
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] update_modlist
function modstore.update_modlist()
modstore.modlist_unsorted = {}
modstore.modlist_unsorted.data = {}
modstore.modlist_unsorted.pagecount = 1
modstore.modlist_unsorted.page = 0
core.handle_async(
function(param)
return core.get_modstore_list()
end,
nil,
function(result)
if result ~= nil then
modstore.modlist_unsorted = {}
modstore.modlist_unsorted.data = result
if modstore.modlist_unsorted.data ~= nil then
modstore.modlist_unsorted.pagecount =
math.ceil((#modstore.modlist_unsorted.data / modstore.modsperpage))
else
modstore.modlist_unsorted.data = {}
modstore.modlist_unsorted.pagecount = 1
end
modstore.modlist_unsorted.page = 0
modstore.fetchdetails()
core.event_handler("Refresh")
end
end
)
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] fetchdetails
function modstore.fetchdetails()
for i=1,#modstore.modlist_unsorted.data,1 do
core.handle_async(
function(param)
param.details = core.get_modstore_details(tostring(param.modid))
return param
end,
{
modid=modstore.modlist_unsorted.data[i].id,
listindex=i
},
function(result)
if result ~= nil and
modstore.modlist_unsorted ~= nil
and modstore.modlist_unsorted.data ~= nil and
modstore.modlist_unsorted.data[result.listindex] ~= nil and
modstore.modlist_unsorted.data[result.listindex].id ~= nil then
modstore.modlist_unsorted.data[result.listindex].details = result.details
core.event_handler("Refresh")
end
end
)
end
end
--------------------------------------------------------------------------------
-- @function [parent=#modstore] getscreenshot
function modstore.getscreenshot(ypos,listentry)
if listentry.details ~= nil and
(listentry.details.screenshot_url == nil or
listentry.details.screenshot_url == "") then
if listentry.texturename == nil then
listentry.texturename = defaulttexturedir .. "no_screenshot.png"
end
return "image[0,".. ypos .. ";3,2;" ..
core.formspec_escape(listentry.texturename) .. "]"
end
if listentry.details ~= nil and
listentry.texturename == nil then
--make sure we don't download multiple times
listentry.texturename = "in progress"
--prepare url and filename
local fullurl = core.settings:get("modstore_download_url") ..
listentry.details.screenshot_url
local filename = os.tempfolder() .. "_MID_" .. listentry.id
--trigger download
core.handle_async(
--first param is downloadfct
function(param)
param.successfull = core.download_file(param.fullurl,param.filename)
return param
end,
--second parameter is data passed to async job
{
fullurl = fullurl,
filename = filename,
modid = listentry.id
},
--integrate result to raw list
function(result)
if result.successfull then
local found = false
for i=1,#modstore.modlist_unsorted.data,1 do
if modstore.modlist_unsorted.data[i].id == result.modid then
found = true
modstore.modlist_unsorted.data[i].texturename = result.filename
break
end
end
if found then
core.event_handler("Refresh")
else
core.log("error","got screenshot but didn't find matching mod: " .. result.modid)
end
end
end
)
end
if listentry.texturename ~= nil and
listentry.texturename ~= "in progress" then
return "image[0,".. ypos .. ";3,2;" ..
core.formspec_escape(listentry.texturename) .. "]"
end
return ""
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] getshortmodinfo
function modstore.getshortmodinfo(ypos,listentry,details)
local retval = ""
retval = retval .. "box[0," .. ypos .. ";11.4,1.75;#FFFFFF]"
--screenshot
retval = retval .. modstore.getscreenshot(ypos,listentry)
--title + author
retval = retval .."label[2.75," .. ypos .. ";" ..
core.formspec_escape(details.title) .. " (" .. details.author .. ")]"
--description
local descriptiony = ypos + 0.5
retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" ..
core.formspec_escape(details.description) .. ";]"
--rating
local ratingy = ypos
retval = retval .."label[7," .. ratingy .. ";" ..
fgettext("Rating") .. ":]"
retval = retval .. "label[8.7," .. ratingy .. ";" .. details.rating .."]"
--versions (IMPORTANT has to be defined AFTER rating)
if details.versions ~= nil and
#details.versions > 1 then
local versiony = ypos + 0.05
retval = retval .. "dropdown[9.1," .. versiony .. ";2.48,0.25;dd_version" .. details.id .. ";"
local versions = ""
for i=1,#details.versions , 1 do
if versions ~= "" then
versions = versions .. ","
end
versions = versions .. details.versions[i].date:sub(1,10)
end
retval = retval .. versions .. ";1]"
end
if details.basename then
--install button
local buttony = ypos + 1.2
retval = retval .."button[9.1," .. buttony .. ";2.5,0.5;btn_install_mod_" .. details.id .. ";"
if modmgr.mod_exists(details.basename) then
retval = retval .. fgettext("re-Install") .."]"
else
retval = retval .. fgettext("Install") .."]"
end
end
return retval
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] getmodlist
function modstore.getmodlist(list,yoffset)
modstore.current_list = list
if yoffset == nil then
yoffset = 0
end
local sb_y_start = 0.2 + yoffset
local sb_y_end = (modstore.modsperpage * 1.75) + ((modstore.modsperpage-1) * 0.15)
local close_button = "button[4," .. (sb_y_end + 0.3 + yoffset) ..
";4,0.5;btn_modstore_close;" .. fgettext("Close store") .. "]"
if #list.data == 0 then
return close_button
end
local scrollbar = ""
scrollbar = scrollbar .. "label[0.1,".. (sb_y_end + 0.25 + yoffset) ..";"
.. fgettext("Page $1 of $2", list.page+1, list.pagecount) .. "]"
scrollbar = scrollbar .. "box[11.6," .. sb_y_start .. ";0.28," .. sb_y_end .. ";#000000]"
local scrollbarpos = (sb_y_start + 0.5) +
((sb_y_end -1.6)/(list.pagecount-1)) * list.page
scrollbar = scrollbar .. "box[11.6," ..scrollbarpos .. ";0.28,0.5;#32CD32]"
scrollbar = scrollbar .. "button[11.6," .. (sb_y_start)
.. ";0.5,0.5;btn_modstore_page_up;^]"
scrollbar = scrollbar .. "button[11.6," .. (sb_y_start + sb_y_end - 0.5)
.. ";0.5,0.5;btn_modstore_page_down;v]"
local retval = ""
local endmod = (list.page * modstore.modsperpage) + modstore.modsperpage
if (endmod > #list.data) then
endmod = #list.data
end
for i=(list.page * modstore.modsperpage) +1, endmod, 1 do
--getmoddetails
local details = list.data[i].details
if details == nil then
details = {}
details.title = list.data[i].title
details.author = ""
details.rating = -1
details.description = ""
end
if details ~= nil then
local screenshot_ypos =
yoffset +(i-1 - (list.page * modstore.modsperpage))*1.9 +0.2
retval = retval .. modstore.getshortmodinfo(screenshot_ypos,
list.data[i],
details)
end
end
return retval .. scrollbar .. close_button
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] getsearchpage
function modstore.getsearchpage(tabview, name, tabdata)
local retval = ""
local search = ""
if modstore.last_search ~= nil then
search = modstore.last_search
end
retval = retval ..
"button[9.5,0.2;2.5,0.5;btn_modstore_search;".. fgettext("Search") .. "]" ..
"field[0.5,0.5;9,0.5;te_modstore_search;;" .. search .. "]"
retval = retval ..
modstore.getmodlist(
modstore.currentlist,
1.75)
return retval;
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] unsorted_tab
function modstore.unsorted_tab()
return modstore.getmodlist(modstore.modlist_unsorted)
end
--------------------------------------------------------------------------------
--@function [parent=#modstore] activate_search_tab
function modstore.activate_search_tab(type, old_tab, new_tab)
if old_tab == new_tab then
return
end
filterlist.set_filtercriteria(modstore.searchlist,modstore.last_search)
filterlist.refresh(modstore.searchlist)
modstore.modsperpage = modstore.mods_on_search_page
modstore.currentlist = {
page = 0,
pagecount =
math.ceil(filterlist.size(modstore.searchlist) / modstore.modsperpage),
data = filterlist.get_list(modstore.searchlist),
}
end

View File

@@ -0,0 +1,106 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local core_developers = {
"Perttu Ahola (celeron55) <celeron55@gmail.com>",
"sfan5 <sfan5@live.de>",
"ShadowNinja <shadowninja@minetest.net>",
"Nathanaël Courant (Nore/Ekdohibs) <nore@mesecons.net>",
"Loic Blot (nerzhul/nrz) <loic.blot@unix-experience.fr>",
"paramat",
"Craig Robbins (Zeno) <craig.d.robbins@gmail.com>",
"Auke Kok (sofar) <sofar@foo-projects.org>",
"rubenwardy <rw@rubenwardy.com>",
"Krock/SmallJoker <mk939@ymail.com>",
}
local active_contributors = {
"red-001 <red-001@outlook.ie> [CSM & Menu fixes]",
"Dániel Juhász (juhdanad) <juhdanad@gmail.com> [Audiovisuals: lighting]",
"numberZero [Audiovisuals: meshgen]",
"Lars Hofhansl <larsh@apache.org> [Occulusion culling, fixes]",
"Jean-Patrick G (kilbith) <jeanpatrick.guerrero@gmail.com> [Audiovisuals]",
"Vincent Glize (Dumbeldor) <vincent.glize@live.fr> [CSM]",
"bigfoot547 [CSM]",
"Rogier <rogier777@gmail.com> [Fixes]",
"Wuzzy [Audiovisuals]",
"Shara/Ezhh [Settings]",
}
local previous_core_developers = {
"BlockMen",
"Maciej Kasatkin (RealBadAngel) [RIP]",
"Lisa Milne (darkrose) <lisa@ltmnet.com>",
"proller",
"Ilya Zhuravlev (xyz) <xyz@minetest.net>",
"PilzAdam <pilzadam@minetest.net>",
"est31 <MTest31@outlook.com>",
"kahrl <kahrl@gmx.net>",
"Ryan Kwolek (kwolekr) <kwolekr@minetest.net>",
"sapier",
}
local previous_contributors = {
"Gregory Currie (gregorycu) [optimisation]",
"Diego Martínez (kaeza) <kaeza@users.sf.net>",
"T4im [Profiler]",
"TeTpaAka [Hand overriding, nametag colors]",
"HybridDog [Fixes]",
"Duane Robertson <duane@duanerobertson.com> [MGValleys]",
"neoascetic [OS X Fixes]",
"TriBlade9 <triblade9@mail.com> [Audiovisuals]",
"Jurgen Doser (doserj) <jurgen.doser@gmail.com> [Fixes]",
"MirceaKitsune <mirceakitsune@gmail.com> [Audiovisuals]",
"Guiseppe Bilotta (Oblomov) <guiseppe.bilotta@gmail.com> [Fixes]",
"matttpt <matttpt@gmail.com> [Fixes]",
"Nils Dagsson Moskopp (erlehmann) <nils@dieweltistgarnichtso.net> [Minetest Logo]",
"Jeija <jeija@mesecons.net> [HTTP, particles]",
}
local function buildCreditList(source)
local ret = {}
for i = 1, #source do
ret[i] = core.formspec_escape(source[i])
end
return table.concat(ret, ",,")
end
return {
name = "credits",
caption = fgettext("Credits"),
cbf_formspec = function(tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
local version = core.get_version()
return "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" ..
"label[0.5,3.2;" .. version.project .. " " .. version.string .. "]" ..
"label[0.5,3.5;http://minetest.net]" ..
"tablecolumns[color;text]" ..
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
"table[3.5,-0.25;8.5,6.05;list_credits;" ..
"#FFFF00," .. fgettext("Core Developers") .. ",," ..
buildCreditList(core_developers) .. ",,," ..
"#FFFF00," .. fgettext("Active Contributors") .. ",," ..
buildCreditList(active_contributors) .. ",,," ..
"#FFFF00," .. fgettext("Previous Core Developers") ..",," ..
buildCreditList(previous_core_developers) .. ",,," ..
"#FFFF00," .. fgettext("Previous Contributors") .. ",," ..
buildCreditList(previous_contributors) .. "," ..
";1]"
end
}

View File

@@ -0,0 +1,317 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function current_game()
local last_game_id = core.settings:get("menu_last_game")
local game, index = gamemgr.find_by_gameid(last_game_id)
return game
end
local function singleplayer_refresh_gamebar()
local old_bar = ui.find_by_name("game_button_bar")
if old_bar ~= nil then
old_bar:delete()
end
local function game_buttonbar_button_handler(fields)
for key,value in pairs(fields) do
for j=1,#gamemgr.games,1 do
if ("game_btnbar_" .. gamemgr.games[j].id == key) then
mm_texture.update("singleplayer", gamemgr.games[j])
core.set_topleft_text(gamemgr.games[j].name)
core.settings:set("menu_last_game",gamemgr.games[j].id)
menudata.worldlist:set_filtercriteria(gamemgr.games[j].id)
local index = filterlist.get_current_index(menudata.worldlist,
tonumber(core.settings:get("mainmenu_last_selected_world")))
if not index or index < 1 then
local selected = core.get_textlist_index("sp_worlds")
if selected ~= nil and selected < #menudata.worldlist:get_list() then
index = selected
else
index = #menudata.worldlist:get_list()
end
end
menu_worldmt_legacy(index)
return true
end
end
end
end
local btnbar = buttonbar_create("game_button_bar",
game_buttonbar_button_handler,
{x=-0.3,y=5.9}, "horizontal", {x=12.4,y=1.15})
for i=1,#gamemgr.games,1 do
local btn_name = "game_btnbar_" .. gamemgr.games[i].id
local image = nil
local text = nil
local tooltip = core.formspec_escape(gamemgr.games[i].name)
if gamemgr.games[i].menuicon_path ~= nil and
gamemgr.games[i].menuicon_path ~= "" then
image = core.formspec_escape(gamemgr.games[i].menuicon_path)
else
local part1 = gamemgr.games[i].id:sub(1,5)
local part2 = gamemgr.games[i].id:sub(6,10)
local part3 = gamemgr.games[i].id:sub(11)
text = part1 .. "\n" .. part2
if part3 ~= nil and
part3 ~= "" then
text = text .. "\n" .. part3
end
end
btnbar:add_button(btn_name, text, image, tooltip)
end
end
local function get_formspec(tabview, name, tabdata)
local retval = ""
local index = filterlist.get_current_index(menudata.worldlist,
tonumber(core.settings:get("mainmenu_last_selected_world"))
)
retval = retval ..
"button[4,4.15;2.6,0.5;world_delete;".. fgettext("Delete") .. "]" ..
"button[6.5,4.15;2.8,0.5;world_create;".. fgettext("New") .. "]" ..
"button[9.2,4.15;2.55,0.5;world_configure;".. fgettext("Configure") .. "]" ..
"label[4,-0.25;".. fgettext("Select World:") .. "]"..
"checkbox[0.25,0.25;cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
dump(core.settings:get_bool("creative_mode")) .. "]"..
"checkbox[0.25,0.7;cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
dump(core.settings:get_bool("enable_damage")) .. "]"..
"checkbox[0.25,1.15;cb_server;".. fgettext("Host Server") ..";" ..
dump(core.settings:get_bool("enable_server")) .. "]" ..
"textlist[4,0.25;7.5,3.7;sp_worlds;" ..
menu_render_worldlist() ..
";" .. index .. "]"
if core.settings:get_bool("enable_server") then
retval = retval ..
"button[8.5,5;3.25,0.5;play;".. fgettext("Host Game") .. "]" ..
"checkbox[0.25,1.6;cb_server_announce;" .. fgettext("Announce Server") .. ";" ..
dump(core.settings:get_bool("server_announce")) .. "]" ..
"label[0.25,2.2;" .. fgettext("Name/Password") .. "]" ..
"field[0.55,3.2;3.5,0.5;te_playername;;" ..
core.formspec_escape(core.settings:get("name")) .. "]" ..
"pwdfield[0.55,4;3.5,0.5;te_passwd;]"
local bind_addr = core.settings:get("bind_address")
if bind_addr ~= nil and bind_addr ~= "" then
retval = retval ..
"field[0.55,5.2;2.25,0.5;te_serveraddr;" .. fgettext("Bind Address") .. ";" ..
core.formspec_escape(core.settings:get("bind_address")) .. "]" ..
"field[2.8,5.2;1.25,0.5;te_serverport;" .. fgettext("Port") .. ";" ..
core.formspec_escape(core.settings:get("port")) .. "]"
else
retval = retval ..
"field[0.55,5.2;3.5,0.5;te_serverport;" .. fgettext("Server Port") .. ";" ..
core.formspec_escape(core.settings:get("port")) .. "]"
end
else
retval = retval ..
"button[8.5,5;3.25,0.5;play;".. fgettext("Play Game") .. "]"
end
return retval
end
local function main_button_handler(this, fields, name, tabdata)
assert(name == "local")
local world_doubleclick = false
if fields["sp_worlds"] ~= nil then
local event = core.explode_textlist_event(fields["sp_worlds"])
local selected = core.get_textlist_index("sp_worlds")
menu_worldmt_legacy(selected)
if event.type == "DCL" then
world_doubleclick = true
end
if event.type == "CHG" and selected ~= nil then
core.settings:set("mainmenu_last_selected_world",
menudata.worldlist:get_raw_index(selected))
return true
end
end
if menu_handle_key_up_down(fields,"sp_worlds","mainmenu_last_selected_world") then
return true
end
if fields["cb_creative_mode"] then
core.settings:set("creative_mode", fields["cb_creative_mode"])
local selected = core.get_textlist_index("sp_worlds")
menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"])
return true
end
if fields["cb_enable_damage"] then
core.settings:set("enable_damage", fields["cb_enable_damage"])
local selected = core.get_textlist_index("sp_worlds")
menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"])
return true
end
if fields["cb_server"] then
core.settings:set("enable_server", fields["cb_server"])
return true
end
if fields["cb_server_announce"] then
core.settings:set("server_announce", fields["cb_server_announce"])
local selected = core.get_textlist_index("srv_worlds")
menu_worldmt(selected, "server_announce", fields["cb_server_announce"])
return true
end
if fields["play"] ~= nil or world_doubleclick or fields["key_enter"] then
local selected = core.get_textlist_index("sp_worlds")
gamedata.selected_world = menudata.worldlist:get_raw_index(selected)
if core.settings:get_bool("enable_server") then
if selected ~= nil and gamedata.selected_world ~= 0 then
gamedata.playername = fields["te_playername"]
gamedata.password = fields["te_passwd"]
gamedata.port = fields["te_serverport"]
gamedata.address = ""
core.settings:set("port",gamedata.port)
if fields["te_serveraddr"] ~= nil then
core.settings:set("bind_address",fields["te_serveraddr"])
end
--update last game
local world = menudata.worldlist:get_raw_element(gamedata.selected_world)
if world then
local game, index = gamemgr.find_by_gameid(world.gameid)
core.settings:set("menu_last_game", game.id)
end
core.start()
else
gamedata.errormessage =
fgettext("No world created or selected!")
end
else
if selected ~= nil and gamedata.selected_world ~= 0 then
gamedata.singleplayer = true
core.start()
else
gamedata.errormessage =
fgettext("No world created or selected!")
end
return true
end
end
if fields["world_create"] ~= nil then
local create_world_dlg = create_create_world_dlg(true)
create_world_dlg:set_parent(this)
this:hide()
create_world_dlg:show()
mm_texture.update("singleplayer",current_game())
return true
end
if fields["world_delete"] ~= nil then
local selected = core.get_textlist_index("sp_worlds")
if selected ~= nil and
selected <= menudata.worldlist:size() then
local world = menudata.worldlist:get_list()[selected]
if world ~= nil and
world.name ~= nil and
world.name ~= "" then
local index = menudata.worldlist:get_raw_index(selected)
local delete_world_dlg = create_delete_world_dlg(world.name,index)
delete_world_dlg:set_parent(this)
this:hide()
delete_world_dlg:show()
mm_texture.update("singleplayer",current_game())
end
end
return true
end
if fields["world_configure"] ~= nil then
local selected = core.get_textlist_index("sp_worlds")
if selected ~= nil then
local configdialog =
create_configure_world_dlg(
menudata.worldlist:get_raw_index(selected))
if (configdialog ~= nil) then
configdialog:set_parent(this)
this:hide()
configdialog:show()
mm_texture.update("singleplayer",current_game())
end
end
return true
end
end
local function on_change(type, old_tab, new_tab)
local buttonbar = ui.find_by_name("game_button_bar")
if ( buttonbar == nil ) then
singleplayer_refresh_gamebar()
buttonbar = ui.find_by_name("game_button_bar")
end
if (type == "ENTER") then
local game = current_game()
if game then
menudata.worldlist:set_filtercriteria(game.id)
core.set_topleft_text(game.name)
mm_texture.update("singleplayer",game)
end
buttonbar:show()
else
menudata.worldlist:set_filtercriteria(nil)
buttonbar:hide()
core.set_topleft_text("")
mm_texture.update(new_tab,nil)
end
end
--------------------------------------------------------------------------------
return {
name = "local",
caption = fgettext("Local Game"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
}

View File

@@ -0,0 +1,185 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
if modmgr.global_mods == nil then
modmgr.refresh_globals()
end
if tabdata.selected_mod == nil then
tabdata.selected_mod = 1
end
local retval =
"label[0.05,-0.25;".. fgettext("Installed Mods:") .. "]" ..
"tablecolumns[color;tree;text]" ..
"table[0,0.25;5.1,5;modlist;" ..
modmgr.render_modlist(modmgr.global_mods) ..
";" .. tabdata.selected_mod .. "]"
retval = retval ..
-- "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" ..
-- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization
-- "button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" ..
-- TODO Disabled due to service being offline, and not likely to come online again, in this form
-- "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]"
""
local selected_mod = nil
if filterlist.size(modmgr.global_mods) >= tabdata.selected_mod then
selected_mod = modmgr.global_mods:get_list()[tabdata.selected_mod]
end
if selected_mod ~= nil then
local modscreenshot = nil
--check for screenshot beeing available
local screenshotfilename = selected_mod.path .. DIR_DELIM .. "screenshot.png"
local error = nil
local screenshotfile,error = io.open(screenshotfilename,"r")
if error == nil then
screenshotfile:close()
modscreenshot = screenshotfilename
end
if modscreenshot == nil then
modscreenshot = defaulttexturedir .. "no_screenshot.png"
end
retval = retval
.. "image[5.5,0;3,2;" .. core.formspec_escape(modscreenshot) .. "]"
.. "label[8.25,0.6;" .. selected_mod.name .. "]"
local descriptionlines = nil
error = nil
local descriptionfilename = selected_mod.path .. "description.txt"
local descriptionfile,error = io.open(descriptionfilename,"r")
if error == nil then
local descriptiontext = descriptionfile:read("*all")
descriptionlines = core.wrap_text(descriptiontext, 42, true)
descriptionfile:close()
else
descriptionlines = {}
descriptionlines[#descriptionlines + 1] = fgettext("No mod description available")
end
retval = retval ..
"label[5.5,1.7;".. fgettext("Mod information:") .. "]" ..
"textlist[5.5,2.2;6.2,2.4;description;"
for i=1,#descriptionlines,1 do
retval = retval .. core.formspec_escape(descriptionlines[i]) .. ","
end
if selected_mod.is_modpack then
retval = retval .. ";0]" ..
"button[10,4.85;2,0.5;btn_mod_mgr_rename_modpack;" ..
fgettext("Rename") .. "]"
retval = retval .. "button[5.5,4.85;4.5,0.5;btn_mod_mgr_delete_mod;"
.. fgettext("Uninstall selected modpack") .. "]"
else
--show dependencies
local toadd_hard, toadd_soft = modmgr.get_dependencies(selected_mod.path)
if toadd_hard == "" and toadd_soft == "" then
retval = retval .. "," .. fgettext("No dependencies.")
else
if toadd_hard ~= "" then
retval = retval .. "," .. fgettext("Dependencies:") .. ","
retval = retval .. toadd_hard
end
if toadd_soft ~= "" then
if toadd_hard ~= "" then
retval = retval .. ","
end
retval = retval .. "," .. fgettext("Optional dependencies:") .. ","
retval = retval .. toadd_soft
end
end
retval = retval .. ";0]"
retval = retval .. "button[5.5,4.85;4.5,0.5;btn_mod_mgr_delete_mod;"
.. fgettext("Uninstall selected mod") .. "]"
end
end
return retval
end
--------------------------------------------------------------------------------
local function handle_buttons(tabview, fields, tabname, tabdata)
if fields["modlist"] ~= nil then
local event = core.explode_table_event(fields["modlist"])
tabdata.selected_mod = event.row
return true
end
if fields["btn_mod_mgr_install_local"] ~= nil then
core.show_file_open_dialog("mod_mgt_open_dlg",fgettext("Select Mod File:"))
return true
end
if fields["btn_modstore"] ~= nil then
local modstore_ui = ui.find_by_name("modstore")
if modstore_ui ~= nil then
tabview:hide()
modstore.update_modlist()
modstore_ui:show()
else
print("modstore ui element not found")
end
return true
end
if fields["btn_mod_mgr_rename_modpack"] ~= nil then
local dlg_renamemp = create_rename_modpack_dlg(tabdata.selected_mod)
dlg_renamemp:set_parent(tabview)
tabview:hide()
dlg_renamemp:show()
return true
end
if fields["btn_mod_mgr_delete_mod"] ~= nil then
local dlg_delmod = create_delete_mod_dlg(tabdata.selected_mod)
dlg_delmod:set_parent(tabview)
tabview:hide()
dlg_delmod:show()
return true
end
if fields["mod_mgt_open_dlg_accepted"] ~= nil and
fields["mod_mgt_open_dlg_accepted"] ~= "" then
modmgr.installmod(fields["mod_mgt_open_dlg_accepted"],nil)
return true
end
return false
end
--------------------------------------------------------------------------------
return {
name = "mods",
caption = fgettext("Mods"),
cbf_formspec = get_formspec,
cbf_button_handler = handle_buttons,
on_change = gamemgr.update_gamelist
}

View File

@@ -0,0 +1,350 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
-- Update the cached supported proto info,
-- it may have changed after a change by the settings menu.
common_update_cached_supp_proto()
local fav_selected = nil
if menudata.search_result then
fav_selected = menudata.search_result[tabdata.fav_selected]
else
fav_selected = menudata.favorites[tabdata.fav_selected]
end
if not tabdata.search_for then
tabdata.search_for = ""
end
local retval =
-- Search
"field[0.15,0.35;6.05,0.27;te_search;;"..core.formspec_escape(tabdata.search_for).."]"..
"button[5.8,0.1;2,0.1;btn_mp_search;" .. fgettext("Search") .. "]" ..
-- Address / Port
"label[7.75,-0.25;" .. fgettext("Address / Port") .. "]" ..
"field[8,0.65;3.25,0.5;te_address;;" ..
core.formspec_escape(core.settings:get("address")) .. "]" ..
"field[11.1,0.65;1.4,0.5;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
-- Name / Password
"label[7.75,0.95;" .. fgettext("Name / Password") .. "]" ..
"field[8,1.85;2.9,0.5;te_name;;" ..
core.formspec_escape(core.settings:get("name")) .. "]" ..
"pwdfield[10.73,1.85;1.77,0.5;te_pwd;]" ..
-- Description Background
"box[7.73,2.25;4.25,2.6;#999999]"..
-- Connect
"button[10.1,5.15;2,0.5;btn_mp_connect;" .. fgettext("Connect") .. "]"
if tabdata.fav_selected and fav_selected then
if gamedata.fav then
retval = retval .. "button[7.75,5.15;2.3,0.5;btn_delete_favorite;" ..
fgettext("Del. Favorite") .. "]"
end
if fav_selected.description then
retval = retval .. "textarea[8.1,2.3;4.23,2.9;;" ..
core.formspec_escape((gamedata.serverdescription or ""), true) .. ";]"
end
end
--favourites
retval = retval .. "tablecolumns[" ..
image_column(fgettext("Favorite"), "favorite") .. ";" ..
image_column(fgettext("Ping")) .. ",padding=0.25;" ..
"color,span=3;" ..
"text,align=right;" .. -- clients
"text,align=center,padding=0.25;" .. -- "/"
"text,align=right,padding=0.25;" .. -- clients_max
image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
"color,span=1;" ..
"text,padding=1]" ..
"table[-0.15,0.6;7.75,5.15;favourites;"
if menudata.search_result then
for i = 1, #menudata.search_result do
local favs = core.get_favorites("local")
local server = menudata.search_result[i]
for fav_id = 1, #favs do
if server.address == favs[fav_id].address and
server.port == favs[fav_id].port then
server.is_favorite = true
end
end
if i ~= 1 then
retval = retval .. ","
end
retval = retval .. render_serverlist_row(server, server.is_favorite)
end
elseif #menudata.favorites > 0 then
local favs = core.get_favorites("local")
if #favs > 0 then
for i = 1, #favs do
for j = 1, #menudata.favorites do
if menudata.favorites[j].address == favs[i].address and
menudata.favorites[j].port == favs[i].port then
table.insert(menudata.favorites, i, table.remove(menudata.favorites, j))
end
end
if favs[i].address ~= menudata.favorites[i].address then
table.insert(menudata.favorites, i, favs[i])
end
end
end
retval = retval .. render_serverlist_row(menudata.favorites[1], (#favs > 0))
for i = 2, #menudata.favorites do
retval = retval .. "," .. render_serverlist_row(menudata.favorites[i], (i <= #favs))
end
end
if tabdata.fav_selected then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
end
return retval
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
local serverlist = menudata.search_result or menudata.favorites
if fields.te_name then
gamedata.playername = fields.te_name
core.settings:set("name", fields.te_name)
end
if fields.favourites then
local event = core.explode_table_event(fields.favourites)
local fav = serverlist[event.row]
if event.type == "DCL" then
if event.row <= #serverlist then
if menudata.favorites_is_public and
not is_server_protocol_compat_or_error(
fav.proto_min, fav.proto_max) then
return true
end
gamedata.address = fav.address
gamedata.port = fav.port
gamedata.playername = fields.te_name
gamedata.selected_world = 0
if fields.te_pwd then
gamedata.password = fields.te_pwd
end
gamedata.servername = fav.name
gamedata.serverdescription = fav.description
if gamedata.address and gamedata.port then
core.settings:set("address", gamedata.address)
core.settings:set("remote_port", gamedata.port)
core.start()
end
end
return true
end
if event.type == "CHG" then
if event.row <= #serverlist then
gamedata.fav = false
local favs = core.get_favorites("local")
local address = fav.address
local port = fav.port
gamedata.serverdescription = fav.description
for i = 1, #favs do
if fav.address == favs[i].address and
fav.port == favs[i].port then
gamedata.fav = true
end
end
if address and port then
core.settings:set("address", address)
core.settings:set("remote_port", port)
end
tabdata.fav_selected = event.row
end
return true
end
end
if fields.key_up or fields.key_down then
local fav_idx = core.get_table_index("favourites")
local fav = serverlist[fav_idx]
if fav_idx then
if fields.key_up and fav_idx > 1 then
fav_idx = fav_idx - 1
elseif fields.key_down and fav_idx < #menudata.favorites then
fav_idx = fav_idx + 1
end
else
fav_idx = 1
end
if not menudata.favorites or not fav then
tabdata.fav_selected = 0
return true
end
local address = fav.address
local port = fav.port
gamedata.serverdescription = fav.description
if address and port then
core.settings:set("address", address)
core.settings:set("remote_port", port)
end
tabdata.fav_selected = fav_idx
return true
end
if fields.btn_delete_favorite then
local current_favourite = core.get_table_index("favourites")
if not current_favourite then return end
core.delete_favorite(current_favourite)
asyncOnlineFavourites()
tabdata.fav_selected = nil
core.settings:set("address", "")
core.settings:set("remote_port", "30000")
return true
end
if fields.btn_mp_search or fields.key_enter_field == "te_search" then
tabdata.fav_selected = 1
local input = fields.te_search:lower()
tabdata.search_for = fields.te_search
if #menudata.favorites < 2 then
return true
end
menudata.search_result = {}
-- setup the keyword list
local keywords = {}
for word in input:gmatch("%S+") do
table.insert(keywords, word)
end
if #keywords == 0 then
menudata.search_result = nil
return true
end
-- Search the serverlist
local search_result = {}
for i = 1, #menudata.favorites do
local server = menudata.favorites[i]
local found = 0
for k = 1, #keywords do
local keyword = keywords[k]
if server.name then
local name = server.name:lower()
local _, count = name:gsub(keyword, keyword)
found = found + count * 4
end
if server.description then
local desc = server.description:lower()
local _, count = desc:gsub(keyword, keyword)
found = found + count * 2
end
end
if found > 0 then
local points = (#menudata.favorites - i) / 5 + found
server.points = points
table.insert(search_result, server)
end
end
if #search_result > 0 then
table.sort(search_result, function(a, b)
return a.points > b.points
end)
menudata.search_result = search_result
local first_server = search_result[1]
core.settings:set("address", first_server.address)
core.settings:set("remote_port", first_server.port)
end
return true
end
if (fields.btn_mp_connect or fields.key_enter)
and fields.te_address ~= "" and fields.te_port then
gamedata.playername = fields.te_name
gamedata.password = fields.te_pwd
gamedata.address = fields.te_address
gamedata.port = fields.te_port
gamedata.selected_world = 0
local fav_idx = core.get_table_index("favourites")
local fav = serverlist[fav_idx]
if fav_idx and fav_idx <= #serverlist and
fav.address == fields.te_address and
fav.port == fields.te_port then
gamedata.servername = fav.name
gamedata.serverdescription = fav.description
if menudata.favorites_is_public and
not is_server_protocol_compat_or_error(
fav.proto_min, fav.proto_max) then
return true
end
else
gamedata.servername = ""
gamedata.serverdescription = ""
end
core.settings:set("address", fields.te_address)
core.settings:set("remote_port", fields.te_port)
core.start()
return true
end
return false
end
local function on_change(type, old_tab, new_tab)
if type == "LEAVE" then return end
asyncOnlineFavourites()
end
--------------------------------------------------------------------------------
return {
name = "online",
caption = fgettext("Play Online"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_change
}

View File

@@ -0,0 +1,410 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local labels = {
leaves = {
fgettext("Opaque Leaves"),
fgettext("Simple Leaves"),
fgettext("Fancy Leaves")
},
node_highlighting = {
fgettext("Node Outlining"),
fgettext("Node Highlighting"),
fgettext("None")
},
filters = {
fgettext("No Filter"),
fgettext("Bilinear Filter"),
fgettext("Trilinear Filter")
},
mipmap = {
fgettext("No Mipmap"),
fgettext("Mipmap"),
fgettext("Mipmap + Aniso. Filter")
},
antialiasing = {
fgettext("None"),
fgettext("2x"),
fgettext("4x"),
fgettext("8x")
}
}
local dd_options = {
leaves = {
table.concat(labels.leaves, ","),
{"opaque", "simple", "fancy"}
},
node_highlighting = {
table.concat(labels.node_highlighting, ","),
{"box", "halo", "none"}
},
filters = {
table.concat(labels.filters, ","),
{"", "bilinear_filter", "trilinear_filter"}
},
mipmap = {
table.concat(labels.mipmap, ","),
{"", "mip_map", "anisotropic_filter"}
},
antialiasing = {
table.concat(labels.antialiasing, ","),
{"0", "2", "4", "8"}
}
}
local getSettingIndex = {
Leaves = function()
local style = core.settings:get("leaves_style")
for idx, name in pairs(dd_options.leaves[2]) do
if style == name then return idx end
end
return 1
end,
NodeHighlighting = function()
local style = core.settings:get("node_highlighting")
for idx, name in pairs(dd_options.node_highlighting[2]) do
if style == name then return idx end
end
return 1
end,
Filter = function()
if core.settings:get(dd_options.filters[2][3]) == "true" then
return 3
elseif core.settings:get(dd_options.filters[2][3]) == "false" and
core.settings:get(dd_options.filters[2][2]) == "true" then
return 2
end
return 1
end,
Mipmap = function()
if core.settings:get(dd_options.mipmap[2][3]) == "true" then
return 3
elseif core.settings:get(dd_options.mipmap[2][3]) == "false" and
core.settings:get(dd_options.mipmap[2][2]) == "true" then
return 2
end
return 1
end,
Antialiasing = function()
local antialiasing_setting = core.settings:get("fsaa")
for i = 1, #dd_options.antialiasing[2] do
if antialiasing_setting == dd_options.antialiasing[2][i] then
return i
end
end
return 1
end
}
local function antialiasing_fname_to_name(fname)
for i = 1, #labels.antialiasing do
if fname == labels.antialiasing[i] then
return dd_options.antialiasing[2][i]
end
end
return 0
end
local function dlg_confirm_reset_formspec(data)
return "size[8,3]" ..
"label[1,1;" .. fgettext("Are you sure to reset your singleplayer world?") .. "]" ..
"button[1,2;2.6,0.5;dlg_reset_singleplayer_confirm;" .. fgettext("Yes") .. "]" ..
"button[4,2;2.8,0.5;dlg_reset_singleplayer_cancel;" .. fgettext("No") .. "]"
end
local function dlg_confirm_reset_btnhandler(this, fields, dialogdata)
if fields["dlg_reset_singleplayer_confirm"] ~= nil then
local worldlist = core.get_worlds()
local found_singleplayerworld = false
for i = 1, #worldlist do
if worldlist[i].name == "singleplayerworld" then
found_singleplayerworld = true
gamedata.worldindex = i
end
end
if found_singleplayerworld then
core.delete_world(gamedata.worldindex)
end
core.create_world("singleplayerworld", 1)
worldlist = core.get_worlds()
found_singleplayerworld = false
for i = 1, #worldlist do
if worldlist[i].name == "singleplayerworld" then
found_singleplayerworld = true
gamedata.worldindex = i
end
end
end
this.parent:show()
this:hide()
this:delete()
return true
end
local function showconfirm_reset(tabview)
local new_dlg = dialog_create("reset_spworld",
dlg_confirm_reset_formspec,
dlg_confirm_reset_btnhandler,
nil)
new_dlg:set_parent(tabview)
tabview:hide()
new_dlg:show()
end
local function formspec(tabview, name, tabdata)
local tab_string =
"box[0,0;3.75,4.5;#999999]" ..
"checkbox[0.25,0;cb_smooth_lighting;" .. fgettext("Smooth Lighting") .. ";"
.. dump(core.settings:get_bool("smooth_lighting")) .. "]" ..
"checkbox[0.25,0.5;cb_particles;" .. fgettext("Particles") .. ";"
.. dump(core.settings:get_bool("enable_particles")) .. "]" ..
"checkbox[0.25,1;cb_3d_clouds;" .. fgettext("3D Clouds") .. ";"
.. dump(core.settings:get_bool("enable_3d_clouds")) .. "]" ..
"checkbox[0.25,1.5;cb_opaque_water;" .. fgettext("Opaque Water") .. ";"
.. dump(core.settings:get_bool("opaque_water")) .. "]" ..
"checkbox[0.25,2.0;cb_connected_glass;" .. fgettext("Connected Glass") .. ";"
.. dump(core.settings:get_bool("connected_glass")) .. "]" ..
"dropdown[0.25,2.8;3.5;dd_node_highlighting;" .. dd_options.node_highlighting[1] .. ";"
.. getSettingIndex.NodeHighlighting() .. "]" ..
"dropdown[0.25,3.6;3.5;dd_leaves_style;" .. dd_options.leaves[1] .. ";"
.. getSettingIndex.Leaves() .. "]" ..
"box[4,0;3.75,4.5;#999999]" ..
"label[4.25,0.1;" .. fgettext("Texturing:") .. "]" ..
"dropdown[4.25,0.55;3.5;dd_filters;" .. dd_options.filters[1] .. ";"
.. getSettingIndex.Filter() .. "]" ..
"dropdown[4.25,1.35;3.5;dd_mipmap;" .. dd_options.mipmap[1] .. ";"
.. getSettingIndex.Mipmap() .. "]" ..
"label[4.25,2.15;" .. fgettext("Antialiasing:") .. "]" ..
"dropdown[4.25,2.6;3.5;dd_antialiasing;" .. dd_options.antialiasing[1] .. ";"
.. getSettingIndex.Antialiasing() .. "]" ..
"label[4.25,3.45;" .. fgettext("Screen:") .. "]" ..
"checkbox[4.25,3.6;cb_autosave_screensize;" .. fgettext("Autosave screen size") .. ";"
.. dump(core.settings:get_bool("autosave_screensize")) .. "]" ..
"box[8,0;3.75,4.5;#999999]" ..
"checkbox[8.25,0;cb_shaders;" .. fgettext("Shaders") .. ";"
.. dump(core.settings:get_bool("enable_shaders")) .. "]"
if PLATFORM == "Android" then
tab_string = tab_string ..
"button[8,4.75;4.1,1;btn_reset_singleplayer;"
.. fgettext("Reset singleplayer world") .. "]"
else
tab_string = tab_string ..
"button[8,4.75;4,1;btn_change_keys;"
.. fgettext("Change keys") .. "]"
end
tab_string = tab_string ..
"button[0,4.75;4,1;btn_advanced_settings;"
.. fgettext("Advanced Settings") .. "]"
if core.settings:get("touchscreen_threshold") ~= nil then
tab_string = tab_string ..
"label[4.3,4.1;" .. fgettext("Touchthreshold (px)") .. "]" ..
"dropdown[3.85,4.55;3.85;dd_touchthreshold;0,10,20,30,40,50;" ..
((tonumber(core.settings:get("touchscreen_threshold")) / 10) + 1) .. "]"
end
if core.settings:get_bool("enable_shaders") then
tab_string = tab_string ..
"checkbox[8.25,0.5;cb_bumpmapping;" .. fgettext("Bump Mapping") .. ";"
.. dump(core.settings:get_bool("enable_bumpmapping")) .. "]" ..
"checkbox[8.25,1;cb_tonemapping;" .. fgettext("Tone Mapping") .. ";"
.. dump(core.settings:get_bool("tone_mapping")) .. "]" ..
"checkbox[8.25,1.5;cb_generate_normalmaps;" .. fgettext("Normal Mapping") .. ";"
.. dump(core.settings:get_bool("generate_normalmaps")) .. "]" ..
"checkbox[8.25,2;cb_parallax;" .. fgettext("Parallax Occlusion") .. ";"
.. dump(core.settings:get_bool("enable_parallax_occlusion")) .. "]" ..
"checkbox[8.25,2.5;cb_waving_water;" .. fgettext("Waving Water") .. ";"
.. dump(core.settings:get_bool("enable_waving_water")) .. "]" ..
"checkbox[8.25,3;cb_waving_leaves;" .. fgettext("Waving Leaves") .. ";"
.. dump(core.settings:get_bool("enable_waving_leaves")) .. "]" ..
"checkbox[8.25,3.5;cb_waving_plants;" .. fgettext("Waving Plants") .. ";"
.. dump(core.settings:get_bool("enable_waving_plants")) .. "]"
else
tab_string = tab_string ..
"tablecolumns[color;text]" ..
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
"table[8.33,0.7;3.5,4;shaders;" ..
"#888888," .. fgettext("Bump Mapping") .. "," ..
"#888888," .. fgettext("Tone Mapping") .. "," ..
"#888888," .. fgettext("Normal Mapping") .. "," ..
"#888888," .. fgettext("Parallax Occlusion") .. "," ..
"#888888," .. fgettext("Waving Water") .. "," ..
"#888888," .. fgettext("Waving Leaves") .. "," ..
"#888888," .. fgettext("Waving Plants") .. "," ..
";1]"
end
return tab_string
end
--------------------------------------------------------------------------------
local function handle_settings_buttons(this, fields, tabname, tabdata)
if fields["btn_advanced_settings"] ~= nil then
local adv_settings_dlg = create_adv_settings_dlg()
adv_settings_dlg:set_parent(this)
this:hide()
adv_settings_dlg:show()
--mm_texture.update("singleplayer", current_game())
return true
end
if fields["cb_smooth_lighting"] then
core.settings:set("smooth_lighting", fields["cb_smooth_lighting"])
return true
end
if fields["cb_particles"] then
core.settings:set("enable_particles", fields["cb_particles"])
return true
end
if fields["cb_3d_clouds"] then
core.settings:set("enable_3d_clouds", fields["cb_3d_clouds"])
return true
end
if fields["cb_opaque_water"] then
core.settings:set("opaque_water", fields["cb_opaque_water"])
return true
end
if fields["cb_connected_glass"] then
core.settings:set("connected_glass", fields["cb_connected_glass"])
return true
end
if fields["cb_autosave_screensize"] then
core.settings:set("autosave_screensize", fields["cb_autosave_screensize"])
return true
end
if fields["cb_shaders"] then
if (core.settings:get("video_driver") == "direct3d8" or
core.settings:get("video_driver") == "direct3d9") then
core.settings:set("enable_shaders", "false")
gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.")
else
core.settings:set("enable_shaders", fields["cb_shaders"])
end
return true
end
if fields["cb_bumpmapping"] then
core.settings:set("enable_bumpmapping", fields["cb_bumpmapping"])
return true
end
if fields["cb_tonemapping"] then
core.settings:set("tone_mapping", fields["cb_tonemapping"])
return true
end
if fields["cb_generate_normalmaps"] then
core.settings:set("generate_normalmaps", fields["cb_generate_normalmaps"])
return true
end
if fields["cb_parallax"] then
core.settings:set("enable_parallax_occlusion", fields["cb_parallax"])
return true
end
if fields["cb_waving_water"] then
core.settings:set("enable_waving_water", fields["cb_waving_water"])
return true
end
if fields["cb_waving_leaves"] then
core.settings:set("enable_waving_leaves", fields["cb_waving_leaves"])
end
if fields["cb_waving_plants"] then
core.settings:set("enable_waving_plants", fields["cb_waving_plants"])
return true
end
if fields["btn_change_keys"] then
core.show_keys_menu()
return true
end
if fields["cb_touchscreen_target"] then
core.settings:set("touchtarget", fields["cb_touchscreen_target"])
return true
end
if fields["btn_reset_singleplayer"] then
showconfirm_reset(this)
return true
end
--Note dropdowns have to be handled LAST!
local ddhandled = false
for i = 1, #labels.leaves do
if fields["dd_leaves_style"] == labels.leaves[i] then
core.settings:set("leaves_style", dd_options.leaves[2][i])
ddhandled = true
end
end
for i = 1, #labels.node_highlighting do
if fields["dd_node_highlighting"] == labels.node_highlighting[i] then
core.settings:set("node_highlighting", dd_options.node_highlighting[2][i])
ddhandled = true
end
end
if fields["dd_filters"] == labels.filters[1] then
core.settings:set("bilinear_filter", "false")
core.settings:set("trilinear_filter", "false")
ddhandled = true
elseif fields["dd_filters"] == labels.filters[2] then
core.settings:set("bilinear_filter", "true")
core.settings:set("trilinear_filter", "false")
ddhandled = true
elseif fields["dd_filters"] == labels.filters[3] then
core.settings:set("bilinear_filter", "false")
core.settings:set("trilinear_filter", "true")
ddhandled = true
end
if fields["dd_mipmap"] == labels.mipmap[1] then
core.settings:set("mip_map", "false")
core.settings:set("anisotropic_filter", "false")
ddhandled = true
elseif fields["dd_mipmap"] == labels.mipmap[2] then
core.settings:set("mip_map", "true")
core.settings:set("anisotropic_filter", "false")
ddhandled = true
elseif fields["dd_mipmap"] == labels.mipmap[3] then
core.settings:set("mip_map", "true")
core.settings:set("anisotropic_filter", "true")
ddhandled = true
end
if fields["dd_antialiasing"] then
core.settings:set("fsaa",
antialiasing_fname_to_name(fields["dd_antialiasing"]))
ddhandled = true
end
if fields["dd_touchthreshold"] then
core.settings:set("touchscreen_threshold", fields["dd_touchthreshold"])
ddhandled = true
end
return ddhandled
end
return {
name = "settings",
caption = fgettext("Settings"),
cbf_formspec = formspec,
cbf_button_handler = handle_settings_buttons
}

View File

@@ -0,0 +1,220 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
-- Update the cached supported proto info,
-- it may have changed after a change by the settings menu.
common_update_cached_supp_proto()
local fav_selected = menudata.favorites[tabdata.fav_selected]
local retval =
"label[9.5,0;".. fgettext("Name / Password") .. "]" ..
"field[0.25,3.35;5.5,0.5;te_address;;" ..
core.formspec_escape(core.settings:get("address")) .."]" ..
"field[5.75,3.35;2.25,0.5;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .."]" ..
"button[10,2.6;2,1.5;btn_mp_connect;".. fgettext("Connect") .. "]" ..
"field[9.8,1;2.6,0.5;te_name;;" ..
core.formspec_escape(core.settings:get("name")) .."]" ..
"pwdfield[9.8,2;2.6,0.5;te_pwd;]"
if tabdata.fav_selected and fav_selected then
if gamedata.fav then
retval = retval .. "button[7.7,2.6;2.3,1.5;btn_delete_favorite;" ..
fgettext("Del. Favorite") .. "]"
end
end
retval = retval .. "tablecolumns[" ..
image_column(fgettext("Favorite"), "favorite") .. ";" ..
image_column(fgettext("Ping"), "") .. ",padding=0.25;" ..
"color,span=3;" ..
"text,align=right;" .. -- clients
"text,align=center,padding=0.25;" .. -- "/"
"text,align=right,padding=0.25;" .. -- clients_max
image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
"color,span=1;" ..
"text,padding=1]" .. -- name
"table[-0.05,0;9.2,2.75;favourites;"
if #menudata.favorites > 0 then
local favs = core.get_favorites("local")
if #favs > 0 then
for i = 1, #favs do
for j = 1, #menudata.favorites do
if menudata.favorites[j].address == favs[i].address and
menudata.favorites[j].port == favs[i].port then
table.insert(menudata.favorites, i,
table.remove(menudata.favorites, j))
end
end
if favs[i].address ~= menudata.favorites[i].address then
table.insert(menudata.favorites, i, favs[i])
end
end
end
retval = retval .. render_serverlist_row(menudata.favorites[1], (#favs > 0))
for i = 2, #menudata.favorites do
retval = retval .. "," .. render_serverlist_row(menudata.favorites[i], (i <= #favs))
end
end
if tabdata.fav_selected then
retval = retval .. ";" .. tabdata.fav_selected .. "]"
else
retval = retval .. ";0]"
end
-- separator
retval = retval .. "box[-0.28,3.75;12.4,0.1;#FFFFFF]"
-- checkboxes
retval = retval ..
"checkbox[8.0,3.9;cb_creative;".. fgettext("Creative Mode") .. ";" ..
dump(core.settings:get_bool("creative_mode")) .. "]"..
"checkbox[8.0,4.4;cb_damage;".. fgettext("Enable Damage") .. ";" ..
dump(core.settings:get_bool("enable_damage")) .. "]"
-- buttons
retval = retval ..
"button[0,3.7;8,1.5;btn_start_singleplayer;" .. fgettext("Start Singleplayer") .. "]" ..
"button[0,4.5;8,1.5;btn_config_sp_world;" .. fgettext("Config mods") .. "]"
return retval
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
if fields.btn_start_singleplayer then
gamedata.selected_world = gamedata.worldindex
gamedata.singleplayer = true
core.start()
return true
end
if fields.favourites then
local event = core.explode_table_event(fields.favourites)
if event.type == "CHG" then
if event.row <= #menudata.favorites then
gamedata.fav = false
local favs = core.get_favorites("local")
local fav = menudata.favorites[event.row]
local address = fav.address
local port = fav.port
gamedata.serverdescription = fav.description
for i = 1, #favs do
if fav.address == favs[i].address and
fav.port == favs[i].port then
gamedata.fav = true
end
end
if address and port then
core.settings:set("address", address)
core.settings:set("remote_port", port)
end
tabdata.fav_selected = event.row
end
return true
end
end
if fields.btn_delete_favorite then
local current_favourite = core.get_table_index("favourites")
if not current_favourite then return end
core.delete_favorite(current_favourite)
asyncOnlineFavourites()
tabdata.fav_selected = nil
core.settings:set("address", "")
core.settings:set("remote_port", "30000")
return true
end
if fields.cb_creative then
core.settings:set("creative_mode", fields.cb_creative)
return true
end
if fields.cb_damage then
core.settings:set("enable_damage", fields.cb_damage)
return true
end
if fields.btn_mp_connect or fields.key_enter then
gamedata.playername = fields.te_name
gamedata.password = fields.te_pwd
gamedata.address = fields.te_address
gamedata.port = fields.te_port
local fav_idx = core.get_textlist_index("favourites")
if fav_idx and fav_idx <= #menudata.favorites and
menudata.favorites[fav_idx].address == fields.te_address and
menudata.favorites[fav_idx].port == fields.te_port then
local fav = menudata.favorites[fav_idx]
gamedata.servername = fav.name
gamedata.serverdescription = fav.description
if menudata.favorites_is_public and
not is_server_protocol_compat_or_error(
fav.proto_min, fav.proto_max) then
return true
end
else
gamedata.servername = ""
gamedata.serverdescription = ""
end
gamedata.selected_world = 0
core.settings:set("address", fields.te_address)
core.settings:set("remote_port", fields.te_port)
core.start()
return true
end
if fields.btn_config_sp_world then
local configdialog = create_configure_world_dlg(1)
if configdialog then
configdialog:set_parent(tabview)
tabview:hide()
configdialog:show()
end
return true
end
end
--------------------------------------------------------------------------------
local function on_activate(type,old_tab,new_tab)
if type == "LEAVE" then return end
asyncOnlineFavourites()
end
--------------------------------------------------------------------------------
return {
name = "main",
caption = fgettext("Main"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = on_activate
}

View File

@@ -0,0 +1,132 @@
--Minetest
--Copyright (C) 2014 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
--------------------------------------------------------------------------------
local function filter_texture_pack_list(list)
local retval = {}
for _, item in ipairs(list) do
if item ~= "base" then
retval[#retval + 1] = item
end
end
table.sort(retval)
table.insert(retval, 1, fgettext("None"))
return retval
end
--------------------------------------------------------------------------------
local function render_texture_pack_list(list)
local retval = ""
for i, v in ipairs(list) do
if v:sub(1, 1) ~= "." then
if retval ~= "" then
retval = retval .. ","
end
retval = retval .. core.formspec_escape(v)
end
end
return retval
end
--------------------------------------------------------------------------------
local function get_formspec(tabview, name, tabdata)
local retval = "label[4,-0.25;" .. fgettext("Select texture pack:") .. "]" ..
"textlist[4,0.25;7.5,5.0;TPs;"
local current_texture_path = core.settings:get("texture_path")
local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true))
local index = tonumber(core.settings:get("mainmenu_last_selected_TP"))
if not index then index = 1 end
if current_texture_path == "" then
retval = retval ..
render_texture_pack_list(list) ..
";" .. index .. "]"
return retval
end
local infofile = current_texture_path .. DIR_DELIM .. "description.txt"
-- This adds backwards compatibility for old texture pack description files named
-- "info.txt", and should be removed once all such texture packs have been updated
if not file_exists(infofile) then
infofile = current_texture_path .. DIR_DELIM .. "info.txt"
if file_exists(infofile) then
core.log("deprecated", "info.txt is deprecated. description.txt should be used instead.")
end
end
local infotext = ""
local f = io.open(infofile, "r")
if not f then
infotext = fgettext("No information available")
else
infotext = f:read("*all")
f:close()
end
local screenfile = current_texture_path .. DIR_DELIM .. "screenshot.png"
local no_screenshot
if not file_exists(screenfile) then
screenfile = nil
no_screenshot = defaulttexturedir .. "no_screenshot.png"
end
return retval ..
render_texture_pack_list(list) ..
";" .. index .. "]" ..
"image[0.25,0.25;4.05,2.7;" .. core.formspec_escape(screenfile or no_screenshot) .. "]" ..
"textarea[0.6,2.85;3.7,1.5;;" .. core.formspec_escape(infotext or "") .. ";]"
end
--------------------------------------------------------------------------------
local function main_button_handler(tabview, fields, name, tabdata)
if fields["TPs"] then
local event = core.explode_textlist_event(fields["TPs"])
if event.type == "CHG" or event.type == "DCL" then
local index = core.get_textlist_index("TPs")
core.settings:set("mainmenu_last_selected_TP", index)
local list = filter_texture_pack_list(core.get_dir_list(core.get_texturepath(), true))
local current_index = core.get_textlist_index("TPs")
if current_index and #list >= current_index then
local new_path = core.get_texturepath() .. DIR_DELIM .. list[current_index]
if list[current_index] == fgettext("None") then
new_path = ""
end
core.settings:set("texture_path", new_path)
end
end
return true
end
return false
end
--------------------------------------------------------------------------------
return {
name = "texturepacks",
caption = fgettext("Texturepacks"),
cbf_formspec = get_formspec,
cbf_button_handler = main_button_handler,
on_change = nil
}

View File

@@ -0,0 +1,185 @@
--Minetest
--Copyright (C) 2013 sapier
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
mm_texture = {}
--------------------------------------------------------------------------------
function mm_texture.init()
mm_texture.defaulttexturedir = core.get_texturepath() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
mm_texture.basetexturedir = mm_texture.defaulttexturedir
mm_texture.texturepack = core.settings:get("texture_path")
mm_texture.gameid = nil
end
--------------------------------------------------------------------------------
function mm_texture.update(tab,gamedetails)
if tab ~= "singleplayer" then
mm_texture.reset()
return
end
if gamedetails == nil then
return
end
mm_texture.update_game(gamedetails)
end
--------------------------------------------------------------------------------
function mm_texture.reset()
mm_texture.gameid = nil
local have_bg = false
local have_overlay = mm_texture.set_generic("overlay")
if not have_overlay then
have_bg = mm_texture.set_generic("background")
end
mm_texture.clear("header")
mm_texture.clear("footer")
core.set_clouds(false)
mm_texture.set_generic("footer")
mm_texture.set_generic("header")
if not have_bg then
if core.settings:get_bool("menu_clouds") then
core.set_clouds(true)
else
mm_texture.set_dirt_bg()
end
end
end
--------------------------------------------------------------------------------
function mm_texture.update_game(gamedetails)
if mm_texture.gameid == gamedetails.id then
return
end
local have_bg = false
local have_overlay = mm_texture.set_game("overlay",gamedetails)
if not have_overlay then
have_bg = mm_texture.set_game("background",gamedetails)
end
mm_texture.clear("header")
mm_texture.clear("footer")
core.set_clouds(false)
if not have_bg then
if core.settings:get_bool("menu_clouds") then
core.set_clouds(true)
else
mm_texture.set_dirt_bg()
end
end
mm_texture.set_game("footer",gamedetails)
mm_texture.set_game("header",gamedetails)
mm_texture.gameid = gamedetails.id
end
--------------------------------------------------------------------------------
function mm_texture.clear(identifier)
core.set_background(identifier,"")
end
--------------------------------------------------------------------------------
function mm_texture.set_generic(identifier)
--try texture pack first
if mm_texture.texturepack ~= nil then
local path = mm_texture.texturepack .. DIR_DELIM .."menu_" ..
identifier .. ".png"
if core.set_background(identifier,path) then
return true
end
end
if mm_texture.defaulttexturedir ~= nil then
local path = mm_texture.defaulttexturedir .. DIR_DELIM .."menu_" ..
identifier .. ".png"
if core.set_background(identifier,path) then
return true
end
end
return false
end
--------------------------------------------------------------------------------
function mm_texture.set_game(identifier, gamedetails)
if gamedetails == nil then
return false
end
if mm_texture.texturepack ~= nil then
local path = mm_texture.texturepack .. DIR_DELIM ..
gamedetails.id .. "_menu_" .. identifier .. ".png"
if core.set_background(identifier, path) then
return true
end
end
-- Find out how many randomized textures the subgame provides
local n = 0
local filename
local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false)
for i = 1, #menu_files do
filename = identifier .. "." .. i .. ".png"
if table.indexof(menu_files, filename) == -1 then
n = i - 1
break
end
end
-- Select random texture, 0 means standard texture
n = math.random(0, n)
if n == 0 then
filename = identifier .. ".png"
else
filename = identifier .. "." .. n .. ".png"
end
local path = gamedetails.path .. DIR_DELIM .. "menu" ..
DIR_DELIM .. filename
if core.set_background(identifier, path) then
return true
end
return false
end
function mm_texture.set_dirt_bg()
if mm_texture.texturepack ~= nil then
local path = mm_texture.texturepack .. DIR_DELIM .."default_dirt.png"
if core.set_background("background", path, true, 128) then
return true
end
end
-- Use universal fallback texture in textures/base/pack
local minimalpath = defaulttexturedir .. "menu_bg.png"
core.set_background("background", minimalpath, true, 128)
end

80
builtin/profiler/init.lua Normal file
View File

@@ -0,0 +1,80 @@
--Minetest
--Copyright (C) 2016 T4im
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function get_bool_default(name, default)
local val = core.settings:get_bool(name)
if val == nil then
return default
end
return val
end
local profiler_path = core.get_builtin_path()..DIR_DELIM.."profiler"..DIR_DELIM
local profiler = {}
local sampler = assert(loadfile(profiler_path .. "sampling.lua"))(profiler)
local instrumentation = assert(loadfile(profiler_path .. "instrumentation.lua"))(profiler, sampler, get_bool_default)
local reporter = dofile(profiler_path .. "reporter.lua")
profiler.instrument = instrumentation.instrument
---
-- Delayed registration of the /profiler chat command
-- Is called later, after `core.register_chatcommand` was set up.
--
function profiler.init_chatcommand()
local instrument_profiler = get_bool_default("instrument.profiler", false)
if instrument_profiler then
instrumentation.init_chatcommand()
end
local param_usage = "print [filter] | dump [filter] | save [format [filter]] | reset"
core.register_chatcommand("profiler", {
description = "handle the profiler and profiling data",
params = param_usage,
privs = { server=true },
func = function(name, param)
local command, arg0 = string.match(param, "([^ ]+) ?(.*)")
local args = arg0 and string.split(arg0, " ")
if command == "dump" then
core.log("action", reporter.print(sampler.profile, arg0))
return true, "Statistics written to action log"
elseif command == "print" then
return true, reporter.print(sampler.profile, arg0)
elseif command == "save" then
return reporter.save(sampler.profile, args[1] or "txt", args[2])
elseif command == "reset" then
sampler.reset()
return true, "Statistics were reset"
end
return false, string.format(
"Usage: %s\n" ..
"Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).",
param_usage
)
end
})
if not instrument_profiler then
instrumentation.init_chatcommand()
end
end
sampler.init()
instrumentation.init()
return profiler

View File

@@ -0,0 +1,232 @@
--Minetest
--Copyright (C) 2016 T4im
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local format, pairs, type = string.format, pairs, type
local core, get_current_modname = core, core.get_current_modname
local profiler, sampler, get_bool_default = ...
local instrument_builtin = get_bool_default("instrument.builtin", false)
local register_functions = {
register_globalstep = 0,
register_playerevent = 0,
register_on_placenode = 0,
register_on_dignode = 0,
register_on_punchnode = 0,
register_on_generated = 0,
register_on_newplayer = 0,
register_on_dieplayer = 0,
register_on_respawnplayer = 0,
register_on_prejoinplayer = 0,
register_on_joinplayer = 0,
register_on_leaveplayer = 0,
register_on_cheat = 0,
register_on_chat_message = 0,
register_on_player_receive_fields = 0,
register_on_craft = 0,
register_craft_predict = 0,
register_on_protection_violation = 0,
register_on_item_eat = 0,
register_on_punchplayer = 0,
register_on_player_hpchange = 0,
}
---
-- Create an unique instrument name.
-- Generate a missing label with a running index number.
--
local counts = {}
local function generate_name(def)
local class, label, func_name = def.class, def.label, def.func_name
if label then
if class or func_name then
return format("%s '%s' %s", class or "", label, func_name or ""):trim()
end
return format("%s", label):trim()
elseif label == false then
return format("%s", class or func_name):trim()
end
local index_id = def.mod .. (class or func_name)
local index = counts[index_id] or 1
counts[index_id] = index + 1
return format("%s[%d] %s", class or func_name, index, class and func_name or ""):trim()
end
---
-- Keep `measure` and the closure in `instrument` lean, as these, and their
-- directly called functions are the overhead that is caused by instrumentation.
--
local time, log = core.get_us_time, sampler.log
local function measure(modname, instrument_name, start, ...)
log(modname, instrument_name, time() - start)
return ...
end
--- Automatically instrument a function to measure and log to the sampler.
-- def = {
-- mod = "",
-- class = "",
-- func_name = "",
-- -- if nil, will create a label based on registration order
-- label = "" | false,
-- }
local function instrument(def)
if not def or not def.func then
return
end
def.mod = def.mod or get_current_modname()
local modname = def.mod
local instrument_name = generate_name(def)
local func = def.func
if not instrument_builtin and modname == "*builtin*" then
return func
end
return function(...)
-- This tail-call allows passing all return values of `func`
-- also called https://en.wikipedia.org/wiki/Continuation_passing_style
-- Compared to table creation and unpacking it won't lose `nil` returns
-- and is expected to be faster
-- `measure` will be executed after time() and func(...)
return measure(modname, instrument_name, time(), func(...))
end
end
local function can_be_called(func)
-- It has to be a function or callable table
return type(func) == "function" or
((type(func) == "table" or type(func) == "userdata") and
getmetatable(func) and getmetatable(func).__call)
end
local function assert_can_be_called(func, func_name, level)
if not can_be_called(func) then
-- Then throw an *helpful* error, by pointing on our caller instead of us.
error(format("Invalid argument to %s. Expected function-like type instead of '%s'.", func_name, type(func)), level + 1)
end
end
---
-- Wraps a registration function `func` in such a way,
-- that it will automatically instrument any callback function passed as first argument.
--
local function instrument_register(func, func_name)
local register_name = func_name:gsub("^register_", "", 1)
return function(callback, ...)
assert_can_be_called(callback, func_name, 2)
register_functions[func_name] = register_functions[func_name] + 1
return func(instrument {
func = callback,
func_name = register_name
}, ...)
end
end
local function init_chatcommand()
if get_bool_default("instrument.chatcommand", true) then
local orig_register_chatcommand = core.register_chatcommand
core.register_chatcommand = function(cmd, def)
def.func = instrument {
func = def.func,
label = "/" .. cmd,
}
orig_register_chatcommand(cmd, def)
end
end
end
---
-- Start instrumenting selected functions
--
local function init()
if get_bool_default("instrument.entity", true) then
-- Explicitly declare entity api-methods.
-- Simple iteration would ignore lookup via __index.
local entity_instrumentation = {
"on_activate",
"on_step",
"on_punch",
"rightclick",
"get_staticdata",
}
-- Wrap register_entity() to instrument them on registration.
local orig_register_entity = core.register_entity
core.register_entity = function(name, prototype)
local modname = get_current_modname()
for _, func_name in pairs(entity_instrumentation) do
prototype[func_name] = instrument {
func = prototype[func_name],
mod = modname,
func_name = func_name,
label = prototype.label,
}
end
orig_register_entity(name,prototype)
end
end
if get_bool_default("instrument.abm", true) then
-- Wrap register_abm() to automatically instrument abms.
local orig_register_abm = core.register_abm
core.register_abm = function(spec)
spec.action = instrument {
func = spec.action,
class = "ABM",
label = spec.label,
}
orig_register_abm(spec)
end
end
if get_bool_default("instrument.lbm", true) then
-- Wrap register_lbm() to automatically instrument lbms.
local orig_register_lbm = core.register_lbm
core.register_lbm = function(spec)
spec.action = instrument {
func = spec.action,
class = "LBM",
label = spec.label or spec.name,
}
orig_register_lbm(spec)
end
end
if get_bool_default("instrument.global_callback", true) then
for func_name, _ in pairs(register_functions) do
core[func_name] = instrument_register(core[func_name], func_name)
end
end
if get_bool_default("instrument.profiler", false) then
-- Measure overhead of instrumentation, but keep it down for functions
-- So keep the `return` for better optimization.
profiler.empty_instrument = instrument {
func = function() return end,
mod = "*profiler*",
class = "Instrumentation overhead",
label = false,
}
end
end
return {
register_functions = register_functions,
instrument = instrument,
init = init,
init_chatcommand = init_chatcommand,
}

View File

@@ -0,0 +1,277 @@
--Minetest
--Copyright (C) 2016 T4im
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local DIR_DELIM, LINE_DELIM = DIR_DELIM, "\n"
local table, unpack, string, pairs, io, os = table, unpack, string, pairs, io, os
local rep, sprintf, tonumber = string.rep, string.format, tonumber
local core, settings = core, core.settings
local reporter = {}
---
-- Shorten a string. End on an ellipsis if shortened.
--
local function shorten(str, length)
if str and str:len() > length then
return "..." .. str:sub(-(length-3))
end
return str
end
local function filter_matches(filter, text)
return not filter or string.match(text, filter)
end
local function format_number(number, fmt)
number = tonumber(number)
if not number then
return "N/A"
end
return sprintf(fmt or "%d", number)
end
local Formatter = {
new = function(self, object)
object = object or {}
object.out = {} -- output buffer
self.__index = self
return setmetatable(object, self)
end,
__tostring = function (self)
return table.concat(self.out, LINE_DELIM)
end,
print = function(self, text, ...)
if (...) then
text = sprintf(text, ...)
end
if text then
-- Avoid format unicode issues.
text = text:gsub("Ms", "µs")
end
table.insert(self.out, text or LINE_DELIM)
end,
flush = function(self)
table.insert(self.out, LINE_DELIM)
local text = table.concat(self.out, LINE_DELIM)
self.out = {}
return text
end
}
local widths = { 55, 9, 9, 9, 5, 5, 5 }
local txt_row_format = sprintf(" %%-%ds | %%%ds | %%%ds | %%%ds | %%%ds | %%%ds | %%%ds", unpack(widths))
local HR = {}
for i=1, #widths do
HR[i]= rep("-", widths[i])
end
-- ' | ' should break less with github than '-+-', when people are pasting there
HR = sprintf("-%s-", table.concat(HR, " | "))
local TxtFormatter = Formatter:new {
format_row = function(self, modname, instrument_name, statistics)
local label
if instrument_name then
label = shorten(instrument_name, widths[1] - 5)
label = sprintf(" - %s %s", label, rep(".", widths[1] - 5 - label:len()))
else -- Print mod_stats
label = shorten(modname, widths[1] - 2) .. ":"
end
self:print(txt_row_format, label,
format_number(statistics.time_min),
format_number(statistics.time_max),
format_number(statistics:get_time_avg()),
format_number(statistics.part_min, "%.1f"),
format_number(statistics.part_max, "%.1f"),
format_number(statistics:get_part_avg(), "%.1f")
)
end,
format = function(self, filter)
local profile = self.profile
self:print("Values below show absolute/relative times spend per server step by the instrumented function.")
self:print("A total of %d samples were taken", profile.stats_total.samples)
if filter then
self:print("The output is limited to '%s'", filter)
end
self:print()
self:print(
txt_row_format,
"instrumentation", "min Ms", "max Ms", "avg Ms", "min %", "max %", "avg %"
)
self:print(HR)
for modname,mod_stats in pairs(profile.stats) do
if filter_matches(filter, modname) then
self:format_row(modname, nil, mod_stats)
if mod_stats.instruments ~= nil then
for instrument_name, instrument_stats in pairs(mod_stats.instruments) do
self:format_row(nil, instrument_name, instrument_stats)
end
end
end
end
self:print(HR)
if not filter then
self:format_row("total", nil, profile.stats_total)
end
end
}
local CsvFormatter = Formatter:new {
format_row = function(self, modname, instrument_name, statistics)
self:print(
"%q,%q,%d,%d,%d,%d,%d,%f,%f,%f",
modname, instrument_name,
statistics.samples,
statistics.time_min,
statistics.time_max,
statistics:get_time_avg(),
statistics.time_all,
statistics.part_min,
statistics.part_max,
statistics:get_part_avg()
)
end,
format = function(self, filter)
self:print(
"%q,%q,%q,%q,%q,%q,%q,%q,%q,%q",
"modname", "instrumentation",
"samples",
"time min µs",
"time max µs",
"time avg µs",
"time all µs",
"part min %",
"part max %",
"part avg %"
)
for modname, mod_stats in pairs(self.profile.stats) do
if filter_matches(filter, modname) then
self:format_row(modname, "*", mod_stats)
if mod_stats.instruments ~= nil then
for instrument_name, instrument_stats in pairs(mod_stats.instruments) do
self:format_row(modname, instrument_name, instrument_stats)
end
end
end
end
end
}
local function format_statistics(profile, format, filter)
local formatter
if format == "csv" then
formatter = CsvFormatter:new {
profile = profile
}
else
formatter = TxtFormatter:new {
profile = profile
}
end
formatter:format(filter)
return formatter:flush()
end
---
-- Format the profile ready for display and
-- @return string to be printed to the console
--
function reporter.print(profile, filter)
if filter == "" then filter = nil end
return format_statistics(profile, "txt", filter)
end
---
-- Serialize the profile data and
-- @return serialized data to be saved to a file
--
local function serialize_profile(profile, format, filter)
if format == "lua" or format == "json" or format == "json_pretty" then
local stats = filter and {} or profile.stats
if filter then
for modname, mod_stats in pairs(profile.stats) do
if filter_matches(filter, modname) then
stats[modname] = mod_stats
end
end
end
if format == "lua" then
return core.serialize(stats)
elseif format == "json" then
return core.write_json(stats)
elseif format == "json_pretty" then
return core.write_json(stats, true)
end
end
-- Fall back to textual formats.
return format_statistics(profile, format, filter)
end
local worldpath = core.get_worldpath()
local function get_save_path(format, filter)
local report_path = settings:get("profiler.report_path") or ""
if report_path ~= "" then
core.mkdir(sprintf("%s%s%s", worldpath, DIR_DELIM, report_path))
end
return (sprintf(
"%s/%s/profile-%s%s.%s",
worldpath,
report_path,
os.date("%Y%m%dT%H%M%S"),
filter and ("-" .. filter) or "",
format
):gsub("[/\\]+", DIR_DELIM))-- Clean up delims
end
---
-- Save the profile to the world path.
-- @return success, log message
--
function reporter.save(profile, format, filter)
if not format or format == "" then
format = settings:get("profiler.default_report_format") or "txt"
end
if filter == "" then
filter = nil
end
local path = get_save_path(format, filter)
local output, io_err = io.open(path, "w")
if not output then
return false, "Saving of profile failed with: " .. io_err
end
local content, err = serialize_profile(profile, format, filter)
if not content then
output:close()
return false, "Saving of profile failed with: " .. err
end
output:write(content)
output:close()
local logmessage = "Profile saved to " .. path
core.log("action", logmessage)
return true, logmessage
end
return reporter

View File

@@ -0,0 +1,206 @@
--Minetest
--Copyright (C) 2016 T4im
--
--This program is free software; you can redistribute it and/or modify
--it under the terms of the GNU Lesser General Public License as published by
--the Free Software Foundation; either version 2.1 of the License, or
--(at your option) any later version.
--
--This program is distributed in the hope that it will be useful,
--but WITHOUT ANY WARRANTY; without even the implied warranty of
--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--GNU Lesser General Public License for more details.
--
--You should have received a copy of the GNU Lesser General Public License along
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local setmetatable = setmetatable
local pairs, format = pairs, string.format
local min, max, huge = math.min, math.max, math.huge
local core = core
local profiler = ...
-- Split sampler and profile up, to possibly allow for rotation later.
local sampler = {}
local profile
local stats_total
local logged_time, logged_data
local _stat_mt = {
get_time_avg = function(self)
return self.time_all/self.samples
end,
get_part_avg = function(self)
if not self.part_all then
return 100 -- Extra handling for "total"
end
return self.part_all/self.samples
end,
}
_stat_mt.__index = _stat_mt
function sampler.reset()
-- Accumulated logged time since last sample.
-- This helps determining, the relative time a mod used up.
logged_time = 0
-- The measurements taken through instrumentation since last sample.
logged_data = {}
profile = {
-- Current mod statistics (max/min over the entire mod lifespan)
-- Mod specific instrumentation statistics are nested within.
stats = {},
-- Current stats over all mods.
stats_total = setmetatable({
samples = 0,
time_min = huge,
time_max = 0,
time_all = 0,
part_min = 100,
part_max = 100
}, _stat_mt)
}
stats_total = profile.stats_total
-- Provide access to the most recent profile.
sampler.profile = profile
end
---
-- Log a measurement for the sampler to pick up later.
-- Keep `log` and its often called functions lean.
-- It will directly add to the instrumentation overhead.
--
function sampler.log(modname, instrument_name, time_diff)
if time_diff <= 0 then
if time_diff < 0 then
-- This **might** have happened on a semi-regular basis with huge mods,
-- resulting in negative statistics (perhaps midnight time jumps or ntp corrections?).
core.log("warning", format(
"Time travel of %s::%s by %dµs.",
modname, instrument_name, time_diff
))
end
-- Throwing these away is better, than having them mess with the overall result.
return
end
local mod_data = logged_data[modname]
if mod_data == nil then
mod_data = {}
logged_data[modname] = mod_data
end
mod_data[instrument_name] = (mod_data[instrument_name] or 0) + time_diff
-- Update logged time since last sample.
logged_time = logged_time + time_diff
end
---
-- Return a requested statistic.
-- Initialize if necessary.
--
local function get_statistic(stats_table, name)
local statistic = stats_table[name]
if statistic == nil then
statistic = setmetatable({
samples = 0,
time_min = huge,
time_max = 0,
time_all = 0,
part_min = 100,
part_max = 0,
part_all = 0,
}, _stat_mt)
stats_table[name] = statistic
end
return statistic
end
---
-- Update a statistic table
--
local function update_statistic(stats_table, time)
stats_table.samples = stats_table.samples + 1
-- Update absolute time (µs) spend by the subject
stats_table.time_min = min(stats_table.time_min, time)
stats_table.time_max = max(stats_table.time_max, time)
stats_table.time_all = stats_table.time_all + time
-- Update relative time (%) of this sample spend by the subject
local current_part = (time/logged_time) * 100
stats_table.part_min = min(stats_table.part_min, current_part)
stats_table.part_max = max(stats_table.part_max, current_part)
stats_table.part_all = stats_table.part_all + current_part
end
---
-- Sample all logged measurements each server step.
-- Like any globalstep function, this should not be too heavy,
-- but does not add to the instrumentation overhead.
--
local function sample(dtime)
-- Rare, but happens and is currently of no informational value.
if logged_time == 0 then
return
end
for modname, instruments in pairs(logged_data) do
local mod_stats = get_statistic(profile.stats, modname)
if mod_stats.instruments == nil then
-- Current statistics for each instrumentation component
mod_stats.instruments = {}
end
local mod_time = 0
for instrument_name, time in pairs(instruments) do
if time > 0 then
mod_time = mod_time + time
local instrument_stats = get_statistic(mod_stats.instruments, instrument_name)
-- Update time of this sample spend by the instrumented function.
update_statistic(instrument_stats, time)
-- Reset logged data for the next sample.
instruments[instrument_name] = 0
end
end
-- Update time of this sample spend by this mod.
update_statistic(mod_stats, mod_time)
end
-- Update the total time spend over all mods.
stats_total.time_min = min(stats_total.time_min, logged_time)
stats_total.time_max = max(stats_total.time_max, logged_time)
stats_total.time_all = stats_total.time_all + logged_time
stats_total.samples = stats_total.samples + 1
logged_time = 0
end
---
-- Setup empty profile and register the sampling function
--
function sampler.init()
sampler.reset()
if core.settings:get_bool("instrument.profiler") then
core.register_globalstep(function()
if logged_time == 0 then
return
end
return profiler.empty_instrument()
end)
core.register_globalstep(profiler.instrument {
func = sample,
mod = "*profiler*",
class = "Sampler (update stats)",
label = false,
})
else
core.register_globalstep(sample)
end
end
return sampler

1509
builtin/settingtypes.txt Normal file

File diff suppressed because it is too large Load Diff

2
client/serverlist/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*
!.gitignore

View File

@@ -0,0 +1,4 @@
void main(void)
{
gl_FragColor = gl_Color;
}

Some files were not shown because too many files have changed in this diff Show More